Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								68ac09d5cb 
								
							 
						 
						
							
							
								
								make sure dead token factor nodes are removed by the dag combiner.  
							
							 
							
							... 
							
							
							
							llvm-svn: 26731 
							
						 
						
							2006-03-13 18:37:30 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d8c2a48d58 
								
							 
						 
						
							
							
								
								Fold X+Y -> X|Y when safe.  This implements:  
							
							 
							
							... 
							
							
							
							Regression/CodeGen/PowerPC/and_add.ll
a case that occurs with dynamic allocas of constant size.
llvm-svn: 26727 
							
						 
						
							2006-03-13 06:51:27 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8bb6cb7d7b 
								
							 
						 
						
							
							
								
								add a couple of missing folds  
							
							 
							
							... 
							
							
							
							llvm-svn: 26724 
							
						 
						
							2006-03-13 06:26:26 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bdaf4f38b5 
								
							 
						 
						
							
							
								
								Reinstate this now that the offending opposite xform has been removed.  
							
							 
							
							... 
							
							
							
							llvm-svn: 26548 
							
						 
						
							2006-03-05 19:53:55 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								d428e22c07 
								
							 
						 
						
							
							
								
								Back out fold (shl (add x, c1), c2) -> (add (shl x, c2), c1<<c2) for now.  
							
							 
							
							... 
							
							
							
							It's causing an infinite loop compiling ldecod on x86 / Darwin.
llvm-svn: 26544 
							
						 
						
							2006-03-05 07:30:16 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3bc4050217 
								
							 
						 
						
							
							
								
								Add some simple copysign folds  
							
							 
							
							... 
							
							
							
							llvm-svn: 26543 
							
						 
						
							2006-03-05 05:30:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f29f5204cc 
								
							 
						 
						
							
							
								
								fold (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2)  
							
							 
							
							... 
							
							
							
							fold (shl (add x, c1), c2) -> (add (shl x, c2), c1<<c2)
This allows us to compile CodeGen/PowerPC/addi-reassoc.ll into:
_test1:
        slwi r2, r4, 4
        add r2, r2, r3
        lwz r3, 36(r2)
        blr
_test2:
        mulli r2, r4, 5
        add r2, r2, r3
        lbz r2, 11(r2)
        extsb r3, r2
        blr
instead of:
_test1:
        addi r2, r4, 2
        slwi r2, r2, 4
        add r2, r3, r2
        lwz r3, 4(r2)
        blr
_test2:
        addi r2, r4, 2
        mulli r2, r2, 5
        add r2, r3, r2
        lbz r2, 1(r2)
        extsb r3, r2
        blr
llvm-svn: 26535 
							
						 
						
							2006-03-04 23:33:26 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0db2f2c689 
								
							 
						 
						
							
							
								
								Fix CodeGen/Generic/2006-03-01-dagcombineinfloop.ll, an infinite loop  
							
							 
							
							... 
							
							
							
							in the dag combiner on 176.gcc on x86.
llvm-svn: 26459 
							
						 
						
							2006-03-01 21:47:21 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								232024edb8 
								
							 
						 
						
							
							
								
								Fix a typo evan noticed  
							
							 
							
							... 
							
							
							
							llvm-svn: 26454 
							
						 
						
							2006-03-01 19:55:35 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bc1c85beea 
								
							 
						 
						
							
							
								
								Add support for target-specific dag combines  
							
							 
							
							... 
							
							
							
							llvm-svn: 26443 
							
						 
						
							2006-03-01 04:53:38 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fbcd62d3bb 
								
							 
						 
						
							
							
								
								Add a new AddToWorkList method, start using it  
							
							 
							
							... 
							
							
							
							llvm-svn: 26441 
							
						 
						
							2006-03-01 04:03:14 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								324871ef1a 
								
							 
						 
						
							
							
								
								Pull shifts by a constant through multiplies (a form of reassociation),  
							
							 
							
							... 
							
							
							
							implementing Regression/CodeGen/X86/mul-shift-reassoc.ll
llvm-svn: 26440 
							
						 
						
							2006-03-01 03:44:24 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								b97aab4371 
								
							 
						 
						
							
							
								
								Vector ops lowering.  
							
							 
							
							... 
							
							
							
							llvm-svn: 26436 
							
						 
						
							2006-03-01 01:09:54 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f0032b350c 
								
							 
						 
						
							
							
								
								Compile:  
							
							 
							
							... 
							
							
							
							unsigned foo4(unsigned short *P) { return *P & 255; }
unsigned foo5(short *P) { return *P & 255; }
to:
_foo4:
        lbz r3,1(r3)
        blr
_foo5:
        lbz r3,1(r3)
        blr
not:
_foo4:
        lhz r2, 0(r3)
        rlwinm r3, r2, 0, 24, 31
        blr
_foo5:
        lhz r2, 0(r3)
        rlwinm r3, r2, 0, 24, 31
        blr
llvm-svn: 26419 
							
						 
						
							2006-02-28 06:49:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bdbc4476d9 
								
							 
						 
						
							
							
								
								Fold "and (LOAD P), 255" -> zextload.  This allows us to compile:  
							
							 
							
							... 
							
							
							
							unsigned foo3(unsigned *P) { return *P & 255; }
as:
_foo3:
        lbz r3, 3(r3)
        blr
instead of:
_foo3:
        lwz r2, 0(r3)
        rlwinm r3, r2, 0, 24, 31
        blr
and:
unsigned short foo2(float a) { return a; }
as:
_foo2:
        fctiwz f0, f1
        stfd f0, -8(r1)
        lhz r3, -2(r1)
        blr
instead of:
_foo2:
        fctiwz f0, f1
        stfd f0, -8(r1)
        lwz r2, -4(r1)
        rlwinm r3, r2, 0, 16, 31
        blr
llvm-svn: 26417 
							
						 
						
							2006-02-28 06:35:35 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0f8a727c49 
								
							 
						 
						
							
							
								
								fold (sra (sra x, c1), c2) -> (sra x, c1+c2)  
							
							 
							
							... 
							
							
							
							llvm-svn: 26416 
							
						 
						
							2006-02-28 06:23:04 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								47ee42829d 
								
							 
						 
						
							
							
								
								remove some completed notes  
							
							 
							
							... 
							
							
							
							llvm-svn: 26390 
							
						 
						
							2006-02-27 00:39:31 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								301f45cf6f 
								
							 
						 
						
							
							
								
								Fix a problem Nate and Duraid reported where simplifying nodes can cause  
							
							 
							
							... 
							
							
							
							them to get ressurected, in which case, deleting the undead nodes is
unfriendly.
llvm-svn: 26291 
							
						 
						
							2006-02-20 06:51:04 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								abac61603f 
								
							 
						 
						
							
							
								
								Add checks to make sure we don't create bogus extend nodes, and fix a bug  
							
							 
							
							... 
							
							
							
							where we were doing exactly that which was causing failures on x86 and
alpha.
llvm-svn: 26284 
							
						 
						
							2006-02-18 02:40:58 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								375e1a71cc 
								
							 
						 
						
							
							
								
								Fix a tricky issue in the SimplifyDemandedBits code where CombineTo wasn't  
							
							 
							
							... 
							
							
							
							exactly the API we wanted to call into.  This fixes the crash on crafty last
night.
llvm-svn: 26269 
							
						 
						
							2006-02-17 21:58:01 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								fb5dbadf15 
								
							 
						 
						
							
							
								
								Clean up DemandedBitsAreZero interface  
							
							 
							
							... 
							
							
							
							Make more use of the new mask helpers in valuetypes.h
Combine (sra (srl x, c1), c1) -> sext_inreg if legal
llvm-svn: 26263 
							
						 
						
							2006-02-17 19:54:08 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								57b3567552 
								
							 
						 
						
							
							
								
								Don't expand sdiv by power of two before legalize, since it will likely  
							
							 
							
							... 
							
							
							
							generate illegal nodes.
llvm-svn: 26261 
							
						 
						
							2006-02-17 07:26:20 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								5965bd19f8 
								
							 
						 
						
							
							
								
								kill ADD_PARTS & SUB_PARTS and replace them with fancy new ADDC, ADDE, SUBC  
							
							 
							
							... 
							
							
							
							and SUBE nodes that actually expose what's going on and allow for
significant simplifications in the targets.
llvm-svn: 26255 
							
						 
						
							2006-02-17 05:43:56 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								8a77efe4f7 
								
							 
						 
						
							
							
								
								Rework the SelectionDAG-based implementations of SimplifyDemandedBits  
							
							 
							
							... 
							
							
							
							and ComputeMaskedBits to match the new improved versions in instcombine.
Tested against all of multisource/benchmarks on ppc.
llvm-svn: 26238 
							
						 
						
							2006-02-16 21:11:51 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								471627c49d 
								
							 
						 
						
							
							
								
								Lowering of sdiv X, pow2 was broken, this fixes it.  This patch is written  
							
							 
							
							... 
							
							
							
							by Nate, I'm just committing it for him.
llvm-svn: 26230 
							
						 
						
							2006-02-16 08:02:36 +00:00  
						
					 
				
					
						
							
							
								 
								Jim Laskey
							
						 
						
							 
							
							
							
							
								
							
							
								2eea436192 
								
							 
						 
						
							
							
								
								Should not combine ISD::LOCATIONs until we have scheme to remove from  
							
							 
							
							... 
							
							
							
							MachineDebugInfo tables.
llvm-svn: 26216 
							
						 
						
							2006-02-15 19:34:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a10e23c19f 
								
							 
						 
						
							
							
								
								Compile this:  
							
							 
							
							... 
							
							
							
							xori r6, r2, 1
        rlwinm r6, r6, 0, 31, 31
        cmpwi cr0, r6, 0
        bne cr0, LBB1_3 ; endif
to this:
        rlwinm r6, r2, 0, 31, 31
        cmpwi cr0, r6, 0
        beq cr0, LBB1_3 ; endif
llvm-svn: 26047 
							
						 
						
							2006-02-08 02:13:15 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								8c9cd461df 
								
							 
						 
						
							
							
								
								Back out previous commit, it isn't safe.  
							
							 
							
							... 
							
							
							
							llvm-svn: 26006 
							
						 
						
							2006-02-05 08:23:00 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								3dc8b89493 
								
							 
						 
						
							
							
								
								fold c1 << (x + c2) into (c1 << c2) << x.  fix a warning.  
							
							 
							
							... 
							
							
							
							llvm-svn: 26005 
							
						 
						
							2006-02-05 08:07:24 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								c89fdf1eb3 
								
							 
						 
						
							
							
								
								Handle urem by shifted powers of 2.  
							
							 
							
							... 
							
							
							
							llvm-svn: 26001 
							
						 
						
							2006-02-05 07:36:48 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								25d178bece 
								
							 
						 
						
							
							
								
								handle combining A / (B << N) into A >>u (log2(B)+N) when B is a power of 2  
							
							 
							
							... 
							
							
							
							llvm-svn: 26000 
							
						 
						
							2006-02-05 07:20:23 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								dc7bba9ffe 
								
							 
						 
						
							
							
								
								Add a framework for eliminating instructions that produces undemanded bits.  
							
							 
							
							... 
							
							
							
							llvm-svn: 25945 
							
						 
						
							2006-02-03 22:24:05 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								22e251abf1 
								
							 
						 
						
							
							
								
								Add common code for reassociating ops in the dag combiner  
							
							 
							
							... 
							
							
							
							llvm-svn: 25934 
							
						 
						
							2006-02-03 06:46:56 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								49beaf40fc 
								
							 
						 
						
							
							
								
								Turn any_extend nodes into zero_extend nodes when it allows us to remove an  
							
							 
							
							... 
							
							
							
							and instruction.  This allows us to compile stuff like this:
bool %X(int %X) {
        %Y = add int %X, 14
        %Z = setne int %Y, 12345
        ret bool %Z
}
to this:
_X:
        cmpl $12331, 4(%esp)
        setne %al
        movzbl %al, %eax
        ret
instead of this:
_X:
        cmpl $12331, 4(%esp)
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret
This occurs quite a bit with the X86 backend.  For example, 25 times in
lambda, 30 times in 177.mesa, 14 times in galgel,  70 times in fma3d,
25 times in vpr, several hundred times in gcc, ~45 times in crafty,
~60 times in parser, ~140 times in eon, 110 times in perlbmk, 55 on gap,
16 times on bzip2, 14 times on twolf, and 1-2 times in many other SPEC2K
programs.
llvm-svn: 25901 
							
						 
						
							2006-02-02 07:17:31 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								49ce35542f 
								
							 
						 
						
							
							
								
								add two dag combines:  
							
							 
							
							... 
							
							
							
							(C1-X) == C2 --> X == C1-C2
(X+C1) == C2 --> X == C2-C1
This allows us to compile this:
bool %X(int %X) {
        %Y = add int %X, 14
        %Z = setne int %Y, 12345
        ret bool %Z
}
into this:
_X:
        cmpl $12331, 4(%esp)
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret
not this:
_X:
        movl $14, %eax
        addl 4(%esp), %eax
        cmpl $12345, %eax
        setne %al
        movzbl %al, %eax
        andl $1, %eax
        ret
Testcase here: Regression/CodeGen/X86/compare-add.ll
nukage of the and coming up next.
llvm-svn: 25898 
							
						 
						
							2006-02-02 06:36:13 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								7e7f439f85 
								
							 
						 
						
							
							
								
								Fix some of the stuff in the PPC README file, and clean up legalization  
							
							 
							
							... 
							
							
							
							of the SELECT_CC, BR_CC, and BRTWOWAY_CC nodes.
llvm-svn: 25875 
							
						 
						
							2006-02-01 07:19:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f0b24d2dc0 
								
							 
						 
						
							
							
								
								Move MaskedValueIsZero from the DAGCombiner to the TargetLowering interface,making isMaskedValueZeroForTargetNode simpler, and useable from other partsof the compiler.  
							
							 
							
							... 
							
							
							
							llvm-svn: 25803 
							
						 
						
							2006-01-30 04:09:27 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3b40e64aa3 
								
							 
						 
						
							
							
								
								pass the address of MaskedValueIsZero into isMaskedValueZeroForTargetNode,  
							
							 
							
							... 
							
							
							
							to permit recursion
llvm-svn: 25799 
							
						 
						
							2006-01-30 03:49:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								678da98835 
								
							 
						 
						
							
							
								
								eliminate uses of SelectionDAG::getBR2Way_CC  
							
							 
							
							... 
							
							
							
							llvm-svn: 25767 
							
						 
						
							2006-01-29 06:00:45 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								af397cec0b 
								
							 
						 
						
							
							
								
								Add a missing case to the dag combiner.  
							
							 
							
							... 
							
							
							
							llvm-svn: 25723 
							
						 
						
							2006-01-28 01:06:30 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								de02d7727f 
								
							 
						 
						
							
							
								
								Add explicit #includes of <iostream>  
							
							 
							
							... 
							
							
							
							llvm-svn: 25515 
							
						 
						
							2006-01-22 23:41:00 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								569c439567 
								
							 
						 
						
							
							
								
								Get rid of code in the DAGCombiner that is duplicated in SelectionDAG.cpp  
							
							 
							
							... 
							
							
							
							Now all constant folding in the code generator is in one place.
llvm-svn: 25426 
							
						 
						
							2006-01-18 22:35:16 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5fee908be5 
								
							 
						 
						
							
							
								
								Fix a backwards conditional that caused an inf loop in some cases.  This  
							
							 
							
							... 
							
							
							
							fixes: test/Regression/CodeGen/Generic/2005-01-18-SetUO-InfLoop.ll
llvm-svn: 25419 
							
						 
						
							2006-01-18 19:13:41 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fcdb420baf 
								
							 
						 
						
							
							
								
								Disable two transformations that contribute to bus errors on SparcV8.  
							
							 
							
							... 
							
							
							
							llvm-svn: 25339 
							
						 
						
							2006-01-15 18:58:59 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3470b5dee6 
								
							 
						 
						
							
							
								
								Add a simple missing fold to produce this:  
							
							 
							
							... 
							
							
							
							subfic r3, r2, 33
instead of this:
        subfic r2, r2, 32
        addi r3, r2, 1
llvm-svn: 25255 
							
						 
						
							2006-01-12 20:22:43 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b1ee616de9 
								
							 
						 
						
							
							
								
								Don't create rotate instructions in unsupported types, because we don't have  
							
							 
							
							... 
							
							
							
							promote/expand code yet.  This fixes the 177.mesa failure on PPC.
llvm-svn: 25250 
							
						 
						
							2006-01-12 18:57:33 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								1b8121b227 
								
							 
						 
						
							
							
								
								Add bswap, rotl, and rotr nodes  
							
							 
							
							... 
							
							
							
							Add dag combiner code to recognize rotl, rotr
Add ppc code to match rotl
Targets should add rotl/rotr patterns if they have them
llvm-svn: 25222 
							
						 
						
							2006-01-11 21:21:00 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								85c973cda9 
								
							 
						 
						
							
							
								
								Revert the previous check-in. Leave shl x, 1 along for target to deal with.  
							
							 
							
							... 
							
							
							
							llvm-svn: 25121 
							
						 
						
							2006-01-06 01:56:02 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								b03f9b32d2 
								
							 
						 
						
							
							
								
								fold (shl x, 1) -> (add x, x)  
							
							 
							
							... 
							
							
							
							llvm-svn: 25120 
							
						 
						
							2006-01-06 01:06:31 +00:00  
						
					 
				
					
						
							
							
								 
								Jim Laskey
							
						 
						
							 
							
							
							
							
								
							
							
								762e9ec06c 
								
							 
						 
						
							
							
								
								Added initial support for DEBUG_LABEL allowing debug specific labels to be  
							
							 
							
							... 
							
							
							
							inserted in the code.
llvm-svn: 25104 
							
						 
						
							2006-01-05 01:25:28 +00:00