Skip to content

Commit 49dfbd1

Browse files
authored
flang][debug] Run AddDebugInfo before TargetRewrite. (#114418)
This help us generate debug info that better represents the actual Fortran source code. It was briefly discussed [here](#113917 (review)). Fixes #108711.
1 parent e76d921 commit 49dfbd1

File tree

5 files changed

+27
-5
lines changed

5 files changed

+27
-5
lines changed

flang/lib/Optimizer/Passes/Pipelines.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,10 @@ void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm,
264264
addNestedPassToAllTopLevelOperations(pm, fir::createAbstractResultOpt);
265265
fir::addCodeGenRewritePass(
266266
pm, (config.DebugInfo != llvm::codegenoptions::NoDebugInfo));
267-
fir::addTargetRewritePass(pm);
268-
fir::addCompilerGeneratedNamesConversionPass(pm);
269267
fir::addExternalNameConversionPass(pm, config.Underscoring);
270268
fir::createDebugPasses(pm, config.DebugInfo, config.OptLevel, inputFilename);
269+
fir::addTargetRewritePass(pm);
270+
fir::addCompilerGeneratedNamesConversionPass(pm);
271271

272272
if (config.VScaleMin != 0)
273273
pm.addPass(fir::createVScaleAttr({{config.VScaleMin, config.VScaleMax}}));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@
111111

112112
! ALL-NEXT: CodeGenRewrite
113113
! ALL-NEXT: (S) 0 num-dce'd - Number of operations eliminated
114-
! ALL-NEXT: TargetRewrite
115-
! ALL-NEXT: CompilerGeneratedNamesConversion
116114
! ALL-NEXT: ExternalNameConversion
117115
! DEBUG-NEXT: AddDebugInfo
118116
! NO-DEBUG-NOT: AddDebugInfo
117+
! ALL-NEXT: TargetRewrite
118+
! ALL-NEXT: CompilerGeneratedNamesConversion
119119
! ALL: FIRToLLVMLowering
120120
! ALL-NOT: LLVMIRLoweringPass

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@
120120

121121
! ALL-NEXT: CodeGenRewrite
122122
! ALL-NEXT: (S) 0 num-dce'd - Number of operations eliminated
123+
! ALL-NEXT: ExternalNameConversion
123124
! ALL-NEXT: TargetRewrite
124125
! ALL-NEXT: CompilerGeneratedNamesConversion
125-
! ALL-NEXT: ExternalNameConversion
126126
! ALL-NEXT: FIRToLLVMLowering
127127
! ALL-NOT: LLVMIRLoweringPass
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
! RUN: %flang_fc1 -emit-llvm -debug-info-kind=standalone %s -o - | FileCheck %s
2+
3+
! Test that complex return type is correctly represented in debug.
4+
complex function fn(a)
5+
complex, intent(in) :: a
6+
fn = a
7+
end function
8+
9+
! CHECK-DAG: ![[CMPLX:.*]] = !DIBasicType(name: "complex", size: 64, encoding: DW_ATE_complex_float)
10+
! CHECK-DAG: ![[SR_TY:.*]] = !DISubroutineType(cc: DW_CC_normal, types: ![[TYPES:.*]])
11+
! CHECK-DAG: ![[TYPES]] = !{![[CMPLX]], ![[CMPLX]]}
12+
! CHECK-DAG: !DISubprogram(name: "fn"{{.*}}type: ![[SR_TY]]{{.*}})
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
! RUN: %flang_fc1 -emit-llvm -debug-info-kind=standalone %s -o - | FileCheck %s
2+
3+
! Test that correct linkage name is generated in the debug info.
4+
subroutine sub(a)
5+
integer :: a
6+
return a+1
7+
end
8+
9+
!CHECK: !DISubprogram(name: "sub", linkageName: "sub_"{{.*}})
10+

0 commit comments

Comments
 (0)