[Mlir-commits] [mlir] 4f919f4 - [mlir][llvm] support DICompileUnit source language dialect (#214301)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Aug 7 11:54:29 PDT 2026
Author: Gibran Essa
Date: 2026-08-07T11:54:24-07:00
New Revision: 4f919f48a3b1c2705830ff302095a5413fb245ef
URL: https://github.com/llvm/llvm-project/commit/4f919f48a3b1c2705830ff302095a5413fb245ef
DIFF: https://github.com/llvm/llvm-project/commit/4f919f48a3b1c2705830ff302095a5413fb245ef.diff
LOG: [mlir][llvm] support DICompileUnit source language dialect (#214301)
## Summary
LLVM IR `DICompileUnit` supports an optional `dialect:` field as part of
its `DISourceLanguageName`, for example:
```
!0 = distinct !DICompileUnit(
language: DW_LANG_C,
file: !1,
dialect: DW_LLVM_LANG_DIALECT_simt
)
```
The MLIR LLVM dialect previously modeled only the base `sourceLanguage`,
so LLVM IR import dropped the dialect and MLIR-to-LLVMIR export could
not emit it.
This patch adds `sourceLanguageDialect` to `#llvm.di_compile_unit`,
defaulting to `0`, and wires it through:
- MLIR LLVM dialect attribute parsing/printing
- recursive debug-info cloning
- LLVM dialect bytecode
- LLVM IR export
- LLVM IR import
- C API construction, while preserving the existing constructor behavior
with a default dialect
The new MLIR format is:
```
#llvm.di_compile_unit<
id = distinct[0]<>,
sourceLanguage = DW_LANG_C,
sourceLanguageDialect = DW_LLVM_LANG_DIALECT_simt,
file = #file
>
```
AI assistance from codex was used in this MR.
Added:
Modified:
mlir/include/mlir-c/Dialect/LLVM.h
mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
mlir/include/mlir/Dialect/LLVMIR/LLVMDialectBytecode.td
mlir/lib/CAPI/Dialect/LLVM.cpp
mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
mlir/lib/Target/LLVMIR/DebugImporter.cpp
mlir/lib/Target/LLVMIR/DebugTranslation.cpp
mlir/test/CAPI/llvm.c
mlir/test/Dialect/LLVMIR/bytecode.mlir
mlir/test/Dialect/LLVMIR/debuginfo.mlir
mlir/test/Target/LLVMIR/Import/debug-info.ll
mlir/test/Target/LLVMIR/llvmir-debug.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir-c/Dialect/LLVM.h b/mlir/include/mlir-c/Dialect/LLVM.h
index 28c4cdb98931d..30137faaaa8d8 100644
--- a/mlir/include/mlir-c/Dialect/LLVM.h
+++ b/mlir/include/mlir-c/Dialect/LLVM.h
@@ -376,6 +376,16 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
MlirAttribute splitDebugFilename, intptr_t nImportedEntities,
MlirAttribute const *importedEntities);
+/// Creates a LLVM DICompileUnit attribute with a source language dialect.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMDICompileUnitAttrGetWithSourceLanguageDialect(
+ MlirContext ctx, MlirAttribute recId, bool isRecSelf, MlirAttribute id,
+ unsigned int sourceLanguage, unsigned int sourceLanguageDialect,
+ MlirAttribute file, MlirAttribute producer, bool isOptimized,
+ MlirLLVMDIEmissionKind emissionKind, bool isDebugInfoForProfiling,
+ MlirLLVMDINameTableKind nameTableKind, MlirAttribute splitDebugFilename,
+ intptr_t nImportedEntities, MlirAttribute const *importedEntities);
+
MLIR_CAPI_EXPORTED MlirStringRef mlirLLVMDICompileUnitAttrGetName(void);
/// Creates a LLVM DIFlags attribute.
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
index 55bbf2a02f706..a5e4bc52c84a6 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
@@ -360,6 +360,15 @@ def LLVM_DILanguageParameter : LLVM_DIParameter<
"language", /*default=*/"0", "Language", /*errorCase=*/"0"
>;
+// Source-language dialect values are defined by LLVM's
+// dwarf::LanguageDialectAttribute enum in llvm/BinaryFormat/Dwarf.h. LLVM
+// represents "no source-language dialect" as 0; the LLVM IR printer omits the
+// `dialect:` field for that value.
+def LLVM_DILanguageDialectParameter : LLVM_DIParameter<
+ "language dialect", /*default=*/"0", "LanguageDialect",
+ /*errorCase=*/"~0U"
+>;
+
def LLVM_DITagParameter : LLVM_DIParameter<
"tag", /*default=*/"0", "Tag", /*errorCase=*/"llvm::dwarf::DW_TAG_invalid"
>;
@@ -448,6 +457,7 @@ def LLVM_DICompileUnitAttr : LLVM_Attr<"DICompileUnit", "di_compile_unit",
// DICompileUnitAttr specific parameters.
OptionalParameter<"DistinctAttr">:$id,
LLVM_DILanguageParameter:$sourceLanguage,
+ LLVM_DILanguageDialectParameter:$sourceLanguageDialect,
OptionalParameter<"DIFileAttr">:$file,
OptionalParameter<"StringAttr">:$producer,
OptionalParameter<"bool">:$isOptimized,
@@ -458,6 +468,21 @@ def LLVM_DICompileUnitAttr : LLVM_Attr<"DICompileUnit", "di_compile_unit",
OptionalArrayRefParameter<"DINodeAttr">:$importedEntities
);
let builders = [
+ AttrBuilderWithInferredContext<(ins
+ "DistinctAttr":$id, "unsigned":$sourceLanguage,
+ "unsigned":$sourceLanguageDialect, "DIFileAttr":$file,
+ "StringAttr":$producer, "bool":$isOptimized,
+ "DIEmissionKind":$emissionKind,
+ CArg<"bool", "false">:$isDebugInfoForProfiling,
+ CArg<"DINameTableKind", "DINameTableKind::Default">:$nameTableKind,
+ CArg<"StringAttr", "{}">:$splitDebugFilename,
+ CArg<"ArrayRef<DINodeAttr>", "{}">:$importedEntities
+ ), [{
+ return $_get(id.getContext(), /*recId=*/nullptr, /*isRecSelf=*/false, id,
+ sourceLanguage, sourceLanguageDialect, file, producer,
+ isOptimized, emissionKind, isDebugInfoForProfiling,
+ nameTableKind, splitDebugFilename, importedEntities);
+ }]>,
AttrBuilderWithInferredContext<(ins
"DistinctAttr":$id, "unsigned":$sourceLanguage, "DIFileAttr":$file,
"StringAttr":$producer, "bool":$isOptimized,
@@ -468,9 +493,9 @@ def LLVM_DICompileUnitAttr : LLVM_Attr<"DICompileUnit", "di_compile_unit",
CArg<"ArrayRef<DINodeAttr>", "{}">:$importedEntities
), [{
return $_get(id.getContext(), /*recId=*/nullptr, /*isRecSelf=*/false, id,
- sourceLanguage, file, producer, isOptimized, emissionKind,
- isDebugInfoForProfiling, nameTableKind, splitDebugFilename,
- importedEntities);
+ sourceLanguage, /*sourceLanguageDialect=*/0, file, producer,
+ isOptimized, emissionKind, isDebugInfoForProfiling,
+ nameTableKind, splitDebugFilename, importedEntities);
}]>
];
let assemblyFormat = "`<` struct(params) `>`";
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMDialectBytecode.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMDialectBytecode.td
index b25a8c8a9829e..fe63c106a3e7c 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMDialectBytecode.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMDialectBytecode.td
@@ -133,6 +133,7 @@ def DICompileUnitAttr : DialectAttribute<(attr
Bool:$isRecSelf,
OptionalAttribute<"DistinctAttr">:$id,
VarInt:$sourceLanguage,
+ VarInt:$sourceLanguageDialect,
OptionalAttribute<"DIFileAttr">:$file,
OptionalAttribute<"StringAttr">:$producer,
Bool:$isOptimized,
diff --git a/mlir/lib/CAPI/Dialect/LLVM.cpp b/mlir/lib/CAPI/Dialect/LLVM.cpp
index bae811704cad3..9885ae7b2b77f 100644
--- a/mlir/lib/CAPI/Dialect/LLVM.cpp
+++ b/mlir/lib/CAPI/Dialect/LLVM.cpp
@@ -356,11 +356,25 @@ MlirAttribute mlirLLVMDICompileUnitAttrGet(
bool isDebugInfoForProfiling, MlirLLVMDINameTableKind nameTableKind,
MlirAttribute splitDebugFilename, intptr_t nImportedEntities,
MlirAttribute const *importedEntities) {
+ return mlirLLVMDICompileUnitAttrGetWithSourceLanguageDialect(
+ ctx, recId, isRecSelf, id, sourceLanguage,
+ /*sourceLanguageDialect=*/0, file, producer, isOptimized, emissionKind,
+ isDebugInfoForProfiling, nameTableKind, splitDebugFilename,
+ nImportedEntities, importedEntities);
+}
+
+MlirAttribute mlirLLVMDICompileUnitAttrGetWithSourceLanguageDialect(
+ MlirContext ctx, MlirAttribute recId, bool isRecSelf, MlirAttribute id,
+ unsigned int sourceLanguage, unsigned int sourceLanguageDialect,
+ MlirAttribute file, MlirAttribute producer, bool isOptimized,
+ MlirLLVMDIEmissionKind emissionKind, bool isDebugInfoForProfiling,
+ MlirLLVMDINameTableKind nameTableKind, MlirAttribute splitDebugFilename,
+ intptr_t nImportedEntities, MlirAttribute const *importedEntities) {
SmallVector<Attribute> importsStorage;
importsStorage.reserve(nImportedEntities);
return wrap(DICompileUnitAttr::get(
unwrap(ctx), cast<DistinctAttr>(unwrap(recId)), isRecSelf,
- cast<DistinctAttr>(unwrap(id)), sourceLanguage,
+ cast<DistinctAttr>(unwrap(id)), sourceLanguage, sourceLanguageDialect,
cast<DIFileAttr>(unwrap(file)), cast<StringAttr>(unwrap(producer)),
isOptimized, DIEmissionKind(emissionKind), isDebugInfoForProfiling,
DINameTableKind(nameTableKind),
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
index 266faeca4553b..3b26aa2621370 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
@@ -352,17 +352,17 @@ DICompositeTypeAttr::getRecSelf(DistinctAttr recId) {
DIRecursiveTypeAttrInterface DICompileUnitAttr::withRecId(DistinctAttr recId) {
return DICompileUnitAttr::get(
getContext(), recId, getIsRecSelf(), getId(), getSourceLanguage(),
- getFile(), getProducer(), getIsOptimized(), getEmissionKind(),
- getIsDebugInfoForProfiling(), getNameTableKind(), getSplitDebugFilename(),
- getImportedEntities());
+ getSourceLanguageDialect(), getFile(), getProducer(), getIsOptimized(),
+ getEmissionKind(), getIsDebugInfoForProfiling(), getNameTableKind(),
+ getSplitDebugFilename(), getImportedEntities());
}
DIRecursiveTypeAttrInterface DICompileUnitAttr::getRecSelf(DistinctAttr recId) {
return DICompileUnitAttr::get(
recId.getContext(), recId, /*isRecSelf=*/true, /*id=*/{},
- /*sourceLanguage=*/0u, /*file=*/{}, /*producer=*/{},
- /*isOptimized=*/false, DIEmissionKind::None,
+ /*sourceLanguage=*/0u, /*sourceLanguageDialect=*/0u, /*file=*/{},
+ /*producer=*/{}, /*isOptimized=*/false, DIEmissionKind::None,
/*isDebugInfoForProfiling=*/false, DINameTableKind::Default,
/*splitDebugFilename=*/{}, /*importedEntities=*/{});
}
diff --git a/mlir/lib/Target/LLVMIR/DebugImporter.cpp b/mlir/lib/Target/LLVMIR/DebugImporter.cpp
index 85df880d2712a..82beb2984b043 100644
--- a/mlir/lib/Target/LLVMIR/DebugImporter.cpp
+++ b/mlir/lib/Target/LLVMIR/DebugImporter.cpp
@@ -64,13 +64,14 @@ DICompileUnitAttr DebugImporter::translateImpl(llvm::DICompileUnit *node) {
translate(static_cast<llvm::DINode *>(importedEntity)))
imports.push_back(nodeAttr);
}
+ llvm::DISourceLanguageName sourceLanguage = node->getSourceLanguage();
return DICompileUnitAttr::get(
context, /*recId=*/DistinctAttr{}, /*isRecSelf=*/false,
- getOrCreateDistinctID(node),
- node->getSourceLanguage().getUnversionedName(),
- translate(node->getFile()), getStringAttrOrNull(node->getRawProducer()),
- node->isOptimized(), emissionKind.value(),
- node->isDebugInfoForProfiling(), nameTableKind.value(),
+ getOrCreateDistinctID(node), sourceLanguage.getUnversionedName(),
+ sourceLanguage.getDialect(), translate(node->getFile()),
+ getStringAttrOrNull(node->getRawProducer()), node->isOptimized(),
+ emissionKind.value(), node->isDebugInfoForProfiling(),
+ nameTableKind.value(),
getStringAttrOrNull(node->getRawSplitDebugFilename()), imports);
}
diff --git a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
index 442f5b6b137e6..4dc9e91b4e1c2 100644
--- a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
@@ -138,11 +138,18 @@ llvm::DIBasicType *DebugTranslation::translateImpl(DIBasicTypeAttr attr) {
/*AlignInBits=*/0, attr.getEncoding(), llvm::DINode::FlagZero);
}
+static llvm::DISourceLanguageName getSourceLanguage(DICompileUnitAttr attr) {
+ // DISourceLanguageName represents "no source-language dialect" as 0; the
+ // LLVM IR printer omits the `dialect:` field for that value.
+ return llvm::DISourceLanguageName(
+ static_cast<uint16_t>(attr.getSourceLanguage()),
+ static_cast<uint16_t>(attr.getSourceLanguageDialect()));
+}
+
llvm::TempDICompileUnit
DebugTranslation::translateTemporaryImpl(DICompileUnitAttr attr) {
return llvm::DICompileUnit::getTemporary(
- llvmCtx,
- static_cast<llvm::DISourceLanguageName>(attr.getSourceLanguage()),
+ llvmCtx, getSourceLanguage(attr),
/*File=*/nullptr, "", attr.getIsOptimized(),
/*Flags=*/"", /*RuntimeVersion=*/0,
/*splitDebugFileName=*/"",
@@ -166,7 +173,7 @@ llvm::DICompileUnit *DebugTranslation::translateImpl(DICompileUnitAttr attr) {
llvm::DIBuilder builder(llvmModule);
llvm::DICompileUnit *cu = builder.createCompileUnit(
- attr.getSourceLanguage(), translate(attr.getFile()),
+ getSourceLanguage(attr), translate(attr.getFile()),
attr.getProducer() ? attr.getProducer().getValue() : "",
attr.getIsOptimized(),
/*Flags=*/"", /*RV=*/0,
diff --git a/mlir/test/CAPI/llvm.c b/mlir/test/CAPI/llvm.c
index 7e0cf9fee1899..692a846d3b3c9 100644
--- a/mlir/test/CAPI/llvm.c
+++ b/mlir/test/CAPI/llvm.c
@@ -276,12 +276,17 @@ static void testDebugInfoAttributes(MlirContext ctx) {
// CHECK: #llvm.di_file<"foo" in "bar">
mlirAttributeDump(file);
- MlirAttribute compile_unit = mlirLLVMDICompileUnitAttrGet(
- ctx, recId0, false, id, LLVMDWARFSourceLanguageC99, file, foo, false,
- MlirLLVMDIEmissionKindFull, false, MlirLLVMDINameTableKindDefault, bar, 0,
- NULL);
-
- // CHECK: #llvm.di_compile_unit<{{.*}}>
+ // sourceLanguageDialect 1 is DW_LLVM_LANG_DIALECT_simt, as defined by
+ // LLVM's dwarf::LanguageDialectAttribute enum.
+ MlirAttribute compile_unit =
+ mlirLLVMDICompileUnitAttrGetWithSourceLanguageDialect(
+ ctx, recId0, false, id, LLVMDWARFSourceLanguageC99,
+ /*sourceLanguageDialect=*/1, file, foo, false,
+ MlirLLVMDIEmissionKindFull, false, MlirLLVMDINameTableKindDefault,
+ bar, 0, NULL);
+
+ // CHECK: #llvm.di_compile_unit<{{.*}}sourceLanguageDialect =
+ // CHECK-SAME: DW_LLVM_LANG_DIALECT_simt{{.*}}>
mlirAttributeDump(compile_unit);
// CHECK: #llvm.di_compile_unit<recId = {{.*}}, isRecSelf = true>
diff --git a/mlir/test/Dialect/LLVMIR/bytecode.mlir b/mlir/test/Dialect/LLVMIR/bytecode.mlir
index b70ded784bc4b..02409c8adab94 100644
--- a/mlir/test/Dialect/LLVMIR/bytecode.mlir
+++ b/mlir/test/Dialect/LLVMIR/bytecode.mlir
@@ -24,7 +24,7 @@ module {
#loc3 = loc("test-path":36:3)
#loc4 = loc("test-path":37:5)
#loc5 = loc("test-path":39:5)
-#di_compile_unit = #llvm.di_compile_unit<id = distinct[3]<>, sourceLanguage = DW_LANG_Fortran95, file = #di_file, isOptimized = false, emissionKind = Full>
+#di_compile_unit = #llvm.di_compile_unit<id = distinct[3]<>, sourceLanguage = DW_LANG_Fortran95, sourceLanguageDialect = DW_LLVM_LANG_DIALECT_tile, file = #di_file, isOptimized = false, emissionKind = Full>
#di_compile_unit1 = #llvm.di_compile_unit<id = distinct[4]<>, sourceLanguage = DW_LANG_Fortran95, file = #di_file, isOptimized = false, emissionKind = Full>
#di_compile_unit2 = #llvm.di_compile_unit<id = distinct[5]<>, sourceLanguage = DW_LANG_Fortran95, file = #di_file, isOptimized = false, emissionKind = Full>
#di_module = #llvm.di_module<file = #di_file, scope = #di_compile_unit1, name = "mod1">
diff --git a/mlir/test/Dialect/LLVMIR/debuginfo.mlir b/mlir/test/Dialect/LLVMIR/debuginfo.mlir
index 21bcbcffbace7..020f3b3b0ee7a 100644
--- a/mlir/test/Dialect/LLVMIR/debuginfo.mlir
+++ b/mlir/test/Dialect/LLVMIR/debuginfo.mlir
@@ -5,11 +5,12 @@
// CHECK-DAG: #[[NS:.*]] = #llvm.di_namespace<name = "cu_import_ns", exportSymbols = false>
// CHECK-DAG: #[[IE:.*]] = #llvm.di_imported_entity<tag = DW_TAG_imported_module, scope = #[[FILE]], entity = #[[NS]], file = #[[FILE]]>
-// CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #[[FILE]], producer = "MLIR", isOptimized = true, emissionKind = Full, isDebugInfoForProfiling = true, importedEntities = #[[IE]]>
+// CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, sourceLanguageDialect = DW_LLVM_LANG_DIALECT_simt, file = #[[FILE]], producer = "MLIR", isOptimized = true, emissionKind = Full, isDebugInfoForProfiling = true, importedEntities = #[[IE]]>
#cu_import_ns = #llvm.di_namespace<name = "cu_import_ns", exportSymbols = false>
#cu_import_ie = #llvm.di_imported_entity<tag = DW_TAG_imported_module, scope = #file, entity = #cu_import_ns, file = #file>
#cu = #llvm.di_compile_unit<
- id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #file,
+ id = distinct[0]<>, sourceLanguage = DW_LANG_C,
+ sourceLanguageDialect = DW_LLVM_LANG_DIALECT_simt, file = #file,
producer = "MLIR", isOptimized = true, emissionKind = Full,
isDebugInfoForProfiling = true, importedEntities = #cu_import_ie
>
diff --git a/mlir/test/Target/LLVMIR/Import/debug-info.ll b/mlir/test/Target/LLVMIR/Import/debug-info.ll
index 28c25809002cd..f00fd792e77fa 100644
--- a/mlir/test/Target/LLVMIR/Import/debug-info.ll
+++ b/mlir/test/Target/LLVMIR/Import/debug-info.ll
@@ -1046,3 +1046,22 @@ define void @fn_with_static_local() !dbg !3 {
!12 = !DILocalVariable(name: "unused_local", scope: !3, file: !4, line: 122, type: !9)
!13 = !DISubroutineType(types: !14)
!14 = !{null}
+
+; // -----
+
+; CHECK-DAG: #[[DIALECT_FILE:.+]] = #llvm.di_file<"dialect.ll" in "/">
+; CHECK-DAG: #[[DIALECT_CU:.+]] = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, sourceLanguageDialect = DW_LLVM_LANG_DIALECT_tile, file = #[[DIALECT_FILE]]>
+
+define void @fn_cu_dialect() !dbg !3 {
+ ret void
+}
+
+!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, dialect: DW_LLVM_LANG_DIALECT_tile)
+!2 = !DIFile(filename: "dialect.ll", directory: "/")
+!3 = distinct !DISubprogram(name: "fn_cu_dialect", scope: !2, file: !2, spFlags: DISPFlagDefinition, unit: !1, type: !4)
+!4 = !DISubroutineType(types: !5)
+!5 = !{null}
diff --git a/mlir/test/Target/LLVMIR/llvmir-debug.mlir b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
index b93a38be6634d..6628b2882a26c 100644
--- a/mlir/test/Target/LLVMIR/llvmir-debug.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
@@ -870,6 +870,28 @@ llvm.func @fn_cu_import_cycle() {
// -----
+#file = #llvm.di_file<"dialect.mlir" in "/test/">
+#cu = #llvm.di_compile_unit<
+ id = distinct[0]<>, sourceLanguage = DW_LANG_C,
+ sourceLanguageDialect = DW_LLVM_LANG_DIALECT_simt, file = #file,
+ isOptimized = false, emissionKind = Full
+>
+#sp_ty = #llvm.di_subroutine_type<callingConvention = DW_CC_normal>
+#sp = #llvm.di_subprogram<
+ compileUnit = #cu, scope = #file, name = "fn_cu_dialect",
+ file = #file, line = 1, scopeLine = 1, subprogramFlags = Definition,
+ type = #sp_ty
+>
+
+// CHECK-LABEL: define void @fn_cu_dialect()
+llvm.func @fn_cu_dialect() {
+ llvm.return
+} loc(fused<#sp>["dialect.mlir":1:1])
+
+// CHECK-DAG: !DICompileUnit({{.*}}dialect: DW_LLVM_LANG_DIALECT_simt)
+
+// -----
+
#di_file = #llvm.di_file<"foo.mlir" in "/tmp">
#di_cu = #llvm.di_compile_unit<id = distinct[0]<>, sourceLanguage = DW_LANG_C, file = #di_file, isOptimized = false, emissionKind = Full>
#di_uint8 = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "uint8", sizeInBits = 8, encoding = DW_ATE_unsigned>
More information about the Mlir-commits
mailing list