diff options
author | Tony Jiang <jtony@ca.ibm.com> | 2017-09-19 16:14:37 +0000 |
---|---|---|
committer | Tony Jiang <jtony@ca.ibm.com> | 2017-09-19 16:14:37 +0000 |
commit | a2daaca0d64e76071464730ee00755ad81695d70 (patch) | |
tree | 6c316e83138db9999176ba7ece77f79f8c3baa7a /test/CodeGen/PowerPC/opt-li-add-to-addi.ll | |
parent | fd1b754b1d13417def7c62bd53d7ffeca1a1dba7 (diff) |
[PowerPC Peephole] Constants into a join add, use ADDI over LI/ADD.
Two blocks prior to the join each perform an li and the the join block has an
add using the initialized register. Optimize each predecessor block to instead
use addi and delete the li's and add.
Differential Revision: https://reviews.llvm.org/D36734
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313639 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC/opt-li-add-to-addi.ll')
-rw-r--r-- | test/CodeGen/PowerPC/opt-li-add-to-addi.ll | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/opt-li-add-to-addi.ll b/test/CodeGen/PowerPC/opt-li-add-to-addi.ll new file mode 100644 index 00000000000..43d8445b7cf --- /dev/null +++ b/test/CodeGen/PowerPC/opt-li-add-to-addi.ll @@ -0,0 +1,60 @@ +; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s + +define i64 @testOptimizeLiAddToAddi(i64 %a) { +; CHECK-LABEL: testOptimizeLiAddToAddi: +; CHECK: addi 3, 30, 2444 +; CHECK: bl callv +; CHECK: addi 3, 30, 234 +; CHECK: bl call +; CHECK: blr +entry: + %cmp = icmp sgt i64 %a, 33 + br i1 %cmp, label %if.then, label %if.end + +if.then: + tail call void bitcast (void (...)* @callv to void ()*)() + br label %if.end + +if.end: + %add.0 = phi i64 [ 234, %if.then ], [ 2444, %entry ] + %add2 = add nsw i64 %add.0, %a + %call = tail call i64 @call(i64 %add2) + ret i64 %call +} + +define i64 @testThreePhiIncomings(i64 %a) { +; CHECK-LABEL: testThreePhiIncomings: +; CHECK: bl callv +; CHECK: addi 3, 30, 234 +; CHECK: addi 3, 30, 2444 +; CHECK: bl callv +; CHECK: addi 3, 30, 345 +; CHECK: bl call +; CHECK: blr +entry: + %cmp = icmp slt i64 %a, 33 + br i1 %cmp, label %if.then, label %if.else + +if.then: + tail call void bitcast (void (...)* @callv to void ()*)() + br label %if.end4 + +if.else: + %cmp1 = icmp slt i64 %a, 55 + br i1 %cmp1, label %if.then2, label %if.end4 + +if.then2: + tail call void bitcast (void (...)* @callv to void ()*)() + br label %if.end4 + +if.end4: + %add.0 = phi i64 [ 234, %if.then ], [ 345, %if.then2 ], [ 2444, %if.else ] + %add5 = add nsw i64 %add.0, %a + %call = tail call i64 @call(i64 %add5) + ret i64 %call +} + +declare void @callv(...) + +declare i64 @call(i64) |