summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
* Fix for PR341Chris Lattner2004-07-152-3/+3
| | | | llvm-svn: 14845
* Revert stuff that I didn't mean to checkinChris Lattner2004-07-152-3/+2
| | | | llvm-svn: 14844
* Fixes for PR341Chris Lattner2004-07-153-15/+16
| | | | llvm-svn: 14843
* Fix for PR341Chris Lattner2004-07-151-1/+1
| | | | llvm-svn: 14842
* Patches towards fixing PR341Chris Lattner2004-07-158-14/+15
| | | | llvm-svn: 14841
* Progress on PR341Chris Lattner2004-07-155-35/+36
| | | | llvm-svn: 14840
* Fixes working towards PR341Chris Lattner2004-07-156-22/+23
| | | | llvm-svn: 14839
* Bug fixes for PR341Chris Lattner2004-07-152-5/+19
| | | | llvm-svn: 14838
* Implement folding of expressions like 'uint cast (int* getelementptr (int*Chris Lattner2004-07-151-0/+12
| | | | | | | null, uint 1) to uint)' to a constant integer. We can only do this with primitive LLVM types, because other types have target-specific sizes. llvm-svn: 14837
* Yeah, how about those 'primative' types huh?Chris Lattner2004-07-151-1/+1
| | | | llvm-svn: 14836
* Now that we codegen the portable "sizeof" efficiently, we can use it forChris Lattner2004-07-151-18/+22
| | | | | | | malloc lowering. This means that lowerallocations doesn't need targetdata anymore. yaay. llvm-svn: 14835
* Improve codegen for the LLVM offsetof/sizeof "operator". Before we compiledChris Lattner2004-07-151-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | this LLVM function: int %foo() { ret int cast (int** getelementptr (int** null, int 1) to int) } into: foo: mov %EAX, 0 lea %EAX, DWORD PTR [%EAX + 4] ret now we compile it into: foo: mov %EAX, 4 ret This sequence is frequently generated by the MSIL front-end, and soon the malloc lowering pass and Java front-ends as well.. -Chris llvm-svn: 14834
* You cannot pass functions by value, what does that even mean??Chris Lattner2004-07-141-2/+2
| | | | llvm-svn: 14833
* this "feature" is goneChris Lattner2004-07-141-5/+0
| | | | llvm-svn: 14832
* This is logically part of the last patch. Just more really horrible codeChris Lattner2004-07-141-17/+0
| | | | | | that is made unnecessary by it. llvm-svn: 14831
* ** Finally DeclareNewGlobalValue is dead!Chris Lattner2004-07-141-125/+90
| | | | | | | | | | | | | | | | | | | | * Simplify a lot of code because type's cannot be in function symbol tables * Fix memory leaks in handling of redefined function prototypes * Don't use SymbolTable directly for stuff that we can go through the Module for. * Fix some minor bugs on obscure testcases like: test/Feature/globalredefinition.ll * Do not create GlobalVariable objects for forward referenced Functions! * When forward referencing a function in a constant expression, do not create a placeholder, add a bunch of references to it, then turn around and replaceAllUsesOfWith on it with a new global, deleting the placeholder. Instead, when we find the real definition of the global, just use the placeholder instead of creating a new object. This substantially simplifies the asmwriter and should even speed it up on cases heavy in constantexprs (like C++, Java, MSIL)... llvm-svn: 14830
* New, horrible, testcaseChris Lattner2004-07-141-0/+18
| | | | llvm-svn: 14829
* * Fairly substantial change. Instead of creating new globalvariables, thenChris Lattner2004-07-141-14/+49
| | | | | | | | | | replaceAllUsesWith'ing any forward references, just use the forward reference if it exists. This introduces GetForwardRefForGlobal, which will eventually completely replace the horrible DeclareNewGlobalValue function. llvm-svn: 14828
* Fold setValueNameMergingDuplicates into ParseGlobalVariable, allowing usChris Lattner2004-07-141-55/+38
| | | | | | | | | | | to substantially simplify the result. In particular, we no longer create GlobalVariables and then immediately destroy them when they are duplciate definitions. The real point of this patch though is that it gets us closer to the DeclareNewGlobalValue calls... llvm-svn: 14827
* Actually set the endian/pointersize flags on the module being read in!Brian Gaeke2004-07-141-0/+3
| | | | llvm-svn: 14826
* Simplify logic.Chris Lattner2004-07-141-2/+2
| | | | llvm-svn: 14825
* Make PATypeHolder and friends return non-const pointers to the types theyChris Lattner2004-07-142-11/+11
| | | | | | | hold. Because types are basically immutable anyway, they should not be referenced as "const Type*" everywhere. Just "Type*" should suffice! llvm-svn: 14824
* Fix a regression from last night. Apparently the CFE is broken and outputsChris Lattner2004-07-141-6/+16
| | | | | | | functions multiple times, expecting them to be merged. This should be fixed in the CFE, then here. llvm-svn: 14823
* Make sure MTSPR instruction is inserted into the BasicBlockMisha Brukman2004-07-142-2/+2
| | | | llvm-svn: 14822
* Implement new helper methods for creating two-index GEP instructionsChris Lattner2004-07-141-2/+42
| | | | llvm-svn: 14821
* * Change code to use a static_cast instead of reinterpret_castChris Lattner2004-07-141-2/+17
| | | | | | | | * Add comments * Add two new gep ctors for the very common case of creating a two operand GEP instruction. llvm-svn: 14820
* Don't define the same register twice when loading a ConstantPointerRef to a regMisha Brukman2004-07-142-10/+6
| | | | llvm-svn: 14819
* * Fix multiplication by powers of two and otherwiseMisha Brukman2004-07-142-10/+18
| | | | | | * Clarify variable name (StoreInst SI instead of LI) llvm-svn: 14818
* Pull out code shared between GV forward-decl and definition processing.Chris Lattner2004-07-141-50/+37
| | | | | | | This gives us only a single call site for setValueNameMergingDuplicates. The next stage is the start merging them together. llvm-svn: 14811
* Simplify code. Do not allow functions to be redefined more than once.Chris Lattner2004-07-141-26/+9
| | | | | | | Since the stupid '%X = const int 4' thing is gone, we can now simplify setValueNameMergingDuplicates a bit more. llvm-svn: 14810
* Remove a gross and crufty "feature" that was never documented and doesn't work.Chris Lattner2004-07-142-7/+1
| | | | llvm-svn: 14809
* Finegrainify namespacificationChris Lattner2004-07-141-6/+4
| | | | llvm-svn: 14808
* Revamp handling of labels. In particular, if we create a forward referenceChris Lattner2004-07-141-22/+71
| | | | | | | | for a basic block, use it when the block is defined instead of deleting it and creating a new one. Also, only create at most ONE forward reference for any block, instead of one for each forward reference. llvm-svn: 14807
* Add Machine-CFG edges to SparcV9 MachineBasicBlocks.Brian Gaeke2004-07-141-6/+20
| | | | llvm-svn: 14806
* Split the basic block handling case out of getVal into getBBVal.Chris Lattner2004-07-141-34/+40
| | | | llvm-svn: 14805
* Make Argument::print more resilient to non-verifiable IRChris Lattner2004-07-131-1/+2
| | | | llvm-svn: 14801
* Catch aggregates passed by value sooner rather than later.Chris Lattner2004-07-131-0/+3
| | | | llvm-svn: 14800
* * Specify that FP arith options have 3 operandsMisha Brukman2004-07-132-26/+20
| | | | | | * Correctly load FP constants from the constant pool, should be refactored llvm-svn: 14799
* Actually, use an exception to stop verification. This gives us much betterChris Lattner2004-07-131-1/+5
| | | | | | error messages because verification stops at the first error. llvm-svn: 14794
* There is no reason to abort and print a stack trace if there is a verificationChris Lattner2004-07-131-1/+1
| | | | | | error. Just print the message like a good little tool. llvm-svn: 14793
* Fine-grainify namespacification, prune #includeChris Lattner2004-07-131-6/+2
| | | | llvm-svn: 14792
* Fix typeo and refactor bb productions to make it possible for us to reuse anyChris Lattner2004-07-131-11/+12
| | | | | | | | forward reference blocks if they have been created (instead of creating a new block, replaceAllUsesOfWith, then nuking the placeholder). This is not yet implemented. llvm-svn: 14791
* Eliminate some mega-cruft here. There is no reason to DERIVE FROM IR CLASSESChris Lattner2004-07-132-67/+26
| | | | | | | just to keep track of some per-object state! Gaah! Whoever wrote this stuff... oh wait, that would be me. Never mind. llvm-svn: 14790
* Inline the now trivial setValueNameInternal function into both callersChris Lattner2004-07-131-13/+10
| | | | llvm-svn: 14789
* Now that basic blocks are eagerly inserted into the Function, we can useChris Lattner2004-07-131-60/+12
| | | | | | | | the funciton symbol table to check for conflicts instead of having to keep a shadow named LocalSymtab. Totally eliminate LocalSymtab. Verified that this did not cause a regression on the testcase for PR107. llvm-svn: 14788
* A couple of substantial cleanup fixes:Chris Lattner2004-07-131-47/+72
| | | | | | | | | | | | | 1. Split setValueName into two separate functions, one that is only used at function scope and doesn't have to deal with duplicates, and one that can be used either at global or function scope but that does deal with conflicts. Conflicts were only in there because of the crappy old CFE and probably should be entirely eliminated. 2. Insert BasicBlock's into the parent functions when they are created instead of when they are complete. This effects name lookup (for the better), which will be exploited in the next patch. llvm-svn: 14787
* Fix warning on SparcV9, where sizeof (int) != sizeof (void *).Brian Gaeke2004-07-131-1/+1
| | | | llvm-svn: 14786
* Replace a bunch of complex ConstantPointerRef referring code with simpleChris Lattner2004-07-131-11/+3
| | | | | | code. llvm-svn: 14785
* Make tblgen not try to be smart. This is better handled in makefiles ifChris Lattner2004-07-131-14/+3
| | | | | | at all. Patch contributed by Vladimir Prus! llvm-svn: 14784
* Factor some code to handle "load (constantexpr cast foo)" just likeChris Lattner2004-07-131-20/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "load (cast foo)". This allows us to compile C++ code like this: class Bclass { public: virtual int operator()() { return 666; } }; class Dclass: public Bclass { public: virtual int operator()() { return 667; } } ; int main(int argc, char** argv) { Dclass x; return x(); } Into this: int %main(int %argc, sbyte** %argv) { entry: call void %__main( ) ret int 667 } Instead of this: int %main(int %argc, sbyte** %argv) { entry: %x = alloca "struct.std::bad_typeid" ; <"struct.std::bad_typeid"*> [#uses=3] call void %__main( ) %tmp.1.i.i = getelementptr "struct.std::bad_typeid"* %x, uint 0, uint 0, uint 0 ; <int (...)***> [#uses=1] store int (...)** getelementptr ([3 x int (...)*]* %vtable for Bclass, int 0, long 2), int (...)*** %tmp.1.i.i %tmp.3.i = getelementptr "struct.std::bad_typeid"* %x, int 0, uint 0, uint 0 ; <int (...)***> [#uses=1] store int (...)** getelementptr ([3 x int (...)*]* %vtable for Dclass, int 0, long 2), int (...)*** %tmp.3.i %tmp.5 = load int ("struct.std::bad_typeid"*)** cast (int (...)** getelementptr ([3 x int (...)*]* %vtable for Dclass, int 0, long 2) to int ("struct.std::bad_typeid"*)**) ; <int ("struct.std::bad_typeid"*)*> [#uses=1] %tmp.6 = call int %tmp.5( "struct.std::bad_typeid"* %x ) ; <int> [#uses=1] ret int %tmp.6 ret int 0 } In order words, we now resolve the virtual function call. llvm-svn: 14783
OpenPOWER on IntegriCloud