MLIR  16.0.0git
Public Member Functions | Static Public Member Functions | List of all members
mlir::AffineDmaStartOp Class Reference

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"

+ Inheritance diagram for mlir::AffineDmaStartOp:
+ Collaboration diagram for mlir::AffineDmaStartOp:

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...
 
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...
 
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...
 
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 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...
 
- Public Member Functions inherited from mlir::Op< AffineDmaStartOp, OpTrait::MemRefsNormalizable, OpTrait::VariadicOperands, OpTrait::ZeroResults, OpTrait::OpInvariants, AffineMapAccessInterface::Trait >
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...
 
OperationgetOperation ()
 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 ()
 
- Public Member Functions inherited from mlir::OpState
 operator bool ()
 Ops are pointer-like, so we allow conversion to bool. More...
 
 operator Operation * () const
 This implicitly converts to Operation*. More...
 
Operationoperator-> () const
 Shortcut of -> to access a member of Operation. More...
 
OperationgetOperation ()
 Return the operation that this refers to. More...
 
MLIRContextgetContext ()
 Return the context this operation belongs to. More...
 
void print (raw_ostream &os, OpPrintingFlags flags=std::nullopt)
 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 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 StringRef getSrcMapAttrStrName ()
 
static StringRef getDstMapAttrStrName ()
 
static StringRef getTagMapAttrStrName ()
 
static StringRef getOperationName ()
 
static ParseResult parse (OpAsmParser &parser, OperationState &result)
 
- Static Public Member Functions inherited from mlir::Op< AffineDmaStartOp, OpTrait::MemRefsNormalizable, OpTrait::VariadicOperands, OpTrait::ZeroResults, OpTrait::OpInvariants, AffineMapAccessInterface::Trait >
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 Public Member Functions inherited from mlir::OpState
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 RegisteredOperationName &, NamedAttrList &)
 This hook populates any unset default attrs. More...
 

Additional Inherited Members

- Public Types inherited from mlir::Op< AffineDmaStartOp, OpTrait::MemRefsNormalizable, OpTrait::VariadicOperands, OpTrait::ZeroResults, OpTrait::OpInvariants, AffineMapAccessInterface::Trait >
using ConcreteOpType = AffineDmaStartOp
 Expose the type we are instantiated on to template machinery that may want to introspect traits on this operation. More...
 
- Protected Member Functions inherited from mlir::OpState
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...
 
- Protected Member Functions inherited from mlir::OpTrait::TraitBase< ConcreteType, TraitType >
OperationgetOperation ()
 Return the ultimate Operation being worked on. More...
 
- Static Protected Member Functions inherited from mlir::OpState
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 void printOpName (Operation *op, OpAsmPrinter &p, StringRef defaultDialect)
 Print an operation name, eliding the dialect prefix if necessary. More...
 

Detailed Description

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 89 of file AffineOps.h.

Member Function Documentation

◆ build()

void AffineDmaStartOp::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

◆ fold()

LogicalResult AffineDmaStartOp::fold ( ArrayRef< Attribute cstOperands,
SmallVectorImpl< OpFoldResult > &  results 
)

dma_start(memrefcast) -> dma_start

Definition at line 1498 of file AffineOps.cpp.

References mlir::memref::foldMemRefCast().

◆ getAffineMapAttrForMemRef()

NamedAttribute mlir::AffineDmaStartOp::getAffineMapAttrForMemRef ( Value  memref)
inline

Impelements the AffineMapAccessInterface.

Returns the AffineMapAttr associated with 'memref'.

Definition at line 204 of file AffineOps.h.

References mlir::OpState::getContext(), getDstMapAttr(), getDstMapAttrStrName(), getDstMemRef(), getSrcMapAttr(), getSrcMapAttrStrName(), getSrcMemRef(), getTagMapAttr(), getTagMapAttrStrName(), and getTagMemRef().

◆ getAttributeNames()

static ArrayRef<StringRef> mlir::AffineDmaStartOp::getAttributeNames ( )
inlinestatic

Definition at line 95 of file AffineOps.h.

◆ getDstIndices()

operand_range mlir::AffineDmaStartOp::getDstIndices ( )
inline

Returns the destination memref indices for this DMA operation.

Definition at line 161 of file AffineOps.h.

References getDstMap(), getDstMemRefOperandIndex(), and mlir::AffineMap::getNumInputs().

Referenced by print(), and verifyInvariantsImpl().

◆ getDstMap()

AffineMap mlir::AffineDmaStartOp::getDstMap ( )
inline

Returns the affine map used to access the destination memref.

Definition at line 155 of file AffineOps.h.

References getDstMapAttr().

Referenced by getDstIndices(), getTagMemRefOperandIndex(), and verifyInvariantsImpl().

◆ getDstMapAttr()

AffineMapAttr mlir::AffineDmaStartOp::getDstMapAttr ( )
inline

Definition at line 156 of file AffineOps.h.

References getDstMapAttrStrName().

Referenced by getAffineMapAttrForMemRef(), getDstMap(), and print().

◆ getDstMapAttrStrName()

static StringRef mlir::AffineDmaStartOp::getDstMapAttrStrName ( )
inlinestatic

Definition at line 237 of file AffineOps.h.

Referenced by build(), getAffineMapAttrForMemRef(), getDstMapAttr(), and parse().

◆ getDstMemorySpace()

unsigned mlir::AffineDmaStartOp::getDstMemorySpace ( )
inline

Returns the memory space of the source memref.

Definition at line 150 of file AffineOps.h.

References mlir::Type::cast(), getDstMemRef(), mlir::detail::getMemorySpaceAsInt(), and mlir::Value::getType().

Referenced by isDestMemorySpaceFaster(), and isSrcMemorySpaceFaster().

◆ getDstMemRef()

Value mlir::AffineDmaStartOp::getDstMemRef ( )
inline

Returns the destination MemRefType for this DMA operation.

Definition at line 139 of file AffineOps.h.

References getDstMemRefOperandIndex().

Referenced by getAffineMapAttrForMemRef(), getDstMemorySpace(), getDstMemRefRank(), getDstMemRefType(), and print().

◆ getDstMemRefOperandIndex()

unsigned mlir::AffineDmaStartOp::getDstMemRefOperandIndex ( )
inline

Returns the operand index of the destination memref.

Definition at line 134 of file AffineOps.h.

References mlir::AffineMap::getNumInputs(), getSrcMap(), and getSrcMemRefOperandIndex().

Referenced by getDstIndices(), getDstMemRef(), getFasterMemPos(), getTagMemRefOperandIndex(), and verifyInvariantsImpl().

◆ getDstMemRefRank()

unsigned mlir::AffineDmaStartOp::getDstMemRefRank ( )
inline

Returns the rank (number of indices) of the destination MemRefType.

Definition at line 145 of file AffineOps.h.

References mlir::Type::cast(), getDstMemRef(), and mlir::Value::getType().

◆ getDstMemRefType()

MemRefType mlir::AffineDmaStartOp::getDstMemRefType ( )
inline

Definition at line 140 of file AffineOps.h.

References mlir::Type::cast(), getDstMemRef(), and mlir::Value::getType().

Referenced by print().

◆ getFasterMemPos()

unsigned mlir::AffineDmaStartOp::getFasterMemPos ( )
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 231 of file AffineOps.h.

References getDstMemRefOperandIndex(), isDestMemorySpaceFaster(), and isSrcMemorySpaceFaster().

◆ getNumElements()

Value mlir::AffineDmaStartOp::getNumElements ( )
inline

Returns the number of elements being transferred by this DMA operation.

Definition at line 197 of file AffineOps.h.

References getTagMap(), and getTagMemRefOperandIndex().

Referenced by print().

◆ getNumElementsPerStride()

Value mlir::AffineDmaStartOp::getNumElementsPerStride ( )
inline

Returns the number of elements to transfer per stride for this DMA op.

Definition at line 262 of file AffineOps.h.

References isStrided().

Referenced by print().

◆ getOperationName()

static StringRef mlir::AffineDmaStartOp::getOperationName ( )
inlinestatic

Definition at line 240 of file AffineOps.h.

◆ getSrcIndices()

operand_range mlir::AffineDmaStartOp::getSrcIndices ( )
inline

Returns the source memref affine map indices for this DMA operation.

Definition at line 122 of file AffineOps.h.

References mlir::AffineMap::getNumInputs(), getSrcMap(), and getSrcMemRefOperandIndex().

Referenced by print(), and verifyInvariantsImpl().

◆ getSrcMap()

AffineMap mlir::AffineDmaStartOp::getSrcMap ( )
inline

Returns the affine map used to access the source memref.

Definition at line 116 of file AffineOps.h.

References getSrcMapAttr().

Referenced by getDstMemRefOperandIndex(), getSrcIndices(), and verifyInvariantsImpl().

◆ getSrcMapAttr()

AffineMapAttr mlir::AffineDmaStartOp::getSrcMapAttr ( )
inline

Definition at line 117 of file AffineOps.h.

References getSrcMapAttrStrName().

Referenced by getAffineMapAttrForMemRef(), getSrcMap(), and print().

◆ getSrcMapAttrStrName()

static StringRef mlir::AffineDmaStartOp::getSrcMapAttrStrName ( )
inlinestatic

Definition at line 236 of file AffineOps.h.

Referenced by build(), getAffineMapAttrForMemRef(), getSrcMapAttr(), and parse().

◆ getSrcMemorySpace()

unsigned mlir::AffineDmaStartOp::getSrcMemorySpace ( )
inline

Returns the memory space of the source memref.

Definition at line 129 of file AffineOps.h.

References mlir::Type::cast(), mlir::detail::getMemorySpaceAsInt(), getSrcMemRef(), and mlir::Value::getType().

Referenced by isDestMemorySpaceFaster(), and isSrcMemorySpaceFaster().

◆ getSrcMemRef()

Value mlir::AffineDmaStartOp::getSrcMemRef ( )
inline

Returns the source MemRefType for this DMA operation.

Definition at line 107 of file AffineOps.h.

References getSrcMemRefOperandIndex().

Referenced by getAffineMapAttrForMemRef(), getSrcMemorySpace(), getSrcMemRefType(), and print().

◆ getSrcMemRefOperandIndex()

unsigned mlir::AffineDmaStartOp::getSrcMemRefOperandIndex ( )
inline

Returns the operand index of the source memref.

Definition at line 104 of file AffineOps.h.

Referenced by getDstMemRefOperandIndex(), getSrcIndices(), getSrcMemRef(), and verifyInvariantsImpl().

◆ getSrcMemRefRank()

unsigned mlir::AffineDmaStartOp::getSrcMemRefRank ( )
inline

Returns the rank (number of indices) of the source MemRefType.

Definition at line 113 of file AffineOps.h.

References getSrcMemRefType().

◆ getSrcMemRefType()

MemRefType mlir::AffineDmaStartOp::getSrcMemRefType ( )
inline

Definition at line 108 of file AffineOps.h.

References mlir::Type::cast(), getSrcMemRef(), and mlir::Value::getType().

Referenced by getSrcMemRefRank(), and print().

◆ getStride()

Value mlir::AffineDmaStartOp::getStride ( )
inline

Returns the stride value for this DMA operation.

Definition at line 255 of file AffineOps.h.

References isStrided().

Referenced by print().

◆ getTagIndices()

operand_range mlir::AffineDmaStartOp::getTagIndices ( )
inline

Returns the tag memref indices for this DMA operation.

Definition at line 190 of file AffineOps.h.

References mlir::AffineMap::getNumInputs(), getTagMap(), and getTagMemRefOperandIndex().

Referenced by checkTagMatch(), print(), and verifyInvariantsImpl().

◆ getTagMap()

AffineMap mlir::AffineDmaStartOp::getTagMap ( )
inline

Returns the affine map used to access the tag memref.

Definition at line 184 of file AffineOps.h.

References getTagMapAttr().

Referenced by getNumElements(), getTagIndices(), isStrided(), and verifyInvariantsImpl().

◆ getTagMapAttr()

AffineMapAttr mlir::AffineDmaStartOp::getTagMapAttr ( )
inline

Definition at line 185 of file AffineOps.h.

References getTagMapAttrStrName().

Referenced by getAffineMapAttrForMemRef(), getTagMap(), and print().

◆ getTagMapAttrStrName()

static StringRef mlir::AffineDmaStartOp::getTagMapAttrStrName ( )
inlinestatic

Definition at line 238 of file AffineOps.h.

Referenced by build(), getAffineMapAttrForMemRef(), getTagMapAttr(), and parse().

◆ getTagMemRef()

Value mlir::AffineDmaStartOp::getTagMemRef ( )
inline

Returns the Tag MemRef for this DMA operation.

Definition at line 173 of file AffineOps.h.

References getTagMemRefOperandIndex().

Referenced by checkTagMatch(), getAffineMapAttrForMemRef(), getTagMemRefRank(), getTagMemRefType(), and print().

◆ getTagMemRefOperandIndex()

unsigned mlir::AffineDmaStartOp::getTagMemRefOperandIndex ( )
inline

Returns the operand index of the tag memref.

Definition at line 168 of file AffineOps.h.

References getDstMap(), getDstMemRefOperandIndex(), and mlir::AffineMap::getNumInputs().

Referenced by getNumElements(), getTagIndices(), getTagMemRef(), isStrided(), and verifyInvariantsImpl().

◆ getTagMemRefRank()

unsigned mlir::AffineDmaStartOp::getTagMemRefRank ( )
inline

Returns the rank (number of indices) of the tag MemRefType.

Definition at line 179 of file AffineOps.h.

References mlir::Type::cast(), getTagMemRef(), and mlir::Value::getType().

◆ getTagMemRefType()

MemRefType mlir::AffineDmaStartOp::getTagMemRefType ( )
inline

Definition at line 174 of file AffineOps.h.

References mlir::Type::cast(), getTagMemRef(), and mlir::Value::getType().

Referenced by print().

◆ isDestMemorySpaceFaster()

bool mlir::AffineDmaStartOp::isDestMemorySpaceFaster ( )
inline

Returns true if this is a DMA from a faster memory space to a slower one.

Definition at line 218 of file AffineOps.h.

References getDstMemorySpace(), and getSrcMemorySpace().

Referenced by getFasterMemPos().

◆ isSrcMemorySpaceFaster()

bool mlir::AffineDmaStartOp::isSrcMemorySpaceFaster ( )
inline

Returns true if this is a DMA from a slower memory space to a faster one.

Definition at line 223 of file AffineOps.h.

References getDstMemorySpace(), and getSrcMemorySpace().

Referenced by getFasterMemPos().

◆ isStrided()

bool mlir::AffineDmaStartOp::isStrided ( )
inline

Returns true if this DMA operation is strided, returns false otherwise.

Definition at line 249 of file AffineOps.h.

References mlir::AffineMap::getNumInputs(), getTagMap(), and getTagMemRefOperandIndex().

Referenced by getNumElementsPerStride(), getStride(), parse(), and print().

◆ Op() [1/3]

mlir::Op< ConcreteType, Traits >::Op
inlineexplicit

This is a public constructor. Any op can be initialized to null.

Definition at line 1657 of file OpDefinition.h.

◆ Op() [2/3]

mlir::Op< ConcreteType, Traits >::Op
inlineexplicit

This is a public constructor to enable access via the llvm::cast family of methods.

This should not be used directly.

Definition at line 1662 of file OpDefinition.h.

◆ Op() [3/3]

mlir::Op< ConcreteType, Traits >::Op
inline

Definition at line 1658 of file OpDefinition.h.

◆ parse()

ParseResult AffineDmaStartOp::parse ( OpAsmParser parser,
OperationState result 
)
static

◆ print()

void AffineDmaStartOp::print ( OpAsmPrinter p)

◆ verifyInvariants()

LogicalResult mlir::AffineDmaStartOp::verifyInvariants ( )
inline

Definition at line 244 of file AffineOps.h.

References verifyInvariantsImpl().

◆ verifyInvariantsImpl()

LogicalResult AffineDmaStartOp::verifyInvariantsImpl ( )

The documentation for this class was generated from the following files: