[Mlir-commits] [mlir] [MLIR] Reduce generated assembly printer compile time (NFC) (PR #225740)
Mehdi Amini
llvmlistbot at llvm.org
Wed Sep 23 05:57:03 PDT 2026
================
@@ -2723,14 +2723,37 @@ static void genPropDictPrinter(OperationFormat &fmt, Operator &op,
/// Generate the printer for the 'attr-dict' directive.
static void genAttrDictPrinter(OperationFormat &fmt, Operator &op,
MethodBody &body, bool withKeyword) {
- body << " ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs;\n";
-
- genVariadicSegmentElision(fmt, op, body, "elidedAttrs");
-
+ SmallVector<StringRef> fixedElidedAttrs;
+ if (!fmt.allOperands &&
+ op.getTrait("::mlir::OpTrait::AttrSizedOperandSegments"))
+ fixedElidedAttrs.push_back("operandSegmentSizes");
+ if (!fmt.allResultTypes &&
+ op.getTrait("::mlir::OpTrait::AttrSizedResultSegments"))
+ fixedElidedAttrs.push_back("resultSegmentSizes");
for (StringRef key : fmt.inferredAttributes.keys())
- body << " elidedAttrs.push_back(\"" << key << "\");\n";
+ fixedElidedAttrs.push_back(key);
for (const NamedAttribute *attr : fmt.usedAttributes)
- body << " elidedAttrs.push_back(\"" << attr->name << "\");\n";
+ fixedElidedAttrs.push_back(attr->name);
+
+ bool hasConditionalElision =
+ llvm::any_of(op.getAttributes(), [&](const NamedAttribute &namedAttr) {
+ return !fmt.usedAttributes.contains(&namedAttr) &&
+ !namedAttr.attr.isDerivedAttr() &&
+ namedAttr.attr.hasDefaultValue();
+ });
+ if (hasConditionalElision) {
+ body << " ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs;\n";
+ for (StringRef name : fixedElidedAttrs)
+ body << " elidedAttrs.push_back(\"" << name << "\");\n";
+ } else if (fixedElidedAttrs.empty()) {
+ body << " ::llvm::ArrayRef<::llvm::StringRef> elidedAttrs;\n";
+ } else {
+ body << " static constexpr ::llvm::StringRef elidedAttrs[] = {";
----------------
joker-eph wrote:
This is a statically sized array, but in the conditional elision case, we need to append more later.
https://github.com/llvm/llvm-project/pull/225740
More information about the Mlir-commits
mailing list