-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[mlir] Add splitDebugFilename field in DIComplileUnitAttr. #160704
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-mlir-llvm @llvm/pr-subscribers-flang-fir-hlfir Author: Abid Qadeer (abidh) ChangesMostly mechanical changes to add the missing field. Full diff: https://github.com/llvm/llvm-project/pull/160704.diff 9 Files Affected:
diff --git a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
index af96c0be6fae9..3c6bc6701d9ad 100644
--- a/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
+++ b/flang/lib/Optimizer/Transforms/AddDebugInfo.cpp
@@ -694,7 +694,7 @@ void AddDebugInfoPass::runOnOperation() {
mlir::LLVM::DICompileUnitAttr cuAttr = mlir::LLVM::DICompileUnitAttr::get(
mlir::DistinctAttr::create(mlir::UnitAttr::get(context)),
llvm::dwarf::getLanguage("DW_LANG_Fortran95"), fileAttr, producer,
- isOptimized, debugLevel);
+ isOptimized, debugLevel, mlir::StringAttr());
module.walk([&](mlir::func::FuncOp funcOp) {
handleFuncOp(funcOp, fileAttr, cuAttr, typeGen, &symbolTable);
diff --git a/mlir/include/mlir-c/Dialect/LLVM.h b/mlir/include/mlir-c/Dialect/LLVM.h
index 65b14254e4492..ba55cf2138f0f 100644
--- a/mlir/include/mlir-c/Dialect/LLVM.h
+++ b/mlir/include/mlir-c/Dialect/LLVM.h
@@ -306,7 +306,8 @@ typedef enum MlirLLVMDINameTableKind MlirLLVMDINameTableKind;
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage,
MlirAttribute file, MlirAttribute producer, bool isOptimized,
- MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind);
+ MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind,
+ MlirAttribute splitDwarfFile);
/// Creates a LLVM DIFlags attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx,
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
index 75bce6b0a0e54..07ce4226639ad 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
@@ -425,17 +425,19 @@ def LLVM_DICompileUnitAttr : LLVM_Attr<"DICompileUnit", "di_compile_unit",
OptionalParameter<"StringAttr">:$producer,
"bool":$isOptimized,
"DIEmissionKind":$emissionKind,
- OptionalParameter<"DINameTableKind">:$nameTableKind
+ OptionalParameter<"DINameTableKind">:$nameTableKind,
+ OptionalParameter<"StringAttr">:$splitDebugFilename
);
let builders = [
AttrBuilderWithInferredContext<(ins
"DistinctAttr":$id, "unsigned":$sourceLanguage, "DIFileAttr":$file,
"StringAttr":$producer, "bool":$isOptimized,
"DIEmissionKind":$emissionKind,
- CArg<"DINameTableKind", "DINameTableKind::Default">:$nameTableKind
+ CArg<"DINameTableKind", "DINameTableKind::Default">:$nameTableKind,
+ CArg<"StringAttr", "{}">:$splitDwarfFile
), [{
return $_get(id.getContext(), id, sourceLanguage, file, producer,
- isOptimized, emissionKind, nameTableKind);
+ isOptimized, emissionKind, nameTableKind, splitDwarfFile);
}]>
];
let assemblyFormat = "`<` struct(params) `>`";
diff --git a/mlir/lib/CAPI/Dialect/LLVM.cpp b/mlir/lib/CAPI/Dialect/LLVM.cpp
index 7a33046c6c872..b0a9753e2e1d4 100644
--- a/mlir/lib/CAPI/Dialect/LLVM.cpp
+++ b/mlir/lib/CAPI/Dialect/LLVM.cpp
@@ -253,17 +253,16 @@ MlirAttribute mlirLLVMDIFileAttrGet(MlirContext ctx, MlirAttribute name,
cast<StringAttr>(unwrap(directory))));
}
-MlirAttribute
-mlirLLVMDICompileUnitAttrGet(MlirContext ctx, MlirAttribute id,
- unsigned int sourceLanguage, MlirAttribute file,
- MlirAttribute producer, bool isOptimized,
- MlirLLVMDIEmissionKind emissionKind,
- MlirLLVMDINameTableKind nameTableKind) {
+MlirAttribute mlirLLVMDICompileUnitAttrGet(
+ MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage,
+ MlirAttribute file, MlirAttribute producer, bool isOptimized,
+ MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind,
+ MlirAttribute splitDwarfFile) {
return wrap(DICompileUnitAttr::get(
unwrap(ctx), cast<DistinctAttr>(unwrap(id)), sourceLanguage,
cast<DIFileAttr>(unwrap(file)), cast<StringAttr>(unwrap(producer)),
- isOptimized, DIEmissionKind(emissionKind),
- DINameTableKind(nameTableKind)));
+ isOptimized, DIEmissionKind(emissionKind), DINameTableKind(nameTableKind),
+ cast<StringAttr>(unwrap(splitDwarfFile))));
}
MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, uint64_t value) {
diff --git a/mlir/lib/Target/LLVMIR/DebugImporter.cpp b/mlir/lib/Target/LLVMIR/DebugImporter.cpp
index 510ec6fe6456f..8b0326518770d 100644
--- a/mlir/lib/Target/LLVMIR/DebugImporter.cpp
+++ b/mlir/lib/Target/LLVMIR/DebugImporter.cpp
@@ -61,7 +61,8 @@ DICompileUnitAttr DebugImporter::translateImpl(llvm::DICompileUnit *node) {
return DICompileUnitAttr::get(
context, getOrCreateDistinctID(node), node->getSourceLanguage(),
translate(node->getFile()), getStringAttrOrNull(node->getRawProducer()),
- node->isOptimized(), emissionKind.value(), nameTableKind.value());
+ node->isOptimized(), emissionKind.value(), nameTableKind.value(),
+ getStringAttrOrNull(node->getRawSplitDebugFilename()));
}
DICompositeTypeAttr DebugImporter::translateImpl(llvm::DICompositeType *node) {
diff --git a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
index a55445deddc2d..eeb87253e5eb8 100644
--- a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
@@ -124,7 +124,9 @@ llvm::DICompileUnit *DebugTranslation::translateImpl(DICompileUnitAttr attr) {
attr.getSourceLanguage(), translate(attr.getFile()),
attr.getProducer() ? attr.getProducer().getValue() : "",
attr.getIsOptimized(),
- /*Flags=*/"", /*RV=*/0, /*SplitName=*/{},
+ /*Flags=*/"", /*RV=*/0,
+ attr.getSplitDebugFilename() ? attr.getSplitDebugFilename().getValue()
+ : "",
static_cast<llvm::DICompileUnit::DebugEmissionKind>(
attr.getEmissionKind()),
0, true, false,
diff --git a/mlir/test/CAPI/llvm.c b/mlir/test/CAPI/llvm.c
index 12a436ad12fc4..f5fbb4645cd5d 100644
--- a/mlir/test/CAPI/llvm.c
+++ b/mlir/test/CAPI/llvm.c
@@ -270,7 +270,7 @@ static void testDebugInfoAttributes(MlirContext ctx) {
MlirAttribute compile_unit = mlirLLVMDICompileUnitAttrGet(
ctx, id, LLVMDWARFSourceLanguageC99, file, foo, false,
- MlirLLVMDIEmissionKindFull, MlirLLVMDINameTableKindDefault);
+ MlirLLVMDIEmissionKindFull, MlirLLVMDINameTableKindDefault, bar);
// CHECK: #llvm.di_compile_unit<{{.*}}>
mlirAttributeDump(compile_unit);
diff --git a/mlir/test/Target/LLVMIR/Import/debug-info.ll b/mlir/test/Target/LLVMIR/Import/debug-info.ll
index 9e2a17fb436af..e056e43a0982c 100644
--- a/mlir/test/Target/LLVMIR/Import/debug-info.ll
+++ b/mlir/test/Target/LLVMIR/Import/debug-info.ll
@@ -215,7 +215,7 @@ define void @composite_type() !dbg !3 {
; // -----
; CHECK-DAG: #[[FILE:.+]] = #llvm.di_file<"debug-info.ll" in "/">
-; CHECK-DAG: #[[CU:.+]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #[[FILE]], isOptimized = false, emissionKind = None, nameTableKind = None>
+; CHECK-DAG: #[[CU:.+]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #[[FILE]], isOptimized = false, emissionKind = None, nameTableKind = None, splitDebugFilename = "test.dwo">
; Verify an empty subroutine types list is supported.
; CHECK-DAG: #[[SP_TYPE:.+]] = #llvm.di_subroutine_type<callingConvention = DW_CC_normal>
; CHECK-DAG: #[[SP:.+]] = #llvm.di_subprogram<id = distinct[{{.*}}]<>, compileUnit = #[[CU]], scope = #[[FILE]], name = "subprogram", linkageName = "subprogram", file = #[[FILE]], line = 42, scopeLine = 42, subprogramFlags = Definition, type = #[[SP_TYPE]]>
@@ -227,7 +227,7 @@ define void @subprogram() !dbg !3 {
!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, nameTableKind: None)
+!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, nameTableKind: None, splitDebugFilename: "test.dwo")
!2 = !DIFile(filename: "debug-info.ll", directory: "/")
!3 = distinct !DISubprogram(name: "subprogram", linkageName: "subprogram", scope: !2, file: !2, line: 42, scopeLine: 42, spFlags: DISPFlagDefinition, unit: !1, type: !4)
!4 = !DISubroutineType(cc: DW_CC_normal, types: !5)
diff --git a/mlir/test/Target/LLVMIR/llvmir-debug.mlir b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
index 274d64af78283..38ae63d1908e9 100644
--- a/mlir/test/Target/LLVMIR/llvmir-debug.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
@@ -43,7 +43,7 @@ llvm.func @func_no_debug() {
#cu = #llvm.di_compile_unit<
id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #file,
producer = "MLIR", isOptimized = true, emissionKind = Full,
- nameTableKind = None
+ nameTableKind = None, splitDebugFilename = "test.dwo"
>
#composite = #llvm.di_composite_type<
tag = DW_TAG_structure_type, name = "composite", file = #file,
@@ -140,7 +140,7 @@ llvm.func @empty_types() {
llvm.return
} loc(fused<#sp1>["foo.mlir":2:1])
-// CHECK: ![[CU_LOC:.*]] = distinct !DICompileUnit(language: DW_LANG_C, file: ![[CU_FILE_LOC:.*]], producer: "MLIR", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, nameTableKind: None)
+// CHECK: ![[CU_LOC:.*]] = distinct !DICompileUnit(language: DW_LANG_C, file: ![[CU_FILE_LOC:.*]], producer: "MLIR", isOptimized: true, runtimeVersion: 0, splitDebugFilename: "test.dwo", emissionKind: FullDebug, nameTableKind: None)
// CHECK: ![[CU_FILE_LOC]] = !DIFile(filename: "foo.mlir", directory: "/test/")
// CHECK: ![[FUNC_LOC]] = distinct !DISubprogram(name: "func_with_debug", linkageName: "func_with_debug", scope: ![[NESTED_NAMESPACE:.*]], file: ![[CU_FILE_LOC]], line: 3, type: ![[FUNC_TYPE:.*]], scopeLine: 3, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: ![[CU_LOC]])
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM modulo comments!
It seems there is a mix between splitDwarfFile and splitDebugFilename. Probably everything should be splitDebugFilename?
mlir/lib/CAPI/Dialect/LLVM.cpp
Outdated
MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage, | ||
MlirAttribute file, MlirAttribute producer, bool isOptimized, | ||
MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind, | ||
MlirAttribute splitDwarfFile) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MlirAttribute splitDwarfFile) { | |
MlirAttribute splitDebugFileName) { |
nit: Shouldn't this match the field name?
"DIEmissionKind":$emissionKind, | ||
CArg<"DINameTableKind", "DINameTableKind::Default">:$nameTableKind | ||
CArg<"DINameTableKind", "DINameTableKind::Default">:$nameTableKind, | ||
CArg<"StringAttr", "{}">:$splitDwarfFile |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CArg<"StringAttr", "{}">:$splitDwarfFile | |
CArg<"StringAttr", "{}">:$splitDebugFileName |
nit: Shouldn't this match the field name?
mlir/include/mlir-c/Dialect/LLVM.h
Outdated
MlirAttribute file, MlirAttribute producer, bool isOptimized, | ||
MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind); | ||
MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind, | ||
MlirAttribute splitDwarfFile); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MlirAttribute splitDwarfFile); | |
MlirAttribute splitDebugFilename); |
nit: Shouldn't this match the field name?
isOptimized, debugLevel); | ||
isOptimized, debugLevel, | ||
/*nameTableKind=*/mlir::LLVM::DINameTableKind::Default, | ||
/*splitDwarfFile=*/mlir::StringAttr()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/*splitDwarfFile=*/mlir::StringAttr()); | |
/*splitDebugFilename=*/mlir::StringAttr()); |
nit:
Use `splitDebugFilename` consistently.
Thanks for the review. I have updated the names. |
Mostly mechanical changes to add the missing field.
Mostly mechanical changes to add the missing field.
Mostly mechanical changes to add the missing field.