summaryrefslogtreecommitdiff
path: root/test/CodeGen/PowerPC/opt-li-add-to-addi.ll
diff options
context:
space:
mode:
authorTony Jiang <jtony@ca.ibm.com>2017-09-19 16:14:37 +0000
committerTony Jiang <jtony@ca.ibm.com>2017-09-19 16:14:37 +0000
commita2daaca0d64e76071464730ee00755ad81695d70 (patch)
tree6c316e83138db9999176ba7ece77f79f8c3baa7a /test/CodeGen/PowerPC/opt-li-add-to-addi.ll
parentfd1b754b1d13417def7c62bd53d7ffeca1a1dba7 (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.ll60
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)