mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[InlineCost, NFC] Change CallAnalyzer::isGEPFree to use TTI::getUserCost instead of TTI::getGEPCost
Currently CallAnalyzer::isGEPFree uses TTI::getGEPCost to check if GEP is free. TTI::getGEPCost cannot handle cases when GEPs participate in Def-Use dependencies (see https://reviews.llvm.org/D31186 for example). There is TTI::getUserCost which can calculate the cost more accurately by taking dependencies into account. Differential Revision: https://reviews.llvm.org/D33685 llvm-svn: 309268
This commit is contained in:
parent
31b5f4eab5
commit
93630b8683
@ -348,15 +348,14 @@ bool CallAnalyzer::accumulateGEPOffset(GEPOperator &GEP, APInt &Offset) {
|
|||||||
///
|
///
|
||||||
/// Respects any simplified values known during the analysis of this callsite.
|
/// Respects any simplified values known during the analysis of this callsite.
|
||||||
bool CallAnalyzer::isGEPFree(GetElementPtrInst &GEP) {
|
bool CallAnalyzer::isGEPFree(GetElementPtrInst &GEP) {
|
||||||
SmallVector<Value *, 4> Indices;
|
SmallVector<Value *, 4> Operands;
|
||||||
|
Operands.push_back(GEP.getOperand(0));
|
||||||
for (User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end(); I != E; ++I)
|
for (User::op_iterator I = GEP.idx_begin(), E = GEP.idx_end(); I != E; ++I)
|
||||||
if (Constant *SimpleOp = SimplifiedValues.lookup(*I))
|
if (Constant *SimpleOp = SimplifiedValues.lookup(*I))
|
||||||
Indices.push_back(SimpleOp);
|
Operands.push_back(SimpleOp);
|
||||||
else
|
else
|
||||||
Indices.push_back(*I);
|
Operands.push_back(*I);
|
||||||
return TargetTransformInfo::TCC_Free ==
|
return TargetTransformInfo::TCC_Free == TTI.getUserCost(&GEP, Operands);
|
||||||
TTI.getGEPCost(GEP.getSourceElementType(), GEP.getPointerOperand(),
|
|
||||||
Indices);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CallAnalyzer::visitAlloca(AllocaInst &I) {
|
bool CallAnalyzer::visitAlloca(AllocaInst &I) {
|
||||||
|
Loading…
Reference in New Issue
Block a user