From: Chris Lattner Date: Sun, 2 Mar 2008 17:56:29 +0000 (+0000) Subject: Evan implemented this. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3be4893dcecaec7acc21ea445321e27a03ef99b2;p=oota-llvm.git Evan implemented this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47827 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/README.txt b/lib/Target/PowerPC/README.txt index 2ae4088293a..7bc50e5aa39 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 ; [#uses=1] - %tmp.3 = and int %b, 240 ; [#uses=1] - %tmp.4 = or int %tmp.3, %tmp.1 ; [#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 ed2e7b0c297..f8a42b51420 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 ; [#uses=1] + %tmp.3 = and i32 %b, 240 ; [#uses=1] + %tmp.4 = or i32 %tmp.3, %tmp.1 ; [#uses=1] + ret i32 %tmp.4 +} +