Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0fab459362 
								
							 
						 
						
							
							
								
								make sure to relegalize all cases  
							
							 
							
							... 
							
							
							
							llvm-svn: 24911 
							
						 
						
							2005-12-21 19:40:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ac12f68424 
								
							 
						 
						
							
							
								
								fix a bug I introduced that broke recursive expansion of nodes (e.g. scalarizing vectors)  
							
							 
							
							... 
							
							
							
							llvm-svn: 24905 
							
						 
						
							2005-12-21 18:02:52 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2af3ee4bdd 
								
							 
						 
						
							
							
								
								Fix a nasty latent bug in the legalizer that was triggered by my patch  
							
							 
							
							... 
							
							
							
							last night, breaking crafty and twolf.  Make sure that the newly found
legal nodes are themselves not re-legalized until the next iteration.
Also, since this functionality exists now, we can reduce number of legalizer
iterations by depending on this behavior instead of having to misuse 'do
another iteration' to get the same effect.
llvm-svn: 24875 
							
						 
						
							2005-12-20 00:53:54 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								6fc31046aa 
								
							 
						 
						
							
							
								
								X86 conditional branch support.  
							
							 
							
							... 
							
							
							
							llvm-svn: 24870 
							
						 
						
							2005-12-19 23:12:38 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c06da626b4 
								
							 
						 
						
							
							
								
								Make sure to relegalize new nodes  
							
							 
							
							... 
							
							
							
							llvm-svn: 24843 
							
						 
						
							2005-12-18 23:54:29 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ebcfa0c210 
								
							 
						 
						
							
							
								
								More corrections for flagged copyto/from reg  
							
							 
							
							... 
							
							
							
							llvm-svn: 24828 
							
						 
						
							2005-12-18 15:36:21 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								e3c67e97c7 
								
							 
						 
						
							
							
								
								legalize copytoreg and copyfromreg nodes that have flag operands correctly.  
							
							 
							
							... 
							
							
							
							llvm-svn: 24826 
							
						 
						
							2005-12-18 15:27:43 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bf0bd99e03 
								
							 
						 
						
							
							
								
								allow custom expansion of BR_CC  
							
							 
							
							... 
							
							
							
							llvm-svn: 24804 
							
						 
						
							2005-12-17 23:46:46 +00:00  
						
					 
				
					
						
							
							
								 
								Evan Cheng
							
						 
						
							 
							
							
							
							
								
							
							
								225a4d0d6d 
								
							 
						 
						
							
							
								
								X86 lowers SELECT to a cmp / test followed by a conditional move.  
							
							 
							
							... 
							
							
							
							llvm-svn: 24754 
							
						 
						
							2005-12-17 01:21:05 +00:00  
						
					 
				
					
						
							
							
								 
								Jim Laskey
							
						 
						
							 
							
							
							
							
								
							
							
								7c462768ed 
								
							 
						 
						
							
							
								
								Added source file/line correspondence for dwarf (PowerPC only at this point.)  
							
							 
							
							... 
							
							
							
							llvm-svn: 24748 
							
						 
						
							2005-12-16 22:45:29 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								956aef45c9 
								
							 
						 
						
							
							
								
								Lowering constant pool entries on ppc exposed a bug in the recently added  
							
							 
							
							... 
							
							
							
							ConstantVec legalizing code, which would return constantpool nodes that
were not of the target's pointer type.
llvm-svn: 24691 
							
						 
						
							2005-12-13 03:03:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b42ce7ca63 
								
							 
						 
						
							
							
								
								Fix CodeGen/Generic/2005-12-12-ExpandSextInreg.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 24677 
							
						 
						
							2005-12-12 22:27:43 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								4e56db674c 
								
							 
						 
						
							
							
								
								Add support for TargetConstantPool nodes to the dag isel emitter, and use  
							
							 
							
							... 
							
							
							
							them in the PPC backend, to simplify some logic out of Select and
SelectAddr.
llvm-svn: 24657 
							
						 
						
							2005-12-10 02:36:00 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								268d457b69 
								
							 
						 
						
							
							
								
								Teach legalize how to promote sext_inreg to fix a problem Andrew pointed  
							
							 
							
							... 
							
							
							
							out to me.
llvm-svn: 24644 
							
						 
						
							2005-12-09 17:32:47 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								ae89d862f5 
								
							 
						 
						
							
							
								
								Fix a crash where ConstantVec nodes were being generated with the wrong  
							
							 
							
							... 
							
							
							
							type when the target did not support them.  Also teach Legalize how to
expand ConstantVecs.
This allows us to generate
_test:
        lwz r2, 12(r3)
        lwz r4, 8(r3)
        lwz r5, 4(r3)
        lwz r6, 0(r3)
        addi r2, r2, 4
        addi r4, r4, 3
        addi r5, r5, 2
        addi r6, r6, 1
        stw r2, 12(r3)
        stw r4, 8(r3)
        stw r5, 4(r3)
        stw r6, 0(r3)
        blr
For:
void %test(%v4i *%P) {
        %T = load %v4i* %P
        %S = add %v4i %T, <int 1, int 2, int 3, int 4>
        store %v4i %S, %v4i * %P
        ret void
}
On PowerPC.
llvm-svn: 24633 
							
						 
						
							2005-12-07 19:48:11 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								41b1cdc771 
								
							 
						 
						
							
							
								
								Teach the SelectionDAG ISel how to turn ConstantPacked values into  
							
							 
							
							... 
							
							
							
							constant nodes with vector types.  Also teach the asm printer how to print
ConstantPacked constant pool entries.  This allows us to generate altivec
code such as the following, which adds a vector constantto a packed float.
LCPI1_0:  <4 x float> < float 0.0e+0, float 0.0e+0, float 0.0e+0, float 1.0e+0 >
        .space  4
        .space  4
        .space  4
        .long   1065353216      ; float 1
        .text
        .align  4
        .globl  _foo
_foo:
        lis r2, ha16(LCPI1_0)
        la r2, lo16(LCPI1_0)(r2)
        li r4, 0
        lvx v0, r4, r2
        lvx v1, r4, r3
        vaddfp v0, v1, v0
        stvx v0, r4, r3
        blr
For the llvm code:
void %foo(<4 x float> * %a) {
entry:
  %tmp1 = load <4 x float> * %a;
  %tmp2 = add <4 x float> %tmp1, < float 0.0, float 0.0, float 0.0, float 1.0 >
  store <4 x float> %tmp2, <4 x float> *%a
  ret void
}
llvm-svn: 24616 
							
						 
						
							2005-12-06 06:18:55 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								f9b27d7011 
								
							 
						 
						
							
							
								
								bah, must generate all results  
							
							 
							
							... 
							
							
							
							llvm-svn: 24574 
							
						 
						
							2005-12-02 06:08:08 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								73420b3795 
								
							 
						 
						
							
							
								
								cycle counter fix  
							
							 
							
							... 
							
							
							
							llvm-svn: 24573 
							
						 
						
							2005-12-02 04:56:24 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								05b0b4575b 
								
							 
						 
						
							
							
								
								Promote line and column number information for our friendly 64-bit targets.  
							
							 
							
							... 
							
							
							
							llvm-svn: 24568 
							
						 
						
							2005-12-01 18:21:35 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								6ee8566cae 
								
							 
						 
						
							
							
								
								At long last, you can say that f32 isn't supported for setcc  
							
							 
							
							... 
							
							
							
							llvm-svn: 24537 
							
						 
						
							2005-11-30 17:12:26 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								8d17c70171 
								
							 
						 
						
							
							
								
								add support for custom lowering SINT_TO_FP  
							
							 
							
							... 
							
							
							
							llvm-svn: 24531 
							
						 
						
							2005-11-30 06:43:03 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								435b402e1f 
								
							 
						 
						
							
							
								
								Add support for a new STRING and LOCATION node for line number support, patch  
							
							 
							
							... 
							
							
							
							contributed by Daniel Berlin, with a few cleanups here and there by me.
llvm-svn: 24515 
							
						 
						
							2005-11-29 06:21:05 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								89b049af90 
								
							 
						 
						
							
							
								
								Add the majority of the vector machien value types we expect to support,  
							
							 
							
							... 
							
							
							
							and make a few changes to the legalization machinery to support more than
16 types.
llvm-svn: 24511 
							
						 
						
							2005-11-29 05:45:29 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								d37c13154a 
								
							 
						 
						
							
							
								
								Check in code to scalarize arbitrarily wide packed types for some simple  
							
							 
							
							... 
							
							
							
							vector operations (load, add, sub, mul).
This allows us to codegen:
void %foo(<4 x float> * %a) {
entry:
  %tmp1 = load <4 x float> * %a;
  %tmp2 = add <4 x float> %tmp1, %tmp1
  store <4 x float> %tmp2, <4 x float> *%a
  ret void
}
on ppc as:
_foo:
        lfs f0, 12(r3)
        lfs f1, 8(r3)
        lfs f2, 4(r3)
        lfs f3, 0(r3)
        fadds f0, f0, f0
        fadds f1, f1, f1
        fadds f2, f2, f2
        fadds f3, f3, f3
        stfs f0, 12(r3)
        stfs f1, 8(r3)
        stfs f2, 4(r3)
        stfs f3, 0(r3)
        blr
llvm-svn: 24484 
							
						 
						
							2005-11-22 18:16:00 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								07890bbec4 
								
							 
						 
						
							
							
								
								Rather than attempting to legalize 1 x float, make sure the SD ISel never  
							
							 
							
							... 
							
							
							
							generates it.  Make MVT::Vector expand-only, and remove the code in
Legalize that attempts to legalize it.
The plan for supporting N x Type is to continually epxand it in ExpandOp
until it gets down to 2 x Type, where it will be scalarized into a pair of
scalars.
llvm-svn: 24482 
							
						 
						
							2005-11-22 01:29:36 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								44c28c22b7 
								
							 
						 
						
							
							
								
								Legalize MERGE_VALUES, expand READCYCLECOUNTER correctly, so it doesn't  
							
							 
							
							... 
							
							
							
							break control dependence.
llvm-svn: 24437 
							
						 
						
							2005-11-20 22:56:56 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								627cbd49b1 
								
							 
						 
						
							
							
								
								The first patch of X86 support for read cycle counter  
							
							 
							
							... 
							
							
							
							llvm-svn: 24429 
							
						 
						
							2005-11-20 21:32:07 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								301015a703 
								
							 
						 
						
							
							
								
								Silence a bogus warning  
							
							 
							
							... 
							
							
							
							llvm-svn: 24420 
							
						 
						
							2005-11-19 05:51:46 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								b2e089c31b 
								
							 
						 
						
							
							
								
								Teach LLVM how to scalarize packed types.  Currently, this only works on  
							
							 
							
							... 
							
							
							
							packed types with an element count of 1, although more generic support is
coming.  This allows LLVM to turn the following code:
void %foo(<1 x float> * %a) {
entry:
  %tmp1 = load <1 x float> * %a;
  %tmp2 = add <1 x float> %tmp1, %tmp1
  store <1 x float> %tmp2, <1 x float> *%a
  ret void
}
Into:
_foo:
        lfs f0, 0(r3)
        fadds f0, f0, f0
        stfs f0, 0(r3)
        blr
llvm-svn: 24416 
							
						 
						
							2005-11-19 00:36:38 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								45ca1c0194 
								
							 
						 
						
							
							
								
								Allow targets to custom legalize leaf nodes like GlobalAddress.  
							
							 
							
							... 
							
							
							
							llvm-svn: 24387 
							
						 
						
							2005-11-17 06:41:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4ff65ec745 
								
							 
						 
						
							
							
								
								Teach legalize about targetglobaladdress  
							
							 
							
							... 
							
							
							
							llvm-svn: 24385 
							
						 
						
							2005-11-17 05:52:24 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								01aa56397d 
								
							 
						 
						
							
							
								
								continued readcyclecounter support  
							
							 
							
							... 
							
							
							
							llvm-svn: 24300 
							
						 
						
							2005-11-11 16:47:30 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bf4f233214 
								
							 
						 
						
							
							
								
								Switch the allnodes list from a vector of pointers to an ilist of nodes.This eliminates the vector, allows constant time removal of a node froma graph, and makes iteration over the all nodes list stable when adding  
							
							 
							
							... 
							
							
							
							nodes to the graph.
llvm-svn: 24263 
							
						 
						
							2005-11-09 23:47:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								af3aefa10e 
								
							 
						 
						
							
							
								
								Handle the trivial (but common) two-op case more efficiently  
							
							 
							
							... 
							
							
							
							llvm-svn: 24259 
							
						 
						
							2005-11-09 18:48:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c4d6050db6 
								
							 
						 
						
							
							
								
								Allocate the right amount of memory for this vector up front.  
							
							 
							
							... 
							
							
							
							llvm-svn: 24252 
							
						 
						
							2005-11-08 23:32:44 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								d8f2a1a0f3 
								
							 
						 
						
							
							
								
								Allow custom lowered FP_TO_SINT ops in the check for whether a larger  
							
							 
							
							... 
							
							
							
							FP_TO_SINT is preferred to a larger FP_TO_UINT.  This seems to be begging
for a TLI.isOperationCustom() helper function.
llvm-svn: 23992 
							
						 
						
							2005-10-25 23:47:25 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								5172ce641e 
								
							 
						 
						
							
							
								
								Teach Legalize how to do something with EXTRACT_ELEMENT when the type of  
							
							 
							
							... 
							
							
							
							the pair of elements is a legal type.
llvm-svn: 23804 
							
						 
						
							2005-10-19 00:06:56 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								bd5f41a6a6 
								
							 
						 
						
							
							
								
								Legalize BUILD_PAIR appropriately for upcoming 64 bit PowerPC work.  
							
							 
							
							... 
							
							
							
							llvm-svn: 23776 
							
						 
						
							2005-10-18 00:27:41 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b986f471be 
								
							 
						 
						
							
							
								
								Use getExtLoad here instead of getNode, as extloads produce two values.  This  
							
							 
							
							... 
							
							
							
							fixes a legalize failure on SPASS for itanium.
llvm-svn: 23747 
							
						 
						
							2005-10-15 20:24:07 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								d59e5a7abb 
								
							 
						 
						
							
							
								
								Relax the checking on zextload generation a bit, since as sabre pointed out  
							
							 
							
							... 
							
							
							
							you could be AND'ing with the result of a shift that shifts out all the
bits you care about, in addition to a constant.
Also, move over an add/sub_parts fold from legalize to the dag combiner,
where it works for things other than constants.  Woot!
llvm-svn: 23720 
							
						 
						
							2005-10-14 01:12:21 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								258521d7ea 
								
							 
						 
						
							
							
								
								When ExpandOp'ing a [SZ]EXTLOAD, make sure to remember that the chain  
							
							 
							
							... 
							
							
							
							is also legal.  Add support for ExpandOp'ing raw EXTLOADs too.
llvm-svn: 23716 
							
						 
						
							2005-10-13 21:44:47 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d23f4b7411 
								
							 
						 
						
							
							
								
								Implement PromoteOp for *EXTLOAD, allowing MallocBench/gs to Legalize  
							
							 
							
							... 
							
							
							
							llvm-svn: 23715 
							
						 
						
							2005-10-13 20:07:41 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								c3a89c5259 
								
							 
						 
						
							
							
								
								Add support to Legalize for expanding i64 sextload/zextload into hi and lo  
							
							 
							
							... 
							
							
							
							parts. This should fix the crafty and signed long long unit test failure
on x86 last night.
llvm-svn: 23711 
							
						 
						
							2005-10-13 17:15:37 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								02b23c6065 
								
							 
						 
						
							
							
								
								Move some Legalize functionality over to the DAGCombiner where it belongs.  
							
							 
							
							... 
							
							
							
							Kill some dead code.
llvm-svn: 23706 
							
						 
						
							2005-10-13 03:11:28 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7bf8d06f02 
								
							 
						 
						
							
							
								
								silence a bogus GCC warning  
							
							 
							
							... 
							
							
							
							llvm-svn: 23646 
							
						 
						
							2005-10-06 17:39:10 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4bbbb9eed7 
								
							 
						 
						
							
							
								
								Make the legalizer completely non-recursive  
							
							 
							
							... 
							
							
							
							llvm-svn: 23642 
							
						 
						
							2005-10-06 01:20:27 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								f8221c5e2c 
								
							 
						 
						
							
							
								
								Remove some bad code from Legalize  
							
							 
							
							... 
							
							
							
							llvm-svn: 23640 
							
						 
						
							2005-10-05 21:44:10 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								5da6908d65 
								
							 
						 
						
							
							
								
								Fix some faulty logic in the libcall inserter.  
							
							 
							
							... 
							
							
							
							Since calls return more than one value, don't bail if one of their uses
happens to be a node that's not an MVT::Other when following the chain
from CALLSEQ_START to CALLSEQ_END.
Once we've found a CALLSEQ_START, we can just return; there's no need to
tail-recurse further up the graph.
Most importantly, just because something only has one use doesn't mean we
should use it's one use to follow from start to end.  This faulty logic
caused us to follow a chain of one-use FP operations back to a much earlier
call, putting a cycle in the graph from a later start to an earlier end.
This is a better fix that reverting to the workaround committed earlier
today.
llvm-svn: 23620 
							
						 
						
							2005-10-04 02:10:55 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								54fb5002e5 
								
							 
						 
						
							
							
								
								Add back a workaround that fixes some breakages from chris's last change.  
							
							 
							
							... 
							
							
							
							Neither of us have yet figured out why this code is necessary, but stuff
breaks if its not there.  Still tracking this down...
llvm-svn: 23617 
							
						 
						
							2005-10-04 00:37:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9cfccfb517 
								
							 
						 
						
							
							
								
								Fix a problem where the legalizer would run out of stack space on extremely  
							
							 
							
							... 
							
							
							
							large basic blocks because it was purely recursive.  This switches it to an
iterative/recursive hybrid.
llvm-svn: 23596 
							
						 
						
							2005-10-02 17:49:46 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5b2be1f890 
								
							 
						 
						
							
							
								
								Fix two bugs in my patch earlier today that broke int->fp conversion on X86.  
							
							 
							
							... 
							
							
							
							llvm-svn: 23522 
							
						 
						
							2005-09-29 06:44:39 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								6f3b577ee6 
								
							 
						 
						
							
							
								
								Add FP versions of the binary operators, keeping the int and fp worlds seperate.  
							
							 
							
							... 
							
							
							
							Though I have done extensive testing, it is possible that this will break
things in configs I can't test.  Please let me know if this causes a problem
and I'll fix it ASAP.
llvm-svn: 23504 
							
						 
						
							2005-09-28 22:28:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2d454bf5be 
								
							 
						 
						
							
							
								
								Allow targets to say they don't support truncstore i1 (which includes a mask  
							
							 
							
							... 
							
							
							
							when storing to an 8-bit memory location), as most don't.
llvm-svn: 23303 
							
						 
						
							2005-09-10 00:20:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1a570f1fe4 
								
							 
						 
						
							
							
								
								Clean up some code from the last checkin  
							
							 
							
							... 
							
							
							
							llvm-svn: 23229 
							
						 
						
							2005-09-02 20:32:45 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								630226697f 
								
							 
						 
						
							
							
								
								Fix a bug in legalize where it would emit two calls to libcalls that return  
							
							 
							
							... 
							
							
							
							i64 values on targets that need that expanded to 32-bit registers.  This fixes
PowerPC/2005-09-02-LegalizeDuplicatesCalls.ll and speeds up 189.lucas from
taking 122.72s to 81.96s on my desktop.
llvm-svn: 23228 
							
						 
						
							2005-09-02 20:26:58 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d9af1aab51 
								
							 
						 
						
							
							
								
								Make sure to legalize assert[zs]ext's operand correctly  
							
							 
							
							... 
							
							
							
							llvm-svn: 23208 
							
						 
						
							2005-09-02 01:15:01 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7753f175e6 
								
							 
						 
						
							
							
								
								legalize ANY_EXTEND appropriately  
							
							 
							
							... 
							
							
							
							llvm-svn: 23204 
							
						 
						
							2005-09-02 00:18:10 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8a1a5f2818 
								
							 
						 
						
							
							
								
								Allow targets to custom expand shifts that are too large for their registers  
							
							 
							
							... 
							
							
							
							llvm-svn: 23173 
							
						 
						
							2005-08-31 19:01:53 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								61d21b1f3c 
								
							 
						 
						
							
							
								
								Fix FreeBench/fourinarow with the dag isel, by not adding a bogus result  
							
							 
							
							... 
							
							
							
							to SHIFT_PARTS nodes
llvm-svn: 23151 
							
						 
						
							2005-08-30 17:21:17 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9a4ad487f0 
								
							 
						 
						
							
							
								
								Fix a miscompile of PtrDist/bc.  Sign extending bools is not the right thing,  
							
							 
							
							... 
							
							
							
							at least tends to expose problems elsewhere.
llvm-svn: 23149 
							
						 
						
							2005-08-30 16:56:19 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								43144a2fe0 
								
							 
						 
						
							
							
								
								Add support for AssertSext and AssertZext, folding other extensions with  
							
							 
							
							... 
							
							
							
							them.  This allows for elminination of redundant extends in the entry
blocks of functions on PowerPC.
Add support for i32 x i32 -> i64 multiplies, by recognizing when the inputs
to ISD::MUL in ExpandOp are actually just extended i32 values and not real
i64 values.  this allows us to codegen
int mulhs(int a, int b) { return ((long long)a * b) >> 32; }
as:
_mulhs:
        mulhw r3, r4, r3
        blr
instead of:
_mulhs:
        mulhwu r2, r4, r3
        srawi r5, r3, 31
        mullw r5, r4, r5
        add r2, r2, r5
        srawi r4, r4, 31
        mullw r3, r4, r3
        add r3, r2, r3
        blr
with a similar improvement on x86.
llvm-svn: 23147 
							
						 
						
							2005-08-30 02:44:00 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								835cbb364d 
								
							 
						 
						
							
							
								
								Some of us cared about the the promote path  
							
							 
							
							... 
							
							
							
							llvm-svn: 23130 
							
						 
						
							2005-08-29 20:46:51 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								dcde1b2b6a 
								
							 
						 
						
							
							
								
								Fix an infinite loop on x86  
							
							 
							
							... 
							
							
							
							llvm-svn: 23129 
							
						 
						
							2005-08-29 17:30:00 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								56ca46ee04 
								
							 
						 
						
							
							
								
								Nate noticed that Andrew never did this.  This fixes PR600  
							
							 
							
							... 
							
							
							
							llvm-svn: 23110 
							
						 
						
							2005-08-26 22:50:40 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c30405e0ee 
								
							 
						 
						
							
							
								
								Change ConstantPoolSDNode to actually hold the Constant itself instead of  
							
							 
							
							... 
							
							
							
							putting it into the constant pool.  This allows the isel machinery to
create constants that it will end up deciding are not needed, without them
ending up in the resultant function constant pool.
llvm-svn: 23081 
							
						 
						
							2005-08-26 17:15:30 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c6d481db7a 
								
							 
						 
						
							
							
								
								the 5th operand is the 4th number  
							
							 
							
							... 
							
							
							
							llvm-svn: 23074 
							
						 
						
							2005-08-26 00:43:46 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5f573416cd 
								
							 
						 
						
							
							
								
								Add support for targets that want to custom expand select_cc in some cases.  
							
							 
							
							... 
							
							
							
							llvm-svn: 23071 
							
						 
						
							2005-08-26 00:23:59 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								dff50cadaa 
								
							 
						 
						
							
							
								
								Allow LowerOperation to return a null SDOperand in case it wants to lower  
							
							 
							
							... 
							
							
							
							some things given to it, but not all.
llvm-svn: 23070 
							
						 
						
							2005-08-26 00:14:16 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f12eb4d676 
								
							 
						 
						
							
							
								
								Start using isOperationLegal and isTypeLegal to simplify the code  
							
							 
							
							... 
							
							
							
							llvm-svn: 23012 
							
						 
						
							2005-08-24 16:35:28 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								987121a61a 
								
							 
						 
						
							
							
								
								Teach Legalize how to turn setcc into select_cc  
							
							 
							
							... 
							
							
							
							llvm-svn: 22977 
							
						 
						
							2005-08-23 04:29:48 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								539c3fa863 
								
							 
						 
						
							
							
								
								When legalizing brcond ->brcc or select -> selectcc, make sure to truncate  
							
							 
							
							... 
							
							
							
							the old condition to a one bit value.  The incoming value must have been
promoted, and the top bits are undefined.  This causes us to generate:
_test:
        rlwinm r2, r3, 0, 31, 31
        li r3, 17
        cmpwi cr0, r2, 0
        bne .LBB_test_2 ;
.LBB_test_1:    ;
        li r3, 1
.LBB_test_2:    ;
        blr
instead of:
_test:
        rlwinm r2, r3, 0, 31, 31
        li r2, 17
        cmpwi cr0, r3, 0
        bne .LBB_test_2 ;
.LBB_test_1:    ;
        li r2, 1
.LBB_test_2:    ;
        or r3, r2, r2
        blr
for:
int %test(bool %c) {
        %retval = select bool %c, int 17, int 1
        ret int %retval
}
llvm-svn: 22947 
							
						 
						
							2005-08-21 18:03:09 +00:00  
						
					 
				
					
						
							
							
								 
								Jim Laskey
							
						 
						
							 
							
							
							
							
								
							
							
								b74c666186 
								
							 
						 
						
							
							
								
								Culling out use of unions for converting FP to bits and vice versa.  
							
							 
							
							... 
							
							
							
							llvm-svn: 22838 
							
						 
						
							2005-08-17 19:34:49 +00:00  
						
					 
				
					
						
							
							
								 
								Jim Laskey
							
						 
						
							 
							
							
							
							
								
							
							
								686d6a1cb2 
								
							 
						 
						
							
							
								
								Switched to using BitsToDouble for int_to_float to avoid aliasing problem.  
							
							 
							
							... 
							
							
							
							llvm-svn: 22831 
							
						 
						
							2005-08-17 17:42:52 +00:00  
						
					 
				
					
						
							
							
								 
								Jim Laskey
							
						 
						
							 
							
							
							
							
								
							
							
								898ba557d0 
								
							 
						 
						
							
							
								
								Change hex float constants for the sake of VC++.  
							
							 
							
							... 
							
							
							
							llvm-svn: 22828 
							
						 
						
							2005-08-17 09:44:59 +00:00  
						
					 
				
					
						
							
							
								 
								Jim Laskey
							
						 
						
							 
							
							
							
							
								
							
							
								f2516a9180 
								
							 
						 
						
							
							
								
								Added generic code expansion for [signed|unsigned] i32 to [f32|f64] casts in the  
							
							 
							
							... 
							
							
							
							legalizer.  PowerPC now uses this expansion instead of ISel version.
Example:
// signed integer to double conversion
double f1(signed x) {
  return (double)x;
}
// unsigned integer to double conversion
double f2(unsigned x) {
  return (double)x;
}
// signed integer to float conversion
float f3(signed x) {
  return (float)x;
}
// unsigned integer to float conversion
float f4(unsigned x) {
  return (float)x;
}
Byte Code:
internal fastcc double %_Z2f1i(int %x) {
entry:
        %tmp.1 = cast int %x to double          ; <double> [#uses=1]
        ret double %tmp.1
}
internal fastcc double %_Z2f2j(uint %x) {
entry:
        %tmp.1 = cast uint %x to double         ; <double> [#uses=1]
        ret double %tmp.1
}
internal fastcc float %_Z2f3i(int %x) {
entry:
        %tmp.1 = cast int %x to float           ; <float> [#uses=1]
        ret float %tmp.1
}
internal fastcc float %_Z2f4j(uint %x) {
entry:
        %tmp.1 = cast uint %x to float          ; <float> [#uses=1]
        ret float %tmp.1
}
internal fastcc double %_Z2g1i(int %x) {
entry:
        %buffer = alloca [2 x uint]             ; <[2 x uint]*> [#uses=3]
        %tmp.0 = getelementptr [2 x uint]* %buffer, int 0, int 0                ; <uint*> [#uses=1]
        store uint 1127219200, uint* %tmp.0
        %tmp.2 = cast int %x to uint            ; <uint> [#uses=1]
        %tmp.3 = xor uint %tmp.2, 2147483648            ; <uint> [#uses=1]
        %tmp.5 = getelementptr [2 x uint]* %buffer, int 0, int 1                ; <uint*> [#uses=1]
        store uint %tmp.3, uint* %tmp.5
        %tmp.9 = cast [2 x uint]* %buffer to double*            ; <double*> [#uses=1]
        %tmp.10 = load double* %tmp.9           ; <double> [#uses=1]
        %tmp.13 = load double* cast (long* %signed_bias to double*)             ; <double> [#uses=1]
        %tmp.14 = sub double %tmp.10, %tmp.13           ; <double> [#uses=1]
        ret double %tmp.14
}
internal fastcc double %_Z2g2j(uint %x) {
entry:
        %buffer = alloca [2 x uint]             ; <[2 x uint]*> [#uses=3]
        %tmp.0 = getelementptr [2 x uint]* %buffer, int 0, int 0                ; <uint*> [#uses=1]
        store uint 1127219200, uint* %tmp.0
        %tmp.1 = getelementptr [2 x uint]* %buffer, int 0, int 1                ; <uint*> [#uses=1]
        store uint %x, uint* %tmp.1
        %tmp.4 = cast [2 x uint]* %buffer to double*            ; <double*> [#uses=1]
        %tmp.5 = load double* %tmp.4            ; <double> [#uses=1]
        %tmp.8 = load double* cast (long* %unsigned_bias to double*)            ; <double> [#uses=1]
        %tmp.9 = sub double %tmp.5, %tmp.8              ; <double> [#uses=1]
        ret double %tmp.9
}
internal fastcc float %_Z2g3i(int %x) {
entry:
        %buffer = alloca [2 x uint]             ; <[2 x uint]*> [#uses=3]
        %tmp.0 = getelementptr [2 x uint]* %buffer, int 0, int 0                ; <uint*> [#uses=1]
        store uint 1127219200, uint* %tmp.0
        %tmp.2 = cast int %x to uint            ; <uint> [#uses=1]
        %tmp.3 = xor uint %tmp.2, 2147483648            ; <uint> [#uses=1]
        %tmp.5 = getelementptr [2 x uint]* %buffer, int 0, int 1                ; <uint*> [#uses=1]
        store uint %tmp.3, uint* %tmp.5
        %tmp.9 = cast [2 x uint]* %buffer to double*            ; <double*> [#uses=1]
        %tmp.10 = load double* %tmp.9           ; <double> [#uses=1]
        %tmp.13 = load double* cast (long* %signed_bias to double*)             ; <double> [#uses=1]
        %tmp.14 = sub double %tmp.10, %tmp.13           ; <double> [#uses=1]
        %tmp.16 = cast double %tmp.14 to float          ; <float> [#uses=1]
        ret float %tmp.16
}
internal fastcc float %_Z2g4j(uint %x) {
entry:
        %buffer = alloca [2 x uint]             ; <[2 x uint]*> [#uses=3]
        %tmp.0 = getelementptr [2 x uint]* %buffer, int 0, int 0                ; <uint*> [#uses=1]
        store uint 1127219200, uint* %tmp.0
        %tmp.1 = getelementptr [2 x uint]* %buffer, int 0, int 1                ; <uint*> [#uses=1]
        store uint %x, uint* %tmp.1
        %tmp.4 = cast [2 x uint]* %buffer to double*            ; <double*> [#uses=1]
        %tmp.5 = load double* %tmp.4            ; <double> [#uses=1]
        %tmp.8 = load double* cast (long* %unsigned_bias to double*)            ; <double> [#uses=1]
        %tmp.9 = sub double %tmp.5, %tmp.8              ; <double> [#uses=1]
        %tmp.11 = cast double %tmp.9 to float           ; <float> [#uses=1]
        ret float %tmp.11
}
PowerPC Code:
        .machine ppc970
        .const
        .align  2
.CPIl1__Z2f1i_0:                                        ; float 0x4330000080000000
        .long   1501560836      ; float 4.5036e+15
        .text
        .align  2
        .globl  l1__Z2f1i
l1__Z2f1i:
.LBBl1__Z2f1i_0:        ; entry
        xoris r2, r3, 32768
        stw r2, -4(r1)
        lis r2, 17200
        stw r2, -8(r1)
        lfd f0, -8(r1)
        lis r2, ha16(.CPIl1__Z2f1i_0)
        lfs f1, lo16(.CPIl1__Z2f1i_0)(r2)
        fsub f1, f0, f1
        blr
        .const
        .align  2
.CPIl2__Z2f2j_0:                                        ; float 0x4330000000000000
        .long   1501560832      ; float 4.5036e+15
        .text
        .align  2
        .globl  l2__Z2f2j
l2__Z2f2j:
.LBBl2__Z2f2j_0:        ; entry
        stw r3, -4(r1)
        lis r2, 17200
        stw r2, -8(r1)
        lfd f0, -8(r1)
        lis r2, ha16(.CPIl2__Z2f2j_0)
        lfs f1, lo16(.CPIl2__Z2f2j_0)(r2)
        fsub f1, f0, f1
        blr
        .const
        .align  2
.CPIl3__Z2f3i_0:                                        ; float 0x4330000080000000
        .long   1501560836      ; float 4.5036e+15
        .text
        .align  2
        .globl  l3__Z2f3i
l3__Z2f3i:
.LBBl3__Z2f3i_0:        ; entry
        xoris r2, r3, 32768
        stw r2, -4(r1)
        lis r2, 17200
        stw r2, -8(r1)
        lfd f0, -8(r1)
        lis r2, ha16(.CPIl3__Z2f3i_0)
        lfs f1, lo16(.CPIl3__Z2f3i_0)(r2)
        fsub f0, f0, f1
        frsp f1, f0
        blr
        .const
        .align  2
.CPIl4__Z2f4j_0:                                        ; float 0x4330000000000000
        .long   1501560832      ; float 4.5036e+15
        .text
        .align  2
        .globl  l4__Z2f4j
l4__Z2f4j:
.LBBl4__Z2f4j_0:        ; entry
        stw r3, -4(r1)
        lis r2, 17200
        stw r2, -8(r1)
        lfd f0, -8(r1)
        lis r2, ha16(.CPIl4__Z2f4j_0)
        lfs f1, lo16(.CPIl4__Z2f4j_0)(r2)
        fsub f0, f0, f1
        frsp f1, f0
        blr
llvm-svn: 22814 
							
						 
						
							2005-08-17 00:39:29 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								33182325f5 
								
							 
						 
						
							
							
								
								Eliminate the RegSDNode class, which 3 nodes (CopyFromReg/CopyToReg/ImplicitDef)  
							
							 
							
							... 
							
							
							
							used to tack a register number onto the node.
Instead of doing this, make a new node, RegisterSDNode, which is a leaf
containing a register number.  These three operations just become normal
DAG nodes now, instead of requiring special handling.
Note that with this change, it is no longer correct to make illegal
CopyFromReg/CopyToReg nodes.  The legalizer will not touch them, and this
is bad, so don't do it. :)
llvm-svn: 22806 
							
						 
						
							2005-08-16 21:55:35 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								371e49515d 
								
							 
						 
						
							
							
								
								Implement BR_CC and BRTWOWAY_CC.  This allows the removal of a rather nasty  
							
							 
							
							... 
							
							
							
							fixme from the PowerPC backend.  Emit slightly better code for legalizing
select_cc.
llvm-svn: 22805 
							
						 
						
							2005-08-16 19:49:35 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1973278b38 
								
							 
						 
						
							
							
								
								Add some methods for dag->dag isel.  
							
							 
							
							... 
							
							
							
							Split RemoveNodeFromCSEMaps out of DeleteNodesIfDead to do it.
llvm-svn: 22801 
							
						 
						
							2005-08-16 18:17:10 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								d5e739dcc2 
								
							 
						 
						
							
							
								
								Fix last night's PPC32 regressions by  
							
							 
							
							... 
							
							
							
							1. Not selecting the false value of a select_cc in the false arm, which
   isn't legal for nested selects.
2. Actually returning the node we created and Legalized in the FP_TO_UINT
   Expander.
llvm-svn: 22789 
							
						 
						
							2005-08-14 18:38:32 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								36853ee1fd 
								
							 
						 
						
							
							
								
								Teach the legalizer how to legalize FP_TO_UINT.  
							
							 
							
							... 
							
							
							
							Teach the legalizer to promote FP_TO_UINT to FP_TO_SINT if the wider
  FP_TO_UINT is also illegal.  This allows us on PPC to codegen
  unsigned short foo(float a) { return a; }
as:
_foo:
.LBB_foo_0:     ; entry
        fctiwz f0, f1
        stfd f0, -8(r1)
        lwz r2, -4(r1)
        rlwinm r3, r2, 0, 16, 31
        blr
instead of:
_foo:
.LBB_foo_0:     ; entry
        fctiwz f0, f1
        stfd f0, -8(r1)
        lwz r2, -4(r1)
        lis r3, ha16(.CPI_foo_0)
        lfs f0, lo16(.CPI_foo_0)(r3)
        fcmpu cr0, f1, f0
        blt .LBB_foo_2  ; entry
.LBB_foo_1:     ; entry
        fsubs f0, f1, f0
        fctiwz f0, f0
        stfd f0, -16(r1)
        lwz r2, -12(r1)
        xoris r2, r2, 32768
.LBB_foo_2:     ; entry
        rlwinm r3, r2, 0, 16, 31
        blr
llvm-svn: 22785 
							
						 
						
							2005-08-14 01:20:53 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								180b08897f 
								
							 
						 
						
							
							
								
								Some SELECT_CC cleanups:  
							
							 
							
							... 
							
							
							
							1. move assertions for node creation to getNode()
2. legalize the values returned in ExpandOp immediately
3. Move select_cc optimizations from SELECT's getNode() to SELECT_CC's,
   allowing them to be cleaned up significantly.
This paves the way to pick up additional optimizations on SELECT_CC, such
as sum-of-absolute-differences.
llvm-svn: 22757 
							
						 
						
							2005-08-11 01:12:20 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								e5b86d7442 
								
							 
						 
						
							
							
								
								Add new node, SELECT_CC.  This node is for targets that don't natively  
							
							 
							
							... 
							
							
							
							implement SELECT.
llvm-svn: 22755 
							
						 
						
							2005-08-10 20:51:12 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d47675ed24 
								
							 
						 
						
							
							
								
								Eliminate the SetCCSDNode in favor of a CondCodeSDNode class.  This pulls the  
							
							 
							
							... 
							
							
							
							CC out of the SetCC operation, making SETCC a standard ternary operation and
CC's a standard DAG leaf.  This will make it possible for other node to use
CC's as operands in the future...
llvm-svn: 22728 
							
						 
						
							2005-08-09 20:20:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								96ad31321a 
								
							 
						 
						
							
							
								
								Change FindEarliestCallSeqEnd (used by libcall insertion) to use a set to  
							
							 
							
							... 
							
							
							
							avoid revisiting nodes more than once.  This eliminates a source of
potentially exponential behavior.  For a small function in 191.fma3d
(hexah_stress_divergence_), this speeds up isel from taking > 20mins to
taking 0.07s.
llvm-svn: 22680 
							
						 
						
							2005-08-05 18:10:27 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								cabdc34563 
								
							 
						 
						
							
							
								
								Fix a latent bug in the libcall inserter that was exposed by Nate's patch  
							
							 
							
							... 
							
							
							
							yesterday.  This fixes whetstone and a bunch of programs in the External tests.
llvm-svn: 22678 
							
						 
						
							2005-08-05 16:23:57 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								77558da546 
								
							 
						 
						
							
							
								
								Fix a fixme in LegalizeDAG  
							
							 
							
							... 
							
							
							
							llvm-svn: 22661 
							
						 
						
							2005-08-04 21:43:28 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8191442548 
								
							 
						 
						
							
							
								
								Fix PR611, codegen'ing SREM of FP operands to fmod or fmodf instead of  
							
							 
							
							... 
							
							
							
							the sequence used for integer ops
llvm-svn: 22629 
							
						 
						
							2005-08-03 20:31:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4398daf069 
								
							 
						 
						
							
							
								
								Fix casts from long to sbyte on ppc  
							
							 
							
							... 
							
							
							
							llvm-svn: 22570 
							
						 
						
							2005-08-01 18:16:37 +00:00  
						
					 
				
					
						
							
							
								 
								Jeff Cohen
							
						 
						
							 
							
							
							
							
								
							
							
								546fd5944e 
								
							 
						 
						
							
							
								
								Keep tabs and trailing spaces out.  
							
							 
							
							... 
							
							
							
							llvm-svn: 22565 
							
						 
						
							2005-07-30 18:33:25 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								941d84a34d 
								
							 
						 
						
							
							
								
								fix float->long conversions on x86  
							
							 
							
							... 
							
							
							
							llvm-svn: 22563 
							
						 
						
							2005-07-30 01:40:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f59b2daddb 
								
							 
						 
						
							
							
								
								Allow targets to have custom expanders for FP_TO_*INT conversions where  
							
							 
							
							... 
							
							
							
							both the src and dest values are legal
llvm-svn: 22555 
							
						 
						
							2005-07-30 00:04:12 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fe68d75aad 
								
							 
						 
						
							
							
								
								Allow targets to define custom expanders for FP_TO_*INT  
							
							 
							
							... 
							
							
							
							llvm-svn: 22548 
							
						 
						
							2005-07-29 00:33:32 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								44fe26ff07 
								
							 
						 
						
							
							
								
								allow a target to request that unknown FP_TO_*INT conversion be promoted to  
							
							 
							
							... 
							
							
							
							a larger integer destination.
llvm-svn: 22547 
							
						 
						
							2005-07-29 00:11:56 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f99f8f9081 
								
							 
						 
						
							
							
								
								instead of having all conversions be handled by one case value, and then have  
							
							 
							
							... 
							
							
							
							subcases inside, break things out earlier.
llvm-svn: 22546 
							
						 
						
							2005-07-28 23:31:12 +00:00  
						
					 
				
					
						
							
							
								 
								Jeff Cohen
							
						 
						
							 
							
							
							
							
								
							
							
								5f4ef3c5a8 
								
							 
						 
						
							
							
								
								Eliminate all remaining tabs and trailing spaces.  
							
							 
							
							... 
							
							
							
							llvm-svn: 22523 
							
						 
						
							2005-07-27 06:12:32 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b35912e421 
								
							 
						 
						
							
							
								
								The assertion was wrong: the code only worked for i64.  While we're at it,  
							
							 
							
							... 
							
							
							
							expand the code to work for all integer datatypes.  This should unbreak
alpha.
llvm-svn: 22464 
							
						 
						
							2005-07-18 04:31:14 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								7e74c834c1 
								
							 
						 
						
							
							
								
								Teach the legalizer how to promote SINT_TO_FP to a wider SINT_TO_FP that  
							
							 
							
							... 
							
							
							
							the target natively supports.  This eliminates some special-case code from
the x86 backend and generates better code as well.
For an i8 to f64 conversion, before & after:
_x87 before:
        subl $2, %esp
        movb 6(%esp), %al
        movsbw %al, %ax
        movw %ax, (%esp)
        filds (%esp)
        addl $2, %esp
        ret
_x87 after:
        subl $2, %esp
        movsbw 6(%esp), %ax
        movw %ax, (%esp)
        filds (%esp)
        addl $2, %esp
        ret
_sse before:
        subl $12, %esp
        movb 16(%esp), %al
        movsbl %al, %eax
        cvtsi2sd %eax, %xmm0
        addl $12, %esp
        ret
_sse after:
        subl $12, %esp
        movsbl 16(%esp), %eax
        cvtsi2sd %eax, %xmm0
        addl $12, %esp
        ret
llvm-svn: 22452 
							
						 
						
							2005-07-16 02:02:34 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								e3e847bfd7 
								
							 
						 
						
							
							
								
								Break the code for expanding UINT_TO_FP operations out into its own  
							
							 
							
							... 
							
							
							
							SelectionDAGLegalize::ExpandLegalUINT_TO_FP method.
Add a new method, PromoteLegalUINT_TO_FP, which allows targets to request
that UINT_TO_FP operations be promoted to a larger input type.  This is
useful for targets that have some UINT_TO_FP or SINT_TO_FP operations but
not all of them (like X86).
The same should be done with SINT_TO_FP, but this patch does not do that
yet.
llvm-svn: 22447 
							
						 
						
							2005-07-16 00:19:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f9ddfef872 
								
							 
						 
						
							
							
								
								Fix Alpha/2005-07-12-TwoMallocCalls.ll and PR593.  
							
							 
							
							... 
							
							
							
							It is not safe to call LegalizeOp on something that has already been legalized.
Instead, just force another iteration of legalization.
This could affect all platforms but X86, as this codepath is dynamically
dead on X86 (ISD::MEMSET and friends are legal).
llvm-svn: 22419 
							
						 
						
							2005-07-13 02:00:04 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ba08a336f0 
								
							 
						 
						
							
							
								
								Fix test/Regression/CodeGen/Generic/2005-07-12-memcpy-i64-length.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 22417 
							
						 
						
							2005-07-13 01:42:45 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								de0a4b1987 
								
							 
						 
						
							
							
								
								Change *EXTLOAD to use an VTSDNode operand instead of being an MVTSDNode.  
							
							 
							
							... 
							
							
							
							This is the last MVTSDNode.
This allows us to eliminate a bunch of special case code for handling
MVTSDNodes.
llvm-svn: 22367 
							
						 
						
							2005-07-10 01:55:33 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								36db1ed06f 
								
							 
						 
						
							
							
								
								Change TRUNCSTORE to use a VTSDNode operand instead of being an MVTSTDNode  
							
							 
							
							... 
							
							
							
							llvm-svn: 22366 
							
						 
						
							2005-07-10 00:29:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0b6ba90a72 
								
							 
						 
						
							
							
								
								Introduce a new VTSDNode class with the ultimate goal of eliminating the  
							
							 
							
							... 
							
							
							
							MVTSDNode class.  This class is used to provide an operand to operators
that require an extra type.  We start by converting FP_ROUND_INREG and
SIGN_EXTEND_INREG over to using it.
llvm-svn: 22364 
							
						 
						
							2005-07-10 00:07:11 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								80fe411662 
								
							 
						 
						
							
							
								
								2 fixes:  
							
							 
							
							... 
							
							
							
							1: Legalize operand in UINT_TO_FP expanision
2: SRA x, const i8 was not promoting the constant to shift amount type.
llvm-svn: 22337 
							
						 
						
							2005-07-05 19:52:39 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								be3a74ca3e 
								
							 
						 
						
							
							
								
								I really didn't think this was necessary.  But, Legalize wasn't running again  
							
							 
							
							... 
							
							
							
							and legalizing the extload.  Strange.  Should fix most alpha regressions.
llvm-svn: 22329 
							
						 
						
							2005-07-02 20:58:53 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								0a370f4de5 
								
							 
						 
						
							
							
								
								oops  
							
							 
							
							... 
							
							
							
							llvm-svn: 22320 
							
						 
						
							2005-06-30 19:32:57 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								b5597e38f6 
								
							 
						 
						
							
							
								
								FP EXTLOAD is not support on all archs, expand to LOAD and FP_EXTEND  
							
							 
							
							... 
							
							
							
							llvm-svn: 22319 
							
						 
						
							2005-06-30 19:22:37 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								d74877a46d 
								
							 
						 
						
							
							
								
								Adapt the code for handling uint -> fp conversion for the 32 bit case to  
							
							 
							
							... 
							
							
							
							handling it in the 64 bit case.  The two code paths should probably be merged.
llvm-svn: 22302 
							
						 
						
							2005-06-27 23:28:32 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3268f244e6 
								
							 
						 
						
							
							
								
								allow token chain at start or end of node  
							
							 
							
							... 
							
							
							
							llvm-svn: 22020 
							
						 
						
							2005-05-14 08:34:53 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								865359958b 
								
							 
						 
						
							
							
								
								remove special case hacks for readport/readio from the binary operator  
							
							 
							
							... 
							
							
							
							codepath
llvm-svn: 22019 
							
						 
						
							2005-05-14 07:45:46 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								96c262e24b 
								
							 
						 
						
							
							
								
								Eliminate special purpose hacks for dynamic_stack_alloc.  
							
							 
							
							... 
							
							
							
							llvm-svn: 22015 
							
						 
						
							2005-05-14 07:29:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								669e8c2c9c 
								
							 
						 
						
							
							
								
								Use the general mechanism for creating multi-value nodes instead of using  
							
							 
							
							... 
							
							
							
							special case hacks.
llvm-svn: 22014 
							
						 
						
							2005-05-14 07:25:05 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3eb8693279 
								
							 
						 
						
							
							
								
								legalize target-specific operations  
							
							 
							
							... 
							
							
							
							llvm-svn: 22010 
							
						 
						
							2005-05-14 06:34:48 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								29dcc71d83 
								
							 
						 
						
							
							
								
								LowerOperation takes a dag  
							
							 
							
							... 
							
							
							
							llvm-svn: 22004 
							
						 
						
							2005-05-14 05:50:48 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d3cc996a47 
								
							 
						 
						
							
							
								
								Allow targets to have a custom int64->fp expander if desired  
							
							 
							
							... 
							
							
							
							llvm-svn: 22001 
							
						 
						
							2005-05-14 05:33:54 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2e77db6af6 
								
							 
						 
						
							
							
								
								Add an isTailCall flag to LowerCallTo  
							
							 
							
							... 
							
							
							
							llvm-svn: 21958 
							
						 
						
							2005-05-13 18:50:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d0feb64443 
								
							 
						 
						
							
							
								
								Handle TAILCALL node  
							
							 
							
							... 
							
							
							
							llvm-svn: 21957 
							
						 
						
							2005-05-13 18:43:43 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bb1d60de9c 
								
							 
						 
						
							
							
								
								Fix a problem that nate reduced for me.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21923 
							
						 
						
							2005-05-13 05:17:00 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5a14c8a18e 
								
							 
						 
						
							
							
								
								rename variables and functions to match renamed DAG nodes.  Bonus feature:  
							
							 
							
							... 
							
							
							
							I can actually remember which one is which now!
llvm-svn: 21922 
							
						 
						
							2005-05-13 05:09:11 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2a4f7312cd 
								
							 
						 
						
							
							
								
								do not call expandop on the same value more than once.  This fixes  
							
							 
							
							... 
							
							
							
							X86/2004-02-22-Casts.llx
llvm-svn: 21919 
							
						 
						
							2005-05-13 04:45:13 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d34cd28aa7 
								
							 
						 
						
							
							
								
								update comment  
							
							 
							
							... 
							
							
							
							llvm-svn: 21916 
							
						 
						
							2005-05-12 23:24:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2dce703710 
								
							 
						 
						
							
							
								
								rename the ADJCALLSTACKDOWN/ADJCALLSTACKUP nodes to be CALLSEQ_START/BEGIN.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21915 
							
						 
						
							2005-05-12 23:24:06 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								111778e665 
								
							 
						 
						
							
							
								
								Pass calling convention to use into lower call to  
							
							 
							
							... 
							
							
							
							llvm-svn: 21900 
							
						 
						
							2005-05-12 19:56:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0bfd177e89 
								
							 
						 
						
							
							
								
								fix expansion of ct[lt]z nodes  
							
							 
							
							... 
							
							
							
							llvm-svn: 21896 
							
						 
						
							2005-05-12 19:27:51 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								cf5f6b0ccb 
								
							 
						 
						
							
							
								
								Expand 64-bit ctlz/cttz nodes for 32-bit targets  
							
							 
							
							... 
							
							
							
							llvm-svn: 21895 
							
						 
						
							2005-05-12 19:05:01 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								26f0317f46 
								
							 
						 
						
							
							
								
								Fix uint->fp casts on PPC, allowing UnitTests/2005-05-12-Int64ToFP to  
							
							 
							
							... 
							
							
							
							work on it.
llvm-svn: 21894 
							
						 
						
							2005-05-12 18:52:34 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b5a78e0873 
								
							 
						 
						
							
							
								
								Allow something to be legalized multiple times.  This can be used to reduce  
							
							 
							
							... 
							
							
							
							legalization iteration
llvm-svn: 21892 
							
						 
						
							2005-05-12 16:53:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								153587e555 
								
							 
						 
						
							
							
								
								Oops, don't do this after we figure out where to insert the call chains.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21890 
							
						 
						
							2005-05-12 07:00:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8a5ad8468a 
								
							 
						 
						
							
							
								
								Make sure to expand all nodes, avoiding unintentional node duplication.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21889 
							
						 
						
							2005-05-12 06:54:21 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f09c0b435b 
								
							 
						 
						
							
							
								
								add fixme  
							
							 
							
							... 
							
							
							
							llvm-svn: 21887 
							
						 
						
							2005-05-12 06:04:14 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a5bf1030bf 
								
							 
						 
						
							
							
								
								Fix a problem where early legalization can cause token chain problems.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21885 
							
						 
						
							2005-05-12 04:49:08 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8005e91432 
								
							 
						 
						
							
							
								
								Make legalize a bit more efficient, and canonicalize sub X, C -> add X, -C  
							
							 
							
							... 
							
							
							
							llvm-svn: 21882 
							
						 
						
							2005-05-12 00:17:04 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								99fa5bc1fa 
								
							 
						 
						
							
							
								
								Necessary changes to codegen cttz efficiently on PowerPC  
							
							 
							
							... 
							
							
							
							1. Teach LegalizeDAG how to better legalize CTTZ if the target doesn't have
   CTPOP, but does have CTLZ
2. Teach PPC32 how to do sub x, const -> add x, -const for valid consts
3. Teach PPC32 how to do and (xor a, -1) b -> andc b, a
4. Teach PPC32 that ISD::CTLZ -> PPC::CNTLZW
llvm-svn: 21880 
							
						 
						
							2005-05-11 23:43:56 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								06bbeb646f 
								
							 
						 
						
							
							
								
								Fix the last remaining bug preventing us from switching the X86 BE over  
							
							 
							
							... 
							
							
							
							from the simple isel to the pattern isel.  This forces inserted libcalls
to serialize against other function calls, which was breaking
UnitTests/2005-05-12-Int64ToFP.  Hopefully this will fix issues on other
targets as well.
llvm-svn: 21872 
							
						 
						
							2005-05-11 19:02:11 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								56add05671 
								
							 
						 
						
							
							
								
								Make sure to legalize generated ctpop nodes, convert tabs to spaces  
							
							 
							
							... 
							
							
							
							llvm-svn: 21868 
							
						 
						
							2005-05-11 18:35:21 +00:00  
						
					 
				
					
						
							
							
								 
								Duraid Madina
							
						 
						
							 
							
							
							
							
								
							
							
								a1ebbac9c0 
								
							 
						 
						
							
							
								
								expand count-leading/trailing-zeros; the test 2005-05-11-Popcount-ffs-fls.c  
							
							 
							
							... 
							
							
							
							should now pass (the "LLVM" and "REF" results should be identical)
llvm-svn: 21866 
							
						 
						
							2005-05-11 08:45:08 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7247324047 
								
							 
						 
						
							
							
								
								Add some notes for expanding clz/ctz  
							
							 
							
							... 
							
							
							
							llvm-svn: 21862 
							
						 
						
							2005-05-11 05:27:09 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								05309bf58e 
								
							 
						 
						
							
							
								
								Simplify this code, use the proper shift amount  
							
							 
							
							... 
							
							
							
							llvm-svn: 21861 
							
						 
						
							2005-05-11 05:21:31 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3740f39883 
								
							 
						 
						
							
							
								
								Legalize this correctly  
							
							 
							
							... 
							
							
							
							llvm-svn: 21859 
							
						 
						
							2005-05-11 05:09:47 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								55e9cde37c 
								
							 
						 
						
							
							
								
								implement expansion of ctpop nodes, implementing CodeGen/Generic/llvm-ct-intrinsics.ll  
							
							 
							
							... 
							
							
							
							llvm-svn: 21856 
							
						 
						
							2005-05-11 04:51:16 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ba45e6c432 
								
							 
						 
						
							
							
								
								legalize readio/writeio into a load/store if requested  
							
							 
							
							... 
							
							
							
							llvm-svn: 21827 
							
						 
						
							2005-05-09 20:36:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5385db5523 
								
							 
						 
						
							
							
								
								legalize READPORT, WRITEPORT, READIO, WRITEIO, at least in the basic cases  
							
							 
							
							... 
							
							
							
							where they are directly supported by the architecture.  Wrap a bunch of
long lines :(
llvm-svn: 21826 
							
						 
						
							2005-05-09 20:23:03 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								2dbbb3ab84 
								
							 
						 
						
							
							
								
								ctpop lowering in legalize  
							
							 
							
							... 
							
							
							
							llvm-svn: 21697 
							
						 
						
							2005-05-05 15:55:21 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								dd426dd04d 
								
							 
						 
						
							
							
								
								Make promoteOp work for CT*  
							
							 
							
							... 
							
							
							
							Proof?
ubyte %bar(ubyte %x) {
entry:
        %tmp.1 = call ubyte %llvm.ctlz( ubyte %x )
        ret ubyte %tmp.1
}
==>
zapnot $16,1,$0
CTLZ $0,$0
subq $0,56,$0
zapnot $0,1,$0
ret $31,($26),1
llvm-svn: 21691 
							
						 
						
							2005-05-04 19:11:05 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								5e177826fd 
								
							 
						 
						
							
							
								
								Implement count leading zeros (ctlz), count trailing zeros (cttz), and count  
							
							 
							
							... 
							
							
							
							population (ctpop).  Generic lowering is implemented, however only promotion
is implemented for SelectionDAG at the moment.
More coming soon.
llvm-svn: 21676 
							
						 
						
							2005-05-03 17:19:30 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8002640eab 
								
							 
						 
						
							
							
								
								Codegen and legalize sin/cos/llvm.sqrt as FSIN/FCOS/FSQRT calls.  This patch  
							
							 
							
							... 
							
							
							
							was contributed by Morten Ofstad, with some minor tweaks and bug fixes added
by me.
llvm-svn: 21636 
							
						 
						
							2005-04-30 04:43:14 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9d6fa98ec7 
								
							 
						 
						
							
							
								
								Legalize FSQRT, FSIN, FCOS nodes, patch contributed by Morten Ofstad  
							
							 
							
							... 
							
							
							
							llvm-svn: 21606 
							
						 
						
							2005-04-28 21:44:33 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								4a73c2cfdc 
								
							 
						 
						
							
							
								
								Implement Value* tracking for loads and stores in the selection DAG.  This enables one to use alias analysis in the backends.  
							
							 
							
							... 
							
							
							
							(TRUNK)Stores and (EXT|ZEXT|SEXT)Loads have an extra SDOperand which is a SrcValueSDNode which contains the Value*.  Note that if the operation is introduced by the backend, it will still have the operand, but the value* will be null.
llvm-svn: 21599 
							
						 
						
							2005-04-27 20:10:01 +00:00  
						
					 
				
					
						
							
							
								 
								Misha Brukman
							
						 
						
							 
							
							
							
							
								
							
							
								835702a094 
								
							 
						 
						
							
							
								
								Remove trailing whitespace  
							
							 
							
							... 
							
							
							
							llvm-svn: 21420 
							
						 
						
							2005-04-21 22:36:52 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								e69ad5fd12 
								
							 
						 
						
							
							
								
								Implement expansion of unsigned i64 -> FP.  
							
							 
							
							... 
							
							
							
							Note that this probably only works for little endian targets, but is enough
to get siod working :)
llvm-svn: 21280 
							
						 
						
							2005-04-13 05:09:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0efd77eda7 
								
							 
						 
						
							
							
								
								Make expansion of uint->fp cast assert out instead of infinitely recurse.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21275 
							
						 
						
							2005-04-13 03:42:14 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0e852afb4c 
								
							 
						 
						
							
							
								
								Instead of making ZERO_EXTEND_INREG nodes, use the helper method in  
							
							 
							
							... 
							
							
							
							SelectionDAG to do the job with AND.  Don't legalize Z_E_I anymore as
it is gone
llvm-svn: 21266 
							
						 
						
							2005-04-13 02:38:47 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0b73a6d8bc 
								
							 
						 
						
							
							
								
								promote extload i1 -> extload i8  
							
							 
							
							... 
							
							
							
							llvm-svn: 21258 
							
						 
						
							2005-04-12 20:30:10 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								aedcabe8db 
								
							 
						 
						
							
							
								
								Emit comparisons against the sign bit better.  Codegen this:  
							
							 
							
							... 
							
							
							
							bool %test1(long %X) {
        %A = setlt long %X, 0
        ret bool %A
}
like this:
test1:
        cmpl $0, 8(%esp)
        setl %al
        movzbl %al, %eax
        ret
instead of:
test1:
        movl 8(%esp), %ecx
        cmpl $0, %ecx
        setl %al
        movzbw %al, %ax
        cmpl $0, 4(%esp)
        setb %dl
        movzbw %dl, %dx
        cmpl $0, %ecx
        cmove %dx, %ax
        movzbl %al, %eax
        ret
llvm-svn: 21243 
							
						 
						
							2005-04-12 02:19:10 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								71ff44e46c 
								
							 
						 
						
							
							
								
								Emit long comparison against -1 better.  Instead of this (x86):  
							
							 
							
							... 
							
							
							
							test2:
        movl 8(%esp), %eax
        notl %eax
        movl 4(%esp), %ecx
        notl %ecx
        orl %eax, %ecx
        cmpl $0, %ecx
        sete %al
        movzbl %al, %eax
        ret
or this (PPC):
_test2:
        nor r2, r4, r4
        nor r3, r3, r3
        or r2, r2, r3
        cntlzw r2, r2
        srwi r3, r2, 5
        blr
Emit this:
test2:
        movl 8(%esp), %eax
        andl 4(%esp), %eax
        cmpl $-1, %eax
        sete %al
        movzbl %al, %eax
        ret
or this:
_test2:
.LBB_test2_0:   ;
        and r2, r4, r3
        cmpwi cr0, r2, -1
        li r3, 1
        li r2, 0
        beq .LBB_test2_2        ;
.LBB_test2_1:   ;
        or r3, r2, r2
.LBB_test2_2:   ;
        blr
it seems like the PPC isel could do better for R32 == -1 case.
llvm-svn: 21242 
							
						 
						
							2005-04-12 01:46:05 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								8ffd004920 
								
							 
						 
						
							
							
								
								Teach the dag mechanism that this:  
							
							 
							
							... 
							
							
							
							long long test2(unsigned A, unsigned B) {
        return ((unsigned long long)A << 32) + B;
}
is equivalent to this:
long long test1(unsigned A, unsigned B) {
        return ((unsigned long long)A << 32) | B;
}
Now they are both codegen'd to this on ppc:
_test2:
        blr
or this on x86:
test2:
        movl 4(%esp), %edx
        movl 8(%esp), %eax
        ret
llvm-svn: 21231 
							
						 
						
							2005-04-11 20:29:59 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								edd197062f 
								
							 
						 
						
							
							
								
								Fix expansion of shifts by exactly NVT bits on arch's (like X86) that have  
							
							 
							
							... 
							
							
							
							masking shifts.
This fixes the miscompilation of this:
long long test1(unsigned A, unsigned B) {
        return ((unsigned long long)A << 32) | B;
}
into this:
test1:
        movl 4(%esp), %edx
        movl %edx, %eax
        orl 8(%esp), %eax
        ret
allowing us to generate this instead:
test1:
        movl 4(%esp), %edx
        movl 8(%esp), %eax
        ret
llvm-svn: 21230 
							
						 
						
							2005-04-11 20:08:52 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								add0c63ad2 
								
							 
						 
						
							
							
								
								Fix libcall code to not pass a NULL Chain to LowerCallTo  
							
							 
							
							... 
							
							
							
							Fix libcall code to not crash or assert looking for an ADJCALLSTACKUP node
  when it is known that there is no ADJCALLSTACKDOWN to match.
Expand i64 multiply when ISD::MULHU is legal for the target.
llvm-svn: 21214 
							
						 
						
							2005-04-11 03:01:51 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a3b7ef05f4 
								
							 
						 
						
							
							
								
								Teach legalize to deal with targets that don't support some SEXTLOAD/ZEXTLOADs  
							
							 
							
							... 
							
							
							
							llvm-svn: 21212 
							
						 
						
							2005-04-10 22:54:25 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								391a351ede 
								
							 
						 
						
							
							
								
								don't zextload fp values!  
							
							 
							
							... 
							
							
							
							llvm-svn: 21209 
							
						 
						
							2005-04-10 17:40:35 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c53cd501b5 
								
							 
						 
						
							
							
								
								Until we have a dag combiner, promote using zextload's instead of extloads.  
							
							 
							
							... 
							
							
							
							This gives the optimizer a bit of information about the top-part of the
value.
llvm-svn: 21205 
							
						 
						
							2005-04-10 04:33:47 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d8cbfe82ba 
								
							 
						 
						
							
							
								
								Fix a thinko.  If the operand is promoted, pass the promoted value into  
							
							 
							
							... 
							
							
							
							the new zero extend, not the original operand.  This fixes cast bool -> long
on ppc.
Add an unrelated fixme
llvm-svn: 21196 
							
						 
						
							2005-04-10 01:13:15 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fd98678a8a 
								
							 
						 
						
							
							
								
								Legalize BRCONDTWOWAY into a BRCOND/BR pair if a target doesn't support it.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21166 
							
						 
						
							2005-04-09 03:30:19 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								b067492535 
								
							 
						 
						
							
							
								
								Teach ExpandShift how to handle shifts by a constant.  This allows targets  
							
							 
							
							... 
							
							
							
							like PowerPC to codegen long shifts in many fewer instructions.
llvm-svn: 21122 
							
						 
						
							2005-04-06 21:13:14 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								20b7d2a36f 
								
							 
						 
						
							
							
								
								Expand SREM and UREM for targets that claim not to have them, like PowerPC  
							
							 
							
							... 
							
							
							
							llvm-svn: 21103 
							
						 
						
							2005-04-06 00:23:54 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								cc00a7c42d 
								
							 
						 
						
							
							
								
								Handle expanding arguments to ISD::TRUNCATE.  This happens on PowerPC when  
							
							 
							
							... 
							
							
							
							you have something like i16 = truncate i64.  This fixes Regression/C/casts
llvm-svn: 21073 
							
						 
						
							2005-04-04 00:57:08 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4784489de2 
								
							 
						 
						
							
							
								
								Fix sign_extend and zero_extend of promoted value types to expanded value  
							
							 
							
							... 
							
							
							
							types.  This occurs when casting short to long on PPC for example.
llvm-svn: 21072 
							
						 
						
							2005-04-03 23:41:52 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a0c72cf289 
								
							 
						 
						
							
							
								
								Expand fabs into fneg  
							
							 
							
							... 
							
							
							
							llvm-svn: 21013 
							
						 
						
							2005-04-02 05:26:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								13fe99c807 
								
							 
						 
						
							
							
								
								Several changes mixed up here.  First when legalizing a DAG with pcmarker,  
							
							 
							
							... 
							
							
							
							dont' regen the whole dag if unneccesary.  Second, fix and ugly bug with
the _PARTS nodes that caused legalize to produce multiples of them.
Finally, implement initial support for FABS and FNEG.  Currently FNEG is
the only one to be trusted though.
llvm-svn: 21009 
							
						 
						
							2005-04-02 05:00:07 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4157c417a1 
								
							 
						 
						
							
							
								
								fix some bugs in the implementation of SHL_PARTS and friends.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21004 
							
						 
						
							2005-04-02 04:00:59 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2e5872c671 
								
							 
						 
						
							
							
								
								Turn expanded shift operations into (e.g.) SHL_PARTS if the target supports it.  
							
							 
							
							... 
							
							
							
							llvm-svn: 21002 
							
						 
						
							2005-04-02 03:38:53 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								07f97d5f55 
								
							 
						 
						
							
							
								
								Fix a bug when inserting a libcall into a function with no other calls.  
							
							 
							
							... 
							
							
							
							llvm-svn: 20999 
							
						 
						
							2005-04-02 03:22:40 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								69d39433c4 
								
							 
						 
						
							
							
								
								Fix a warning about an unhandled switch case  
							
							 
							
							... 
							
							
							
							llvm-svn: 20994 
							
						 
						
							2005-04-02 00:41:14 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								cda9aa7fa9 
								
							 
						 
						
							
							
								
								Add ISD::UNDEF node  
							
							 
							
							... 
							
							
							
							Teach the SelectionDAG code how to expand and promote it
Have PPC32 LowerCallTo generate ISD::UNDEF for int arg regs used up by fp
  arguments, but not shadowing their value.  This allows us to do the right
  thing with both fixed and vararg floating point arguments.
llvm-svn: 20988 
							
						 
						
							2005-04-01 22:34:39 +00:00  
						
					 
				
					
						
							
							
								 
								Andrew Lenharth
							
						 
						
							 
							
							
							
							
								
							
							
								dec53920b4 
								
							 
						 
						
							
							
								
								PCMarker support for DAG and Alpha  
							
							 
							
							... 
							
							
							
							llvm-svn: 20965 
							
						 
						
							2005-03-31 21:24:06 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								32e08b7c06 
								
							 
						 
						
							
							
								
								implement legalization of build_pair for nate  
							
							 
							
							... 
							
							
							
							llvm-svn: 20901 
							
						 
						
							2005-03-28 22:03:13 +00:00  
						
					 
				
					
						
							
							
								 
								Nate Begeman
							
						 
						
							 
							
							
							
							
								
							
							
								f656525cb6 
								
							 
						 
						
							
							
								
								Change interface to LowerCallTo to take a boolean isVarArg argument.  
							
							 
							
							... 
							
							
							
							llvm-svn: 20842 
							
						 
						
							2005-03-26 01:29:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a474313902 
								
							 
						 
						
							
							
								
								Fix a bug in the 'store fpimm, ptr' -> 'store intimm, ptr' handling code.  
							
							 
							
							... 
							
							
							
							Changing 'op' here caused us to not enter the store into a map, causing
reemission of the code!!  In practice, a simple loop like this:
no_exit:                ; preds = %no_exit, %entry
        %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ]            ; <uint> [#uses=3]
        %tmp.4 = getelementptr "complex long double"* %P, uint %indvar, uint 0          ; <double*> [#uses=1]
        store double 0.000000e+00, double* %tmp.4
        %indvar.next = add uint %indvar, 1              ; <uint> [#uses=2]
        %exitcond = seteq uint %indvar.next, %N         ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %no_exit
was being code gen'd to:
.LBBtest_1:     # no_exit
        movl %edx, %esi
        shll $4, %esi
        movl $0, 4(%eax,%esi)
        movl $0, (%eax,%esi)
        incl %edx
        movl $0, (%eax,%esi)
        movl $0, 4(%eax,%esi)
        cmpl %ecx, %edx
        jne .LBBtest_1  # no_exit
Note that we are doing 4 32-bit stores instead of 2.  Now we generate:
.LBBtest_1:     # no_exit
        movl %edx, %esi
        incl %esi
        shll $4, %edx
        movl $0, (%eax,%edx)
        movl $0, 4(%eax,%edx)
        cmpl %ecx, %esi
        movl %esi, %edx
        jne .LBBtest_1  # no_exit
This is much happier, though it would be even better if the increment of ESI
was scheduled after the compare :-/
llvm-svn: 20265 
							
						 
						
							2005-02-22 07:23:39 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0559691163 
								
							 
						 
						
							
							
								
								Fix a case where were incorrectly compiled cast from short to int on 64-bit  
							
							 
							
							... 
							
							
							
							targets.
llvm-svn: 20030 
							
						 
						
							2005-02-04 18:39:19 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5aa75e4ce5 
								
							 
						 
						
							
							
								
								Fix yet another memset issue.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19986 
							
						 
						
							2005-02-02 03:44:41 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4487b2e5a6 
								
							 
						 
						
							
							
								
								Fix some bugs andrew noticed legalizing memset for alpha  
							
							 
							
							... 
							
							
							
							llvm-svn: 19969 
							
						 
						
							2005-02-01 18:38:28 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bc7497d5f5 
								
							 
						 
						
							
							
								
								Alpha doesn't have a native f32 extload instruction.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19880 
							
						 
						
							2005-01-28 22:58:25 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								bf8c1ad313 
								
							 
						 
						
							
							
								
								implement legalization of truncates whose results and sources need to be  
							
							 
							
							... 
							
							
							
							truncated, e.g. (truncate:i8 something:i16) on a 32 or 64-bit RISC.
llvm-svn: 19879 
							
						 
						
							2005-01-28 22:52:50 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a4cfafe31a 
								
							 
						 
						
							
							
								
								Get alpha working with memset/memcpy/memmove  
							
							 
							
							... 
							
							
							
							llvm-svn: 19878 
							
						 
						
							2005-01-28 22:29:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								eb6614d719 
								
							 
						 
						
							
							
								
								CopyFromReg produces two values.  Make sure that we remember that both are  
							
							 
							
							... 
							
							
							
							legalized, and actually return the correct result when we legalize the chain first.
llvm-svn: 19866 
							
						 
						
							2005-01-28 06:27:38 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0dfd7d3a0d 
								
							 
						 
						
							
							
								
								Silence optimized warnings.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19797 
							
						 
						
							2005-01-23 23:19:44 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4add7e356f 
								
							 
						 
						
							
							
								
								Adjust to changes in SelectionDAG interfaces  
							
							 
							
							... 
							
							
							
							The first half of correct chain insertion for libcalls. This is not enough
to fix Fhourstones yet though.
llvm-svn: 19781 
							
						 
						
							2005-01-23 04:42:50 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ec2183713c 
								
							 
						 
						
							
							
								
								Fix problems with non-x86 targets.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19738 
							
						 
						
							2005-01-22 00:31:52 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								aac464e6c0 
								
							 
						 
						
							
							
								
								Refactor libcall code a bit.  Initial implementation of expanding int -> FP  
							
							 
							
							... 
							
							
							
							operations for 64-bit integers.
llvm-svn: 19724 
							
						 
						
							2005-01-21 06:05:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4d25c04f94 
								
							 
						 
						
							
							
								
								Simplify the shift-expansion code.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19721 
							
						 
						
							2005-01-20 20:29:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b3f83b28a5 
								
							 
						 
						
							
							
								
								Expand add/sub into ADD_PARTS/SUB_PARTS instead of a non-existant libcall.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19715 
							
						 
						
							2005-01-20 18:52:28 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3d95c14d94 
								
							 
						 
						
							
							
								
								Add support for targets that pass args in registers to calls.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19703 
							
						 
						
							2005-01-19 20:24:35 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								55562fa99a 
								
							 
						 
						
							
							
								
								Fold single use token factor nodes into other token factor nodes.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19701 
							
						 
						
							2005-01-19 19:10:54 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								0d03eb45a8 
								
							 
						 
						
							
							
								
								Realize the individual pieces of an expanded copytoreg/store/load are  
							
							 
							
							... 
							
							
							
							independent of each other.
llvm-svn: 19700 
							
						 
						
							2005-01-19 18:02:17 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2a7f8a94f4 
								
							 
						 
						
							
							
								
								Implement a way of expanding shifts.  This applies to targets that offer  
							
							 
							
							... 
							
							
							
							select operations or to shifts that are by a constant.  This automatically
implements (with no special code) all of the special cases for shift by 32,
shift by < 32 and shift by > 32.
llvm-svn: 19679 
							
						 
						
							2005-01-19 04:19:40 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								42993e45b6 
								
							 
						 
						
							
							
								
								Zero is cheaper than sign extend.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19675 
							
						 
						
							2005-01-18 21:57:59 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d65c3f3118 
								
							 
						 
						
							
							
								
								Fix some fixmes (promoting bools for select and brcond), fix promotion  
							
							 
							
							... 
							
							
							
							of zero and sign extends.
llvm-svn: 19671 
							
						 
						
							2005-01-18 19:27:06 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9f2c4a5200 
								
							 
						 
						
							
							
								
								Teach legalize to promote copy(from|to)reg, instead of making the isel pass  
							
							 
							
							... 
							
							
							
							do it.  This results in better code on X86 for floats (because if strict
precision is not required, we can elide some more expensive double -> float
conversions like the old isel did), and allows other targets to emit
CopyFromRegs that are not legal for arguments.
llvm-svn: 19668 
							
						 
						
							2005-01-18 17:54:55 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2cb338d7b5 
								
							 
						 
						
							
							
								
								Teach legalize to promote SetCC results.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19657 
							
						 
						
							2005-01-18 02:59:52 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								b07e2d2084 
								
							 
						 
						
							
							
								
								Allow setcc operations to have nonbool types.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19656 
							
						 
						
							2005-01-18 02:52:03 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								5c8a85e2d8 
								
							 
						 
						
							
							
								
								Implement legalize of call nodes.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19617 
							
						 
						
							2005-01-16 19:46:48 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3c0dd46a3b 
								
							 
						 
						
							
							
								
								Revamp supported ops.  Instead of just being supported or not, we now keep  
							
							 
							
							... 
							
							
							
							track of how to deal with it, and provide the target with a hook that they
can use to legalize arbitrary operations in arbitrary ways.
Implement custom lowering for a couple of ops, implement promotion for select
operations (which x86 needs).
llvm-svn: 19613 
							
						 
						
							2005-01-16 07:29:19 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3ba56b3fe7 
								
							 
						 
						
							
							
								
								Implement some more missing promotions.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19606 
							
						 
						
							2005-01-16 05:06:12 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								73b6977700 
								
							 
						 
						
							
							
								
								Clarify assertion.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19597 
							
						 
						
							2005-01-16 02:23:34 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								87a769cbd4 
								
							 
						 
						
							
							
								
								Move some information into the TargetLowering object.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19583 
							
						 
						
							2005-01-16 01:11:45 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								71d7f6e86f 
								
							 
						 
						
							
							
								
								legalize a bunch of operations that I missed.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19580 
							
						 
						
							2005-01-16 00:38:00 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								207a962c2c 
								
							 
						 
						
							
							
								
								Fix some serious bugs in promotion.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19578 
							
						 
						
							2005-01-16 00:17:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								4d97864e92 
								
							 
						 
						
							
							
								
								Implement promotion of a whole bunch more operators.  I think that this is  
							
							 
							
							... 
							
							
							
							basically everything.
llvm-svn: 19576 
							
						 
						
							2005-01-15 22:16:26 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								99222f706c 
								
							 
						 
						
							
							
								
								Add support for legalizing FP_ROUND_INREG, SIGN_EXTEND_INREG, and  
							
							 
							
							... 
							
							
							
							ZERO_EXTEND_INREG for targets that don't support them.
llvm-svn: 19573 
							
						 
						
							2005-01-15 07:15:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c6c9a5b07d 
								
							 
						 
						
							
							
								
								Add support for promoting ADD/MUL.  
							
							 
							
							... 
							
							
							
							Add support for new SIGN_EXTEND_INREG, ZERO_EXTEND_INREG, and FP_ROUND_INREG operators.
Realize that if we do any promotions, we need to iterate SelectionDAG
construction.
llvm-svn: 19569 
							
						 
						
							2005-01-15 06:18:18 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								1f2c9d82fa 
								
							 
						 
						
							
							
								
								Add intitial support for promoting some operators.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19565 
							
						 
						
							2005-01-15 05:21:40 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								3b8e719d1d 
								
							 
						 
						
							
							
								
								Adjust to CopyFromReg changes, implement deletion of truncating/extending  
							
							 
							
							... 
							
							
							
							stores/loads.
llvm-svn: 19562 
							
						 
						
							2005-01-14 22:38:01 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								39c6744c9f 
								
							 
						 
						
							
							
								
								Start implementing truncating stores and extending loads.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19559 
							
						 
						
							2005-01-14 22:08:15 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								e727af06c8 
								
							 
						 
						
							
							
								
								Add new ImplicitDef node, rename CopyRegSDNode class to RegSDNode.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19535 
							
						 
						
							2005-01-13 20:50:02 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								05b4e37e85 
								
							 
						 
						
							
							
								
								Legalize new node, add assertion.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19527 
							
						 
						
							2005-01-13 17:59:25 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9864b08f94 
								
							 
						 
						
							
							
								
								Fix sign extend to long.  When coming from sbyte, we used to generate:  
							
							 
							
							... 
							
							
							
							movsbl 4(%esp), %eax
        movl %eax, %edx
        sarl $7, %edx
Now we generate:
        movsbl 4(%esp), %eax
        movl %eax, %edx
        sarl $31, %edx
Which is right.
llvm-svn: 19515 
							
						 
						
							2005-01-12 18:19:52 +00:00  
						
					 
				
					
						
							
							
								 
								Reid Spencer
							
						 
						
							 
							
							
							
							
								
							
							
								6dced92447 
								
							 
						 
						
							
							
								
								Shut up warnings with GCC 3.4.3 about uninitialized variables.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19512 
							
						 
						
							2005-01-12 14:53:45 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f49c27c65c 
								
							 
						 
						
							
							
								
								Squelch optimized warning.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19475 
							
						 
						
							2005-01-11 17:46:49 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								85d70c6fd5 
								
							 
						 
						
							
							
								
								Teach legalize to lower MEMSET/MEMCPY/MEMMOVE operations if the target  
							
							 
							
							... 
							
							
							
							does not support them.
llvm-svn: 19465 
							
						 
						
							2005-01-11 05:57:22 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								be02d430a9 
								
							 
						 
						
							
							
								
								Lower to the correct functions.  This fixes FreeBench/fourinarow  
							
							 
							
							... 
							
							
							
							llvm-svn: 19436 
							
						 
						
							2005-01-10 21:02:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								9242c504da 
								
							 
						 
						
							
							
								
								Fix a bug legalizing call instructions (make sure to remember all result  
							
							 
							
							... 
							
							
							
							values), and eliminate some switch statements.
llvm-svn: 19417 
							
						 
						
							2005-01-09 19:43:23 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								02f5ce2077 
								
							 
						 
						
							
							
								
								Fix a minor bug legalizing dynamic_stackalloc.  This allows us to compile  
							
							 
							
							... 
							
							
							
							std::__pad<wchar_t, std::char_traits<wchar_t> >::_S_pad(std::ios_base&, wchar_t, wchar_t*, wchar_t const*, int, int, bool)
from libstdc++
llvm-svn: 19416 
							
						 
						
							2005-01-09 19:07:54 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ec26b48d61 
								
							 
						 
						
							
							
								
								Teach legalize to deal with DYNAMIC_STACKALLOC (aka a dynamic llvm alloca)  
							
							 
							
							... 
							
							
							
							llvm-svn: 19415 
							
						 
						
							2005-01-09 19:03:49 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								c0f31c5e96 
								
							 
						 
						
							
							
								
								Tighten up assertions.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19397 
							
						 
						
							2005-01-08 20:35:13 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								d006195517 
								
							 
						 
						
							
							
								
								Silence VS warnings.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19384 
							
						 
						
							2005-01-08 19:52:31 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								7e6eeba6c5 
								
							 
						 
						
							
							
								
								Implement handling of most long operators through libcalls.  
							
							 
							
							... 
							
							
							
							Fix a bug legalizing "ret (Val,Val)"
llvm-svn: 19375 
							
						 
						
							2005-01-08 19:27:05 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								2a6db3c351 
								
							 
						 
						
							
							
								
								Add support for FP->INT conversions and back.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19369 
							
						 
						
							2005-01-08 08:08:56 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								e69daaf71d 
								
							 
						 
						
							
							
								
								Implement the 'store FPIMM, Ptr' -> 'store INTIMM, Ptr' optimization for  
							
							 
							
							... 
							
							
							
							all targets.
llvm-svn: 19366 
							
						 
						
							2005-01-08 06:25:56 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								a65a2f0c36 
								
							 
						 
						
							
							
								
								Add support for truncating integer casts from long.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19358 
							
						 
						
							2005-01-07 22:37:48 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ea4ca94cae 
								
							 
						 
						
							
							
								
								Fix a bug in load expansion legalization and ret legalization.  This fixes  
							
							 
							
							... 
							
							
							
							CodeGen/Generic/select.ll:castconst.
llvm-svn: 19357 
							
						 
						
							2005-01-07 22:28:47 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								68a12140c0 
								
							 
						 
						
							
							
								
								Legalize unconditional branches too  
							
							 
							
							... 
							
							
							
							llvm-svn: 19356 
							
						 
						
							2005-01-07 22:12:08 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								19a83990e1 
								
							 
						 
						
							
							
								
								Implement support for long GEP indices on 32-bit archs and support for  
							
							 
							
							... 
							
							
							
							int GEP indices on 64-bit archs.
llvm-svn: 19354 
							
						 
						
							2005-01-07 21:56:57 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								32f20bfa93 
								
							 
						 
						
							
							
								
								implement legalization of a bunch more operators.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19352 
							
						 
						
							2005-01-07 21:45:56 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								fa854eb012 
								
							 
						 
						
							
							
								
								Fix another bug legalizing calls!  
							
							 
							
							... 
							
							
							
							llvm-svn: 19350 
							
						 
						
							2005-01-07 21:35:32 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								f025d6788c 
								
							 
						 
						
							
							
								
								Fix a bug legalizing calls  
							
							 
							
							... 
							
							
							
							llvm-svn: 19348 
							
						 
						
							2005-01-07 21:34:13 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								473825ccec 
								
							 
						 
						
							
							
								
								After legalizing a DAG, delete dead nodes to save space.  
							
							 
							
							... 
							
							
							
							llvm-svn: 19346 
							
						 
						
							2005-01-07 21:09:37 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								ec3fe7c4a8 
								
							 
						 
						
							
							
								
								Teach legalize how to handle condbranches  
							
							 
							
							... 
							
							
							
							llvm-svn: 19339 
							
						 
						
							2005-01-07 08:19:42 +00:00  
						
					 
				
					
						
							
							
								 
								Chris Lattner
							
						 
						
							 
							
							
							
							
								
							
							
								dc75059005 
								
							 
						 
						
							
							
								
								Initial implementation of the DAG legalization. This still has a long way  
							
							 
							
							... 
							
							
							
							to go, but it does work for some non-trivial cases now.
llvm-svn: 19329 
							
						 
						
							2005-01-07 07:47:09 +00:00