14#include "llvm/ADT/ArrayRef.h"
15#include "llvm/ADT/FunctionExtras.h"
16#include "llvm/ADT/SmallVector.h"
17#include "llvm/ADT/StringRef.h"
34 if (enumValues.empty()) {
38 enumValStrs.reserve(enumValues.size());
39 for (
auto val : enumValues) {
40 enumValStrs.emplace_back(stringifyFn(val));
47template <
typename EnumClass,
typename ParserType>
52 auto loc = parser.getCurrentLocation();
53 if (parser.parseKeyword(&keyword))
56 if (std::optional<EnumClass> attr =
57 spirv::symbolizeEnum<EnumClass>(keyword)) {
61 return parser.emitError(loc,
"invalid ")
62 << attrName <<
" attribute specification: " << keyword;
67template <
typename EnumClass>
71 static_assert(std::is_enum_v<EnumClass>);
78 if (!llvm::isa<StringAttr>(attrVal))
80 << attrName <<
" attribute specified as string";
81 auto attrOptional = spirv::symbolizeEnum<EnumClass>(
82 llvm::cast<StringAttr>(attrVal).getValue());
85 << attrName <<
" attribute specification: " << attrVal;
86 value = *attrOptional;
93template <
typename EnumAttrClass,
94 typename EnumClass =
typename EnumAttrClass::ValueType>
98 static_assert(std::is_enum_v<EnumClass>);
109template <
typename EnumAttrClass,
110 typename EnumClass =
typename EnumAttrClass::ValueType>
115 static_assert(std::is_enum_v<EnumClass>);
virtual Builder & getBuilder() const =0
Return a builder which provides useful access to MLIRContext, global objects like types and attribute...
virtual InFlightDiagnostic emitError(SMLoc loc, const Twine &message={})=0
Emit a diagnostic at the specified location and return failure.
virtual SMLoc getCurrentLocation()=0
Get the location of the next token and store it into the argument.
virtual ParseResult parseAttribute(Attribute &result, Type type={})=0
Parse an arbitrary attribute of a given type and return it in result.
Attributes are known-constant values of operations.
This class is a general helper class for creating context-global objects like types,...
ArrayAttr getStrArrayAttr(ArrayRef< StringRef > values)
Attr getAttr(Args &&...args)
Get or construct an instance of the attribute Attr with provided arguments.
NamedAttrList is array of NamedAttributes that tracks whether it is sorted and does some basic work t...
The OpAsmParser has methods for interacting with the asm parser: parsing things from it,...
constexpr char kFnNameAttrName[]
constexpr char kSpecIdAttrName[]
constexpr char kControl[]
constexpr char kClusterSize[]
ParseResult parseEnumStrAttr(EnumClass &value, OpAsmParser &parser, StringRef attrName=spirv::attributeName< EnumClass >())
Parses the next string attribute in parser as an enumerant of the given EnumClass.
ParseResult parseEnumKeywordAttr(EnumClass &value, ParserType &parser, StringRef attrName=spirv::attributeName< EnumClass >())
Parses the next keyword in parser as an enumerant of the given EnumClass.
constexpr StringRef attributeName()
ArrayAttr getStrArrayAttrForEnumList(Builder &builder, ArrayRef< Ty > enumValues, function_ref< StringRef(Ty)> stringifyFn)
ParseResult parseVariableDecorations(OpAsmParser &parser, OperationState &state)
llvm::function_ref< Fn > function_ref
This represents an operation in an abstracted form, suitable for use with the builder APIs.
void addAttribute(StringRef name, Attribute attr)
Add an attribute with the specified name.