mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-26 23:32:58 +00:00
Evan implemented this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47827 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a4239e7367
commit
3be4893dce
@ -154,29 +154,6 @@ more than one use. Itanium will want this too.
|
||||
|
||||
===-------------------------------------------------------------------------===
|
||||
|
||||
Compile this:
|
||||
|
||||
int %f1(int %a, int %b) {
|
||||
%tmp.1 = and int %a, 15 ; <int> [#uses=1]
|
||||
%tmp.3 = and int %b, 240 ; <int> [#uses=1]
|
||||
%tmp.4 = or int %tmp.3, %tmp.1 ; <int> [#uses=1]
|
||||
ret int %tmp.4
|
||||
}
|
||||
|
||||
without a copy. We make this currently:
|
||||
|
||||
_f1:
|
||||
rlwinm r2, r4, 0, 24, 27
|
||||
rlwimi r2, r3, 0, 28, 31
|
||||
or r3, r2, r2
|
||||
blr
|
||||
|
||||
The two-addr pass or RA needs to learn when it is profitable to commute an
|
||||
instruction to avoid a copy AFTER the 2-addr instruction. The 2-addr pass
|
||||
currently only commutes to avoid inserting a copy BEFORE the two addr instr.
|
||||
|
||||
===-------------------------------------------------------------------------===
|
||||
|
||||
Compile offsets from allocas:
|
||||
|
||||
int *%test() {
|
||||
|
@ -24,3 +24,11 @@ define void @test2(i32* %A, i32* %B, i32* %D, i32* %E) {
|
||||
store i32 %B.upgrd.4, i32* %E
|
||||
ret void
|
||||
}
|
||||
|
||||
define i32 @test3(i32 %a, i32 %b) {
|
||||
%tmp.1 = and i32 %a, 15 ; <i32> [#uses=1]
|
||||
%tmp.3 = and i32 %b, 240 ; <i32> [#uses=1]
|
||||
%tmp.4 = or i32 %tmp.3, %tmp.1 ; <i32> [#uses=1]
|
||||
ret i32 %tmp.4
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user