MLIR
20.0.0git
|
Tensor expression. Represents an MLIR expression in tensor index notation. More...
#include "mlir/Dialect/SparseTensor/Utils/Merger.h"
Classes | |
struct | Children |
Child subexpressions for non-leaf expressions. More... | |
Public Types | |
enum class | Kind { kTensor = 0 , kSynZero , kInvariant , kLoopVar , kAbsF , kAbsC , kAbsI , kCeilF , kFloorF , kSqrtF , kSqrtC , kExpm1F , kExpm1C , kLog1pF , kLog1pC , kRelu , kSinF , kSinC , kTanhF , kTanhC , kNegF , kNegC , kNegI , kTruncF , kExtF , kCastFS , kCastFU , kCastSF , kCastUF , kCastS , kCastU , kCastIdx , kTruncI , kCIm , kCRe , kBitCast , kBinaryBranch , kUnary , kSelect , kMulF , kMulC , kMulI , kDivF , kDivC , kDivS , kDivU , kAddF , kAddC , kAddI , kSubF , kSubC , kSubI , kAndI , kOrI , kXorI , kCmpI , kCmpF , kShrS , kShrU , kShlI , kBinary , kReduce , kDenseOp } |
Tensor expression kind. More... | |
Public Member Functions | |
TensorExp (Kind k, unsigned x, ExprId y, Value v, Operation *op, Attribute a) | |
The x parameter has different types depending on the value of the k parameter. More... | |
Public Attributes | |
Kind | kind |
Tensor expression kind. More... | |
union { | |
TensorId tensor | |
kTensor expressions simply have a tensor identifier. More... | |
LoopId loop | |
kLoopVar expressions simply have a loop identifier. More... | |
Children children | |
All other expressions hold the ExprId s of their children. More... | |
}; | |
Value | val |
Direct link to IR for an invariant or the destination value (to infer destination type) of a cast operation During code generation, this field may be used to cache "hoisted" loop invariant tensor loads. More... | |
Operation * | op |
Code blocks used by semirings. More... | |
Attribute | attr |
An optional attribute that is required to determine the semantics of the operations. More... | |
Tensor expression. Represents an MLIR expression in tensor index notation.
|
strong |
Tensor expression kind.
The kLoopVar
leaf kind is for representing linalg::IndexOp
. That is, its argument is a LoopId
identifying the loop-variable in question, and its value will be the current iteration's value. The kSynZero
leaf kind is for representing a synthetic zero value, which can be introduced when sparsifying operations like arith::cmp
to generate arith::cmp lhs, syn_zero
when the rhs operand is absent.
mlir::sparse_tensor::TensorExp::TensorExp | ( | TensorExp::Kind | k, |
unsigned | x, | ||
ExprId | y, | ||
Value | v, | ||
Operation * | op, | ||
Attribute | a | ||
) |
The x
parameter has different types depending on the value of the k
parameter.
The correspondences are:
kTensor
-> TensorId
kInvariant
-> kInvalidId
kLoopVar
-> LoopId
ExprId
The y
, v
, and op
parameters either must or must not be kInvalidId
/nullptr
, depending on the value of the k
parameter; however, they have uniform C++ types regardless of the value of k
.
Definition at line 106 of file Merger.cpp.
References children, mlir::sparse_tensor::TensorExp::Children::e0, mlir::sparse_tensor::TensorExp::Children::e1, kAbsC, kAbsF, kAbsI, kAddC, kAddF, kAddI, kAndI, kBinary, kBinaryBranch, kBitCast, kCastFS, kCastFU, kCastIdx, kCastS, kCastSF, kCastU, kCastUF, kCeilF, kCIm, kCmpF, kCmpI, kCRe, kDenseOp, kDivC, kDivF, kDivS, kDivU, kExpm1C, kExpm1F, kExtF, kFloorF, kind, mlir::sparse_tensor::detail::kInvalidId, kInvariant, kLog1pC, kLog1pF, kLoopVar, kMulC, kMulF, kMulI, kNegC, kNegF, kNegI, kOrI, kReduce, kRelu, kSelect, kShlI, kShrS, kShrU, kSinC, kSinF, kSqrtC, kSqrtF, kSubC, kSubF, kSubI, kSynZero, kTanhC, kTanhF, kTensor, kTruncF, kTruncI, kUnary, kXorI, loop, and tensor.
union { ... } |
Attribute mlir::sparse_tensor::TensorExp::attr |
An optional attribute that is required to determine the semantics of the operations.
E.g., CmpPredicateAttr for CmpI/CmpF operations.
Definition at line 118 of file Merger.h.
Referenced by mlir::sparse_tensor::Merger::combiSet(), mlir::sparse_tensor::Merger::conjLat(), and mlir::sparse_tensor::Merger::mapBinWithSynZeroSet().
Children mlir::sparse_tensor::TensorExp::children |
All other expressions hold the ExprId
s of their children.
Definition at line 99 of file Merger.h.
Referenced by mlir::sparse_tensor::Merger::disjSetWithZero(), genExp(), genInvariants(), and TensorExp().
Kind mlir::sparse_tensor::TensorExp::kind |
Tensor expression kind.
Definition at line 89 of file Merger.h.
Referenced by mlir::sparse_tensor::Merger::conjLat(), mlir::sparse_tensor::Merger::disjSet(), genExp(), genInvariants(), genTensorStore(), mlir::sparse_tensor::Merger::mapBinWithSynZeroSet(), and TensorExp().
LoopId mlir::sparse_tensor::TensorExp::loop |
kLoopVar
expressions simply have a loop identifier.
Definition at line 96 of file Merger.h.
Referenced by genExp(), and TensorExp().
Operation* mlir::sparse_tensor::TensorExp::op |
Code blocks used by semirings.
For the case of kUnary, kBinary, kReduce, and kSelect, this holds the original operation with all regions. For kBinaryBranch, this holds the YieldOp for the left or right half to be merged into a nested scf loop.
Or the actual operation that we can not sparsify but having all dense operands for kDenseOp.
TensorId mlir::sparse_tensor::TensorExp::tensor |
kTensor
expressions simply have a tensor identifier.
Definition at line 93 of file Merger.h.
Referenced by genInvariants(), genTensorLoad(), and TensorExp().
Value mlir::sparse_tensor::TensorExp::val |
Direct link to IR for an invariant or the destination value (to infer destination type) of a cast operation During code generation, this field may be used to cache "hoisted" loop invariant tensor loads.
Definition at line 105 of file Merger.h.
Referenced by genInvariantValue(), genTensorLoad(), genTensorStore(), and mlir::sparse_tensor::Merger::hasExprValue().