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()) {
92 return FileLineColRange::get(filename);
94 return FileLineColRange::get(filename, lineCols[0]);
96 return FileLineColRange::get(filename, lineCols[0], lineCols[1]);
98 return FileLineColRange::get(filename, lineCols[0], lineCols[1],
101 return FileLineColRange::get(filename, lineCols[0], lineCols[1],
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)
156 : BytecodeDialectInterface(dialect) {}
161 Attribute readAttribute(DialectBytecodeReader &reader)
const override {
165 LogicalResult writeAttribute(Attribute attr,
166 DialectBytecodeWriter &writer)
const override {
167 return ::writeAttribute(attr, writer);
173 Type readType(DialectBytecodeReader &reader)
const override {
177 LogicalResult writeType(Type type,
178 DialectBytecodeWriter &writer)
const override {
179 return ::writeType(type, writer);
185 dialect->addInterfaces<BuiltinDialectBytecodeInterface>();
This class defines a virtual interface for reading a bytecode stream, providing hooks into the byteco...
virtual LogicalResult readVarInt(uint64_t &result)=0
Read a variable width integer.
virtual FailureOr< APInt > readAPIntWithKnownWidth(unsigned bitWidth)=0
Read an APInt that is known to have been encoded with the given width.
virtual InFlightDiagnostic emitError(const Twine &msg={}) const =0
Emit an error to the reader.
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.
virtual FailureOr< APFloat > readAPFloatWithKnownSemantics(const llvm::fltSemantics &semantics)=0
Read an APFloat that is known to have been encoded with the given semantics.
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 ...
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.