[Mlir-commits] [mlir] [mlir][linalg] Fix crash in tileToForallOpImpl when tileUsingSCF returns empty loops (PR #187075)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Mar 17 10:53:48 PDT 2026
https://github.com/edg-l updated https://github.com/llvm/llvm-project/pull/187075
>From 353239c650344df403f6fde0d2eff6d156d39b62 Mon Sep 17 00:00:00 2001
From: Edgar Luque <git at edgl.dev>
Date: Tue, 17 Mar 2026 18:37:36 +0100
Subject: [PATCH] [mlir][linalg] Fix crash in tileToForallOpImpl when
tileUsingSCF returns empty loops
Return a silenceable error instead of proceeding with an empty loops
vector. Both tileToForallOpImpl (normalizeForallLoopOp) and its caller
TileUsingForallOp::apply access tilingResult.loops.front() without
checking emptiness, causing undefined behavior when tileUsingSCF
produces no loops (e.g. for a rank-0 op with an empty iteration domain).
The garbage pointer propagates into the transform state's reverse
mapping, corrupting it and causing a second crash in
checkAndRecordHandleInvalidation on subsequent transform applications.
Fixes https://github.com/llvm/llvm-project/issues/187073
---
mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
index d751488d186ad..1670fd163bd77 100644
--- a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
+++ b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
@@ -3888,6 +3888,11 @@ DiagnosedSilenceableFailure transform::tileToForallOpImpl(
tilingResult = *maybeTilingResult;
+ if (tilingResult.loops.empty()) {
+ return transformOp.emitSilenceableError()
+ << "tiling did not generate any loops";
+ }
+
if (mixedNumThreads.empty()) {
auto generatedForallOp = cast<scf::ForallOp>(tilingResult.loops.front());
OpBuilder::InsertionGuard g(rewriter);
More information about the Mlir-commits
mailing list