Revert @llvm.assume with operator bundles (r289755-r289757)
This creates non-linear behavior in the inliner (see more details in r289755's commit thread). llvm-svn: 290086
This commit is contained in:
@@ -19,7 +19,6 @@
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/ADT/PostOrderIterator.h"
|
||||
#include "llvm/ADT/SetVector.h"
|
||||
#include "llvm/ADT/SmallSet.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/Analysis/CodeMetrics.h"
|
||||
#include "llvm/Analysis/GlobalsModRef.h"
|
||||
@@ -308,11 +307,12 @@ public:
|
||||
|
||||
BoUpSLP(Function *Func, ScalarEvolution *Se, TargetTransformInfo *Tti,
|
||||
TargetLibraryInfo *TLi, AliasAnalysis *Aa, LoopInfo *Li,
|
||||
DominatorTree *Dt, DemandedBits *DB, const DataLayout *DL)
|
||||
DominatorTree *Dt, AssumptionCache *AC, DemandedBits *DB,
|
||||
const DataLayout *DL)
|
||||
: NumLoadsWantToKeepOrder(0), NumLoadsWantToChangeOrder(0), F(Func),
|
||||
SE(Se), TTI(Tti), TLI(TLi), AA(Aa), LI(Li), DT(Dt), DB(DB),
|
||||
SE(Se), TTI(Tti), TLI(TLi), AA(Aa), LI(Li), DT(Dt), AC(AC), DB(DB),
|
||||
DL(DL), Builder(Se->getContext()) {
|
||||
CodeMetrics::collectEphemeralValues(F, EphValues);
|
||||
CodeMetrics::collectEphemeralValues(F, AC, EphValues);
|
||||
// Use the vector register size specified by the target unless overridden
|
||||
// by a command-line option.
|
||||
// TODO: It would be better to limit the vectorization factor based on
|
||||
@@ -901,6 +901,7 @@ private:
|
||||
AliasAnalysis *AA;
|
||||
LoopInfo *LI;
|
||||
DominatorTree *DT;
|
||||
AssumptionCache *AC;
|
||||
DemandedBits *DB;
|
||||
const DataLayout *DL;
|
||||
unsigned MaxVecRegSize; // This is set by TTI or overridden by cl::opt.
|
||||
@@ -3539,7 +3540,7 @@ void BoUpSLP::computeMinimumValueSizes() {
|
||||
// Determine the maximum number of bits required to store the scalar
|
||||
// values.
|
||||
for (auto *Scalar : ToDemote) {
|
||||
auto NumSignBits = ComputeNumSignBits(Scalar, *DL, 0, 0, DT);
|
||||
auto NumSignBits = ComputeNumSignBits(Scalar, *DL, 0, AC, 0, DT);
|
||||
auto NumTypeBits = DL->getTypeSizeInBits(Scalar->getType());
|
||||
MaxBitWidth = std::max<unsigned>(NumTypeBits - NumSignBits, MaxBitWidth);
|
||||
}
|
||||
@@ -3611,13 +3612,15 @@ struct SLPVectorizer : public FunctionPass {
|
||||
auto *AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
|
||||
auto *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
auto *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
auto *AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
auto *DB = &getAnalysis<DemandedBitsWrapperPass>().getDemandedBits();
|
||||
|
||||
return Impl.runImpl(F, SE, TTI, TLI, AA, LI, DT, DB);
|
||||
return Impl.runImpl(F, SE, TTI, TLI, AA, LI, DT, AC, DB);
|
||||
}
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
FunctionPass::getAnalysisUsage(AU);
|
||||
AU.addRequired<AssumptionCacheTracker>();
|
||||
AU.addRequired<ScalarEvolutionWrapperPass>();
|
||||
AU.addRequired<AAResultsWrapperPass>();
|
||||
AU.addRequired<TargetTransformInfoWrapperPass>();
|
||||
@@ -3640,9 +3643,10 @@ PreservedAnalyses SLPVectorizerPass::run(Function &F, FunctionAnalysisManager &A
|
||||
auto *AA = &AM.getResult<AAManager>(F);
|
||||
auto *LI = &AM.getResult<LoopAnalysis>(F);
|
||||
auto *DT = &AM.getResult<DominatorTreeAnalysis>(F);
|
||||
auto *AC = &AM.getResult<AssumptionAnalysis>(F);
|
||||
auto *DB = &AM.getResult<DemandedBitsAnalysis>(F);
|
||||
|
||||
bool Changed = runImpl(F, SE, TTI, TLI, AA, LI, DT, DB);
|
||||
bool Changed = runImpl(F, SE, TTI, TLI, AA, LI, DT, AC, DB);
|
||||
if (!Changed)
|
||||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
@@ -3657,13 +3661,14 @@ bool SLPVectorizerPass::runImpl(Function &F, ScalarEvolution *SE_,
|
||||
TargetTransformInfo *TTI_,
|
||||
TargetLibraryInfo *TLI_, AliasAnalysis *AA_,
|
||||
LoopInfo *LI_, DominatorTree *DT_,
|
||||
DemandedBits *DB_) {
|
||||
AssumptionCache *AC_, DemandedBits *DB_) {
|
||||
SE = SE_;
|
||||
TTI = TTI_;
|
||||
TLI = TLI_;
|
||||
AA = AA_;
|
||||
LI = LI_;
|
||||
DT = DT_;
|
||||
AC = AC_;
|
||||
DB = DB_;
|
||||
DL = &F.getParent()->getDataLayout();
|
||||
|
||||
@@ -3684,7 +3689,7 @@ bool SLPVectorizerPass::runImpl(Function &F, ScalarEvolution *SE_,
|
||||
|
||||
// Use the bottom up slp vectorizer to construct chains that start with
|
||||
// store instructions.
|
||||
BoUpSLP R(&F, SE, TTI, TLI, AA, LI, DT, DB, DL);
|
||||
BoUpSLP R(&F, SE, TTI, TLI, AA, LI, DT, AC, DB, DL);
|
||||
|
||||
// A general note: the vectorizer must use BoUpSLP::eraseInstruction() to
|
||||
// delete instructions.
|
||||
@@ -4933,6 +4938,7 @@ static const char lv_name[] = "SLP Vectorizer";
|
||||
INITIALIZE_PASS_BEGIN(SLPVectorizer, SV_NAME, lv_name, false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(TargetTransformInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(DemandedBitsWrapperPass)
|
||||
|
||||
Reference in New Issue
Block a user