diff --git a/flang/lib/Optimizer/Passes/Pipelines.cpp b/flang/lib/Optimizer/Passes/Pipelines.cpp index 0743fb60aa847..90d5e962d826d 100644 --- a/flang/lib/Optimizer/Passes/Pipelines.cpp +++ b/flang/lib/Optimizer/Passes/Pipelines.cpp @@ -16,8 +16,13 @@ namespace fir { void addNestedPassToAllTopLevelOperations(mlir::PassManager &pm, PassConstructor ctor) { addNestedPassToOps(pm, ctor); + mlir::omp::PrivateClauseOp, fir::GlobalOp>(pm, ctor); +} + +void addPassToGPUModuleOperations(mlir::PassManager &pm, PassConstructor ctor) { + mlir::OpPassManager &nestPM = pm.nest(); + nestPM.addNestedPass(ctor()); + nestPM.addNestedPass(ctor()); } void addNestedPassToAllTopLevelOperationsConditionally( @@ -266,6 +271,7 @@ void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm, llvm::StringRef inputFilename) { fir::addBoxedProcedurePass(pm); addNestedPassToAllTopLevelOperations(pm, fir::createAbstractResultOpt); + addPassToGPUModuleOperations(pm, fir::createAbstractResultOpt); fir::addCodeGenRewritePass( pm, (config.DebugInfo != llvm::codegenoptions::NoDebugInfo)); fir::addExternalNameConversionPass(pm, config.Underscoring); diff --git a/flang/lib/Optimizer/Transforms/AbstractResult.cpp b/flang/lib/Optimizer/Transforms/AbstractResult.cpp index 2eca349110f3a..2ed66cc83eefb 100644 --- a/flang/lib/Optimizer/Transforms/AbstractResult.cpp +++ b/flang/lib/Optimizer/Transforms/AbstractResult.cpp @@ -460,17 +460,10 @@ class AbstractResultOpt const bool shouldBoxResult = this->passResultAsBox.getValue(); mlir::TypeSwitch(op) - .Case([&](auto op) { - runOnSpecificOperation(op, shouldBoxResult, patterns, target); - }) - .Case([&](auto op) { - auto gpuMod = mlir::dyn_cast(*op); - for (auto funcOp : gpuMod.template getOps()) - runOnSpecificOperation(funcOp, shouldBoxResult, patterns, target); - for (auto gpuFuncOp : gpuMod.template getOps()) - runOnSpecificOperation(gpuFuncOp, shouldBoxResult, patterns, - target); - }); + .Case( + [&](auto op) { + runOnSpecificOperation(op, shouldBoxResult, patterns, target); + }); // Convert the calls and, if needed, the ReturnOp in the function body. target.addLegalDialect