[Mlir-commits] [mlir] [MLIR][LLVM] Add ProfileSummary module flag support (PR #138070)
Christian Ulmann
llvmlistbot at llvm.org
Fri May 2 00:03:25 PDT 2025
================
@@ -300,9 +300,71 @@ convertModuleFlagValue(StringRef key, ArrayAttr arrayAttr,
}
return llvm::MDTuple::getDistinct(context, nodes);
}
+
return nullptr;
}
+static llvm::Metadata *convertModuleFlagProfileSummaryAttr(
+ StringRef key, ModuleFlagProfileSummaryAttr summaryAttr,
+ llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) {
+ llvm::LLVMContext &context = builder.getContext();
+ llvm::MDBuilder mdb(context);
+ SmallVector<llvm::Metadata *> summaryNodes;
+
+ auto getIntTuple = [&](StringRef key, uint64_t val) -> llvm::MDTuple * {
+ SmallVector<llvm::Metadata *> tupleNodes{
+ mdb.createString(key), mdb.createConstant(llvm::ConstantInt::get(
+ llvm::Type::getInt64Ty(context), val))};
+ return llvm::MDTuple::get(context, tupleNodes);
+ };
+
+ SmallVector<llvm::Metadata *> fmtNode{
+ mdb.createString("ProfileFormat"),
+ mdb.createString(
+ stringifyProfileSummaryFormatKind(summaryAttr.getFormat()))};
+
+ SmallVector<llvm::Metadata *> vals = {
+ llvm::MDTuple::get(context, fmtNode),
+ getIntTuple("TotalCount", summaryAttr.getTotalCount()),
+ getIntTuple("MaxCount", summaryAttr.getMaxCount()),
+ getIntTuple("MaxInternalCount", summaryAttr.getMaxInternalCount()),
+ getIntTuple("MaxFunctionCount", summaryAttr.getMaxFunctionCount()),
+ getIntTuple("NumCounts", summaryAttr.getNumCounts()),
+ getIntTuple("NumFunctions", summaryAttr.getNumFunctions()),
+ };
+
+ if (summaryAttr.getIsPartialProfile())
+ vals.push_back(
+ getIntTuple("IsPartialProfile", *summaryAttr.getIsPartialProfile()));
+
+ if (summaryAttr.getPartialProfileRatio()) {
+ SmallVector<llvm::Metadata *> tupleNodes{
+ mdb.createString("PartialProfileRatio"),
+ mdb.createConstant(llvm::ConstantFP::get(
+ llvm::Type::getDoubleTy(context),
+ summaryAttr.getPartialProfileRatio().getValue()))};
+ vals.push_back(llvm::MDTuple::get(context, tupleNodes));
+ }
+
+ SmallVector<llvm::Metadata *> detailedEntries;
+ for (auto detailedEntry : summaryAttr.getDetailedSummary()) {
+ SmallVector<llvm::Metadata *> tupleNodes{
+ mdb.createConstant(llvm::ConstantInt::get(
+ llvm::Type::getInt64Ty(context), detailedEntry.getCutOff())),
----------------
Dinistro wrote:
Nit: Maybe keep the `i64` type around somewhere?
https://github.com/llvm/llvm-project/pull/138070
More information about the Mlir-commits
mailing list