diff options
| author | Wei Mi <wmi@google.com> | 2015-03-20 18:33:12 +0000 |
|---|---|---|
| committer | Wei Mi <wmi@google.com> | 2015-03-20 18:33:12 +0000 |
| commit | 6c428d6ff60dff05c132f389b87bc36feb4afc1b (patch) | |
| tree | 87107e18f5b5671358353508f19e9c09be63654d /llvm/test/Transforms/Inline | |
| parent | 9e77de2a1ef5715a56448df843a864bad30194a1 (diff) | |
| download | bcm5719-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.ll | 22 |
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 +} |

