[flang-commits] [flang] f1d4cef - [flang] Add ExternalNameConversionPass to pass pipeline

Diana Picus via flang-commits flang-commits at lists.llvm.org
Fri May 6 01:03:49 PDT 2022


Author: Diana Picus
Date: 2022-05-06T07:50:43Z
New Revision: f1d4cef8528eceef4d6aaaae1f99d927fd5c370d

URL: https://github.com/llvm/llvm-project/commit/f1d4cef8528eceef4d6aaaae1f99d927fd5c370d
DIFF: https://github.com/llvm/llvm-project/commit/f1d4cef8528eceef4d6aaaae1f99d927fd5c370d.diff

LOG: [flang] Add ExternalNameConversionPass to pass pipeline

This seems to be the consensus in
https://github.com/flang-compiler/f18-llvm-project/issues/1316

The patch adds ExternalNameConversion to the default FIR CodeGen pass
pipeline, right before the FIRtoLLVM pass. It also adds a flag to
optionally disable it, and sets it in `tco`. In other words, `flang-new`
and `flang-new -fc1` will both run the pass by default, whereas `tco`
will not, so none of the tests need to be updated.

Differential Revision: https://reviews.llvm.org/D121171

Added: 
    flang/test/Driver/disable-ext-name-interop.f90
    flang/test/Driver/mlir-pass-pipeline.f90

Modified: 
    flang/include/flang/Tools/CLOptions.inc
    flang/test/Fir/basic-program.fir
    flang/tools/tco/tco.cpp

Removed: 
    


################################################################################
diff  --git a/flang/include/flang/Tools/CLOptions.inc b/flang/include/flang/Tools/CLOptions.inc
index 2a5a670d4162..66e0818ef24d 100644
--- a/flang/include/flang/Tools/CLOptions.inc
+++ b/flang/include/flang/Tools/CLOptions.inc
@@ -66,6 +66,8 @@ DisableOption(BoxedProcedureRewrite, "boxed-procedure-rewrite",
     "rewrite boxed procedures");
 #endif
 
+DisableOption(ExternalNameConversion, "external-name-interop", "convert names with external convention");
+
 /// Generic for adding a pass to the pass manager if it is not disabled.
 template <typename F>
 void addPassConditionally(
@@ -139,6 +141,11 @@ inline void addBoxedProcedurePass(mlir::PassManager &pm) {
 }
 #endif
 
+inline void addExternalNameConversionPass(mlir::PassManager &pm) {
+  addPassConditionally(pm, disableExternalNameConversion,
+      [&]() { return fir::createExternalNameConversionPass(); });
+}
+
 /// Create a pass pipeline for running default optimization passes for
 /// incremental conversion of FIR.
 ///
@@ -174,6 +181,7 @@ inline void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm) {
   pm.addNestedPass<mlir::func::FuncOp>(fir::createAbstractResultOptPass());
   fir::addCodeGenRewritePass(pm);
   fir::addTargetRewritePass(pm);
+  fir::addExternalNameConversionPass(pm);
   fir::addFIRToLLVMPass(pm);
 }
 

diff  --git a/flang/test/Driver/disable-ext-name-interop.f90 b/flang/test/Driver/disable-ext-name-interop.f90
new file mode 100644
index 000000000000..0c59a5b4c980
--- /dev/null
+++ b/flang/test/Driver/disable-ext-name-interop.f90
@@ -0,0 +1,9 @@
+! Test that we can disable the ExternalNameConversion pass in flang-new.
+
+! RUN: %flang_fc1 -S %s -o - 2>&1 | FileCheck %s --check-prefix=EXTNAMES
+! RUN: %flang_fc1 -S -mmlir -disable-external-name-interop %s -o - 2>&1 | FileCheck %s --check-prefix=INTNAMES
+
+! EXTNAMES: test_ext_names_
+! INTNAMES: _QPtest_ext_names
+subroutine test_ext_names
+end subroutine

diff  --git a/flang/test/Driver/mlir-pass-pipeline.f90 b/flang/test/Driver/mlir-pass-pipeline.f90
new file mode 100644
index 000000000000..ba006f7d7ef0
--- /dev/null
+++ b/flang/test/Driver/mlir-pass-pipeline.f90
@@ -0,0 +1,32 @@
+! Test the MLIR pass pipeline
+
+! RUN: %flang_fc1 -S -mmlir --mlir-pass-statistics -mmlir --mlir-pass-statistics-display=pipeline %s -o - 2>&1 | FileCheck %s
+end program
+
+! CHECK: Pass statistics report
+
+! CHECK-LABEL: 'func.func' Pipeline
+! CHECK: ArrayValueCopy
+! CHECK: CharacterConversion
+! CHECK: Canonicalizer
+! CHECK: SimplifyRegionLite
+
+! CHECK-LABEL: 'func.func' Pipeline
+! CHECK: MemoryAllocationOpt
+! CHECK: Inliner
+! CHECK: CSE
+
+! CHECK-LABEL: 'func.func' Pipeline
+! CHECK: CFGConversion
+! CHECK: SCFToControlFlow
+! CHECK: Canonicalizer
+! CHECK: SimplifyRegionLite
+! CHECK: BoxedProcedurePass
+
+! CHECK-LABEL: 'func.func' Pipeline
+! CHECK: AbstractResultOpt
+! CHECK: CodeGenRewrite
+! CHECK: TargetRewrite
+! CHECK: ExternalNameConversion
+! CHECK: FIRToLLVMLowering
+! CHECK-NOT: LLVMIRLoweringPass

diff  --git a/flang/test/Fir/basic-program.fir b/flang/test/Fir/basic-program.fir
index 0f22629d7675..e646ddd20b5d 100644
--- a/flang/test/Fir/basic-program.fir
+++ b/flang/test/Fir/basic-program.fir
@@ -1,6 +1,8 @@
 // RUN: tco %s | FileCheck %s
+// RUN: tco %s --mlir-pass-statistics --mlir-pass-statistics-display=pipeline 2>&1 | FileCheck %s --check-prefix=PASSES
 
 // Check that tco is working with a basic test.
+// Also check the passes in the default pipeline.
 
 func @_QQmain() {
   return
@@ -9,3 +11,30 @@ func @_QQmain() {
 // CHECK: ; ModuleID = 'FIRModule'
 // CHECK-LABEL: define void @_QQmain()
 // CHECK:       ret void
+
+// PASSES: Pass statistics report
+
+// PASSES-LABEL: 'func.func' Pipeline
+// PASSES: ArrayValueCopy
+// PASSES: CharacterConversion
+// PASSES: Canonicalizer
+// PASSES: SimplifyRegionLite
+
+// PASSES-LABEL: 'func.func' Pipeline
+// PASSES: MemoryAllocationOpt
+// PASSES: Inliner
+// PASSES: CSE
+
+// PASSES-LABEL: 'func.func' Pipeline
+// PASSES: CFGConversion
+// PASSES: SCFToControlFlow
+// PASSES: Canonicalizer
+// PASSES: SimplifyRegionLite
+// PASSES: BoxedProcedurePass
+
+// PASSES-LABEL: 'func.func' Pipeline
+// PASSES: AbstractResultOpt
+// PASSES: CodeGenRewrite
+// PASSES: TargetRewrite
+// PASSES: FIRToLLVMLowering
+// PASSES: LLVMIRLoweringPass

diff  --git a/flang/tools/tco/tco.cpp b/flang/tools/tco/tco.cpp
index e35325c88955..0c9e2f528a3f 100644
--- a/flang/tools/tco/tco.cpp
+++ b/flang/tools/tco/tco.cpp
@@ -131,6 +131,10 @@ compileFIR(const mlir::PassPipelineCLParser &passPipeline) {
 }
 
 int main(int argc, char **argv) {
+  // Disable the ExternalNameConversion pass by default until all the tests have
+  // been updated to pass with it enabled.
+  disableExternalNameConversion = true;
+
   [[maybe_unused]] InitLLVM y(argc, argv);
   fir::support::registerMLIRPassesForFortranTools();
   fir::registerOptCodeGenPasses();


        


More information about the flang-commits mailing list