9 #ifndef MLIR_IR_BUILTINTYPES_H
10 #define MLIR_IR_BUILTINTYPES_H
32 class RankedTensorType;
37 struct FunctionTypeStorage;
38 struct IntegerTypeStorage;
39 struct TupleTypeStorage;
43 template <
typename ConcreteType>
118 Type elementType)
const;
138 operator ShapedType()
const {
return llvm::cast<ShapedType>(*
this); }
165 Type elementType)
const;
192 operator ShapedType()
const {
return llvm::cast<ShapedType>(*
this); }
201 #define GET_TYPEDEF_CLASSES
202 #include "mlir/IR/BuiltinTypes.h.inc"
205 #include "mlir/IR/BuiltinTypeConstraints.h.inc"
218 layout(other.getLayout()), memorySpace(other.getMemorySpace()) {}
222 : shape(shape), elementType(elementType) {}
230 elementType = newElementType;
240 memorySpace = newMemorySpace;
244 operator MemRefType() {
251 MemRefLayoutAttrInterface layout;
266 encoding(other.getEncoding()) {}
270 : shape(shape), elementType(elementType), encoding(encoding) {}
278 elementType = newElementType;
283 encoding = newEncoding;
289 assert(pos < shape.
size() &&
"overflow");
296 assert(pos <= shape.
size() &&
"overflow");
301 operator RankedTensorType() {
322 scalableDims(other.getScalableDims()) {}
327 : elementType(elementType), shape(shape), scalableDims(scalableDims) {}
332 scalableDims = newIsScalableDim;
337 elementType = newElementType;
343 assert(pos < shape.size() &&
"overflow");
345 if (!scalableDims.
empty())
346 scalableDims.
erase(pos);
352 assert(pos < shape.size() &&
"overflow");
357 operator VectorType() {
380 std::optional<llvm::SmallDenseSet<unsigned>>
383 bool matchDynamic =
false);
402 ShapedType candidateReducedType);
413 using VectorType::VectorType;
416 auto vecTy = llvm::dyn_cast<VectorType>(type);
419 return vecTy.isScalable();
426 using VectorType::VectorType;
429 auto vecTy = llvm::dyn_cast<VectorType>(type);
432 return !vecTy.isScalable();
441 return llvm::isa<MemRefType, UnrankedMemRefType>(type);
446 llvm::isa<ComplexType, MemRefType, VectorType, UnrankedMemRefType>(
448 llvm::isa<MemRefElementTypeInterface>(type);
452 return llvm::isa<Float4E2M1FNType, Float6E2M3FNType, Float6E3M2FNType,
453 Float8E5M2Type, Float8E4M3Type, Float8E4M3FNType,
454 Float8E5M2FNUZType, Float8E4M3FNUZType,
455 Float8E4M3B11FNUZType, Float8E3M4Type, Float8E8M0FNUType,
456 BFloat16Type, Float16Type, FloatTF32Type, Float32Type,
457 Float64Type, Float80Type, Float128Type>(type);
533 return llvm::isa<RankedTensorType, UnrankedTensorType>(type);
static Type getElementType(Type type, ArrayRef< int32_t > indices, function_ref< InFlightDiagnostic(StringRef)> emitErrorFn)
Walks the given type hierarchy with the given indices, potentially down to component granularity,...
static ArrayRef< int64_t > getShape(Type type)
Returns the shape of the given type.
Base type for affine expression.
Attributes are known-constant values of operations.
This class provides a shared interface for ranked and unranked memref types.
MemRefType clone(ArrayRef< int64_t > shape) const
Return a clone of this type with the given new shape.
ArrayRef< int64_t > getShape() const
Returns the shape of this memref type.
static bool isValidElementType(Type type)
Return true if the specified element type is ok in a memref.
Attribute getMemorySpace() const
Returns the memory space in which data referred to by this memref resides.
static bool classof(Type type)
Methods for support type inquiry through isa, cast, and dyn_cast.
unsigned getMemorySpaceAsInt() const
[deprecated] Returns the memory space in old raw integer representation.
bool hasRank() const
Returns if this type is ranked, i.e. it has a known number of dimensions.
Type getElementType() const
Returns the element type of this memref type.
MemRefType clone(ArrayRef< int64_t > shape, Type elementType) const
Return a clone of this type with the given new shape and element type.
BaseMemRefType cloneWith(std::optional< ArrayRef< int64_t >> shape, Type elementType) const
Clone this type with the given shape and element type.
void insert(size_t index, T value)
A vector type with no scalable dimensions.
static bool classof(Type type)
static FloatType getF64(MLIRContext *ctx)
FloatType scaleElementBitwidth(unsigned scale)
Get or create a new FloatType with bitwidth scaled by scale.
static FloatType getFloat8E5M2(MLIRContext *ctx)
static FloatType getFloat6E3M2FN(MLIRContext *ctx)
static FloatType getF80(MLIRContext *ctx)
static FloatType getFloat8E8M0FNU(MLIRContext *ctx)
static FloatType getFloat8E4M3FN(MLIRContext *ctx)
static FloatType getF16(MLIRContext *ctx)
const llvm::fltSemantics & getFloatSemantics()
Return the floating semantics of this float type.
static FloatType getFloat6E2M3FN(MLIRContext *ctx)
static FloatType getTF32(MLIRContext *ctx)
static FloatType getBF16(MLIRContext *ctx)
static FloatType getFloat8E4M3FNUZ(MLIRContext *ctx)
static FloatType getFloat8E4M3B11FNUZ(MLIRContext *ctx)
unsigned getFPMantissaWidth()
Return the width of the mantissa of this type.
static FloatType getFloat8E5M2FNUZ(MLIRContext *ctx)
static FloatType getF128(MLIRContext *ctx)
unsigned getWidth()
Return the bitwidth of this float type.
static FloatType getFloat4E2M1FN(MLIRContext *ctx)
static bool classof(Type type)
Methods for support type inquiry through isa, cast, and dyn_cast.
static FloatType getFloat8E3M4(MLIRContext *ctx)
static FloatType getFloat8E4M3(MLIRContext *ctx)
static FloatType getF32(MLIRContext *ctx)
MLIRContext is the top-level object for a collection of MLIR operations.
This is a builder type that keeps local references to arguments.
Builder(ArrayRef< int64_t > shape, Type elementType)
Builder & setLayout(MemRefLayoutAttrInterface newLayout)
Builder & setElementType(Type newElementType)
Builder(MemRefType other)
Builder & setShape(ArrayRef< int64_t > newShape)
Builder & setMemorySpace(Attribute newMemorySpace)
This is a builder type that keeps local references to arguments.
Builder(ArrayRef< int64_t > shape, Type elementType, Attribute encoding)
Build from scratch.
Builder & dropDim(unsigned pos)
Erase a dim from shape @pos.
Builder & setShape(ArrayRef< int64_t > newShape)
Builder & insertDim(int64_t val, unsigned pos)
Insert a val into shape @pos.
Builder(RankedTensorType other)
Build from another RankedTensorType.
Builder & setElementType(Type newElementType)
Builder & setEncoding(Attribute newEncoding)
A vector type containing at least one scalable dimension.
static bool classof(Type type)
Tensor types represent multi-dimensional arrays, and have two variants: RankedTensorType and Unranked...
RankedTensorType clone(ArrayRef< int64_t > shape) const
Return a clone of this type with the given new shape.
static bool classof(Type type)
Methods for support type inquiry through isa, cast, and dyn_cast.
TensorType cloneWith(std::optional< ArrayRef< int64_t >> shape, Type elementType) const
Clone this type with the given shape and element type.
static bool isValidElementType(Type type)
Return true if the specified element type is ok in a tensor.
ArrayRef< int64_t > getShape() const
Returns the shape of this tensor type.
bool hasRank() const
Returns if this type is ranked, i.e. it has a known number of dimensions.
RankedTensorType clone(ArrayRef< int64_t > shape, Type elementType) const
Return a clone of this type with the given new shape and element type.
Type getElementType() const
Returns the element type of this tensor type.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
bool isIntOrIndexOrFloat() const
Return true if this is an integer (of any signedness), index, or float type.
Type trait indicating that the type has value semantics.
This is a builder type that keeps local references to arguments.
Builder & dropDim(unsigned pos)
Erase a dim from shape @pos.
Builder & setDim(unsigned pos, int64_t val)
Set a dim in shape @pos to val.
Builder & setShape(ArrayRef< int64_t > newShape, ArrayRef< bool > newIsScalableDim={})
Builder & setElementType(Type newElementType)
Builder(VectorType other)
Build from another VectorType.
Builder(ArrayRef< int64_t > shape, Type elementType, ArrayRef< bool > scalableDims={})
Build from scratch.
Helper class for implementing traits for storage classes.
The OpAsmOpInterface, see OpAsmInterface.td for more details.
Include the generated interface declarations.
SliceVerificationResult
Enum that captures information related to verifier error conditions on slice insert/extract type of o...
bool isLastMemrefDimUnitStride(MemRefType type)
Return "true" if the last dimension of the given type has a static unit stride.
LogicalResult getStridesAndOffset(MemRefType t, SmallVectorImpl< int64_t > &strides, int64_t &offset)
Returns the strides of the MemRef if the layout map is in strided form.
MemRefType canonicalizeStridedLayout(MemRefType t)
Return a version of t with identity layout if it can be determined statically that the layout is the ...
Operation * clone(OpBuilder &b, Operation *op, TypeRange newResultTypes, ValueRange newOperands)
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
AffineExpr makeCanonicalStridedLayoutExpr(ArrayRef< int64_t > sizes, ArrayRef< AffineExpr > exprs, MLIRContext *context)
Given MemRef sizes that are either static or dynamic, returns the canonical "contiguous" strides Affi...
std::optional< llvm::SmallDenseSet< unsigned > > computeRankReductionMask(ArrayRef< int64_t > originalShape, ArrayRef< int64_t > reducedShape, bool matchDynamic=false)
Given an originalShape and a reducedShape assumed to be a subset of originalShape with some 1 entries...
bool isStrided(MemRefType t)
Return "true" if the layout for t is compatible with strided semantics.
SliceVerificationResult isRankReducedType(ShapedType originalType, ShapedType candidateReducedType)
Check if originalType can be rank reduced to candidateReducedType type by dropping some dimensions wi...
bool trailingNDimsContiguous(MemRefType type, int64_t n)
Return "true" if the last N dimensions of the given type are contiguous.