Commit Graph

631 Commits

Author SHA1 Message Date
Akira Hatanaka 0add6aa837 [CodeGen] Fix an assert in CodeGenFunction::EmitFunctionEpilog
The assert is triggered because isObjCRetainableType() is called on the
canonicalized return type that has been stripped of the typedefs and
attributes attached to it. To fix this assert, this commit gets the
original return type from CurCodeDecl or BlockInfo and uses it instead
of the canoicalized type.

rdar://problem/24470031

Differential Revision: http://reviews.llvm.org/D16914


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261151 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-17 21:09:50 +00:00
Benjamin Kramer 074fcba8b6 RValue refs do not work that way.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260823 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-13 16:00:13 +00:00
Richard Smith 0f7f466fd0 Fix undefined behavior when compiling in C++14 due to sized operator delete
being called with the wrong size: convert CGFunctionInfo to use TrailingObjects
and ask TrailingObjects to provide a working 'operator delete' for us.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260181 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-09 01:05:04 +00:00
David Majnemer 9200182f8f [WinEH] Annotate calls to __RTtypeid with a funclet bundle
Clang's CodeGen has several paths which end up invoking or calling a
function. The one that we used for calls to __RTtypeid did not
appropriately annotate the call with a funclet bundle.

This fixes PR26329.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258877 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-26 23:14:47 +00:00
Betul Buyukkurt 7ff19db582 Clang changes for value profiling
Differential Revision: http://reviews.llvm.org/D8940



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258650 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-23 22:50:44 +00:00
Sanjay Patel 4697bd07db fix formatting; NFC
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258097 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-18 22:15:33 +00:00
Chad Rosier 7e5b11a533 [Driver] Add support for -fno-builtin-foo options.
Addresses PR4941 and rdar://6756912.
http://reviews.llvm.org/D15195

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@256937 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-06 14:35:46 +00:00
David Majnemer 959620c9de [WinEH] Update clang to use operand bundles on call sites
This updates clang to use bundle operands to associate an invoke with
the funclet which it is contained within.

Depends on D15517.

Differential Revision: http://reviews.llvm.org/D15518

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255675 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-15 21:27:59 +00:00
David Majnemer 29849678b0 Update clang to use the updated LLVM EH instructions
Depends on D15139.

Reviewers: rnk

Differential Revision: http://reviews.llvm.org/D15140

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255423 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-12 05:39:21 +00:00
George Burgess IV 7727f3dca1 Add the `pass_object_size` attribute to clang.
`pass_object_size` is our way of enabling `__builtin_object_size` to
produce high quality results without requiring inlining to happen
everywhere.

A link to the design doc for this attribute is available at the
Differential review link below.

Differential Revision: http://reviews.llvm.org/D13263


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@254554 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-02 21:58:08 +00:00
Samuel Antao 0cb5f3abb0 Preserve exceptions information during calls code generation.
This patch changes the generation of CGFunctionInfo to contain 
the FunctionProtoType if it is available. This enables the code 
generation for call instructions to look into this type for 
exception information and therefore generate better quality 
IR - it will not create invoke instructions for functions that 
are know not to throw.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@253926 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-23 22:04:44 +00:00
Akira Hatanaka 361b11deda Add support for function attribute 'disable_tail_calls'.
The ``disable_tail_calls`` attribute instructs the backend to not
perform tail call optimization inside the marked function.

For example, 

int callee(int);

int foo(int a) __attribute__((disable_tail_calls)) {
  return callee(a); // This call is not tail-call optimized.
}

Note that this attribute is different from 'not_tail_called', which
prevents tail-call optimization to the marked function.

rdar://problem/8973573

Differential Revision: http://reviews.llvm.org/D12547


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252986 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-13 00:42:21 +00:00
Eric Christopher e293efa56f Extract out a function onto CodeGenModule for getting the map of
features for a particular function, then use it to clean up some
code.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252819 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-11 23:05:08 +00:00
Yaron Keren ba6605c31d Replace tab with 8 spaces, NFC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252426 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-08 22:01:45 +00:00
Akira Hatanaka 08bdfb571a Add support for function attribute 'not_tail_called'.
This attribute is used to prevent tail-call optimizations to the marked
function. For example, in the following piece of code, foo1 will not be
tail-call optimized: 

int __attribute__((not_tail_called)) foo1(int);

int foo2(int a) {
  return foo1(a); // Tail-call optimization is not performed.
}

The attribute has effect only on statically bound calls. It has no
effect on indirect calls. Also, virtual functions and objective-c
methods cannot be marked as 'not_tail_called'.

rdar://problem/22667622

Differential Revision: http://reviews.llvm.org/D12922


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252369 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-06 23:56:15 +00:00
Duncan P. N. Exon Smith 2ceddccf8f CodeGen: Remove implicit ilist iterator conversions, NFC
Make ilist iterator conversions explicit in clangCodeGen.  Eventually
I'll remove them everywhere.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252358 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-06 23:00:41 +00:00
Reid Kleckner 8207ab01d3 [WinEH] Mark calls inside cleanups as noinline
This works around PR25162. The MSVC tables make it very difficult to
correctly inline a C++ destructor that contains try / catch.  We've
attempted to address PR25162 in LLVM's backend, but it feels pretty
infeasible.  MSVC and ICC both appear to avoid inlining such complex
destructors.

Long term, we want to fix this by making the inliner smart enough to
know when it is inlining into a cleanup, so it can inline simple
destructors (~unique_ptr and ~vector) while avoiding destructors
containing try / catch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251576 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-28 23:06:42 +00:00
Benjamin Kramer 07c6519211 Move global classes into anonymous namespaces. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251528 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-28 17:16:26 +00:00
John McCall f36e93a88a Unify the ObjC entrypoint caches.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250918 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-21 18:06:43 +00:00
Angel Garcia Gomez d162035b9b Roll-back r250822.
Summary: It breaks the build for the ASTMatchers

Subscribers: klimek, cfe-commits

Differential Revision: http://reviews.llvm.org/D13893

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250827 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-20 13:23:58 +00:00
Angel Garcia Gomez e83bf34da9 Apply modernize-use-default to clang.
Summary: Replace empty bodies of default constructors and destructors with '= default'.

Reviewers: bkramer, klimek

Subscribers: klimek, alexfh, cfe-commits

Differential Revision: http://reviews.llvm.org/D13890

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250822 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-20 12:52:55 +00:00
Eric Christopher cea709e690 Add an error when calling a builtin that requires features that don't
match the feature set of the function that they're being called from.

This ensures that we can effectively diagnose some[1] code that would
instead ICE in the backend with a failure to select message.

Example:

__m128d foo(__m128d a, __m128d b) {
  return __builtin_ia32_addsubps(b, a);
}

compiled for normal x86_64 via:

clang -target x86_64-linux-gnu -c

would fail to compile in the back end because the normal subtarget
features for x86_64 only include sse2 and the builtin requires sse3.

[1] We're still not erroring on:

__m128i bar(__m128i const *p) { return _mm_lddqu_si128(p); }

where we should fail and error on an always_inline function being
inlined into a function that doesn't support the subtarget features
required.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250473 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-15 23:47:11 +00:00
Benjamin Kramer aa1247dbae [CodeGen] Remove dead code. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250418 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-15 15:29:40 +00:00
Reid Kleckner f04251164b Don't emit exceptional stackrestore cleanups around inalloca functions
The backend restores the stack pointer after recovering from an
exception.  This is similar to r245879, but it doesn't try to use the
normal cleanup mechanism, so hopefully it won't cause the same breakage.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249640 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-08 00:17:45 +00:00
Charles Davis 69b5694b76 Support __builtin_ms_va_list.
Summary:
This change adds support for `__builtin_ms_va_list`, a GCC extension for
variadic `ms_abi` functions. The existing `__builtin_va_list` support is
inadequate for this because `va_list` is defined differently in the Win64
ABI vs. the System V/AMD64 ABI.

Depends on D1622.

Reviewers: rsmith, rnk, rjmccall

CC: cfe-commits

Differential Revision: http://reviews.llvm.org/D1623

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247941 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-17 20:55:33 +00:00
Piotr Padlewski 81654dc1dd Generating assumption loads of vptr after ctor call (fixed)
Generating call assume(icmp %vtable, %global_vtable) after constructor
call for devirtualization purposes.

For more info go to:
http://lists.llvm.org/pipermail/cfe-dev/2015-July/044227.html

Edit:
Fixed version because of PR24479 and other bug caused in chrome.
After this patch got reverted because of ScalarEvolution bug (D12719)
Merged after John McCall big patch (Added Address).

http://reviews.llvm.org/D11859
http://reviews.llvm.org/D12865

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247646 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-15 00:37:06 +00:00
Akira Hatanaka 218bc14fa5 Record function attribute "stackrealign" instead of using backend option
-force-align-stack.

Also, make changes to the driver so that -mno-stack-realign is no longer
an option exposed to the end-user that disallows stack realignment in
the backend.

Differential Revision: http://reviews.llvm.org/D11815


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247451 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 18:55:09 +00:00
David Majnemer 2affb95d6d [MS ABI] Make member pointers return true for isIncompleteType
The type of a member pointer is incomplete if it has no inheritance
model.  This lets us reuse more general logic already embedded in clang.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247346 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-10 21:52:00 +00:00
Piotr Padlewski 2d836afad9 Revert "Generating assumption loads of vptr after ctor call (fixed)"
It seems that there is small bug, and we can't generate assume loads
when some virtual functions have internal visibiliy
This reverts commit 982bb7d966.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247332 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-10 20:18:30 +00:00
John McCall 7812075ff5 Don't crash when emitting a block under returns_nonnull.
rdar://22071955

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247228 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-10 00:57:46 +00:00
Piotr Padlewski 982bb7d966 Generating assumption loads of vptr after ctor call (fixed)
Generating call assume(icmp %vtable, %global_vtable) after constructor
call for devirtualization purposes.

For more info go to:
http://lists.llvm.org/pipermail/cfe-dev/2015-July/044227.html

Edit:
Fixed version because of PR24479.
After this patch got reverted because of ScalarEvolution bug (D12719)
Merged after John McCall big patch (Added Address).

http://reviews.llvm.org/D11859

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247199 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-09 22:20:28 +00:00
David Majnemer b6cfa3dd32 [MS ABI] Don't crash on references to pointers to members in args
We know that a reference can always be dereferenced.  However, we don't
always know the number of bytes if the reference's pointee type is
incomplete.  This case was correctly handled but we didn't consider the
case where the type is complete but we cannot calculate its size for ABI
specific reasons.  In this specific case, a member pointer's size is
available only under certain conditions.

This fixes PR24703.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247188 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-09 20:57:59 +00:00
Jakub Kuderski 97a0d7a85a findDominatingStoreToReturn in CGCall.cpp didn't check if a candidate store
instruction used the ReturnValue as pointer operand or value operand. This
led to wrong code gen - in later stages (load-store elision code) the found
store and its operand would be erased, causing ReturnValue to become a <badref>.

The patch adds a check that makes sure that ReturnValue is a pointer operand of
store instruction. Regression test is also added.

This fixes PR24386.
Differential Revision: http://reviews.llvm.org/D12400


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247003 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-08 10:36:42 +00:00
John McCall f4ddf94ecb Compute and preserve alignment more faithfully in IR-generation.
Introduce an Address type to bundle a pointer value with an
alignment.  Introduce APIs on CGBuilderTy to work with Address
values.  Change core APIs on CGF/CGM to traffic in Address where
appropriate.  Require alignments to be non-zero.  Update a ton
of code to compute and propagate alignment information.

As part of this, I've promoted CGBuiltin's EmitPointerWithAlignment
helper function to CGF and made use of it in a number of places in
the expression emitter.

The end result is that we should now be significantly more correct
when performing operations on objects that are locally known to
be under-aligned.  Since alignment is not reliably tracked in the
type system, there are inherent limits to this, but at least we
are no longer confused by standard operations like derived-to-base
conversions and array-to-pointer decay.  I've also fixed a large
number of bugs where we were applying the complete-object alignment
to a pointer instead of the non-virtual alignment, although most of
these were hidden by the very conservative approach we took with
member alignment.

Also, because IRGen now reliably asserts on zero alignments, we
should no longer be subject to an absurd but frustrating recurring
bug where an incomplete type would report a zero alignment and then
we'd naively do a alignmentAtOffset on it and emit code using an
alignment equal to the largest power-of-two factor of the offset.

We should also now be emitting much more aggressive alignment
attributes in the presence of over-alignment.  In particular,
field access now uses alignmentAtOffset instead of min.

Several times in this patch, I had to change the existing
code-generation pattern in order to more effectively use
the Address APIs.  For the most part, this seems to be a strict
improvement, like doing pointer arithmetic with GEPs instead of
ptrtoint.  That said, I've tried very hard to not change semantics,
but it is likely that I've failed in a few places, for which I
apologize.

ABIArgInfo now always carries the assumed alignment of indirect and
indirect byval arguments.  In order to cut down on what was already
a dauntingly large patch, I changed the code to never set align
attributes in the IR on non-byval indirect arguments.  That is,
we still generate code which assumes that indirect arguments have
the given alignment, but we don't express this information to the
backend except where it's semantically required (i.e. on byvals).
This is likely a minor regression for those targets that did provide
this information, but it'll be trivial to add it back in a later
patch.

I partially punted on applying this work to CGBuiltin.  Please
do not add more uses of the CreateDefaultAligned{Load,Store}
APIs; they will be going away eventually.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246985 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-08 08:05:57 +00:00
Eric Christopher 9cf766fc98 Migrate the target attribute parsing code to returning an instance
every time it's called rather than attempting to cache the result.
It's unlikely to be called frequently and the overhead of using
it in the first place is already factored out.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246706 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-02 20:40:12 +00:00
Eric Christopher a4acaa149d Migrate the target attribute parsing code into an extension off of
the main attribute and cache the results so we don't have to parse
a single attribute more than once.

This reapplies r246596 with a fix for an uninitialized class member,
and a couple of cleanups and formatting changes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246610 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-02 00:12:02 +00:00
Eric Christopher f33b1c5909 Revert "Migrate the target attribute parsing code into an extension off of"
This is failing in release mode. Revert while I figure out what's happening.

This reverts commit r246596.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246598 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-01 22:37:03 +00:00
Eric Christopher 05248fe1f3 Migrate the target attribute parsing code into an extension off of
the main attribute and cache the results so we don't have to parse
a single attribute more than once.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246596 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-01 22:03:58 +00:00
Eric Christopher 2cdc7ef842 Use hasAttr, not getAttr if we're just checking for presence.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246595 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-01 22:03:56 +00:00
Eric Christopher 228710dfaa Revert "Pull the target attribute parsing out of CGCall and onto TargetInfo."
This reverts commit r246468 while we figure out what to do about Basic and AST.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246508 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-31 23:19:55 +00:00
Eric Christopher c26554dd3b Pull the target attribute parsing out of CGCall and onto TargetInfo.
Also:
  - Add a typedef to make working with the result easier.
  - Update callers to use the new function.
  - Make initFeatureMap out of line.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246468 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-31 18:39:22 +00:00
Steven Wu 85b5116ba2 Revert r246214 and r246213
These two commits causes llvm LTO bootstrap to hang in ScalarEvolution.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246282 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-28 07:14:10 +00:00
Eric Christopher 5af2fd470c Merge the two feature map setting functions into a single function
and replace all callers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246259 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-28 02:13:58 +00:00
Eric Christopher 77a43fc3b5 Use an explicit assignment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246225 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 22:20:03 +00:00
Piotr Padlewski b50aff8739 Generating assumption loads of vptr after ctor call (fixed)
Generating call assume(icmp %vtable, %global_vtable) after constructor
call for devirtualization purposes.

For more info go to:
http://lists.llvm.org/pipermail/cfe-dev/2015-July/044227.html

Edit:
Fixed version because of PR24479.

http://reviews.llvm.org/D11859

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246213 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 21:35:37 +00:00
Eric Christopher 40b29f5a3f Target attribute syntax compatibility fix - gcc uses no- rather than mno-.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246197 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 20:05:48 +00:00
Eric Christopher 11b84265b4 Rewrite the code generation handling for function feature and cpu attributes.
A couple of changes here:

a) Do less work in the case where we don't have a target attribute on the
function. We've already canonicalized the attributes for the function -
no need to do more work.

b) Use the newer canonicalized feature adding functions from TargetInfo
to do the work when we do have a target attribute. This enables us to diagnose
some warnings in the case of conflicting written attributes (only ppc does
this today) and also make sure to get all of the features for a cpu that's
listed rather than just change the cpu.

Updated all testcases accordingly and added a new testcase to verify that we'll
error out on ppc if we have some incompatible options using the existing diagnosis
framework there.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246195 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 19:59:34 +00:00
Nico Weber 3cf9e81e9f Revert r245879. Speculative, might have caused crbug.com/524604
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@245965 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-25 18:43:32 +00:00
David Majnemer 97161a74dc [MS ABI] Don't emit stackrestore in cleanups
The stackrestore intrinsic isn't meaningful inside of a cleanup funclet.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@245879 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-24 21:34:21 +00:00
Piotr Padlewski 11767c398a Revert "Generating assumption loads of vptr after ctor call (fixed)"
Reverting because of 245721

This reverts commit 552658e2b6.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@245727 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-21 19:49:41 +00:00