From 632b3b3eadaecf4e7b7f697bb7418279a5a67add Mon Sep 17 00:00:00 2001 From: Tobias Gysi Date: Wed, 18 Oct 2023 09:13:32 +0000 Subject: [PATCH] [mlir][LLVM] Improve function debug info import This commit improves the import of function debug info by creating a FileLineColLoc instead of just a NameLoc if possible. --- mlir/lib/Target/LLVMIR/DebugImporter.cpp | 10 +++++++--- 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 695dbf75a448125..a3e81d0dd87a43a 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::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 da8f7c3e8308721..2c4fb2c213cf3e2 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 -; 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 + +; 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: >