From: Andrew Young Date: Sat, 16 Oct 2021 01:29:33 +0000 (-0700) Subject: [MLIR] Expose optional attribute parsing functions X-Git-Tag: upstream/15.0.7~28311 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=44b22f6f40f15ff24545c5fb0d612b3d86591955;p=platform%2Fupstream%2Fllvm.git [MLIR] Expose optional attribute parsing functions The functionality already exists in AsmParser to parse optional ArrayAttrs and StringAttrs, but only if they are added to a NamedAttrList. This moves the code to parse an optional attribute and add it to an list into a common template, and exposes the simpler functionality of just parsing the optional attributes. Reviewed By: rriddle Differential Revision: https://reviews.llvm.org/D111918 --- diff --git a/mlir/include/mlir/IR/OpImplementation.h b/mlir/include/mlir/IR/OpImplementation.h index 2cbe088..db1f7a3 100644 --- a/mlir/include/mlir/IR/OpImplementation.h +++ b/mlir/include/mlir/IR/OpImplementation.h @@ -639,28 +639,6 @@ public: return parseAttribute(result, Type(), attrName, attrs); } - /// Parse an optional attribute. - virtual OptionalParseResult parseOptionalAttribute(Attribute &result, - Type type, - StringRef attrName, - NamedAttrList &attrs) = 0; - template - OptionalParseResult parseOptionalAttribute(AttrT &result, StringRef attrName, - NamedAttrList &attrs) { - return parseOptionalAttribute(result, Type(), attrName, attrs); - } - - /// Specialized variants of `parseOptionalAttribute` that remove potential - /// ambiguities in syntax. - virtual OptionalParseResult parseOptionalAttribute(ArrayAttr &result, - Type type, - StringRef attrName, - NamedAttrList &attrs) = 0; - virtual OptionalParseResult parseOptionalAttribute(StringAttr &result, - Type type, - StringRef attrName, - NamedAttrList &attrs) = 0; - /// Parse an arbitrary attribute of a given type and return it in result. This /// also adds the attribute to the specified attribute list with the specified /// name. @@ -683,6 +661,40 @@ public: return success(); } + /// Parse an arbitrary optional attribute of a given type and return it in + /// result. + virtual OptionalParseResult parseOptionalAttribute(Attribute &result, + Type type = {}) = 0; + + /// Parse an optional array attribute and return it in result. + virtual OptionalParseResult parseOptionalAttribute(ArrayAttr &result, + Type type = {}) = 0; + + /// Parse an optional string attribute and return it in result. + virtual OptionalParseResult parseOptionalAttribute(StringAttr &result, + Type type = {}) = 0; + + /// Parse an optional attribute of a specific type and add it to the list with + /// the specified name. + template + OptionalParseResult parseOptionalAttribute(AttrType &result, + StringRef attrName, + NamedAttrList &attrs) { + return parseOptionalAttribute(result, Type(), attrName, attrs); + } + + /// Parse an optional attribute of a specific type and add it to the list with + /// the specified name. + template + OptionalParseResult parseOptionalAttribute(AttrType &result, Type type, + StringRef attrName, + NamedAttrList &attrs) { + OptionalParseResult parseResult = parseOptionalAttribute(result, type); + if (parseResult.hasValue() && succeeded(*parseResult)) + attrs.append(attrName, result); + return parseResult; + } + /// Parse a named dictionary into 'result' if it is present. virtual ParseResult parseOptionalAttrDict(NamedAttrList &result) = 0; diff --git a/mlir/lib/Parser/AsmParserImpl.h b/mlir/lib/Parser/AsmParserImpl.h index 2d35225..70039c2 100644 --- a/mlir/lib/Parser/AsmParserImpl.h +++ b/mlir/lib/Parser/AsmParserImpl.h @@ -343,31 +343,17 @@ public: return success(static_cast(result)); } - /// Parse an optional attribute. - template - OptionalParseResult - parseOptionalAttributeAndAddToList(AttrT &result, Type type, - StringRef attrName, NamedAttrList &attrs) { - OptionalParseResult parseResult = - parser.parseOptionalAttribute(result, type); - if (parseResult.hasValue() && succeeded(*parseResult)) - attrs.push_back(parser.builder.getNamedAttr(attrName, result)); - return parseResult; - } - OptionalParseResult parseOptionalAttribute(Attribute &result, Type type, - StringRef attrName, - NamedAttrList &attrs) override { - return parseOptionalAttributeAndAddToList(result, type, attrName, attrs); - } - OptionalParseResult parseOptionalAttribute(ArrayAttr &result, Type type, - StringRef attrName, - NamedAttrList &attrs) override { - return parseOptionalAttributeAndAddToList(result, type, attrName, attrs); - } - OptionalParseResult parseOptionalAttribute(StringAttr &result, Type type, - StringRef attrName, - NamedAttrList &attrs) override { - return parseOptionalAttributeAndAddToList(result, type, attrName, attrs); + OptionalParseResult parseOptionalAttribute(Attribute &result, + Type type) override { + return parser.parseOptionalAttribute(result, type); + } + OptionalParseResult parseOptionalAttribute(ArrayAttr &result, + Type type) override { + return parser.parseOptionalAttribute(result, type); + } + OptionalParseResult parseOptionalAttribute(StringAttr &result, + Type type) override { + return parser.parseOptionalAttribute(result, type); } /// Parse a named dictionary into 'result' if it is present.