[Mlir-commits] [mlir] [mlir][LLVMIR] Handle missing functions in CGProfile module flags (PR #169517)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Nov 26 10:38:32 PST 2025


https://github.com/Men-cotton updated https://github.com/llvm/llvm-project/pull/169517

>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 1/5] [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>
+                    >>]
+}

>From 263187102eed3ad59a4f08438d2cd15f2d56b8d1 Mon Sep 17 00:00:00 2001
From: mencotton <mencotton0410 at gmail.com>
Date: Wed, 26 Nov 2025 22:11:48 +0900
Subject: [PATCH 2/5] Fix: drop unnecessary const

---
 .../LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp      | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
index f11b9a6c61690..b6ea4ba6e4921 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
@@ -243,8 +243,7 @@ convertModuleFlagValue(StringRef key, ArrayAttr arrayAttr,
 
   if (key == LLVMDialect::getModuleFlagKeyCGProfileName()) {
     for (auto entry : arrayAttr.getAsRange<ModuleFlagCGProfileEntryAttr>()) {
-      const auto getFuncMetadata =
-          [&](FlatSymbolRefAttr sym) -> llvm::Metadata * {
+      auto getFuncMetadata = [&](FlatSymbolRefAttr sym) -> llvm::Metadata * {
         if (!sym)
           return nullptr;
         if (llvm::Function *fn =
@@ -252,8 +251,8 @@ convertModuleFlagValue(StringRef key, ArrayAttr arrayAttr,
           return llvm::ValueAsMetadata::get(fn);
         return nullptr;
       };
-      llvm::Metadata *const fromMetadata = getFuncMetadata(entry.getFrom());
-      llvm::Metadata *const toMetadata = getFuncMetadata(entry.getTo());
+      llvm::Metadata *fromMetadata = getFuncMetadata(entry.getFrom());
+      llvm::Metadata *toMetadata = getFuncMetadata(entry.getTo());
 
       llvm::Metadata *vals[] = {
           fromMetadata, toMetadata,

>From 9ff428edcede8900b1adea3bc2f5906a6321e532 Mon Sep 17 00:00:00 2001
From: mencotton <mencotton0410 at gmail.com>
Date: Wed, 26 Nov 2025 22:35:05 +0900
Subject: [PATCH 3/5] Fix: drop the module flags

---
 .../Dialect/LLVMIR/invalid-cg-profile.mlir    | 20 ++-----------------
 1 file changed, 2 insertions(+), 18 deletions(-)

diff --git a/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
index d7a0f386303e0..a5b50fa1c4cfe 100644
--- a/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
+++ b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
@@ -2,25 +2,9 @@
 // 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.module_flags [#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>
-                    >>]
+                    ]>]
 }

>From 6ca0824d7089b5b9a1529e03dd5ff408691ee693 Mon Sep 17 00:00:00 2001
From: mencotton <mencotton0410 at gmail.com>
Date: Wed, 26 Nov 2025 22:35:31 +0900
Subject: [PATCH 4/5] Fix: expand the checks to cover the exported cgprofile
 entry

---
 mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
index a5b50fa1c4cfe..bf8c4a0e99114 100644
--- a/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
+++ b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
@@ -1,5 +1,9 @@
 // RUN: mlir-translate %s -mlir-to-llvmir | FileCheck %s
-// CHECK: !llvm.module.flags
+// CHECK: !llvm.module.flags = !{!0, !3}
+// CHECK: !0 = !{i32 5, !"CG Profile", !1}
+// CHECK: !1 = distinct !{!2, !2, !2}
+// CHECK: !2 = !{null, null, i64 222}
+// CHECK: !3 = !{i32 2, !"Debug Info Version", i32 3}
 
 module {
   llvm.module_flags [#llvm.mlir.module_flag<append, "CG Profile", [

>From 606cf9cbae31e54745c7d36eae177e7dcabb8a38 Mon Sep 17 00:00:00 2001
From: mencotton <mencotton0410 at gmail.com>
Date: Thu, 27 Nov 2025 03:33:24 +0900
Subject: [PATCH 5/5] Fix: use matchers

---
 mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
index bf8c4a0e99114..86d177acfdfaf 100644
--- a/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
+++ b/mlir/test/Dialect/LLVMIR/invalid-cg-profile.mlir
@@ -1,9 +1,9 @@
 // RUN: mlir-translate %s -mlir-to-llvmir | FileCheck %s
-// CHECK: !llvm.module.flags = !{!0, !3}
-// CHECK: !0 = !{i32 5, !"CG Profile", !1}
-// CHECK: !1 = distinct !{!2, !2, !2}
-// CHECK: !2 = !{null, null, i64 222}
-// CHECK: !3 = !{i32 2, !"Debug Info Version", i32 3}
+// CHECK: !llvm.module.flags = !{![[CG_FLAG:[0-9]+]], ![[DBG_FLAG:[0-9]+]]}
+// CHECK: [[CG_FLAG]] = !{i32 5, !"CG Profile", [[CG_LIST:![0-9]+]]}
+// CHECK: [[CG_LIST]] = distinct !{[[CG_ENTRY:![0-9]+]], [[CG_ENTRY]], [[CG_ENTRY]]}
+// CHECK: [[CG_ENTRY]] = !{null, null, i64 222}
+// CHECK: [[DBG_FLAG]] = !{i32 2, !"Debug Info Version", i32 3}
 
 module {
   llvm.module_flags [#llvm.mlir.module_flag<append, "CG Profile", [



More information about the Mlir-commits mailing list