Chris Lattner 
							
						 
					 
					
						
						
							
						
						a850446a0b 
					 
					
						
						
							
							Compile this:  
						
						... 
						
						
						
						short test4(unsigned X) {
  return (X >> 16);
}
to:
_test4:
        movl 4(%esp), %eax
        sarl $16, %eax
        ret
instead of:
_test4:
        movl $-65536, %eax
        andl 4(%esp), %eax
        sarl $16, %eax
        ret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28171  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-08 20:51:54 +00:00 
						 
				 
			
				
					
						
							
							
								Nate Begeman 
							
						 
					 
					
						
						
							
						
						5c742681ed 
					 
					
						
						
							
							Fix PR772  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28161  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-08 01:35:01 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						310b578023 
					 
					
						
						
							
							Simplify some code, add a couple minor missed folds  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28152  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-06 23:06:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						541a24f7af 
					 
					
						
						
							
							remove cases handled elsewhere  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28150  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-06 22:43:44 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						ee4ea92358 
					 
					
						
						
							
							Use the new TargetLowering::ComputeNumSignBits method to eliminate  
						
						... 
						
						
						
						sign_extend_inreg operations.  Though ComputeNumSignBits is still rudimentary,
this is enough to compile this:
short test(short X, short x) {
  int Y = X+x;
  return (Y >> 1);
}
short test2(short X, short x) {
  int Y = (short)(X+x);
  return Y >> 1;
}
into:
_test:
        add r2, r3, r4
        srawi r3, r2, 1
        blr
_test2:
        add r2, r3, r4
        extsh r2, r2
        srawi r3, r2, 1
        blr
instead of:
_test:
        add r2, r3, r4
        srawi r2, r2, 1
        extsh r3, r2
        blr
_test2:
        add r2, r3, r4
        extsh r2, r2
        srawi r2, r2, 1
        extsh r3, r2
        blr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28146  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-06 09:30:03 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						b72773bb88 
					 
					
						
						
							
							Fold trunc(any_ext).  This gives stuff like:  
						
						... 
						
						
						
						27,28c27
<       movzwl %di, %edi
<       movl %edi, %ebx
---
>       movw %di, %bx
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28137  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 22:56:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						06afe07037 
					 
					
						
						
							
							Shrink shifts when possible.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28136  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 22:53:17 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e564dbb51c 
					 
					
						
						
							
							Fold (fpext (load x)) -> (extload x)  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28130  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 21:34:35 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						0d8dae749c 
					 
					
						
						
							
							Fold some common code.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28124  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 06:32:04 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						540121f1ec 
					 
					
						
						
							
							Implement:  
						
						... 
						
						
						
						// fold (and (sext x), (sext y)) -> (sext (and x, y))
  // fold (or  (sext x), (sext y)) -> (sext (or  x, y))
  // fold (xor (sext x), (sext y)) -> (sext (xor x, y))
  // fold (and (aext x), (aext y)) -> (aext (and x, y))
  // fold (or  (aext x), (aext y)) -> (aext (or  x, y))
  // fold (xor (aext x), (aext y)) -> (aext (xor x, y))
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28123  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 06:31:05 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						a3dc3f692c 
					 
					
						
						
							
							Pull and through and/or/xor.  This compiles some bitfield code to:  
						
						... 
						
						
						
						mov EAX, DWORD PTR [ESP + 4]
        mov ECX, DWORD PTR [EAX]
        mov EDX, ECX
        add EDX, EDX
        or EDX, ECX
        and EDX, -2147483648
        and ECX, 2147483647
        or EDX, ECX
        mov DWORD PTR [EAX], EDX
        ret
instead of:
        sub ESP, 4
        mov DWORD PTR [ESP], ESI
        mov EAX, DWORD PTR [ESP + 8]
        mov ECX, DWORD PTR [EAX]
        mov EDX, ECX
        add EDX, EDX
        mov ESI, ECX
        and ESI, -2147483648
        and EDX, -2147483648
        or EDX, ESI
        and ECX, 2147483647
        or EDX, ECX
        mov DWORD PTR [EAX], EDX
        mov ESI, DWORD PTR [ESP]
        add ESP, 4
        ret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28122  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 06:10:43 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						5ffc066912 
					 
					
						
						
							
							Implement a variety of simplifications for ANY_EXTEND.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28121  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 05:58:59 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						35e5c14b80 
					 
					
						
						
							
							Factor some code, add these transformations:  
						
						... 
						
						
						
						// fold (and (trunc x), (trunc y)) -> (trunc (and x, y))
  // fold (or  (trunc x), (trunc y)) -> (trunc (or  x, y))
  // fold (xor (trunc x), (trunc y)) -> (trunc (xor x, y))
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28120  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-05-05 05:51:50 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						25c344a758 
					 
					
						
						
							
							Remove a bogus transformation.  This fixes SingleSource/UnitTests/2006-01-23-InitializedBitField.c  
						
						... 
						
						
						
						with some changes I have to the new CFE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28022  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-28 23:33:20 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						ef027f940c 
					 
					
						
						
							
							Fix a couple more memory issues  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27930  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-21 15:32:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						fedced7bc3 
					 
					
						
						
							
							Fix a really subtle and obnoxious memory bug that caused issues with an  
						
						... 
						
						
						
						llvm-gcc4 boostrap.  Whenever a node is deleted by the dag combiner, it
*must* be returned by the visit function, or the dag combiner will not
know that the node has been processed (and will, e.g., send it to the
target dag combine xforms).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27922  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-20 23:55:59 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						44f1f09b4e 
					 
					
						
						
							
							Turn a VAND into a VECTOR_SHUFFLE is applicable.  
						
						... 
						
						
						
						DAG combiner can turn a VAND V, <-1, 0, -1, -1>, i.e. vector clear elements,
into a vector shuffle with a zero vector. It only does so when TLI tells it
the xform is profitable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27874  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-20 08:56:16 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						17614ea63d 
					 
					
						
						
							
							Canonicalize vvector_shuffle(x,x) -> vvector_shuffle(x,undef) to enable patterns  
						
						... 
						
						
						
						to match again :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27533  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-08 05:34:25 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						3e104b1116 
					 
					
						
						
							
							Codegen shufflevector as VVECTOR_SHUFFLE  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27529  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-08 04:15:24 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						c04766a228 
					 
					
						
						
							
							1. If both vector operands of a vector_shuffle are undef, turn it into an undef.  
						
						... 
						
						
						
						2. A shuffle mask element can also be an undef.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27472  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-06 23:20:43 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e44be60ee9 
					 
					
						
						
							
							Do not create ZEXTLOAD's unless we are before legalize or the operation is  
						
						... 
						
						
						
						legal.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27402  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-04 17:39:18 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						97c2073270 
					 
					
						
						
							
							Add a missing check, this fixes UnitTests/Vector/sumarray.c  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27375  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-03 17:29:28 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						a4c5d8c6b4 
					 
					
						
						
							
							Add a missing check, which broke a bunch of vector tests.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27374  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-03 17:21:50 +00:00 
						 
				 
			
				
					
						
							
							
								Andrew Lenharth 
							
						 
					 
					
						
						
							
						
						cf4fb61f6c 
					 
					
						
						
							
							back this out  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27367  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-03 03:16:50 +00:00 
						 
				 
			
				
					
						
							
							
								Andrew Lenharth 
							
						 
					 
					
						
						
							
						
						50a0d426e8 
					 
					
						
						
							
							This should be a win of every arch  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27364  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-02 21:42:45 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						350bec0fb9 
					 
					
						
						
							
							Add a little dag combine to compile this:  
						
						... 
						
						
						
						int %AreSecondAndThirdElementsBothNegative(<4 x float>* %in) {
entry:
        %tmp1 = load <4 x float>* %in           ; <<4 x float>> [#uses=1]
        %tmp = tail call int %llvm.ppc.altivec.vcmpgefp.p( int 1, <4 x float> < float 0x7FF8000000000000, float 0.000000e+00, float 0.000000e+00, float 0x7FF8000000000000 >, <4 x float> %tmp1 )           ; <int> [#uses=1]
        %tmp = seteq int %tmp, 0                ; <bool> [#uses=1]
        %tmp3 = cast bool %tmp to int           ; <int> [#uses=1]
        ret int %tmp3
}
into this:
_AreSecondAndThirdElementsBothNegative:
        mfspr r2, 256
        oris r4, r2, 49152
        mtspr 256, r4
        li r4, lo16(LCPI1_0)
        lis r5, ha16(LCPI1_0)
        lvx v0, 0, r3
        lvx v1, r5, r4
        vcmpgefp. v0, v1, v0
        mfcr r3, 2
        rlwinm r3, r3, 27, 31, 31
        mtspr 256, r2
        blr
instead of this:
_AreSecondAndThirdElementsBothNegative:
        mfspr r2, 256
        oris r4, r2, 49152
        mtspr 256, r4
        li r4, lo16(LCPI1_0)
        lis r5, ha16(LCPI1_0)
        lvx v0, 0, r3
        lvx v1, r5, r4
        vcmpgefp. v0, v1, v0
        mfcr r3, 2
        rlwinm r3, r3, 27, 31, 31
        xori r3, r3, 1
        cntlzw r3, r3
        srwi r3, r3, 5
        mtspr 256, r2
        blr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27356  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-02 06:11:11 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						edab1b9133 
					 
					
						
						
							
							Constant fold all of the vector binops.  This allows us to compile this:  
						
						... 
						
						
						
						"vector unsigned char mergeLowHigh = (vector unsigned char)
( 8, 9, 10, 11, 16, 17, 18, 19, 12, 13, 14, 15, 20, 21, 22, 23 );
vector unsigned char mergeHighLow = vec_xor( mergeLowHigh, vec_splat_u8(8));"
aka:
void %test2(<16 x sbyte>* %P) {
  store <16 x sbyte> cast (<4 x int> xor (<4 x int> cast (<16 x ubyte> < ubyte 8, ubyte 9, ubyte 10, ubyte 11, ubyte 16, ubyte 17, ubyte 18, ubyte 19, ubyte 12, ubyte 13, ubyte 14, ubyte 15, ubyte 20, ubyte 21, ubyte 22, ubyte 23 > to <4 x int>), <4 x int> cast (<16 x sbyte> < sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8 > to <4 x int>)) to <16 x sbyte>), <16 x sbyte> * %P
  ret void
}
into this:
_test2:
        mfspr r2, 256
        oris r4, r2, 32768
        mtspr 256, r4
        li r4, lo16(LCPI2_0)
        lis r5, ha16(LCPI2_0)
        lvx v0, r5, r4
        stvx v0, 0, r3
        mtspr 256, r2
        blr
instead of this:
_test2:
        mfspr r2, 256
        oris r4, r2, 49152
        mtspr 256, r4
        li r4, lo16(LCPI2_0)
        lis r5, ha16(LCPI2_0)
        vspltisb v0, 8
        lvx v1, r5, r4
        vxor v0, v1, v0
        stvx v0, 0, r3
        mtspr 256, r2
        blr
... which occurs here:
http://developer.apple.com/hardware/ve/calcspeed.html 
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27343  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-02 03:25:57 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						6258fb2592 
					 
					
						
						
							
							Implement constant folding of bit_convert of arbitrary constant vbuild_vector nodes.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27341  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-04-02 02:53:43 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						f1d0c623c6 
					 
					
						
						
							
							Delete identity shuffles, implementing CodeGen/Generic/vector-identity-shuffle.ll  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27317  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-31 22:16:43 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						29cd7db310 
					 
					
						
						
							
							Remove dead *extloads.  This allows us to codegen vector.ll:test_extract_elt  
						
						... 
						
						
						
						to:
test_extract_elt:
        alloc r3 = ar.pfs,0,1,0,0
        adds r8 = 12, r32
        ;;
        ldfs f8 = [r8]
        mov ar.pfs = r3
        br.ret.sptk.many rp
instead of:
test_extract_elt:
        alloc r3 = ar.pfs,0,1,0,0
        adds r8 = 28, r32
        adds r9 = 24, r32
        adds r10 = 20, r32
        adds r11 = 16, r32
        ;;
        ldfs f6 = [r8]
        ;;
        ldfs f6 = [r9]
        adds r8 = 12, r32
        adds r9 = 8, r32
        adds r14 = 4, r32
        ;;
        ldfs f6 = [r10]
        ;;
        ldfs f6 = [r11]
        ldfs f8 = [r8]
        ;;
        ldfs f6 = [r9]
        ;;
        ldfs f6 = [r14]
        ;;
        ldfs f6 = [r32]
        mov ar.pfs = r3
        br.ret.sptk.many rp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27297  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-31 18:10:41 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e4b953939c 
					 
					
						
						
							
							Delete dead loads in the dag.  This allows us to compile  
						
						... 
						
						
						
						vector.ll:test_extract_elt2 into:
_test_extract_elt2:
        lfd f1, 32(r3)
        blr
instead of:
_test_extract_elt2:
        lfd f0, 56(r3)
        lfd f0, 48(r3)
        lfd f0, 40(r3)
        lfd f1, 32(r3)
        lfd f0, 24(r3)
        lfd f0, 16(r3)
        lfd f0, 8(r3)
        lfd f0, 0(r3)
        blr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27296  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-31 18:06:18 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						cef896e50c 
					 
					
						
						
							
							When building a VVECTOR_SHUFFLE node from extract_element operations, make  
						
						... 
						
						
						
						sure to build it as SHUFFLE(X, undef, mask), not SHUFFLE(X, X, mask).
The later is not canonical form, and prevents the PPC splat pattern from
matching.  For a particular splat, we go from generating this:
	li r10, lo16(LCPI1_0)
	lis r11, ha16(LCPI1_0)
	lvx v3, r11, r10
	vperm v3, v2, v2, v3
to generating:
	vspltw v3, v2, 3
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27236  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-28 22:19:47 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						66445d3e0a 
					 
					
						
						
							
							Canonicalize VECTOR_SHUFFLE(X, X, Y) -> VECTOR_SHUFFLE(X,undef,Y')  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27235  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-28 22:11:53 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						d7648c8934 
					 
					
						
						
							
							Turn a series of extract_element's feeding a build_vector into a  
						
						... 
						
						
						
						vector_shuffle node.  For this:
void test(__m128 *res, __m128 *A, __m128 *B) {
  *res = _mm_unpacklo_ps(*A, *B);
}
we now produce this code:
_test:
        movl 8(%esp), %eax
        movaps (%eax), %xmm0
        movl 12(%esp), %eax
        unpcklps (%eax), %xmm0
        movl 4(%esp), %eax
        movaps %xmm0, (%eax)
        ret
instead of this:
_test:
        subl $76, %esp
        movl 88(%esp), %eax
        movaps (%eax), %xmm0
        movaps %xmm0, (%esp)
        movaps %xmm0, 32(%esp)
        movss 4(%esp), %xmm0
        movss 32(%esp), %xmm1
        unpcklps %xmm0, %xmm1
        movl 84(%esp), %eax
        movaps (%eax), %xmm0
        movaps %xmm0, 16(%esp)
        movaps %xmm0, 48(%esp)
        movss 20(%esp), %xmm0
        movss 48(%esp), %xmm2
        unpcklps %xmm0, %xmm2
        unpcklps %xmm1, %xmm2
        movl 80(%esp), %eax
        movaps %xmm2, (%eax)
        addl $76, %esp
        ret
GCC produces this (with -fomit-frame-pointer):
_test:
        subl    $12, %esp
        movl    20(%esp), %eax
        movaps  (%eax), %xmm0
        movl    24(%esp), %eax
        unpcklps        (%eax), %xmm0
        movl    16(%esp), %eax
        movaps  %xmm0, (%eax)
        addl    $12, %esp
        ret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27233  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-28 20:28:38 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						4fbdd59f4f 
					 
					
						
						
							
							Don't crash on X^X if X is a vector.  Instead, produce a vector of zeros.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27229  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-28 19:11:05 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						6ea2dee6f6 
					 
					
						
						
							
							Don't call SimplifyDemandedBits on vectors  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27128  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-25 22:19:00 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						ca24244234 
					 
					
						
						
							
							fold insertelement(buildvector) -> buildvector if the inserted element # is  
						
						... 
						
						
						
						a constant.  This implements test_constant_insert in CodeGen/Generic/vector.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26851  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-19 01:27:56 +00:00 
						 
				 
			
				
					
						
							
							
								Nate Begeman 
							
						 
					 
					
						
						
							
						
						81e8097377 
					 
					
						
						
							
							Remove BRTWOWAY*  
						
						... 
						
						
						
						Make the PPC backend not dependent on BRTWOWAY_CC and make the branch
selector smarter about the code it generates, fixing a case in the
readme.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26814  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-17 01:40:33 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						ac0f8f2929 
					 
					
						
						
							
							make sure dead token factor nodes are removed by the dag combiner.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26731  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-13 18:37:30 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						947c28935d 
					 
					
						
						
							
							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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26727  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-13 06:51:27 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						79dbea5ab4 
					 
					
						
						
							
							add a couple of missing folds  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26724  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-13 06:26:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						cac7059d0f 
					 
					
						
						
							
							Reinstate this now that the offending opposite xform has been removed.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26548  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-05 19:53:55 +00:00 
						 
				 
			
				
					
						
							
							
								Evan Cheng 
							
						 
					 
					
						
						
							
						
						9176b0169c 
					 
					
						
						
							
							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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26544  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-05 07:30:16 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						12d830346b 
					 
					
						
						
							
							Add some simple copysign folds  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26543  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-05 05:30:57 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						a1deca3cd6 
					 
					
						
						
							
							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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26535  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-04 23:33:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						1ec05d1bb4 
					 
					
						
						
							
							Fix CodeGen/Generic/2006-03-01-dagcombineinfloop.ll, an infinite loop  
						
						... 
						
						
						
						in the dag combiner on 176.gcc on x86.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26459  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-01 21:47:21 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						b2742f4a26 
					 
					
						
						
							
							Fix a typo evan noticed  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26454  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-01 19:55:35 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						2466472a2b 
					 
					
						
						
							
							Add support for target-specific dag combines  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26443  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-01 04:53:38 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						5750df9d69 
					 
					
						
						
							
							Add a new AddToWorkList method, start using it  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26441  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-01 04:03:14 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						0b1a85f110 
					 
					
						
						
							
							Pull shifts by a constant through multiplies (a form of reassociation),  
						
						... 
						
						
						
						implementing Regression/CodeGen/X86/mul-shift-reassoc.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26440  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2006-03-01 03:44:24 +00:00