[flang-commits] [flang] 76f971b - [flang][nfc] Split out the pre- and post-cfg FIR pipelines (#218778)
via flang-commits
flang-commits at lists.llvm.org
Tue Aug 25 15:46:01 PDT 2026
Author: Ivan R. Ivanov
Date: 2026-08-26T00:45:56+02:00
New Revision: 76f971b1ebb5f1c95bf250e649afafc88d7d9226
URL: https://github.com/llvm/llvm-project/commit/76f971b1ebb5f1c95bf250e649afafc88d7d9226
DIFF: https://github.com/llvm/llvm-project/commit/76f971b1ebb5f1c95bf250e649afafc88d7d9226.diff
LOG: [flang][nfc] Split out the pre- and post-cfg FIR pipelines (#218778)
Split the FIR optimization pipeline in its pre- and post-cfg parts and
expose the builders so that alternative downstream pipelines can build
around them.
Added:
Modified:
flang/include/flang/Optimizer/Passes/Pipelines.h
flang/lib/Optimizer/Passes/Pipelines.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Optimizer/Passes/Pipelines.h b/flang/include/flang/Optimizer/Passes/Pipelines.h
index c50d41844941e..726607613260a 100644
--- a/flang/include/flang/Optimizer/Passes/Pipelines.h
+++ b/flang/include/flang/Optimizer/Passes/Pipelines.h
@@ -136,6 +136,16 @@ void registerDefaultInlinerPass(MLIRToLLVMPassPipelineConfig &config);
/// e.g. --mlir-print-ir-before=<pass> and similar.
void registerFlangPipelinePasses();
+/// Create a pass pipeline for default FIR optimizations that run before CFG
+/// conversion.
+void createDefaultFIRPreCFGOptimizerPassPipeline(
+ mlir::PassManager &pm, MLIRToLLVMPassPipelineConfig &pc);
+
+/// Create a pass pipeline for default FIR optimizations that run after CFG
+/// conversion.
+void createDefaultFIRPostCFGOptimizerPassPipeline(
+ mlir::PassManager &pm, MLIRToLLVMPassPipelineConfig &pc);
+
/// Create a pass pipeline for running default optimization passes for
/// incremental conversion of FIR.
///
diff --git a/flang/lib/Optimizer/Passes/Pipelines.cpp b/flang/lib/Optimizer/Passes/Pipelines.cpp
index 232b27a148ab2..4c5fd32cf342b 100644
--- a/flang/lib/Optimizer/Passes/Pipelines.cpp
+++ b/flang/lib/Optimizer/Passes/Pipelines.cpp
@@ -173,15 +173,8 @@ void registerDefaultInlinerPass(MLIRToLLVMPassPipelineConfig &config) {
});
}
-/// Create a pass pipeline for running default optimization passes for
-/// incremental conversion of FIR.
-///
-/// \param pm - MLIR pass manager that will hold the pipeline definition
-void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
- MLIRToLLVMPassPipelineConfig &pc) {
- // Early Optimizer EP Callback
- pc.invokeFIROptEarlyEPCallbacks(pm, pc.OptLevel);
-
+void createDefaultFIRPreCFGOptimizerPassPipeline(
+ mlir::PassManager &pm, MLIRToLLVMPassPipelineConfig &pc) {
// simplify the IR
mlir::GreedyRewriteConfig config;
config.setRegionSimplificationLevel(
@@ -245,8 +238,14 @@ void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
addNestedPassToAllTopLevelOperations<PassConstructor>(
pm, fir::createStackReclaim);
- // convert control flow to CFG form
- fir::addCfgConversionPass(pm, pc);
+}
+
+void createDefaultFIRPostCFGOptimizerPassPipeline(
+ mlir::PassManager &pm, MLIRToLLVMPassPipelineConfig &pc) {
+ mlir::GreedyRewriteConfig config;
+ config.setRegionSimplificationLevel(
+ mlir::GreedySimplifyRegionLevel::Disabled);
+
pm.addPass(mlir::createSCFToControlFlowPass());
pm.addPass(mlir::createCanonicalizerPass(config));
@@ -257,8 +256,18 @@ void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
if (pc.OptLevel != llvm::OptimizationLevel::O0)
pm.addPass(fir::createSetRuntimeCallAttributes());
+}
- // Last Optimizer EP Callback
+/// Create a pass pipeline for running default optimization passes for
+/// incremental conversion of FIR.
+///
+/// \param pm - MLIR pass manager that will hold the pipeline definition
+void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
+ MLIRToLLVMPassPipelineConfig &pc) {
+ pc.invokeFIROptEarlyEPCallbacks(pm, pc.OptLevel);
+ createDefaultFIRPreCFGOptimizerPassPipeline(pm, pc);
+ fir::addCfgConversionPass(pm, pc);
+ createDefaultFIRPostCFGOptimizerPassPipeline(pm, pc);
pc.invokeFIROptLastEPCallbacks(pm, pc.OptLevel);
}
More information about the flang-commits
mailing list