14 #ifndef MLIR_IR_DIALECTIMPLEMENTATION_H 15 #define MLIR_IR_DIALECTIMPLEMENTATION_H 18 #include "llvm/ADT/Twine.h" 19 #include "llvm/Support/SMLoc.h" 20 #include "llvm/Support/raw_ostream.h" 37 virtual raw_ostream &
getStream()
const = 0;
45 virtual void printFloat(
const APFloat &value) = 0;
62 const APFloat &value) {
67 return p << APFloat(value);
70 return p << APFloat(value);
81 template <
typename T,
typename std::enable_if<
82 !std::is_convertible<T &, Attribute &>::value &&
83 !std::is_convertible<T &, Type &>::value &&
84 !std::is_convertible<T &, APFloat &>::value &&
85 !llvm::is_one_of<T, double, float>::value,
106 const Twine &message = {}) = 0;
110 virtual Builder &getBuilder()
const = 0;
114 virtual llvm::SMLoc getCurrentLocation() = 0;
116 *loc = getCurrentLocation();
121 virtual llvm::SMLoc getNameLoc()
const = 0;
124 virtual Location getEncodedSourceLoc(llvm::SMLoc loc) = 0;
128 virtual StringRef getFullSymbolSpec()
const = 0;
135 virtual ParseResult parseFloat(
double &result) = 0;
139 auto loc = getCurrentLocation();
142 return emitError(loc,
"expected integer value");
149 template <
typename IntT>
151 auto loc = getCurrentLocation();
160 result = IntT(uintResult);
161 if (uint64_t(result) != uintResult)
162 return emitError(loc,
"integer value too large");
205 auto loc = getCurrentLocation();
206 if (parseOptionalKeyword(keyword))
207 return emitError(loc,
"expected '") << keyword <<
"'" << msg;
213 auto loc = getCurrentLocation();
214 if (parseOptionalKeyword(keyword))
215 return emitError(loc,
"expected valid keyword");
220 virtual ParseResult parseOptionalKeyword(StringRef keyword) = 0;
223 virtual ParseResult parseOptionalKeyword(StringRef *keyword) = 0;
278 template <
typename AttrType>
280 llvm::SMLoc loc = getCurrentLocation();
290 return emitError(loc,
"invalid kind of attribute specified");
303 llvm::SMLoc loc = getCurrentLocation();
313 return emitError(loc,
"invalid kind of type specified");
328 bool allowDynamic =
true) = 0;
ParseResult parseInteger(IntT &result)
Parse an integer value from the stream.
Definition: DialectImplementation.h:138
Definition: InferTypeOpInterface.cpp:20
Attribute parseAttribute(llvm::StringRef attrStr, MLIRContext *context)
Definition: Diagnostics.h:320
ParseResult getCurrentLocation(llvm::SMLoc *loc)
Definition: DialectImplementation.h:115
ParseResult parseAttribute(AttrType &result, Type type={})
Parse an attribute of a specific kind and type.
Definition: DialectImplementation.h:279
bool failed(LogicalResult result)
Definition: LogicalResult.h:45
virtual ~DialectAsmPrinter()
Definition: AsmPrinter.cpp:48
Definition: Location.h:52
LogicalResult success(bool isSuccess=true)
Definition: LogicalResult.h:25
ParseResult parseType(TypeType &result)
Parse a type of a specific kind, e.g. a FunctionType.
Definition: DialectImplementation.h:302
LogicalResult failure(bool isFailure=true)
Definition: LogicalResult.h:32
ParseResult parseKeyword(StringRef *keyword)
Parse a keyword into 'keyword'.
Definition: DialectImplementation.h:212
U dyn_cast() const
Definition: Types.h:258
Definition: Attributes.h:53
virtual void printType(Type type)=0
Print the given type to the stream.
virtual void printFloat(const APFloat &value)=0
ParseResult parseKeyword(StringRef keyword, const Twine &msg="")
Parse a given keyword.
Definition: DialectImplementation.h:204
Type parseType(llvm::StringRef typeStr, MLIRContext *context)
virtual raw_ostream & getStream() const =0
Definition: OpDefinition.h:52
virtual void printAttribute(Attribute attr)=0
Print the given attribute to the stream.
InFlightDiagnostic emitError(Location loc)
Utility method to emit an error message using this location.
Definition: Diagnostics.cpp:301
Definition: Builders.h:47
U dyn_cast() const
Definition: Attributes.h:1347
Definition: DialectImplementation.h:33
bool hasValue() const
Returns true if we contain a valid ParseResult value.
Definition: OpDefinition.h:62
OptionalParseResult parseOptionalInteger(IntT &result)
Definition: DialectImplementation.h:150
raw_ostream & operator<<(raw_ostream &os, SubViewOp::Range &range)
Definition: Ops.cpp:2759
Definition: OpDefinition.h:36
Definition: DialectImplementation.h:100
DialectAsmPrinter()
Definition: DialectImplementation.h:35