MLIR
22.0.0git
|
AffineDmaStartOp starts a non-blocking DMA operation that transfers data from a source memref to a destination memref. More...
#include "mlir/Dialect/Affine/IR/AffineOps.h"
Public Member Functions | |
unsigned | getSrcMemRefOperandIndex () |
Returns the operand index of the source memref. More... | |
Value | getSrcMemRef () |
Returns the source MemRefType for this DMA operation. More... | |
OpOperand & | getSrcMemRefMutable () |
MemRefType | getSrcMemRefType () |
unsigned | getSrcMemRefRank () |
Returns the rank (number of indices) of the source MemRefType. More... | |
AffineMap | getSrcMap () |
Returns the affine map used to access the source memref. More... | |
AffineMapAttr | getSrcMapAttr () |
operand_range | getSrcIndices () |
Returns the source memref affine map indices for this DMA operation. More... | |
unsigned | getSrcMemorySpace () |
Returns the memory space of the source memref. More... | |
unsigned | getDstMemRefOperandIndex () |
Returns the operand index of the destination memref. More... | |
Value | getDstMemRef () |
Returns the destination MemRefType for this DMA operation. More... | |
OpOperand & | getDstMemRefMutable () |
MemRefType | getDstMemRefType () |
unsigned | getDstMemRefRank () |
Returns the rank (number of indices) of the destination MemRefType. More... | |
unsigned | getDstMemorySpace () |
Returns the memory space of the source memref. More... | |
AffineMap | getDstMap () |
Returns the affine map used to access the destination memref. More... | |
AffineMapAttr | getDstMapAttr () |
operand_range | getDstIndices () |
Returns the destination memref indices for this DMA operation. More... | |
unsigned | getTagMemRefOperandIndex () |
Returns the operand index of the tag memref. More... | |
Value | getTagMemRef () |
Returns the Tag MemRef for this DMA operation. More... | |
OpOperand & | getTagMemRefMutable () |
MemRefType | getTagMemRefType () |
unsigned | getTagMemRefRank () |
Returns the rank (number of indices) of the tag MemRefType. More... | |
AffineMap | getTagMap () |
Returns the affine map used to access the tag memref. More... | |
AffineMapAttr | getTagMapAttr () |
operand_range | getTagIndices () |
Returns the tag memref indices for this DMA operation. More... | |
Value | getNumElements () |
Returns the number of elements being transferred by this DMA operation. More... | |
NamedAttribute | getAffineMapAttrForMemRef (Value memref) |
Impelements the AffineMapAccessInterface. More... | |
bool | isDestMemorySpaceFaster () |
Returns true if this is a DMA from a faster memory space to a slower one. More... | |
bool | isSrcMemorySpaceFaster () |
Returns true if this is a DMA from a slower memory space to a faster one. More... | |
unsigned | getFasterMemPos () |
Given a DMA start operation, returns the operand position of either the source or destination memref depending on the one that is at the higher level of the memory hierarchy. More... | |
void | getEffects (SmallVectorImpl< SideEffects::EffectInstance< MemoryEffects::Effect >> &effects) |
void | print (OpAsmPrinter &p) |
LogicalResult | verifyInvariantsImpl () |
LogicalResult | verifyInvariants () |
LogicalResult | fold (ArrayRef< Attribute > cstOperands, SmallVectorImpl< OpFoldResult > &results) |
bool | isStrided () |
Returns true if this DMA operation is strided, returns false otherwise. More... | |
Value | getStride () |
Returns the stride value for this DMA operation. More... | |
Value | getNumElementsPerStride () |
Returns the number of elements to transfer per stride for this DMA op. More... | |
Op () | |
This is a public constructor. Any op can be initialized to null. More... | |
Op (std::nullptr_t) | |
Op (Operation *state) | |
This is a public constructor to enable access via the llvm::cast family of methods. More... | |
![]() | |
AffineDmaStartOp | clone () |
Create a deep copy of this operation. More... | |
AffineDmaStartOp | cloneWithoutRegions () |
Create a partial copy of this operation without traversing into attached regions. More... | |
Op () | |
This is a public constructor. Any op can be initialized to null. More... | |
Op (std::nullptr_t) | |
Op (Operation *state) | |
This is a public constructor to enable access via the llvm::cast family of methods. More... | |
const void * | getAsOpaquePointer () const |
Methods for supporting PointerLikeTypeTraits. More... | |
InferredProperties< T > & | getProperties () |
Operation * | getOperation () |
Inherit getOperation from OpState . More... | |
LogicalResult | verify () |
If the concrete type didn't implement a custom verifier hook, just fall back to this one which accepts everything. More... | |
LogicalResult | verifyRegions () |
![]() | |
operator bool () | |
Ops are pointer-like, so we allow conversion to bool. More... | |
operator Operation * () const | |
This implicitly converts to Operation*. More... | |
Operation * | operator-> () const |
Shortcut of -> to access a member of Operation. More... | |
Operation * | getOperation () |
Return the operation that this refers to. More... | |
MLIRContext * | getContext () |
Return the context this operation belongs to. More... | |
void | print (raw_ostream &os, OpPrintingFlags flags={}) |
Print the operation to the given stream. More... | |
void | print (raw_ostream &os, AsmState &asmState) |
void | dump () |
Dump this operation. More... | |
Location | getLoc () |
The source location the operation was defined or derived from. More... | |
bool | use_empty () |
Return true if there are no users of any results of this operation. More... | |
void | erase () |
Remove this operation from its parent block and delete it. More... | |
InFlightDiagnostic | emitOpError (const Twine &message={}) |
Emit an error with the op name prefixed, like "'dim' op " which is convenient for verifiers. More... | |
InFlightDiagnostic | emitError (const Twine &message={}) |
Emit an error about fatal conditions with this operation, reporting up to any diagnostic handlers that may be listening. More... | |
InFlightDiagnostic | emitWarning (const Twine &message={}) |
Emit a warning about this operation, reporting up to any diagnostic handlers that may be listening. More... | |
InFlightDiagnostic | emitRemark (const Twine &message={}) |
Emit a remark about this operation, reporting up to any diagnostic handlers that may be listening. More... | |
template<WalkOrder Order = WalkOrder::PostOrder, typename Iterator = ForwardIterator, typename FnT , typename RetT = detail::walkResultType<FnT>> | |
std::enable_if_t< llvm::function_traits< std::decay_t< FnT > >::num_args==1, RetT > | walk (FnT &&callback) |
Walk the operation by calling the callback for each nested operation (including this one), block or region, depending on the callback provided. More... | |
template<typename FnT , typename RetT = detail::walkResultType<FnT>> | |
std::enable_if_t< llvm::function_traits< std::decay_t< FnT > >::num_args==2, RetT > | walk (FnT &&callback) |
Generic walker with a stage aware callback. More... | |
Static Public Member Functions | |
static ArrayRef< StringRef > | getAttributeNames () |
static void | build (OpBuilder &builder, OperationState &result, Value srcMemRef, AffineMap srcMap, ValueRange srcIndices, Value destMemRef, AffineMap dstMap, ValueRange destIndices, Value tagMemRef, AffineMap tagMap, ValueRange tagIndices, Value numElements, Value stride=nullptr, Value elementsPerStride=nullptr) |
static AffineDmaStartOp | create (OpBuilder &builder, Location location, Value srcMemRef, AffineMap srcMap, ValueRange srcIndices, Value destMemRef, AffineMap dstMap, ValueRange destIndices, Value tagMemRef, AffineMap tagMap, ValueRange tagIndices, Value numElements, Value stride=nullptr, Value elementsPerStride=nullptr) |
static AffineDmaStartOp | create (ImplicitLocOpBuilder &builder, Value srcMemRef, AffineMap srcMap, ValueRange srcIndices, Value destMemRef, AffineMap dstMap, ValueRange destIndices, Value tagMemRef, AffineMap tagMap, ValueRange tagIndices, Value numElements, Value stride=nullptr, Value elementsPerStride=nullptr) |
static StringRef | getSrcMapAttrStrName () |
static StringRef | getDstMapAttrStrName () |
static StringRef | getTagMapAttrStrName () |
static StringRef | getOperationName () |
static ParseResult | parse (OpAsmParser &parser, OperationState &result) |
![]() | |
static constexpr bool | hasTrait () |
Return if this operation contains the provided trait. More... | |
static bool | classof (Operation *op) |
Return true if this "op class" can match against the specified operation. More... | |
static std::enable_if_t< std::is_base_of< OpState, T >::value, bool > | classof (const T *op) |
Provide classof support for other OpBase derived classes, such as Interfaces. More... | |
static ConcreteOpType | getFromOpaquePointer (const void *pointer) |
static void | attachInterface (MLIRContext &context) |
Attach the given models as implementations of the corresponding interfaces for the concrete operation. More... | |
static LogicalResult | setPropertiesFromAttr (PropertiesTy &prop, Attribute attr, function_ref< InFlightDiagnostic()> emitError) |
Convert the provided attribute to a property and assigned it to the provided properties. More... | |
static Attribute | getPropertiesAsAttr (MLIRContext *ctx, const PropertiesTy &prop) |
Convert the provided properties to an attribute. More... | |
static llvm::hash_code | computePropertiesHash (const PropertiesTy &prop) |
Hash the provided properties. More... | |
static constexpr bool | hasProperties () |
Returns true if this operation defines a Properties inner type. More... | |
static void | populateDefaultProperties (OperationName opName, InferredProperties< T > &properties) |
This hook populates any unset default attrs when mapped to properties. More... | |
static void | printProperties (MLIRContext *ctx, OpAsmPrinter &p, const T &properties, ArrayRef< StringRef > elidedProps={}) |
Print the operation properties with names not included within 'elidedProps'. More... | |
static ParseResult | parseProperties (OpAsmParser &parser, OperationState &result) |
Parses 'prop-dict' for the operation. More... | |
![]() | |
static void | getCanonicalizationPatterns (RewritePatternSet &results, MLIRContext *context) |
This hook returns any canonicalization pattern rewrites that the operation supports, for use by the canonicalization pass. More... | |
static void | populateDefaultAttrs (const OperationName &, NamedAttrList &) |
This hook populates any unset default attrs. More... | |
Additional Inherited Members | |
![]() | |
using | ConcreteOpType = AffineDmaStartOp |
Expose the type we are instantiated on to template machinery that may want to introspect traits on this operation. More... | |
using | InferredProperties = typename PropertiesSelector< T >::type |
![]() | |
LogicalResult | verify () |
If the concrete type didn't implement a custom verifier hook, just fall back to this one which accepts everything. More... | |
LogicalResult | verifyRegions () |
OpState (Operation *state) | |
Mutability management is handled by the OpWrapper/OpConstWrapper classes, so we can cast it away here. More... | |
![]() | |
Operation * | getOperation () |
Return the ultimate Operation being worked on. More... | |
![]() | |
static ParseResult | parse (OpAsmParser &parser, OperationState &result) |
Parse the custom form of an operation. More... | |
static void | print (Operation *op, OpAsmPrinter &p, StringRef defaultDialect) |
Print the operation. More... | |
static ParseResult | genericParseProperties (OpAsmParser &parser, Attribute &result) |
Parse properties as a Attribute. More... | |
static void | genericPrintProperties (OpAsmPrinter &p, Attribute properties, ArrayRef< StringRef > elidedProps={}) |
Print the properties as a Attribute with names not included within 'elidedProps'. More... | |
static void | printOpName (Operation *op, OpAsmPrinter &p, StringRef defaultDialect) |
Print an operation name, eliding the dialect prefix if necessary. More... | |
static EmptyProperties & | getEmptyProperties () |
For all op which don't have properties, we keep a single instance of EmptyProperties to be used where a reference to a properties is needed: this allow to bind a pointer to the reference without triggering UB. More... | |
AffineDmaStartOp starts a non-blocking DMA operation that transfers data from a source memref to a destination memref.
The source and destination memref need not be of the same dimensionality, but need to have the same elemental type. The operands include the source and destination memref's each followed by its indices, size of the data transfer in terms of the number of elements (of the elemental type of the memref), a tag memref with its indices, and optionally at the end, a stride and a number_of_elements_per_stride arguments. The tag location is used by an AffineDmaWaitOp to check for completion. The indices of the source memref, destination memref, and the tag memref have the same restrictions as any affine.load/store. In particular, index for each memref dimension must be an affine expression of loop induction variables and symbols. The optional stride arguments should be of 'index' type, and specify a stride for the slower memory space (memory space with a lower memory space id), transferring chunks of number_of_elements_per_stride every stride until num_elements are transferred. Either both or no stride arguments should be specified. The value of 'num_elements' must be a multiple of 'number_of_elements_per_stride'. If the source and destination locations overlap the behavior of this operation is not defined.
Definition at line 102 of file AffineOps.h.
|
static |
Definition at line 1726 of file AffineOps.cpp.
References mlir::OperationState::addAttribute(), mlir::OperationState::addOperands(), and mlir::get().
|
static |
Definition at line 1763 of file AffineOps.cpp.
References mlir::ImplicitLocOpBuilder::getLoc().
|
static |
Definition at line 1748 of file AffineOps.cpp.
Referenced by generateCopy().
LogicalResult AffineDmaStartOp::fold | ( | ArrayRef< Attribute > | cstOperands, |
SmallVectorImpl< OpFoldResult > & | results | ||
) |
dma_start(memrefcast) -> dma_start
Definition at line 1913 of file AffineOps.cpp.
References mlir::memref::foldMemRefCast().
|
inline |
Impelements the AffineMapAccessInterface.
Returns the AffineMapAttr associated with 'memref'.
Definition at line 245 of file AffineOps.h.
References mlir::get(), mlir::OpState::getContext(), getDstMapAttr(), getDstMapAttrStrName(), getDstMemRef(), getSrcMapAttr(), getSrcMapAttrStrName(), getSrcMemRef(), getTagMapAttr(), getTagMapAttrStrName(), and getTagMemRef().
|
inlinestatic |
Definition at line 109 of file AffineOps.h.
|
inline |
Returns the destination memref indices for this DMA operation.
Definition at line 198 of file AffineOps.h.
References getDstMap(), getDstMemRefOperandIndex(), and mlir::AffineMap::getNumInputs().
|
inline |
Returns the affine map used to access the destination memref.
Definition at line 191 of file AffineOps.h.
References getDstMapAttr().
Referenced by getDstIndices(), and getTagMemRefOperandIndex().
|
inline |
Definition at line 192 of file AffineOps.h.
References getDstMapAttrStrName().
Referenced by getAffineMapAttrForMemRef(), and getDstMap().
|
inlinestatic |
Definition at line 282 of file AffineOps.h.
Referenced by getAffineMapAttrForMemRef(), and getDstMapAttr().
|
inline |
Returns the memory space of the source memref.
Definition at line 186 of file AffineOps.h.
References getDstMemRef(), and mlir::getType().
Referenced by isDestMemorySpaceFaster(), and isSrcMemorySpaceFaster().
|
inline |
Returns the destination MemRefType for this DMA operation.
Definition at line 172 of file AffineOps.h.
References getDstMemRefOperandIndex().
Referenced by getAffineMapAttrForMemRef(), getDstMemorySpace(), getDstMemRefRank(), and getDstMemRefType().
|
inline |
Definition at line 173 of file AffineOps.h.
References getDstMemRefOperandIndex(), mlir::Op< AffineDmaStartOp, OpTrait::MemRefsNormalizable, OpTrait::VariadicOperands, OpTrait::ZeroResults, OpTrait::OpInvariants, AffineMapAccessInterface::Trait, MemoryEffectOpInterface::Trait >::getOperation(), and mlir::Operation::getOpOperand().
|
inline |
Returns the operand index of the destination memref.
Definition at line 167 of file AffineOps.h.
References mlir::AffineMap::getNumInputs(), getSrcMap(), and getSrcMemRefOperandIndex().
Referenced by getDstIndices(), getDstMemRef(), getDstMemRefMutable(), getFasterMemPos(), and getTagMemRefOperandIndex().
|
inline |
Returns the rank (number of indices) of the destination MemRefType.
Definition at line 181 of file AffineOps.h.
References getDstMemRef(), and mlir::getType().
|
inline |
Definition at line 176 of file AffineOps.h.
References getDstMemRef(), and mlir::getType().
void AffineDmaStartOp::getEffects | ( | SmallVectorImpl< SideEffects::EffectInstance< MemoryEffects::Effect >> & | effects | ) |
Definition at line 1919 of file AffineOps.cpp.
References mlir::SideEffects::Effect::Base< DerivedEffect, BaseEffect >::get(), and mlir::SideEffects::Resource::Base< DefaultResource >::get().
|
inline |
Given a DMA start operation, returns the operand position of either the source or destination memref depending on the one that is at the higher level of the memory hierarchy.
Asserts failure if neither is true.
Definition at line 272 of file AffineOps.h.
References getDstMemRefOperandIndex(), isDestMemorySpaceFaster(), and isSrcMemorySpaceFaster().
|
inline |
Returns the number of elements being transferred by this DMA operation.
Definition at line 238 of file AffineOps.h.
References getTagMap(), and getTagMemRefOperandIndex().
|
inline |
Returns the number of elements to transfer per stride for this DMA op.
Definition at line 307 of file AffineOps.h.
References isStrided().
|
inlinestatic |
Definition at line 285 of file AffineOps.h.
|
inline |
Returns the source memref affine map indices for this DMA operation.
Definition at line 155 of file AffineOps.h.
References mlir::AffineMap::getNumInputs(), getSrcMap(), and getSrcMemRefOperandIndex().
|
inline |
Returns the affine map used to access the source memref.
Definition at line 148 of file AffineOps.h.
References getSrcMapAttr().
Referenced by getDstMemRefOperandIndex(), and getSrcIndices().
|
inline |
Definition at line 149 of file AffineOps.h.
References getSrcMapAttrStrName().
Referenced by getAffineMapAttrForMemRef(), and getSrcMap().
|
inlinestatic |
Definition at line 281 of file AffineOps.h.
Referenced by getAffineMapAttrForMemRef(), and getSrcMapAttr().
|
inline |
Returns the memory space of the source memref.
Definition at line 162 of file AffineOps.h.
References getSrcMemRef(), and mlir::getType().
Referenced by isDestMemorySpaceFaster(), and isSrcMemorySpaceFaster().
|
inline |
Returns the source MemRefType for this DMA operation.
Definition at line 136 of file AffineOps.h.
References getSrcMemRefOperandIndex().
Referenced by getAffineMapAttrForMemRef(), getSrcMemorySpace(), and getSrcMemRefType().
|
inline |
Definition at line 137 of file AffineOps.h.
References mlir::Op< AffineDmaStartOp, OpTrait::MemRefsNormalizable, OpTrait::VariadicOperands, OpTrait::ZeroResults, OpTrait::OpInvariants, AffineMapAccessInterface::Trait, MemoryEffectOpInterface::Trait >::getOperation(), mlir::Operation::getOpOperand(), and getSrcMemRefOperandIndex().
|
inline |
Returns the operand index of the source memref.
Definition at line 133 of file AffineOps.h.
Referenced by getDstMemRefOperandIndex(), getSrcIndices(), getSrcMemRef(), and getSrcMemRefMutable().
|
inline |
Returns the rank (number of indices) of the source MemRefType.
Definition at line 145 of file AffineOps.h.
References getSrcMemRefType().
|
inline |
Definition at line 140 of file AffineOps.h.
References getSrcMemRef(), and mlir::getType().
Referenced by getSrcMemRefRank().
|
inline |
Returns the stride value for this DMA operation.
Definition at line 300 of file AffineOps.h.
References isStrided().
|
inline |
Returns the tag memref indices for this DMA operation.
Definition at line 231 of file AffineOps.h.
References mlir::AffineMap::getNumInputs(), getTagMap(), and getTagMemRefOperandIndex().
Referenced by checkTagMatch().
|
inline |
Returns the affine map used to access the tag memref.
Definition at line 224 of file AffineOps.h.
References getTagMapAttr().
Referenced by getNumElements(), getTagIndices(), and isStrided().
|
inline |
Definition at line 225 of file AffineOps.h.
References getTagMapAttrStrName().
Referenced by getAffineMapAttrForMemRef(), and getTagMap().
|
inlinestatic |
Definition at line 283 of file AffineOps.h.
Referenced by getAffineMapAttrForMemRef(), and getTagMapAttr().
|
inline |
Returns the Tag MemRef for this DMA operation.
Definition at line 210 of file AffineOps.h.
References getTagMemRefOperandIndex().
Referenced by checkTagMatch(), getAffineMapAttrForMemRef(), getTagMemRefRank(), and getTagMemRefType().
|
inline |
Definition at line 211 of file AffineOps.h.
References mlir::Op< AffineDmaStartOp, OpTrait::MemRefsNormalizable, OpTrait::VariadicOperands, OpTrait::ZeroResults, OpTrait::OpInvariants, AffineMapAccessInterface::Trait, MemoryEffectOpInterface::Trait >::getOperation(), mlir::Operation::getOpOperand(), and getTagMemRefOperandIndex().
|
inline |
Returns the operand index of the tag memref.
Definition at line 205 of file AffineOps.h.
References getDstMap(), getDstMemRefOperandIndex(), and mlir::AffineMap::getNumInputs().
Referenced by getNumElements(), getTagIndices(), getTagMemRef(), getTagMemRefMutable(), and isStrided().
|
inline |
Returns the rank (number of indices) of the tag MemRefType.
Definition at line 219 of file AffineOps.h.
References getTagMemRef(), and mlir::getType().
|
inline |
Definition at line 214 of file AffineOps.h.
References getTagMemRef(), and mlir::getType().
|
inline |
Returns true if this is a DMA from a faster memory space to a slower one.
Definition at line 259 of file AffineOps.h.
References getDstMemorySpace(), and getSrcMemorySpace().
Referenced by getFasterMemPos().
|
inline |
Returns true if this is a DMA from a slower memory space to a faster one.
Definition at line 264 of file AffineOps.h.
References getDstMemorySpace(), and getSrcMemorySpace().
Referenced by getFasterMemPos().
|
inline |
Returns true if this DMA operation is strided, returns false otherwise.
Definition at line 294 of file AffineOps.h.
References mlir::AffineMap::getNumInputs(), getTagMap(), and getTagMemRefOperandIndex().
Referenced by getNumElementsPerStride(), and getStride().
This is a public constructor. Any op can be initialized to null.
Definition at line 1721 of file OpDefinition.h.
This is a public constructor to enable access via the llvm::cast family of methods.
This should not be used directly.
Definition at line 1726 of file OpDefinition.h.
Definition at line 1722 of file OpDefinition.h.
|
static |
Definition at line 1796 of file AffineOps.cpp.
References mlir::OperationState::attributes, mlir::AsmParser::emitError(), mlir::AsmParser::getBuilder(), mlir::Builder::getIndexType(), mlir::AsmParser::getNameLoc(), mlir::OperationState::operands, mlir::OpAsmParser::parseAffineMapOfSSAIds(), mlir::AsmParser::parseColonTypeList(), mlir::AsmParser::parseComma(), mlir::OpAsmParser::parseOperand(), mlir::OpAsmParser::parseTrailingOperandList(), mlir::OpAsmParser::resolveOperand(), and mlir::OpAsmParser::resolveOperands().
void AffineDmaStartOp::print | ( | OpAsmPrinter & | p | ) |
Definition at line 1774 of file AffineOps.cpp.
References getNumElements(), getStride(), and mlir::OpAsmPrinter::printAffineMapOfSSAIds().
|
inline |
Definition at line 289 of file AffineOps.h.
References verifyInvariantsImpl().
LogicalResult AffineDmaStartOp::verifyInvariantsImpl | ( | ) |
Definition at line 1872 of file AffineOps.cpp.
References mlir::affine::getAffineScope(), mlir::getType(), and isValidAffineIndexOperand().
Referenced by verifyInvariants().