[PATCH] D127770: [NFC] integrate Function SLU into O3
Ruobing Han via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 14 10:59:39 PDT 2022
drcut created this revision.
Herald added a subscriber: hiraditya.
Herald added a project: All.
drcut requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Integrate FunctionPass LoopUnswitch implementation into the O3 <https://reviews.llvm.org/owners/package/3/> pipeline. In default, it will not be invoked.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D127770
Files:
llvm/lib/Passes/PassBuilderPipelines.cpp
Index: llvm/lib/Passes/PassBuilderPipelines.cpp
===================================================================
--- llvm/lib/Passes/PassBuilderPipelines.cpp
+++ llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -182,6 +182,10 @@
"enable-merge-functions", cl::init(false), cl::Hidden,
cl::desc("Enable function merging as part of the optimization pipeline"));
+static cl::opt<bool> UseFuncPassNonTrivialLoopUnswitch(
+ "use-funcpass-nontrivial-unswitch", cl::init(false), cl::Hidden,
+ cl::desc("Use FuncPass implementation for non-trivial LoopUnswitch"));
+
PipelineTuningOptions::PipelineTuningOptions() {
LoopInterleaving = true;
LoopVectorization = true;
@@ -487,11 +491,19 @@
// TODO: Investigate promotion cap for O1.
LPM1.addPass(LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
/*AllowSpeculation=*/true));
- LPM1.addPass(
- SimpleLoopUnswitchPass(/* NonTrivial */ Level == OptimizationLevel::O3 &&
- EnableO3NonTrivialUnswitching));
- if (EnableLoopFlatten)
- LPM1.addPass(LoopFlattenPass());
+ bool RequireFuncNonTrivialUnswitching = (Level == OptimizationLevel::O3) &&
+ EnableO3NonTrivialUnswitching &&
+ UseFuncPassNonTrivialLoopUnswitch;
+ if (!RequireFuncNonTrivialUnswitching) {
+ LPM1.addPass(
+ SimpleLoopUnswitchPass(/* NonTrivial */ Level == OptimizationLevel::O3 &&
+ EnableO3NonTrivialUnswitching));
+ if (EnableLoopFlatten)
+ LPM1.addPass(LoopFlattenPass());
+ } else {
+ LPM1.addPass(SimpleLoopUnswitchPass(
+ /* NonTrivial */ false));
+ }
LPM2.addPass(LoopIdiomRecognizePass());
LPM2.addPass(IndVarSimplifyPass());
@@ -525,6 +537,17 @@
FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM1),
/*UseMemorySSA=*/true,
/*UseBlockFrequencyInfo=*/true));
+ if (RequireFuncNonTrivialUnswitching) {
+ FPM.addPass(FuncSimpleLoopUnswitchPass());
+ if (EnableLoopFlatten) {
+ // CFGs generated by FuncSLU should be simplified before LoopFlatten
+ FPM.addPass(
+ SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(true)));
+ FPM.addPass(createFunctionToLoopPassAdaptor(
+ LoopFlattenPass(),
+ /*UseMemorySSA=*/true, /*UseBlockFrequencyInfo=*/true));
+ }
+ }
FPM.addPass(
SimplifyCFGPass(SimplifyCFGOptions().convertSwitchRangeToICmp(true)));
FPM.addPass(InstCombinePass());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127770.436858.patch
Type: text/x-patch
Size: 2624 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220614/fcf6a84e/attachment.bin>
More information about the llvm-commits
mailing list