mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
[SLP] Optimize getSpillCost(); NFCI
For a given set of live values, the spill cost will always be the same for each call. Compute the cost once and multiply it by the number of calls. (I'm not sure this spill cost modeling makes sense if there are multiple calls, as the spill cost will likely be shared across calls in that case. But that's how it currently works.) llvm-svn: 365552
This commit is contained in:
parent
cdc1df0c0c
commit
d88ac25674
@ -3355,6 +3355,7 @@ int BoUpSLP::getSpillCost() const {
|
||||
});
|
||||
|
||||
// Now find the sequence of instructions between PrevInst and Inst.
|
||||
unsigned NumCalls = 0;
|
||||
BasicBlock::reverse_iterator InstIt = ++Inst->getIterator().getReverse(),
|
||||
PrevInstIt =
|
||||
PrevInst->getIterator().getReverse();
|
||||
@ -3367,16 +3368,19 @@ int BoUpSLP::getSpillCost() const {
|
||||
// Debug informations don't impact spill cost.
|
||||
if ((isa<CallInst>(&*PrevInstIt) &&
|
||||
!isa<DbgInfoIntrinsic>(&*PrevInstIt)) &&
|
||||
&*PrevInstIt != PrevInst) {
|
||||
SmallVector<Type*, 4> V;
|
||||
for (auto *II : LiveValues)
|
||||
V.push_back(VectorType::get(II->getType(), BundleWidth));
|
||||
Cost += TTI->getCostOfKeepingLiveOverCall(V);
|
||||
}
|
||||
&*PrevInstIt != PrevInst)
|
||||
NumCalls++;
|
||||
|
||||
++PrevInstIt;
|
||||
}
|
||||
|
||||
if (NumCalls) {
|
||||
SmallVector<Type*, 4> V;
|
||||
for (auto *II : LiveValues)
|
||||
V.push_back(VectorType::get(II->getType(), BundleWidth));
|
||||
Cost += NumCalls * TTI->getCostOfKeepingLiveOverCall(V);
|
||||
}
|
||||
|
||||
PrevInst = Inst;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user