Skip to content

Commit 7bc0177

Browse files
authored
[flang] run character conversion pass on all top level ops (#89910)
See RFC: https://discourse.llvm.org/t/rfc-add-an-interface-for-top-level-container-operations Some of the changes are from moving declaration and definition of the constructor function into tablegen (as requested in code review when altering another pass).
1 parent fe47e8f commit 7bc0177

File tree

8 files changed

+24
-7
lines changed

8 files changed

+24
-7
lines changed

flang/include/flang/Optimizer/Transforms/Passes.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ namespace fir {
5252
std::unique_ptr<mlir::Pass> createAffineDemotionPass();
5353
std::unique_ptr<mlir::Pass>
5454
createArrayValueCopyPass(fir::ArrayValueCopyOptions options = {});
55-
std::unique_ptr<mlir::Pass> createCharacterConversionPass();
5655
std::unique_ptr<mlir::Pass> createExternalNameConversionPass();
5756
std::unique_ptr<mlir::Pass>
5857
createExternalNameConversionPass(bool appendUnderscore);

flang/include/flang/Optimizer/Transforms/Passes.td

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ def CharacterConversion : Pass<"character-conversion"> {
127127
By default the translation is to naively zero-extend or truncate a code
128128
point to fit the destination size.
129129
}];
130-
let constructor = "::fir::createCharacterConversionPass()";
131130
let dependentDialects = [ "fir::FIROpsDialect" ];
132131
let options = [
133132
Option<"useRuntimeCalls", "use-runtime-calls",

flang/include/flang/Tools/CLOptions.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ inline void createDefaultFIROptimizerPassPipeline(
243243
config.enableRegionSimplification = false;
244244
pm.addPass(mlir::createCSEPass());
245245
fir::addAVC(pm, pc.OptLevel);
246-
pm.addNestedPass<mlir::func::FuncOp>(fir::createCharacterConversionPass());
246+
addNestedPassToAllTopLevelOperations(pm, fir::createCharacterConversion);
247247
pm.addPass(mlir::createCanonicalizerPass(config));
248248
pm.addPass(fir::createSimplifyRegionLitePass());
249249
if (pc.OptLevel.isOptimizingForSpeed()) {

flang/lib/Optimizer/Transforms/CharacterConversion.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ class CharacterConvertConversion
102102
class CharacterConversion
103103
: public fir::impl::CharacterConversionBase<CharacterConversion> {
104104
public:
105+
using fir::impl::CharacterConversionBase<
106+
CharacterConversion>::CharacterConversionBase;
107+
105108
void runOnOperation() override {
106109
CharacterConversionOptions clOpts{useRuntimeCalls.getValue()};
107110
if (clOpts.runtimeName.empty()) {
@@ -130,7 +133,3 @@ class CharacterConversion
130133
}
131134
};
132135
} // end anonymous namespace
133-
134-
std::unique_ptr<mlir::Pass> fir::createCharacterConversionPass() {
135-
return std::make_unique<CharacterConversion>();
136-
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,14 @@
1717
! CHECK-NEXT: (S) 0 num-cse'd - Number of operations CSE'd
1818
! CHECK-NEXT: (S) 0 num-dce'd - Number of operations DCE'd
1919

20+
! CHECK-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction']
21+
! CHECK-NEXT: 'fir.global' Pipeline
22+
! CHECK-NEXT: CharacterConversion
2023
! CHECK-NEXT: 'func.func' Pipeline
2124
! CHECK-NEXT: ArrayValueCopy
2225
! CHECK-NEXT: CharacterConversion
26+
! CHECK-NEXT: 'omp.declare_reduction' Pipeline
27+
! CHECK-NEXT: CharacterConversion
2328

2429
! CHECK-NEXT: Canonicalizer
2530
! CHECK-NEXT: SimplifyRegionLite

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,14 @@
3939
! ALL-NEXT: (S) 0 num-cse'd - Number of operations CSE'd
4040
! ALL-NEXT: (S) 0 num-dce'd - Number of operations DCE'd
4141

42+
! ALL-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction']
43+
! ALL-NEXT: 'fir.global' Pipeline
44+
! ALL-NEXT: CharacterConversion
4245
! ALL-NEXT: 'func.func' Pipeline
4346
! ALL-NEXT: ArrayValueCopy
4447
! ALL-NEXT: CharacterConversion
48+
! ALL-NEXT: 'omp.declare_reduction' Pipeline
49+
! ALL-NEXT: CharacterConversion
4550

4651
! ALL-NEXT: Canonicalizer
4752
! ALL-NEXT: SimplifyRegionLite

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,14 @@
2828
! ALL-NEXT: (S) 0 num-cse'd - Number of operations CSE'd
2929
! ALL-NEXT: (S) 0 num-dce'd - Number of operations DCE'd
3030

31+
! ALL-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction']
32+
! ALL-NEXT: 'fir.global' Pipeline
33+
! ALL-NEXT: CharacterConversion
3134
! ALL-NEXT: 'func.func' Pipeline
3235
! ALL-NEXT: ArrayValueCopy
3336
! ALL-NEXT: CharacterConversion
37+
! ALL-NEXT: 'omp.declare_reduction' Pipeline
38+
! ALL-NEXT: CharacterConversion
3439

3540
! ALL-NEXT: Canonicalizer
3641
! ALL-NEXT: SimplifyRegionLite

flang/test/Fir/basic-program.fir

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,14 @@ func.func @_QQmain() {
3434
// PASSES-NEXT: (S) 0 num-cse'd - Number of operations CSE'd
3535
// PASSES-NEXT: (S) 0 num-dce'd - Number of operations DCE'd
3636

37+
// PASSES-NEXT: Pipeline Collection : ['fir.global', 'func.func', 'omp.declare_reduction']
38+
// PASSES-NEXT: 'fir.global' Pipeline
39+
// PASSES-NEXT: CharacterConversion
3740
// PASSES-NEXT: 'func.func' Pipeline
3841
// PASSES-NEXT: ArrayValueCopy
3942
// PASSES-NEXT: CharacterConversion
43+
// PASSES-NEXT: 'omp.declare_reduction' Pipeline
44+
// PASSES-NEXT: CharacterConversion
4045

4146
// PASSES-NEXT: Canonicalizer
4247
// PASSES-NEXT: SimplifyRegionLite

0 commit comments

Comments
 (0)