Added several cases where a constant must be forwarded into a use.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 18 Oct 2001 00:22:02 +0000 (00:22 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Thu, 18 Oct 2001 00:22:02 +0000 (00:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@865 91177308-0d34-0410-b5e6-96231b3b80d8

test/select.ll

index 58f99646da92321a8ec631d4145489f2e40ed039..8a7348aa69af83ab02632becd6b76091d79ef4a6 100644 (file)
@@ -1,3 +1,5 @@
+%AConst    = constant int 123
+
 implementation
 
 ; A SetCC whose result is used should produce instructions to
@@ -37,6 +39,31 @@ 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
+       %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