[Mlir-commits] [mlir] [mlir][Affine] Require virtual-vector-size in super-vectorize (PR #171110)

Akimasa Watanuki llvmlistbot at llvm.org
Sat Aug 15 02:34:24 PDT 2026


https://github.com/Men-cotton updated https://github.com/llvm/llvm-project/pull/171110

>From a8847f110c722cf3e5f50eaccb9048eab00b6516 Mon Sep 17 00:00:00 2001
From: mencotton <mencotton0410 at gmail.com>
Date: Mon, 8 Dec 2025 19:31:49 +0900
Subject: [PATCH] [mlir][affine] Require a vector size in
 affine-super-vectorize

Diagnose invocations that omit the `virtual-vector-size` option. A vector rank is required to construct a vectorization pattern, so accepting an empty size list would silently leave the input unchanged.

Check that vector sizes are present and positive before applying rank-dependent constraints.
---
 .../Dialect/Affine/Transforms/SuperVectorize.cpp | 16 +++++++++++-----
 .../Affine/SuperVectorize/invalid-zero-size.mlir |  9 ---------
 .../invalid_missing_vector_size.mlir             |  6 ++++++
 .../Affine/SuperVectorize/invalid_zero_size.mlir | 10 ++++++++++
 4 files changed, 27 insertions(+), 14 deletions(-)
 delete mode 100644 mlir/test/Dialect/Affine/SuperVectorize/invalid-zero-size.mlir
 create mode 100644 mlir/test/Dialect/Affine/SuperVectorize/invalid_missing_vector_size.mlir
 create mode 100644 mlir/test/Dialect/Affine/SuperVectorize/invalid_zero_size.mlir

diff --git a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp
index 3158a113a7600..6c0cf507de5b8 100644
--- a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp
+++ b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp
@@ -1841,6 +1841,17 @@ void affine::vectorizeChildAffineLoops(
 /// predetermined patterns.
 void Vectorize::runOnOperation() {
   func::FuncOp f = getOperation();
+  if (vectorSizes.empty()) {
+    f.emitError("The 'virtual-vector-size' option must be specified.");
+    return signalPassFailure();
+  }
+
+  if (llvm::any_of(vectorSizes, [](int64_t size) { return size <= 0; })) {
+    f.emitError(
+        "The 'virtual-vector-size' option must contain only positive values.");
+    return signalPassFailure();
+  }
+
   if (!fastestVaryingPattern.empty() &&
       fastestVaryingPattern.size() != vectorSizes.size()) {
     f.emitRemark("Fastest varying pattern specified with different size than "
@@ -1853,11 +1864,6 @@ void Vectorize::runOnOperation() {
     return signalPassFailure();
   }
 
-  if (llvm::any_of(vectorSizes, [](int64_t size) { return size <= 0; })) {
-    f.emitError("Vectorization factor must be greater than zero.");
-    return signalPassFailure();
-  }
-
   vectorizeChildAffineLoops(f, vectorizeReductions, vectorSizes,
                             fastestVaryingPattern);
 }
diff --git a/mlir/test/Dialect/Affine/SuperVectorize/invalid-zero-size.mlir b/mlir/test/Dialect/Affine/SuperVectorize/invalid-zero-size.mlir
deleted file mode 100644
index 396cc933e25bc..0000000000000
--- a/mlir/test/Dialect/Affine/SuperVectorize/invalid-zero-size.mlir
+++ /dev/null
@@ -1,9 +0,0 @@
-// RUN: mlir-opt %s -verify-diagnostics --affine-super-vectorize=virtual-vector-size=0
-
-// expected-error at +1 {{Vectorization factor must be greater than zero}} 
-func.func @with_zero_vector_size(%arg0: memref<21x12x12xi1>) {
-  affine.for %arg1 = 0 to 84 step 4294967295 {
-  }
-  return
-}
-
diff --git a/mlir/test/Dialect/Affine/SuperVectorize/invalid_missing_vector_size.mlir b/mlir/test/Dialect/Affine/SuperVectorize/invalid_missing_vector_size.mlir
new file mode 100644
index 0000000000000..4135e5cb6a696
--- /dev/null
+++ b/mlir/test/Dialect/Affine/SuperVectorize/invalid_missing_vector_size.mlir
@@ -0,0 +1,6 @@
+// RUN: mlir-opt %s -verify-diagnostics --affine-super-vectorize
+
+// expected-error at +1 {{The 'virtual-vector-size' option must be specified.}}
+func.func @missing_vector_size() {
+  return
+}
diff --git a/mlir/test/Dialect/Affine/SuperVectorize/invalid_zero_size.mlir b/mlir/test/Dialect/Affine/SuperVectorize/invalid_zero_size.mlir
new file mode 100644
index 0000000000000..442acecca9729
--- /dev/null
+++ b/mlir/test/Dialect/Affine/SuperVectorize/invalid_zero_size.mlir
@@ -0,0 +1,10 @@
+// RUN: mlir-opt %s -verify-diagnostics --affine-super-vectorize=virtual-vector-size=0
+// RUN: mlir-opt %s -verify-diagnostics \
+// RUN:   -affine-super-vectorize="virtual-vector-size=4,0 vectorize-reductions=true"
+
+// expected-error at +1 {{The 'virtual-vector-size' option must contain only positive values.}}
+func.func @with_zero_vector_size(%arg0: memref<21x12x12xi1>) {
+  affine.for %arg1 = 0 to 84 step 4294967295 {
+  }
+  return
+}



More information about the Mlir-commits mailing list