Chris Lattner 
							
						 
					 
					
						
						
							
						
						99cca7d3aa 
					 
					
						
						
							
							Disable tail duplication in a case that breaks on Olden/tsp  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12021  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-03-01 01:12:13 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						06887c9a2a 
					 
					
						
						
							
							Fix bug: test/Regression/Transforms/LowerInvoke/2004-02-29-PHICrash.llx  
						
						... 
						
						
						
						... which tickled the lowerinvoke pass because it used the BCE routines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12012  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-29 22:24:41 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						542f149f00 
					 
					
						
						
							
							Implement switch->br and br->switch folding by ripping out the switch->switch  
						
						... 
						
						
						
						and br->br code and generalizing it.  This allows us to compile code like this:
int test(Instruction *I) {
  if (isa<CastInst>(I))
    return foo(7);
  else if (isa<BranchInst>(I))
    return foo(123);
  else if (isa<UnwindInst>(I))
    return foo(1241);
  else if (isa<SetCondInst>(I))
    return foo(1);
  else if (isa<VAArgInst>(I))
    return foo(42);
  return foo(-1);
}
into:
int %_Z4testPN4llvm11InstructionE("struct.llvm::Instruction"* %I) {
entry:
        %tmp.1.i.i.i.i.i.i.i = getelementptr "struct.llvm::Instruction"* %I, long 0, ubyte 4            ; <uint*> [#uses=1]
        %tmp.2.i.i.i.i.i.i.i = load uint* %tmp.1.i.i.i.i.i.i.i          ; <uint> [#uses=2]
        %tmp.2.i.i.i.i.i.i = seteq uint %tmp.2.i.i.i.i.i.i.i, 27                ; <bool> [#uses=0]
        switch uint %tmp.2.i.i.i.i.i.i.i, label %endif.0 [
                 uint 27, label %then.0
                 uint 2, label %then.1
                 uint 5, label %then.2
                 uint 14, label %then.3
                 uint 15, label %then.3
                 uint 16, label %then.3
                 uint 17, label %then.3
                 uint 18, label %then.3
                 uint 19, label %then.3
                 uint 32, label %then.4
        ]
...
As well as handling the cases in 176.gcc and many other programs more effectively.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11964  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-28 21:28:10 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						b99df4f8c2 
					 
					
						
						
							
							if there is already a prototype for malloc/free, use it, even if it's incorrect.  
						
						... 
						
						
						
						Do not just inject a new prototype.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11951  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-28 18:51:45 +00:00 
						 
				 
			
				
					
						
							
							
								Misha Brukman 
							
						 
					 
					
						
						
							
						
						9e4a642c03 
					 
					
						
						
							
							Right, it's really Extractor, not Extraction.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11939  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-28 03:37:58 +00:00 
						 
				 
			
				
					
						
							
							
								Misha Brukman 
							
						 
					 
					
						
						
							
						
						9401deb320 
					 
					
						
						
							
							A pass that uses the generic CodeExtractor to rip out *every* loop in every  
						
						... 
						
						
						
						function, as long as the loop isn't the only one in that function. This should
help debugging passes easier with BugPoint.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11936  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-28 03:33:01 +00:00 
						 
				 
			
				
					
						
							
							
								Misha Brukman 
							
						 
					 
					
						
						
							
						
						e6336031b8 
					 
					
						
						
							
							A generic code extractor: given a list of BasicBlocks, it will rip them out into  
						
						... 
						
						
						
						a new function, taking care of inputs and outputs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11935  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-28 03:26:20 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						f2dbf50efa 
					 
					
						
						
							
							turn things like:  
						
						... 
						
						
						
						if (X == 0 || X == 2)
...where the comparisons and branches are in different blocks... into a switch
instruction.  This comes up a lot in various programs, and works well with
the switch/switch merging code I checked earlier.  For example, this testcase:
int switchtest(int C) {
  return C == 0 ? f(123) :
         C == 1 ? f(3123) :
         C == 4 ? f(312) :
         C == 5 ? f(1234): f(444);
}
is converted into this:
        switch int %C, label %cond_false.3 [
                 int 0, label %cond_true.0
                 int 1, label %cond_true.1
                 int 4, label %cond_true.2
                 int 5, label %cond_true.3
        ]
instead of a whole bunch of conditional branches.
Admittedly the code is ugly, and incomplete.  To be complete, we need to add
br -> switch merging and switch -> br merging.  For example, this testcase:
struct foo { int Q, R, Z; };
#define A (X->Q+X->R * 123)
int test(struct foo *X) {
  return A  == 123 ? X1() :
        A == 12321 ? X2():
        (A == 111 || A == 222) ? X3() :
        A == 875 ? X4() : X5();
}
Gets compiled to this:
        switch int %tmp.7, label %cond_false.2 [
                 int 123, label %cond_true.0
                 int 12321, label %cond_true.1
                 int 111, label %cond_true.2
                 int 222, label %cond_true.2
        ]
...
cond_false.2:           ; preds = %entry
        %tmp.52 = seteq int %tmp.7, 875         ; <bool> [#uses=1]
        br bool %tmp.52, label %cond_true.3, label %cond_false.3
where the branch could be folded into the switch.
This kind of thing occurs *ALL OF THE TIME*, especially in programs like
176.gcc, which is a horrible mess of code.  It contains stuff like *shudder*:
#define SWITCH_TAKES_ARG(CHAR) \
  (   (CHAR) == 'D' \
   || (CHAR) == 'U' \
   || (CHAR) == 'o' \
   || (CHAR) == 'e' \
   || (CHAR) == 'u' \
   || (CHAR) == 'I' \
   || (CHAR) == 'm' \
   || (CHAR) == 'L' \
   || (CHAR) == 'A' \
   || (CHAR) == 'h' \
   || (CHAR) == 'z')
and
#define CONST_OK_FOR_LETTER_P(VALUE, C)                 \
  ((C) == 'I' ? SMALL_INTVAL (VALUE)                    \
   : (C) == 'J' ? SMALL_INTVAL (-(VALUE))               \
   : (C) == 'K' ? (unsigned)(VALUE) < 32                \
   : (C) == 'L' ? ((VALUE) & 0xffff) == 0               \
   : (C) == 'M' ? integer_ok_for_set (VALUE)            \
   : (C) == 'N' ? (VALUE) < 0                           \
   : (C) == 'O' ? (VALUE) == 0                          \
   : (C) == 'P' ? (VALUE) >= 0                          \
   : 0)
and
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)                     \
{                                                               \
  if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1))) \
    (X) = gen_rtx (PLUS, SImode, XEXP (X, 0),                   \
                   copy_to_mode_reg (SImode, XEXP (X, 1)));     \
  if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 0))) \
    (X) = gen_rtx (PLUS, SImode, XEXP (X, 1),                   \
                   copy_to_mode_reg (SImode, XEXP (X, 0)));     \
  if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == MULT)   \
    (X) = gen_rtx (PLUS, SImode, XEXP (X, 1),                   \
                   force_operand (XEXP (X, 0), 0));             \
  if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == MULT)   \
    (X) = gen_rtx (PLUS, SImode, XEXP (X, 0),                   \
                   force_operand (XEXP (X, 1), 0));             \
  if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == PLUS)   \
    (X) = gen_rtx (PLUS, Pmode, force_operand (XEXP (X, 0), NULL_RTX),\
                   XEXP (X, 1));                                \
  if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == PLUS)   \
    (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0),                    \
                   force_operand (XEXP (X, 1), NULL_RTX));      \
  if (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST       \
           || GET_CODE (X) == LABEL_REF)                        \
    (X) = legitimize_address (flag_pic, X, 0, 0);               \
  if (memory_address_p (MODE, X))                               \
    goto WIN; }
and others.  These macros get used multiple times of course.  These are such
lovely candidates for macros, aren't they?  :)
This code also nicely handles LLVM constructs that look like this:
  if (isa<CastInst>(I))
   ...
  else if (isa<BranchInst>(I))
   ...
  else if (isa<SetCondInst>(I))
   ...
  else if (isa<UnwindInst>(I))
   ...
  else if (isa<VAArgInst>(I))
   ...
where the isa can obviously be a dyn_cast as well.  Switch instructions are a
good thing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11870  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-26 07:13:46 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						940ff563f7 
					 
					
						
						
							
							Fix incorrect debug code  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11821  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-25 15:15:04 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						8e509dd5e8 
					 
					
						
						
							
							If a block is made dead, make sure to promptly remove it.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11799  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-24 16:09:21 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						d52c261cf8 
					 
					
						
						
							
							Implement SimplifyCFG/switch_switch_fold.ll  
						
						... 
						
						
						
						This case occurs many times in various benchmarks, especially when combined
with the previous patch.  This allows it to get stuff like:
  if (X == 4 || X == 3)
    if (X == 5 || X == 8)
and
switch (X) {
case 4: case 5: case 6:
  if (X == 4 || X == 5)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11797  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-24 07:23:58 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e14ea0804a 
					 
					
						
						
							
							Rearrange code a bit  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11793  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-24 05:54:22 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						0d56008f53 
					 
					
						
						
							
							Implement: test/Regression/Transforms/SimplifyCFG/switch_create.ll  
						
						... 
						
						
						
						This turns code like this:
  if (X == 4 | X == 7)
and
  if (X != 4 & X != 7)
into switch instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11792  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-24 05:38:11 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						57cb9883aa 
					 
					
						
						
							
							Fix PR245: Linking weak and strong global variables is dependent on link order  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11565  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-17 21:56:04 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						19831ec853 
					 
					
						
						
							
							Implement test/Regression/Transforms/SimplifyCFG/UncondBranchToReturn.ll,  
						
						... 
						
						
						
						see the testcase for the reasoning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11496  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-16 06:35:48 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						860a16143c 
					 
					
						
						
							
							Instead of producing calls to setjmp/longjmp, produce uses of the  
						
						... 
						
						
						
						llvm.setjmp/llvm.longjmp intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11482  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-15 22:24:27 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						de512b5b2e 
					 
					
						
						
							
							Adjustments to support the new ConstantAggregateZero class  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11474  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-15 05:55:15 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						494b6920b0 
					 
					
						
						
							
							Fix compilation of 126.gcc: intrinsic functions cannot throw, so they are not  
						
						... 
						
						
						
						allowed in invoke instructions.  Thus, if we are inlining a call to an intrinsic
function into an invoke site, we don't need to turn the call into an invoke!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11384  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-13 16:47:35 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						cefc18e7d9 
					 
					
						
						
							
							Expose a pass ID that can be 'required'  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11376  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-13 16:16:16 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						723c66d4c0 
					 
					
						
						
							
							Implement SimplifyCFG/PhiEliminate.ll  
						
						... 
						
						
						
						Having a proper 'select' instruction would allow the elimination of a lot
of the special case cruft in this patch, but we don't have one yet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11307  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-11 03:36:04 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						2355f948c5 
					 
					
						
						
							
							The hasConstantReferences predicate always returns false.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11301  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-11 01:17:07 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						f1d0d3519f 
					 
					
						
						
							
							Only add the global variable with the abort message if an unwind actually  
						
						... 
						
						
						
						occurs in the program.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11249  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-09 22:48:47 +00:00 
						 
				 
			
				
					
						
							
							
								Misha Brukman 
							
						 
					 
					
						
						
							
						
						b9806e0101 
					 
					
						
						
							
							Fix grammar-o.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11210  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-08 22:27:33 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						501825e08a 
					 
					
						
						
							
							Improve compatibility with programs that already have a prototype for 'write',  
						
						... 
						
						
						
						even if it is wierd in some way.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11207  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-08 22:14:44 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						aeb2a1d708 
					 
					
						
						
							
							rename the "exceptional" destination of an invoke instruction to the 'unwind' dest  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11202  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-08 21:44:31 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						6d78457f17 
					 
					
						
						
							
							Implement proper invoke/unwind lowering.  
						
						... 
						
						
						
						This fixed PR16 "[lowerinvoke] The -lowerinvoke pass does not insert calls to setjmp/longjmp"
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11195  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-08 19:53:56 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e1c09309f2 
					 
					
						
						
							
							Add a call to 'write' right before the call to abort() in the unwind path.  
						
						... 
						
						
						
						This causes the JIT, or LLC'd program to print out a nice message, explaining
WHY the program aborted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11184  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-08 07:30:29 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						99dcc1da86 
					 
					
						
						
							
							Fix another dominator update bug.  These bugs keep getting exposed because GCSE  
						
						... 
						
						
						
						keeps finding more code motion opportunities now that the dominators are correct!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11142  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-05 23:20:59 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						3e0b870def 
					 
					
						
						
							
							Fix bug updating dominators  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11140  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-05 22:33:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						4f02fc28eb 
					 
					
						
						
							
							Fix PR223: Loopsimplify incorrectly updates dominator information  
						
						... 
						
						
						
						The problem is that the dominator update code didn't "realize" that it's
possible for the newly inserted basic block to dominate anything.  Because
it IS possible, stuff was getting updated wrong.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11137  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-05 21:12:24 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						a33ceaa2d4 
					 
					
						
						
							
							Minor speedup, don't query ValueMap each time through the loop  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11123  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-04 21:44:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						c1df7e1799 
					 
					
						
						
							
							Two changes:  
						
						... 
						
						
						
						1. Don't scan to the end of alloca instructions in the caller function to
     insert inlined allocas, just insert at the top.  This saves a lot of
     time inlining into functions with a lot of allocas.
  2. Use splice to move the alloca instructions over, instead of remove/insert.
     This allows us to transfer a block at a time, and eliminates a bunch of
     silly symbol table manipulations.
This speeds up the inliner on the testcase in PR209 from 1.73s -> 1.04s (67%)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11118  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-04 21:33:42 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						44a6807f4f 
					 
					
						
						
							
							Optimize the case where we are inlining a function that contains only one basic block,  
						
						... 
						
						
						
						and that basic block ends with a return instruction.  In this case, we can just splice
the cloned "body" of the function directly into the source basic block, avoiding a lot
of rearrangement and splitBasicBlock's linear scan over the split block.  This speeds up
the inliner on the testcase in PR209 from 2.3s to 1.7s, a 35% reduction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11116  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-04 04:17:06 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						c24a076c6a 
					 
					
						
						
							
							Adjust to the new BasicBlock ctor, which requires a function parameter  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11114  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-04 03:58:28 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						5e923dee60 
					 
					
						
						
							
							More refactoring.  Move alloca instructions and handle invoke instructions  
						
						... 
						
						
						
						before we delete the original call site, allowing slight simplifications of
code, but nothing exciting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11109  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-04 02:51:48 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						5052c911ec 
					 
					
						
						
							
							Move the cloning of the function body much earlier in the inlinefunction  
						
						... 
						
						
						
						process.  The only optimization we did so far is to avoid creating a
PHI node, then immediately destroying it in the common case where the
callee has one return statement.  Instead, we just don't create the return
value.  This has no noticable performance impact, but paves the way for
future improvements.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11108  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-04 01:41:09 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						23b4c68f46 
					 
					
						
						
							
							Give CloneBasicBlock an optional function argument to specify which function  
						
						... 
						
						
						
						to add the cloned block to.  This allows the block to be added to the function
immediately, and all of the instructions to be immediately added to the function
symbol table, which speeds up the inliner from 3.7 -> 3.38s on the PR209.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11107  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-04 01:19:43 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e47f78ed12 
					 
					
						
						
							
							Bunch up all locally used allocas by the block they are allocated in, and  
						
						... 
						
						
						
						process them all as a group.  This speeds up SRoA/mem2reg from 28.46s to
0.62s on the testcase from PR209.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11100  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-03 22:34:12 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						7fecc2e5e2 
					 
					
						
						
							
							Handle extremely trivial cases extremely efficiently.  This speeds up  
						
						... 
						
						
						
						SRoA/mem2reg from 41.2s to 27.5s on the testcase in PR209.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11099  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-02-03 22:00:33 +00:00 
						 
				 
			
				
					
						
							
							
								Misha Brukman 
							
						 
					 
					
						
						
							
						
						7c791ed0a4 
					 
					
						
						
							
							Hyphenate `target-dependent'  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11003  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-28 20:43:01 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						7822c2ae07 
					 
					
						
						
							
							Clean up #includes  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10799  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-12 19:56:36 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						c6646ebdb9 
					 
					
						
						
							
							Remove use of ConstantExpr::getShift  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10792  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-12 19:10:58 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						81ebc30089 
					 
					
						
						
							
							Remove use of ConstantHandling  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10789  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-12 18:35:03 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						8f90b005d6 
					 
					
						
						
							
							Move llvm::ConstantFoldInstruction from VMCore to here, next to ConstantFoldTerminator  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10785  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-12 18:25:22 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						2d11f167e6 
					 
					
						
						
							
							Implement Transforms/ScalarRepl/phinodepromote.ll, which is an important  
						
						... 
						
						
						
						case that the C/C++ front-end generates.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10761  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-12 01:18:32 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						f7703df496 
					 
					
						
						
							
							Finegrainify namespacification  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10727  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-09 06:12:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						d745602662 
					 
					
						
						
							
							Finegrainify namespacification  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10725  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-09 06:02:20 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						329c1c6c94 
					 
					
						
						
							
							Improve encapsulation in the Loop and LoopInfo classes by eliminating the  
						
						... 
						
						
						
						getSubLoops/getTopLevelLoops methods, replacing them with iterator-based
accessors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10714  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2004-01-08 00:09:44 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						0f98e75adf 
					 
					
						
						
							
							Generalize a special case to fix PR187  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10531  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2003-12-19 06:27:08 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						abbc2dd779 
					 
					
						
						
							
							Add new function  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10529  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2003-12-19 05:56:28 +00:00