diff options
| -rw-r--r-- | mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp | 17 | ||||
| -rw-r--r-- | mlir/tools/mlir-tblgen/OpFormatGen.cpp | 11 | ||||
| -rw-r--r-- | mlir/unittests/IR/AdaptorTest.cpp | 8 |
3 files changed, 22 insertions, 14 deletions
diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp index 7da61ff..44cb61a 100644 --- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -164,7 +164,7 @@ if ($_reader.getBytecodeVersion() < /*kNativePropertiesODSSegmentSize=*/6) { $_reader.emitError("size mismatch for operand/result_segment_size"); return failure(); } - llvm::copy(ArrayRef<int32_t>(attr), $_storage); + llvm::copy(ArrayRef<int32_t>(attr), $_storage.begin()); } else { return $_reader.readSparseArray(MutableArrayRef($_storage)); } @@ -429,7 +429,8 @@ void OpOrAdaptorHelper::computeAttrMetadata() { /*storageType=*/storageType, /*interfaceType=*/"::llvm::ArrayRef<int32_t>", /*convertFromStorageCall=*/"$_storage", - /*assignToStorageCall=*/"::llvm::copy($_value, $_storage)", + /*assignToStorageCall=*/ + "llvm::copy($_value, $_storage.begin())", /*convertToAttributeCall=*/ "DenseI32ArrayAttr::get($_ctxt, $_storage)", /*convertFromAttributeCall=*/ @@ -445,7 +446,7 @@ void OpOrAdaptorHelper::computeAttrMetadata() { if (op.getTrait("::mlir::OpTrait::AttrSizedOperandSegments")) { if (op.getDialect().usePropertiesForAttributes()) { operandSegmentsSizeStorage = - llvm::formatv("int32_t[{0}]", op.getNumOperands()); + llvm::formatv("std::array<int32_t, {0}>", op.getNumOperands()); operandSegmentsSize = {"odsOperandSegmentSizes", makeProperty(operandSegmentsSizeStorage)}; } else { @@ -458,7 +459,7 @@ void OpOrAdaptorHelper::computeAttrMetadata() { if (op.getTrait("::mlir::OpTrait::AttrSizedResultSegments")) { if (op.getDialect().usePropertiesForAttributes()) { resultSegmentsSizeStorage = - llvm::formatv("int32_t[{0}]", op.getNumResults()); + llvm::formatv("std::array<int32_t, {0}>", op.getNumResults()); resultSegmentsSize = {"odsResultSegmentSizes", makeProperty(resultSegmentsSizeStorage)}; } else { @@ -1491,7 +1492,7 @@ void OpEmitter::genPropertiesSupport() { if (!arrAttr) return; if (arrAttr.size() != sizeof(prop.{0}) / sizeof(int32_t)) return; - llvm::copy(arrAttr.asArrayRef(), prop.{0}); + llvm::copy(arrAttr.asArrayRef(), prop.{0}.begin()); return; } )decl", @@ -2341,7 +2342,8 @@ void OpEmitter::genSeparateArgParamBuilder() { }); if (op.getDialect().usePropertiesForAttributes()) { body << "}), " << builderOpState - << ".getOrAddProperties<Properties>().odsResultSegmentSizes);\n"; + << ".getOrAddProperties<Properties>()." + "odsResultSegmentSizes.begin());\n"; } else { body << "}));\n"; } @@ -2966,7 +2968,8 @@ void OpEmitter::genCodeForAddingArgAndRegionForBuilder( body << " llvm::copy(ArrayRef<int32_t>({"; emitSegment(); body << "}), " << builderOpState - << ".getOrAddProperties<Properties>().odsOperandSegmentSizes);\n"; + << ".getOrAddProperties<Properties>()." + "odsOperandSegmentSizes.begin());\n"; } else { body << " " << builderOpState << ".addAttribute(" << sizes << "AttrName(" << builderOpState << ".name), " diff --git a/mlir/tools/mlir-tblgen/OpFormatGen.cpp b/mlir/tools/mlir-tblgen/OpFormatGen.cpp index 2efd82f..c38f873 100644 --- a/mlir/tools/mlir-tblgen/OpFormatGen.cpp +++ b/mlir/tools/mlir-tblgen/OpFormatGen.cpp @@ -1666,7 +1666,7 @@ void OperationFormat::genParserVariadicSegmentResolution(Operator &op, llvm::interleaveComma(op.getOperands(), body, interleaveFn); body << formatv("}), " "result.getOrAddProperties<{0}::Properties>()." - "odsOperandSegmentSizes);\n", + "odsOperandSegmentSizes.begin());\n", op.getCppClassName()); } else { body << " result.addAttribute(\"operand_segment_sizes\", " @@ -1708,11 +1708,10 @@ void OperationFormat::genParserVariadicSegmentResolution(Operator &op, if (op.getDialect().usePropertiesForAttributes()) { body << "llvm::copy(ArrayRef<int32_t>({"; llvm::interleaveComma(op.getResults(), body, interleaveFn); - body << formatv( - "}), " - "result.getOrAddProperties<{0}::Properties>().odsResultSegmentSizes" - ");\n", - op.getCppClassName()); + body << formatv("}), " + "result.getOrAddProperties<{0}::Properties>()." + "odsResultSegmentSizes.begin());\n", + op.getCppClassName()); } else { body << " result.addAttribute(\"result_segment_sizes\", " << "parser.getBuilder().getDenseI32ArrayAttr({"; diff --git a/mlir/unittests/IR/AdaptorTest.cpp b/mlir/unittests/IR/AdaptorTest.cpp index aae8c1a..4d1d49f 100644 --- a/mlir/unittests/IR/AdaptorTest.cpp +++ b/mlir/unittests/IR/AdaptorTest.cpp @@ -40,12 +40,18 @@ TEST(Adaptor, GenericAdaptorsOperandAccess) { // value from the value 0. SmallVector<std::optional<int>> v = {0, 4}; OIListSimple::Properties prop; - llvm::copy(ArrayRef{1, 0, 1}, prop.odsOperandSegmentSizes); + prop.odsOperandSegmentSizes = {1, 0, 1}; OIListSimple::GenericAdaptor<ArrayRef<std::optional<int>>> d(v, {}, prop, {}); EXPECT_EQ(d.getArg0(), 0); EXPECT_EQ(d.getArg1(), std::nullopt); EXPECT_EQ(d.getArg2(), 4); + + // Check the property comparison operator. + OIListSimple::Properties equivalentProp = {1, 0, 1}; + OIListSimple::Properties differentProp = {0, 0, 1}; + EXPECT_EQ(d.getProperties(), equivalentProp); + EXPECT_NE(d.getProperties(), differentProp); } // Has VariadicOfVariadic arguments. |
