Skip to content

Commit 2553267

Browse files
author
git apple-llvm automerger
committed
Merge commit 'a4aa6ba90352' from apple/main into swift/next
2 parents 8a5acb4 + a4aa6ba commit 2553267

File tree

4 files changed

+24
-19
lines changed

4 files changed

+24
-19
lines changed

llvm/include/llvm/Transforms/Scalar/LoopFlatten.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ class LoopFlattenPass : public PassInfoMixin<LoopFlattenPass> {
2424
public:
2525
LoopFlattenPass() = default;
2626

27-
PreservedAnalyses run(LoopNest &LN, LoopAnalysisManager &LAM,
28-
LoopStandardAnalysisResults &AR, LPMUpdater &U);
27+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
2928
};
3029

3130
} // end namespace llvm

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
617617
FPM.addPass(SimplifyCFGPass());
618618
FPM.addPass(InstCombinePass());
619619
if (EnableLoopFlatten)
620-
FPM.addPass(createFunctionToLoopPassAdaptor(LoopFlattenPass()));
620+
FPM.addPass(LoopFlattenPass());
621621
// The loop passes in LPM2 (LoopFullUnrollPass) do not preserve MemorySSA.
622622
// *All* loop passes must preserve it, in order to be able to use it.
623623
FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM2),
@@ -792,7 +792,7 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
792792
FPM.addPass(SimplifyCFGPass());
793793
FPM.addPass(InstCombinePass());
794794
if (EnableLoopFlatten)
795-
FPM.addPass(createFunctionToLoopPassAdaptor(LoopFlattenPass()));
795+
FPM.addPass(LoopFlattenPass());
796796
// The loop passes in LPM2 (LoopIdiomRecognizePass, IndVarSimplifyPass,
797797
// LoopDeletionPass and LoopFullUnrollPass) do not preserve MemorySSA.
798798
// *All* loop passes must preserve it, in order to be able to use it.
@@ -1842,7 +1842,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
18421842

18431843
// More loops are countable; try to optimize them.
18441844
if (EnableLoopFlatten && Level.getSpeedupLevel() > 1)
1845-
MainFPM.addPass(createFunctionToLoopPassAdaptor(LoopFlattenPass()));
1845+
MainFPM.addPass(LoopFlattenPass());
18461846

18471847
if (EnableConstraintElimination)
18481848
MainFPM.addPass(ConstraintEliminationPass());

llvm/lib/Passes/PassRegistry.def

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ FUNCTION_PASS("guard-widening", GuardWideningPass())
248248
FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass())
249249
FUNCTION_PASS("loop-simplify", LoopSimplifyPass())
250250
FUNCTION_PASS("loop-sink", LoopSinkPass())
251-
FUNCTION_PASS("loop-unroll-and-jam", LoopUnrollAndJamPass())
251+
FUNCTION_PASS("loop-flatten", LoopFlattenPass())
252252
FUNCTION_PASS("lowerinvoke", LowerInvokePass())
253253
FUNCTION_PASS("lowerswitch", LowerSwitchPass())
254254
FUNCTION_PASS("mem2reg", PromotePass())
@@ -389,7 +389,6 @@ LOOP_PASS("canon-freeze", CanonicalizeFreezeInLoopsPass())
389389
LOOP_PASS("dot-ddg", DDGDotPrinterPass())
390390
LOOP_PASS("invalidate<all>", InvalidateAllAnalysesPass())
391391
LOOP_PASS("licm", LICMPass())
392-
LOOP_PASS("loop-flatten", LoopFlattenPass())
393392
LOOP_PASS("loop-idiom", LoopIdiomRecognizePass())
394393
LOOP_PASS("loop-instsimplify", LoopInstSimplifyPass())
395394
LOOP_PASS("loop-interchange", LoopInterchangePass())

llvm/lib/Transforms/Scalar/LoopFlatten.cpp

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -658,10 +658,10 @@ static bool FlattenLoopPair(FlattenInfo &FI, DominatorTree *DT, LoopInfo *LI,
658658
return DoFlattenLoopPair(FI, DT, LI, SE, AC, TTI);
659659
}
660660

661-
bool Flatten(LoopNest &LN, DominatorTree *DT, LoopInfo *LI, ScalarEvolution *SE,
661+
bool Flatten(DominatorTree *DT, LoopInfo *LI, ScalarEvolution *SE,
662662
AssumptionCache *AC, TargetTransformInfo *TTI) {
663663
bool Changed = false;
664-
for (Loop *InnerLoop : LN.getLoops()) {
664+
for (auto *InnerLoop : LI->getLoopsInPreorder()) {
665665
auto *OuterLoop = InnerLoop->getParentLoop();
666666
if (!OuterLoop)
667667
continue;
@@ -671,17 +671,29 @@ bool Flatten(LoopNest &LN, DominatorTree *DT, LoopInfo *LI, ScalarEvolution *SE,
671671
return Changed;
672672
}
673673

674-
PreservedAnalyses LoopFlattenPass::run(LoopNest &LN, LoopAnalysisManager &LAM,
675-
LoopStandardAnalysisResults &AR,
676-
LPMUpdater &U) {
674+
PreservedAnalyses LoopFlattenPass::run(Function &F,
675+
FunctionAnalysisManager &AM) {
676+
auto *DT = &AM.getResult<DominatorTreeAnalysis>(F);
677+
auto *LI = &AM.getResult<LoopAnalysis>(F);
678+
auto *SE = &AM.getResult<ScalarEvolutionAnalysis>(F);
679+
auto *AC = &AM.getResult<AssumptionAnalysis>(F);
680+
auto *TTI = &AM.getResult<TargetIRAnalysis>(F);
677681

678682
bool Changed = false;
679683

680684
// The loop flattening pass requires loops to be
681685
// in simplified form, and also needs LCSSA. Running
682686
// this pass will simplify all loops that contain inner loops,
683687
// regardless of whether anything ends up being flattened.
684-
Changed |= Flatten(LN, &AR.DT, &AR.LI, &AR.SE, &AR.AC, &AR.TTI);
688+
for (const auto &L : *LI) {
689+
if (L->isInnermost())
690+
continue;
691+
Changed |=
692+
simplifyLoop(L, DT, LI, SE, AC, nullptr, false /* PreserveLCSSA */);
693+
Changed |= formLCSSARecursively(*L, *DT, LI, SE);
694+
}
695+
696+
Changed |= Flatten(DT, LI, SE, AC, TTI);
685697

686698
if (!Changed)
687699
return PreservedAnalyses::all();
@@ -728,10 +740,5 @@ bool LoopFlattenLegacyPass::runOnFunction(Function &F) {
728740
auto &TTIP = getAnalysis<TargetTransformInfoWrapperPass>();
729741
auto *TTI = &TTIP.getTTI(F);
730742
auto *AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
731-
bool Changed = false;
732-
for (Loop *L : *LI) {
733-
auto LN = LoopNest::getLoopNest(*L, *SE);
734-
Changed |= Flatten(*LN, DT, LI, SE, AC, TTI);
735-
}
736-
return Changed;
743+
return Flatten(DT, LI, SE, AC, TTI);
737744
}

0 commit comments

Comments
 (0)