13
13
14
14
namespace fir {
15
15
16
- void addNestedPassToAllTopLevelOperations (mlir::PassManager &pm,
17
- PassConstructor ctor) {
18
- addNestedPassToOps<mlir::func::FuncOp, mlir::omp::DeclareReductionOp,
16
+ template < typename F>
17
+ void addNestedPassToAllTopLevelOperations (mlir::PassManager &pm, F ctor) {
18
+ addNestedPassToOps<F, mlir::func::FuncOp, mlir::omp::DeclareReductionOp,
19
19
mlir::omp::PrivateClauseOp, fir::GlobalOp>(pm, ctor);
20
20
}
21
21
@@ -25,11 +25,11 @@ void addPassToGPUModuleOperations(mlir::PassManager &pm, PassConstructor ctor) {
25
25
nestPM.addNestedPass <mlir::gpu::GPUFuncOp>(ctor ());
26
26
}
27
27
28
+ template <typename F>
28
29
void addNestedPassToAllTopLevelOperationsConditionally (
29
- mlir::PassManager &pm, llvm::cl::opt<bool > &disabled,
30
- PassConstructor ctor) {
30
+ mlir::PassManager &pm, llvm::cl::opt<bool > &disabled, F ctor) {
31
31
if (!disabled)
32
- addNestedPassToAllTopLevelOperations (pm, ctor);
32
+ addNestedPassToAllTopLevelOperations<F> (pm, ctor);
33
33
}
34
34
35
35
void addCanonicalizerPassWithoutRegionSimplification (mlir::OpPassManager &pm) {
@@ -40,12 +40,11 @@ void addCanonicalizerPassWithoutRegionSimplification(mlir::OpPassManager &pm) {
40
40
41
41
void addCfgConversionPass (mlir::PassManager &pm,
42
42
const MLIRToLLVMPassPipelineConfig &config) {
43
- if (config.NSWOnLoopVarInc )
44
- addNestedPassToAllTopLevelOperationsConditionally (pm, disableCfgConversion,
45
- fir::createCFGConversion);
46
- else
47
- addNestedPassToAllTopLevelOperationsConditionally (
48
- pm, disableCfgConversion, fir::createCFGConversionPassWithoutNSW);
43
+ fir::CFGConversionOptions options;
44
+ if (!config.NSWOnLoopVarInc )
45
+ options.setNSW = false ;
46
+ addNestedPassToAllTopLevelOperationsConditionally (
47
+ pm, disableCfgConversion, [&]() { return createCFGConversion (options); });
49
48
}
50
49
51
50
void addAVC (mlir::PassManager &pm, const llvm::OptimizationLevel &optLevel) {
@@ -166,7 +165,8 @@ void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
166
165
config.enableRegionSimplification = mlir::GreedySimplifyRegionLevel::Disabled;
167
166
pm.addPass (mlir::createCSEPass ());
168
167
fir::addAVC (pm, pc.OptLevel );
169
- addNestedPassToAllTopLevelOperations (pm, fir::createCharacterConversion);
168
+ addNestedPassToAllTopLevelOperations<PassConstructor>(
169
+ pm, fir::createCharacterConversion);
170
170
pm.addPass (mlir::createCanonicalizerPass (config));
171
171
pm.addPass (fir::createSimplifyRegionLite ());
172
172
if (pc.OptLevel .isOptimizingForSpeed ()) {
@@ -200,7 +200,8 @@ void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
200
200
if (pc.AliasAnalysis && !disableFirAliasTags && !useOldAliasTags)
201
201
pm.addPass (fir::createAddAliasTags ());
202
202
203
- addNestedPassToAllTopLevelOperations (pm, fir::createStackReclaim);
203
+ addNestedPassToAllTopLevelOperations<PassConstructor>(
204
+ pm, fir::createStackReclaim);
204
205
// convert control flow to CFG form
205
206
fir::addCfgConversionPass (pm, pc);
206
207
pm.addPass (mlir::createConvertSCFToCFPass ());
@@ -222,15 +223,16 @@ void createHLFIRToFIRPassPipeline(mlir::PassManager &pm, bool enableOpenMP,
222
223
llvm::OptimizationLevel optLevel) {
223
224
if (optLevel.isOptimizingForSpeed ()) {
224
225
addCanonicalizerPassWithoutRegionSimplification (pm);
225
- addNestedPassToAllTopLevelOperations (pm,
226
- hlfir::createSimplifyHLFIRIntrinsics);
226
+ addNestedPassToAllTopLevelOperations<PassConstructor>(
227
+ pm, hlfir::createSimplifyHLFIRIntrinsics);
227
228
}
228
- addNestedPassToAllTopLevelOperations (pm, hlfir::createInlineElementals);
229
+ addNestedPassToAllTopLevelOperations<PassConstructor>(
230
+ pm, hlfir::createInlineElementals);
229
231
if (optLevel.isOptimizingForSpeed ()) {
230
232
addCanonicalizerPassWithoutRegionSimplification (pm);
231
233
pm.addPass (mlir::createCSEPass ());
232
- addNestedPassToAllTopLevelOperations (pm,
233
- hlfir::createOptimizedBufferization);
234
+ addNestedPassToAllTopLevelOperations<PassConstructor>(
235
+ pm, hlfir::createOptimizedBufferization);
234
236
}
235
237
pm.addPass (hlfir::createLowerHLFIROrderedAssignments ());
236
238
pm.addPass (hlfir::createLowerHLFIRIntrinsics ());
@@ -270,7 +272,8 @@ void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm,
270
272
MLIRToLLVMPassPipelineConfig config,
271
273
llvm::StringRef inputFilename) {
272
274
fir::addBoxedProcedurePass (pm);
273
- addNestedPassToAllTopLevelOperations (pm, fir::createAbstractResultOpt);
275
+ addNestedPassToAllTopLevelOperations<PassConstructor>(
276
+ pm, fir::createAbstractResultOpt);
274
277
addPassToGPUModuleOperations (pm, fir::createAbstractResultOpt);
275
278
fir::addCodeGenRewritePass (
276
279
pm, (config.DebugInfo != llvm::codegenoptions::NoDebugInfo));
0 commit comments