forked from OSchip/llvm-project
[mlir][linalg][bufferize][NFC] Update comments in BufferizableOpInterface
Differential Revision: https://reviews.llvm.org/D116932
This commit is contained in:
parent
e6d7b2f0de
commit
446f0c609f
|
@ -426,8 +426,8 @@ private:
|
||||||
void replaceOpWithBufferizedValues(RewriterBase &rewriter, Operation *op,
|
void replaceOpWithBufferizedValues(RewriterBase &rewriter, Operation *op,
|
||||||
ValueRange values);
|
ValueRange values);
|
||||||
|
|
||||||
/// Replace an op with a new op. Tensor OpResults must be replaced with memref
|
/// Replace an op with a new op. The new op must have the same number of
|
||||||
/// values.
|
/// results as the replaced op. The new op may not return any tensor values.
|
||||||
template <typename OpTy, typename... Args>
|
template <typename OpTy, typename... Args>
|
||||||
OpTy replaceOpWithNewBufferizedOp(RewriterBase &rewriter, Operation *op,
|
OpTy replaceOpWithNewBufferizedOp(RewriterBase &rewriter, Operation *op,
|
||||||
Args &&...args) {
|
Args &&...args) {
|
||||||
|
|
|
@ -195,13 +195,26 @@ def BufferizableOpInterface : OpInterface<"BufferizableOpInterface"> {
|
||||||
InterfaceMethod<
|
InterfaceMethod<
|
||||||
/*desc=*/[{
|
/*desc=*/[{
|
||||||
Bufferize this op, i.e., rewrite it into a memref-based equivalent.
|
Bufferize this op, i.e., rewrite it into a memref-based equivalent.
|
||||||
Tensor values should be mapped to buffer values using `state`.
|
Buffers of tensor SSA values can be retrieved via `state.getBuffer`.
|
||||||
|
Uses of tensor results of the existing tensor op can be replaced with
|
||||||
|
`replaceOpWithBufferizedValues` or `replaceOpWithNewBufferizedOp`.
|
||||||
|
These two functions automatically handle the tensor-to-memref type
|
||||||
|
conversion.
|
||||||
|
|
||||||
Implementations are required to required to bufferize nested ops
|
The implementation of this method must be consistent with the
|
||||||
before returning. Otherwise, nested ops will not be bufferized.
|
remaining methods, in particular `getAliasingOpOperand`. I.e., a
|
||||||
|
tensor result `r` may only be replaced with:
|
||||||
|
a) A buffer that aliases one of buffers in getAliasingOpOperand(r).
|
||||||
|
b) Or: A newly allocated buffer.
|
||||||
|
|
||||||
|
Regions of an op should be inlined into the new op instead of cloning
|
||||||
|
them. This is not only more efficient, but also necessary so that no
|
||||||
|
analysis results are lost. (Bufferization decisions are tracked via
|
||||||
|
OpOperand pointers and cloned ops have new OpOperands.) If regions are
|
||||||
|
cloned instead of inlined, additional buffer copies may be inserted.
|
||||||
|
|
||||||
This method will never be called on ops that do not have at least one
|
This method will never be called on ops that do not have at least one
|
||||||
tensor operand/result or a region.
|
tensor operand/result.
|
||||||
}],
|
}],
|
||||||
/*retType=*/"LogicalResult",
|
/*retType=*/"LogicalResult",
|
||||||
/*methodName=*/"bufferize",
|
/*methodName=*/"bufferize",
|
||||||
|
|
Loading…
Reference in New Issue