OSDN Git Service

Evan implemented this.
authorChris Lattner <sabre@nondot.org>
Sun, 2 Mar 2008 17:56:29 +0000 (17:56 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 2 Mar 2008 17:56:29 +0000 (17:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47827 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/README.txt
test/CodeGen/PowerPC/rlwimi-commute.ll

index 2ae4088..7bc50e5 100644 (file)
@@ -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() {
index ed2e7b0..f8a42b5 100644 (file)
@@ -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
+}
+