summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC
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
commit2d9c5f3b8b31db6c6e56c3d28b0c6d6d3d8d3858 (patch)
tree868e83ffbd3ea441d5a7f6b17ce41c114626c36b /llvm/test/CodeGen/PowerPC
parent0a98abc67cf187bc04676daaff738727e0c2a452 (diff)
downloadbcm5719-llvm-2d9c5f3b8b31db6c6e56c3d28b0c6d6d3d8d3858.tar.gz
bcm5719-llvm-2d9c5f3b8b31db6c6e56c3d28b0c6d6d3d8d3858.zip
[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 llvm-svn: 313639
Diffstat (limited to 'llvm/test/CodeGen/PowerPC')
-rw-r--r--llvm/test/CodeGen/PowerPC/opt-li-add-to-addi.ll60
1 files changed, 60 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/opt-li-add-to-addi.ll b/llvm/test/CodeGen/PowerPC/opt-li-add-to-addi.ll
new file mode 100644
index 00000000000..43d8445b7cf
--- /dev/null
+++ b/llvm/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)
OpenPOWER on IntegriCloud