From 3be4893dcecaec7acc21ea445321e27a03ef99b2 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 2 Mar 2008 17:56:29 +0000 Subject: [PATCH] Evan implemented this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47827 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PowerPC/README.txt | 23 ----------------------- 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 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 +} +