[Mlir-commits] [mlir] [mlir][LLVMIR] Handle missing functions in CGProfile module flags (PR #169517)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Nov 25 08:36:29 PST 2025
https://github.com/Men-cotton created https://github.com/llvm/llvm-project/pull/169517
Fixes: https://github.com/llvm/llvm-project/issues/160717
Now `build/bin/mlir-translate -mlir-to-llvmir mlir/test/Dialect/LLVMIR/module-roundtrip.mlir` passes.
>From f93bd2b082a6571d316224ec2a4633ddad842dda Mon Sep 17 00:00:00 2001
From: mencotton <mencotton0410 at gmail.com>
Date: Wed, 26 Nov 2025 01:33:15 +0900
Subject: [PATCH] [mlir][LLVMIR] Handle missing functions in CGProfile module
flags
---
.../LLVMIR/LLVMToLLVMIRTranslation.cpp | 21 ++++++++-------
.../Dialect/LLVMIR/invalid-cg-profile.mlir | 26 +++++++++++++++++++
2 files changed, 37 insertions(+), 10 deletions(-)
create mode 100644 mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
index 7d3486acaf82a..f11b9a6c61690 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
@@ -243,16 +243,17 @@ convertModuleFlagValue(StringRef key, ArrayAttr arrayAttr,
if (key == LLVMDialect::getModuleFlagKeyCGProfileName()) {
for (auto entry : arrayAttr.getAsRange<ModuleFlagCGProfileEntryAttr>()) {
- llvm::Metadata *fromMetadata =
- entry.getFrom()
- ? llvm::ValueAsMetadata::get(moduleTranslation.lookupFunction(
- entry.getFrom().getValue()))
- : nullptr;
- llvm::Metadata *toMetadata =
- entry.getTo()
- ? llvm::ValueAsMetadata::get(
- moduleTranslation.lookupFunction(entry.getTo().getValue()))
- : nullptr;
+ const auto getFuncMetadata =
+ [&](FlatSymbolRefAttr sym) -> llvm::Metadata * {
+ if (!sym)
+ return nullptr;
+ if (llvm::Function *fn =
+ moduleTranslation.lookupFunction(sym.getValue()))
+ return llvm::ValueAsMetadata::get(fn);
+ return nullptr;
+ };
+ llvm::Metadata *const fromMetadata = getFuncMetadata(entry.getFrom());
+ llvm::Metadata *const toMetadata = getFuncMetadata(entry.getTo());
llvm::Metadata *vals[] = {
fromMetadata, toMetadata,
diff --git a/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
new file mode 100644
index 0000000000000..d7a0f386303e0
--- /dev/null
+++ b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
@@ -0,0 +1,26 @@
+// RUN: mlir-translate %s -mlir-to-llvmir | FileCheck %s
+// CHECK: !llvm.module.flags
+
+module {
+ llvm.module_flags [#llvm.mlir.module_flag<error, "wchar_size", 4 : i32>,
+ #llvm.mlir.module_flag<min, "PIC Level", 2 : i32>,
+ #llvm.mlir.module_flag<max, "PIE Level", 2 : i32>,
+ #llvm.mlir.module_flag<max, "uwtable", 2 : i32>,
+ #llvm.mlir.module_flag<max, "frame-pointer", 1 : i32>,
+ #llvm.mlir.module_flag<override, "probe-stack", "inline-asm">,
+ #llvm.mlir.module_flag<append, "CG Profile", [
+ #llvm.cgprofile_entry<from = @from, to = @to, count = 222>,
+ #llvm.cgprofile_entry<from = @from, count = 222>,
+ #llvm.cgprofile_entry<from = @to, to = @from, count = 222>
+ ]>,
+ #llvm.mlir.module_flag<error, "ProfileSummary",
+ #llvm.profile_summary<format = InstrProf, total_count = 263646, max_count = 86427,
+ max_internal_count = 86427, max_function_count = 4691,
+ num_counts = 3712, num_functions = 796,
+ is_partial_profile = 0,
+ partial_profile_ratio = 0.000000e+00 : f64,
+ detailed_summary =
+ <cut_off = 10000, min_count = 86427, num_counts = 1>,
+ <cut_off = 100000, min_count = 86427, num_counts = 1>
+ >>]
+}
More information about the Mlir-commits
mailing list