[PATCH] D121171: [flang] Add ExternalNameConversionPass to flang-new pipeline

Diana Picus via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 16 05:52:02 PDT 2022


rovka updated this revision to Diff 415788.
rovka edited the summary of this revision.
rovka added a comment.

Take 2 :)

This is adding ExternalNameConversion to the default FIR codegen pipeline, right before the FIRtoLLVM pass. This means we're no longer affecting `bbc` in any way, and also `tco` and `flang-new` will both be running it. I think I'm remembering from previous discussions that we do want `tco` and `flang-new` to be consistent about their behaviour, and this is a surefire way to achieve that (they're both calling createMLIRToLLVMPassPipeline, which in turn is calling createDefaultFIRCodeGenPassPipeline).

I think this is a good place to put it because

1. it works on FIR specifically, so we can't run it any later than this, and
2. we probably don't want other FIR passes to worry about what kind of mangling is being used, so it's best to put it last.

There's one lowering test that needs updating, because it's calling `bbc | tco`. I'm not sure why it needs this end-to-end behaviour, but if it really does I'm guessing it's better to let it run the default passes and update the test accordingly than to explicitly disable this pass.

Do we still want to add a flag to optionally disable this pass?
Also, do we want to move the pass from `flang/Optimizer/Transforms/Passes.td` to `flang/Optimizer/Codegen/CGPasses.td`, to clarify that it's a codegen pass?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121171/new/

https://reviews.llvm.org/D121171

Files:
  flang/include/flang/Tools/CLOptions.inc
  flang/test/Lower/common-block.f90


Index: flang/test/Lower/common-block.f90
===================================================================
--- flang/test/Lower/common-block.f90
+++ flang/test/Lower/common-block.f90
@@ -1,40 +1,40 @@
 ! RUN: bbc %s -o - | tco | FileCheck %s
 
-! CHECK: @_QB = common global [8 x i8] zeroinitializer
-! CHECK: @_QBx = global { float, float } { float 1.0{{.*}}, float 2.0{{.*}} }
-! CHECK: @_QBy = common global [12 x i8] zeroinitializer
-! CHECK: @_QBz = global { i32, [4 x i8], float } { i32 42, [4 x i8] undef, float 3.000000e+00 }
-! CHECK: @_QBrien = common global [1 x i8] zeroinitializer
-! CHECK: @_QBwith_empty_equiv = common global [8 x i8] zeroinitializer
+! CHECK: @__BLNK__ = common global [8 x i8] zeroinitializer
+! CHECK: @x_ = global { float, float } { float 1.0{{.*}}, float 2.0{{.*}} }
+! CHECK: @y_ = common global [12 x i8] zeroinitializer
+! CHECK: @z_ = global { i32, [4 x i8], float } { i32 42, [4 x i8] undef, float 3.000000e+00 }
+! CHECK: @rien_ = common global [1 x i8] zeroinitializer
+! CHECK: @with_empty_equiv_ = common global [8 x i8] zeroinitializer
 
-! CHECK-LABEL: _QPs0
+! CHECK-LABEL: s0_
 subroutine s0
     common // a0, b0
   
-    ! CHECK: call void @_QPs(float* bitcast ([8 x i8]* @_QB to float*), float* bitcast (i8* getelementptr inbounds ([8 x i8], [8 x i8]* @_QB, i32 0, i64 4) to float*))
+    ! CHECK: call void @s_(float* bitcast ([8 x i8]* @__BLNK__ to float*), float* bitcast (i8* getelementptr inbounds ([8 x i8], [8 x i8]* @__BLNK__, i32 0, i64 4) to float*))
     call s(a0, b0)
   end subroutine s0
   
-  ! CHECK-LABEL: _QPs1
+  ! CHECK-LABEL: s1_
   subroutine s1
     common /x/ a1, b1
     data a1 /1.0/, b1 /2.0/
   
-    ! CHECK: call void @_QPs(float* getelementptr inbounds ({ float, float }, { float, float }* @_QBx, i32 0, i32 0), float* bitcast (i8* getelementptr (i8, i8* bitcast ({ float, float }* @_QBx to i8*), i64 4) to float*))
+    ! CHECK: call void @s_(float* getelementptr inbounds ({ float, float }, { float, float }* @x_, i32 0, i32 0), float* bitcast (i8* getelementptr (i8, i8* bitcast ({ float, float }* @x_ to i8*), i64 4) to float*))
     call s(a1, b1)
   end subroutine s1
   
-  ! CHECK-LABEL: _QPs2
+  ! CHECK-LABEL: s2_
   subroutine s2
     common /y/ a2, b2, c2
   
-    ! CHECK: call void @_QPs(float* bitcast ([12 x i8]* @_QBy to float*), float* bitcast (i8* getelementptr inbounds ([12 x i8], [12 x i8]* @_QBy, i32 0, i64 4) to float*))
+    ! CHECK: call void @s_(float* bitcast ([12 x i8]* @y_ to float*), float* bitcast (i8* getelementptr inbounds ([12 x i8], [12 x i8]* @y_, i32 0, i64 4) to float*))
     call s(a2, b2)
   end subroutine s2
   
   ! Test that common initialized through aliases of common members are getting
   ! the correct initializer.
-  ! CHECK-LABEL: _QPs3
+  ! CHECK-LABEL: s3_
   subroutine s3
    integer :: i = 42
    real :: x
@@ -50,22 +50,22 @@
     integer :: i, j
     common /c_in_mod/ i, j
   end module
-  ! CHECK-LABEL: _QPs4
+  ! CHECK-LABEL: s4_
   subroutine s4
     use mod_with_common
-    ! CHECK: load i32, i32* bitcast ([8 x i8]* @_QBc_in_mod to i32*)
+    ! CHECK: load i32, i32* bitcast ([8 x i8]* @c_in_mod_ to i32*)
     print *, i
-    ! CHECK: load i32, i32* bitcast (i8* getelementptr inbounds ([8 x i8], [8 x i8]* @_QBc_in_mod, i32 0, i64 4) to i32*)
+    ! CHECK: load i32, i32* bitcast (i8* getelementptr inbounds ([8 x i8], [8 x i8]* @c_in_mod_, i32 0, i64 4) to i32*)
     print *, j
   end subroutine s4
   
-  ! CHECK-LABEL: _QPs5
+  ! CHECK-LABEL: s5_
   subroutine s5
     real r(1:0)
     common /rien/ r
   end subroutine s5
   
-  ! CHECK-LABEL: _QPs6
+  ! CHECK-LABEL: s6_
   subroutine s6
     real r1(1:0), r2(1:0), x, y
     common /with_empty_equiv/ x, r1, y
Index: flang/include/flang/Tools/CLOptions.inc
===================================================================
--- flang/include/flang/Tools/CLOptions.inc
+++ flang/include/flang/Tools/CLOptions.inc
@@ -164,6 +164,7 @@
   pm.addNestedPass<mlir::FuncOp>(fir::createAbstractResultOptPass());
   fir::addCodeGenRewritePass(pm);
   fir::addTargetRewritePass(pm);
+  pm.addPass(fir::createExternalNameConversionPass());
   fir::addFIRToLLVMPass(pm);
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121171.415788.patch
Type: text/x-patch
Size: 4181 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220316/d871e3a9/attachment.bin>


More information about the llvm-commits mailing list