[Mlir-commits] [mlir] [MLIR][LLVM] Add ProfileSummary module flag support (PR #138070)

Tobias Gysi llvmlistbot at llvm.org
Thu May 1 01:15:41 PDT 2025


================
@@ -554,13 +554,262 @@ static Attribute convertCGProfileModuleFlagValue(ModuleOp mlirModule,
   return ArrayAttr::get(mlirModule->getContext(), cgProfile);
 }
 
+static Attribute
+convertProfileSummaryModuleFlagValue(ModuleOp mlirModule,
+                                     const llvm::Module *llvmModule,
+                                     llvm::MDTuple *mdTuple) {
+  unsigned profileNumEntries = mdTuple->getNumOperands();
+  if (profileNumEntries < 8) {
+    emitWarning(mlirModule.getLoc())
+        << "expected at 8 entries in 'ProfileSummary': "
+        << diagMD(mdTuple, llvmModule);
+    return nullptr;
+  }
+
+  unsigned summayIdx = 0;
+
+  auto getMDTuple = [&](const llvm::MDOperand &md) {
+    auto *tupleEntry = dyn_cast_or_null<llvm::MDTuple>(md);
+    if (!tupleEntry || tupleEntry->getNumOperands() != 2)
+      emitWarning(mlirModule.getLoc())
+          << "expected 2-element tuple metadata: " << diagMD(md, llvmModule);
+    return tupleEntry;
+  };
+
+  auto getFormat = [&](const llvm::MDOperand &formatMD) -> StringAttr {
+    auto *tupleEntry = getMDTuple(formatMD);
+    if (!tupleEntry)
+      return nullptr;
+
+    llvm::MDString *keyMD = dyn_cast<llvm::MDString>(tupleEntry->getOperand(0));
+    if (!keyMD || keyMD->getString() != "ProfileFormat") {
+      emitWarning(mlirModule.getLoc())
+          << "expected 'ProfileFormat' key: "
+          << diagMD(tupleEntry->getOperand(0), llvmModule);
+      return nullptr;
+    }
+
+    llvm::MDString *valMD = dyn_cast<llvm::MDString>(tupleEntry->getOperand(1));
+    auto formatAttr = llvm::StringSwitch<std::string>(valMD->getString())
----------------
gysit wrote:

Did you consider to introduce a tablegen enum? For example something like DIEmissionKind (an I32Enum should be good enough)? That should give as symbolize and stringify functions for conversion. 

https://github.com/llvm/llvm-project/pull/138070


More information about the Mlir-commits mailing list