summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/PowerPC/add-fi.ll
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2014-12-11 22:51:06 +0000
committerHal Finkel <hfinkel@anl.gov>2014-12-11 22:51:06 +0000
commitb5e9b0426acff0a0c7abb16ab071d68026dd1bba (patch)
tree732f822efdc0ada7bd0bc09187a88de0b836c3c3 /llvm/test/CodeGen/PowerPC/add-fi.ll
parent005f9f433c4d2559677152795c30090c4cd9270e (diff)
downloadbcm5719-llvm-b5e9b0426acff0a0c7abb16ab071d68026dd1bba.tar.gz
bcm5719-llvm-b5e9b0426acff0a0c7abb16ab071d68026dd1bba.zip
[PowerPC] Better lowering for add/or of a FrameIndex
If we have an add (or an or that is really an add), where one operand is a FrameIndex and the other operand is a small constant, we can combine the lowering of the FrameIndex (which is lowered as an add of the FI and a zero offset) with the constant operand. Amusingly, this is an old potential improvement entry from lib/Target/PowerPC/README.txt which had never been resolved. In short, we used to lower: %X = alloca { i32, i32 } %Y = getelementptr {i32,i32}* %X, i32 0, i32 1 ret i32* %Y as: addi 3, 1, -8 ori 3, 3, 4 blr and now we produce: addi 3, 1, -4 blr which is much more sensible. llvm-svn: 224071
Diffstat (limited to 'llvm/test/CodeGen/PowerPC/add-fi.ll')
-rw-r--r--llvm/test/CodeGen/PowerPC/add-fi.ll24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/PowerPC/add-fi.ll b/llvm/test/CodeGen/PowerPC/add-fi.ll
new file mode 100644
index 00000000000..18892c8cdf5
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/add-fi.ll
@@ -0,0 +1,24 @@
+; RUN: llc -mcpu=ppc64 < %s | FileCheck %s
+target datalayout = "E-m:e-i64:64-n32:64"
+target triple = "powerpc64-unknown-linux-gnu"
+
+define i32* @test1() {
+ %X = alloca { i32, i32 }
+ %Y = getelementptr {i32,i32}* %X, i32 0, i32 1
+ ret i32* %Y
+
+; CHECK-LABEL: @test1
+; CHECK: addi 3, 1, -4
+; CHECK: blr
+}
+
+define i32* @test2() {
+ %X = alloca { i32, i32, i32, i32 }
+ %Y = getelementptr {i32,i32,i32,i32}* %X, i32 0, i32 3
+ ret i32* %Y
+
+; CHECK-LABEL: @test2
+; CHECK: addi 3, 1, -4
+; CHECK: blr
+}
+
OpenPOWER on IntegriCloud