Skip to content

Commit 605ae4e

Browse files
authored
[flang][HLFIR] Adapt SimplifyHLFIRIntrinsics to run on all top level ops (#92573)
This means that this pass will also run on hlfir intrinsics which are not inside of functions. See RFC: https://discourse.llvm.org/t/rfc-add-an-interface-for-top-level-container-operations Some of the changes are from moving the declaration and definition of the constructor into tablegen (as requested during code review of another pass).
1 parent 2141907 commit 605ae4e

File tree

6 files changed

+21
-13
lines changed

6 files changed

+21
-13
lines changed

flang/include/flang/Optimizer/HLFIR/Passes.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ namespace hlfir {
2525
std::unique_ptr<mlir::Pass> createConvertHLFIRtoFIRPass();
2626
std::unique_ptr<mlir::Pass> createBufferizeHLFIRPass();
2727
std::unique_ptr<mlir::Pass> createLowerHLFIRIntrinsicsPass();
28-
std::unique_ptr<mlir::Pass> createSimplifyHLFIRIntrinsicsPass();
2928
std::unique_ptr<mlir::Pass> createInlineElementalsPass();
3029
std::unique_ptr<mlir::Pass> createLowerHLFIROrderedAssignmentsPass();
3130
std::unique_ptr<mlir::Pass> createOptimizedBufferizationPass();

flang/include/flang/Optimizer/HLFIR/Passes.td

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,8 @@ def LowerHLFIROrderedAssignments : Pass<"lower-hlfir-ordered-assignments", "::ml
4646
];
4747
}
4848

49-
def SimplifyHLFIRIntrinsics : Pass<"simplify-hlfir-intrinsics", "::mlir::func::FuncOp"> {
49+
def SimplifyHLFIRIntrinsics : Pass<"simplify-hlfir-intrinsics"> {
5050
let summary = "Simplify HLFIR intrinsic operations that don't need to result in runtime calls";
51-
let constructor = "hlfir::createSimplifyHLFIRIntrinsicsPass()";
5251
}
5352

5453
def InlineElementals : Pass<"inline-elementals", "::mlir::func::FuncOp"> {

flang/include/flang/Tools/CLOptions.inc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,8 @@ inline void createHLFIRToFIRPassPipeline(
317317
mlir::PassManager &pm, llvm::OptimizationLevel optLevel = defaultOptLevel) {
318318
if (optLevel.isOptimizingForSpeed()) {
319319
addCanonicalizerPassWithoutRegionSimplification(pm);
320-
pm.addPass(hlfir::createSimplifyHLFIRIntrinsicsPass());
320+
addNestedPassToAllTopLevelOperations(
321+
pm, hlfir::createSimplifyHLFIRIntrinsics);
321322
}
322323
pm.addPass(hlfir::createInlineElementalsPass());
323324
if (optLevel.isOptimizingForSpeed()) {

flang/lib/Optimizer/HLFIR/Transforms/SimplifyHLFIRIntrinsics.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ class SimplifyHLFIRIntrinsics
9494
: public hlfir::impl::SimplifyHLFIRIntrinsicsBase<SimplifyHLFIRIntrinsics> {
9595
public:
9696
void runOnOperation() override {
97-
mlir::func::FuncOp func = this->getOperation();
9897
mlir::MLIRContext *context = &getContext();
9998
mlir::RewritePatternSet patterns(context);
10099
patterns.insert<TransposeAsElementalConversion>(context);
@@ -108,16 +107,12 @@ class SimplifyHLFIRIntrinsics
108107
});
109108
target.markUnknownOpDynamicallyLegal(
110109
[](mlir::Operation *) { return true; });
111-
if (mlir::failed(
112-
mlir::applyFullConversion(func, target, std::move(patterns)))) {
113-
mlir::emitError(func->getLoc(),
110+
if (mlir::failed(mlir::applyFullConversion(getOperation(), target,
111+
std::move(patterns)))) {
112+
mlir::emitError(getOperation()->getLoc(),
114113
"failure in HLFIR intrinsic simplification");
115114
signalPassFailure();
116115
}
117116
}
118117
};
119118
} // namespace
120-
121-
std::unique_ptr<mlir::Pass> hlfir::createSimplifyHLFIRIntrinsicsPass() {
122-
return std::make_unique<SimplifyHLFIRIntrinsics>();
123-
}

flang/test/Driver/mlir-pass-pipeline.f90

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,16 @@
1313

1414
! ALL: Fortran::lower::VerifierPass
1515
! O2-NEXT: Canonicalizer
16-
! O2-NEXT: 'func.func' Pipeline
16+
! O2-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction', 'omp.private']
17+
! O2-NEXT: 'fir.global' Pipeline
18+
! O2-NEXT: SimplifyHLFIRIntrinsics
19+
! ALL: 'func.func' Pipeline
1720
! O2-NEXT: SimplifyHLFIRIntrinsics
1821
! ALL: InlineElementals
22+
! O2-NEXT: 'omp.declare_reduction' Pipeline
23+
! O2-NEXT: SimplifyHLFIRIntrinsics
24+
! O2-NEXT: 'omp.private' Pipeline
25+
! O2-NEXT: SimplifyHLFIRIntrinsics
1926
! ALL: LowerHLFIROrderedAssignments
2027
! ALL-NEXT: LowerHLFIRIntrinsics
2128
! ALL-NEXT: BufferizeHLFIR

flang/test/Fir/basic-program.fir

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,16 @@ func.func @_QQmain() {
1717
// PASSES: Pass statistics report
1818

1919
// PASSES: Canonicalizer
20+
// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction', 'omp.private']
21+
// PASSES-NEXT: 'fir.global' Pipeline
22+
// PASSES-NEXT: SimplifyHLFIRIntrinsics
2023
// PASSES-NEXT: 'func.func' Pipeline
2124
// PASSES-NEXT: SimplifyHLFIRIntrinsics
2225
// PASSES-NEXT: InlineElementals
26+
// PASSES-NEXT: 'omp.declare_reduction' Pipeline
27+
// PASSES-NEXT: SimplifyHLFIRIntrinsics
28+
// PASSES-NEXT: 'omp.private' Pipeline
29+
// PASSES-NEXT: SimplifyHLFIRIntrinsics
2330
// PASSES-NEXT: Canonicalizer
2431
// PASSES-NEXT: CSE
2532
// PASSES-NEXT: (S) 0 num-cse'd - Number of operations CSE'd

0 commit comments

Comments
 (0)