[llvm-branch-commits] [LTO] Enable PrepareForLTO in pre-link pipelines (PR #229151)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Oct 5 09:51:06 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
This reverts 272ad5da54a63a16312e8c3ba0de4290d4931002. This should not
have any impact on CodeGeneration given PrepareForLTO is now a no-op
currently in LoopUnroll. This just gets the plumbing done for some
future planned uses around respecting pragmas.
This also pulls in changes from #<!-- -->219604 to be complete.
---
Full diff: https://github.com/llvm/llvm-project/pull/229151.diff
2 Files Affected:
- (modified) llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h (+2-2)
- (modified) llvm/lib/Passes/PassBuilderPipelines.cpp (+6-3)
``````````diff
diff --git a/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h b/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h
index ea2d8576d15cb..328a027bbb553 100644
--- a/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h
+++ b/llvm/include/llvm/Transforms/Scalar/LoopUnrollPass.h
@@ -88,9 +88,9 @@ struct LoopUnrollOptions {
bool PrepareForLTO = false;
LoopUnrollOptions(int OptLevel = 2, bool OnlyWhenForced = false,
- bool ForgetSCEV = false)
+ bool ForgetSCEV = false, bool PrepareForLTO = false)
: OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced),
- ForgetSCEV(ForgetSCEV) {}
+ ForgetSCEV(ForgetSCEV), PrepareForLTO(PrepareForLTO) {}
/// Enables or disables partial unrolling. When disabled only full unrolling
/// is allowed.
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp
index bd37fffc8e991..85a854b6584cb 100644
--- a/llvm/lib/Passes/PassBuilderPipelines.cpp
+++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -577,7 +577,8 @@ PassBuilder::buildO1FunctionSimplificationPipeline(OptimizationLevel Level,
PGOOpt->Action != PGOOptions::SampleUse)
LPM2.addPass(LoopFullUnrollPass(static_cast<int>(Level),
/* OnlyWhenForced= */ !PTO.LoopUnrolling,
- PTO.ForgetAllSCEVInLoopUnroll));
+ PTO.ForgetAllSCEVInLoopUnroll,
+ /*PrepareForLTO=*/isLTOPreLink(Phase)));
invokeLoopOptimizerEndEPCallbacks(LPM2, Level);
@@ -759,7 +760,8 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
PGOOpt->Action != PGOOptions::SampleUse)
LPM2.addPass(LoopFullUnrollPass(static_cast<int>(Level),
/* OnlyWhenForced= */ !PTO.LoopUnrolling,
- PTO.ForgetAllSCEVInLoopUnroll));
+ PTO.ForgetAllSCEVInLoopUnroll,
+ /*PrepareForLTO=*/isLTOPreLink(Phase)));
invokeLoopOptimizerEndEPCallbacks(LPM2, Level);
@@ -1477,7 +1479,8 @@ void PassBuilder::addVectorPasses(OptimizationLevel Level,
}
FPM.addPass(LoopUnrollPass(LoopUnrollOptions(
static_cast<int>(Level), /*OnlyWhenForced=*/!PTO.LoopUnrolling,
- PTO.ForgetAllSCEVInLoopUnroll)));
+ PTO.ForgetAllSCEVInLoopUnroll,
+ /*PrepareForLTO=*/isLTOPreLink(LTOPhase))));
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
``````````
</details>
https://github.com/llvm/llvm-project/pull/229151
More information about the llvm-branch-commits
mailing list