summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/Inline
diff options
context:
space:
mode:
authorWei Mi <wmi@google.com>2015-03-20 18:33:12 +0000
committerWei Mi <wmi@google.com>2015-03-20 18:33:12 +0000
commit6c428d6ff60dff05c132f389b87bc36feb4afc1b (patch)
tree87107e18f5b5671358353508f19e9c09be63654d /llvm/test/Transforms/Inline
parent9e77de2a1ef5715a56448df843a864bad30194a1 (diff)
downloadbcm5719-llvm-6c428d6ff60dff05c132f389b87bc36feb4afc1b.tar.gz
bcm5719-llvm-6c428d6ff60dff05c132f389b87bc36feb4afc1b.zip
Correctly estimate SROA savings for store operands in inline cost analysis.
When estimating SROA savings, we want to see if an address is derived off an alloca in the caller. For store instructions, operand 1 is the address operand, but the current code uses operand 0. Use getPointerOperand for loads and stores to fix this. Patch by Easwaran Raman. http://reviews.llvm.org/D8425 llvm-svn: 232827
Diffstat (limited to 'llvm/test/Transforms/Inline')
-rw-r--r--llvm/test/Transforms/Inline/store-sroa.ll22
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Inline/store-sroa.ll b/llvm/test/Transforms/Inline/store-sroa.ll
new file mode 100644
index 00000000000..6b1ca964d33
--- /dev/null
+++ b/llvm/test/Transforms/Inline/store-sroa.ll
@@ -0,0 +1,22 @@
+; RUN: opt -S -O2 -inline-threshold=1 < %s | FileCheck %s
+
+%class.A = type { i32 }
+
+define void @_Z3barP1A(%class.A* %a) #0 {
+entry:
+ %a1 = getelementptr inbounds %class.A, %class.A* %a, i64 0, i32 0
+ %0 = load i32, i32* %a1, align 4
+ %add = add nsw i32 %0, 10
+ store i32 %add, i32* %a1, align 4
+ ret void
+}
+
+define void @_Z3foov() #0 {
+; CHECK-LABEL: @_Z3foov(
+; CHECK-NOT: call void @_Z3barP1A
+; CHECK: ret
+entry:
+ %a = alloca %class.A, align 4
+ call void @_Z3barP1A(%class.A* %a)
+ ret void
+}
OpenPOWER on IntegriCloud