mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Added several cases where a constant must be forwarded into a use.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@865 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fee93865d6
commit
f6ee0d876a
@ -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…
Reference in New Issue
Block a user