forked from OSchip/llvm-project
[mlir][Linalg] Do not return failure when all tile sizes are zero.
Returning failure when tile sizes are all zero prevents the change in the marker. This makes pattern rewriter run the pattern multiple times only to exit when it hits a limit. Instead just clone the operation (since tiling is essentially cloning in this case). Then the transformation filter kicks in to avoid the pattern rewriter to be invoked many times. Differential Revision: https://reviews.llvm.org/D113949
This commit is contained in:
parent
7ca14f6044
commit
526dfe3f4d
|
@ -159,8 +159,13 @@ tileLinalgOpImpl(OpBuilder &b, LinalgOp op, ValueRange tileSizes,
|
|||
// Initial tile sizes may be too big, only take the first nLoops.
|
||||
tileSizes = tileSizes.take_front(nLoops);
|
||||
|
||||
if (llvm::all_of(tileSizes, isZero))
|
||||
return failure();
|
||||
if (llvm::all_of(tileSizes, isZero)) {
|
||||
TiledLinalgOp tiledOp;
|
||||
tiledOp.op = cast<LinalgOp>(b.clone(*op.getOperation()));
|
||||
tiledOp.tensorResults.assign(tiledOp.op->result_begin(),
|
||||
tiledOp.op->result_end());
|
||||
return tiledOp;
|
||||
}
|
||||
|
||||
// 1. Build the tiled loop ranges.
|
||||
auto allShapeSizes = op.createFlatListOfOperandDims(b, op.getLoc());
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// RUN: mlir-opt -test-linalg-transform-patterns=test-tile-pattern %s | FileCheck %s
|
||||
|
||||
func @matmul_zero_tile(
|
||||
%arg0: tensor<?x?xf32>, %arg1 : tensor<?x?xf32>, %arg2 : tensor<?x?xf32>) -> tensor<?x?xf32> {
|
||||
%0 = linalg.matmul {__internal_linalg_transform__ = "tile"}
|
||||
ins(%arg0, %arg1 : tensor<?x?xf32>, tensor<?x?xf32>)
|
||||
outs(%arg2 : tensor<?x?xf32>) -> tensor<?x?xf32>
|
||||
return %0 : tensor<?x?xf32>
|
||||
}
|
||||
// CHECK-LABEL: matmul_zero_tile
|
||||
// CHECK: linalg.matmul
|
||||
// CHECK-NOT: __internal_linalg_transform__
|
Loading…
Reference in New Issue