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(
|
||||
b, loc, writeOp.source(), aliasInfo);
|
||||
Value v = lookup(bvm, writeOp.source());
|
||||
b.create<CopyOp>(loc, v, newInputBuffer);
|
||||
if (!isInitTensorOp(writeOp.source()))
|
||||
b.create<CopyOp>(loc, v, newInputBuffer);
|
||||
} else {
|
||||
// InPlace write will result in memref.tensor_load(x) which must
|
||||
// canonicalize away with one of it uses.
|
||||
|
|
Loading…
Reference in New Issue