diff --git a/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td b/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td index 4069e43af82e8..af8bf36397b5b 100644 --- a/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td +++ b/mlir/include/mlir/Dialect/Arith/IR/ArithOps.td @@ -1556,15 +1556,6 @@ def Arith_CmpFOp : Arith_CompareOp<"cmpf", static arith::CmpFPredicate getPredicateByName(StringRef name); }]; - let builders = [ - OpBuilder<(ins "::mlir::arith::CmpFPredicateAttr":$predicate, - "Value":$lhs, "Value":$rhs), [{ - build($_builder, $_state, predicate, lhs, rhs, - mlir::arith::FastMathFlagsAttr::get($_builder.getContext(), - mlir::arith::FastMathFlags::none)); - }]> - ]; - let hasFolder = 1; let hasCanonicalizer = 1; let assemblyFormat = [{ $predicate `,` $lhs `,` $rhs (`fastmath` `` $fastmath^)? diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td index b1d3a32598c88..f7bd2cb99890a 100644 --- a/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td +++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td @@ -1905,24 +1905,6 @@ def Tosa_RescaleOp: Tosa_Op<"rescale", [Pure, Tosa_Tensor:$output ); - // Custom builder that does not require optional input_unsigned and - // output_unsigned. - let builders = [ - OpBuilder<(ins "::mlir::Type":$output, - "::mlir::Value":$input, - "::mlir::IntegerAttr":$input_zp, - "::mlir::IntegerAttr":$output_zp, - "::mlir::DenseI32ArrayAttr":$multiplier, - "::mlir::DenseI8ArrayAttr":$shift, - "::mlir::BoolAttr":$scale32, - "::mlir::BoolAttr":$double_round, - "::mlir::BoolAttr":$per_channel), [{ - auto FalseAttr = BoolAttr::get($_builder.getContext(), false); - build($_builder, $_state, output, input, input_zp, output_zp, multiplier, - shift, scale32, double_round, per_channel, FalseAttr, FalseAttr); - }]> - ]; - let assemblyFormat = "operands attr-dict `:` functional-type(operands, results)"; } diff --git a/mlir/test/mlir-tblgen/op-default-builder.td b/mlir/test/mlir-tblgen/op-default-builder.td index 82386f245bc5d..9881f925a1922 100644 --- a/mlir/test/mlir-tblgen/op-default-builder.td +++ b/mlir/test/mlir-tblgen/op-default-builder.td @@ -31,9 +31,9 @@ def AOp : NS_Op<"a_op", []> { // CHECK-LABEL: AOp declarations // Note: `cAttr` below could be conditionally optional and so the generation is // currently conservative. -// CHECK-DAG: ::mlir::Value lhs, some-attr-kind aAttr, some-attr-kind bAttr, /*optional*/some-attr-kind cAttr, /*optional*/some-attr-kind dAttr); +// CHECK-DAG: ::mlir::Value lhs, some-attr-kind aAttr, some-attr-kind bAttr, /*optional*/some-attr-kind cAttr, /*optional*/some-attr-kind dAttr = nullptr); // CHECK-DAG: ::mlir::Value lhs, some-return-type aAttr, some-return-type bAttr, /*optional*/some-attr-kind cAttr, /*optional*/some-return-type dAttr = 7.2); -// CHECK-DAG: ::mlir::TypeRange resultTypes, ::mlir::Value lhs, some-attr-kind aAttr, some-attr-kind bAttr, /*optional*/some-attr-kind cAttr, /*optional*/some-attr-kind dAttr); +// CHECK-DAG: ::mlir::TypeRange resultTypes, ::mlir::Value lhs, some-attr-kind aAttr, some-attr-kind bAttr, /*optional*/some-attr-kind cAttr, /*optional*/some-attr-kind dAttr = nullptr); // CHECK-DAG: ::mlir::TypeRange resultTypes, ::mlir::Value lhs, some-return-type aAttr, some-return-type bAttr, /*optional*/some-attr-kind cAttr, /*optional*/some-return-type dAttr = 7.2); def BOp : NS_Op<"b_op", []> { diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp index 9badb7aa163a6..59ae7777da567 100644 --- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -3088,6 +3088,26 @@ void OpEmitter::buildParamList(SmallVectorImpl ¶mList, defaultValuedAttrStartIndex = i; } } + + // Check if parameters besides default valued one are enough to distinguish + // between builders with wrapped and unwrapped arguments. + bool hasBuilderAmbiguity = true; + for (const auto &arg : op.getArgs()) { + auto *namedAttr = dyn_cast(arg); + if (!namedAttr) + continue; + Attribute attr = namedAttr->attr; + if (attr.hasDefaultValue() || attr.isDerivedAttr()) + continue; + + if (attrParamKind != AttrParamKind::WrappedAttr || + !canUseUnwrappedRawValue(attr)) + continue; + + hasBuilderAmbiguity = false; + break; + } + // Avoid generating build methods that are ambiguous due to default values by // requiring at least one attribute. if (defaultValuedAttrStartIndex < op.getNumArgs()) { @@ -3098,9 +3118,9 @@ void OpEmitter::buildParamList(SmallVectorImpl ¶mList, cast(op.getArg(defaultValuedAttrStartIndex)); Attribute attr = namedAttr->attr; if ((attrParamKind == AttrParamKind::WrappedAttr && - canUseUnwrappedRawValue(attr)) || + canUseUnwrappedRawValue(attr) && hasBuilderAmbiguity) || (attrParamKind == AttrParamKind::UnwrappedValue && - !canUseUnwrappedRawValue(attr))) { + !canUseUnwrappedRawValue(attr) && hasBuilderAmbiguity)) { ++defaultValuedAttrStartIndex; defaultValuedAttrLikeStartIndex = defaultValuedAttrStartIndex; }