[Mlir-commits] [mlir] [mlir][vector] Fix fold result for empty vector.mask with no results (PR #180345)

Longsheng Mou llvmlistbot at llvm.org
Wed Feb 25 23:50:39 PST 2026


https://github.com/CoTinker updated https://github.com/llvm/llvm-project/pull/180345

>From bc90fa29026277aa6a93a4c1150db60b5dfd1bd8 Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Sat, 7 Feb 2026 20:36:43 +0800
Subject: [PATCH 1/3] [mlir][vector] Fix fold result for empty vector.mask with
 no results

This PR fixes `foldEmptyMaskOp` to return `failure` when folding an empty vector.mask whose terminatorhas no operands. Previously this case returned success without producing any folded results, which violates the folding contract.
---
 mlir/lib/Dialect/Vector/IR/VectorOps.cpp              |  2 +-
 mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 613adeb5eeaaf..089f41142dfd5 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -7614,7 +7614,7 @@ static LogicalResult foldEmptyMaskOp(MaskOp maskOp, MaskOp::FoldAdaptor adaptor,
   auto terminator = cast<vector::YieldOp>(block->front());
   if (terminator.getNumOperands() == 0) {
     // `vector.mask` has no results, just remove the `vector.mask`.
-    return success();
+    return failure();
   }
 
   // `vector.mask` has results, propagate the results.
diff --git a/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir b/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir
index 319dfc31ab637..5655c76d37faf 100644
--- a/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir
+++ b/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir
@@ -772,3 +772,14 @@ func.func @arith_truncf(%arg0: f64) -> f16 {
 
   return %truncd1 : f16
 }
+
+// -----
+
+// Ensure that vector.mask with an empty mask does not cause issues.
+
+// CHECK-LABEL: empty_vector_mask
+func.func @empty_vector_mask(%mask : vector<8xi1>) {
+  // CHECK: vector.mask
+  vector.mask %mask { vector.yield } : vector<8xi1>
+  return
+}

>From aa5754bd768cd880d421ce10a301406696c5b84a Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Thu, 12 Feb 2026 22:18:13 +0800
Subject: [PATCH 2/3] remove comment

---
 mlir/lib/Dialect/Vector/IR/VectorOps.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 089f41142dfd5..38f8430d6d370 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -7612,10 +7612,8 @@ static LogicalResult foldEmptyMaskOp(MaskOp maskOp, MaskOp::FoldAdaptor adaptor,
 
   Block *block = maskOp.getMaskBlock();
   auto terminator = cast<vector::YieldOp>(block->front());
-  if (terminator.getNumOperands() == 0) {
-    // `vector.mask` has no results, just remove the `vector.mask`.
+  if (terminator.getNumOperands() == 0)
     return failure();
-  }
 
   // `vector.mask` has results, propagate the results.
   llvm::append_range(results, terminator.getOperands());

>From b6b0743138d7be7b056632db9bf837cb92f2367b Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Thu, 26 Feb 2026 15:50:30 +0800
Subject: [PATCH 3/3] remove test

---
 mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir b/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir
index 5655c76d37faf..319dfc31ab637 100644
--- a/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir
+++ b/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir
@@ -772,14 +772,3 @@ func.func @arith_truncf(%arg0: f64) -> f16 {
 
   return %truncd1 : f16
 }
-
-// -----
-
-// Ensure that vector.mask with an empty mask does not cause issues.
-
-// CHECK-LABEL: empty_vector_mask
-func.func @empty_vector_mask(%mask : vector<8xi1>) {
-  // CHECK: vector.mask
-  vector.mask %mask { vector.yield } : vector<8xi1>
-  return
-}



More information about the Mlir-commits mailing list