[llvm] r232827 - Correctly estimate SROA savings for store operands in inline cost analysis.
Wei Mi
wmi at google.com
Fri Mar 20 11:33:12 PDT 2015
Author: wmi
Date: Fri Mar 20 13:33:12 2015
New Revision: 232827
URL: http://llvm.org/viewvc/llvm-project?rev=232827&view=rev
Log:
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
Added:
llvm/trunk/test/Transforms/Inline/store-sroa.ll
Modified:
llvm/trunk/lib/Analysis/IPA/InlineCost.cpp
Modified: llvm/trunk/lib/Analysis/IPA/InlineCost.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/InlineCost.cpp?rev=232827&r1=232826&r2=232827&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/IPA/InlineCost.cpp (original)
+++ llvm/trunk/lib/Analysis/IPA/InlineCost.cpp Fri Mar 20 13:33:12 2015
@@ -621,7 +621,7 @@ bool CallAnalyzer::visitBinaryOperator(B
bool CallAnalyzer::visitLoad(LoadInst &I) {
Value *SROAArg;
DenseMap<Value *, int>::iterator CostIt;
- if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt)) {
+ if (lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt)) {
if (I.isSimple()) {
accumulateSROACost(CostIt, InlineConstants::InstrCost);
return true;
@@ -636,7 +636,7 @@ bool CallAnalyzer::visitLoad(LoadInst &I
bool CallAnalyzer::visitStore(StoreInst &I) {
Value *SROAArg;
DenseMap<Value *, int>::iterator CostIt;
- if (lookupSROAArgAndCost(I.getOperand(0), SROAArg, CostIt)) {
+ if (lookupSROAArgAndCost(I.getPointerOperand(), SROAArg, CostIt)) {
if (I.isSimple()) {
accumulateSROACost(CostIt, InlineConstants::InstrCost);
return true;
Added: llvm/trunk/test/Transforms/Inline/store-sroa.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/store-sroa.ll?rev=232827&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/Inline/store-sroa.ll (added)
+++ llvm/trunk/test/Transforms/Inline/store-sroa.ll Fri Mar 20 13:33:12 2015
@@ -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
+}
More information about the llvm-commits
mailing list