541 Commits

Author SHA1 Message Date
Anders Carlsson
f8a71f08d1 Add the same 'ForVirtualBase' parameter to EmitCXXDestructorCall.
llvm-svn: 102882
2010-05-02 23:29:11 +00:00
Anders Carlsson
e11f9ce9dc Revert my last change and add a 'ForVirtualBase' parameter to EmitCXXConstructorCall instead.
llvm-svn: 102881
2010-05-02 23:20:53 +00:00
Anders Carlsson
4c638f1217 Pass the construction kind down to EmitCXXConstructorCall.
llvm-svn: 102880
2010-05-02 23:01:10 +00:00
Anders Carlsson
245820b9d9 Remove another unused function.
llvm-svn: 102871
2010-05-02 18:13:35 +00:00
Anders Carlsson
54eb4843b1 Remove an unused function.
llvm-svn: 102870
2010-05-02 18:12:22 +00:00
David Chisnall
ff5f88c38e As per Chris' request, return the Instruction from EmitCall and add the metadata in the caller.
llvm-svn: 102862
2010-05-02 13:41:58 +00:00
Douglas Gregor
b139cd5843 Complete reimplementation of the synthesis for implicitly-defined copy
assignment operators. 

Previously, Sema provided type-checking and template instantiation for
copy assignment operators, then CodeGen would synthesize the actual
body of the copy constructor. Unfortunately, the two were not in sync,
and CodeGen might pick a copy-assignment operator that is different
from what Sema chose, leading to strange failures, e.g., link-time
failures when CodeGen called a copy-assignment operator that was not
instantiation, run-time failures when copy-assignment operators were
overloaded for const/non-const references and the wrong one was
picked, and run-time failures when by-value copy-assignment operators
did not have their arguments properly copy-initialized.

This implementation synthesizes the implicitly-defined copy assignment
operator bodies in Sema, so that the resulting ASTs encode exactly
what CodeGen needs to do; there is no longer any special code in
CodeGen to synthesize copy-assignment operators. The synthesis of the
body is relatively simple, and we generate one of three different
kinds of copy statements for each base or member:

  - For a class subobject, call the appropriate copy-assignment
    operator, after overload resolution has determined what that is.
  - For an array of scalar types or an array of class types that have
    trivial copy assignment operators, construct a call to
    __builtin_memcpy.
  - For an array of class types with non-trivial copy assignment
    operators, synthesize a (possibly nested!) for loop whose inner
    statement calls the copy constructor.
  - For a scalar type, use built-in assignment.

This patch fixes at least a few tests cases in Boost.Spirit that were
failing because CodeGen picked the wrong copy-assignment operator
(leading to link-time failures), and I suspect a number of undiagnosed
problems will also go away with this change.

Some of the diagnostics we had previously have gotten worse with this
change, since we're going through generic code for our
type-checking. I will improve this in a subsequent patch.

llvm-svn: 102853
2010-05-01 20:49:11 +00:00
Anders Carlsson
aab3b57359 Simplify EmitClassAggrMemberwiseCopy.
llvm-svn: 102848
2010-05-01 17:02:18 +00:00
Anders Carlsson
ab826ad169 Clean up EmitClassMemberwiseCopy further.
llvm-svn: 102846
2010-05-01 16:54:05 +00:00
Anders Carlsson
820022c55c Get rid of a parameter from EmitClassMemberwiseCopy.
llvm-svn: 102845
2010-05-01 16:49:43 +00:00
David Chisnall
9eecafa480 Tweaked EmitCall() to permit the caller to provide some metadata to attach to the call site.
Used this in CGObjCGNU to attach metadata about message sends to permit speculative inlining.

llvm-svn: 102833
2010-05-01 11:15:56 +00:00
Anders Carlsson
d6c5391cd9 Remove an unnecessary parameter from EmitClassCopyAssignment.
llvm-svn: 102747
2010-04-30 19:45:28 +00:00
Anders Carlsson
2b4ec8d003 Remove an unnecessary argument to EmitClassCopyAssignment.
llvm-svn: 102674
2010-04-29 23:51:42 +00:00
Fariborz Jahanian
0dec1e0d56 IRGen for initialization/destruction of
ivar class objects (NeXt runtime).
(radar 7900343).

llvm-svn: 102533
2010-04-28 21:28:56 +00:00
Anders Carlsson
53e1ba948d Revert enough of my patches to fix self-host again :(
llvm-svn: 102289
2010-04-25 00:52:09 +00:00
Anders Carlsson
c4ba0cd2ea RenameGetAddressOfBaseOfCompleteClass to GetAddressOfDirectBaseInCompleteClass to reflect that it only handles direct bases.
llvm-svn: 102284
2010-04-24 23:01:49 +00:00
Anders Carlsson
26b6e23d57 More cleanup.
llvm-svn: 102282
2010-04-24 22:43:39 +00:00
Anders Carlsson
9523ad4fd3 Simplify EmitClassMemberwiseCopy now that it's only used for fields.
llvm-svn: 102281
2010-04-24 22:36:50 +00:00
Anders Carlsson
bea9e74e82 Rename GetAddressOfBaseClass to OldGetAddressOfBaseClass.
llvm-svn: 102275
2010-04-24 21:51:08 +00:00
Anders Carlsson
8a64c1c94c Change CodeGenFunction::GetAddressOfDerivedClass to take a BasePath.
llvm-svn: 102273
2010-04-24 21:23:59 +00:00
Anders Carlsson
d829a02514 Add a new GetAddressOfBaseClass overload that takes a base path and. Use it for derived-to-base casts.
llvm-svn: 102270
2010-04-24 21:06:20 +00:00
Douglas Gregor
914af2182b Handle compound assignment expressions (i += j) as lvalues, which is
permitted in C++ but not in C. Fixes PR6900. Clang can now handle all
of Boost.Lambda's regression tests.

llvm-svn: 102170
2010-04-23 04:16:32 +00:00
John McCall
2e6567ae60 Call PerformCopyInitialization to properly initialize the exception temporary
in a throw expression.  Use EmitAnyExprToMem to emit the throw expression,
which magically elides the final copy-constructor call (which raises a new
strict-compliance bug, but baby steps).  Give __cxa_throw a destructor pointer
if the exception type has a non-trivial destructor.

llvm-svn: 102039
2010-04-22 01:10:34 +00:00
John McCall
bf814c79b6 I failed to notice that my last patch wasn't doing as much as it could
because EmitBranch actually clears the insert point.  This version
actually accomplishes what I initially wanted.

llvm-svn: 101998
2010-04-21 11:18:06 +00:00
John McCall
2188696d98 Miscellaneous codegen cleanups. Mostly, don't create new basic blocks
just to save the current insertion state!  This change significantly
simplifies the IR CFG in exceptions code.

llvm-svn: 101996
2010-04-21 10:05:39 +00:00
Anders Carlsson
91baecfeb3 Back out r101911 and see if it makes the bots happy.
llvm-svn: 101921
2010-04-20 18:05:10 +00:00
Anders Carlsson
6a0227df49 Fix a bug which triggered the assertion I added yesterday. Basically, when we initialize the vtable pointer for a virtual base, and there was another path from the most derived class to another base with the same class type, we would use the wrong base.
llvm-svn: 101911
2010-04-20 16:22:16 +00:00
Anders Carlsson
652758c3ec Pass the nearest virtual base decl to InitializeVTablePointers. No functionality change right now.
llvm-svn: 101872
2010-04-20 05:22:15 +00:00
Fariborz Jahanian
7e9d52aaca Variation of objc_copyStruct API generation when
property (atomic/nonatomic) is of aggregate type with
gc'able member objects) (NeXT runtime).

llvm-svn: 101156
2010-04-13 18:32:24 +00:00
Fariborz Jahanian
08b0f66d2e Add support for objc_copyStruct to enforce
atomicity of aggregate properties in setter/getter
methods. wip.

llvm-svn: 101107
2010-04-13 00:38:05 +00:00
Benjamin Kramer
9e2e1c9024 Minor include pruning.
llvm-svn: 100007
2010-03-31 15:04:05 +00:00
Anders Carlsson
093bdff0c5 Factor emitting a call to a copy constructor out into a separate function.
llvm-svn: 99866
2010-03-30 03:27:09 +00:00
Anders Carlsson
b9fd57f198 Introduce a CXXTemporariesCleanupScope RAII object and use it to cleanup the temporaries code.
llvm-svn: 99865
2010-03-30 03:14:41 +00:00
Anders Carlsson
d589593c93 Reapply r99775 with a fix for a silly bug - we were setting the vtable pointer for all bases, even those without a vtable pointer :)
llvm-svn: 99777
2010-03-28 21:07:49 +00:00
Anders Carlsson
fcc9f91287 Looks like I broke self-host again :(.
llvm-svn: 99776
2010-03-28 20:55:21 +00:00
Anders Carlsson
74eab715ae More improvements to setting the vtable pointer. We now no longer set the vtable pointer for non-virtual primary bases. We also do a pre-order traversal of the class hierarchy; this is necessary in order to get the right vbase offset offsets in base ctors/dtors.
llvm-svn: 99775
2010-03-28 20:34:31 +00:00
Anders Carlsson
e87fae9afa Factor vtable pointer setting code out into a separate function.
llvm-svn: 99773
2010-03-28 19:40:00 +00:00
Anders Carlsson
1f9348c1fc Simplify InitializeVtablePtrs in preparation of making it work with construction vtables.
llvm-svn: 99609
2010-03-26 04:39:42 +00:00
Anders Carlsson
b35ea55e2e More vtable work; preparations for moving over to the new vtable layout code (finally).
llvm-svn: 99381
2010-03-24 03:57:14 +00:00
Anders Carlsson
95e0223baf Remove old thunks code.
llvm-svn: 99374
2010-03-24 00:57:54 +00:00
Anders Carlsson
bad991dbfd Add CodeGenFunction::GenerateThunk and implement it.
llvm-svn: 99365
2010-03-24 00:39:18 +00:00
Anders Carlsson
a864caff8c Rename CGVtableInfo to CodeGenVTables in preparation of adding another VTableInfo class.
llvm-svn: 99250
2010-03-23 04:11:45 +00:00
Daniel Dunbar
fe06df4bf3 C++: Add support for -fno-use-cxa-atexit.
- So much typing, so little gain...

Also, rename the __cxx_global_initialization function just to match llvm-gcc.

llvm-svn: 99039
2010-03-20 04:15:41 +00:00
Daniel Dunbar
7572284f4f IRgen: Inline GenerateCXXGlobal[VarDecl]InitFunc into sole caller.
llvm-svn: 99038
2010-03-20 04:15:29 +00:00
Chris Lattner
5cc15e058b add framework for ARM builtins, Patch by Edmund Grimley Evans!
llvm-svn: 97656
2010-03-03 19:03:45 +00:00
John McCall
d4f4b7f5ee Add proper target hooks for __builtin_extract_return_address and
__builtin_frob_return_address.  The implementations for both are
still trivial in the default case.

llvm-svn: 97638
2010-03-03 04:15:11 +00:00
Blaine Garst
fc83aa04db Unconditionally support block introspection data in a new field at the end
of the block descriptor field.  This field is the ObjC style @encode
signature of the implementation function, and was to this point
conditionally provided in the block literal data structure.  That
provisional support is removed.

Additionally, eliminate unused enumerations for the block literal flags field.
The first shipping ABI unconditionally set (1<<29) but this bit is unused
by the runtime, so the second ABI will unconditionally have (1<<30) set so
that the runtime can in fact distinguish whether the additional data is
present or not.

llvm-svn: 96989
2010-02-23 21:51:17 +00:00
John McCall
f8ff7b9fd1 Perform two more constructor/destructor code-size optimizations:
1) emit base destructors as aliases to their unique base class destructors
under some careful conditions.  This is enabled for the same targets that can
support complete-to-base aliases, i.e. not darwin.

2) Emit non-variadic complete constructors for classes with no virtual bases
as calls to the base constructor.  This is enabled on all targets and in
theory can trigger in situations that the alias optimization can't (mostly
involving virtual bases, mostly not yet supported).

These are bundled together because I didn't think it worthwhile to split them,
not because they really need to be.

llvm-svn: 96842
2010-02-23 00:48:20 +00:00
John McCall
b81884d347 More refactoring around constructor/destructor code generation.
Fix some bugs with function-try-blocks and simplify normal try-block
code generation.

This implementation excludes a deleting destructor's call to
operator delete() from the function-try-block, which I believe
is correct but which I can't find straightforward support for at
a moment's glance.

llvm-svn: 96670
2010-02-19 09:25:03 +00:00
John McCall
89b12b34f6 Extract out function-body code generation into its own method. No functionality
change.

llvm-svn: 96564
2010-02-18 03:17:58 +00:00