[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