- Jul 15, 2004
-
-
Chris Lattner authored
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
-
Chris Lattner authored
llvm-svn: 14833
-
Chris Lattner authored
llvm-svn: 14832
-
Chris Lattner authored
that is made unnecessary by it. llvm-svn: 14831
-
Chris Lattner authored
* 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
-
Chris Lattner authored
llvm-svn: 14829
-
- Jul 14, 2004
-
-
Chris Lattner authored
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
-
Chris Lattner authored
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
-
Brian Gaeke authored
llvm-svn: 14826
-
Chris Lattner authored
llvm-svn: 14825
-
Chris Lattner authored
hold. Because types are basically immutable anyway, they should not be referenced as "const Type*" everywhere. Just "Type*" should suffice! llvm-svn: 14824
-
Chris Lattner authored
functions multiple times, expecting them to be merged. This should be fixed in the CFE, then here. llvm-svn: 14823
-
Misha Brukman authored
llvm-svn: 14822
-
Chris Lattner authored
llvm-svn: 14821
-
Chris Lattner authored
* Add comments * Add two new gep ctors for the very common case of creating a two operand GEP instruction. llvm-svn: 14820
-
Misha Brukman authored
llvm-svn: 14819
-
Misha Brukman authored
* Clarify variable name (StoreInst SI instead of LI) llvm-svn: 14818
-
Chris Lattner authored
This gives us only a single call site for setValueNameMergingDuplicates. The next stage is the start merging them together. llvm-svn: 14811
-
Chris Lattner authored
Since the stupid '%X = const int 4' thing is gone, we can now simplify setValueNameMergingDuplicates a bit more. llvm-svn: 14810
-
Chris Lattner authored
llvm-svn: 14809
-
Chris Lattner authored
llvm-svn: 14808
-
Chris Lattner authored
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
-
Brian Gaeke authored
llvm-svn: 14806
-
Chris Lattner authored
llvm-svn: 14805
-
Chris Lattner authored
llvm-svn: 14801
-
- Jul 13, 2004
-
-
Chris Lattner authored
llvm-svn: 14800
-
Misha Brukman authored
* Correctly load FP constants from the constant pool, should be refactored llvm-svn: 14799
-
Chris Lattner authored
error messages because verification stops at the first error. llvm-svn: 14794
-
Chris Lattner authored
error. Just print the message like a good little tool. llvm-svn: 14793
-
Chris Lattner authored
llvm-svn: 14792
-
Chris Lattner authored
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
-
Chris Lattner authored
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
-
Chris Lattner authored
llvm-svn: 14789
-
Chris Lattner authored
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
-
Chris Lattner authored
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
-
Brian Gaeke authored
llvm-svn: 14786
-
Chris Lattner authored
code. llvm-svn: 14785
-
Chris Lattner authored
at all. Patch contributed by Vladimir Prus! llvm-svn: 14784
-
Chris Lattner authored
"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
-
Misha Brukman authored
llvm-svn: 14782
-