aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Gysi <tobias.gysi@nextsilicon.com>2023-10-18 15:41:45 +0200
committerGitHub <noreply@github.com>2023-10-18 15:41:45 +0200
commit18e5055db39b41e00dbeb7ca820dd82cce46f65e (patch)
tree59f1f067b8358ab61e3dcde73bd35bc034780d37
parent00f34eefe4ed04c95eb60074ddfdd64e65878be9 (diff)
downloadllvm-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.cpp10
-rw-r--r--mlir/test/Target/LLVMIR/Import/debug-info.ll11
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: >