[Mlir-commits] [mlir] [mlir][SCF] Avoid crash in parallel loop unrolling test pass (PR #222644)

purnima shrivastava llvmlistbot at llvm.org
Mon Sep 14 02:25:15 PDT 2026


https://github.com/purnima-nlp updated https://github.com/llvm/llvm-project/pull/222644

>From bde265ff1b836f134a62c5b6bf852bd31f856d66 Mon Sep 17 00:00:00 2001
From: Purnima Shrivastava <purnimashrivastava05 at .com>
Date: Mon, 14 Sep 2026 14:54:52 +0530
Subject: [PATCH] [mlir][scf] Validate parallel loop unroll factors

---
 .../Dialect/SCF/parallel-loop-unroll-invalid.mlir  | 11 +++++++++++
 .../lib/Dialect/SCF/TestParallelLoopUnrolling.cpp  | 14 ++++++++++++++
 2 files changed, 25 insertions(+)
 create mode 100644 mlir/test/Dialect/SCF/parallel-loop-unroll-invalid.mlir

diff --git a/mlir/test/Dialect/SCF/parallel-loop-unroll-invalid.mlir b/mlir/test/Dialect/SCF/parallel-loop-unroll-invalid.mlir
new file mode 100644
index 0000000000000..c5c28ea9486c3
--- /dev/null
+++ b/mlir/test/Dialect/SCF/parallel-loop-unroll-invalid.mlir
@@ -0,0 +1,11 @@
+// RUN: split-file %s %t
+// RUN: mlir-opt %t/missing-factors.mlir -test-parallel-loop-unrolling -verify-diagnostics
+// RUN: mlir-opt %t/zero-factor.mlir -test-parallel-loop-unrolling='unroll-factors=1,0' -verify-diagnostics
+
+//--- missing-factors.mlir
+// expected-error at unknown {{missing `unroll-factors` pass option}}
+module {}
+
+//--- zero-factor.mlir
+// expected-error at unknown {{unroll factors must be non-zero}}
+module {}
diff --git a/mlir/test/lib/Dialect/SCF/TestParallelLoopUnrolling.cpp b/mlir/test/lib/Dialect/SCF/TestParallelLoopUnrolling.cpp
index 12a6a6af59fa6..6f7e721825c5d 100644
--- a/mlir/test/lib/Dialect/SCF/TestParallelLoopUnrolling.cpp
+++ b/mlir/test/lib/Dialect/SCF/TestParallelLoopUnrolling.cpp
@@ -15,6 +15,7 @@
 #include "mlir/Dialect/SCF/Utils/Utils.h"
 #include "mlir/IR/Builders.h"
 #include "mlir/Pass/Pass.h"
+#include "llvm/ADT/STLExtras.h"
 
 using namespace mlir;
 
@@ -46,6 +47,19 @@ struct TestParallelLoopUnrollingPass
   }
 
   void runOnOperation() override {
+    if (unrollFactors.empty()) {
+      emitError(UnknownLoc::get(&getContext()),
+                "missing `unroll-factors` pass option");
+      signalPassFailure();
+      return;
+    }
+    if (llvm::is_contained(unrollFactors, 0)) {
+      emitError(UnknownLoc::get(&getContext()),
+                "unroll factors must be non-zero");
+      signalPassFailure();
+      return;
+    }
+
     SmallVector<scf::ParallelOp, 4> loops;
     getOperation()->walk([&](scf::ParallelOp parLoop) {
       if (getNestingDepth(parLoop) == loopDepth)



More information about the Mlir-commits mailing list