forked from OSchip/llvm-project
[SLP] Don't pass a global CL option as an argument. NFC.
Differential Revision: https://reviews.llvm.org/D24199 llvm-svn: 280527
This commit is contained in:
parent
00864886f4
commit
c50dfe38ac
|
@ -96,11 +96,10 @@ private:
|
|||
/// a vectorization chain.
|
||||
bool vectorizeChainsInBlock(BasicBlock *BB, slpvectorizer::BoUpSLP &R);
|
||||
|
||||
bool vectorizeStoreChain(ArrayRef<Value *> Chain, int CostThreshold,
|
||||
slpvectorizer::BoUpSLP &R, unsigned VecRegSize);
|
||||
bool vectorizeStoreChain(ArrayRef<Value *> Chain, slpvectorizer::BoUpSLP &R,
|
||||
unsigned VecRegSize);
|
||||
|
||||
bool vectorizeStores(ArrayRef<StoreInst *> Stores, int costThreshold,
|
||||
slpvectorizer::BoUpSLP &R);
|
||||
bool vectorizeStores(ArrayRef<StoreInst *> Stores, slpvectorizer::BoUpSLP &R);
|
||||
|
||||
/// The store instructions in a basic block organized by base pointer.
|
||||
StoreListMap Stores;
|
||||
|
|
|
@ -3685,8 +3685,7 @@ static bool hasValueBeenRAUWed(ArrayRef<Value *> VL, ArrayRef<WeakVH> VH,
|
|||
return !std::equal(VL.begin(), VL.end(), VH.begin());
|
||||
}
|
||||
|
||||
bool SLPVectorizerPass::vectorizeStoreChain(ArrayRef<Value *> Chain,
|
||||
int CostThreshold, BoUpSLP &R,
|
||||
bool SLPVectorizerPass::vectorizeStoreChain(ArrayRef<Value *> Chain, BoUpSLP &R,
|
||||
unsigned VecRegSize) {
|
||||
unsigned ChainLen = Chain.size();
|
||||
DEBUG(dbgs() << "SLP: Analyzing a store chain of length " << ChainLen
|
||||
|
@ -3723,7 +3722,7 @@ bool SLPVectorizerPass::vectorizeStoreChain(ArrayRef<Value *> Chain,
|
|||
int Cost = R.getTreeCost();
|
||||
|
||||
DEBUG(dbgs() << "SLP: Found cost=" << Cost << " for VF=" << VF << "\n");
|
||||
if (Cost < CostThreshold) {
|
||||
if (Cost < -SLPCostThreshold) {
|
||||
DEBUG(dbgs() << "SLP: Decided to vectorize cost=" << Cost << "\n");
|
||||
R.vectorizeTree();
|
||||
|
||||
|
@ -3737,7 +3736,7 @@ bool SLPVectorizerPass::vectorizeStoreChain(ArrayRef<Value *> Chain,
|
|||
}
|
||||
|
||||
bool SLPVectorizerPass::vectorizeStores(ArrayRef<StoreInst *> Stores,
|
||||
int costThreshold, BoUpSLP &R) {
|
||||
BoUpSLP &R) {
|
||||
SetVector<StoreInst *> Heads, Tails;
|
||||
SmallDenseMap<StoreInst *, StoreInst *> ConsecutiveChain;
|
||||
|
||||
|
@ -3792,8 +3791,9 @@ bool SLPVectorizerPass::vectorizeStores(ArrayRef<StoreInst *> Stores,
|
|||
|
||||
// FIXME: Is division-by-2 the correct step? Should we assert that the
|
||||
// register size is a power-of-2?
|
||||
for (unsigned Size = R.getMaxVecRegSize(); Size >= R.getMinVecRegSize(); Size /= 2) {
|
||||
if (vectorizeStoreChain(Operands, costThreshold, R, Size)) {
|
||||
for (unsigned Size = R.getMaxVecRegSize(); Size >= R.getMinVecRegSize();
|
||||
Size /= 2) {
|
||||
if (vectorizeStoreChain(Operands, R, Size)) {
|
||||
// Mark the vectorized stores so that we don't vectorize them again.
|
||||
VectorizedStores.insert(Operands.begin(), Operands.end());
|
||||
Changed = true;
|
||||
|
@ -4751,8 +4751,7 @@ bool SLPVectorizerPass::vectorizeStoreChains(BoUpSLP &R) {
|
|||
// may cause a significant compile-time increase.
|
||||
for (unsigned CI = 0, CE = it->second.size(); CI < CE; CI+=16) {
|
||||
unsigned Len = std::min<unsigned>(CE - CI, 16);
|
||||
Changed |= vectorizeStores(makeArrayRef(&it->second[CI], Len),
|
||||
-SLPCostThreshold, R);
|
||||
Changed |= vectorizeStores(makeArrayRef(&it->second[CI], Len), R);
|
||||
}
|
||||
}
|
||||
return Changed;
|
||||
|
|
Loading…
Reference in New Issue