summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Fix the definition of AsTypeExpr. I'm still not sure thisJohn McCall2011-07-151-1/+1
| | | | | | | | | | is right --- shouldn't there be a TypeLoc in here somewhere? --- but at least it doesn't have a redundant QualType and a broken children() method. Noticed this while doing things in serialization. llvm-svn: 135257
* protect some calls to ConvertType when a function info is under constructionChris Lattner2011-07-151-3/+3
| | | | | | | to prevent recursive compilation problems. This fixes a failure of CodeGen/decl.c on x86-32 targets that don't fill in the coerce-to type. llvm-svn: 135256
* Enhance the IR type lowering code to be much smarter about recursively loweringChris Lattner2011-07-153-68/+172
| | | | | | | | | | | | | | | | | | | | | | | | | types. Fore xample, we used to lower: struct bar { int a; }; struct foo { void (*FP)(struct bar); } G; to: %struct.foo = type { {}* } since the function pointer would cause recursive translation of bar and we didn't know if that would get us into trouble. We are now smart enough to know that it is fine, so we get this type instead: %struct.foo = type { void (i32)* } Codegen still needs to be prepared for uncooperative types at any place, which is why I let the maximally uncooperative code sit around for awhile to help shake out the bugs. llvm-svn: 135244
* Create a new expression node, SubstNonTypeTemplateParmExpr,John McCall2011-07-155-0/+17
| | | | | | | | to represent a fully-substituted non-type template parameter. This should improve source fidelity, as well as being generically useful for diagnostics and such. llvm-svn: 135243
* Change intrinsic getter to take an ArrayRef, now that the underlying ↵Benjamin Kramer2011-07-147-113/+105
| | | | | | function in LLVM does. llvm-svn: 135155
* Reapply r134946 with fixes. Tested on Benjamin testcase and other test-suite ↵Bruno Cardoso Lopes2011-07-131-2/+10
| | | | | | failures. llvm-svn: 135091
* Emit debug info for extended vectors.Devang Patel2011-07-131-3/+0
| | | | llvm-svn: 135083
* Don't crash if defining -dealloc in a category.John McCall2011-07-131-3/+5
| | | | llvm-svn: 135054
* Okay, that rule about zero-length arrays applies to destroyingJohn McCall2011-07-133-53/+38
| | | | | | them, too. llvm-svn: 135038
* Arrays are permitted to be zero-length in some situations.John McCall2011-07-132-27/+27
| | | | llvm-svn: 135036
* Convert the standard default-construction loops to use phis andJohn McCall2011-07-132-84/+103
| | | | | | partial destruction. llvm-svn: 135033
* per john's advice, speculatively lower uses of forward-declared enums toChris Lattner2011-07-131-5/+12
| | | | | | | i32. They almost always end up this way in the end anyway, and if we get lucky, this avoids generating some bitcasts. llvm-svn: 135032
* PR10337 reminds me that calls return values, lets handle them justChris Lattner2011-07-131-3/+9
| | | | | | like arguments. Thanks PR10337! :) llvm-svn: 135030
* Aggressive dead code elimination.John McCall2011-07-132-80/+0
| | | | llvm-svn: 135029
* Generalize the routine for destroying an object with staticJohn McCall2011-07-132-49/+55
| | | | | | | storage duration, then explicitly exempt ownership-qualified types from it. llvm-svn: 135028
* Switch delete[] IR-generation over to the destroy framework,John McCall2011-07-131-78/+38
| | | | | | which implicitly makes it EH-safe as well. llvm-svn: 135025
* When compiling ::delete for a class with a virtual destructor, callDouglas Gregor2011-07-131-4/+19
| | | | | | | | the complete destructor and then invoke the global delete operator. Previously, we would invoke the deleting destructor, which calls the wrong delete operator. Fixes PR10341. llvm-svn: 135021
* Revert r134946Bruno Cardoso Lopes2011-07-121-8/+1
| | | | llvm-svn: 135004
* Generalize Cleanup::Emit's "isForEH" parameter into a setJohn McCall2011-07-1212-54/+89
| | | | | | of flags. No functionality change. llvm-svn: 134997
* Add more compiler workarounds. Should fix the build with old GCCs and MSVC.Benjamin Kramer2011-07-121-6/+10
| | | | llvm-svn: 134995
* Ugh, use this compiler workaround again.John McCall2011-07-121-3/+5
| | | | llvm-svn: 134989
* Switch field destruction over to use the new destroyer-based APIJohn McCall2011-07-126-399/+185
| | | | | | and kill a lot of redundant code. llvm-svn: 134988
* Second attempt at de-constifying LLVM Types in FunctionType::get(),Jay Foad2011-07-121-6/+4
| | | | | | StructType::get() and TargetData::getIntPtrType(). llvm-svn: 134982
* Work around a problem with a static helper's formulation in releaseChandler Carruth2011-07-121-5/+5
| | | | | | | | | | | | | | | builds introduced in r134972: lib/CodeGen/CGExpr.cpp:1294:7: error: no matching function for call to 'EmitBitCastOfLValueToProperType' lib/CodeGen/CGExpr.cpp:1278:1: note: candidate function not viable: no known conversion from 'CGBuilderTy' (aka 'IRBuilder<false>') to 'llvm::IRBuilder<> &' for 1st argument This fixes the issue by passing CodeGenFunction on down, and using its builder directly rather than passing just the builder down. This may not be the best / cleanest fix, Chris please review. It at least fixes builds. llvm-svn: 134977
* Fix a problem Eli ran into where we now reject incomplete arrays of Chris Lattner2011-07-122-9/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | uncompleted struct types. We now do what llvm-gcc does and compile them into [i8 x 0]. If the type is later completed, we make sure that it is appropriately cast. We compile the terrible example to something like this now: %struct.A = type { i32, i32, i32 } @g = external global [0 x i8] define void @_Z1fv() nounwind { entry: call void @_Z3fooP1A(%struct.A* bitcast ([0 x i8]* @g to %struct.A*)) ret void } declare void @_Z3fooP1A(%struct.A*) define %struct.A* @_Z2f2v() nounwind { entry: ret %struct.A* getelementptr inbounds ([0 x %struct.A]* bitcast ([0 x i8]* @g to [0 x %struct.A]*), i32 0, i64 1) } llvm-svn: 134972
* insert a bitcast in the 'expand' case of argument passing when needed. ThisChris Lattner2011-07-122-29/+40
| | | | | | fixes the -m32 build of oggenc. llvm-svn: 134971
* fix an unintended behavior change in the type system rewrite, which caused ↵Chris Lattner2011-07-121-4/+4
| | | | | | | | | | | | | | | | | | | | | us to compile stuff like this: typedef struct { int x, y, z; } foo_t; foo_t g; into: %"struct.<anonymous>" = type { i32, i32, i32 } we now get: %struct.foo_t = type { i32, i32, i32 } This doesn't change the behavior of the compiler, but makes the IR much easier to read. llvm-svn: 134969
* fix PR10335 by watching out for IR type compatibility in call argument lists.Chris Lattner2011-07-121-1/+5
| | | | llvm-svn: 134966
* add some aggressive assertions that call arguments match up to calleeChris Lattner2011-07-121-3/+40
| | | | | | expectations in EmitCall. Next patch will take this further. llvm-svn: 134962
* Fix a typo!Bruno Cardoso Lopes2011-07-121-1/+1
| | | | llvm-svn: 134952
* Do the same as r134946 for arrays. Add more testcases for avx x86_64 argBruno Cardoso Lopes2011-07-121-0/+7
| | | | | | passing. llvm-svn: 134951
* Revert r134888 (and related patches in other trees). It was causingBill Wendling2011-07-121-4/+6
| | | | | | | | | | | | | | an assert on Darwin llvm-gcc builds. Assertion failed: (castIsValid(op, S, Ty) && "Invalid cast!"), function Create, file /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.llvm-gcc-i386-darwin9-RA/llvm.src/lib/VMCore/Instructions.cpp, line 2067. etc. http://smooshlab.apple.com:8013/builders/llvm-gcc-i386-darwin9-RA/builds/2354 --- Reverse-merging r134888 into '.': U lib/CodeGen/CodeGenModule.cpp llvm-svn: 134950
* Fix one x86_64 abi issue and the test to actually look for the right thing,Bruno Cardoso Lopes2011-07-121-1/+8
| | | | | | which is: { <4 x float>, <4 x float> } should continue to go through memory. llvm-svn: 134946
* Do full-expression cleanups in a much more sensible way that still letsJohn McCall2011-07-125-96/+26
| | | | | | people write useful cleanup classes. llvm-svn: 134942
* Reapply r134754, which turns out to be working correctly and alsoBruno Cardoso Lopes2011-07-111-41/+73
| | | | | | add one more testcase. llvm-svn: 134934
* Emit partial destruction of structs with initializer lists.John McCall2011-07-111-20/+47
| | | | llvm-svn: 134913
* De-constify Types in StructType::get() and TargetData::getIntPtrType().Jay Foad2011-07-117-33/+32
| | | | llvm-svn: 134893
* Fix a lot of problems with the partial destruction of arrays:John McCall2011-07-113-86/+196
| | | | | | | | | | | - an off-by-one error in emission of irregular array limits for InitListExprs - use an EH partial-destruction cleanup within the normal array-destruction cleanup - get the branch destinations right for the empty check Also some refactoring which unfortunately obscures these changes. llvm-svn: 134890
* De-constify Types in FunctionType::get().Jay Foad2011-07-111-6/+4
| | | | llvm-svn: 134888
* Use cached types; no functionality change.John McCall2011-07-101-35/+18
| | | | llvm-svn: 134880
* implement a nice new optimization: CodeGenTypes::UpdateCompletedTypeChris Lattner2011-07-101-1/+1
| | | | | | | | | | | | | is called whenever a tag type is completed. We previously used that as the sign to layout the codegen representation for the tag type, which worked but meant that we laid out *every* completed type, whether it was used or not. Now we just lay out the type if we've already seen it somehow else. This means that we lay out types we've used but haven't seen a body for, but we don't lay out tons of stuff that noone cares about. llvm-svn: 134866
* enhance EmitLValueForFieldInitialization to do the proper pointer ↵Chris Lattner2011-07-101-9/+9
| | | | | | | | adjustment, allowing us to revert the other half of r134860. Now things are back to a relatively tidy state. llvm-svn: 134865
* revert part of r134860, which is empirically unnecessary after the proper fixChris Lattner2011-07-101-4/+0
| | | | llvm-svn: 134864
* keep track of whether being in a RS_StructPointer stateChris Lattner2011-07-102-2/+13
| | | | | | | | | | caused us to skip layout out a function accurately. If so, flush the type cache for both the function and struct case to ensure that any pointers to the functions get recomputed. This is overconservative, but with this patch clang can build itself again. llvm-svn: 134863
* change EmitLValueForField to cast the returned lvalue to the rightChris Lattner2011-07-101-13/+18
| | | | | | | type, even when in the struct case. This was one root issue that was causing type mismatches throughout the compiler. llvm-svn: 134862
* Fix the clang bootstrap and Jay's testcase from llvm-dev by being completelyChris Lattner2011-07-101-3/+30
| | | | | | | | | | conservative when converting a functiontype to IR when in a "pointer within a struct" context. This has the unfortunate sideeffect of compiling all function pointers inside of structs into "{}*" which, though correct, is ugly. This has the positive side effect of being correct, and it is pretty straight-forward to improve on this. llvm-svn: 134861
* when emitting pointer load from an lvalue or storing to an lvalue,Chris Lattner2011-07-101-0/+12
| | | | | | | do an explicit bitcast to whatever ConvertType produces. This will go with the next patch. llvm-svn: 134860
* how about we initialize RecursionState.Chris Lattner2011-07-102-2/+2
| | | | llvm-svn: 134855
* Rename CGT::VerifyFuncTypeComplete to isFuncTypeConvertible sinceChris Lattner2011-07-105-28/+65
| | | | | | | | | | | | | | | | | | it is a predicate, not an action. Change the return type to be a bool, not the incomplete member. Enhace it to detect the recursive compilation case, allowing us to compile Eli's testcase on llvmdev: struct T { struct T (*p)(void); } t; into: %struct.T = type { {}* } @t = common global %struct.T zeroinitializer, align 8 llvm-svn: 134853
* when an enum type is completed, only flush the type cache whenChris Lattner2011-07-091-2/+4
| | | | | | | the enum has already been converted. If not, there cannot be any types built on top of it, so there is no need to flush the cache. llvm-svn: 134841
OpenPOWER on IntegriCloud