forked from OSchip/llvm-project
[mlir][linalg] ComprehensiveBufferize: Do not copy InitTensorOp results
E.g.: ``` %2 = memref.alloc() {alignment = 128 : i64} : memref<256x256xf32> %3 = memref.alloc() {alignment = 128 : i64} : memref<256x256xf32> // ... (%3 is not written to) linalg.copy(%3, %2) : memref<256x256xf32>, memref<256x256xf32> vector.transfer_write %11, %2[%c0, %c0] {in_bounds = [true, true]} : vector<256x256xf32>, memref<256x256xf32> ``` Avoid copies of %3 if %3 came directly from an InitTensorOp. Differential Revision: https://reviews.llvm.org/D109742
This commit is contained in:
parent
e90d55e1c9
commit
934e2f695e
|
@ -2190,7 +2190,8 @@ static LogicalResult bufferize(OpBuilder &b, VectorTransferOpInterface op,
|
||||||
newInputBuffer = createNewAllocDeallocPairForShapedValue(
|
newInputBuffer = createNewAllocDeallocPairForShapedValue(
|
||||||
b, loc, writeOp.source(), aliasInfo);
|
b, loc, writeOp.source(), aliasInfo);
|
||||||
Value v = lookup(bvm, writeOp.source());
|
Value v = lookup(bvm, writeOp.source());
|
||||||
b.create<CopyOp>(loc, v, newInputBuffer);
|
if (!isInitTensorOp(writeOp.source()))
|
||||||
|
b.create<CopyOp>(loc, v, newInputBuffer);
|
||||||
} else {
|
} else {
|
||||||
// InPlace write will result in memref.tensor_load(x) which must
|
// InPlace write will result in memref.tensor_load(x) which must
|
||||||
// canonicalize away with one of it uses.
|
// canonicalize away with one of it uses.
|
||||||
|
|
Loading…
Reference in New Issue