diff options
author | Tobias Gysi <tobias.gysi@nextsilicon.com> | 2023-10-18 15:41:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-18 15:41:45 +0200 |
commit | 18e5055db39b41e00dbeb7ca820dd82cce46f65e (patch) | |
tree | 59f1f067b8358ab61e3dcde73bd35bc034780d37 | |
parent | 00f34eefe4ed04c95eb60074ddfdd64e65878be9 (diff) | |
download | llvm-18e5055db39b41e00dbeb7ca820dd82cce46f65e.zip llvm-18e5055db39b41e00dbeb7ca820dd82cce46f65e.tar.gz llvm-18e5055db39b41e00dbeb7ca820dd82cce46f65e.tar.bz2 |
[mlir][LLVM] Improve function debug info import (#69446)
This commit improves the import of function debug info by creating a
FileLineColLoc instead of just a NameLoc if possible.
-rw-r--r-- | mlir/lib/Target/LLVMIR/DebugImporter.cpp | 10 | ||||
-rw-r--r-- | mlir/test/Target/LLVMIR/Import/debug-info.ll | 11 |
2 files changed, 14 insertions, 7 deletions
diff --git a/mlir/lib/Target/LLVMIR/DebugImporter.cpp b/mlir/lib/Target/LLVMIR/DebugImporter.cpp index 695dbf7..a3e81d0 100644 --- a/mlir/lib/Target/LLVMIR/DebugImporter.cpp +++ b/mlir/lib/Target/LLVMIR/DebugImporter.cpp @@ -24,13 +24,17 @@ using namespace mlir::LLVM; using namespace mlir::LLVM::detail; Location DebugImporter::translateFuncLocation(llvm::Function *func) { - if (!func->getSubprogram()) + llvm::DISubprogram *subprogram = func->getSubprogram(); + if (!subprogram) return UnknownLoc::get(context); // Add a fused location to link the subprogram information. - StringAttr name = StringAttr::get(context, func->getSubprogram()->getName()); + StringAttr funcName = StringAttr::get(context, subprogram->getName()); + StringAttr fileName = StringAttr::get(context, subprogram->getFilename()); return FusedLocWith<DISubprogramAttr>::get( - {NameLoc::get(name)}, translate(func->getSubprogram()), context); + {NameLoc::get(funcName), + FileLineColLoc::get(fileName, subprogram->getLine(), /*column=*/0)}, + translate(subprogram), context); } //===----------------------------------------------------------------------===// diff --git a/mlir/test/Target/LLVMIR/Import/debug-info.ll b/mlir/test/Target/LLVMIR/Import/debug-info.ll index da8f7c3..2c4fb2c 100644 --- a/mlir/test/Target/LLVMIR/Import/debug-info.ll +++ b/mlir/test/Target/LLVMIR/Import/debug-info.ll @@ -222,15 +222,18 @@ define void @subprogram() !dbg !3 { define void @func_loc() !dbg !3 { ret void } -; CHECK: #[[SP:.+]] = #llvm.di_subprogram<compileUnit = #{{.*}}, scope = #{{.*}}, name = "func_loc", file = #{{.*}}, subprogramFlags = Definition> -; CHECK: loc(fused<#[[SP]]>[ +; CHECK-DAG: #[[NAME_LOC:.+]] = loc("func_loc") +; CHECK-DAG: #[[FILE_LOC:.+]] = loc("debug-info.ll":42:0) +; CHECK-DAG: #[[SP:.+]] = #llvm.di_subprogram<compileUnit = #{{.*}}, scope = #{{.*}}, name = "func_loc", file = #{{.*}}, line = 42, subprogramFlags = Definition> + +; CHECK: loc(fused<#[[SP]]>[#[[NAME_LOC]], #[[FILE_LOC]]] !llvm.dbg.cu = !{!1} !llvm.module.flags = !{!0} !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2) !2 = !DIFile(filename: "debug-info.ll", directory: "/") -!3 = distinct !DISubprogram(name: "func_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "func_loc", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, line: 42) ; // ----- @@ -538,7 +541,7 @@ define void @noname_subprogram(ptr %arg) !dbg !8 { ; // ----- ; CHECK: #[[MODULE:.+]] = #llvm.di_module< -; CHECK-SAME: file = #{{.*}}, scope = #{{.*}}, name = "module", +; CHECK-SAME: file = #{{.*}}, scope = #{{.*}}, name = "module", ; CHECK-SAME: configMacros = "bar", includePath = "/", ; CHECK-SAME: apinotes = "/", line = 42, isDecl = true ; CHECK-SAME: > |