Minor changes.
[oota-llvm.git] / test / select.ll
index 58f99646da92321a8ec631d4145489f2e40ed039..6be90ff0bdf9fa60d82c0a2ca92e3372c7854b36 100644 (file)
@@ -1,3 +1,5 @@
+%AConst    = constant int 123
+
 implementation
 
 ; A SetCC whose result is used should produce instructions to
@@ -37,6 +39,32 @@ Next:
 end
 
 
+
+; A constant argument to a cast used only once should be forward substituted
+; and loaded where needed, which happens is:
+; -- User of cast has no immediate field
+; -- User of cast has immediate field but constant is too large to fit
+;    or constant is not resolved until later (e.g., global address)
+; -- User of cast uses it as a call arg. or return value so it is an implicit
+;    use but has to be loaded into a virtual register so that the reg.
+;    allocator can allocate the appropriate phys. reg. for it
+;  
+int* "castconst"(float)
+begin
+; <label>:0
+       %castbig   = cast ulong 99999999 to int
+       %castsmall = cast ulong 1        to int
+       %usebig    = add int %castbig, %castsmall
+               
+       %castglob = cast int* %AConst to long*
+       %dummyl   = load long* %castglob
+       
+       %castnull = cast ulong 0 to int*
+       ret int* %castnull
+end
+
+
+
 ; Test branch-on-comparison-with-zero, in two ways:
 ; 1. can be folded
 ; 2. cannot be folded because result of comparison is used twice
@@ -45,6 +73,9 @@ void "testbool"(int, int)   ; Def %0, %1
        const int 0          ; Def 2
        const int -4         ; Def 3
 begin
+; <label>:0
+       br label %Top
+Top:
        add int %0, %1    ; Def 4
        sub int %4, %3    ; Def 5
        setle int %5, %2  ; Def 0 - bool plane
@@ -55,7 +86,7 @@ loop:
        sub int %4, %3    ; Def 7
        setle int %7, %2  ; Def 1 - bool
        not bool %1               ; Def 2 - bool. first use of bool %1
-       br bool %1, label %loop, label %   ;  second use of bool %1
+       br bool %1, label %loop, label %Top   ;  second use of bool %1
 
 retlbl:
        ret void
@@ -66,11 +97,14 @@ end
 ;
 void "testfloatbool"(float %x, float %y)   ; Def %0, %1 - float
 begin
+; <label>:0
+       br label %Top
+Top:
        %p = add float %x, %y    ; Def 2 - float
        %z = sub float %x, %y    ; Def 3 - float
        %b = setle float %p, %z  ; Def 0 - bool
        %c = not bool %b         ; Def 1 - bool
-       br bool %b, label %0, label %goon
+       br bool %b, label %Top, label %goon
 goon:
        ret void
 end