Skip to content

Commit 8a5acb4

Browse files
author
git apple-llvm automerger
committed
Merge commit 'fe285a110db5' from apple/main into swift/next
2 parents 79537af + fe285a1 commit 8a5acb4

File tree

4 files changed

+19
-24
lines changed

4 files changed

+19
-24
lines changed

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

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

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

3031
} // 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(LoopFlattenPass());
620+
FPM.addPass(createFunctionToLoopPassAdaptor(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(LoopFlattenPass());
795+
FPM.addPass(createFunctionToLoopPassAdaptor(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(LoopFlattenPass());
1845+
MainFPM.addPass(createFunctionToLoopPassAdaptor(LoopFlattenPass()));
18461846

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

llvm/lib/Passes/PassRegistry.def

Lines changed: 2 additions & 1 deletion
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-flatten", LoopFlattenPass())
251+
FUNCTION_PASS("loop-unroll-and-jam", LoopUnrollAndJamPass())
252252
FUNCTION_PASS("lowerinvoke", LowerInvokePass())
253253
FUNCTION_PASS("lowerswitch", LowerSwitchPass())
254254
FUNCTION_PASS("mem2reg", PromotePass())
@@ -389,6 +389,7 @@ 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())
392393
LOOP_PASS("loop-idiom", LoopIdiomRecognizePass())
393394
LOOP_PASS("loop-instsimplify", LoopInstSimplifyPass())
394395
LOOP_PASS("loop-interchange", LoopInterchangePass())

llvm/lib/Transforms/Scalar/LoopFlatten.cpp

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

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);
674+
PreservedAnalyses LoopFlattenPass::run(LoopNest &LN, LoopAnalysisManager &LAM,
675+
LoopStandardAnalysisResults &AR,
676+
LPMUpdater &U) {
681677

682678
bool Changed = false;
683679

684680
// The loop flattening pass requires loops to be
685681
// in simplified form, and also needs LCSSA. Running
686682
// this pass will simplify all loops that contain inner loops,
687683
// regardless of whether anything ends up being flattened.
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);
684+
Changed |= Flatten(LN, &AR.DT, &AR.LI, &AR.SE, &AR.AC, &AR.TTI);
697685

698686
if (!Changed)
699687
return PreservedAnalyses::all();
@@ -740,5 +728,10 @@ bool LoopFlattenLegacyPass::runOnFunction(Function &F) {
740728
auto &TTIP = getAnalysis<TargetTransformInfoWrapperPass>();
741729
auto *TTI = &TTIP.getTTI(F);
742730
auto *AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
743-
return Flatten(DT, LI, SE, AC, TTI);
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;
744737
}

0 commit comments

Comments
 (0)