mirror of
https://github.com/intel/llvm.git
synced 2026-01-12 10:17:28 +08:00
[SCEVExp] Get DL from SE, strip constructor arg (NFC) (#171823)
This commit is contained in:
committed by
GitHub
parent
cdce445c9c
commit
85fafd5db0
@@ -183,12 +183,12 @@ class SCEVExpander : public SCEVVisitor<SCEVExpander, Value *> {
|
||||
|
||||
public:
|
||||
/// Construct a SCEVExpander in "canonical" mode.
|
||||
explicit SCEVExpander(ScalarEvolution &se, const DataLayout &DL,
|
||||
const char *name, bool PreserveLCSSA = true)
|
||||
: SE(se), DL(DL), IVName(name), PreserveLCSSA(PreserveLCSSA),
|
||||
IVIncInsertLoop(nullptr), IVIncInsertPos(nullptr), CanonicalMode(true),
|
||||
LSRMode(false),
|
||||
Builder(se.getContext(), InstSimplifyFolder(DL),
|
||||
explicit SCEVExpander(ScalarEvolution &SE, const char *Name,
|
||||
bool PreserveLCSSA = true)
|
||||
: SE(SE), DL(SE.getDataLayout()), IVName(Name),
|
||||
PreserveLCSSA(PreserveLCSSA), IVIncInsertLoop(nullptr),
|
||||
IVIncInsertPos(nullptr), CanonicalMode(true), LSRMode(false),
|
||||
Builder(SE.getContext(), InstSimplifyFolder(DL),
|
||||
IRBuilderCallbackInserter(
|
||||
[this](Instruction *I) { rememberInstruction(I); })) {
|
||||
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
|
||||
|
||||
@@ -143,12 +143,11 @@ namespace {
|
||||
class HardwareLoopsImpl {
|
||||
public:
|
||||
HardwareLoopsImpl(ScalarEvolution &SE, LoopInfo &LI, bool PreserveLCSSA,
|
||||
DominatorTree &DT, const DataLayout &DL,
|
||||
const TargetTransformInfo &TTI, TargetLibraryInfo *TLI,
|
||||
AssumptionCache &AC, OptimizationRemarkEmitter *ORE,
|
||||
HardwareLoopOptions &Opts)
|
||||
: SE(SE), LI(LI), PreserveLCSSA(PreserveLCSSA), DT(DT), DL(DL), TTI(TTI),
|
||||
TLI(TLI), AC(AC), ORE(ORE), Opts(Opts) { }
|
||||
DominatorTree &DT, const TargetTransformInfo &TTI,
|
||||
TargetLibraryInfo *TLI, AssumptionCache &AC,
|
||||
OptimizationRemarkEmitter *ORE, HardwareLoopOptions &Opts)
|
||||
: SE(SE), LI(LI), PreserveLCSSA(PreserveLCSSA), DT(DT), TTI(TTI),
|
||||
TLI(TLI), AC(AC), ORE(ORE), Opts(Opts) {}
|
||||
|
||||
bool run(Function &F);
|
||||
|
||||
@@ -164,7 +163,6 @@ namespace {
|
||||
LoopInfo &LI;
|
||||
bool PreserveLCSSA;
|
||||
DominatorTree &DT;
|
||||
const DataLayout &DL;
|
||||
const TargetTransformInfo &TTI;
|
||||
TargetLibraryInfo *TLI = nullptr;
|
||||
AssumptionCache &AC;
|
||||
@@ -197,22 +195,17 @@ namespace {
|
||||
|
||||
public:
|
||||
HardwareLoop(HardwareLoopInfo &Info, ScalarEvolution &SE,
|
||||
const DataLayout &DL,
|
||||
OptimizationRemarkEmitter *ORE,
|
||||
HardwareLoopOptions &Opts) :
|
||||
SE(SE), DL(DL), ORE(ORE), Opts(Opts), L(Info.L), M(L->getHeader()->getModule()),
|
||||
ExitCount(Info.ExitCount),
|
||||
CountType(Info.CountType),
|
||||
ExitBranch(Info.ExitBranch),
|
||||
LoopDecrement(Info.LoopDecrement),
|
||||
UsePHICounter(Info.CounterInReg),
|
||||
UseLoopGuard(Info.PerformEntryTest) { }
|
||||
OptimizationRemarkEmitter *ORE, HardwareLoopOptions &Opts)
|
||||
: SE(SE), ORE(ORE), Opts(Opts), L(Info.L),
|
||||
M(L->getHeader()->getModule()), ExitCount(Info.ExitCount),
|
||||
CountType(Info.CountType), ExitBranch(Info.ExitBranch),
|
||||
LoopDecrement(Info.LoopDecrement), UsePHICounter(Info.CounterInReg),
|
||||
UseLoopGuard(Info.PerformEntryTest) {}
|
||||
|
||||
void Create();
|
||||
|
||||
private:
|
||||
ScalarEvolution &SE;
|
||||
const DataLayout &DL;
|
||||
OptimizationRemarkEmitter *ORE = nullptr;
|
||||
HardwareLoopOptions &Opts;
|
||||
Loop *L = nullptr;
|
||||
@@ -239,7 +232,6 @@ bool HardwareLoopsLegacy::runOnFunction(Function &F) {
|
||||
auto &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE();
|
||||
auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
auto &TTI = getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
auto &DL = F.getDataLayout();
|
||||
auto *ORE = &getAnalysis<OptimizationRemarkEmitterWrapperPass>().getORE();
|
||||
auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
|
||||
auto *TLI = TLIP ? &TLIP->getTLI(F) : nullptr;
|
||||
@@ -260,8 +252,7 @@ bool HardwareLoopsLegacy::runOnFunction(Function &F) {
|
||||
if (CounterBitWidth.getNumOccurrences())
|
||||
Opts.setCounterBitwidth(CounterBitWidth);
|
||||
|
||||
HardwareLoopsImpl Impl(SE, LI, PreserveLCSSA, DT, DL, TTI, TLI, AC, ORE,
|
||||
Opts);
|
||||
HardwareLoopsImpl Impl(SE, LI, PreserveLCSSA, DT, TTI, TLI, AC, ORE, Opts);
|
||||
return Impl.run(F);
|
||||
}
|
||||
|
||||
@@ -274,9 +265,8 @@ PreservedAnalyses HardwareLoopsPass::run(Function &F,
|
||||
auto *TLI = &AM.getResult<TargetLibraryAnalysis>(F);
|
||||
auto &AC = AM.getResult<AssumptionAnalysis>(F);
|
||||
auto *ORE = &AM.getResult<OptimizationRemarkEmitterAnalysis>(F);
|
||||
auto &DL = F.getDataLayout();
|
||||
|
||||
HardwareLoopsImpl Impl(SE, LI, true, DT, DL, TTI, TLI, AC, ORE, Opts);
|
||||
HardwareLoopsImpl Impl(SE, LI, true, DT, TTI, TLI, AC, ORE, Opts);
|
||||
bool Changed = Impl.run(F);
|
||||
if (!Changed)
|
||||
return PreservedAnalyses::all();
|
||||
@@ -365,7 +355,7 @@ bool HardwareLoopsImpl::TryConvertLoop(HardwareLoopInfo &HWLoopInfo) {
|
||||
if (!Preheader)
|
||||
return false;
|
||||
|
||||
HardwareLoop HWLoop(HWLoopInfo, SE, DL, ORE, Opts);
|
||||
HardwareLoop HWLoop(HWLoopInfo, SE, ORE, Opts);
|
||||
HWLoop.Create();
|
||||
++NumHWLoops;
|
||||
return true;
|
||||
@@ -444,7 +434,7 @@ Value *HardwareLoop::InitLoopCount() {
|
||||
// Can we replace a conditional branch with an intrinsic that sets the
|
||||
// loop counter and tests that is not zero?
|
||||
|
||||
SCEVExpander SCEVE(SE, DL, "loopcnt");
|
||||
SCEVExpander SCEVE(SE, "loopcnt");
|
||||
if (!ExitCount->getType()->isPointerTy() &&
|
||||
ExitCount->getType() != CountType)
|
||||
ExitCount = SE.getZeroExtendExpr(ExitCount, CountType);
|
||||
|
||||
@@ -435,8 +435,7 @@ bool MVETailPredication::TryConvertActiveLaneMask(Value *TripCount) {
|
||||
}
|
||||
LLVM_DEBUG(dbgs() << "ARM TP: Safe to insert VCTP. Start is " << *StartSCEV
|
||||
<< "\n");
|
||||
SCEVExpander Expander(*SE, L->getHeader()->getDataLayout(),
|
||||
"start");
|
||||
SCEVExpander Expander(*SE, "start");
|
||||
Instruction *Ins = L->getLoopPreheader()->getTerminator();
|
||||
Value *Start = Expander.expandCodeFor(StartSCEV, StartSCEV->getType(), Ins);
|
||||
LLVM_DEBUG(dbgs() << "ARM TP: Created start value " << *Start << "\n");
|
||||
|
||||
@@ -2021,7 +2021,7 @@ bool HexagonLoopIdiomRecognize::processCopyingStore(Loop *CurLoop,
|
||||
BasicBlock *Preheader = CurLoop->getLoopPreheader();
|
||||
Instruction *ExpPt = Preheader->getTerminator();
|
||||
IRBuilder<> Builder(ExpPt);
|
||||
SCEVExpander Expander(*SE, *DL, "hexagon-loop-idiom");
|
||||
SCEVExpander Expander(*SE, "hexagon-loop-idiom");
|
||||
|
||||
Type *IntPtrTy = Builder.getIntPtrTy(*DL, SI->getPointerAddressSpace());
|
||||
|
||||
|
||||
@@ -543,11 +543,9 @@ bool PPCLoopInstrFormPrep::rewriteLoadStoresForCommoningChains(
|
||||
"invalid bucket for chain commoning!\n");
|
||||
SmallPtrSet<Value *, 16> DeletedPtrs;
|
||||
|
||||
BasicBlock *Header = L->getHeader();
|
||||
BasicBlock *LoopPredecessor = L->getLoopPredecessor();
|
||||
|
||||
SCEVExpander SCEVE(*SE, Header->getDataLayout(),
|
||||
"loopprepare-chaincommon");
|
||||
SCEVExpander SCEVE(*SE, "loopprepare-chaincommon");
|
||||
|
||||
for (unsigned ChainIdx = 0; ChainIdx < Bucket.ChainBases.size(); ++ChainIdx) {
|
||||
unsigned BaseElemIdx = Bucket.ChainSize * ChainIdx;
|
||||
@@ -1013,9 +1011,7 @@ bool PPCLoopInstrFormPrep::rewriteLoadStores(
|
||||
if (!BasePtrSCEV->isAffine())
|
||||
return MadeChange;
|
||||
|
||||
BasicBlock *Header = L->getHeader();
|
||||
SCEVExpander SCEVE(*SE, Header->getDataLayout(),
|
||||
"loopprepare-formrewrite");
|
||||
SCEVExpander SCEVE(*SE, "loopprepare-formrewrite");
|
||||
if (!SCEVE.isSafeToExpand(BasePtrSCEV->getStart()))
|
||||
return MadeChange;
|
||||
|
||||
|
||||
@@ -2066,7 +2066,7 @@ bool IndVarSimplify::run(Loop *L) {
|
||||
Changed |= rewriteNonIntegerIVs(L);
|
||||
|
||||
// Create a rewriter object which we'll use to transform the code with.
|
||||
SCEVExpander Rewriter(*SE, DL, "indvars");
|
||||
SCEVExpander Rewriter(*SE, "indvars");
|
||||
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
|
||||
Rewriter.setDebugType(DEBUG_TYPE);
|
||||
#endif
|
||||
|
||||
@@ -401,8 +401,7 @@ static bool splitLoopBound(Loop &L, DominatorTree &DT, LoopInfo &LI,
|
||||
? SE.getSMinExpr(NewBoundSCEV, SplitBoundSCEV)
|
||||
: SE.getUMinExpr(NewBoundSCEV, SplitBoundSCEV);
|
||||
|
||||
SCEVExpander Expander(
|
||||
SE, L.getHeader()->getDataLayout(), "split");
|
||||
SCEVExpander Expander(SE, "split");
|
||||
Instruction *InsertPt = SplitLoopPH->getTerminator();
|
||||
Value *NewBoundValue =
|
||||
Expander.expandCodeFor(NewBoundSCEV, NewBoundSCEV->getType(), InsertPt);
|
||||
|
||||
@@ -390,7 +390,7 @@ bool LoopDataPrefetch::runOnLoop(Loop *L) {
|
||||
continue;
|
||||
|
||||
BasicBlock *BB = P.InsertPt->getParent();
|
||||
SCEVExpander SCEVE(*SE, BB->getDataLayout(), "prefaddr");
|
||||
SCEVExpander SCEVE(*SE, "prefaddr");
|
||||
const SCEV *NextLSCEV = SE->getAddExpr(P.LSCEVAddRec, SE->getMulExpr(
|
||||
SE->getConstant(P.LSCEVAddRec->getType(), ItersAhead),
|
||||
P.LSCEVAddRec->getStepRecurrence(*SE)));
|
||||
|
||||
@@ -862,7 +862,7 @@ static bool CanWidenIV(FlattenInfo &FI, DominatorTree *DT, LoopInfo *LI,
|
||||
return false;
|
||||
}
|
||||
|
||||
SCEVExpander Rewriter(*SE, DL, "loopflatten");
|
||||
SCEVExpander Rewriter(*SE, "loopflatten");
|
||||
SmallVector<WeakTrackingVH, 4> DeadInsts;
|
||||
unsigned ElimExt = 0;
|
||||
unsigned Widened = 0;
|
||||
|
||||
@@ -1053,7 +1053,7 @@ bool LoopIdiomRecognize::processLoopStridedStore(
|
||||
unsigned DestAS = DestPtr->getType()->getPointerAddressSpace();
|
||||
BasicBlock *Preheader = CurLoop->getLoopPreheader();
|
||||
IRBuilder<> Builder(Preheader->getTerminator());
|
||||
SCEVExpander Expander(*SE, *DL, "loop-idiom");
|
||||
SCEVExpander Expander(*SE, "loop-idiom");
|
||||
SCEVExpanderCleaner ExpCleaner(Expander);
|
||||
|
||||
Type *DestInt8PtrTy = Builder.getPtrTy(DestAS);
|
||||
@@ -1309,7 +1309,7 @@ bool LoopIdiomRecognize::processLoopStoreOfLoopLoad(
|
||||
// header. This allows us to insert code for it in the preheader.
|
||||
BasicBlock *Preheader = CurLoop->getLoopPreheader();
|
||||
IRBuilder<> Builder(Preheader->getTerminator());
|
||||
SCEVExpander Expander(*SE, *DL, "loop-idiom");
|
||||
SCEVExpander Expander(*SE, "loop-idiom");
|
||||
|
||||
SCEVExpanderCleaner ExpCleaner(Expander);
|
||||
|
||||
@@ -1940,8 +1940,7 @@ bool LoopIdiomRecognize::recognizeAndInsertStrLen() {
|
||||
|
||||
IRBuilder<> Builder(Preheader->getTerminator());
|
||||
Builder.SetCurrentDebugLocation(CurLoop->getStartLoc());
|
||||
SCEVExpander Expander(*SE, Preheader->getModule()->getDataLayout(),
|
||||
"strlen_idiom");
|
||||
SCEVExpander Expander(*SE, "strlen_idiom");
|
||||
Value *MaterialzedBase = Expander.expandCodeFor(
|
||||
Verifier.LoadBaseEv, Verifier.LoadBaseEv->getType(),
|
||||
Builder.GetInsertPoint());
|
||||
@@ -3496,7 +3495,7 @@ bool LoopIdiomRecognize::recognizeShiftUntilZero() {
|
||||
Val->getName() + ".numactivebits", /*HasNUW=*/true,
|
||||
/*HasNSW=*/Bitwidth != 2);
|
||||
|
||||
SCEVExpander Expander(*SE, *DL, "loop-idiom");
|
||||
SCEVExpander Expander(*SE, "loop-idiom");
|
||||
Expander.setInsertPoint(&*Builder.GetInsertPoint());
|
||||
Value *ExtraOffset = Expander.expandCodeFor(ExtraOffsetExpr);
|
||||
|
||||
|
||||
@@ -615,8 +615,7 @@ public:
|
||||
|
||||
// Next, propagate the value stored by the store to the users of the load.
|
||||
// Also for the first iteration, generate the initial value of the load.
|
||||
SCEVExpander SEE(*PSE.getSE(), L->getHeader()->getDataLayout(),
|
||||
"storeforward");
|
||||
SCEVExpander SEE(*PSE.getSE(), "storeforward");
|
||||
for (const auto &Cand : Candidates)
|
||||
propagateStoredValueToLoadUsers(Cand, SEE);
|
||||
NumLoopLoadEliminted += Candidates.size();
|
||||
|
||||
@@ -1233,7 +1233,7 @@ bool LoopPredication::runOnLoop(Loop *Loop) {
|
||||
cast<BranchInst>(BB->getTerminator()));
|
||||
}
|
||||
|
||||
SCEVExpander Expander(*SE, *DL, "loop-predication");
|
||||
SCEVExpander Expander(*SE, "loop-predication");
|
||||
bool Changed = false;
|
||||
for (auto *Guard : Guards)
|
||||
Changed |= widenGuardConditions(Guard, Expander);
|
||||
|
||||
@@ -6159,8 +6159,7 @@ LSRInstance::LSRInstance(Loop *L, IVUsers &IU, ScalarEvolution &SE,
|
||||
MSSAU(MSSAU), AMK(PreferredAddresingMode.getNumOccurrences() > 0
|
||||
? PreferredAddresingMode
|
||||
: TTI.getPreferredAddressingMode(L, &SE)),
|
||||
Rewriter(SE, L->getHeader()->getDataLayout(), "lsr", false),
|
||||
BaselineCost(L, SE, TTI, AMK) {
|
||||
Rewriter(SE, "lsr", false), BaselineCost(L, SE, TTI, AMK) {
|
||||
// If LoopSimplify form is not available, stay out of trouble.
|
||||
if (!L->isLoopSimplifyForm())
|
||||
return;
|
||||
@@ -7060,8 +7059,7 @@ static bool ReduceLoopStrength(Loop *L, IVUsers &IU, ScalarEvolution &SE,
|
||||
Changed |= DeleteDeadPHIs(L->getHeader(), &TLI, MSSAU.get());
|
||||
if (EnablePhiElim && L->isLoopSimplifyForm()) {
|
||||
SmallVector<WeakTrackingVH, 16> DeadInsts;
|
||||
const DataLayout &DL = L->getHeader()->getDataLayout();
|
||||
SCEVExpander Rewriter(SE, DL, "lsr", false);
|
||||
SCEVExpander Rewriter(SE, "lsr", false);
|
||||
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
|
||||
Rewriter.setDebugType(DEBUG_TYPE);
|
||||
#endif
|
||||
@@ -7081,8 +7079,7 @@ static bool ReduceLoopStrength(Loop *L, IVUsers &IU, ScalarEvolution &SE,
|
||||
// skip the updates in each loop iteration.
|
||||
if (L->isRecursivelyLCSSAForm(DT, LI) && L->getExitBlock()) {
|
||||
SmallVector<WeakTrackingVH, 16> DeadInsts;
|
||||
const DataLayout &DL = L->getHeader()->getDataLayout();
|
||||
SCEVExpander Rewriter(SE, DL, "lsr", true);
|
||||
SCEVExpander Rewriter(SE, "lsr", true);
|
||||
int Rewrites = rewriteLoopExitValues(L, &LI, &TLI, &SE, &TTI, Rewriter, &DT,
|
||||
UnusedIndVarInLoop, DeadInsts);
|
||||
Rewriter.clear();
|
||||
|
||||
@@ -118,8 +118,7 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
|
||||
}();
|
||||
|
||||
const SCEV *BECount = SE.getBackedgeTakenCount(L);
|
||||
const DataLayout &DL = L->getHeader()->getDataLayout();
|
||||
SCEVExpander Expander(SE, DL, "lsr_fold_term_cond");
|
||||
SCEVExpander Expander(SE, "lsr_fold_term_cond");
|
||||
|
||||
PHINode *ToHelpFold = nullptr;
|
||||
const SCEV *TermValueS = nullptr;
|
||||
@@ -260,8 +259,7 @@ static bool RunTermFold(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
|
||||
cast<Instruction>(LoopValue)->dropPoisonGeneratingFlags();
|
||||
|
||||
// SCEVExpander for both use in preheader and latch
|
||||
const DataLayout &DL = L->getHeader()->getDataLayout();
|
||||
SCEVExpander Expander(SE, DL, "lsr_fold_term_cond");
|
||||
SCEVExpander Expander(SE, "lsr_fold_term_cond");
|
||||
|
||||
assert(Expander.isSafeToExpand(TermValueS) &&
|
||||
"Terminating value was checked safe in canFoldTerminatingCondition");
|
||||
|
||||
@@ -640,7 +640,7 @@ Value *NaryReassociatePass::tryReassociateMinOrMax(Instruction *I,
|
||||
SE->getUnknown(R1MinMax)};
|
||||
const SCEV *R2Expr = SE->getMinMaxExpr(SCEVType, Ops2);
|
||||
|
||||
SCEVExpander Expander(*SE, *DL, "nary-reassociate");
|
||||
SCEVExpander Expander(*SE, "nary-reassociate");
|
||||
Value *NewMinMax = Expander.expandCodeFor(R2Expr, I->getType(), I);
|
||||
NewMinMax->setName(Twine(I->getName()).concat(".nary"));
|
||||
|
||||
|
||||
@@ -397,8 +397,7 @@ LoopStructure::parseLoopStructure(ScalarEvolution &SE, Loop &L,
|
||||
BasicBlock *LatchExit = LatchBr->getSuccessor(LatchBrExitIdx);
|
||||
|
||||
assert(!L.contains(LatchExit) && "expected an exit block!");
|
||||
const DataLayout &DL = Preheader->getDataLayout();
|
||||
SCEVExpander Expander(SE, DL, "loop-constrainer");
|
||||
SCEVExpander Expander(SE, "loop-constrainer");
|
||||
Instruction *Ins = Preheader->getTerminator();
|
||||
|
||||
if (FixedRightSCEV)
|
||||
@@ -733,7 +732,7 @@ bool LoopConstrainer::run() {
|
||||
bool Increasing = MainLoopStructure.IndVarIncreasing;
|
||||
IntegerType *IVTy = cast<IntegerType>(RangeTy);
|
||||
|
||||
SCEVExpander Expander(SE, F.getDataLayout(), "loop-constrainer");
|
||||
SCEVExpander Expander(SE, "loop-constrainer");
|
||||
Instruction *InsertPt = OriginalPreheader->getTerminator();
|
||||
|
||||
// It would have been better to make `PreLoop' and `PostLoop'
|
||||
|
||||
@@ -498,7 +498,7 @@ bool llvm::canPeelLastIteration(const Loop &L, ScalarEvolution &SE) {
|
||||
m_BasicBlock(Succ1), m_BasicBlock(Succ2))) &&
|
||||
((Pred == CmpInst::ICMP_EQ && Succ2 == L.getHeader()) ||
|
||||
(Pred == CmpInst::ICMP_NE && Succ1 == L.getHeader())) &&
|
||||
Bound->getType()->isIntegerTy() &&
|
||||
Bound->getType()->isIntegerTy() &&
|
||||
SE.isLoopInvariant(SE.getSCEV(Bound), &L) &&
|
||||
match(SE.getSCEV(Inc),
|
||||
m_scev_AffineAddRec(m_SCEV(), m_scev_One(), m_SpecificLoop(&L)));
|
||||
@@ -515,7 +515,7 @@ static bool shouldPeelLastIteration(Loop &L, CmpPredicate Pred,
|
||||
return false;
|
||||
|
||||
const SCEV *BTC = SE.getBackedgeTakenCount(&L);
|
||||
SCEVExpander Expander(SE, L.getHeader()->getDataLayout(), "loop-peel");
|
||||
SCEVExpander Expander(SE, "loop-peel");
|
||||
if (!SE.isKnownNonZero(BTC) &&
|
||||
Expander.isHighCostExpansion(BTC, &L, SCEVCheapExpansionBudget, &TTI,
|
||||
L.getLoopPredecessor()->getTerminator()))
|
||||
@@ -1215,7 +1215,7 @@ bool llvm::peelLoop(Loop *L, unsigned PeelCount, bool PeelLast, LoopInfo *LI,
|
||||
}
|
||||
} else {
|
||||
NewPreHeader = SplitEdge(PreHeader, Header, &DT, LI);
|
||||
SCEVExpander Expander(*SE, Latch->getDataLayout(), "loop-peel");
|
||||
SCEVExpander Expander(*SE, "loop-peel");
|
||||
|
||||
BranchInst *PreHeaderBR = cast<BranchInst>(PreHeader->getTerminator());
|
||||
Value *BTCValue =
|
||||
|
||||
@@ -752,8 +752,7 @@ bool llvm::UnrollRuntimeLoopRemainder(
|
||||
|
||||
BasicBlock *PreHeader = L->getLoopPreheader();
|
||||
BranchInst *PreHeaderBR = cast<BranchInst>(PreHeader->getTerminator());
|
||||
const DataLayout &DL = Header->getDataLayout();
|
||||
SCEVExpander Expander(*SE, DL, "loop-unroll");
|
||||
SCEVExpander Expander(*SE, "loop-unroll");
|
||||
if (!AllowExpensiveTripCount &&
|
||||
Expander.isHighCostExpansion(TripCountSC, L, SCEVExpansionBudget, TTI,
|
||||
PreHeaderBR)) {
|
||||
|
||||
@@ -61,14 +61,11 @@ void LoopVersioning::versionLoop(
|
||||
BasicBlock *RuntimeCheckBB = VersionedLoop->getLoopPreheader();
|
||||
const auto &RtPtrChecking = *LAI.getRuntimePointerChecking();
|
||||
|
||||
SCEVExpander Exp2(*RtPtrChecking.getSE(),
|
||||
VersionedLoop->getHeader()->getDataLayout(),
|
||||
"induction");
|
||||
SCEVExpander Exp2(*RtPtrChecking.getSE(), "induction");
|
||||
MemRuntimeCheck = addRuntimeChecks(RuntimeCheckBB->getTerminator(),
|
||||
VersionedLoop, AliasChecks, Exp2);
|
||||
|
||||
SCEVExpander Exp(*SE, RuntimeCheckBB->getDataLayout(),
|
||||
"scev.check");
|
||||
SCEVExpander Exp(*SE, "scev.check");
|
||||
SCEVRuntimeCheck =
|
||||
Exp.expandCodeForPredicate(&Preds, RuntimeCheckBB->getTerminator());
|
||||
|
||||
|
||||
@@ -1035,7 +1035,7 @@ std::pair<bool, bool> simplifyUsersOfIV(PHINode *CurrIV, ScalarEvolution *SE,
|
||||
bool simplifyLoopIVs(Loop *L, ScalarEvolution *SE, DominatorTree *DT,
|
||||
LoopInfo *LI, const TargetTransformInfo *TTI,
|
||||
SmallVectorImpl<WeakTrackingVH> &Dead) {
|
||||
SCEVExpander Rewriter(*SE, SE->getDataLayout(), "indvars");
|
||||
SCEVExpander Rewriter(*SE, "indvars");
|
||||
#if LLVM_ENABLE_ABI_BREAKING_CHECKS
|
||||
Rewriter.setDebugType(DEBUG_TYPE);
|
||||
#endif
|
||||
|
||||
@@ -1807,10 +1807,10 @@ class GeneratedRTChecks {
|
||||
public:
|
||||
GeneratedRTChecks(PredicatedScalarEvolution &PSE, DominatorTree *DT,
|
||||
LoopInfo *LI, TargetTransformInfo *TTI,
|
||||
const DataLayout &DL, TTI::TargetCostKind CostKind)
|
||||
TTI::TargetCostKind CostKind)
|
||||
: DT(DT), LI(LI), TTI(TTI),
|
||||
SCEVExp(*PSE.getSE(), DL, "scev.check", /*PreserveLCSSA=*/false),
|
||||
MemCheckExp(*PSE.getSE(), DL, "scev.check", /*PreserveLCSSA=*/false),
|
||||
SCEVExp(*PSE.getSE(), "scev.check", /*PreserveLCSSA=*/false),
|
||||
MemCheckExp(*PSE.getSE(), "scev.check", /*PreserveLCSSA=*/false),
|
||||
PSE(PSE), CostKind(CostKind) {}
|
||||
|
||||
/// Generate runtime checks in SCEVCheckBlock and MemCheckBlock, so we can
|
||||
@@ -9249,7 +9249,7 @@ static bool processLoopInVPlanNativePath(
|
||||
VPlan &BestPlan = LVP.getPlanFor(VF.Width);
|
||||
|
||||
{
|
||||
GeneratedRTChecks Checks(PSE, DT, LI, TTI, F->getDataLayout(), CM.CostKind);
|
||||
GeneratedRTChecks Checks(PSE, DT, LI, TTI, CM.CostKind);
|
||||
InnerLoopVectorizer LB(L, PSE, LI, DT, TTI, AC, VF.Width, /*UF=*/1, &CM,
|
||||
Checks, BestPlan);
|
||||
LLVM_DEBUG(dbgs() << "Vectorizing outer loop in \""
|
||||
@@ -10085,7 +10085,7 @@ bool LoopVectorizePass::processLoop(Loop *L) {
|
||||
if (ORE->allowExtraAnalysis(LV_NAME))
|
||||
LVP.emitInvalidCostRemarks(ORE);
|
||||
|
||||
GeneratedRTChecks Checks(PSE, DT, LI, TTI, F->getDataLayout(), CM.CostKind);
|
||||
GeneratedRTChecks Checks(PSE, DT, LI, TTI, CM.CostKind);
|
||||
if (LVP.hasPlanWithVF(VF.Width)) {
|
||||
// Select the interleave count.
|
||||
IC = LVP.selectInterleaveCount(LVP.getPlanFor(VF.Width), VF.Width, VF.Cost);
|
||||
|
||||
@@ -19921,7 +19921,7 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
|
||||
if (!Stride) {
|
||||
const SCEV *StrideSCEV = SPtrInfo.StrideSCEV;
|
||||
assert(StrideSCEV && "Neither StrideVal nor StrideSCEV were set.");
|
||||
SCEVExpander Expander(*SE, *DL, "strided-load-vec");
|
||||
SCEVExpander Expander(*SE, "strided-load-vec");
|
||||
Stride = Expander.expandCodeFor(StrideSCEV, StrideSCEV->getType(),
|
||||
&*Builder.GetInsertPoint());
|
||||
}
|
||||
|
||||
@@ -4670,8 +4670,7 @@ void VPlanTransforms::materializeVFAndVFxUF(VPlan &Plan, VPBasicBlock *VectorPH,
|
||||
|
||||
DenseMap<const SCEV *, Value *>
|
||||
VPlanTransforms::expandSCEVs(VPlan &Plan, ScalarEvolution &SE) {
|
||||
const DataLayout &DL = SE.getDataLayout();
|
||||
SCEVExpander Expander(SE, DL, "induction", /*PreserveLCSSA=*/false);
|
||||
SCEVExpander Expander(SE, "induction", /*PreserveLCSSA=*/false);
|
||||
|
||||
auto *Entry = cast<VPIRBasicBlock>(Plan.getEntry());
|
||||
BasicBlock *EntryBB = Entry->getIRBasicBlock();
|
||||
|
||||
@@ -185,7 +185,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVZeroExtendExprNonIntegral) {
|
||||
SE.getAddRecExpr(SE.getUnknown(GepBase), SE.getConstant(T_int64, 1),
|
||||
LI->getLoopFor(L), SCEV::FlagNUW);
|
||||
|
||||
SCEVExpander Exp(SE, NIM.getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
Exp.disableCanonicalMode();
|
||||
Exp.expandCodeFor(AddRec, T_pint64, Ret);
|
||||
|
||||
@@ -255,7 +255,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpanderIsSafeToExpandAt) {
|
||||
Instruction *Ret = Builder.CreateRetVoid();
|
||||
|
||||
ScalarEvolution SE = buildSE(*F);
|
||||
SCEVExpander Exp(SE, M.getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
const SCEV *S = SE.getSCEV(Phi);
|
||||
EXPECT_TRUE(isa<SCEVAddRecExpr>(S));
|
||||
const SCEVAddRecExpr *AR = cast<SCEVAddRecExpr>(S);
|
||||
@@ -317,7 +317,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpanderNUW) {
|
||||
ScalarEvolution SE = buildSE(*F);
|
||||
const SCEV *S = SE.getSCEV(S1);
|
||||
EXPECT_TRUE(isa<SCEVAddExpr>(S));
|
||||
SCEVExpander Exp(SE, M.getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *I = cast<Instruction>(Exp.expandCodeFor(S, nullptr, R));
|
||||
EXPECT_FALSE(I->hasNoUnsignedWrap());
|
||||
}
|
||||
@@ -369,7 +369,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpanderNSW) {
|
||||
ScalarEvolution SE = buildSE(*F);
|
||||
const SCEV *S = SE.getSCEV(S1);
|
||||
EXPECT_TRUE(isa<SCEVAddExpr>(S));
|
||||
SCEVExpander Exp(SE, M.getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *I = cast<Instruction>(Exp.expandCodeFor(S, nullptr, R));
|
||||
EXPECT_FALSE(I->hasNoSignedWrap());
|
||||
}
|
||||
@@ -420,7 +420,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVCacheNUW) {
|
||||
EXPECT_TRUE(isa<SCEVAddExpr>(SC1));
|
||||
// Expand for S1, it should use S1 not S2 in spite S2
|
||||
// first in the cache.
|
||||
SCEVExpander Exp(SE, M.getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *I = cast<Instruction>(Exp.expandCodeFor(SC1, nullptr, R));
|
||||
EXPECT_FALSE(I->hasNoUnsignedWrap());
|
||||
}
|
||||
@@ -471,7 +471,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVCacheNSW) {
|
||||
EXPECT_TRUE(isa<SCEVAddExpr>(SC1));
|
||||
// Expand for S1, it should use S1 not S2 in spite S2
|
||||
// first in the cache.
|
||||
SCEVExpander Exp(SE, M.getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *I = cast<Instruction>(Exp.expandCodeFor(SC1, nullptr, R));
|
||||
EXPECT_FALSE(I->hasNoSignedWrap());
|
||||
}
|
||||
@@ -512,7 +512,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpandInsertCanonicalIV) {
|
||||
unsigned ExpectedCanonicalIVWidth =
|
||||
SE.getTypeSizeInBits(AR->getType());
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *InsertAt = I.getNextNode();
|
||||
Exp.expandCodeFor(AR, nullptr, InsertAt);
|
||||
PHINode *CanonicalIV = Loop->getCanonicalInductionVariable();
|
||||
@@ -563,7 +563,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpandInsertCanonicalIV) {
|
||||
cast<IntegerType>(CanonicalIV->getType())->getBitWidth();
|
||||
EXPECT_LT(CanonicalIVBitWidth, ExpectedCanonicalIVWidth);
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *InsertAt = I.getNextNode();
|
||||
Exp.expandCodeFor(AR, nullptr, InsertAt);
|
||||
|
||||
@@ -645,7 +645,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpandInsertCanonicalIV) {
|
||||
EXPECT_EQ(ARBitWidth, SE.getTypeSizeInBits(AR->getType()));
|
||||
EXPECT_EQ(CanonicalIVBitWidth, ARBitWidth);
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *InsertAt = I.getNextNode();
|
||||
Exp.expandCodeFor(AR, nullptr, InsertAt);
|
||||
|
||||
@@ -698,7 +698,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpanderShlNSW) {
|
||||
EXPECT_TRUE(isa<SCEVMulExpr>(AndSCEV));
|
||||
EXPECT_TRUE(cast<SCEVMulExpr>(AndSCEV)->hasNoSignedWrap());
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *I = cast<Instruction>(Exp.expandCodeFor(AndSCEV, nullptr, And));
|
||||
EXPECT_EQ(I->getOpcode(), Instruction::Shl);
|
||||
EXPECT_FALSE(I->hasNoSignedWrap());
|
||||
@@ -755,7 +755,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpandNonAffineAddRec) {
|
||||
auto *AR = GetAddRec(SE, Loop);
|
||||
EXPECT_FALSE(AR->isAffine());
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *InsertAt = I.getNextNode();
|
||||
Value *V = Exp.expandCodeFor(AR, nullptr, InsertAt);
|
||||
const SCEV *ExpandedAR = SE.getSCEV(V);
|
||||
@@ -804,7 +804,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpandNonAffineAddRec) {
|
||||
cast<IntegerType>(CanonicalIV->getType())->getBitWidth();
|
||||
EXPECT_LT(CanonicalIVBitWidth, ExpectedCanonicalIVWidth);
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *InsertAt = I.getNextNode();
|
||||
Value *V = Exp.expandCodeFor(AR, nullptr, InsertAt);
|
||||
const SCEV *ExpandedAR = SE.getSCEV(V);
|
||||
@@ -859,7 +859,7 @@ TEST_F(ScalarEvolutionExpanderTest, SCEVExpandNonAffineAddRec) {
|
||||
EXPECT_EQ(ARBitWidth, SE.getTypeSizeInBits(AR->getType()));
|
||||
EXPECT_EQ(CanonicalIVBitWidth, ARBitWidth);
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *InsertAt = I.getNextNode();
|
||||
Value *V = Exp.expandCodeFor(AR, nullptr, InsertAt);
|
||||
const SCEV *ExpandedAR = SE.getSCEV(V);
|
||||
@@ -926,7 +926,7 @@ TEST_F(ScalarEvolutionExpanderTest, ExpandNonIntegralPtrWithNullBase) {
|
||||
auto &I = GetInstByName(F, "ptr");
|
||||
auto PtrPlus1 =
|
||||
SE.getAddExpr(SE.getSCEV(&I), SE.getConstant(I.getType(), 1));
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
|
||||
Value *V = Exp.expandCodeFor(PtrPlus1, I.getType(), &I);
|
||||
I.replaceAllUsesWith(V);
|
||||
@@ -978,7 +978,7 @@ TEST_F(ScalarEvolutionExpanderTest, GEPFlags) {
|
||||
const SCEV *X = SE.getSCEV(F->getArg(1));
|
||||
const SCEV *PtrX = SE.getAddExpr(Ptr, X);
|
||||
|
||||
SCEVExpander Exp(SE, M->getDataLayout(), "expander");
|
||||
SCEVExpander Exp(SE, "expander");
|
||||
auto *I = cast<Instruction>(
|
||||
Exp.expandCodeFor(PtrX, nullptr, Entry.getTerminator()));
|
||||
// Check that the GEP is reused, but the inbounds flag cleared. We don't
|
||||
|
||||
@@ -242,10 +242,10 @@ struct ScopExpander final : SCEVVisitor<ScopExpander, const SCEV *> {
|
||||
friend struct SCEVVisitor<ScopExpander, const SCEV *>;
|
||||
|
||||
explicit ScopExpander(const Region &R, ScalarEvolution &SE, Function *GenFn,
|
||||
ScalarEvolution &GenSE, const DataLayout &DL,
|
||||
const char *Name, ValueMapT *VMap,
|
||||
LoopToScevMapT *LoopMap, BasicBlock *RTCBB)
|
||||
: Expander(GenSE, DL, Name, /*PreserveLCSSA=*/false), Name(Name), R(R),
|
||||
ScalarEvolution &GenSE, const char *Name,
|
||||
ValueMapT *VMap, LoopToScevMapT *LoopMap,
|
||||
BasicBlock *RTCBB)
|
||||
: Expander(GenSE, Name, /*PreserveLCSSA=*/false), Name(Name), R(R),
|
||||
VMap(VMap), LoopMap(LoopMap), RTCBB(RTCBB), GenSE(GenSE), GenFn(GenFn) {
|
||||
}
|
||||
|
||||
@@ -455,8 +455,8 @@ Value *polly::expandCodeFor(Scop &S, llvm::ScalarEvolution &SE,
|
||||
const SCEV *E, Type *Ty, BasicBlock::iterator IP,
|
||||
ValueMapT *VMap, LoopToScevMapT *LoopMap,
|
||||
BasicBlock *RTCBB) {
|
||||
ScopExpander Expander(S.getRegion(), SE, GenFn, GenSE, DL, Name, VMap,
|
||||
LoopMap, RTCBB);
|
||||
ScopExpander Expander(S.getRegion(), SE, GenFn, GenSE, Name, VMap, LoopMap,
|
||||
RTCBB);
|
||||
return Expander.expandCodeFor(E, Ty, IP);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user