[llvm] Disable pre-link LTO vectorisation and tweak LTO pipeline (PR #195886)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 5 10:28:20 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-function-specialization
Author: Momchil Velikov (momchil-velikov)
<details>
<summary>Changes</summary>
[[RFC] Disable pre-LTO loop vectorisation](https://github.com/llvm/llvm-project/pull/192068)
Patches in order:
**Disable pre-LTO `LoopVectorizePass` and `SLPVectorizerPass`**
**Disable pre-LTO `LoopUnrollPass`**
A number of loops end up as runtime-unrolled where in the original compiler they are vectorised+unrolled; the epilogue part of the runtime-unrolled loops persists through optimisations and is left in the final binary.
**Adjust `FunctionSpecialization` parameters**
Address performance regressions; because of the differences in loop unrolling, resp. function sizes, the `FunctionSpecialization` starts missing some profitable specialisations.
**Move `LoopFullUnrollPass` after `LoopVectorizePass` in LTO pipeline**
Some functions were vectorised in the pre-LTO pipeline in the original compiler and unrolled/not-vectorised by `LoopFullUnrollPass` during LTO in the modified compiler.
**Add extra `SimplifyCFG`, `LICM`, and `EarlyCSE` to the late passes**
After the patches above there are still scattered opportunities for LICM and CSE, which show up as regressions.
(A variant of this change used GVN with marginally better results, however GVN PRE of loads combined with LICM memory value promotion resulted in massive regression due to excessive spills/reloads).
---
Patch is 20.81 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/195886.diff
5 Files Affected:
- (modified) llvm/lib/Passes/PassBuilderPipelines.cpp (+46-17)
- (modified) llvm/lib/Transforms/IPO/FunctionSpecialization.cpp (+3-3)
- (modified) llvm/test/Other/new-pm-defaults.ll (+23-23)
- (modified) llvm/test/Other/new-pm-lto-defaults.ll (+12-2)
- (modified) llvm/test/Transforms/FunctionSpecialization/recursive-penalty.ll (+1-1)
``````````diff
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp
index 319ea2f3a69a1..7a1b8cb814e2e 100644
--- a/llvm/lib/Passes/PassBuilderPipelines.cpp
+++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -430,12 +430,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.
@@ -1314,10 +1324,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.
@@ -1325,7 +1335,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
@@ -1335,11 +1346,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
@@ -1350,7 +1365,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());
@@ -1400,14 +1415,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());
@@ -1416,7 +1431,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
@@ -2217,12 +2232,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));
@@ -2257,6 +2270,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
@@ -2274,6 +2302,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..c3963e28a09c4 100644
--- a/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
@@ -63,9 +63,9 @@ static cl::opt<unsigned> MinFunctionSize(
cl::desc("Don't specialize functions that have less than this number of "
"instructions"));
-static cl::opt<unsigned> MaxCodeSizeGrowth(
- "funcspec-max-codesize-growth", cl::init(3), cl::Hidden, cl::desc(
- "Maximum codesize growth allowed per function"));
+static cl::opt<unsigned>
+ MaxCodeSizeGrowth("funcspec-max-codesize-growth", cl::init(4), cl::Hidden,
+ cl::desc("Maximum codesize growth allowed per function"));
static cl::opt<unsigned> MinCodeSizeSavings(
"funcspec-min-codesize-savings", cl::init(20), cl::Hidden,
diff --git a/llvm/test/Other/new-pm-defaults.ll b/llvm/test/Other/new-pm-defaults.ll
index 3048206add4e2..5b4d8ad6cb66d 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<O2>' -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<O3>' -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<O2>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -S %s 2>&1 \
@@ -63,27 +63,27 @@
; 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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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<O3>' -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
@@ -245,18 +245,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
+; CHECK-DEFAULT-NEXT: Running pass: LoopUnrollPass
+; CHECK-DEFAULT-NEXT: Running pass: WarnMissedTransformationsPass
+; CHECK-DEFAULT-NEXT: Running pass: SROAPass
; 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..a1329b63fefc0 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
+; CHECK-O23-NEXT: Running pass: LoopUnrollPass on foo
+; CHECK-O23-NEXT: Running pass: WarnMissedTransformationsPass on foo
+; CHECK-O23-NEXT: Running pass: SROAPass on foo
; 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
+;...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/195886
More information about the llvm-commits
mailing list