20 struct ExtractSliceOpSubsetOpInterface
21 :
public SubsetOpInterface::ExternalModel<ExtractSliceOpSubsetOpInterface,
22 tensor::ExtractSliceOp> {
23 FailureOr<HyperrectangularSlice>
24 getAccessedHyperrectangularSlice(
Operation *op)
const {
29 struct ExtractSliceOpSubsetExtractionOpInterface
30 :
public SubsetExtractionOpInterface::ExternalModel<
31 ExtractSliceOpSubsetExtractionOpInterface, tensor::ExtractSliceOp> {
33 return cast<tensor::ExtractSliceOp>(op).getSourceMutable();
37 template <
typename OpTy>
38 struct InsertSliceLikeOpSubsetOpInterface
39 :
public SubsetOpInterface::ExternalModel<
40 InsertSliceLikeOpSubsetOpInterface<OpTy>, OpTy> {
41 FailureOr<HyperrectangularSlice>
42 getAccessedHyperrectangularSlice(
Operation *op)
const {
47 template <
typename OpTy>
48 struct InsertSliceLikeOpSubsetInsertionOpInterface
49 :
public SubsetInsertionOpInterface::ExternalModel<
50 InsertSliceLikeOpSubsetInsertionOpInterface<OpTy>, OpTy> {
52 return cast<OpTy>(op).getSourceMutable();
56 return cast<OpTy>(op).getDestMutable();
61 auto insertSliceOp = cast<OpTy>(op);
62 auto extractOp = builder.
create<tensor::ExtractSliceOp>(
63 loc, insertSliceOp.getSourceType(), insertSliceOp.getDest(),
64 insertSliceOp.getMixedOffsets(), insertSliceOp.getMixedSizes(),
65 insertSliceOp.getMixedStrides());
70 getValuesNeededToBuildSubsetExtraction(
Operation *op)
const {
71 auto insertSliceOp = cast<OpTy>(op);
74 neededValues.append(insertSliceOp.getOffsets().begin(),
75 insertSliceOp.getOffsets().end());
76 neededValues.append(insertSliceOp.getSizes().begin(),
77 insertSliceOp.getSizes().end());
78 neededValues.append(insertSliceOp.getStrides().begin(),
79 insertSliceOp.getStrides().end());
80 neededValues.push_back(insertSliceOp.getDest());
92 ExtractSliceOp::attachInterface<ExtractSliceOpSubsetOpInterface>(*ctx);
93 ExtractSliceOp::attachInterface<ExtractSliceOpSubsetExtractionOpInterface>(
95 InsertSliceOp::attachInterface<
96 InsertSliceLikeOpSubsetOpInterface<InsertSliceOp>>(*ctx);
97 InsertSliceOp::attachInterface<
98 InsertSliceLikeOpSubsetInsertionOpInterface<InsertSliceOp>>(*ctx);
99 ParallelInsertSliceOp::attachInterface<
100 InsertSliceLikeOpSubsetOpInterface<ParallelInsertSliceOp>>(*ctx);
101 ParallelInsertSliceOp::attachInterface<
102 InsertSliceLikeOpSubsetInsertionOpInterface<ParallelInsertSliceOp>>(
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.
A hyperrectangular slice, represented as a list of offsets, sizes and strides.
This class defines the main interface for locations in MLIR and acts as a non-nullable wrapper around...
MLIRContext is the top-level object for a collection of MLIR operations.
This class helps build Operations.
Operation * create(const OperationState &state)
Creates an operation given the fields represented as an OperationState.
This class represents an operand of an operation.
Operation is the basic unit of execution within MLIR.
OpResult getResult(unsigned idx)
Get the 'idx'th result of this operation.
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
void registerSubsetOpInterfaceExternalModels(DialectRegistry ®istry)
Include the generated interface declarations.