mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-20 12:23:04 +00:00
Added several cases where a constant must be forwarded into a use.
llvm-svn: 865
This commit is contained in:
parent
abb85bb24c
commit
4e61ad56e4
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user