Index: mlir/lib/TableGen/Pattern.cpp =================================================================== --- mlir/lib/TableGen/Pattern.cpp +++ mlir/lib/TableGen/Pattern.cpp @@ -257,7 +257,7 @@ auto *operand = op->getArg(*argIndex).get(); // If this operand is variadic, then return a range. Otherwise, return the // value itself. - if (operand->isVariableLength()) { + if (operand->isVariadic()) { auto repl = formatv(fmt, name); LLVM_DEBUG(llvm::dbgs() << repl << " (VariadicOperand)\n"); return std::string(repl); Index: mlir/tools/mlir-tblgen/RewriterGen.cpp =================================================================== --- mlir/tools/mlir-tblgen/RewriterGen.cpp +++ mlir/tools/mlir-tblgen/RewriterGen.cpp @@ -1221,6 +1221,8 @@ "if (auto tmpAttr = {1}) {\n" " tblgen_attrs.emplace_back(rewriter.getIdentifier(\"{0}\"), " "tmpAttr);\n}\n"; + const char *addOperandCmd = "if (auto tmpOperand = {0}) {{\n" + " tblgen_values.push_back(tmpOperand);\n}\n"; for (int argIndex = 0, e = resultOp.getNumArgs(); argIndex < e; ++argIndex) { if (resultOp.getArg(argIndex).is()) { // The argument in the op definition. @@ -1257,22 +1259,22 @@ os << formatv("for (auto v: {0}) {{\n tblgen_values.push_back(v);\n}\n", range); } else { - os << formatv("tblgen_values.push_back("); + std::string tmpSymbol; if (node.isNestedDagArg(argIndex)) { - os << symbolInfoMap.getValueAndRangeUse( - childNodeNames.lookup(argIndex)); + tmpSymbol = + symbolInfoMap.getValueAndRangeUse(childNodeNames.lookup(argIndex)); } else { DagLeaf leaf = node.getArgAsLeaf(argIndex); auto symbol = symbolInfoMap.getValueAndRangeUse(node.getArgName(argIndex)); if (leaf.isNativeCodeCall()) { - os << std::string( + tmpSymbol = std::string( tgfmt(leaf.getNativeCodeTemplate(), &fmtCtx.withSelf(symbol))); } else { - os << symbol; + tmpSymbol = symbol; } } - os << ");\n"; + os << formatv(addOperandCmd, tmpSymbol); } } }