[MLIR][ODS] Check hasProperties when generating populateDefaultAttrs (#78525)

Currently ODS generates `populateDefaultAttrs` or
`populateDefaultProperties` based on whether the dialect opted into
usePropertiesForAttributes. But since individual ops might get opted
into using properties (as long as it has one property), it should
actually just check whether the op itself uses properties. Otherwise
`populateDefaultAttrs` will overwrite existing attrs inside properties
when creating an op. Understandably this becomes moot once everything
switches over to using properties, but this fixes it for now.

This PR makes ODS generate `populateDefaultProperties` as long as the op
itself uses properties.
This commit is contained in:
Billy Zhu 2024-01-18 21:57:20 -08:00 committed by GitHub
parent dbc0955314
commit 595d780b49
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View File

@ -173,6 +173,8 @@ def AOp : NS_Op<"a_op", []> {
// DEF: ::llvm::ArrayRef<::mlir::NamedAttribute> attributes
// DEF: odsState.addAttributes(attributes);
// DEF: void AOp::populateDefaultAttrs
// Test the above but with prefix.
def Test2_Dialect : Dialect {
@ -287,6 +289,17 @@ def AgetOp : Op<Test2_Dialect, "a_get_op", []> {
// DEF: ::llvm::ArrayRef<::mlir::NamedAttribute> attributes
// DEF: odsState.addAttributes(attributes);
// Test the above but using properties.
def ApropOp : NS_Op<"a_prop_op", []> {
let arguments = (ins
Property<"unsigned">:$aAttr,
DefaultValuedAttr<SomeAttr, "4.2">:$bAttr
);
}
// DEF-LABEL: ApropOp definitions
// DEF: void ApropOp::populateDefaultProperties
def SomeTypeAttr : TypeAttrBase<"SomeType", "some type attribute">;
def BOp : NS_Op<"b_op", []> {

View File

@ -2506,7 +2506,7 @@ void OpEmitter::genPopulateDefaultAttributes() {
}))
return;
if (op.getDialect().usePropertiesForAttributes()) {
if (emitHelper.hasProperties()) {
SmallVector<MethodParameter> paramList;
paramList.emplace_back("::mlir::OperationName", "opName");
paramList.emplace_back("Properties &", "properties");