Skip to content

Commit b3037ae

Browse files
authored
[MLIR][LLVM] Add distinct identifier to DICompileUnit attribute (#77070)
This commit adds a distinct attribute parameter to the DICompileUnit to enable the modeling of distinctness. LLVM requires DICompileUnits to be distinct and there are cases where one gets two equivalent compilation units but LLVM still requires differentiates them. We observed such cases for combinations of LTO and inline functions. This patch also changes the DIScopeForLLVMFuncOp pass to a module pass, to ensure that only one distinct DICompileUnit is created, instead of one for each function.
1 parent 624b487 commit b3037ae

21 files changed

+156
-93
lines changed

flang/lib/Optimizer/Transforms/AddDebugFoundation.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ void AddDebugFoundationPass::runOnOperation() {
6565
mlir::LLVM::DIFileAttr fileAttr = getFileAttr(inputFilePath);
6666
mlir::StringAttr producer = mlir::StringAttr::get(context, "Flang");
6767
mlir::LLVM::DICompileUnitAttr cuAttr = mlir::LLVM::DICompileUnitAttr::get(
68-
context, llvm::dwarf::getLanguage("DW_LANG_Fortran95"), fileAttr,
69-
producer, /*isOptimized=*/false,
70-
mlir::LLVM::DIEmissionKind::LineTablesOnly);
68+
context, mlir::DistinctAttr::create(mlir::UnitAttr::get(context)),
69+
llvm::dwarf::getLanguage("DW_LANG_Fortran95"), fileAttr, producer,
70+
/*isOptimized=*/false, mlir::LLVM::DIEmissionKind::LineTablesOnly);
7171

7272
module.walk([&](mlir::func::FuncOp funcOp) {
7373
mlir::Location l = funcOp->getLoc();

flang/test/Transforms/debug-line-table-existing.fir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module attributes {} {
1212
#di_file = #llvm.di_file<"simple.f90" in "/home/user01/llvm-project/build_release">
1313
#loc = loc("/home/user01/llvm-project/build_release/simple.f90":0:0)
1414
#loc1 = loc("/home/user01/llvm-project/build_release/simple.f90":1:1)
15-
#di_compile_unit = #llvm.di_compile_unit<sourceLanguage = DW_LANG_Fortran95, file = #di_file, producer = "Flang", isOptimized = false, emissionKind = LineTablesOnly>
15+
#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_Fortran95, file = #di_file, producer = "Flang", isOptimized = false, emissionKind = LineTablesOnly>
1616
#di_subroutine_type = #llvm.di_subroutine_type<callingConvention = DW_CC_normal, types = #di_basic_type, #di_basic_type>
1717
#di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "_QPs1", linkageName = "_QPs1", file = #di_file, line = 1, scopeLine = 1, subprogramFlags = Definition, type = #di_subroutine_type>
1818
#loc2 = loc(fused<#di_subprogram>[#loc1])

flang/test/Transforms/debug-line-table-inc-file.fir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ module attributes {} {
3030
// CHECK: #[[MODULE_LOC]] = loc("{{.*}}simple.f90":0:0)
3131
// CHECK: #[[LOC_INC_FILE:.*]] = loc("{{.*}}inc.f90":1:1)
3232
// CHECK: #[[LOC_FILE:.*]] = loc("{{.*}}simple.f90":3:1)
33-
// CHECK: #[[DI_CU:.*]] = #llvm.di_compile_unit<sourceLanguage = DW_LANG_Fortran95, file = #[[DI_FILE]], producer = "Flang", isOptimized = false, emissionKind = LineTablesOnly>
33+
// CHECK: #[[DI_CU:.*]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_Fortran95, file = #[[DI_FILE]], producer = "Flang", isOptimized = false, emissionKind = LineTablesOnly>
3434
// CHECK: #[[DI_SP_INC:.*]] = #llvm.di_subprogram<compileUnit = #[[DI_CU]], scope = #[[DI_FILE]], name = "_QPsinc", linkageName = "_QPsinc", file = #[[DI_INC_FILE]], {{.*}}>
3535
// CHECK: #[[DI_SP:.*]] = #llvm.di_subprogram<compileUnit = #[[DI_CU]], scope = #[[DI_FILE]], name = "_QQmain", linkageName = "_QQmain", file = #[[DI_FILE]], {{.*}}>
3636
// CHECK: #[[FUSED_LOC_INC_FILE]] = loc(fused<#[[DI_SP_INC]]>[#[[LOC_INC_FILE]]])

flang/test/Transforms/debug-line-table.fir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ module attributes { fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.dat
1818
// CHECK: #di_file = #llvm.di_file<"[[FILE_NAME:.*]]" in "[[DIR_NAME:.*]]">
1919
// CHECK: #[[MODULE_LOC]] = loc("[[DIR_NAME]]/[[FILE_NAME]]":1:1)
2020
// CHECK: #[[SB_LOC]] = loc("./simple.f90":2:1)
21-
// CHECK: #di_compile_unit = #llvm.di_compile_unit<sourceLanguage = DW_LANG_Fortran95, file = #di_file, producer = "Flang", isOptimized = false, emissionKind = LineTablesOnly>
21+
// CHECK: #di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_Fortran95, file = #di_file, producer = "Flang", isOptimized = false, emissionKind = LineTablesOnly>
2222
// CHECK: #di_subroutine_type = #llvm.di_subroutine_type<callingConvention = DW_CC_normal, types = #di_basic_type, #di_basic_type>
2323
// CHECK: #di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "[[SB_NAME]]", linkageName = "[[SB_NAME]]", file = #di_file, line = 1, scopeLine = 1, subprogramFlags = Definition, type = #di_subroutine_type>
2424
// CHECK: #[[FUSED_SB_LOC]] = loc(fused<#di_subprogram>[#[[SB_LOC]]])

mlir/examples/toy/Ch6/toyc.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,7 @@ int loadAndProcessMLIR(mlir::MLIRContext &context,
187187
// This is necessary to have line tables emitted and basic
188188
// debugger working. In the future we will add proper debug information
189189
// emission directly from our frontend.
190-
pm.addNestedPass<mlir::LLVM::LLVMFuncOp>(
191-
mlir::LLVM::createDIScopeForLLVMFuncOpPass());
190+
pm.addPass(mlir::LLVM::createDIScopeForLLVMFuncOpPass());
192191
}
193192

194193
if (mlir::failed(pm.run(*module)))

mlir/examples/toy/Ch7/toyc.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,7 @@ int loadAndProcessMLIR(mlir::MLIRContext &context,
188188
// This is necessary to have line tables emitted and basic
189189
// debugger working. In the future we will add proper debug information
190190
// emission directly from our frontend.
191-
pm.addNestedPass<mlir::LLVM::LLVMFuncOp>(
192-
mlir::LLVM::createDIScopeForLLVMFuncOpPass());
191+
pm.addPass(mlir::LLVM::createDIScopeForLLVMFuncOpPass());
193192
}
194193

195194
if (mlir::failed(pm.run(*module)))

mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ def LLVM_DIBasicTypeAttr : LLVM_Attr<"DIBasicType", "di_basic_type",
342342
def LLVM_DICompileUnitAttr : LLVM_Attr<"DICompileUnit", "di_compile_unit",
343343
/*traits=*/[], "DIScopeAttr"> {
344344
let parameters = (ins
345+
"DistinctAttr":$id,
345346
LLVM_DILanguageParameter:$sourceLanguage,
346347
"DIFileAttr":$file,
347348
OptionalParameter<"StringAttr">:$producer,

mlir/include/mlir/Dialect/LLVMIR/Transforms/Passes.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def NVVMOptimizeForTarget : Pass<"llvm-optimize-for-nvvm-target"> {
6666
let constructor = "::mlir::NVVM::createOptimizeForTargetPass()";
6767
}
6868

69-
def DIScopeForLLVMFuncOp : Pass<"ensure-debug-info-scope-on-llvm-func", "LLVM::LLVMFuncOp"> {
69+
def DIScopeForLLVMFuncOp : Pass<"ensure-debug-info-scope-on-llvm-func", "::mlir::ModuleOp"> {
7070
let summary = "Materialize LLVM debug info subprogram attribute on every LLVMFuncOp";
7171
let description = [{
7272
Having a debug info subprogram attribute on a function is required for

mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp

Lines changed: 69 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -34,69 +34,93 @@ static FileLineColLoc extractFileLoc(Location loc) {
3434
return FileLineColLoc();
3535
}
3636

37+
/// Creates a DISubprogramAttr with the provided compile unit and attaches it
38+
/// to the function. Does nothing when the function already has an attached
39+
/// subprogram.
40+
static void addScopeToFunction(LLVM::LLVMFuncOp llvmFunc,
41+
LLVM::DICompileUnitAttr compileUnitAttr) {
42+
43+
Location loc = llvmFunc.getLoc();
44+
if (loc->findInstanceOf<mlir::FusedLocWith<LLVM::DISubprogramAttr>>())
45+
return;
46+
47+
MLIRContext *context = llvmFunc->getContext();
48+
49+
// Filename, line and colmun to associate to the function.
50+
LLVM::DIFileAttr fileAttr;
51+
int64_t line = 1, col = 1;
52+
FileLineColLoc fileLoc = extractFileLoc(loc);
53+
if (!fileLoc && compileUnitAttr) {
54+
fileAttr = compileUnitAttr.getFile();
55+
} else if (!fileLoc) {
56+
fileAttr = LLVM::DIFileAttr::get(context, "<unknown>", "");
57+
} else {
58+
line = fileLoc.getLine();
59+
col = fileLoc.getColumn();
60+
StringRef inputFilePath = fileLoc.getFilename().getValue();
61+
fileAttr =
62+
LLVM::DIFileAttr::get(context, llvm::sys::path::filename(inputFilePath),
63+
llvm::sys::path::parent_path(inputFilePath));
64+
}
65+
auto subroutineTypeAttr =
66+
LLVM::DISubroutineTypeAttr::get(context, llvm::dwarf::DW_CC_normal, {});
67+
68+
StringAttr funcNameAttr = llvmFunc.getNameAttr();
69+
auto subprogramAttr = LLVM::DISubprogramAttr::get(
70+
context, compileUnitAttr, fileAttr, funcNameAttr, funcNameAttr, fileAttr,
71+
/*line=*/line,
72+
/*scopeline=*/col,
73+
LLVM::DISubprogramFlags::Definition | LLVM::DISubprogramFlags::Optimized,
74+
subroutineTypeAttr);
75+
llvmFunc->setLoc(FusedLoc::get(context, {loc}, subprogramAttr));
76+
}
77+
3778
namespace {
3879
/// Add a debug info scope to LLVMFuncOp that are missing it.
3980
struct DIScopeForLLVMFuncOp
4081
: public LLVM::impl::DIScopeForLLVMFuncOpBase<DIScopeForLLVMFuncOp> {
4182
void runOnOperation() override {
42-
LLVM::LLVMFuncOp llvmFunc = getOperation();
43-
Location loc = llvmFunc.getLoc();
44-
if (loc->findInstanceOf<mlir::FusedLocWith<LLVM::DISubprogramAttr>>())
45-
return;
83+
ModuleOp module = getOperation();
84+
Location loc = module.getLoc();
4685

4786
MLIRContext *context = &getContext();
4887

4988
// To find a DICompileUnitAttr attached to a parent (the module for
5089
// example), otherwise create a default one.
90+
// Find a DICompileUnitAttr attached to the module, otherwise create a
91+
// default one.
5192
LLVM::DICompileUnitAttr compileUnitAttr;
52-
if (ModuleOp module = llvmFunc->getParentOfType<ModuleOp>()) {
53-
auto fusedCompileUnitAttr =
54-
module->getLoc()
55-
->findInstanceOf<mlir::FusedLocWith<LLVM::DICompileUnitAttr>>();
56-
if (fusedCompileUnitAttr)
57-
compileUnitAttr = fusedCompileUnitAttr.getMetadata();
58-
}
59-
60-
// Filename, line and colmun to associate to the function.
61-
LLVM::DIFileAttr fileAttr;
62-
int64_t line = 1, col = 1;
63-
FileLineColLoc fileLoc = extractFileLoc(loc);
64-
if (!fileLoc && compileUnitAttr) {
65-
fileAttr = compileUnitAttr.getFile();
66-
} else if (!fileLoc) {
67-
fileAttr = LLVM::DIFileAttr::get(context, "<unknown>", "");
93+
auto fusedCompileUnitAttr =
94+
module->getLoc()
95+
->findInstanceOf<mlir::FusedLocWith<LLVM::DICompileUnitAttr>>();
96+
if (fusedCompileUnitAttr) {
97+
compileUnitAttr = fusedCompileUnitAttr.getMetadata();
6898
} else {
69-
line = fileLoc.getLine();
70-
col = fileLoc.getColumn();
71-
StringRef inputFilePath = fileLoc.getFilename().getValue();
72-
fileAttr = LLVM::DIFileAttr::get(
73-
context, llvm::sys::path::filename(inputFilePath),
74-
llvm::sys::path::parent_path(inputFilePath));
75-
}
76-
if (!compileUnitAttr) {
99+
LLVM::DIFileAttr fileAttr;
100+
if (FileLineColLoc fileLoc = extractFileLoc(loc)) {
101+
StringRef inputFilePath = fileLoc.getFilename().getValue();
102+
fileAttr = LLVM::DIFileAttr::get(
103+
context, llvm::sys::path::filename(inputFilePath),
104+
llvm::sys::path::parent_path(inputFilePath));
105+
} else {
106+
fileAttr = LLVM::DIFileAttr::get(context, "<unknown>", "");
107+
}
108+
77109
compileUnitAttr = LLVM::DICompileUnitAttr::get(
78-
context, llvm::dwarf::DW_LANG_C, fileAttr,
79-
StringAttr::get(context, "MLIR"), /*isOptimized=*/true,
80-
LLVM::DIEmissionKind::LineTablesOnly);
110+
context, DistinctAttr::create(UnitAttr::get(context)),
111+
llvm::dwarf::DW_LANG_C, fileAttr, StringAttr::get(context, "MLIR"),
112+
/*isOptimized=*/true, LLVM::DIEmissionKind::LineTablesOnly);
81113
}
82-
auto subroutineTypeAttr =
83-
LLVM::DISubroutineTypeAttr::get(context, llvm::dwarf::DW_CC_normal, {});
84-
85-
StringAttr funcNameAttr = llvmFunc.getNameAttr();
86-
auto subprogramAttr =
87-
LLVM::DISubprogramAttr::get(context, compileUnitAttr, fileAttr,
88-
funcNameAttr, funcNameAttr, fileAttr,
89-
/*line=*/line,
90-
/*scopeline=*/col,
91-
LLVM::DISubprogramFlags::Definition |
92-
LLVM::DISubprogramFlags::Optimized,
93-
subroutineTypeAttr);
94-
llvmFunc->setLoc(FusedLoc::get(context, {loc}, subprogramAttr));
114+
115+
// Create subprograms for each function with the same distinct compile unit.
116+
module.walk([&](LLVM::LLVMFuncOp func) {
117+
addScopeToFunction(func, compileUnitAttr);
118+
});
95119
}
96120
};
97121

98122
} // end anonymous namespace
99123

100124
std::unique_ptr<Pass> mlir::LLVM::createDIScopeForLLVMFuncOpPass() {
101125
return std::make_unique<DIScopeForLLVMFuncOp>();
102-
}
126+
}

mlir/lib/Target/LLVMIR/DebugImporter.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ DIBasicTypeAttr DebugImporter::translateImpl(llvm::DIBasicType *node) {
5050
DICompileUnitAttr DebugImporter::translateImpl(llvm::DICompileUnit *node) {
5151
std::optional<DIEmissionKind> emissionKind =
5252
symbolizeDIEmissionKind(node->getEmissionKind());
53-
return DICompileUnitAttr::get(context, node->getSourceLanguage(),
54-
translate(node->getFile()),
55-
getStringAttrOrNull(node->getRawProducer()),
56-
node->isOptimized(), emissionKind.value());
53+
return DICompileUnitAttr::get(
54+
context, DistinctAttr::create(UnitAttr::get(context)),
55+
node->getSourceLanguage(), translate(node->getFile()),
56+
getStringAttrOrNull(node->getRawProducer()), node->isOptimized(),
57+
emissionKind.value());
5758
}
5859

5960
DICompositeTypeAttr DebugImporter::translateImpl(llvm::DICompositeType *node) {

mlir/test/Dialect/LLVMIR/add-debuginfo-func-scope.mlir

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
// RUN: mlir-opt %s --pass-pipeline="builtin.module(llvm.func(ensure-debug-info-scope-on-llvm-func))" --split-input-file --mlir-print-debuginfo | FileCheck %s
2-
3-
1+
// RUN: mlir-opt %s --pass-pipeline="builtin.module(ensure-debug-info-scope-on-llvm-func)" --split-input-file --mlir-print-debuginfo | FileCheck %s
42

53
// CHECK-LABEL: llvm.func @func_no_debug()
64
// CHECK: llvm.return loc(#loc
75
// CHECK: loc(#loc[[LOC:[0-9]+]])
86
// CHECK: #di_file = #llvm.di_file<"<unknown>" in "">
97
// CHECK: #di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "func_no_debug", linkageName = "func_no_debug", file = #di_file, line = 1, scopeLine = 1, subprogramFlags = "Definition|Optimized", type = #di_subroutine_type>
108
// CHECK: #loc[[LOC]] = loc(fused<#di_subprogram>
11-
llvm.func @func_no_debug() {
12-
llvm.return loc(unknown)
9+
module {
10+
llvm.func @func_no_debug() {
11+
llvm.return loc(unknown)
12+
} loc(unknown)
1313
} loc(unknown)
1414

15-
1615
// -----
1716

1817
// Test that existing debug info is not overwritten.
@@ -31,7 +30,7 @@ module {
3130
#di_subroutine_type = #llvm.di_subroutine_type<callingConvention = DW_CC_normal>
3231
#loc = loc("foo":0:0)
3332
#loc1 = loc(unknown)
34-
#di_compile_unit = #llvm.di_compile_unit<sourceLanguage = DW_LANG_C, file = #di_file, producer = "MLIR", isOptimized = true, emissionKind = LineTablesOnly>
33+
#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file, producer = "MLIR", isOptimized = true, emissionKind = LineTablesOnly>
3534
#di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #di_file, name = "func_with_debug", linkageName = "func_with_debug", file = #di_file, line = 42, scopeLine = 42, subprogramFlags = "Definition|Optimized", type = #di_subroutine_type>
3635
#loc2 = loc(fused<#di_subprogram>[#loc1])
3736

@@ -45,7 +44,7 @@ module {
4544
// CHECK-DAG: #[[DI_FILE_MODULE:.+]] = #llvm.di_file<"bar.mlir" in "baz">
4645
// CHECK-DAG: #[[DI_FILE_FUNC:.+]] = #llvm.di_file<"file.mlir" in "">
4746
// CHECK-DAG: #loc[[FUNCFILELOC:[0-9]+]] = loc("file.mlir":9:8)
48-
// CHECK-DAG: #di_compile_unit = #llvm.di_compile_unit<sourceLanguage = DW_LANG_C, file = #[[DI_FILE_MODULE]], producer = "MLIR", isOptimized = true, emissionKind = LineTablesOnly>
47+
// CHECK-DAG: #di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #[[DI_FILE_MODULE]], producer = "MLIR", isOptimized = true, emissionKind = LineTablesOnly>
4948
// CHECK-DAG: #di_subprogram = #llvm.di_subprogram<compileUnit = #di_compile_unit, scope = #[[DI_FILE_FUNC]], name = "propagate_compile_unit", linkageName = "propagate_compile_unit", file = #[[DI_FILE_FUNC]], line = 9, scopeLine = 8, subprogramFlags = "Definition|Optimized", type = #di_subroutine_type>
5049
// CHECK-DAG: #loc[[MODULELOC]] = loc(fused<#di_compile_unit>[#loc])
5150
// CHECK-DAG: #loc[[FUNCLOC]] = loc(fused<#di_subprogram>[#loc[[FUNCFILELOC]]
@@ -55,5 +54,20 @@ module {
5554
} loc("file.mlir":9:8)
5655
} loc(#loc)
5756
#di_file = #llvm.di_file<"bar.mlir" in "baz">
58-
#di_compile_unit = #llvm.di_compile_unit<sourceLanguage = DW_LANG_C, file = #di_file, producer = "MLIR", isOptimized = true, emissionKind = LineTablesOnly>
57+
#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file, producer = "MLIR", isOptimized = true, emissionKind = LineTablesOnly>
5958
#loc = loc(fused<#di_compile_unit>["foo.mlir":2:1])
59+
60+
// -----
61+
62+
// Test that only one compile unit is created.
63+
// CHECK-LABEL: module @multiple_funcs
64+
// CHECK: llvm.di_compile_unit
65+
// CHECK-NOT: llvm.di_compile_unit
66+
module @multiple_funcs {
67+
llvm.func @func0() {
68+
llvm.return loc(unknown)
69+
} loc(unknown)
70+
llvm.func @func1() {
71+
llvm.return loc(unknown)
72+
} loc(unknown)
73+
} loc(unknown)

mlir/test/Dialect/LLVMIR/call-location.mlir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#di_file = #llvm.di_file<"file.cpp" in "/folder/">
44
#di_compile_unit = #llvm.di_compile_unit<
5-
sourceLanguage = DW_LANG_C_plus_plus_14, file = #di_file,
5+
id = distinct[0]<>, sourceLanguage = DW_LANG_C_plus_plus_14, file = #di_file,
66
isOptimized = true, emissionKind = Full
77
>
88
#di_subprogram = #llvm.di_subprogram<

mlir/test/Dialect/LLVMIR/debuginfo.mlir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
// CHECK-DAG: #[[FILE:.*]] = #llvm.di_file<"debuginfo.mlir" in "/test/">
44
#file = #llvm.di_file<"debuginfo.mlir" in "/test/">
55

6-
// CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<sourceLanguage = DW_LANG_C, file = #[[FILE]], producer = "MLIR", isOptimized = true, emissionKind = Full>
6+
// CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #[[FILE]], producer = "MLIR", isOptimized = true, emissionKind = Full>
77
#cu = #llvm.di_compile_unit<
8-
sourceLanguage = DW_LANG_C, file = #file, producer = "MLIR",
9-
isOptimized = true, emissionKind = Full
8+
id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #file,
9+
producer = "MLIR", isOptimized = true, emissionKind = Full
1010
>
1111

1212
// CHECK-DAG: #[[NULL:.*]] = #llvm.di_null_type

mlir/test/Dialect/LLVMIR/global.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ llvm.mlir.global @target_fail(0 : i64) : !llvm.target<"spirv.Image", i32, 0>
263263

264264
// CHECK-DAG: #[[TYPE:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "uint64_t", sizeInBits = 64, encoding = DW_ATE_unsigned>
265265
// CHECK-DAG: #[[FILE:.*]] = #llvm.di_file<"not" in "existence">
266-
// CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<sourceLanguage = DW_LANG_C, file = #[[FILE]], producer = "MLIR", isOptimized = true, emissionKind = Full>
266+
// CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #[[FILE]], producer = "MLIR", isOptimized = true, emissionKind = Full>
267267
// CHECK-DAG: #[[GVAR0:.*]] = #llvm.di_global_variable<scope = #[[CU]], name = "global_with_expr_1", linkageName = "global_with_expr_1", file = #[[FILE]], line = 370, type = #[[TYPE]], isLocalToUnit = true, isDefined = true, alignInBits = 8>
268268
// CHECK-DAG: #[[GVAR1:.*]] = #llvm.di_global_variable<scope = #[[CU]], name = "global_with_expr_2", linkageName = "global_with_expr_2", file = #[[FILE]], line = 371, type = #[[TYPE]], isLocalToUnit = true, isDefined = true, alignInBits = 8>
269269
// CHECK-DAG: #[[GVAR2:.*]] = #llvm.di_global_variable<scope = #[[CU]], name = "global_with_expr_3", linkageName = "global_with_expr_3", file = #[[FILE]], line = 372, type = #[[TYPE]], isLocalToUnit = true, isDefined = true, alignInBits = 8>
@@ -278,7 +278,7 @@ llvm.mlir.global @target_fail(0 : i64) : !llvm.target<"spirv.Image", i32, 0>
278278
// CHECK-DAG: llvm.mlir.global external @global_with_expr4() {addr_space = 0 : i32, dbg_expr = #[[EXPR3]]} : i64
279279

280280
#di_file = #llvm.di_file<"not" in "existence">
281-
#di_compile_unit = #llvm.di_compile_unit<sourceLanguage = DW_LANG_C, file = #di_file, producer = "MLIR", isOptimized = true, emissionKind = Full>
281+
#di_compile_unit = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file, producer = "MLIR", isOptimized = true, emissionKind = Full>
282282
#di_basic_type = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "uint64_t", sizeInBits = 64, encoding = DW_ATE_unsigned>
283283
llvm.mlir.global external @global_with_expr1() {addr_space = 0 : i32, dbg_expr = #llvm.di_global_variable_expression<var = <scope = #di_compile_unit, name = "global_with_expr_1", linkageName = "global_with_expr_1", file = #di_file, line = 370, type = #di_basic_type, isLocalToUnit = true, isDefined = true, alignInBits = 8>, expr = <>>} : i64
284284
llvm.mlir.global external @global_with_expr2() {addr_space = 0 : i32, dbg_expr = #llvm.di_global_variable_expression<var = <scope = #di_compile_unit, name = "global_with_expr_2", linkageName = "global_with_expr_2", file = #di_file, line = 371, type = #di_basic_type, isLocalToUnit = true, isDefined = true, alignInBits = 8>, expr = <[DW_OP_push_object_address, DW_OP_deref]>>} : i64

0 commit comments

Comments
 (0)