diff --git a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Fusion.cpp @@ -161,17 +161,6 @@ assert(consumer.hasBufferSemantics() && "expected linalg op with buffer semantics"); - if (auto convOp = dyn_cast(producer.getOperation())) { - // TODO(ntv): add a level of indirection to linalg.generic. - if (convOp.padding()) - llvm_unreachable("Unexpected conv with padding"); - } - if (auto convOp = dyn_cast(consumer.getOperation())) { - // TODO(ntv): add a level of indirection to linalg.generic. - if (convOp.padding()) - llvm_unreachable("Unexpected conv with padding"); - } - auto subView = dyn_cast_or_null( consumer.getBuffer(consumerIdx).getDefiningOp()); auto slice = dyn_cast_or_null( @@ -287,6 +276,16 @@ << *producer.getOperation()); return false; } + if (auto convOp = dyn_cast(producer.getOperation())) { + // TODO(ntv): add a level of indirection to linalg.generic. + if (convOp.padding()) + return false; + } + if (auto convOp = dyn_cast(consumer.getOperation())) { + // TODO(ntv): add a level of indirection to linalg.generic. + if (convOp.padding()) + return false; + } return true; } diff --git a/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp b/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Tiling.cpp @@ -409,8 +409,10 @@ // 5. Gather the newly created loops and return them with the new op. SmallVector loops; loops.reserve(ivs.size()); - for (auto iv : ivs) - loops.push_back(loop::getForInductionVarOwner(iv)); + for (auto iv : ivs) { + loops.push_back(iv.cast().getOwner()->getParentOp()); + assert(loops.back() && "no owner found for induction variable!"); + } return TiledLinalgOp{res, loops}; }