diff options
-rw-r--r-- | lib/Target/PowerPC/README.txt | 23 | ||||
-rw-r--r-- | test/CodeGen/PowerPC/rlwimi-commute.ll | 8 |
2 files changed, 8 insertions, 23 deletions
diff --git a/lib/Target/PowerPC/README.txt b/lib/Target/PowerPC/README.txt index 2ae4088..7bc50e5 100644 --- a/lib/Target/PowerPC/README.txt +++ b/lib/Target/PowerPC/README.txt @@ -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() { diff --git a/test/CodeGen/PowerPC/rlwimi-commute.ll b/test/CodeGen/PowerPC/rlwimi-commute.ll index ed2e7b0..f8a42b5 100644 --- a/test/CodeGen/PowerPC/rlwimi-commute.ll +++ b/test/CodeGen/PowerPC/rlwimi-commute.ll @@ -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 +} + |