[Mlir-commits] [mlir] [MLIR][LLVM] Avoid duplicated module flags in the export (PR #131627)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Mar 17 08:18:00 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-llvm
@llvm/pr-subscribers-mlir
Author: Christian Ulmann (Dinistro)
<details>
<summary>Changes</summary>
This commit resolves an issue in the LLVMIR export that caused the duplication of the "Debug Info Version" module flag, when it was already in MLIR.
---
Full diff: https://github.com/llvm/llvm-project/pull/131627.diff
6 Files Affected:
- (modified) mlir/lib/Target/LLVMIR/DebugTranslation.cpp (+13-15)
- (modified) mlir/lib/Target/LLVMIR/DebugTranslation.h (+2-2)
- (modified) mlir/lib/Target/LLVMIR/ModuleTranslation.cpp (+4)
- (modified) mlir/test/Target/LLVMIR/llvmir-debug.mlir (+4-4)
- (modified) mlir/test/Target/LLVMIR/llvmir.mlir (+13-2)
- (modified) mlir/test/Target/LLVMIR/nvvmir.mlir (+4-4)
``````````diff
diff --git a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
index 1d3ed6f3262f9..2af3ae0bd7f4f 100644
--- a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp
@@ -32,31 +32,29 @@ DebugTranslation::DebugTranslation(Operation *module, llvm::Module &llvmModule)
if (!module->walk(interruptIfValidLocation).wasInterrupted())
return;
debugEmissionIsEnabled = true;
+}
+
+static constexpr StringRef kDebugVersionKey = "Debug Info Version";
+static constexpr StringRef kCodeViewKey = "CodeView";
+void DebugTranslation::addModuleFlagsIfNotPresent() {
// TODO: The version information should be encoded on the LLVM module itself,
// not implicitly set here.
// Mark this module as having debug information.
- StringRef debugVersionKey = "Debug Info Version";
- if (!llvmModule.getModuleFlag(debugVersionKey))
- llvmModule.addModuleFlag(llvm::Module::Warning, debugVersionKey,
+ if (!llvmModule.getModuleFlag(kDebugVersionKey))
+ llvmModule.addModuleFlag(llvm::Module::Warning, kDebugVersionKey,
llvm::DEBUG_METADATA_VERSION);
- if (auto targetTripleAttr = module->getDiscardableAttr(
- LLVM::LLVMDialect::getTargetTripleAttrName())) {
- auto targetTriple =
- llvm::Triple(cast<StringAttr>(targetTripleAttr).getValue());
- if (targetTriple.isKnownWindowsMSVCEnvironment()) {
- // Dwarf debugging files will be generated by default, unless "CodeView"
- // is set explicitly. Windows/MSVC should use CodeView instead.
- llvmModule.addModuleFlag(llvm::Module::Warning, "CodeView", 1);
- }
+ const llvm::Triple &targetTriple = llvmModule.getTargetTriple();
+ if (targetTriple.isKnownWindowsMSVCEnvironment()) {
+ // Dwarf debugging files will be generated by default, unless "CodeView"
+ // is set explicitly. Windows/MSVC should use CodeView instead.
+ if (!llvmModule.getModuleFlag(kCodeViewKey))
+ llvmModule.addModuleFlag(llvm::Module::Warning, kCodeViewKey, 1);
}
}
-/// Finalize the translation of debug information.
-void DebugTranslation::finalize() {}
-
/// Translate the debug information for the given function.
void DebugTranslation::translate(LLVMFuncOp func, llvm::Function &llvmFunc) {
if (!debugEmissionIsEnabled)
diff --git a/mlir/lib/Target/LLVMIR/DebugTranslation.h b/mlir/lib/Target/LLVMIR/DebugTranslation.h
index 930e6a2672136..b690d4820d7b0 100644
--- a/mlir/lib/Target/LLVMIR/DebugTranslation.h
+++ b/mlir/lib/Target/LLVMIR/DebugTranslation.h
@@ -31,8 +31,8 @@ class DebugTranslation {
public:
DebugTranslation(Operation *module, llvm::Module &llvmModule);
- /// Finalize the translation of debug information.
- void finalize();
+ /// Adds the necessary module flags to the module, if not yet present.
+ void addModuleFlagsIfNotPresent();
/// Translate the given location to an llvm debug location.
llvm::DILocation *translateLoc(Location loc, llvm::DILocalScope *scope);
diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index 05245c7212169..1e2f2c0468045 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -2223,6 +2223,10 @@ mlir::translateModuleToLLVMIR(Operation *module, llvm::LLVMContext &llvmContext,
// See https://llvm.org/docs/RemoveDIsDebugInfo.html
translator.llvmModule->setIsNewDbgInfoFormat(UseNewDbgInfoFormat);
+ // Add the necessary debug info module flags, if they were not encoded in MLIR
+ // beforehand.
+ translator.debugTranslation->addModuleFlagsIfNotPresent();
+
if (!disableVerification &&
llvm::verifyModule(*translator.llvmModule, &llvm::errs()))
return nullptr;
diff --git a/mlir/test/Target/LLVMIR/llvmir-debug.mlir b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
index d15274311d745..ab39a29515cc2 100644
--- a/mlir/test/Target/LLVMIR/llvmir-debug.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-debug.mlir
@@ -316,8 +316,8 @@ llvm.func @dbg_intrinsics_with_no_location(%arg0: i32) -> (i32) {
// CHECK: @global_with_expr_1 = external global i64, !dbg {{.*}}
// CHECK: @global_with_expr_2 = external global i64, !dbg {{.*}}
-// CHECK: !llvm.module.flags = !{{{.*}}}
-// CHECK: !llvm.dbg.cu = !{{{.*}}}
+// CHECK-DAG: !llvm.module.flags = !{{{.*}}}
+// CHECK-DAG: !llvm.dbg.cu = !{{{.*}}}
// CHECK-DAG: ![[FILE:.*]] = !DIFile(filename: "not", directory: "existence")
// CHECK-DAG: ![[TYPE:.*]] = !DIBasicType(name: "uint64_t", size: 64, encoding: DW_ATE_unsigned)
// CHECK-DAG: ![[SCOPE:.*]] = distinct !DICompileUnit(language: DW_LANG_C, file: ![[FILE]], producer: "MLIR", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: ![[GVALS:.*]])
@@ -336,8 +336,8 @@ llvm.mlir.global external @global_with_expr_2() {addr_space = 0 : i32, dbg_exprs
// -----
// CHECK: @module_global = external global i64, !dbg {{.*}}
-// CHECK: !llvm.module.flags = !{{{.*}}}
-// CHECK: !llvm.dbg.cu = !{{{.*}}}
+// CHECK-DAG: !llvm.module.flags = !{{{.*}}}
+// CHECK-DAG: !llvm.dbg.cu = !{{{.*}}}
// CHECK-DAG: ![[FILE:.*]] = !DIFile(filename: "test.f90", directory: "existence")
// CHECK-DAG: ![[TYPE:.*]] = !DIBasicType(name: "integer", size: 64, encoding: DW_ATE_signed)
// CHECK-DAG: ![[SCOPE:.*]] = distinct !DICompileUnit(language: DW_LANG_Fortran95, file: ![[FILE]], producer: "MLIR", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: ![[GVALS:.*]])
diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir
index ca06b26b03409..5a1f43ba1d018 100644
--- a/mlir/test/Target/LLVMIR/llvmir.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir.mlir
@@ -2774,11 +2774,22 @@ module {
#llvm.mlir.module_flag<max, "frame-pointer", 1>]
}
-// CHECK: !llvm.module.flags = !{![[#DBG:]], ![[#WCHAR:]], ![[#PIC:]], ![[#PIE:]], ![[#UWTABLE:]], ![[#FrameP:]]}
+// CHECK: !llvm.module.flags = !{![[#WCHAR:]], ![[#PIC:]], ![[#PIE:]], ![[#UWTABLE:]], ![[#FrameP:]], ![[#DBG:]]}
-// CHECK: ![[#DBG]] = !{i32 2, !"Debug Info Version", i32 3}
// CHECK: ![[#WCHAR]] = !{i32 1, !"wchar_size", i32 4}
// CHECK: ![[#PIC]] = !{i32 8, !"PIC Level", i32 2}
// CHECK: ![[#PIE]] = !{i32 7, !"PIE Level", i32 2}
// CHECK: ![[#UWTABLE]] = !{i32 7, !"uwtable", i32 2}
// CHECK: ![[#FrameP]] = !{i32 7, !"frame-pointer", i32 1}
+// CHECK: ![[#DBG]] = !{i32 2, !"Debug Info Version", i32 3}
+
+// -----
+
+// Verifies that the debug info version is not added twice, if it's already present initially.
+
+module {
+ llvm.module_flags [#llvm.mlir.module_flag<warning, "Debug Info Version", 3>]
+}
+
+// CHECK: !llvm.module.flags = !{![[#DBG:]]}
+// CHECK: ![[#DBG]] = !{i32 2, !"Debug Info Version", i32 3}
diff --git a/mlir/test/Target/LLVMIR/nvvmir.mlir b/mlir/test/Target/LLVMIR/nvvmir.mlir
index a3a70fcebb7c7..f39aca95b918f 100644
--- a/mlir/test/Target/LLVMIR/nvvmir.mlir
+++ b/mlir/test/Target/LLVMIR/nvvmir.mlir
@@ -646,8 +646,8 @@ llvm.func @kernel_func() attributes {nvvm.kernel, nvvm.maxntid = array<i32: 1, 2
// -----
// CHECK: define ptx_kernel void @kernel_func
// CHECK: !nvvm.annotations =
-// CHECK: !1 = !{ptr @kernel_func, !"grid_constant", !2}
-// CHECK: !2 = !{i32 1}
+// CHECK: !{{.*}} = !{ptr @kernel_func, !"grid_constant", ![[ID:[[:alnum:]]+]]}
+// CHECK: ![[ID]] = !{i32 1}
llvm.func @kernel_func(%arg0: !llvm.ptr {llvm.byval = i32, nvvm.grid_constant}) attributes {nvvm.kernel} {
llvm.return
}
@@ -655,8 +655,8 @@ llvm.func @kernel_func(%arg0: !llvm.ptr {llvm.byval = i32, nvvm.grid_constant})
// -----
// CHECK: define ptx_kernel void @kernel_func
// CHECK: !nvvm.annotations =
-// CHECK: !1 = !{ptr @kernel_func, !"grid_constant", !2}
-// CHECK: !2 = !{i32 1, i32 3}
+// CHECK: !{{.*}} = !{ptr @kernel_func, !"grid_constant", ![[ID:[[:alnum:]]+]]}
+// CHECK: ![[ID]] = !{i32 1, i32 3}
llvm.func @kernel_func(%arg0: !llvm.ptr {llvm.byval = i32, nvvm.grid_constant}, %arg1: f32, %arg2: !llvm.ptr {llvm.byval = f32, nvvm.grid_constant}) attributes {nvvm.kernel} {
llvm.return
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/131627
More information about the Mlir-commits
mailing list