19 #include "llvm/ADT/TypeSwitch.h"
38 if (
auto intType = dyn_cast<IntegerType>(type)) {
39 return intType.getWidth();
41 if (llvm::isa<IndexType>(type)) {
42 return IndexType::kInternalStorageBitWidth;
45 <<
"expected integer or index type for IntegerAttr, but got: " << type;
50 Type type, FailureOr<APInt> &val) {
51 unsigned bitWidth = getIntegerBitWidth(reader, type);
58 FailureOr<APFloat> &val) {
59 auto ftype = dyn_cast<FloatType>(type);
70 rawStringData.resize(isSplat ? 1 : type.getNumElements());
71 for (StringRef &value : rawStringData)
78 DenseStringElementsAttr attr) {
79 bool isSplat = attr.isSplat();
83 for (StringRef str : attr.getRawStringData())
90 switch (lineCols.size()) {
102 lineCols[2], lineCols[3]);
112 lineCols, [&reader](uint64_t &val) {
return reader.
readVarInt(val); });
117 if (range.getStartLine() == 0 && range.getStartColumn() == 0 &&
118 range.getEndLine() == 0 && range.getEndColumn() == 0) {
122 if (range.getStartColumn() == 0 &&
123 range.getStartLine() == range.getEndLine()) {
130 if (range.getEndColumn() == range.getStartColumn() &&
131 range.getStartLine() == range.getEndLine()) {
137 if (range.getStartLine() == range.getEndLine()) {
151 #include "mlir/IR/BuiltinDialectBytecode.cpp.inc"
155 BuiltinDialectBytecodeInterface(
Dialect *dialect)
165 LogicalResult writeAttribute(
Attribute attr,
167 return ::writeAttribute(attr, writer);
177 LogicalResult writeType(
Type type,
179 return ::writeType(type, writer);
185 dialect->addInterfaces<BuiltinDialectBytecodeInterface>();
static MLIRContext * getContext(OpFoldResult val)
Attributes are known-constant values of operations.
This class defines a virtual interface for reading a bytecode stream, providing hooks into the byteco...
virtual FailureOr< APInt > readAPIntWithKnownWidth(unsigned bitWidth)=0
Read an APInt that is known to have been encoded with the given width.
virtual LogicalResult readVarInt(uint64_t &result)=0
Read a variable width integer.
virtual InFlightDiagnostic emitError(const Twine &msg={}) const =0
Emit an error to the reader.
virtual FailureOr< APFloat > readAPFloatWithKnownSemantics(const llvm::fltSemantics &semantics)=0
Read an APFloat that is known to have been encoded with the given semantics.
virtual LogicalResult readString(StringRef &result)=0
Read a string from the bytecode.
LogicalResult readList(SmallVectorImpl< T > &result, CallbackFn &&callback)
Read out a list of elements, invoking the provided callback for each element.
This class defines a virtual interface for writing to a bytecode stream, providing hooks into the byt...
virtual void writeVarInt(uint64_t value)=0
Write a variable width integer to the output stream.
virtual void writeOwnedString(StringRef str)=0
Write a string to the bytecode, which is owned by the caller and is guaranteed to not die before the ...
Dialects are groups of MLIR operations, types and attributes, as well as behavior associated with the...
MLIRContext is the top-level object for a collection of MLIR operations.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
void addBytecodeInterface(BuiltinDialect *dialect)
Add the interfaces necessary for encoding the builtin dialect components in bytecode.
Include the generated interface declarations.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...