mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[LV] Use getScalarizationOverhead in memory instruction costs (NFC)
This patch refactors the cost estimation of scalarized loads and stores to reuse getScalarizationOverhead for the cost of the extractelement and insertelement instructions we might create. The existing code accounted for this cost, but it was functionally equivalent to the helper function. llvm-svn: 283364
This commit is contained in:
parent
5e8e039088
commit
98dd3f99f0
@ -6676,27 +6676,23 @@ unsigned LoopVectorizationCostModel::getInstructionCost(Instruction *I,
|
||||
|
||||
// Check if the memory instruction will be scalarized.
|
||||
if (Legal->memoryInstructionMustBeScalarized(I, VF)) {
|
||||
unsigned Cost = 0;
|
||||
Type *PtrTy = ToVectorTy(Ptr->getType(), VF);
|
||||
|
||||
// True if the memory instruction's address computation is complex.
|
||||
bool IsComplexComputation =
|
||||
isLikelyComplexAddressComputation(Ptr, Legal, SE, TheLoop);
|
||||
unsigned Cost = 0;
|
||||
// The cost of extracting from the value vector and pointer vector.
|
||||
Type *PtrTy = ToVectorTy(Ptr->getType(), VF);
|
||||
for (unsigned i = 0; i < VF; ++i) {
|
||||
// The cost of extracting the pointer operand.
|
||||
Cost += TTI.getVectorInstrCost(Instruction::ExtractElement, PtrTy, i);
|
||||
// In case of STORE, the cost of ExtractElement from the vector.
|
||||
// In case of LOAD, the cost of InsertElement into the returned
|
||||
// vector.
|
||||
Cost += TTI.getVectorInstrCost(SI ? Instruction::ExtractElement
|
||||
: Instruction::InsertElement,
|
||||
VectorTy, i);
|
||||
}
|
||||
|
||||
// The cost of the scalar loads/stores.
|
||||
// Get the cost of the scalar memory instruction and address computation.
|
||||
Cost += VF * TTI.getAddressComputationCost(PtrTy, IsComplexComputation);
|
||||
Cost += VF *
|
||||
TTI.getMemoryOpCost(I->getOpcode(), ValTy->getScalarType(),
|
||||
Alignment, AS);
|
||||
|
||||
// Get the overhead of the extractelement and insertelement instructions
|
||||
// we might create due to scalarization.
|
||||
Cost += getScalarizationOverhead(I, VF, false, TTI);
|
||||
|
||||
return Cost;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user