forked from OSchip/llvm-project
[mlir][assemblyFormat] Fix bug when using AttrSizedOperandSegments trait with only non-buildable operand types
Summary: When creating an operation with * `AttrSizedOperandSegments` trait * Variadic operands of only non-buildable types * assemblyFormat to automatically generate the parser the `builder` local variable is used, but never declared. This adds a fix as well as a test for this case as existing ones use buildable types only. Reviewers: rriddle, Kayjukh, grosser Reviewed By: Kayjukh Subscribers: mehdi_amini, jpienaar, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, grosul1, frgossen, llvm-commits Tags: #mlir, #llvm Differential Revision: https://reviews.llvm.org/D79004
This commit is contained in:
parent
c4c3883b00
commit
edb77864ef
|
@ -1258,6 +1258,16 @@ def FormatOptionalOperandResultBOp : FormatOptionalOperandResultOpBase<"b", [{
|
|||
(`[` $variadic^ `]`)? attr-dict
|
||||
}]>;
|
||||
|
||||
def FormatTwoVariadicOperandsNoBuildableTypeOp
|
||||
: TEST_Op<"format_two_variadic_operands_no_buildable_type_op",
|
||||
[AttrSizedOperandSegments]> {
|
||||
let arguments = (ins Variadic<AnyType>:$a,
|
||||
Variadic<AnyType>:$b);
|
||||
let assemblyFormat = [{
|
||||
`(` $a `:` type($a) `)` `->` `(` $b `:` type($b) `)` attr-dict
|
||||
}];
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Test SideEffects
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -741,10 +741,8 @@ void OperationFormat::genParserTypeResolution(Operator &op,
|
|||
|
||||
// Initialize the set of buildable types.
|
||||
if (!buildableTypes.empty()) {
|
||||
body << " Builder &builder = parser.getBuilder();\n";
|
||||
|
||||
FmtContext typeBuilderCtx;
|
||||
typeBuilderCtx.withBuilder("builder");
|
||||
typeBuilderCtx.withBuilder("parser.getBuilder()");
|
||||
for (auto &it : buildableTypes)
|
||||
body << " Type odsBuildableType" << it.second << " = "
|
||||
<< tgfmt(it.first, &typeBuilderCtx) << ";\n";
|
||||
|
@ -867,7 +865,7 @@ void OperationFormat::genParserVariadicSegmentResolution(Operator &op,
|
|||
OpMethodBody &body) {
|
||||
if (!allOperands && op.getTrait("OpTrait::AttrSizedOperandSegments")) {
|
||||
body << " result.addAttribute(\"operand_segment_sizes\", "
|
||||
<< "builder.getI32VectorAttr({";
|
||||
<< "parser.getBuilder().getI32VectorAttr({";
|
||||
auto interleaveFn = [&](const NamedTypeConstraint &operand) {
|
||||
// If the operand is variadic emit the parsed size.
|
||||
if (operand.isVariableLength())
|
||||
|
|
Loading…
Reference in New Issue