summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGValue.h
Commit message (Collapse)AuthorAgeFilesLines
...
* Use stronger typing for the flags on AggValueSlot and requireJohn McCall2011-08-251-33/+34
| | | | | | | creators to tell us whether something needs GC barriers. No functionality change. llvm-svn: 138581
* Restore correct use of GC barriers.John McCall2011-06-161-17/+36
| | | | llvm-svn: 133144
* Automatic Reference Counting.John McCall2011-06-151-8/+20
| | | | | | | | | | Language-design credit goes to a lot of people, but I particularly want to single out Blaine Garst and Patrick Beard for their contributions. Compiler implementation credit goes to Argyrios, Doug, Fariborz, and myself, in no particular order. llvm-svn: 133103
* More capturing of 'this': implicit member expressions. Getting thatJohn McCall2011-02-031-1/+1
| | | | | | | | | | | right for anonymous struct/union members led to me discovering some seemingly broken code in that area of Sema, which I fixed, partly by changing the representation of member pointer constants so that IndirectFieldDecls aren't expanded. This led to assorted cleanups with member pointers in CodeGen, and while I was doing that I saw some random other things to clean up. llvm-svn: 124785
* Kill the KVC l-value kind and calculate the base expression when emittingJohn McCall2010-12-041-21/+8
| | | | | | the l-value. llvm-svn: 120884
* Improve codegen for initializer lists to use memset more aggressivelyChris Lattner2010-12-021-3/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | when an initializer is variable (I handled the constant case in a previous patch). This has three pieces: 1. Enhance AggValueSlot to have a 'isZeroed' bit to tell CGExprAgg that the memory being stored into has previously been memset to zero. 2. Teach CGExprAgg to not emit stores of zero to isZeroed memory. 3. Teach CodeGenFunction::EmitAggExpr to scan initializers to determine whether they are profitable to emit a memset + inividual stores vs stores for everything. The heuristic used is that a global has to be more than 16 bytes and has to be 3/4 zero to be candidate for this xform. The two testcases are illustrative of the scenarios this catches. We now codegen test9 into: call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 400, i32 4, i1 false) %.array = getelementptr inbounds [100 x i32]* %Arr, i32 0, i32 0 %tmp = load i32* %X.addr, align 4 store i32 %tmp, i32* %.array and test10 into: call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 392, i32 8, i1 false) %tmp = getelementptr inbounds %struct.b* %S, i32 0, i32 0 %tmp1 = getelementptr inbounds %struct.a* %tmp, i32 0, i32 0 %tmp2 = load i32* %X.addr, align 4 store i32 %tmp2, i32* %tmp1, align 4 %tmp5 = getelementptr inbounds %struct.b* %S, i32 0, i32 3 %tmp10 = getelementptr inbounds %struct.a* %tmp5, i32 0, i32 4 %tmp11 = load i32* %X.addr, align 4 store i32 %tmp11, i32* %tmp10, align 4 Previously we produced 99 stores of zero for test9 and also tons for test10. This xforms should substantially speed up -O0 builds when it kicks in as well as reducing code size and optimizer heartburn on insane cases. This resolves PR279. llvm-svn: 120692
* Simplify the ASTs by consolidating ObjCImplicitGetterSetterExpr and ↵John McCall2010-12-021-8/+4
| | | | | | | | ObjCPropertyRefExpr into the latter. llvm-svn: 120643
* Reset the lifetime-managed flag between emission of the agg conditionalJohn McCall2010-11-171-2/+2
| | | | | | branches. Fixes PR8623. llvm-svn: 119408
* After discussion with Doug and John, I am revertingFariborz Jahanian2010-10-221-8/+1
| | | | | | the patch. llvm-svn: 117159
* Patch fixes miscompile with non-trivial copy constructors and Fariborz Jahanian2010-10-221-1/+8
| | | | | | statement expressions, //rdar: //8540501 llvm-svn: 117146
* Experimental TBAA support.Dan Gohman2010-10-141-3/+13
| | | | | | | This enables metadata generation by default, however the TBAA pass in the optimizer is still disabled for now. llvm-svn: 116536
* Removes unused setter.Fariborz Jahanian2010-09-161-3/+0
| | | | llvm-svn: 114085
* Further beautification: this pointer can now be typed.John McCall2010-09-161-5/+5
| | | | llvm-svn: 114061
* Initialize AggValueSlot's flags along all paths, plus minor beautification.John McCall2010-09-161-6/+8
| | | | | | Prospective fix for broken commit in r114045. llvm-svn: 114060
* Patch to move RequiresGCollection bit toFariborz Jahanian2010-09-161-14/+26
| | | | | | AggValueSlot slot. llvm-svn: 114045
* one piece of code is responsible for the lifetime of every aggregateJohn McCall2010-09-151-0/+63
| | | | | | | | | | | | | slot. The easiest way to do that was to bundle up the information we care about for aggregate slots into a new structure which demands that its creators at least consider the question. I could probably be convinced that the ObjC 'needs GC' bit should be rolled into this structure. Implement generalized copy elision. The main obstacle here is that IR-generation must be much more careful about making sure that exactly llvm-svn: 113962
* CGValue: Increase width of allowed alignment. We could switch to log2, but weDaniel Dunbar2010-08-261-1/+1
| | | | | | don't currently need the bits anyway. llvm-svn: 112173
* IRgen/CGValue: Give MakeAddrLValue() an alignment argument, and eliminate ↵Daniel Dunbar2010-08-211-9/+5
| | | | | | old form of MakeAddr(). llvm-svn: 111723
* IRgen: Move remaining LValue::Set... methods to LValue::set... (non-static) ↵Daniel Dunbar2010-08-211-15/+13
| | | | | | methods. llvm-svn: 111722
* IRgen/CGValue: Add getQuals(), so qualifiers can be modified on an LValue.Daniel Dunbar2010-08-211-0/+3
| | | | llvm-svn: 111719
* IRgen/LValue: Add LValue::setNonGC instead of SetObjCNonGC, for consistency ↵Daniel Dunbar2010-08-211-3/+3
| | | | | | with isNonGC(). llvm-svn: 111718
* IRgen: Add an LValue::MakeAddr variant which takes a type and uses that to buildDaniel Dunbar2010-08-211-0/+8
| | | | | | | | | the qualifiers. Also, add CodeGenFunction::MakeAddrLValue() helper function which passes in the ASTContext. llvm-svn: 111714
* IRgen/CGValue: Add alignment to LValue, and use that alignment when ↵Daniel Dunbar2010-08-211-6/+13
| | | | | | generating lvalue load/stores. llvm-svn: 111710
* IRgen/LValue: Rename SetQualifiers() to Initialize().Daniel Dunbar2010-08-211-7/+7
| | | | llvm-svn: 111708
* Adopt objc_assign_threadlocal() for __thread variables of GC types.Fariborz Jahanian2010-07-201-1/+8
| | | | | | Implements radar 8203301. llvm-svn: 108917
* CodeGen: Shrink RValue. 4 words -> 2 words.Benjamin Kramer2010-05-021-30/+25
| | | | llvm-svn: 102863
* IRgen: Move the bit-field access type into CGBitFieldInfo, and change ↵Daniel Dunbar2010-04-081-3/+9
| | | | | | bit-field LValues to just store the base address of object containing the bit-field. llvm-svn: 100745
* IRgen: Move BitFieldIsSigned bit into CGBitFieldInfo.Daniel Dunbar2010-04-061-9/+1
| | | | llvm-svn: 100513
* IRgen: Move BitField LValues to just hold a reference to the CGBitFieldInfo.Daniel Dunbar2010-04-051-22/+24
| | | | | | | | | - Unfortunately, this requires some horrible code in CGObjCMac which always allocats a CGBitFieldInfo because we don't currently build a proper layout for Objective-C classes. It needs to be cleaned up, but I don't want the bit-field cleanups to be blocked on that. llvm-svn: 100474
* Fix documentation.Mike Stump2009-11-031-1/+1
| | | | llvm-svn: 85901
* Patch fixes a code gen. bug in generation of objc_assign_ivarFariborz Jahanian2009-09-241-0/+5
| | | | | | (objc GC's API). llvm-svn: 82724
* Refactor the representation of qualifiers to bring ExtQualType out of theJohn McCall2009-09-241-52/+25
| | | | | | | | Type hierarchy. Demote 'volatile' to extended-qualifier status. Audit our use of qualifiers and fix a few places that weren't dealing with qualifiers quite right; many more remain. llvm-svn: 82705
* Miscellanous fixes in generatation of objc gc's write-barriers.Fariborz Jahanian2009-09-211-5/+5
| | | | llvm-svn: 82472
* Fixed a bug in generation of the new write-barriers when Fariborz Jahanian2009-09-181-2/+8
| | | | | | array syntax is used to derefernce and assign to ivar pointee. llvm-svn: 82183
* Remove tabs, and whitespace cleanups.Mike Stump2009-09-091-20/+20
| | | | llvm-svn: 81346
* Using "ObjCImplicitSetterGetterRefExpr" instead of ↵Fariborz Jahanian2009-08-201-4/+4
| | | | | | | | "ObjCImplctSetterGetterRefExpr". A field rename and more comments. llvm-svn: 79537
* Renamed ObjCKVCRefExpr to ObjCImplctSetterGetterRefExpr.Fariborz Jahanian2009-08-181-4/+5
| | | | | | | | Removed an unnecessary loop to get to setters incoming argument. Added DoxyGen comments. Still more work to do in this area (WIP). llvm-svn: 79365
* Preserve address space information through member accesses, e.g., Mon P Wang2009-07-221-3/+8
| | | | | | | __attribute__((address_space(1))) struct {int arr[ 3 ]; } *p1; ... = p1->arr[2]; // load from address space 1 llvm-svn: 76717
* Not setting all the fields is confusing...Mike Stump2009-05-281-0/+3
| | | | llvm-svn: 72506
* Add support for volatile RValues.Mike Stump2009-05-231-3/+8
| | | | llvm-svn: 72341
* Reflow some comments.Mike Stump2009-05-161-5/+5
| | | | llvm-svn: 71937
* Provide basic support for generation of objc2's Fariborz Jahanian2009-05-041-1/+10
| | | | | | | objc_assign_global API when assigning to global objective-c object pointer. llvm-svn: 70939
* Handle case of none gc'able objects regardless of theirFariborz Jahanian2009-02-211-2/+12
| | | | | | type. llvm-svn: 65205
* Some code simplification. ir gen for gc'able arrayFariborz Jahanian2009-02-191-5/+6
| | | | | | of objects in objc. llvm-svn: 64992
* fix volatile handling with ExtVectorElementExpr, so that weChris Lattner2009-02-161-2/+6
| | | | | | | | | | | emit two volatile loads for: typedef __attribute__(( ext_vector_type(4) )) float float4; float test(volatile float4 *P) { return P->x+P->y; } llvm-svn: 64683
* Remove tabs.Nate Begeman2008-12-161-3/+3
| | | | llvm-svn: 61097
* Implemented ir-gen for 'implicit' properties using the new AST nodes.Fariborz Jahanian2008-11-221-1/+21
| | | | llvm-svn: 59886
* Fields of ivars of struct types are considered ivarsFariborz Jahanian2008-11-211-2/+2
| | | | | | themselves for gc API generation purposes. llvm-svn: 59828
* Support generation of objc_assign_ivar for ivarFariborz Jahanian2008-11-201-0/+10
| | | | | | write-barriers. llvm-svn: 59748
* More of objective-c's gc code-gen. Treat objective-cFariborz Jahanian2008-11-191-3/+4
| | | | | | objects as __strong when attribute unspecified. llvm-svn: 59654
OpenPOWER on IntegriCloud