diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp index 0b732c6f14197..894038a94fbe1 100644 --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -434,12 +434,22 @@ static bool isLTOPreLink(ThinOrFullLTOPhase Phase) { Phase == ThinOrFullLTOPhase::FullLTOPreLink; } +// Helper to check if the current compilation phase is preparing for FullLTO +static bool isFullLTOPreLink(ThinOrFullLTOPhase Phase) { + return Phase == ThinOrFullLTOPhase::FullLTOPreLink; +} + // Helper to check if the current compilation phase is LTO backend static bool isLTOPostLink(ThinOrFullLTOPhase Phase) { return Phase == ThinOrFullLTOPhase::ThinLTOPostLink || Phase == ThinOrFullLTOPhase::FullLTOPostLink; } +// Helper to check if the current compilation phase is FullLTO backend +static bool isFullLTOPostLink(ThinOrFullLTOPhase Phase) { + return Phase == ThinOrFullLTOPhase::FullLTOPostLink; +} + // Helper to wrap conditionally Coro passes. static CoroConditionalWrapper buildCoroWrapper(ThinOrFullLTOPhase Phase) { // TODO: Skip passes according to Phase. @@ -1318,10 +1328,10 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level, void PassBuilder::addVectorPasses(OptimizationLevel Level, FunctionPassManager &FPM, ThinOrFullLTOPhase LTOPhase) { - const bool IsFullLTO = LTOPhase == ThinOrFullLTOPhase::FullLTOPostLink; - FPM.addPass(LoopVectorizePass( - LoopVectorizeOptions(!PTO.LoopInterleaving, !PTO.LoopVectorization))); + if (!isFullLTOPreLink(LTOPhase)) + FPM.addPass(LoopVectorizePass( + LoopVectorizeOptions(!PTO.LoopInterleaving, !PTO.LoopVectorization))); // Drop dereferenceable assumes after vectorization, as they are no longer // needed and can inhibit further optimization. @@ -1329,7 +1339,8 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level, FPM.addPass(DropUnnecessaryAssumesPass(/*DropDereferenceable=*/true)); FPM.addPass(InferAlignmentPass()); - if (IsFullLTO) { + if (isFullLTOPostLink(LTOPhase)) { + LoopPassManager LPM; // The vectorizer may have significantly shortened a loop body; unroll // again. Unroll small loops to hide loop backedge latency and saturate any // parallel execution resources of an out-of-order processor. We also then @@ -1339,11 +1350,15 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level, // across the loop nests. // We do UnrollAndJam in a separate LPM to ensure it happens before unroll if (EnableUnrollAndJam && PTO.LoopUnrolling) - FPM.addPass(createFunctionToLoopPassAdaptor( - LoopUnrollAndJamPass(Level.getSpeedupLevel()))); - FPM.addPass(LoopUnrollPass(LoopUnrollOptions( - Level.getSpeedupLevel(), /*OnlyWhenForced=*/!PTO.LoopUnrolling, - PTO.ForgetAllSCEVInLoopUnroll))); + LPM.addPass(LoopUnrollAndJamPass(Level.getSpeedupLevel())); + + // Unroll small loops and perform peeling. + LPM.addPass(LoopFullUnrollPass(Level.getSpeedupLevel(), + /* OnlyWhenForced= */ !PTO.LoopUnrolling, + PTO.ForgetAllSCEVInLoopUnroll)); + FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM), + /*UseMemorySSA=*/false)); + FPM.addPass(WarnMissedTransformationsPass()); // Now that we are done with loop unrolling, be it either by LoopVectorizer, // or LoopUnroll passes, some variable-offset GEP's into alloca's could have @@ -1354,7 +1369,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level, FPM.addPass(SROAPass(SROAOptions::PreserveCFG)); } - if (!IsFullLTO) { + if (!isFullLTOPostLink(LTOPhase)) { // Eliminate loads by forwarding stores from the previous iteration to loads // of the current iteration. FPM.addPass(LoopLoadEliminationPass()); @@ -1404,14 +1419,14 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level, .hoistCommonInsts(true) .sinkCommonInsts(true))); - if (IsFullLTO) { + if (isFullLTOPostLink(LTOPhase)) { FPM.addPass(SCCPPass()); FPM.addPass(InstCombinePass()); FPM.addPass(BDCEPass()); } // Optimize parallel scalar instruction chains into SIMD instructions. - if (PTO.SLPVectorization) { + if (PTO.SLPVectorization && !isFullLTOPreLink(LTOPhase)) { FPM.addPass(SLPVectorizerPass()); if (Level.getSpeedupLevel() > 1 && ExtraVectorizerPasses) { FPM.addPass(EarlyCSEPass()); @@ -1420,7 +1435,7 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level, // Enhance/cleanup vector code. FPM.addPass(VectorCombinePass()); - if (!IsFullLTO) { + if (!isFullLTOPreLink(LTOPhase)) { FPM.addPass(InstCombinePass()); // Unroll small loops to hide loop backedge latency and saturate any // parallel execution resources of an out-of-order processor. We also then @@ -2243,12 +2258,10 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, LPM.addPass(LoopDeletionPass()); // FIXME: Add loop interchange. - // Unroll small loops and perform peeling. - LPM.addPass(LoopFullUnrollPass(Level.getSpeedupLevel(), - /* OnlyWhenForced= */ !PTO.LoopUnrolling, - PTO.ForgetAllSCEVInLoopUnroll)); // The loop passes in LPM (LoopFullUnrollPass) do not preserve MemorySSA. // *All* loop passes must preserve it, in order to be able to use it. + // TODO: Enable MemorySSA for loop passes after we remove the + // LoopFullUnrollPass. MainFPM.addPass( createFunctionToLoopPassAdaptor(std::move(LPM), /*UseMemorySSA=*/false)); @@ -2283,6 +2296,21 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, // Add late LTO optimization passes. FunctionPassManager LateFPM; + // Delete basic blocks, which optimization passes may have killed. + LateFPM.addPass(SimplifyCFGPass(SimplifyCFGOptions() + .convertSwitchRangeToICmp(true) + .convertSwitchToArithmetic(true) + .hoistCommonInsts(true) + .speculateUnpredictables(true))); + + LateFPM.addPass(createFunctionToLoopPassAdaptor( + LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap, + /*AllowSpeculation=*/true), + /*USeMemorySSA=*/true)); + + // Catch trivial redundancies + LateFPM.addPass(EarlyCSEPass(true /* Enable mem-ssa. */)); + // LoopSink pass sinks instructions hoisted by LICM, which serves as a // canonicalization pass that enables other optimizations. As a result, // LoopSink pass needs to be a very late IR pass to avoid undoing LICM @@ -2300,6 +2328,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level, .convertSwitchToArithmetic(true) .hoistCommonInsts(true) .speculateUnpredictables(true))); + MPM.addPass(createModuleToFunctionPassAdaptor(std::move(LateFPM))); // Drop bodies of available eternally objects to improve GlobalDCE. diff --git a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp index 1367940ad8ef8..0d1a1d7d8072b 100644 --- a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp +++ b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp @@ -64,7 +64,7 @@ static cl::opt MinFunctionSize( "instructions")); static cl::opt MaxCodeSizeGrowth( - "funcspec-max-codesize-growth", cl::init(3), cl::Hidden, cl::desc( + "funcspec-max-codesize-growth", cl::init(4), cl::Hidden, cl::desc( "Maximum codesize growth allowed per function")); static cl::opt MinCodeSizeSavings( diff --git a/llvm/test/Other/new-pm-defaults.ll b/llvm/test/Other/new-pm-defaults.ll index 41ac7314deeb3..4e4c4ec781ffb 100644 --- a/llvm/test/Other/new-pm-defaults.ll +++ b/llvm/test/Other/new-pm-defaults.ll @@ -12,10 +12,10 @@ ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O1,%llvmcheckext ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O2,CHECK-O23,%llvmcheckext +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O2,CHECK-O23,%llvmcheckext ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23,%llvmcheckext +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,CHECK-O23,%llvmcheckext ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='lto-pre-link' -S %s 2>&1 \ ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-LTO,CHECK-O2,CHECK-O23,%llvmcheckext @@ -23,39 +23,39 @@ ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-peephole='no-op-function' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-PEEPHOLE,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-PEEPHOLE,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-late-loop-optimizations='no-op-loop' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-LATE,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-LATE,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-loop-optimizer-end='no-op-loop' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-END,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-LOOP-END,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-scalar-optimizer-late='no-op-function' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-SCALAR-LATE,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-SCALAR-LATE,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-cgscc-optimizer-late='no-op-cgscc' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-CGSCC-LATE,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-CGSCC-LATE,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-vectorizer-start='no-op-function' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-VECTORIZER-START,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-VECTORIZER-START,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-vectorizer-end='no-op-function' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-VECTORIZER-END,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-VECTORIZER-END,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-pipeline-start='no-op-module' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-START,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-START,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-pipeline-early-simplification='no-op-module' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-EARLY-SIMPLIFICATION,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-PIPELINE-EARLY-SIMPLIFICATION,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-pipeline-start='no-op-module' \ ; RUN: -passes='lto-pre-link' -S %s 2>&1 \ @@ -63,31 +63,31 @@ ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-optimizer-early='no-op-module' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-EARLY,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-EARLY,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes-ep-optimizer-last='no-op-module' \ ; RUN: -passes='default' -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-LAST,CHECK-O23 +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,%llvmcheckext,CHECK-EP-OPTIMIZER-LAST,CHECK-O23 ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='default' -enable-jump-table-to-switch -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23,CHECK-JUMP-TABLE-TO-SWITCH,%llvmcheckext +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,CHECK-O23,CHECK-JUMP-TABLE-TO-SWITCH,%llvmcheckext ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='default' -enable-matrix -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-MATRIX +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-MATRIX ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='default' -enable-merge-functions -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-MERGE-FUNCS +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-MERGE-FUNCS ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='default' -ir-outliner -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-IR-OUTLINER +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-IR-OUTLINER ; RUN: opt -disable-verify -verify-analysis-invalidation=0 -eagerly-invalidate-analyses=0 -debug-pass-manager \ ; RUN: -passes='default' -hot-cold-split -S %s 2>&1 \ -; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-HOT-COLD-SPLIT +; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-DEFAULT,CHECK-DEFAULT-O23,CHECK-O3,CHECK-O23,%llvmcheckext,CHECK-HOT-COLD-SPLIT ; CHECK-O: Running pass: Annotation2Metadata ; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass @@ -249,18 +249,18 @@ ; CHECK-O-NEXT: Running pass: LoopDistributePass ; CHECK-O-NEXT: Running analysis: LoopAccessAnalysis on foo ; CHECK-O-NEXT: Running pass: InjectTLIMappings -; CHECK-O-NEXT: Running pass: LoopVectorizePass +; CHECK-DEFAULT-NEXT: Running pass: LoopVectorizePass ; CHECK-DEFAULT-NEXT: Running pass: DropUnnecessaryAssumesPass ; CHECK-O-NEXT: Running pass: InferAlignmentPass ; CHECK-O-NEXT: Running pass: LoopLoadEliminationPass ; CHECK-O-NEXT: Running pass: InstCombinePass ; CHECK-O-NEXT: Running pass: SimplifyCFGPass -; CHECK-O23-NEXT: Running pass: SLPVectorizerPass +; CHECK-DEFAULT-O23-NEXT: Running pass: SLPVectorizerPass ; CHECK-O-NEXT: Running pass: VectorCombinePass -; CHECK-O-NEXT: Running pass: InstCombinePass -; CHECK-O-NEXT: Running pass: LoopUnrollPass -; CHECK-O-NEXT: Running pass: WarnMissedTransformationsPass -; CHECK-O-NEXT: Running pass: SROAPass +; CHECK-DEFAULT-NEXT: Running pass: InstCombinePass on foo (7 instructions) +; CHECK-DEFAULT-NEXT: Running pass: LoopUnrollPass on foo (7 instructions) +; CHECK-DEFAULT-NEXT: Running pass: WarnMissedTransformationsPass on foo (7 instructions) +; CHECK-DEFAULT-NEXT: Running pass: SROAPass on foo (7 instructions) ; CHECK-O-NEXT: Running pass: InferAlignmentPass ; CHECK-O-NEXT: Running pass: InstCombinePass ; CHECK-O-NEXT: Running pass: LoopSimplifyPass diff --git a/llvm/test/Other/new-pm-lto-defaults.ll b/llvm/test/Other/new-pm-lto-defaults.ll index 6d6d30298f7be..458f57bce6080 100644 --- a/llvm/test/Other/new-pm-lto-defaults.ll +++ b/llvm/test/Other/new-pm-lto-defaults.ll @@ -119,14 +119,15 @@ ; CHECK-O23-NEXT: Running pass: LCSSAPass on foo ; CHECK-O23-NEXT: Running pass: IndVarSimplifyPass on loop ; CHECK-O23-NEXT: Running pass: LoopDeletionPass on loop -; CHECK-O23-NEXT: Running pass: LoopFullUnrollPass on loop ; CHECK-O23-NEXT: Running pass: LoopDistributePass on foo ; CHECK-O23-NEXT: Running analysis: LoopAccessAnalysis on foo ; CHECK-O23-NEXT: Running pass: LoopVectorizePass on foo ; CHECK-O23-NEXT: Running analysis: DemandedBitsAnalysis on foo ; CHECK-O23-NEXT: Running pass: DropUnnecessaryAssumesPass on foo ; CHECK-O23-NEXT: Running pass: InferAlignmentPass on foo -; CHECK-O23-NEXT: Running pass: LoopUnrollPass on foo +; CHECK-O23-NEXT: Running pass: LoopSimplifyPass on foo +; CHECK-O23-NEXT: Running pass: LCSSAPass on foo +; CHECK-O23-NEXT: Running pass: LoopFullUnrollPass on loop %loop ; CHECK-O23-NEXT: WarnMissedTransformationsPass on foo ; CHECK-O23-NEXT: Running pass: SROAPass on foo ; CHECK-O23-NEXT: Running pass: InstCombinePass on foo @@ -136,6 +137,10 @@ ; CHECK-O23-NEXT: Running pass: BDCEPass on foo ; CHECK-O23-NEXT: Running pass: SLPVectorizerPass on foo ; CHECK-O23-NEXT: Running pass: VectorCombinePass on foo +; CHECK-O23-NEXT: Running pass: InstCombinePass on foo (7 instructions) +; CHECK-O23-NEXT: Running pass: LoopUnrollPass on foo (7 instructions) +; CHECK-O23-NEXT: Running pass: WarnMissedTransformationsPass on foo (7 instructions) +; CHECK-O23-NEXT: Running pass: SROAPass on foo (7 instructions) ; CHECK-O23-NEXT: Running pass: InferAlignmentPass on foo ; CHECK-O23-NEXT: Running pass: InstCombinePass on foo ; CHECK-O23-NEXT: Running pass: LoopSimplifyPass @@ -147,6 +152,11 @@ ; CHECK-O23-NEXT: Running pass: JumpThreadingPass on foo ; CHECK-O23-NEXT: Running pass: LowerTypeTestsPass ; CHECK-O-NEXT: Running pass: DropTypeTestsPass +; CHECK-O23-NEXT: Running pass: SimplifyCFGPass +; CHECK-O23-NEXT: Running pass: LoopSimplifyPass on foo +; CHECK-O23-NEXT: Running pass: LCSSAPass on foo +; CHECK-O23-NEXT: Running pass: LICMPass on loop %loop +; CHECK-O23-NEXT: Running pass: EarlyCSEPass on foo ; CHECK-O23-NEXT: Running pass: LoopSink ; CHECK-O23-NEXT: Running pass: DivRemPairs ; CHECK-O23-NEXT: Running pass: SimplifyCFGPass diff --git a/llvm/test/Transforms/FunctionSpecialization/recursive-penalty.ll b/llvm/test/Transforms/FunctionSpecialization/recursive-penalty.ll index fc17387dec94d..03eb8df046e5d 100644 --- a/llvm/test/Transforms/FunctionSpecialization/recursive-penalty.ll +++ b/llvm/test/Transforms/FunctionSpecialization/recursive-penalty.ll @@ -6,7 +6,7 @@ ; Make sure the number of specializations created are not ; linear to the number of iterations (funcspec-max-iters). -; CHECK: FnSpecialization: Created 4 specializations in module +; CHECK: FnSpecialization: Created 6 specializations in module @Global = internal constant i32 1, align 4