19template <
typename OpTy>
20struct XferOpSubsetOpInterface
21 :
public SubsetOpInterface::ExternalModel<XferOpSubsetOpInterface<OpTy>,
23 FailureOr<HyperrectangularSlice>
24 getAccessedHyperrectangularSlice(Operation *op)
const {
25 auto xferOp = cast<OpTy>(op);
26 Builder
b(xferOp->getContext());
27 SmallVector<OpFoldResult> offsets = llvm::map_to_vector(
28 xferOp.getIndices(), [](Value v) -> OpFoldResult { return v; });
29 SmallVector<OpFoldResult> sizes = llvm::map_to_vector(
30 xferOp.getTransferChunkAccessed(),
31 [&](int64_t sz) -> OpFoldResult { return b.getIndexAttr(sz); });
32 return HyperrectangularSlice(offsets, sizes);
36struct TransferReadOpSubsetExtractionOpInterface
37 :
public SubsetExtractionOpInterface::ExternalModel<
38 TransferReadOpSubsetExtractionOpInterface, vector::TransferReadOp> {
39 OpOperand &getSourceOperand(Operation *op)
const {
40 return cast<vector::TransferReadOp>(op).getBaseMutable();
44struct TransferWriteOpSubsetInsertionOpInterface
45 :
public SubsetInsertionOpInterface::ExternalModel<
46 TransferWriteOpSubsetInsertionOpInterface, vector::TransferWriteOp> {
47 OpOperand &getSourceOperand(Operation *op)
const {
48 return cast<vector::TransferWriteOp>(op).getValueToStoreMutable();
51 OpOperand &getDestinationOperand(Operation *op)
const {
52 return cast<vector::TransferWriteOp>(op).getBaseMutable();
62 getValuesNeededToBuildSubsetExtraction(Operation *op)
const {
73 TransferReadOp::attachInterface<XferOpSubsetOpInterface<TransferReadOp>>(
75 TransferReadOp::attachInterface<TransferReadOpSubsetExtractionOpInterface>(
77 TransferWriteOp::attachInterface<XferOpSubsetOpInterface<TransferWriteOp>>(
79 TransferWriteOp::attachInterface<TransferWriteOpSubsetInsertionOpInterface>(
The DialectRegistry maps a dialect namespace to a constructor for the matching dialect.
bool addExtension(TypeID extensionID, std::unique_ptr< DialectExtensionBase > extension)
Add the given extension to the registry.
MLIRContext is the top-level object for a collection of MLIR operations.
Value buildSubsetExtraction(RewriterBase &rewriter, SubsetInsertionOpInterface op, tensor::EmptyOp emptyTensorOp, Operation *user)
This method builds and returns a subset extraction value for the destination tensor that the given op...
void registerSubsetOpInterfaceExternalModels(DialectRegistry ®istry)
Include the generated interface declarations.