mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 05:40:09 +00:00
[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:
parent
dbc0955314
commit
595d780b49
@ -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", []> {
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user