a21bf8d1be 
								
							 
						 
						
							
							
								
								implement getelementptr.ll:test10  
							
							... 
							
							
							
							llvm-svn: 21541 
							
						 
						
							2005-04-25 20:17:30 +00:00  
				
					
						
							
							
								 
						
							
								2f1457fd83 
								
							 
						 
						
							
							
								
								Eliminate cases where we could << by 64, which is undefined in C.  
							
							... 
							
							
							
							llvm-svn: 21500 
							
						 
						
							2005-04-24 17:46:05 +00:00  
				
					
						
							
							
								 
						
							
								d6f636a340 
								
							 
						 
						
							
							
								
								Implement xor.ll:test21:  select (not C), A, B -> select C, B, A  
							
							... 
							
							
							
							llvm-svn: 21495 
							
						 
						
							2005-04-24 07:30:14 +00:00  
				
					
						
							
							
								 
						
							
								d1f46d3bf9 
								
							 
						 
						
							
							
								
								Use getPrimitiveSizeInBits() instead of getPrimitiveSize()*8  
							
							... 
							
							
							
							Completely rework the 'setcc (cast x to larger), y' code.  This code has
the advantage of implementing setcc.ll:test19 (being more general than
the previous code) and being correct in all cases.
This allows us to unxfail 2004-11-27-SetCCForCastLargerAndConstant.ll,
and close PR454.
llvm-svn: 21491 
							
						 
						
							2005-04-24 06:59:08 +00:00  
				
					
						
							
							
								 
						
							
								82639853c0 
								
							 
						 
						
							
							
								
								Eliminate tabs and trailing spaces  
							
							... 
							
							
							
							llvm-svn: 21480 
							
						 
						
							2005-04-23 21:38:35 +00:00  
				
					
						
							
							
								 
						
							
								77c32c34d7 
								
							 
						 
						
							
							
								
								Generalize the setcc -> PHI and Select  folding optimizations to work with  
							
							... 
							
							
							
							any constant RHS, not just a constant integer RHS.  This implements
select.ll:test17
llvm-svn: 21470 
							
						 
						
							2005-04-23 15:31:55 +00:00  
				
					
						
							
							
								 
						
							
								b1c9317bb4 
								
							 
						 
						
							
							
								
								Remove trailing whitespace  
							
							... 
							
							
							
							llvm-svn: 21427 
							
						 
						
							2005-04-21 23:48:37 +00:00  
				
					
						
							
							
								 
						
							
								374e659466 
								
							 
						 
						
							
							
								
								Instcombine this:  
							
							... 
							
							
							
							%shortcirc_val = select bool %tmp.1, bool true, bool %tmp.4             ; <bool> [#uses=1]
        %tmp.6 = cast bool %shortcirc_val to int                ; <int> [#uses=1]
into this:
        %shortcirc_val = or bool %tmp.1, %tmp.4         ; <bool> [#uses=1]
        %tmp.6 = cast bool %shortcirc_val to int                ; <int> [#uses=1]
not this:
        %tmp.4.cast = cast bool %tmp.4 to int           ; <int> [#uses=1]
        %tmp.6 = select bool %tmp.1, int 1, int %tmp.4.cast             ; <int> [#uses=1]
llvm-svn: 21389 
							
						 
						
							2005-04-21 05:43:13 +00:00  
				
					
						
							
							
								 
						
							
								5c219469a0 
								
							 
						 
						
							
							
								
								Eliminate a broken transformation, fixing PR548  
							
							... 
							
							
							
							llvm-svn: 21354 
							
						 
						
							2005-04-19 06:04:18 +00:00  
				
					
						
							
							
								 
						
							
								4236261930 
								
							 
						 
						
							
							
								
								Fix bug: InstCombine/2005-05-07-UDivSelectCrash.ll  
							
							... 
							
							
							
							llvm-svn: 21152 
							
						 
						
							2005-04-08 04:03:26 +00:00  
				
					
						
							
							
								 
						
							
								4706046e68 
								
							 
						 
						
							
							
								
								Implement the following xforms:  
							
							... 
							
							
							
							(X-Y)-X --> -Y
A + (B - A) --> B
(B - A) + A --> B
llvm-svn: 21138 
							
						 
						
							2005-04-07 17:14:51 +00:00  
				
					
						
							
							
								 
						
							
								c7f3c1a00e 
								
							 
						 
						
							
							
								
								Implement InstCombine/add.ll:test28, transforming C1-(X+C2) --> (C1-C2)-X.  
							
							... 
							
							
							
							This occurs several dozen times in specint2k, particularly in crafty and gcc
apparently.
llvm-svn: 21136 
							
						 
						
							2005-04-07 16:28:01 +00:00  
				
					
						
							
							
								 
						
							
								a9be4490d8 
								
							 
						 
						
							
							
								
								Transform X-(X+Y) == -Y and X-(Y+X) == -Y  
							
							... 
							
							
							
							llvm-svn: 21134 
							
						 
						
							2005-04-07 16:15:25 +00:00  
				
					
						
							
							
								 
						
							
								ecfa9b5810 
								
							 
						 
						
							
							
								
								disable this transformation in the one obscure case that really pessimizes  
							
							... 
							
							
							
							pointer analysis.
llvm-svn: 20916 
							
						 
						
							2005-03-29 06:37:47 +00:00  
				
					
						
							
							
								 
						
							
								cfe2822cdf 
								
							 
						 
						
							
							
								
								Do not compute 1ULL << 64, which is undefined.  This fixes Ptrdist/ks on the  
							
							... 
							
							
							
							sparc, and testcase Regression/Transforms/InstCombine/2005-03-04-ShiftOverflow.ll
llvm-svn: 20445 
							
						 
						
							2005-03-04 23:21:33 +00:00  
				
					
						
							
							
								 
						
							
								72684fecf8 
								
							 
						 
						
							
							
								
								Implement InstCombine/cast.ll:test25, a case that occurs many times  
							
							... 
							
							
							
							in spec
llvm-svn: 19953 
							
						 
						
							2005-01-31 05:51:45 +00:00  
				
					
						
							
							
								 
						
							
								31f486c775 
								
							 
						 
						
							
							
								
								Implement the trivial cases in InstCombine/store.ll  
							
							... 
							
							
							
							llvm-svn: 19950 
							
						 
						
							2005-01-31 05:36:43 +00:00  
				
					
						
							
							
								 
						
							
								fe1b0b8b24 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/cast-load-gep.ll, which allows us to devirtualize  
							
							... 
							
							
							
							11 indirect calls in perlbmk.
llvm-svn: 19947 
							
						 
						
							2005-01-31 04:50:46 +00:00  
				
					
						
							
							
								 
						
							
								d8e20188c6 
								
							 
						 
						
							
							
								
								Adjust to changes in instruction interfaces.  
							
							... 
							
							
							
							llvm-svn: 19900 
							
						 
						
							2005-01-29 00:39:08 +00:00  
				
					
						
							
							
								 
						
							
								cd517ff0c7 
								
							 
						 
						
							
							
								
								* add some DEBUG statements  
							
							... 
							
							
							
							* Properly compile this:
struct a {};
int test() {
  struct a b[2];
  if (&b[0] != &b[1])
    abort ();
  return 0;
}
to 'return 0', not abort().
llvm-svn: 19875 
							
						 
						
							2005-01-28 19:32:01 +00:00  
				
					
						
							
							
								 
						
							
								9e2c7facb2 
								
							 
						 
						
							
							
								
								Get rid of a several dozen more and instructions in specint.  
							
							... 
							
							
							
							llvm-svn: 19786 
							
						 
						
							2005-01-23 20:26:55 +00:00  
				
					
						
							
							
								 
						
							
								fc4429e7c1 
								
							 
						 
						
							
							
								
								Handle comparisons of gep instructions that have different typed indices  
							
							... 
							
							
							
							as long as they are the same size.
llvm-svn: 19734 
							
						 
						
							2005-01-21 23:06:49 +00:00  
				
					
						
							
							
								 
						
							
								411336fe04 
								
							 
						 
						
							
							
								
								Add two optimizations.  The first folds (X+Y)-X -> Y  
							
							... 
							
							
							
							The second folds operations into selects, e.g. (select C, (X+Y), (Y+Z))
-> (Y+(select C, X, Z)
This occurs a few times across spec, e.g.
         select    add/sub
mesa:    83        0
povray:  5         2
gcc      4         2
parser   0         22
perlbmk  13        30
twolf    0         3
llvm-svn: 19706 
							
						 
						
							2005-01-19 21:50:18 +00:00  
				
					
						
							
							
								 
						
							
								715364364b 
								
							 
						 
						
							
							
								
								Delete PHI nodes that are not dead but are locked in a cycle of single  
							
							... 
							
							
							
							useness.
llvm-svn: 19629 
							
						 
						
							2005-01-17 05:10:15 +00:00  
				
					
						
							
							
								 
						
							
								03f06f11aa 
								
							 
						 
						
							
							
								
								Move code out of indentation one level to make it easier to read.  
							
							... 
							
							
							
							Disable the xform for < > cases.  It turns out that the following is being
miscompiled:
bool %test(sbyte %S) {
        %T = cast sbyte %S to uint
        %V = setgt uint %T, 255
        ret bool %V
}
llvm-svn: 19628 
							
						 
						
							2005-01-17 03:20:02 +00:00  
				
					
						
							
							
								 
						
							
								51726c47fe 
								
							 
						 
						
							
							
								
								Fix some bugs in an xform added yesterday.  This fixes Prolangs-C/allroots.  
							
							... 
							
							
							
							llvm-svn: 19553 
							
						 
						
							2005-01-14 17:35:12 +00:00  
				
					
						
							
							
								 
						
							
								7aa41cfa88 
								
							 
						 
						
							
							
								
								Fix a compile crash on spiff  
							
							... 
							
							
							
							llvm-svn: 19552 
							
						 
						
							2005-01-14 17:17:59 +00:00  
				
					
						
							
							
								 
						
							
								4fa89827e2 
								
							 
						 
						
							
							
								
								if two gep comparisons only differ by one index, compare that index directly.  
							
							... 
							
							
							
							This allows us to better optimize begin() -> end() comparisons in common cases.
llvm-svn: 19542 
							
						 
						
							2005-01-14 00:20:05 +00:00  
				
					
						
							
							
								 
						
							
								d35d210ea0 
								
							 
						 
						
							
							
								
								Do not overrun iterators.  This fixes a 176.gcc crash  
							
							... 
							
							
							
							llvm-svn: 19541 
							
						 
						
							2005-01-13 23:26:48 +00:00  
				
					
						
							
							
								 
						
							
								a04c904c4c 
								
							 
						 
						
							
							
								
								Turn select C, (X+Y), (X-Y) --> (X+(select C, Y, (-Y))).  This occurs in  
							
							... 
							
							
							
							the 'sim' program and probably elsewhere.  In sim, it comes up for cases
like this:
#define round(x) ((x)>0.0 ? (x)+0.5 : (x)-0.5)
double G;
void T(double X) { G = round(X); }
(it uses the round macro a lot).  This changes the LLVM code from:
        %tmp.1 = setgt double %X, 0.000000e+00          ; <bool> [#uses=1]
        %tmp.4 = add double %X, 5.000000e-01            ; <double> [#uses=1]
        %tmp.6 = sub double %X, 5.000000e-01            ; <double> [#uses=1]
        %mem_tmp.0 = select bool %tmp.1, double %tmp.4, double %tmp.6
        store double %mem_tmp.0, double* %G
to:
        %tmp.1 = setgt double %X, 0.000000e+00          ; <bool> [#uses=1]
        %mem_tmp.0.p = select bool %tmp.1, double 5.000000e-01, double -5.000000e-01
        %mem_tmp.0 = add double %mem_tmp.0.p, %X
        store double %mem_tmp.0, double* %G
        ret void
llvm-svn: 19537 
							
						 
						
							2005-01-13 22:52:24 +00:00  
				
					
						
							
							
								 
						
							
								81e8417614 
								
							 
						 
						
							
							
								
								Implement an optimization for == and != comparisons like this:  
							
							... 
							
							
							
							_Bool test2(int X, int Y) {
  return &arr[X][Y] == arr;
}
instead of generating this:
bool %test2(int %X, int %Y) {
        %tmp.3.idx = mul int %X, 160            ; <int> [#uses=1]
        %tmp.3.idx1 = shl int %Y, ubyte 2               ; <int> [#uses=1]
        %tmp.3.offs2 = sub int 0, %tmp.3.idx            ; <int> [#uses=1]
        %tmp.7 = seteq int %tmp.3.idx1, %tmp.3.offs2            ; <bool> [#uses=1]
        ret bool %tmp.7
}
generate this:
bool %test2(int %X, int %Y) {
        seteq int %X, 0         ; <bool>:0 [#uses=1]
        seteq int %Y, 0         ; <bool>:1 [#uses=1]
        %tmp.7 = and bool %0, %1                ; <bool> [#uses=1]
        ret bool %tmp.7
}
This idiom occurs in C++ programs when iterating from begin() to end(),
in a vector or array.  For example, we now compile this:
void test(int X, int Y) {
  for (int *i = arr; i != arr+100; ++i)
    foo(*i);
}
to this:
no_exit:                ; preds = %entry, %no_exit
	...
        %exitcond = seteq uint %indvar.next, 100                ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %no_exit
instead of this:
no_exit:                ; preds = %entry, %no_exit
	...
        %inc5 = getelementptr [100 x [40 x int]]* %arr, int 0, int 0, int %inc.rec              ; <int*> [#uses=1]
        %tmp.8 = seteq int* %inc5, getelementptr ([100 x [40 x int]]* %arr, int 0, int 100, int 0)              ; <bool> [#uses=1]
        %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
        br bool %tmp.8, label %return, label %no_exit
llvm-svn: 19536 
							
						 
						
							2005-01-13 22:25:21 +00:00  
				
					
						
							
							
								 
						
							
								4cb9fa373b 
								
							 
						 
						
							
							
								
								Fix some bugs in code I didn't mean to check in.  
							
							... 
							
							
							
							llvm-svn: 19534 
							
						 
						
							2005-01-13 20:40:58 +00:00  
				
					
						
							
							
								 
						
							
								0798af33a5 
								
							 
						 
						
							
							
								
								Fix a crash compiling 129.compress  
							
							... 
							
							
							
							llvm-svn: 19533 
							
						 
						
							2005-01-13 20:14:25 +00:00  
				
					
						
							
							
								 
						
							
								fdfe3e49fe 
								
							 
						 
						
							
							
								
								Fix uint64_t -> unsigned VS warnings.  
							
							... 
							
							
							
							llvm-svn: 19381 
							
						 
						
							2005-01-08 19:42:22 +00:00  
				
					
						
							
							
								 
						
							
								86102b8ad5 
								
							 
						 
						
							
							
								
								This is a bulk commit that implements the following primary improvements:  
							
							... 
							
							
							
							* We can now fold cast instructions into select instructions that
    have at least one constant operand.
  * We now optimize expressions more aggressively based on bits that are
    known to be zero.  These optimizations occur a lot in code that uses
    bitfields even in simple ways.
  * We now turn more cast-cast sequences into AND instructions.  Before we
    would only do this if it if all types were unsigned.  Now only the
    middle type needs to be unsigned (guaranteeing a zero extend).
  * We transform sign extensions into zero extensions in several cases.
This corresponds to these test/Regression/Transforms/InstCombine testcases:
  2004-11-22-Missed-and-fold.ll
  and.ll: test28-29
  cast.ll: test21-24
  and-or-and.ll
  cast-cast-to-and.ll
  zeroext-and-reduce.ll
llvm-svn: 19220 
							
						 
						
							2005-01-01 16:22:27 +00:00  
				
					
						
							
							
								 
						
							
								9ad0d55025 
								
							 
						 
						
							
							
								
								Constant exprs are not efficiently negatable in practice.  This disables  
							
							... 
							
							
							
							turning X - (constantexpr) into X + (-constantexpr) among other things.
llvm-svn: 18935 
							
						 
						
							2004-12-14 20:08:06 +00:00  
				
					
						
							
							
								 
						
							
								bf5b7cf638 
								
							 
						 
						
							
							
								
								Optimize div/rem + select combinations more.  
							
							... 
							
							
							
							In particular, implement div.ll:test10 and rem.ll:test4.
llvm-svn: 18838 
							
						 
						
							2004-12-12 21:48:58 +00:00  
				
					
						
							
							
								 
						
							
								36d39cecb4 
								
							 
						 
						
							
							
								
								note to self: Do not check in debugging code!  
							
							... 
							
							
							
							llvm-svn: 18693 
							
						 
						
							2004-12-09 07:15:52 +00:00  
				
					
						
							
							
								 
						
							
								f17a2fb849 
								
							 
						 
						
							
							
								
								Implement trivial sinking for load instructions.  This causes us to sink 567 loads in spec  
							
							... 
							
							
							
							llvm-svn: 18692 
							
						 
						
							2004-12-09 07:14:34 +00:00  
				
					
						
							
							
								 
						
							
								39c98bb31c 
								
							 
						 
						
							
							
								
								Do extremely simple sinking of instructions when they are only used in a  
							
							... 
							
							
							
							successor block.  This turns cases like this:
x = a op b
if (c) {
  use x
}
into:
if (c) {
  x = a op b
  use x
}
This triggers 3965 times in spec, and is tested by
Regression/Transforms/InstCombine/sink_instruction.ll
This appears to expose a bug in the X86 backend for 177.mesa, which I'm
looking in to.
llvm-svn: 18677 
							
						 
						
							2004-12-08 23:43:58 +00:00  
				
					
						
							
							
								 
						
							
								a1291a0679 
								
							 
						 
						
							
							
								
								Fix this regression and remove the XFAIL from this test.  
							
							... 
							
							
							
							llvm-svn: 18674 
							
						 
						
							2004-12-08 23:10:30 +00:00  
				
					
						
							
							
								 
						
							
								8f30caf549 
								
							 
						 
						
							
							
								
								Fix Transforms/InstCombine/2004-12-08-RemInfiniteLoop.ll  
							
							... 
							
							
							
							llvm-svn: 18670 
							
						 
						
							2004-12-08 22:20:34 +00:00  
				
					
						
							
							
								 
						
							
								279fa256a2 
								
							 
						 
						
							
							
								
								Fix for PR454:  
							
							... 
							
							
							
							* Make sure we handle signed to unsigned conversion correctly
* Move this visitSetCondInst case to its own method.
llvm-svn: 18312 
							
						 
						
							2004-11-28 21:31:15 +00:00  
				
					
						
							
							
								 
						
							
								14f3cdc227 
								
							 
						 
						
							
							
								
								Implement Regression/Transforms/InstCombine/getelementptr_cast.ll, which  
							
							... 
							
							
							
							occurs many times in crafty
llvm-svn: 18273 
							
						 
						
							2004-11-27 17:55:46 +00:00  
				
					
						
							
							
								 
						
							
								953075442d 
								
							 
						 
						
							
							
								
								Delete stoppoints that occur for the same source line.  
							
							... 
							
							
							
							llvm-svn: 17970 
							
						 
						
							2004-11-18 21:41:39 +00:00  
				
					
						
							
							
								 
						
							
								97013636cd 
								
							 
						 
						
							
							
								
								Quiet warnings on the persephone tester  
							
							... 
							
							
							
							llvm-svn: 17821 
							
						 
						
							2004-11-15 05:54:07 +00:00  
				
					
						
							
							
								 
						
							
								46dd5a6304 
								
							 
						 
						
							
							
								
								This optimization makes MANY phi nodes that all have the same incoming value.  
							
							... 
							
							
							
							If this happens, detect it early instead of relying on instcombine to notice
it later.  This can be a big speedup, because PHI nodes can have many
incoming values.
llvm-svn: 17741 
							
						 
						
							2004-11-14 19:29:34 +00:00  
				
					
						
							
							
								 
						
							
								7515cabe2a 
								
							 
						 
						
							
							
								
								Implement instcombine/phi.ll:test6 - pulling operations through PHI nodes.  
							
							... 
							
							
							
							This exposes subsequent optimization possiblities and reduces code size.
This triggers 1423 times in spec.
llvm-svn: 17740 
							
						 
						
							2004-11-14 19:13:23 +00:00  
				
					
						
							
							
								 
						
							
								15ff1e1885 
								
							 
						 
						
							
							
								
								Transform this:  
							
							... 
							
							
							
							%X = alloca ...
  %Y = alloca ...
    X == Y
into false.  This allows us to simplify some stuff in eon (and probably
many other C++ programs) where operator= was checking for self assignment.
Folding this allows us to SROA several additional structs.
llvm-svn: 17735 
							
						 
						
							2004-11-14 07:33:16 +00:00  
				
					
						
							
							
								 
						
							
								8c3e7b92af 
								
							 
						 
						
							
							
								
								Simplify handling of shifts to be the same as we do for adds.  Add support  
							
							... 
							
							
							
							for (X * C1) + (X * C2) (where * can be mul or shl), allowing us to fold:
   Y+Y+Y+Y+Y+Y+Y+Y
into
         %tmp.8 = shl long %Y, ubyte 3           ; <long> [#uses=1]
instead of
        %tmp.4 = shl long %Y, ubyte 2           ; <long> [#uses=1]
        %tmp.12 = shl long %Y, ubyte 2          ; <long> [#uses=1]
        %tmp.8 = add long %tmp.4, %tmp.12               ; <long> [#uses=1]
This implements add.ll:test25
Also add support for (X*C1)-(X*C2) -> X*(C1-C2), implementing sub.ll:test18
llvm-svn: 17704 
							
						 
						
							2004-11-13 19:50:12 +00:00  
				
					
						
							
							
								 
						
							
								4efe20a103 
								
							 
						 
						
							
							
								
								Fold:  
							
							... 
							
							
							
							(X + (X << C2)) --> X * ((1 << C2) + 1)
   ((X << C2) + X) --> X * ((1 << C2) + 1)
This means that we now canonicalize "Y+Y+Y" into:
        %tmp.2 = mul long %Y, 3         ; <long> [#uses=1]
instead of:
        %tmp.10 = shl long %Y, ubyte 1          ; <long> [#uses=1]
        %tmp.6 = add long %Y, %tmp.10               ; <long> [#uses=1]
llvm-svn: 17701 
							
						 
						
							2004-11-13 19:31:40 +00:00  
				
					
						
							
							
								 
						
							
								33eb909939 
								
							 
						 
						
							
							
								
								Fix some warnings on VC++  
							
							... 
							
							
							
							llvm-svn: 17481 
							
						 
						
							2004-11-05 04:45:43 +00:00  
				
					
						
							
							
								 
						
							
								96f6616479 
								
							 
						 
						
							
							
								
								* Rearrange code slightly  
							
							... 
							
							
							
							* Disable broken transforms for simplifying (setcc (cast X to larger), CI)
  where CC is not != or ==
llvm-svn: 17422 
							
						 
						
							2004-11-02 03:50:32 +00:00  
				
					
						
							
							
								 
						
							
								70c2039b39 
								
							 
						 
						
							
							
								
								Hrm, this code was severely botched.  As it turns out, this patch:  
							
							... 
							
							
							
							http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20041018/019708.html 
exposed ANOTHER latent bug in this xform, which caused Prolangs-C/bison to fill
the zion nightly tester disk up and make the tester barf.
This is obviously not a good thing, so lets fix this bug shall we? :)
llvm-svn: 17276 
						
							2004-10-27 05:57:15 +00:00  
				
					
						
							
							
								 
						
							
								5c3c21e10a 
								
							 
						 
						
							
							
								
								Fix a bug Nate noticed, where we miscompiled a simple testcase  
							
							... 
							
							
							
							llvm-svn: 17157 
							
						 
						
							2004-10-22 04:53:16 +00:00  
				
					
						
							
							
								 
						
							
								8ba9ec9bbb 
								
							 
						 
						
							
							
								
								Turn things with obviously undefined semantics into 'store -> null'  
							
							... 
							
							
							
							llvm-svn: 17110 
							
						 
						
							2004-10-18 02:59:09 +00:00  
				
					
						
							
							
								 
						
							
								3b92f17165 
								
							 
						 
						
							
							
								
								My friend the invoke instruction does not dominate all basic blocks if it  
							
							... 
							
							
							
							occurs in the entry node of a function
llvm-svn: 17109 
							
						 
						
							2004-10-18 01:48:31 +00:00  
				
					
						
							
							
								 
						
							
								107c15c33d 
								
							 
						 
						
							
							
								
								Remove printout, realize that instructions in the entry block dominate all  
							
							... 
							
							
							
							other blocks.
llvm-svn: 17099 
							
						 
						
							2004-10-17 21:31:34 +00:00  
				
					
						
							
							
								 
						
							
								e29d634a94 
								
							 
						 
						
							
							
								
								hasConstantValue will soon return instructions that don't dominate the PHI node,  
							
							... 
							
							
							
							so prepare for this.
llvm-svn: 17095 
							
						 
						
							2004-10-17 21:22:38 +00:00  
				
					
						
							
							
								 
						
							
								67f0545daf 
								
							 
						 
						
							
							
								
								Fix a type violation  
							
							... 
							
							
							
							llvm-svn: 17069 
							
						 
						
							2004-10-16 23:28:04 +00:00  
				
					
						
							
							
								 
						
							
								684c5c6587 
								
							 
						 
						
							
							
								
								Kill the bogon that slipped into my buffer before I committed.  
							
							... 
							
							
							
							llvm-svn: 17067 
							
						 
						
							2004-10-16 19:46:33 +00:00  
				
					
						
							
							
								 
						
							
								6580e09fef 
								
							 
						 
						
							
							
								
								Implement InstCombine/getelementptr.ll:test9, which is the source of many  
							
							... 
							
							
							
							ugly and giant constnat exprs in some programs.
llvm-svn: 17066 
							
						 
						
							2004-10-16 19:44:59 +00:00  
				
					
						
							
							
								 
						
							
								81a7a23494 
								
							 
						 
						
							
							
								
								Optimize instructions involving undef values.  For example X+undef == undef.  
							
							... 
							
							
							
							llvm-svn: 17047 
							
						 
						
							2004-10-16 18:11:37 +00:00  
				
					
						
							
							
								 
						
							
								00648e1f86 
								
							 
						 
						
							
							
								
								Transform memmove -> memcpy when the source is obviously constant memory.  
							
							... 
							
							
							
							llvm-svn: 16932 
							
						 
						
							2004-10-12 04:52:52 +00:00  
				
					
						
							
							
								 
						
							
								a92af96c56 
								
							 
						 
						
							
							
								
								Reenable the transform, turning X/-10 < 1 into X > -10  
							
							... 
							
							
							
							llvm-svn: 16918 
							
						 
						
							2004-10-11 19:40:04 +00:00  
				
					
						
							
							
								 
						
							
								4ad08352b4 
								
							 
						 
						
							
							
								
								Implement sub.ll:test17, -X/C -> X/-C  
							
							... 
							
							
							
							llvm-svn: 16863 
							
						 
						
							2004-10-09 02:50:40 +00:00  
				
					
						
							
							
								 
						
							
								0b41e861b6 
								
							 
						 
						
							
							
								
								Temporarily disable a buggy transformation until it can be fixed.  This fixes  
							
							... 
							
							
							
							254.gap.
llvm-svn: 16853 
							
						 
						
							2004-10-08 19:15:44 +00:00  
				
					
						
							
							
								 
						
							
								bff91d9a2e 
								
							 
						 
						
							
							
								
								Instcombine (X & FF00) + xx00  -> (X+xx00) & FF00, implementing and.ll:test27  
							
							... 
							
							
							
							This comes up when doing adds to bitfield elements.
llvm-svn: 16836 
							
						 
						
							2004-10-08 05:07:56 +00:00  
				
					
						
							
							
								 
						
							
								44bd392cbf 
								
							 
						 
						
							
							
								
								Little patch to turn (shl (add X, 123), 4) -> (add (shl X, 4), 123 << 4)  
							
							... 
							
							
							
							This triggers in cases of bitfield additions, opening opportunities for
future improvements.
llvm-svn: 16834 
							
						 
						
							2004-10-08 03:46:20 +00:00  
				
					
						
							
							
								 
						
							
								0aee4b7947 
								
							 
						 
						
							
							
								
								Instcombine: -(X sdiv C)  -> (X sdiv -C), tested by sub.ll:test16  
							
							... 
							
							
							
							llvm-svn: 16769 
							
						 
						
							2004-10-06 15:08:25 +00:00  
				
					
						
							
							
								 
						
							
								abae776b18 
								
							 
						 
						
							
							
								
								Hrm, debugging printouts do not need to be in here  
							
							... 
							
							
							
							llvm-svn: 16598 
							
						 
						
							2004-09-29 21:21:14 +00:00  
				
					
						
							
							
								 
						
							
								6862fbd2cf 
								
							 
						 
						
							
							
								
								* Pull range optimization code out into new InsertRangeTest function.  
							
							... 
							
							
							
							* SubOne/AddOne functions always return ConstantInt, declare them as such
* Pull code for handling setcc X, cst, where cst is at the end of the range,
  or cc is LE or GE up earlier in visitSetCondInst.  This reduces #iterations
  in some cases.
* Fold: (div X, C1) op C2 -> range check, implementing div.ll:test6 - test9.
llvm-svn: 16588 
							
						 
						
							2004-09-29 17:40:11 +00:00  
				
					
						
							
							
								 
						
							
								6a4adcda4c 
								
							 
						 
						
							
							
								
								Fold binary expressions and casts into PHI nodes that have all constant inputs.  
							
							... 
							
							
							
							This takes something like this:
%A = phi int [ 3, %cond_false.0 ], [ 2, %endif.0.i ], [ 2, %endif.1.i ]
%B = div int %tmp.243, 4
and turns it into:
%A = phi int [ 3/4, %cond_false.0 ], [ 2/4, %endif.0.i ], [ 2/4, %endif.1.i ]
which is later simplified (in this case) into %A = 0.
This triggers thousands of times in spec, for example, 269 times in 176.gcc.
This is tested by InstCombine/add.ll:test23 and set.ll:test18.
llvm-svn: 16582 
							
						 
						
							2004-09-29 05:07:12 +00:00  
				
					
						
							
							
								 
						
							
								c949128b2f 
								
							 
						 
						
							
							
								
								Hrm, really, all tests passed without this, but it is scary to think how...  
							
							... 
							
							
							
							llvm-svn: 16568 
							
						 
						
							2004-09-29 03:16:24 +00:00  
				
					
						
							
							
								 
						
							
								be7a69ebd8 
								
							 
						 
						
							
							
								
								Remove debugging printout  
							
							... 
							
							
							
							Instcombine (setcc (truncate X), C1).
This occurs THOUSANDS of times in many benchmarks.  Particularlly common
seem to be things like (seteq (cast bool X to int), int 0)
This turns it into (seteq bool %X, false), which then becomes (not %X).
llvm-svn: 16567 
							
						 
						
							2004-09-29 03:09:18 +00:00  
				
					
						
							
							
								 
						
							
								dcf756ec22 
								
							 
						 
						
							
							
								
								Fold (X setcc C1) | (X setcc C2)  
							
							... 
							
							
							
							This implements or.ll:test1[89]
llvm-svn: 16561 
							
						 
						
							2004-09-28 22:33:08 +00:00  
				
					
						
							
							
								 
						
							
								623826c888 
								
							 
						 
						
							
							
								
								Fold (and (setcc X, C1), (setcc X, C2))  
							
							... 
							
							
							
							This is important for several reasons:
1. Benchmarks have lots of code that looks like this (perlbmk in particular):
  %tmp.2.i = setne int %tmp.0.i, 128              ; <bool> [#uses=1]
  %tmp.6343 = seteq int %tmp.0.i, 1               ; <bool> [#uses=1]
  %tmp.63 = and bool %tmp.2.i, %tmp.6343          ; <bool> [#uses=1]
   we now fold away the setne, a clear improvement.
2. In the more important cases, such as (X >= 10) & (X < 20), we now produce
   smaller code: (X-10) < 10.
3. Perhaps the nicest effect of this patch is that it really helps out the
   code generators.  In particular, for a 'range test' like the above,
   instead of generating this on X86 (the difference on PPC is even more
   pronounced):
        cmp %EAX, 50
        setge %CL
        cmp %EAX, 100
        setl %AL
        and %CL, %AL
        cmp %CL, 0
   we now generate this:
        add %EAX, -50
        cmp %EAX, 50
   Furthermore, this causes setcc's to be folded into branches more often.
These combinations trigger dozens of times in the spec benchmarks, particularly
in 176.gcc, 186.crafty, 253.perlbmk, 254.gap, & 099.go.
llvm-svn: 16559 
							
						 
						
							2004-09-28 21:48:02 +00:00  
				
					
						
							
							
								 
						
							
								272d5ca9e0 
								
							 
						 
						
							
							
								
								Implement X / C1 / C2 folding  
							
							... 
							
							
							
							Implement (setcc (shl X, C1), C2) folding.
The second one occurs several dozen times in spec.  The first was added
just in case.  :)
These are tested by shift.ll:test2[12], and div.ll:test5
llvm-svn: 16549 
							
						 
						
							2004-09-28 18:22:15 +00:00  
				
					
						
							
							
								 
						
							
								6afc02f816 
								
							 
						 
						
							
							
								
								shl is always zero extending, so always use a zero extending shift right.  
							
							... 
							
							
							
							This latent bug was exposed by recent changes, and is tested as:
llvm/test/Regression/Transforms/InstCombine/2004-09-28-BadShiftAndSetCC.llx
llvm-svn: 16546 
							
						 
						
							2004-09-28 17:54:07 +00:00  
				
					
						
							
							
								 
						
							
								bfff18a869 
								
							 
						 
						
							
							
								
								Fix two bugs: one where a condition was mistakenly swapped, and another  
							
							... 
							
							
							
							where we folded (X & 254) -> X < 1 instead of X < 2.  These problems were
latent problems exposed by the latest patch.
llvm-svn: 16528 
							
						 
						
							2004-09-27 19:29:18 +00:00  
				
					
						
							
							
								 
						
							
								1023b8726e 
								
							 
						 
						
							
							
								
								Fold: (setcc (shr X, ShAmt), CI), where 'cc' is eq or ne.  This xform  
							
							... 
							
							
							
							triggers often, for example:
6x in povray, 1x in gzip, 279x in gcc, 1x in crafty, 8x in eon, 11x in perlbmk,
362x in gap, 4x in vortex, 14 in m88ksim, 211x in 126.gcc, 1x in compress,
11x in ijpeg, and 4x in 147.vortex.
llvm-svn: 16521 
							
						 
						
							2004-09-27 16:18:50 +00:00  
				
					
						
							
							
								 
						
							
								7e794273f5 
								
							 
						 
						
							
							
								
								Implement shift-and combinations, implementing InstCombine/and.ll:test19-21  
							
							... 
							
							
							
							These combinations trigger 4 times in povray, 7x in gcc, 4x in gap, and 2x in bzip2.
llvm-svn: 16508 
							
						 
						
							2004-09-24 15:21:34 +00:00  
				
					
						
							
							
								 
						
							
								e1b4d2a470 
								
							 
						 
						
							
							
								
								Move LHSI->hasOneUse() into the arms of the conditional, reindenting code.  
							
							... 
							
							
							
							No functionality changes here.
llvm-svn: 16505 
							
						 
						
							2004-09-23 21:52:49 +00:00  
				
					
						
							
							
								 
						
							
								8fc5af4da9 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/and.ll:test18, a case that occurs 20 times  
							
							... 
							
							
							
							in perlbmk
llvm-svn: 16504 
							
						 
						
							2004-09-23 21:46:38 +00:00  
				
					
						
							
							
								 
						
							
								bdcf41a8a2 
								
							 
						 
						
							
							
								
								Implement select.ll:test16: fold   load (select C, X, null)  -> load X  
							
							... 
							
							
							
							llvm-svn: 16499 
							
						 
						
							2004-09-23 15:46:00 +00:00  
				
					
						
							
							
								 
						
							
								b121ae1cec 
								
							 
						 
						
							
							
								
								Do not fold (X + C1 != C2) if there are other users of the add.  Doing  
							
							... 
							
							
							
							this transformation used to take a loop like this:
int Array[1000];
void test(int X) {
  int i;
  for (i = 0; i < 1000; ++i)
    Array[i] += X;
}
Compiled to LLVM is:
no_exit:                ; preds = %entry, %no_exit
        %indvar = phi uint [ 0, %entry ], [ %indvar.next, %no_exit ]            ; <uint> [#uses=2]
        %tmp.4 = getelementptr [1000 x int]* %Array, int 0, uint %indvar                ; <int*> [#uses=2]
        %tmp.7 = load int* %tmp.4               ; <int> [#uses=1]
        %tmp.9 = add int %tmp.7, %X             ; <int> [#uses=1]
        store int %tmp.9, int* %tmp.4
***     %indvar.next = add uint %indvar, 1              ; <uint> [#uses=2]
***     %exitcond = seteq uint %indvar.next, 1000               ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %no_exit
and turn it into a loop like this:
no_exit:                ; preds = %entry, %no_exit
        %indvar = phi uint [ 0, %entry ], [ %indvar.next, %no_exit ]            ; <uint> [#uses=3]
        %tmp.4 = getelementptr [1000 x int]* %Array, int 0, uint %indvar                ; <int*> [#uses=2]
        %tmp.7 = load int* %tmp.4               ; <int> [#uses=1]
        %tmp.9 = add int %tmp.7, %X             ; <int> [#uses=1]
        store int %tmp.9, int* %tmp.4
***     %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
***     %exitcond = seteq uint %indvar, 999             ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %no_exit
Note that indvar.next and indvar can no longer be coallesced.  In machine
code terms, this patch changes this code:
.LBBtest_1:     # no_exit
        mov %EDX, OFFSET Array
        mov %ESI, %EAX
        add %ESI, DWORD PTR [%EDX + 4*%ECX]
        mov %EDX, OFFSET Array
        mov DWORD PTR [%EDX + 4*%ECX], %ESI
        mov %EDX, %ECX
        inc %EDX
        cmp %ECX, 999
        mov %ECX, %EDX
        jne .LBBtest_1  # no_exit
into this:
.LBBtest_1:     # no_exit
        mov %EDX, OFFSET Array
        mov %ESI, %EAX
        add %ESI, DWORD PTR [%EDX + 4*%ECX]
        mov %EDX, OFFSET Array
        mov DWORD PTR [%EDX + 4*%ECX], %ESI
        inc %ECX
        cmp %ECX, 1000
        jne .LBBtest_1  # no_exit
We need better instruction selection to get this:
.LBBtest_1:     # no_exit
        add DWORD PTR [Array + 4*%ECX], EAX
        inc %ECX
        cmp %ECX, 1000
        jne .LBBtest_1  # no_exit
... but at least there is less register juggling
llvm-svn: 16473 
							
						 
						
							2004-09-21 21:35:23 +00:00  
				
					
						
							
							
								 
						
							
								42618551d5 
								
							 
						 
						
							
							
								
								Fix potential miscompilations: InstCombine/2004-09-20-BadLoadCombine*.llx  
							
							... 
							
							
							
							llvm-svn: 16447 
							
						 
						
							2004-09-20 10:15:10 +00:00  
				
					
						
							
							
								 
						
							
								d59cebf87a 
								
							 
						 
						
							
							
								
								Fix loop condition so that we don't decrement off the beginning of the  
							
							... 
							
							
							
							list.
llvm-svn: 16440 
							
						 
						
							2004-09-20 06:42:58 +00:00  
				
					
						
							
							
								 
						
							
								e6f13093e6 
								
							 
						 
						
							
							
								
								Make isSafeToLoadUnconditionally a bit smarter, implementing PR362 and  
							
							... 
							
							
							
							Regression/Transforms/InstCombine/CPP_min_max.llx
llvm-svn: 16409 
							
						 
						
							2004-09-19 19:18:10 +00:00  
				
					
						
							
							
								 
						
							
								f62ea8ef4b 
								
							 
						 
						
							
							
								
								Make instruction combining a bit more aggressive in the face of volatile  
							
							... 
							
							
							
							loads, and implement two new transforms: InstCombine/load.ll:test[56].
llvm-svn: 16404 
							
						 
						
							2004-09-19 18:43:46 +00:00  
				
					
						
							
							
								 
						
							
								7c16caa336 
								
							 
						 
						
							
							
								
								Changes For Bug 352  
							
							... 
							
							
							
							Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.
llvm-svn: 16137 
							
						 
						
							2004-09-01 22:55:40 +00:00  
				
					
						
							
							
								 
						
							
								4456da6a4c 
								
							 
						 
						
							
							
								
								Fix InstCombine/2004-08-10-BoolSetCC.ll, a bug that is miscompiling  
							
							... 
							
							
							
							176.gcc.  Note that this is apparently not the only bug miscompiling gcc
though. :(
llvm-svn: 15639 
							
						 
						
							2004-08-11 00:50:51 +00:00  
				
					
						
							
							
								 
						
							
								8e7260652b 
								
							 
						 
						
							
							
								
								Fix InstCombine/2004-08-09-RemInfLoop.llx  
							
							... 
							
							
							
							This should go into the 1.3 branch
llvm-svn: 15593 
							
						 
						
							2004-08-09 21:05:48 +00:00  
				
					
						
							
							
								 
						
							
								832437255d 
								
							 
						 
						
							
							
								
								Stop using getValues().  
							
							... 
							
							
							
							llvm-svn: 15487 
							
						 
						
							2004-08-04 08:44:43 +00:00  
				
					
						
							
							
								 
						
							
								7aa2d4747a 
								
							 
						 
						
							
							
								
								Fix a regression in InstCombine/xor.ll  
							
							... 
							
							
							
							llvm-svn: 15410 
							
						 
						
							2004-08-01 19:42:59 +00:00  
				
					
						
							
							
								 
						
							
								9c003d8f65 
								
							 
						 
						
							
							
								
								Fix De Morgan's name.  
							
							... 
							
							
							
							llvm-svn: 15343 
							
						 
						
							2004-07-30 12:50:08 +00:00  
				
					
						
							
							
								 
						
							
								d4252a7c64 
								
							 
						 
						
							
							
								
								Start using the PatternMatcher a bit.  
							
							... 
							
							
							
							llvm-svn: 15342 
							
						 
						
							2004-07-30 07:50:03 +00:00  
				
					
						
							
							
								 
						
							
								7b5b86cd0f 
								
							 
						 
						
							
							
								
								This change fixed a bug in the function visitMul.  The prior version  
							
							... 
							
							
							
							assumed that a constant on the RHS of a multiplication was either an
IntConstant or an FPConstant.  It checked for an IntConstant and then,
if it did not find one, did a hard cast to an FPConstant.  That code
would crash if the RHS were a ConstantExpr that was neither an
IntConstant nor an FPConstant.  This version replaces the hard cast
with a dyn_cast.  It performs the same way for IntConstants and
FPConstants but does nothing, instead of crashing, for constant
expressions.
The regression test for this change is 2004-07-27-ConstantExprMul.ll.
llvm-svn: 15291 
							
						 
						
							2004-07-27 21:02:21 +00:00  
				
					
						
							
							
								 
						
							
								38b79e8fbc 
								
							 
						 
						
							
							
								
								Make the create...() functions for some of these passes return a FunctionPass *.  
							
							... 
							
							
							
							llvm-svn: 15276 
							
						 
						
							2004-07-27 17:43:21 +00:00  
				
					
						
							
							
								 
						
							
								d8f5e2ccac 
								
							 
						 
						
							
							
								
								* Further cleanup.  
							
							... 
							
							
							
							* Test for whether bits are shifted out during the optzn.
If so, the fold is illegal, though it can be handled explicitly for setne/seteq
This fixes the miscompilation of 254.gap last night, which was a latent bug
exposed by other optimizer improvements.
llvm-svn: 15085 
							
						 
						
							2004-07-21 20:14:10 +00:00  
				
					
						
							
							
								 
						
							
								1638de4499 
								
							 
						 
						
							
							
								
								Make cast-cast code a bit more defensive  
							
							... 
							
							
							
							"simplify" a bit of code for comparison/and folding
llvm-svn: 15082 
							
						 
						
							2004-07-21 19:50:44 +00:00  
				
					
						
							
							
								 
						
							
								4fbad968f8 
								
							 
						 
						
							
							
								
								Remove special casing of pointers and treat them generically as integers of  
							
							... 
							
							
							
							the appopriate size.  This gives us the ability to eliminate int -> ptr -> int
llvm-svn: 15063 
							
						 
						
							2004-07-21 04:27:24 +00:00  
				
					
						
							
							
								 
						
							
								11ffd59e37 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/IntPtrCast.ll  
							
							... 
							
							
							
							llvm-svn: 15029 
							
						 
						
							2004-07-20 05:21:00 +00:00  
				
					
						
							
							
								 
						
							
								44d0b9502a 
								
							 
						 
						
							
							
								
								Implement InstCombine/GEPIdxCanon.ll  
							
							... 
							
							
							
							llvm-svn: 15024 
							
						 
						
							2004-07-20 01:48:15 +00:00  
				
					
						
							
							
								 
						
							
								4e2dbc6b4a 
								
							 
						 
						
							
							
								
								Rewrite cast->cast elimination code completely based on the information we  
							
							... 
							
							
							
							actually care about.  Someday when the cast instruction is gone, we can do
better here, but this will do for now.  This implements
instcombine/cast.ll:test17/18 as well.
llvm-svn: 15018 
							
						 
						
							2004-07-20 00:59:32 +00:00  
				
					
						
							
							
								 
						
							
								f3edc49ae2 
								
							 
						 
						
							
							
								
								Minor cleanup, no functionality change  
							
							... 
							
							
							
							llvm-svn: 14972 
							
						 
						
							2004-07-18 18:59:44 +00:00  
				
					
						
							
							
								 
						
							
								539429d9b5 
								
							 
						 
						
							
							
								
								Delete a no-op loop.  
							
							... 
							
							
							
							llvm-svn: 14965 
							
						 
						
							2004-07-18 08:32:43 +00:00  
				
					
						
							
							
								 
						
							
								874368790f 
								
							 
						 
						
							
							
								
								bug 122:  
							
							... 
							
							
							
							- Replace ConstantPointerRef usage with GlobalValue usage
- Minimize redundant isa<GlobalValue> usage
- Correct isa<Constant> for GlobalValue subclass
llvm-svn: 14950 
							
						 
						
							2004-07-18 00:38:32 +00:00  
				
					
						
							
							
								 
						
							
								35e24774eb 
								
							 
						 
						
							
							
								
								Factor some code to handle "load (constantexpr cast foo)" just like  
							
							... 
							
							
							
							"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 
							
						 
						
							2004-07-13 01:49:43 +00:00  
				
					
						
							
							
								 
						
							
								9eb9ccd9f6 
								
							 
						 
						
							
							
								
								Check to make sure types are sized before calling getTypeSize on them.  
							
							... 
							
							
							
							llvm-svn: 14649 
							
						 
						
							2004-07-06 19:28:42 +00:00  
				
					
						
							
							
								 
						
							
								23b47b6af9 
								
							 
						 
						
							
							
								
								Implement rem.ll:test3  
							
							... 
							
							
							
							llvm-svn: 14640 
							
						 
						
							2004-07-06 07:38:18 +00:00  
				
					
						
							
							
								 
						
							
								98c6bdf251 
								
							 
						 
						
							
							
								
								Fix a minor bug where we would go into infinite loops on some constants  
							
							... 
							
							
							
							llvm-svn: 14638 
							
						 
						
							2004-07-06 07:11:42 +00:00  
				
					
						
							
							
								 
						
							
								7fd5f0745a 
								
							 
						 
						
							
							
								
								Implement InstCombine/sub.ll:test15:  X % -Y === X % Y  
							
							... 
							
							
							
							Also, remove X % -1 = 0, because it's not true for unsigneds, and the
signed case is superceeded by this new handling.
llvm-svn: 14637 
							
						 
						
							2004-07-06 07:01:22 +00:00  
				
					
						
							
							
								 
						
							
								4c9c20af28 
								
							 
						 
						
							
							
								
								Implement add.ll:test22, a common case in MSIL files  
							
							... 
							
							
							
							llvm-svn: 14587 
							
						 
						
							2004-07-03 00:26:11 +00:00  
				
					
						
							
							
								 
						
							
								49df6cefa5 
								
							 
						 
						
							
							
								
								Do not call getTypeSize on a type that has no size  
							
							... 
							
							
							
							llvm-svn: 14584 
							
						 
						
							2004-07-02 22:55:47 +00:00  
				
					
						
							
							
								 
						
							
								6e07936ed2 
								
							 
						 
						
							
							
								
								Implement InstCombine/add.ll:test21  
							
							... 
							
							
							
							llvm-svn: 14443 
							
						 
						
							2004-06-27 22:51:36 +00:00  
				
					
						
							
							
								 
						
							
								023a483c76 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/and.ll:test17, a common case that  
							
							... 
							
							
							
							occurs due to unordered comparison macros in math.h
llvm-svn: 14221 
							
						 
						
							2004-06-18 06:07:51 +00:00  
				
					
						
							
							
								 
						
							
								97bfcea262 
								
							 
						 
						
							
							
								
								Rename Type::PrimitiveID to TypeId and ::getPrimitiveID() to ::getTypeID()  
							
							... 
							
							
							
							Delete two functions that are now methods on the Type class
llvm-svn: 14200 
							
						 
						
							2004-06-17 18:16:02 +00:00  
				
					
						
							
							
								 
						
							
								ee59d4bf04 
								
							 
						 
						
							
							
								
								Fix a bug in my checkin from last night that caused miscompilations of  
							
							... 
							
							
							
							186.crafty, fhourstones and 132.ijpeg.
Bugpoint makes really nasty miscompilations embarassingly easy to find.  It
narrowed it down to the instcombiner and this testcase (from fhourstones):
bool %l7153_l4706_htstat_loopentry_2E_4_no_exit_2E_4(int* %i, [32 x int]* %works, int* %tmp.98.out) {
newFuncRoot:
        %tmp.96 = load int* %i          ; <int> [#uses=1]
        %tmp.97 = getelementptr [32 x int]* %works, long 0, int %tmp.96         ; <int*> [#uses=1]
        %tmp.98 = load int* %tmp.97             ; <int> [#uses=2]
        %tmp.99 = load int* %i          ; <int> [#uses=1]
        %tmp.100 = and int %tmp.99, 7           ; <int> [#uses=1]
        %tmp.101 = seteq int %tmp.100, 7                ; <bool> [#uses=2]
        %tmp.102 = cast bool %tmp.101 to int            ; <int> [#uses=0]
        br bool %tmp.101, label %codeRepl4.exitStub, label %codeRepl3.exitStub
codeRepl4.exitStub:             ; preds = %newFuncRoot
        store int %tmp.98, int* %tmp.98.out
        ret bool true
codeRepl3.exitStub:             ; preds = %newFuncRoot
        store int %tmp.98, int* %tmp.98.out
        ret bool false
}
... which only has one combination performed on it:
$ llvm-as < t.ll | opt -instcombine -debug | llvm-dis
IC: Old =       %tmp.101 = seteq int %tmp.100, 7                ; <bool> [#uses=1]
    New =       setne int %tmp.100, 0           ; <bool>:<badref> [#uses=0]
IC: MOD =       br bool %tmp.101, label %codeRepl3.exitStub, label %codeRepl4.exitStub
IC: MOD =       %tmp.97 = getelementptr [32 x int]* %works, uint 0, int %tmp.96         ; <int*> [#uses=1]
It doesn't get much better than this.  :)
llvm-svn: 14109 
							
						 
						
							2004-06-10 02:33:20 +00:00  
				
					
						
							
							
								 
						
							
								c8e7e298c1 
								
							 
						 
						
							
							
								
								More minor cleanups  
							
							... 
							
							
							
							llvm-svn: 14108 
							
						 
						
							2004-06-10 02:12:35 +00:00  
				
					
						
							
							
								 
						
							
								df20a4d589 
								
							 
						 
						
							
							
								
								Eliminate many occurrances of Instruction::  
							
							... 
							
							
							
							llvm-svn: 14107 
							
						 
						
							2004-06-10 02:07:29 +00:00  
				
					
						
							
							
								 
						
							
								35167c3087 
								
							 
						 
						
							
							
								
								Implement InstCombine/select.ll:test15*  
							
							... 
							
							
							
							llvm-svn: 14095 
							
						 
						
							2004-06-09 07:59:58 +00:00  
				
					
						
							
							
								 
						
							
								396dbfe327 
								
							 
						 
						
							
							
								
								Be more careful about the order we put stuff onto the worklist.  This allow us to  
							
							... 
							
							
							
							collapse this:
bool %le(int %A, int %B) {
        %c1 = setgt int %A, %B
        %tmp = select bool %c1, int 1, int 0
        %c2 = setlt int %A, %B
        %result = select bool %c2, int -1, int %tmp
        %c3 = setle int %result, 0
        ret bool %c3
}
into:
bool %le(int %A, int %B) {
        %c3 = setle int %A, %B          ; <bool> [#uses=1]
        ret bool %c3
}
which is handy, because the Java FE makes these sequences all over the place.
This is tested as: test/Regression/Transforms/InstCombine/JavaCompare.ll
llvm-svn: 14086 
							
						 
						
							2004-06-09 05:08:07 +00:00  
				
					
						
							
							
								 
						
							
								2dd017402b 
								
							 
						 
						
							
							
								
								Implement select.ll:test14*  
							
							... 
							
							
							
							llvm-svn: 14083 
							
						 
						
							2004-06-09 04:24:29 +00:00  
				
					
						
							
							
								 
						
							
								ed79d8af53 
								
							 
						 
						
							
							
								
								Fix InstCombine/load.ll & PR347.  
							
							... 
							
							
							
							This code hadn't been updated after the "structs with more than 256 elements"
related changes to the GEP instruction.  Also it was not handling the
ConstantAggregateZero class.
Now it does!
llvm-svn: 13834 
							
						 
						
							2004-05-27 17:30:27 +00:00  
				
					
						
							
							
								 
						
							
								e1e10e1883 
								
							 
						 
						
							
							
								
								Implement InstCombine:shift.ll:test16, which turns (X >> C1) & C2 != C3  
							
							... 
							
							
							
							into (X & (C2 << C1)) != (C3 << C1), where the shift may be either left or
right and the compare may be any one.
This triggers 1546 times in 176.gcc alone, as it is a common pattern that
occurs for bitfield accesses.
llvm-svn: 13740 
							
						 
						
							2004-05-25 06:32:08 +00:00  
				
					
						
							
							
								 
						
							
								03841659a4 
								
							 
						 
						
							
							
								
								Implement instcombine/cast.ll:test16:  
							
							... 
							
							
							
							Canonicalize cast X to bool into a setne instruction
llvm-svn: 13736 
							
						 
						
							2004-05-25 04:29:21 +00:00  
				
					
						
							
							
								 
						
							
								0026512bac 
								
							 
						 
						
							
							
								
								This was not meant to be committed  
							
							... 
							
							
							
							llvm-svn: 13565 
							
						 
						
							2004-05-13 20:56:34 +00:00  
				
					
						
							
							
								 
						
							
								c12c945cc4 
								
							 
						 
						
							
							
								
								Fix a nasty bug that caused us to unroll EXTREMELY large loops due to overflow  
							
							... 
							
							
							
							in the size calculation.
This is not something you want to see:
Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - UNROLLING!
The problem was that 2*2147483648 == 0.
Now we get:
Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - TOO LARGE: 4294967296>100
Thanks to some anonymous person playing with the demo page that repeatedly
caused zion to go into swapping land.  That's one way to ensure you'll get
a quick bugfix.  :)
Testcase here: Transforms/LoopUnroll/2004-05-13-DontUnrollTooMuch.ll
llvm-svn: 13564 
							
						 
						
							2004-05-13 20:43:31 +00:00  
				
					
						
							
							
								 
						
							
								8ec5f88c79 
								
							 
						 
						
							
							
								
								Fix stupid bug in my checkin yesterday  
							
							... 
							
							
							
							llvm-svn: 13429 
							
						 
						
							2004-05-08 22:41:42 +00:00  
				
					
						
							
							
								 
						
							
								5f667a6f58 
								
							 
						 
						
							
							
								
								Implement folding of GEP's like:  
							
							... 
							
							
							
							%tmp.0 = getelementptr [50 x sbyte]* %ar, uint 0, int 5         ; <sbyte*> [#uses=2]
        %tmp.7 = getelementptr sbyte* %tmp.0, int 8             ; <sbyte*> [#uses=1]
together.  This patch actually allows us to simplify and generalize the code.
llvm-svn: 13415 
							
						 
						
							2004-05-07 22:09:22 +00:00  
				
					
						
							
							
								 
						
							
								d9e5813821 
								
							 
						 
						
							
							
								
								Fix PR336: The instcombine pass asserts when visiting load instruction  
							
							... 
							
							
							
							llvm-svn: 13400 
							
						 
						
							2004-05-07 15:35:56 +00:00  
				
					
						
							
							
								 
						
							
								dd1a86d858 
								
							 
						 
						
							
							
								
								Minor efficiency tweak, suggested by Patrick Meredith  
							
							... 
							
							
							
							llvm-svn: 13341 
							
						 
						
							2004-05-04 15:19:33 +00:00  
				
					
						
							
							
								 
						
							
								63d75af920 
								
							 
						 
						
							
							
								
								Make sure to reprocess instructions used by deleted instructions to avoid  
							
							... 
							
							
							
							missing opportunities for combination.
llvm-svn: 13309 
							
						 
						
							2004-05-01 23:27:23 +00:00  
				
					
						
							
							
								 
						
							
								b643a9e675 
								
							 
						 
						
							
							
								
								Make sure the instruction combiner doesn't lose track of instructions  
							
							... 
							
							
							
							when replacing them, missing the opportunity to do simplifications
llvm-svn: 13308 
							
						 
						
							2004-05-01 23:19:52 +00:00  
				
					
						
							
							
								 
						
							
								652064e3b8 
								
							 
						 
						
							
							
								
								Fix a major pessimization in the instcombiner.  If an allocation instruction  
							
							... 
							
							
							
							is only used by a cast, and the casted type is the same size as the original
allocation, it would eliminate the cast by folding it into the allocation.
Unfortunately, it was placing the new allocation instruction right before
the cast, which could pull (for example) alloca instructions into the body
of a function.  This turns statically allocatable allocas into expensive
dynamically allocated allocas, which is bad bad bad.
This fixes the problem by placing the new allocation instruction at the same
place the old one was, duh. :)
llvm-svn: 13289 
							
						 
						
							2004-04-30 04:37:52 +00:00  
				
					
						
							
							
								 
						
							
								2d3a7a6ff0 
								
							 
						 
						
							
							
								
								Changes to fix up the inst_iterator to pass to boost iterator checks.  This  
							
							... 
							
							
							
							patch was graciously contributed by Vladimir Prus.
llvm-svn: 13185 
							
						 
						
							2004-04-27 15:13:33 +00:00  
				
					
						
							
							
								 
						
							
								e20c334e65 
								
							 
						 
						
							
							
								
								Instcombine X/-1 --> 0-X  
							
							... 
							
							
							
							llvm-svn: 13172 
							
						 
						
							2004-04-26 14:01:59 +00:00  
				
					
						
							
							
								 
						
							
								1e9ac1a45e 
								
							 
						 
						
							
							
								
								Fix a HUGE pessimization on X86.  The indvars pass was taking this  
							
							... 
							
							
							
							(familiar) function:
int _strlen(const char *str) {
    int len = 0;
    while (*str++) len++;
    return len;
}
And transforming it to use a ulong induction variable, because the type of
the pointer index was left as a constant long.  This is obviously very bad.
The fix is to shrink long constants in getelementptr instructions to intptr_t,
making the indvars pass insert a uint induction variable, which is much more
efficient.
Here's the before code for this function:
int %_strlen(sbyte* %str) {
entry:
        %tmp.13 = load sbyte* %str              ; <sbyte> [#uses=1]
        %tmp.24 = seteq sbyte %tmp.13, 0                ; <bool> [#uses=1]
        br bool %tmp.24, label %loopexit, label %no_exit
no_exit:                ; preds = %entry, %no_exit
***     %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ]            ; <uint> [#uses=2]
***     %indvar = phi ulong [ %indvar.next, %no_exit ], [ 0, %entry ]           ; <ulong> [#uses=2]
        %indvar1 = cast ulong %indvar to uint           ; <uint> [#uses=1]
        %inc.02.sum = add uint %indvar1, 1              ; <uint> [#uses=1]
        %inc.0.0 = getelementptr sbyte* %str, uint %inc.02.sum          ; <sbyte*> [#uses=1]
        %tmp.1 = load sbyte* %inc.0.0           ; <sbyte> [#uses=1]
        %tmp.2 = seteq sbyte %tmp.1, 0          ; <bool> [#uses=1]
        %indvar.next = add ulong %indvar, 1             ; <ulong> [#uses=1]
        %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
        br bool %tmp.2, label %loopexit.loopexit, label %no_exit
loopexit.loopexit:              ; preds = %no_exit
        %indvar = cast uint %indvar to int              ; <int> [#uses=1]
        %inc.1 = add int %indvar, 1             ; <int> [#uses=1]
        ret int %inc.1
loopexit:               ; preds = %entry
        ret int 0
}
Here's the after code:
int %_strlen(sbyte* %str) {
entry:
        %inc.02 = getelementptr sbyte* %str, uint 1             ; <sbyte*> [#uses=1]
        %tmp.13 = load sbyte* %str              ; <sbyte> [#uses=1]
        %tmp.24 = seteq sbyte %tmp.13, 0                ; <bool> [#uses=1]
        br bool %tmp.24, label %loopexit, label %no_exit
no_exit:                ; preds = %entry, %no_exit
***     %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ]            ; <uint> [#uses=3]
        %indvar = cast uint %indvar to int              ; <int> [#uses=1]
        %inc.0.0 = getelementptr sbyte* %inc.02, uint %indvar           ; <sbyte*> [#uses=1]
        %inc.1 = add int %indvar, 1             ; <int> [#uses=1]
        %tmp.1 = load sbyte* %inc.0.0           ; <sbyte> [#uses=1]
        %tmp.2 = seteq sbyte %tmp.1, 0          ; <bool> [#uses=1]
        %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
        br bool %tmp.2, label %loopexit, label %no_exit
loopexit:               ; preds = %entry, %no_exit
        %len.0.1 = phi int [ 0, %entry ], [ %inc.1, %no_exit ]          ; <int> [#uses=1]
        ret int %len.0.1
}
llvm-svn: 13016 
							
						 
						
							2004-04-17 18:16:10 +00:00  
				
					
						
							
							
								 
						
							
								284d3b0311 
								
							 
						 
						
							
							
								
								Fix some really nasty dominance bugs that were exposed by my patch to  
							
							... 
							
							
							
							make the verifier more strict.  This fixes building zlib
llvm-svn: 13002 
							
						 
						
							2004-04-16 18:08:07 +00:00  
				
					
						
							
							
								 
						
							
								6679e46b59 
								
							 
						 
						
							
							
								
								ADd a trivial instcombine: load null -> null  
							
							... 
							
							
							
							llvm-svn: 12940 
							
						 
						
							2004-04-14 03:28:36 +00:00  
				
					
						
							
							
								 
						
							
								24cf0200c7 
								
							 
						 
						
							
							
								
								Fix a bug in my select transformation  
							
							... 
							
							
							
							llvm-svn: 12826 
							
						 
						
							2004-04-11 01:39:19 +00:00  
				
					
						
							
							
								 
						
							
								623fba1107 
								
							 
						 
						
							
							
								
								Implement InstCombine/select.ll:test13*  
							
							... 
							
							
							
							llvm-svn: 12821 
							
						 
						
							2004-04-10 22:21:27 +00:00  
				
					
						
							
							
								 
						
							
								cf4a996cba 
								
							 
						 
						
							
							
								
								Implement InstCombine/add.ll:test20  
							
							... 
							
							
							
							Canonicalize add of sign bit constant into a xor
llvm-svn: 12819 
							
						 
						
							2004-04-10 22:01:55 +00:00  
				
					
						
							
							
								 
						
							
								f9d9665138 
								
							 
						 
						
							
							
								
								Fix spurious warning in release mode  
							
							... 
							
							
							
							llvm-svn: 12816 
							
						 
						
							2004-04-10 19:15:56 +00:00  
				
					
						
							
							
								 
						
							
								56e4d3d8ad 
								
							 
						 
						
							
							
								
								Implement select.ll:test12*  
							
							... 
							
							
							
							This transforms code like this:
   %C = or %A, %B
   %D = select %cond, %C, %A
into:
   %C = select %cond, %B, 0
   %D = or %A, %C
Since B is often a constant, the select can often be eliminated.  In any case,
this reduces the usage count of A, allowing subsequent optimizations to happen.
This xform applies when the operator is any of:
  add, sub, mul, or, xor, and, shl, shr
llvm-svn: 12800 
							
						 
						
							2004-04-09 23:46:01 +00:00  
				
					
						
							
							
								 
						
							
								183b336a54 
								
							 
						 
						
							
							
								
								Fold binary operators with a constant operand into select instructions  
							
							... 
							
							
							
							that have a constant operand.  This implements
add.ll:test19, shift.ll:test15*, and others that are not tested
llvm-svn: 12794 
							
						 
						
							2004-04-09 19:05:30 +00:00  
				
					
						
							
							
								 
						
							
								cf7baf3519 
								
							 
						 
						
							
							
								
								Implement select.ll:test11  
							
							... 
							
							
							
							llvm-svn: 12793 
							
						 
						
							2004-04-09 18:19:44 +00:00  
				
					
						
							
							
								 
						
							
								e228ee5870 
								
							 
						 
						
							
							
								
								Implement InstCombine/cast-propagate.ll  
							
							... 
							
							
							
							llvm-svn: 12784 
							
						 
						
							2004-04-08 20:39:49 +00:00  
				
					
						
							
							
								 
						
							
								1c631e813d 
								
							 
						 
						
							
							
								
								Implement InstCombine/select.ll:test[7-10]  
							
							... 
							
							
							
							llvm-svn: 12769 
							
						 
						
							2004-04-08 04:43:23 +00:00  
				
					
						
							
							
								 
						
							
								2b2412d0c8 
								
							 
						 
						
							
							
								
								Implement test/Regression/Transforms/InstCombine/getelementptr_index.ll  
							
							... 
							
							
							
							llvm-svn: 12762 
							
						 
						
							2004-04-07 18:38:20 +00:00  
				
					
						
							
							
								 
						
							
								4d1fcf1dcd 
								
							 
						 
						
							
							
								
								Fix a bug in yesterdays checkins which broke siod.  siod is a great testcase!  :)  
							
							... 
							
							
							
							llvm-svn: 12659 
							
						 
						
							2004-04-05 16:02:41 +00:00  
				
					
						
							
							
								 
						
							
								8953b90aaa 
								
							 
						 
						
							
							
								
								Fix InstCombine/2004-04-04-InstCombineReplaceAllUsesWith.ll  
							
							... 
							
							
							
							llvm-svn: 12658 
							
						 
						
							2004-04-05 02:10:19 +00:00  
				
					
						
							
							
								 
						
							
								69193f93b6 
								
							 
						 
						
							
							
								
								Support getelementptr instructions which use uint's to index into structure  
							
							... 
							
							
							
							types and can have arbitrary 32- and 64-bit integer types indexing into
sequential types.
llvm-svn: 12653 
							
						 
						
							2004-04-05 01:30:19 +00:00  
				
					
						
							
							
								 
						
							
								533bc49775 
								
							 
						 
						
							
							
								
								Implement select.ll:test[3-6]  
							
							... 
							
							
							
							llvm-svn: 12544 
							
						 
						
							2004-03-30 19:37:13 +00:00  
				
					
						
							
							
								 
						
							
								56b5051428 
								
							 
						 
						
							
							
								
								X % -1 == X % 1 == 0  
							
							... 
							
							
							
							llvm-svn: 12520 
							
						 
						
							2004-03-26 16:11:24 +00:00  
				
					
						
							
							
								 
						
							
								57c67b06e9 
								
							 
						 
						
							
							
								
								Two changes:  
							
							... 
							
							
							
							#1  is to unconditionally strip constantpointerrefs out of
instruction operands where they are absolutely pointless and inhibit
optimization.  GRRR!
#2  is to implement InstCombine/getelementptr_const.ll
llvm-svn: 12519 
						
							2004-03-25 22:59:29 +00:00  
				
					
						
							
							
								 
						
							
								abb77c9959 
								
							 
						 
						
							
							
								
								Teach the optimizer to delete zero sized alloca's (but not mallocs!)  
							
							... 
							
							
							
							llvm-svn: 12507 
							
						 
						
							2004-03-19 06:08:10 +00:00  
				
					
						
							
							
								 
						
							
								7d2a539735 
								
							 
						 
						
							
							
								
								Add some debugging output  
							
							... 
							
							
							
							Fix InstCombine/2004-03-13-InstCombineInfLoop.ll which caused an infinite
loop compiling (I think) povray.
llvm-svn: 12365 
							
						 
						
							2004-03-13 23:54:27 +00:00  
				
					
						
							
							
								 
						
							
								022167f13b 
								
							 
						 
						
							
							
								
								Implement sub.ll:test14  
							
							... 
							
							
							
							llvm-svn: 12355 
							
						 
						
							2004-03-13 00:11:49 +00:00  
				
					
						
							
							
								 
						
							
								92295c5031 
								
							 
						 
						
							
							
								
								Implement InstCombine/sub.ll:test12 & test13  
							
							... 
							
							
							
							llvm-svn: 12353 
							
						 
						
							2004-03-12 23:53:13 +00:00  
				
					
						
							
							
								 
						
							
								b909e8b0d4 
								
							 
						 
						
							
							
								
								Add trivial optimizations for select instructions  
							
							... 
							
							
							
							llvm-svn: 12317 
							
						 
						
							2004-03-12 05:52:32 +00:00  
				
					
						
							
							
								 
						
							
								51ea127bf3 
								
							 
						 
						
							
							
								
								Rename AddUsesToWorkList -> AddUsersToWorkList, as that is what it does.  
							
							... 
							
							
							
							Create a new AddUsesToWorkList method
optimize memmove/set/cpy of zero bytes to a noop.
llvm-svn: 11941 
							
						 
						
							2004-02-28 05:22:00 +00:00  
				
					
						
							
							
								 
						
							
								f3a366062c 
								
							 
						 
						
							
							
								
								Turn 'free null' into nothing  
							
							... 
							
							
							
							llvm-svn: 11940 
							
						 
						
							2004-02-28 04:57:37 +00:00  
				
					
						
							
							
								 
						
							
								4f7accab96 
								
							 
						 
						
							
							
								
								Implement test/Regression/Transforms/InstCombine/canonicalize_branch.ll  
							
							... 
							
							
							
							This is a really minor thing, but might help out the 'switch statement induction'
code in simplifycfg.
llvm-svn: 11900 
							
						 
						
							2004-02-27 06:27:46 +00:00  
				
					
						
							
							
								 
						
							
								8ee0593f0d 
								
							 
						 
						
							
							
								
								Fix a faulty optimization on FP values  
							
							... 
							
							
							
							llvm-svn: 11801 
							
						 
						
							2004-02-24 18:10:14 +00:00  
				
					
						
							
							
								 
						
							
								ae739aefd7 
								
							 
						 
						
							
							
								
								Generate much more efficient code in programs like pifft  
							
							... 
							
							
							
							llvm-svn: 11775 
							
						 
						
							2004-02-23 21:46:58 +00:00  
				
					
						
							
							
								 
						
							
								c40b9d7d51 
								
							 
						 
						
							
							
								
								Fix a small typeo in my checkin last night that broke vortex and other programs :(  
							
							... 
							
							
							
							llvm-svn: 11774 
							
						 
						
							2004-02-23 21:46:42 +00:00  
				
					
						
							
							
								 
						
							
								f5ce254692 
								
							 
						 
						
							
							
								
								Fix InstCombine/2004-02-23-ShiftShiftOverflow.ll  
							
							... 
							
							
							
							Also, turn 'shr int %X, 1234' into 'shr int %X, 31'
llvm-svn: 11768 
							
						 
						
							2004-02-23 20:30:06 +00:00  
				
					
						
							
							
								 
						
							
								2b55ea38bc 
								
							 
						 
						
							
							
								
								Implement cast.ll::test14/15  
							
							... 
							
							
							
							llvm-svn: 11742 
							
						 
						
							2004-02-23 07:16:20 +00:00  
				
					
						
							
							
								 
						
							
								e79e854c5c 
								
							 
						 
						
							
							
								
								Refactor some code.  In the mul - setcc folding case, we really care about  
							
							... 
							
							
							
							whether this is the sign bit or not, so check unsigned comparisons as well.
llvm-svn: 11740 
							
						 
						
							2004-02-23 06:38:22 +00:00  
				
					
						
							
							
								 
						
							
								c8a10c4b6a 
								
							 
						 
						
							
							
								
								Implement mul.ll:test11  
							
							... 
							
							
							
							llvm-svn: 11737 
							
						 
						
							2004-02-23 06:00:11 +00:00  
				
					
						
							
							
								 
						
							
								59611149ee 
								
							 
						 
						
							
							
								
								Implement "strength reduction" of   X <= C and X >= C  
							
							... 
							
							
							
							llvm-svn: 11735 
							
						 
						
							2004-02-23 05:47:48 +00:00  
				
					
						
							
							
								 
						
							
								2635b52d4e 
								
							 
						 
						
							
							
								
								Implement InstCombine/mul.ll:test10, which is a case that occurs when dealing  
							
							... 
							
							
							
							with "predication"
llvm-svn: 11734 
							
						 
						
							2004-02-23 05:39:21 +00:00  
				
					
						
							
							
								 
						
							
								8d0bacbb9e 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/cast.ll:test13, a case which occurs in a  
							
							... 
							
							
							
							hot 164.gzip loop.
llvm-svn: 11702 
							
						 
						
							2004-02-22 05:25:17 +00:00  
				
					
						
							
							
								 
						
							
								4db2d22bea 
								
							 
						 
						
							
							
								
								Fold PHI nodes of constants which are only used by a single cast.  This implements  
							
							... 
							
							
							
							phi.ll:test4
llvm-svn: 11494 
							
						 
						
							2004-02-16 05:07:08 +00:00  
				
					
						
							
							
								 
						
							
								b36d908f7b 
								
							 
						 
						
							
							
								
								Teach LLVM to unravel the "swap idiom".  This implements:  
							
							... 
							
							
							
							Regression/Transforms/InstCombine/xor.ll:test20
llvm-svn: 11492 
							
						 
						
							2004-02-16 03:54:20 +00:00  
				
					
						
							
							
								 
						
							
								c207635fd5 
								
							 
						 
						
							
							
								
								Implement Transforms/InstCombine/xor.ll:test19  
							
							... 
							
							
							
							llvm-svn: 11490 
							
						 
						
							2004-02-16 01:20:27 +00:00  
				
					
						
							
							
								 
						
							
								76b2ff4ded 
								
							 
						 
						
							
							
								
								Adjustments to support the new ConstantAggregateZero class  
							
							... 
							
							
							
							llvm-svn: 11474 
							
						 
						
							2004-02-15 05:55:15 +00:00  
				
					
						
							
							
								 
						
							
								fae8ab3088 
								
							 
						 
						
							
							
								
								rename the "exceptional" destination of an invoke instruction to the 'unwind' dest  
							
							... 
							
							
							
							llvm-svn: 11202 
							
						 
						
							2004-02-08 21:44:31 +00:00  
				
					
						
							
							
								 
						
							
								c2f0aa58df 
								
							 
						 
						
							
							
								
								Disable (x - (y - z)) => (x + (z - y)) optimization for floating point.  
							
							... 
							
							
							
							llvm-svn: 11083 
							
						 
						
							2004-02-02 20:09:56 +00:00  
				
					
						
							
							
								 
						
							
								1f7942fe7d 
								
							 
						 
						
							
							
								
								Fix InstCombine/2004-01-13-InstCombineInvokePHI.ll, which also fixes lots  
							
							... 
							
							
							
							of C++ programs in Shootout-C++, including lists1 and moments, etc
llvm-svn: 10845 
							
						 
						
							2004-01-14 06:06:08 +00:00  
				
					
						
							
							
								 
						
							
								fcf21a75b0 
								
							 
						 
						
							
							
								
								Fix bug in previous checkin  
							
							... 
							
							
							
							llvm-svn: 10798 
							
						 
						
							2004-01-12 19:47:05 +00:00  
				
					
						
							
							
								 
						
							
								c1e7cc0fbe 
								
							 
						 
						
							
							
								
								Eliminate use of ConstantHandling and ConstantExpr::getShift interfaces  
							
							... 
							
							
							
							llvm-svn: 10796 
							
						 
						
							2004-01-12 19:35:11 +00:00  
				
					
						
							
							
								 
						
							
								7e8af38637 
								
							 
						 
						
							
							
								
								Do not hack on volatile loads.  I'm not sure what the point of a volatile load  
							
							... 
							
							
							
							from constant memory is, but lets not take chances.
llvm-svn: 10765 
							
						 
						
							2004-01-12 04:13:56 +00:00  
				
					
						
							
							
								 
						
							
								91daeb5431 
								
							 
						 
						
							
							
								
								Factor code out into the Utils library  
							
							... 
							
							
							
							llvm-svn: 10530 
							
						 
						
							2003-12-19 05:58:40 +00:00  
				
					
						
							
							
								 
						
							
								8427bffb9a 
								
							 
						 
						
							
							
								
								* Finegrainify namespacification  
							
							... 
							
							
							
							* Transform: free <ty>* (cast <ty2>* X to <ty>*) into free <ty2>* X
llvm-svn: 10303 
							
						 
						
							2003-12-07 01:24:23 +00:00  
				
					
						
							
							
								 
						
							
								d76fe4ea7d 
								
							 
						 
						
							
							
								
								Implement feature: InstCombine/2003-11-13-ConstExprCastCall.ll  
							
							... 
							
							
							
							llvm-svn: 9981 
							
						 
						
							2003-11-13 19:17:02 +00:00  
				
					
						
							
							
								 
						
							
								960707c335 
								
							 
						 
						
							
							
								
								Put all LLVM code into the llvm namespace, as per bug 109.  
							
							... 
							
							
							
							llvm-svn: 9903 
							
						 
						
							2003-11-11 22:41:34 +00:00  
				
					
						
							
							
								 
						
							
								7c94d1171a 
								
							 
						 
						
							
							
								
								Fix flawed logic that was breaking several SPEC benchmarks, including gzip and crafty.  
							
							... 
							
							
							
							llvm-svn: 9731 
							
						 
						
							2003-11-05 17:31:36 +00:00  
				
					
						
							
							
								 
						
							
								8f2f598024 
								
							 
						 
						
							
							
								
								Fix bug with previous implementation:  
							
							... 
							
							
							
							-      // ~(c-X) == X-(c-1) == X+(-c+1)
+      // ~(c-X) == X-c-1 == X+(-c-1)
Implement: C - ~X == X + (1+C)
llvm-svn: 9715 
							
						 
						
							2003-11-05 01:06:05 +00:00  
				
					
						
							
							
								 
						
							
								e580666532 
								
							 
						 
						
							
							
								
								Minor cleanup, plus implement InstCombine/xor.ll:test17  
							
							... 
							
							
							
							llvm-svn: 9711 
							
						 
						
							2003-11-04 23:50:51 +00:00  
				
					
						
							
							
								 
						
							
								0f68fa6569 
								
							 
						 
						
							
							
								
								Implement InstCombine/xor.ll:test(15|16)  
							
							... 
							
							
							
							llvm-svn: 9708 
							
						 
						
							2003-11-04 23:37:10 +00:00  
				
					
						
							
							
								 
						
							
								6444c37488 
								
							 
						 
						
							
							
								
								Implement InstCombine/cast-set.ll:test6[a].  This improves code generated for  
							
							... 
							
							
							
							a hot function in em3d
llvm-svn: 9673 
							
						 
						
							2003-11-03 05:17:03 +00:00  
				
					
						
							
							
								 
						
							
								1693079e92 
								
							 
						 
						
							
							
								
								Implement InstCombine/cast-set.ll: test1, test2, test7  
							
							... 
							
							
							
							llvm-svn: 9670 
							
						 
						
							2003-11-03 04:25:02 +00:00  
				
					
						
							
							
								 
						
							
								af7893203b 
								
							 
						 
						
							
							
								
								Fix bug with zero sized casts  
							
							... 
							
							
							
							llvm-svn: 9667 
							
						 
						
							2003-11-03 01:29:41 +00:00  
				
					
						
							
							
								 
						
							
								d4d987dd4a 
								
							 
						 
						
							
							
								
								Fix bug in previous checkin  
							
							... 
							
							
							
							llvm-svn: 9656 
							
						 
						
							2003-11-02 06:54:48 +00:00  
				
					
						
							
							
								 
						
							
								f4ad165e8b 
								
							 
						 
						
							
							
								
								Implement transmogriphication of allocation instructions  
							
							... 
							
							
							
							llvm-svn: 9654 
							
						 
						
							2003-11-02 05:57:39 +00:00  
				
					
						
							
							
								 
						
							
								686767f3f6 
								
							 
						 
						
							
							
								
								Fix bug: 2003-10-29-CallSiteResolve.ll & PR70  
							
							... 
							
							
							
							llvm-svn: 9600 
							
						 
						
							2003-10-30 00:46:41 +00:00  
				
					
						
							
							
								 
						
							
								482202a601 
								
							 
						 
						
							
							
								
								Added LLVM project notice to the top of every C++ source file.  
							
							... 
							
							
							
							Header files will be on the way.
llvm-svn: 9298 
							
						 
						
							2003-10-20 19:43:21 +00:00  
				
					
						
							
							
								 
						
							
								f95d9b99b3 
								
							 
						 
						
							
							
								
								Decrease usage of use_size()  
							
							... 
							
							
							
							llvm-svn: 9135 
							
						 
						
							2003-10-15 16:48:29 +00:00  
				
					
						
							
							
								 
						
							
								950fc785ae 
								
							 
						 
						
							
							
								
								whoops, don't accidentally lose variable names  
							
							... 
							
							
							
							llvm-svn: 8955 
							
						 
						
							2003-10-07 22:58:41 +00:00  
				
					
						
							
							
								 
						
							
								75b4d1deec 
								
							 
						 
						
							
							
								
								Fix bug: InstCombine/cast.ll:test11 / PR#7  
							
							... 
							
							
							
							llvm-svn: 8954 
							
						 
						
							2003-10-07 22:54:13 +00:00  
				
					
						
							
							
								 
						
							
								aec3d948cf 
								
							 
						 
						
							
							
								
								Refactor code a bit  
							
							... 
							
							
							
							llvm-svn: 8952 
							
						 
						
							2003-10-07 22:32:43 +00:00  
				
					
						
							
							
								 
						
							
								800aaaf207 
								
							 
						 
						
							
							
								
								Fix bug in previous checkin  
							
							... 
							
							
							
							llvm-svn: 8922 
							
						 
						
							2003-10-07 15:17:02 +00:00  
				
					
						
							
							
								 
						
							
								e8ed4ef039 
								
							 
						 
						
							
							
								
								Minor speedups for the instcombine pass  
							
							... 
							
							
							
							llvm-svn: 8894 
							
						 
						
							2003-10-06 17:11:01 +00:00  
				
					
						
							
							
								 
						
							
								b9cde76e60 
								
							 
						 
						
							
							
								
								Implement InstCombine/add.ll:test17 & 18  
							
							... 
							
							
							
							llvm-svn: 8817 
							
						 
						
							2003-10-02 15:11:26 +00:00  
				
					
						
							
							
								 
						
							
								2caaaba3e9 
								
							 
						 
						
							
							
								
								Squelch warning  
							
							... 
							
							
							
							llvm-svn: 8659 
							
						 
						
							2003-09-22 20:33:34 +00:00  
				
					
						
							
							
								 
						
							
								2da29177ba 
								
							 
						 
						
							
							
								
								Implement InstCombine/and.ll:test(15|16)  
							
							... 
							
							
							
							llvm-svn: 8607 
							
						 
						
							2003-09-19 19:05:02 +00:00  
				
					
						
							
							
								 
						
							
								ba1cb38c06 
								
							 
						 
						
							
							
								
								pull a large nested conditional out into its own function  
							
							... 
							
							
							
							llvm-svn: 8605 
							
						 
						
							2003-09-19 17:17:26 +00:00  
				
					
						
							
							
								 
						
							
								dbba189f15 
								
							 
						 
						
							
							
								
								Implement InstCombine/add.ll:test(15|16)  
							
							... 
							
							
							
							llvm-svn: 8604 
							
						 
						
							2003-09-19 15:35:42 +00:00  
				
					
						
							
							
								 
						
							
								cce81be1e1 
								
							 
						 
						
							
							
								
								Simplify code  
							
							... 
							
							
							
							Implement InstCombine/mul.ll:test9
llvm-svn: 8488 
							
						 
						
							2003-09-11 22:24:54 +00:00  
				
					
						
							
							
								 
						
							
								216c7b8aed 
								
							 
						 
						
							
							
								
								Fix spell-o's  
							
							... 
							
							
							
							llvm-svn: 8431 
							
						 
						
							2003-09-10 05:29:43 +00:00  
				
					
						
							
							
								 
						
							
								3ac7c26a1c 
								
							 
						 
						
							
							
								
								Implement instcombine optimizations:  
							
							... 
							
							
							
							(A <setcc1> B) logicalop (A <setcc2> B)  -> (A <setcc3> B) or true or false
Where setcc[123] is one of the 6 setcc instructions, and logicalop is one of: And, Or, Xor
llvm-svn: 7828 
							
						 
						
							2003-08-13 20:16:26 +00:00  
				
					
						
							
							
								 
						
							
								b8b97505ba 
								
							 
						 
						
							
							
								
								Generalize some of the add tests to allow for reassociation to take place  
							
							... 
							
							
							
							llvm-svn: 7825 
							
						 
						
							2003-08-13 19:01:45 +00:00  
				
					
						
							
							
								 
						
							
								d07283a2ad 
								
							 
						 
						
							
							
								
								Implement InstCombine/2003-08-12-AllocaNonNull.ll  
							
							... 
							
							
							
							llvm-svn: 7807 
							
						 
						
							2003-08-13 05:38:46 +00:00  
				
					
						
							
							
								 
						
							
								c992add9fe 
								
							 
						 
						
							
							
								
								Do not cannonicalize (X != 0) into (cast X to bool)  
							
							... 
							
							
							
							llvm-svn: 7806 
							
						 
						
							2003-08-13 05:33:12 +00:00  
				
					
						
							
							
								 
						
							
								ede3fe05c5 
								
							 
						 
						
							
							
								
								Change cannonicalization rules: add X,X is represented as multiplies, multiplies  
							
							... 
							
							
							
							of a power of two are represented as a shift.
llvm-svn: 7803 
							
						 
						
							2003-08-13 04:18:28 +00:00  
				
					
						
							
							
								 
						
							
								deaa0dd71a 
								
							 
						 
						
							
							
								
								Allow pulling logical operations through shifts.  
							
							... 
							
							
							
							This implements InstCombine/shift.ll:test14*
llvm-svn: 7793 
							
						 
						
							2003-08-12 21:53:41 +00:00  
				
					
						
							
							
								 
						
							
								01d5639515 
								
							 
						 
						
							
							
								
								Simplify code  
							
							... 
							
							
							
							llvm-svn: 7783 
							
						 
						
							2003-08-12 19:17:27 +00:00  
				
					
						
							
							
								 
						
							
								812aab7727 
								
							 
						 
						
							
							
								
								Implement testcases InstCombine/or.ll:test16/test17  
							
							... 
							
							
							
							llvm-svn: 7782 
							
						 
						
							2003-08-12 19:11:07 +00:00  
				
					
						
							
							
								 
						
							
								ab780dfab5 
								
							 
						 
						
							
							
								
								Instcombine: (A >> c1) << c2 for signed integers  
							
							... 
							
							
							
							llvm-svn: 7295 
							
						 
						
							2003-07-24 18:38:56 +00:00  
				
					
						
							
							
								 
						
							
								3204d4ed4e 
								
							 
						 
						
							
							
								
								Reorganization of code, no functional changes.  
							
							... 
							
							
							
							Now it shoudl be a bit more efficient
llvm-svn: 7292 
							
						 
						
							2003-07-24 17:52:58 +00:00  
				
					
						
							
							
								 
						
							
								dfae8be3c9 
								
							 
						 
						
							
							
								
								Allow folding several instructions into casts, which can simplify a lot  
							
							... 
							
							
							
							of codes.  For example,
short kernel (short t1) {
  t1 >>= 8; t1 <<= 8;
  return t1;
}
became:
short %kernel(short %t1.1) {
        %tmp.3 = shr short %t1.1, ubyte 8               ; <short> [#uses=1]
        %tmp.5 = cast short %tmp.3 to int               ; <int> [#uses=1]
        %tmp.7 = shl int %tmp.5, ubyte 8                ; <int> [#uses=1]
        %tmp.8 = cast int %tmp.7 to short               ; <short> [#uses=1]
        ret short %tmp.8
}
before, now it becomes:
short %kernel(short %t1.1) {
        %tmp.3 = shr short %t1.1, ubyte 8               ; <short> [#uses=1]
        %tmp.8 = shl short %tmp.3, ubyte 8              ; <short> [#uses=1]
        ret short %tmp.8
}
which will become:
short %kernel(short %t1.1) {
        %tmp.3 = and short %t1.1, 0xFF00
        ret short %tmp.3
}
This implements cast-set.ll:test4 and test5
llvm-svn: 7290 
							
						 
						
							2003-07-24 17:35:25 +00:00  
				
					
						
							
							
								 
						
							
								bfb1d03159 
								
							 
						 
						
							
							
								
								Add comments  
							
							... 
							
							
							
							llvm-svn: 7283 
							
						 
						
							2003-07-23 21:41:57 +00:00  
				
					
						
							
							
								 
						
							
								9763859e8d 
								
							 
						 
						
							
							
								
								Remove explicit check for: not (not X) = X, it is already handled because xor is commutative  
							
							... 
							
							
							
							- InstCombine: (X & C1) ^ C2 --> (X & C1) | C2 iff (C1&C2) == 0
  - InstCombine: (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
llvm-svn: 7282 
							
						 
						
							2003-07-23 21:37:07 +00:00  
				
					
						
							
							
								 
						
							
								33217db4d9 
								
							 
						 
						
							
							
								
								InstCombine: (X ^ C1) & C2 --> (X & C2) iff (C1&C2) == 0  
							
							... 
							
							
							
							llvm-svn: 7272 
							
						 
						
							2003-07-23 19:36:21 +00:00  
				
					
						
							
							
								 
						
							
								16464b36ff 
								
							 
						 
						
							
							
								
								- InstCombine: (X | C1) & C2 --> X & C2 iff C1 & C1 == 0  
							
							... 
							
							
							
							- InstCombine: (X | C) & C --> C
  - InstCombine: (X | C1) & C2 --> (X | (C1&C2)) & C2
llvm-svn: 7269 
							
						 
						
							2003-07-23 19:25:52 +00:00  
				
					
						
							
							
								 
						
							
								8f0d15601a 
								
							 
						 
						
							
							
								
								IC: (X & C1) | C2 --> (X | C2) & (C1|C2)  
							
							... 
							
							
							
							IC: (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2)
We are now guaranteed that all 'or's will be inside of 'and's, and all 'and's
will be inside of 'xor's, if the second operands are constants.
llvm-svn: 7264 
							
						 
						
							2003-07-23 18:29:44 +00:00  
				
					
						
							
							
								 
						
							
								49b47ae565 
								
							 
						 
						
							
							
								
								IC: (X ^ C1) & C2 --> (X & C2) ^ (C1&C2)  
							
							... 
							
							
							
							Minor code cleanup
llvm-svn: 7262 
							
						 
						
							2003-07-23 17:57:01 +00:00  
				
					
						
							
							
								 
						
							
								cfbce7c880 
								
							 
						 
						
							
							
								
								InstCombine: (X ^ 4) == 8  --> X == 12  
							
							... 
							
							
							
							llvm-svn: 7260 
							
						 
						
							2003-07-23 17:26:36 +00:00  
				
					
						
							
							
								 
						
							
								d492a0b7b4 
								
							 
						 
						
							
							
								
								IC: (X & 5) == 13 --> false  
							
							... 
							
							
							
							IC: (X | 8) == 4  --> false
llvm-svn: 7257 
							
						 
						
							2003-07-23 17:02:11 +00:00  
				
					
						
							
							
								 
						
							
								6077c3195f 
								
							 
						 
						
							
							
								
								Simplify code by using ConstantInt::getRawValue instead of checking to see  
							
							... 
							
							
							
							whether the constant is signed or unsigned, then casting
llvm-svn: 7252 
							
						 
						
							2003-07-23 15:22:26 +00:00  
				
					
						
							
							
								 
						
							
								bdb0ce0605 
								
							 
						 
						
							
							
								
								- InstCombine (cast (xor A, B) to bool) ==> (setne A, B)  
							
							... 
							
							
							
							- InstCombine (cast (and X, (1 << size(X)-1)) to bool) ==> x < 0
llvm-svn: 7241 
							
						 
						
							2003-07-22 21:46:59 +00:00  
				
					
						
							
							
								 
						
							
								d6dcbc6ce8 
								
							 
						 
						
							
							
								
								Added code that checks to see if a global variable is external before replacing  
							
							... 
							
							
							
							a load of the global variable with the variable's constant value.
llvm-svn: 7216 
							
						 
						
							2003-07-21 19:42:57 +00:00  
				
					
						
							
							
								 
						
							
								0643ceafcf 
								
							 
						 
						
							
							
								
								Dinakar and I fixed a bug where we were trying to get the initializer of  
							
							... 
							
							
							
							an external constant.  Since external constants don't have initializers, we
were failing on an assert() call in llvm/GlobalVariable.h.
llvm-svn: 7193 
							
						 
						
							2003-07-17 19:06:55 +00:00  
				
					
						
							
							
								 
						
							
								0f1d8a3947 
								
							 
						 
						
							
							
								
								Add support for elimination of load instruction from global constants  
							
							... 
							
							
							
							llvm-svn: 6912 
							
						 
						
							2003-06-26 05:06:25 +00:00  
				
					
						
							
							
								 
						
							
								35236d8477 
								
							 
						 
						
							
							
								
								Instcombine:  X * -1 -> -X  
							
							... 
							
							
							
							llvm-svn: 6904 
							
						 
						
							2003-06-25 17:09:20 +00:00  
				
					
						
							
							
								 
						
							
								55d4bda861 
								
							 
						 
						
							
							
								
								Implement new transforms:  
							
							... 
							
							
							
							Replace (cast (sub A, B) to bool) -> (setne A, B)
  Replace (cast (add A, B) to bool) -> (setne A, -B)
llvm-svn: 6873 
							
						 
						
							2003-06-23 21:59:52 +00:00  
				
					
						
							
							
								 
						
							
								d0d51605b2 
								
							 
						 
						
							
							
								
								Instcombine cast (getelementptr Ptr, 0, 0, 0) to ... into: cast Ptr to ...  
							
							... 
							
							
							
							This fixes type safety problems in a variety of benchmarks that were confusing
DSA.
llvm-svn: 6837 
							
						 
						
							2003-06-21 23:12:02 +00:00  
				
					
						
							
							
								 
						
							
								970c33abb1 
								
							 
						 
						
							
							
								
								Implement the functionality of InstCombine/call.ll  
							
							... 
							
							
							
							llvm-svn: 6783 
							
						 
						
							2003-06-19 17:00:31 +00:00  
				
					
						
							
							
								 
						
							
								45789aca97 
								
							 
						 
						
							
							
								
								Fix bug: InstCombine/2003-06-05-BranchInvertInfLoop.ll  
							
							... 
							
							
							
							llvm-svn: 6630 
							
						 
						
							2003-06-05 20:12:51 +00:00  
				
					
						
							
							
								 
						
							
								e967b348bf 
								
							 
						 
						
							
							
								
								Clean up previous code.  
							
							... 
							
							
							
							Add new combination to turn seteq X, 0 -> not(cast X to bool)
llvm-svn: 6604 
							
						 
						
							2003-06-04 05:10:11 +00:00  
				
					
						
							
							
								 
						
							
								9eef8a78b4 
								
							 
						 
						
							
							
								
								Implement combination of boolean not with branch  
							
							... 
							
							
							
							llvm-svn: 6599 
							
						 
						
							2003-06-04 04:46:00 +00:00  
				
					
						
							
							
								 
						
							
								791ac1a4c8 
								
							 
						 
						
							
							
								
								Implement xform: (X != 0) -> (bool)X  
							
							... 
							
							
							
							llvm-svn: 6506 
							
						 
						
							2003-06-01 03:35:25 +00:00  
				
					
						
							
							
								 
						
							
								3442844742 
								
							 
						 
						
							
							
								
								Fix bug: Instcombine/2003-05-27-ConstExprCrash.ll  
							
							... 
							
							
							
							llvm-svn: 6352 
							
						 
						
							2003-05-27 16:40:51 +00:00  
				
					
						
							
							
								 
						
							
								196897c424 
								
							 
						 
						
							
							
								
								Fix bug: InstCombine/2003-05-26-CastMiscompile.ll  
							
							... 
							
							
							
							llvm-svn: 6338 
							
						 
						
							2003-05-26 23:41:32 +00:00  
				
					
						
							
							
								 
						
							
								471bd76281 
								
							 
						 
						
							
							
								
								Minor cleanups.  
							
							... 
							
							
							
							This hunk:
-    } else if (Src->getNumOperands() == 2 && Src->use_size() == 1) {
+    } else if (Src->getNumOperands() == 2) {
Allows GEP folding to be more aggressive, which reduces the number of instructions
and can dramatically speed up BasicAA in some cases.
llvm-svn: 6286 
							
						 
						
							2003-05-22 19:07:21 +00:00  
				
					
						
							
							
								 
						
							
								e5838c4d72 
								
							 
						 
						
							
							
								
								s/convertable/convertible/g  
							
							... 
							
							
							
							llvm-svn: 6248 
							
						 
						
							2003-05-20 18:45:36 +00:00  
				
					
						
							
							
								 
						
							
								dd65d863a9 
								
							 
						 
						
							
							
								
								Fix another case where constexprs could cause a crash  
							
							... 
							
							
							
							llvm-svn: 5972 
							
						 
						
							2003-04-30 22:34:06 +00:00  
				
					
						
							
							
								 
						
							
								9244df60d3 
								
							 
						 
						
							
							
								
								Fix constant folding of constexprs  
							
							... 
							
							
							
							llvm-svn: 5971 
							
						 
						
							2003-04-30 22:19:10 +00:00  
				
					
						
							
							
								 
						
							
								46b3d30bf6 
								
							 
						 
						
							
							
								
								Change the interface to constant expressions to allow automatic folding  
							
							... 
							
							
							
							llvm-svn: 5793 
							
						 
						
							2003-04-16 22:40:51 +00:00  
				
					
						
							
							
								 
						
							
								7fb29e19f0 
								
							 
						 
						
							
							
								
								Add the following instcombine xforms:  
							
							... 
							
							
							
							- Implement simple reassociation: (A|c1)|(B|c2) == (A|B)|(c1|c2)
  - (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
  - (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
llvm-svn: 5743 
							
						 
						
							2003-03-11 00:12:48 +00:00  
				
					
						
							
							
								 
						
							
								934a64cfa4 
								
							 
						 
						
							
							
								
								Implement: -A*-B == A*B  
							
							... 
							
							
							
							llvm-svn: 5740 
							
						 
						
							2003-03-10 23:23:04 +00:00  
				
					
						
							
							
								 
						
							
								3e327a4334 
								
							 
						 
						
							
							
								
								Add new transformation: // (~A | ~B) == (~(A & B))  
							
							... 
							
							
							
							llvm-svn: 5738 
							
						 
						
							2003-03-10 23:13:59 +00:00  
				
					
						
							
							
								 
						
							
								bb74e2284a 
								
							 
						 
						
							
							
								
								Generalize not and neg comparison testers to allow constant to be considered not'able and neg'able.  This  
							
							... 
							
							
							
							allows optimization of this:
int %test4(int %A, int %B) {
        %a = xor int %A, -1
        %c = and int %a, 5    ; 5 = ~c2
        %d = xor int %c, -1
        ret int %d
}
into this:
int %test4(int %A, int %B) {            ; No predecessors!
        %c.demorgan = or int %A, -6             ; <int> [#uses=1]
        ret int %c.demorgan
}
llvm-svn: 5736 
							
						 
						
							2003-03-10 23:06:50 +00:00  
				
					
						
							
							
								 
						
							
								dcf240a649 
								
							 
						 
						
							
							
								
								Generalize (A+c1)+c2 optimization to work with all associative operators  
							
							... 
							
							
							
							llvm-svn: 5733 
							
						 
						
							2003-03-10 21:43:22 +00:00  
				
					
						
							
							
								 
						
							
								3695257724 
								
							 
						 
						
							
							
								
								Minor change, no functionality diff  
							
							... 
							
							
							
							llvm-svn: 5731 
							
						 
						
							2003-03-10 19:20:30 +00:00  
				
					
						
							
							
								 
						
							
								e8d6c604bb 
								
							 
						 
						
							
							
								
								Fix bug: (x << 100) wasn't folded to 0, but (x >> 100) was (when x is unsigned)  
							
							... 
							
							
							
							Implement new shift optimizations for shifting the result of a shift.
llvm-svn: 5729 
							
						 
						
							2003-03-10 19:16:08 +00:00  
				
					
						
							
							
								 
						
							
								1bbb7b6f19 
								
							 
						 
						
							
							
								
								Implement:  (A|B)^B == A & (~B)  
							
							... 
							
							
							
							llvm-svn: 5728 
							
						 
						
							2003-03-10 18:24:17 +00:00  
				
					
						
							
							
								 
						
							
								235af5673b 
								
							 
						 
						
							
							
								
								Implement %test7 in InstCombine/getelementptr.ll  
							
							... 
							
							
							
							llvm-svn: 5704 
							
						 
						
							2003-03-05 22:33:14 +00:00  
				
					
						
							
							
								 
						
							
								57c8d99bbd 
								
							 
						 
						
							
							
								
								4 new transformations:  
							
							... 
							
							
							
							* X*C + X --> X * (C+1)
  * X + X*C --> X * (C+1)
  * X - X*C --> X * (1-C)
  * X*C - X --> X * (C-1)
llvm-svn: 5592 
							
						 
						
							2003-02-18 19:57:07 +00:00  
				
					
						
							
							
								 
						
							
								3082c5a070 
								
							 
						 
						
							
							
								
								Add a variety of new transformations:  
							
							... 
							
							
							
							* A & ~A == 0
  * A / (2^c) == A >> c  if unsigned
  * 0 / A == 0
  * 1.0 * A == A
  * A * (2^c) == A << c
  * A ^ ~A == -1
  * A | ~A == -1
  * 0 % X = 0
  * A % (2^c) == A & (c-1) if unsigned
  * A - (A & B) == A & ~B
  * -1 - A == ~A
llvm-svn: 5587 
							
						 
						
							2003-02-18 19:28:33 +00:00  
				
					
						
							
							
								 
						
							
								c6509f487b 
								
							 
						 
						
							
							
								
								Fix bug: 2002-12-05-MissedConstProp.ll pointed out by Casey Carter  
							
							... 
							
							
							
							llvm-svn: 4935 
							
						 
						
							2002-12-05 22:41:53 +00:00  
				
					
						
							
							
								 
						
							
								a2620ac156 
								
							 
						 
						
							
							
								
								Fix warning  
							
							... 
							
							
							
							llvm-svn: 4649 
							
						 
						
							2002-11-09 00:49:43 +00:00  
				
					
						
							
							
								 
						
							
								5d606a09ff 
								
							 
						 
						
							
							
								
								Instcombine this away:  
							
							... 
							
							
							
							%A = getelementptr [4 x int]* %M, long 0, long 0
        %B = getelementptr int* %A, long 2
llvm-svn: 4536 
							
						 
						
							2002-11-04 16:43:32 +00:00  
				
					
						
							
							
								 
						
							
								1085bdf49f 
								
							 
						 
						
							
							
								
								Add a transformation to turn:  
							
							... 
							
							
							
							malloc Ty, C
int
  malloc [C x Ty], 1
llvm-svn: 4534 
							
						 
						
							2002-11-04 16:18:53 +00:00  
				
					
						
							
							
								 
						
							
								632df28deb 
								
							 
						 
						
							
							
								
								Fix spelling of `propagate'.  
							
							... 
							
							
							
							llvm-svn: 4423 
							
						 
						
							2002-10-29 23:06:16 +00:00  
				
					
						
							
							
								 
						
							
								820d971233 
								
							 
						 
						
							
							
								
								- Rename AnalysisUsage::preservesAll to getPreservesAll & preservesCFG to  
							
							... 
							
							
							
							setPreservesCFG to be less confusing.
llvm-svn: 4255 
							
						 
						
							2002-10-21 20:00:28 +00:00  
				
					
						
							
							
								 
						
							
								394617f38b 
								
							 
						 
						
							
							
								
								It is illegal for PHI nodes to have zero values, delete the code to handle them  
							
							... 
							
							
							
							llvm-svn: 4071 
							
						 
						
							2002-10-08 17:07:39 +00:00  
				
					
						
							
							
								 
						
							
								2e0fb39d87 
								
							 
						 
						
							
							
								
								Fold ashr -1, X into -1  
							
							... 
							
							
							
							llvm-svn: 4070 
							
						 
						
							2002-10-08 16:16:40 +00:00  
				
					
						
							
							
								 
						
							
								bf3a099a62 
								
							 
						 
						
							
							
								
								Updates to work with recent Statistic's changes:  
							
							... 
							
							
							
							* Renamed StatisticReporter.h/cpp to Statistic.h/cpp
    * Broke constructor to take two const char * arguments instead of one, so
      that indendation can be taken care of automatically.
    * Sort the list by pass name when printing
    * Make sure to print all statistics as a group, instead of randomly when
      the statistics dtors are called.
    * Updated ProgrammersManual with new semantics.
llvm-svn: 4002 
							
						 
						
							2002-10-01 22:38:41 +00:00  
				
					
						
							
							
								 
						
							
								555518c70f 
								
							 
						 
						
							
							
								
								Optimize away cases like:  
							
							... 
							
							
							
							%cast109 = cast uint %cast212 to short          ; <short> [#uses=1]
        %cast214 = cast short %cast109 to uint          ; <uint> [#uses=1]
        %cast215 = cast uint %cast214 to short          ; <short> [#uses=1]
llvm-svn: 3897 
							
						 
						
							2002-09-23 23:39:43 +00:00  
				
					
						
							
							
								 
						
							
								a8339e3613 
								
							 
						 
						
							
							
								
								Fix bug: test/Regression/Transforms/InstCombine/2002-09-17-GetElementPtrCrash.ll  
							
							... 
							
							
							
							Thanks to Casey for finding it!
llvm-svn: 3783 
							
						 
						
							2002-09-17 21:05:42 +00:00  
				
					
						
							
							
								 
						
							
								136dab7d86 
								
							 
						 
						
							
							
								
								- Change getelementptr instruction to use long indexes instead of uint  
							
							... 
							
							
							
							indexes for sequential types.
llvm-svn: 3682 
							
						 
						
							2002-09-11 01:21:33 +00:00  
				
					
						
							
							
								 
						
							
								55f3d94b40 
								
							 
						 
						
							
							
								
								Add cannonicalization of shl X, 1 -> add X, X  
							
							... 
							
							
							
							llvm-svn: 3671 
							
						 
						
							2002-09-10 23:04:09 +00:00  
				
					
						
							
							
								 
						
							
								e103d178c5 
								
							 
						 
						
							
							
								
								Hack unneccesary now that shifts of pointers are no longer legal!  
							
							... 
							
							
							
							llvm-svn: 3640 
							
						 
						
							2002-09-10 03:50:54 +00:00  
				
					
						
							
							
								 
						
							
								b8bba6f765 
								
							 
						 
						
							
							
								
								Fix Bug: test/Regression/Transforms/InstCombine/2002-09-08-PointerShiftBug.ll  
							
							... 
							
							
							
							llvm-svn: 3626 
							
						 
						
							2002-09-08 21:39:07 +00:00  
				
					
						
							
							
								 
						
							
								b0b412e66e 
								
							 
						 
						
							
							
								
								- Renamed Type::isIntegral() to Type::isInteger()  
							
							... 
							
							
							
							- Added new method Type::isIntegral() that is the same as isInteger, but
    also accepts bool.
llvm-svn: 3574 
							
						 
						
							2002-09-03 01:08:28 +00:00  
				
					
						
							
							
								 
						
							
								99f48c614d 
								
							 
						 
						
							
							
								
								Add constant prop & DIE to InstCombine, so it cleans up after itself  
							
							... 
							
							
							
							llvm-svn: 3568 
							
						 
						
							2002-09-02 04:59:56 +00:00  
				
					
						
							
							
								 
						
							
								65217ff294 
								
							 
						 
						
							
							
								
								- instcombine demorgan's law: and (not A), (not B) == not (or A, B)  
							
							... 
							
							
							
							llvm-svn: 3495 
							
						 
						
							2002-08-23 18:32:43 +00:00  
				
					
						
							
							
								 
						
							
								f6c0efa754 
								
							 
						 
						
							
							
								
								Instcombine PHI's of the form  %PN = phi PN, X into X  and  
							
							... 
							
							
							
							%PN = phi PN, PN, PN into 0 (because the phi must not be reachable)
llvm-svn: 3470 
							
						 
						
							2002-08-22 20:22:01 +00:00  
				
					
						
							
							
								 
						
							
								b8d6e40ed7 
								
							 
						 
						
							
							
								
								- instcombine (~(a < b)) into (a >= b)  
							
							... 
							
							
							
							llvm-svn: 3406 
							
						 
						
							2002-08-20 18:24:26 +00:00  
				
					
						
							
							
								 
						
							
								9cd1e66155 
								
							 
						 
						
							
							
								
								- implemented instcombine of phi (X, X, X) -> X  
							
							... 
							
							
							
							llvm-svn: 3397 
							
						 
						
							2002-08-20 15:35:35 +00:00  
				
					
						
							
							
								 
						
							
								c59af1d257 
								
							 
						 
						
							
							
								
								Promote getelementptr instructions to constexprs if we can.  
							
							... 
							
							
							
							llvm-svn: 3368 
							
						 
						
							2002-08-17 22:21:59 +00:00  
				
					
						
							
							
								 
						
							
								3732acab85 
								
							 
						 
						
							
							
								
								Handle more cases of cast-of-cast in more general forms.  
							
							... 
							
							
							
							llvm-svn: 3347 
							
						 
						
							2002-08-15 16:15:25 +00:00  
				
					
						
							
							
								 
						
							
								0bb75910e2 
								
							 
						 
						
							
							
								
								Implement capability to fold this:  
							
							... 
							
							
							
							uint %test4(int %A, int %B) {
        %COND = setlt int %A, %B                ; <bool> [#uses=1]
        %result = cast bool %COND to uint               ; <uint> [#uses=1]
        ret uint %result
}
into a single cast instruction.
llvm-svn: 3339 
							
						 
						
							2002-08-14 23:21:10 +00:00  
				
					
						
							
							
								 
						
							
								31ae863284 
								
							 
						 
						
							
							
								
								- Fix InstCombine pass to not generate or process NOT instructions  
							
							... 
							
							
							
							- Fixed testcases to not use them either.
llvm-svn: 3315 
							
						 
						
							2002-08-14 17:51:49 +00:00  
				
					
						
							
							
								 
						
							
								8328263606 
								
							 
						 
						
							
							
								
								- Rename ConstantGenericIntegral -> ConstantIntegral  
							
							... 
							
							
							
							llvm-svn: 3300 
							
						 
						
							2002-08-13 17:50:24 +00:00  
				
					
						
							
							
								 
						
							
								e6794490ec 
								
							 
						 
						
							
							
								
								* Factor a bunch of code by using ReplaceInstUsesWith  
							
							... 
							
							
							
							* Move isMaxValue, isMinValue, isAllOnesValue to Constants.h
llvm-svn: 3290 
							
						 
						
							2002-08-12 21:17:25 +00:00  
				
					
						
							
							
								 
						
							
								6d14f2a7ae 
								
							 
						 
						
							
							
								
								New functionality for instcombine:  
							
							... 
							
							
							
							* New ReplaceInstUsesWith function to factor out tons of common code
     This needs to be used more in the future still, but it's a good start
   * New InsertNewInstBefore to allow multi-instruction replacements
   * Change getMaxValue functions to isAllOnesValue function, which doesn't
     have to CREATE/lookup a new constant.  Also the name is accurate
   * Add new isMaxValue, isMinValue, isMaxValueMinusOne, isMinValuePlusOne
     functions:  This should be moved to Constant* classes eventually
   * Implement xor X, ALLONES -> not X
   * Fold ALL setcc's of booleans away
   * Handle various SetCC's for integers against values at the end of their
     ranges, possibly off by one.  This implements the setcc-strength-reduce.ll
     testcase.
llvm-svn: 3286 
							
						 
						
							2002-08-09 23:47:40 +00:00  
				
					
						
							
							
								 
						
							
								650b6da0f9 
								
							 
						 
						
							
							
								
								Fix bug: test/Regression/Transforms/InstCombine/2002-08-02-CastTest.ll  
							
							... 
							
							
							
							Implement feature: Cast's can now be converted to bitwise AND expressions.
llvm-svn: 3225 
							
						 
						
							2002-08-02 20:00:25 +00:00  
				
					
						
							
							
								 
						
							
								ae7a0d39fd 
								
							 
						 
						
							
							
								
								* Cleanups of instcombine  
							
							... 
							
							
							
							- Reenable gep (gep x) -> x
   - Make instcombine do dead instruction elimination where it's really
     easy.  Now visitors don't have to ensure they aren't not processing
     dead instructions.
llvm-svn: 3222 
							
						 
						
							2002-08-02 19:29:35 +00:00  
				
					
						
							
							
								 
						
							
								c8b7092e54 
								
							 
						 
						
							
							
								
								* Add support for different "PassType's"  
							
							... 
							
							
							
							* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
  are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Add support for different "PassType's"
* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
  are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Remove getPassName implementations from various subclasses
llvm-svn: 3113 
							
						 
						
							2002-07-26 21:12:46 +00:00  
				
					
						
							
							
								 
						
							
								b28b680155 
								
							 
						 
						
							
							
								
								*** empty log message ***  
							
							... 
							
							
							
							llvm-svn: 3016 
							
						 
						
							2002-07-23 18:06:35 +00:00  
				
					
						
							
							
								 
						
							
								b2c5cb2525 
								
							 
						 
						
							
							
								
								Disable folding g-e-p instructions into loads and stores.  
							
							... 
							
							
							
							llvm-svn: 2870 
							
						 
						
							2002-07-10 22:37:17 +00:00  
				
					
						
							
							
								 
						
							
								113f4f4609 
								
							 
						 
						
							
							
								
								MEGAPATCH checkin.  
							
							... 
							
							
							
							For details, See: docs/2002-06-25-MegaPatchInfo.txt
llvm-svn: 2779 
							
						 
						
							2002-06-25 16:13:24 +00:00  
				
					
						
							
							
								 
						
							
								9c2765d4aa 
								
							 
						 
						
							
							
								
								Fold add X, 0 for floating point types as well  
							
							... 
							
							
							
							llvm-svn: 2734 
							
						 
						
							2002-05-23 17:11:38 +00:00  
				
					
						
							
							
								 
						
							
								170ed7b6a3 
								
							 
						 
						
							
							
								
								Fix bug: test/Regression/Transforms/InstCombine/2002-05-14-SubFailure.ll  
							
							... 
							
							
							
							llvm-svn: 2627 
							
						 
						
							2002-05-14 16:44:07 +00:00  
				
					
						
							
							
								 
						
							
								053c0939e3 
								
							 
						 
						
							
							
								
								Fix bug: test/Regression/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll  
							
							... 
							
							
							
							"This testcase caused instcombine to fail because it got the same instruction on
it's worklist more than once (which is ok), but then deleted the instruction.
Since the inst stayed on the worklist, as soon as it came back up to be
processed, bad things happened, and opt asserted."
llvm-svn: 2623 
							
						 
						
							2002-05-14 15:24:07 +00:00  
				
					
						
							
							
								 
						
							
								0b18c1d64e 
								
							 
						 
						
							
							
								
								Add support for printing out statistics information when -stats is added to  
							
							... 
							
							
							
							the command line
llvm-svn: 2601 
							
						 
						
							2002-05-10 15:38:35 +00:00  
				
					
						
							
							
								 
						
							
								1fc23f382e 
								
							 
						 
						
							
							
								
								Handle setcc <global*>, 0 instructions, Global pointers are never null!  
							
							... 
							
							
							
							llvm-svn: 2582 
							
						 
						
							2002-05-09 20:11:54 +00:00  
				
					
						
							
							
								 
						
							
								ad3c495225 
								
							 
						 
						
							
							
								
								Add ability to transform (x - (y - z)) into (x + (z - y))  
							
							... 
							
							
							
							llvm-svn: 2566 
							
						 
						
							2002-05-09 01:29:19 +00:00  
				
					
						
							
							
								 
						
							
								147e975c43 
								
							 
						 
						
							
							
								
								* Combine: A-(-B) -> A + B  
							
							... 
							
							
							
							* Bugfix:  A + -B and -A + B
llvm-svn: 2561 
							
						 
						
							2002-05-08 22:46:53 +00:00  
				
					
						
							
							
								 
						
							
								b4cfa7ff97 
								
							 
						 
						
							
							
								
								Merge all individual .h files into a single Scalar.h file  
							
							... 
							
							
							
							llvm-svn: 2537 
							
						 
						
							2002-05-07 20:03:00 +00:00  
				
					
						
							
							
								 
						
							
								9b55e5a2f4 
								
							 
						 
						
							
							
								
								Reduce dependance on TransformInternals.h, instead using the TransformUtils library  
							
							... 
							
							
							
							llvm-svn: 2518 
							
						 
						
							2002-05-07 18:12:18 +00:00  
				
					
						
							
							
								 
						
							
								a6e047a5d9 
								
							 
						 
						
							
							
								
								Only do masking for unsigned values!  
							
							... 
							
							
							
							llvm-svn: 2504 
							
						 
						
							2002-05-06 18:54:59 +00:00  
				
					
						
							
							
								 
						
							
								bbbdd852b8 
								
							 
						 
						
							
							
								
								Handle X = phi Y  --> X = Y  
							
							... 
							
							
							
							llvm-svn: 2501 
							
						 
						
							2002-05-06 18:06:38 +00:00  
				
					
						
							
							
								 
						
							
								5d6bec5e26 
								
							 
						 
						
							
							
								
								Combine not (not X) -> X  
							
							... 
							
							
							
							llvm-svn: 2493 
							
						 
						
							2002-05-06 17:03:21 +00:00  
				
					
						
							
							
								 
						
							
								9fa53de7e9 
								
							 
						 
						
							
							
								
								Support more cases...  
							
							... 
							
							
							
							llvm-svn: 2490 
							
						 
						
							2002-05-06 16:49:18 +00:00  
				
					
						
							
							
								 
						
							
								f4cdbf34e5 
								
							 
						 
						
							
							
								
								Add many more instruction combination simplifications  
							
							... 
							
							
							
							llvm-svn: 2484 
							
						 
						
							2002-05-06 16:14:14 +00:00  
				
					
						
							
							
								 
						
							
								48a44f7e23 
								
							 
						 
						
							
							
								
								* Add ability to eliminate a bunch of different cascading cast variations  
							
							... 
							
							
							
							* Allow elimination of getelementptr X, uint 0 (which is a noop)
llvm-svn: 2428 
							
						 
						
							2002-05-02 17:06:02 +00:00  
				
					
						
							
							
								 
						
							
								31ba129cbe 
								
							 
						 
						
							
							
								
								Add folding rules for mul X, 0 and mul X, 2  
							
							... 
							
							
							
							llvm-svn: 2417 
							
						 
						
							2002-04-29 22:24:47 +00:00  
				
					
						
							
							
								 
						
							
								d5a847057b 
								
							 
						 
						
							
							
								
								Eliminate duplicate or unneccesary #include's  
							
							... 
							
							
							
							llvm-svn: 2397 
							
						 
						
							2002-04-29 17:42:12 +00:00  
				
					
						
							
							
								 
						
							
								37104aace8 
								
							 
						 
						
							
							
								
								Add new optional getPassName() virtual function that a Pass can override  
							
							... 
							
							
							
							to make debugging output a lot nicer.
llvm-svn: 2395 
							
						 
						
							2002-04-29 14:57:45 +00:00  
				
					
						
							
							
								 
						
							
								f12cc842b3 
								
							 
						 
						
							
							
								
								Tighten up the AnalysisUsage of lots of passes, primarily to correctly indicate whether or not they invalidate the CFGA  
							
							... 
							
							
							
							llvm-svn: 2386 
							
						 
						
							2002-04-28 21:27:06 +00:00  
				
					
						
							
							
								 
						
							
								c8e665431b 
								
							 
						 
						
							
							
								
								* Rename MethodPass class to FunctionPass  
							
							... 
							
							
							
							- Rename runOnMethod to runOnFunction
* Transform getAnalysisUsageInfo into getAnalysisUsage
  - Method is now const
  - It now takes one AnalysisUsage object to fill in instead of 3 vectors
    to fill in
  - Pass's now specify which other passes they _preserve_ not which ones
    they modify (be conservative!)
  - A pass can specify that it preserves all analyses (because it never
    modifies the underlying program)
* s/Method/Function/g in other random places as well
llvm-svn: 2333 
							
						 
						
							2002-04-27 06:56:12 +00:00  
				
					
						
							
							
								 
						
							
								2716b5e524 
								
							 
						 
						
							
							
								
								Change Constant::getNullConstant to Constant::getNullValue  
							
							... 
							
							
							
							llvm-svn: 2323 
							
						 
						
							2002-04-27 02:25:14 +00:00  
				
					
						
							
							
								 
						
							
								260ab20422 
								
							 
						 
						
							
							
								
								Significantly rework InstructionCombining to work better and to be cleaner.  
							
							... 
							
							
							
							We now use an InstVisitor to delegate to different cases that we are
interested in handling.  We also fix the FIXME's by adding users to the
worklist when appropriate.
llvm-svn: 2292 
							
						 
						
							2002-04-18 17:39:14 +00:00  
				
					
						
							
							
								 
						
							
								f40379e403 
								
							 
						 
						
							
							
								
								Store instructions always return void, so they never get a name  
							
							... 
							
							
							
							llvm-svn: 2283 
							
						 
						
							2002-04-18 14:43:54 +00:00  
				
					
						
							
							
								 
						
							
								3a60d04722 
								
							 
						 
						
							
							
								
								Eliminate cast of same type instructions.  
							
							... 
							
							
							
							llvm-svn: 2251 
							
						 
						
							2002-04-15 19:45:29 +00:00  
				
					
						
							
							
								 
						
							
								65b529fe6d 
								
							 
						 
						
							
							
								
								ConstantHandling moved into VMCore library  
							
							... 
							
							
							
							llvm-svn: 2165 
							
						 
						
							2002-04-08 20:18:09 +00:00  
				
					
						
							
							
								 
						
							
								62b7fd136e 
								
							 
						 
						
							
							
								
								Change references to the Method class to be references to the Function  
							
							... 
							
							
							
							class.  The Method class is obsolete (renamed) and all references to it
are being converted over to Function.
llvm-svn: 2144 
							
						 
						
							2002-04-07 20:49:59 +00:00  
				
					
						
							
							
								 
						
							
								bee86626e1 
								
							 
						 
						
							
							
								
								Fix bug: test/Regression/Other/2002-03-11-InstCombineHang.ll  
							
							... 
							
							
							
							llvm-svn: 1864 
							
						 
						
							2002-03-11 23:28:45 +00:00  
				
					
						
							
							
								 
						
							
								04805fa29c 
								
							 
						 
						
							
							
								
								Change over to use new style pass mechanism, now passes only expose small  
							
							... 
							
							
							
							creation functions in their public header file, unless they can help it.
llvm-svn: 1816 
							
						 
						
							2002-02-26 21:46:54 +00:00  
				
					
						
							
							
								 
						
							
								83d485b310 
								
							 
						 
						
							
							
								
								* Pull BasicBlock::pred_* and BasicBlock::succ_* out of BasicBlock.h and into  
							
							... 
							
							
							
							llvm/Support/CFG.h
* Make pred & succ iterators for intervals global functions
* Add #includes that are now neccesary because BasicBlock.h doesn't include
  InstrTypes.h anymore
llvm-svn: 1750 
							
						 
						
							2002-02-12 22:39:50 +00:00  
				
					
						
							
							
								 
						
							
								60a6591d83 
								
							 
						 
						
							
							
								
								Method.h no longer includes BasicBlock.h  
							
							... 
							
							
							
							Method::inst_* is now in llvm/Support/InstIterator.h
GraphTraits specializations for BasicBlock and Methods are now in llvm/Support/CFG.h
llvm-svn: 1746 
							
						 
						
							2002-02-12 21:07:25 +00:00  
				
					
						
							
							
								 
						
							
								ee965abc36 
								
							 
						 
						
							
							
								
								Move stuff out of the Optimizations directories into the appropriate Transforms  
							
							... 
							
							
							
							directories.  Eliminate the opt namespace.
llvm-svn: 1520 
							
						 
						
							2002-01-21 23:17:48 +00:00  
				
					
						
							
							
								 
						
							
								7f74a56e24 
								
							 
						 
						
							
							
								
								Changes to build successfully with GCC 3.02  
							
							... 
							
							
							
							llvm-svn: 1503 
							
						 
						
							2002-01-20 22:54:45 +00:00  
				
					
						
							
							
								 
						
							
								ca081257e5 
								
							 
						 
						
							
							
								
								initial checkin  
							
							... 
							
							
							
							llvm-svn: 1480 
							
						 
						
							2001-12-14 16:52:21 +00:00