[Mlir-commits] [mlir] [mlir][memref] Add SCFDialect dependency to RuntimeOpVerification (PR #205241)
Longsheng Mou
llvmlistbot at llvm.org
Tue Jun 23 04:10:50 PDT 2026
https://github.com/CoTinker updated https://github.com/llvm/llvm-project/pull/205241
>From 121cea4fcdb0f155daae7385b69f0a2f3842a84f Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Tue, 23 Jun 2026 10:35:04 +0800
Subject: [PATCH 1/3] [mlir][memref] Add SCFDialect dependency to
RuntimeOpVerification
Explicitly load SCFDialect as a dependent dialect in RuntimeOpVerification to avoid unregistered dialect errors when generating `scf.if`/`scf.yield` ops.
---
mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp
index e5cc41e2c43ba..d7fdedce415d9 100644
--- a/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp
+++ b/mlir/lib/Dialect/MemRef/Transforms/RuntimeOpVerification.cpp
@@ -418,6 +418,6 @@ void mlir::memref::registerRuntimeVerifiableOpInterfaceExternalModels(
// Load additional dialects of which ops may get created.
ctx->loadDialect<affine::AffineDialect, arith::ArithDialect,
- cf::ControlFlowDialect>();
+ cf::ControlFlowDialect, scf::SCFDialect>();
});
}
>From f7c64b8da172694adb1a85864098e71f6d00388c Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Tue, 23 Jun 2026 10:36:12 +0800
Subject: [PATCH 2/3] add test
---
.../Dialect/MemRef/runtime-verification.mlir | 44 ++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
diff --git a/mlir/test/Dialect/MemRef/runtime-verification.mlir b/mlir/test/Dialect/MemRef/runtime-verification.mlir
index 28777a3e88672..733c0cfb8f167 100644
--- a/mlir/test/Dialect/MemRef/runtime-verification.mlir
+++ b/mlir/test/Dialect/MemRef/runtime-verification.mlir
@@ -1,4 +1,4 @@
-// RUN: mlir-opt %s -generate-runtime-verification -cse | FileCheck %s
+// RUN: mlir-opt %s -generate-runtime-verification -cse -split-input-file | FileCheck %s
// CHECK-LABEL: func @expand_shape(
// CHECK-SAME: %[[m:.*]]: memref<?xf32>
@@ -13,3 +13,45 @@ func.func @expand_shape(%m: memref<?xf32>, %sz0: index) -> memref<?x5xf32> {
%0 = memref.expand_shape %m [[0, 1]] output_shape [%sz0, 5] : memref<?xf32> into memref<?x5xf32>
return %0 : memref<?x5xf32>
}
+
+// -----
+
+// CHECK-LABEL: func.func @subview(
+// CHECK-SAME: %[[ARG0:.*]]: memref<1xf32>,
+// CHECK-SAME: %[[ARG1:.*]]: index) {
+// CHECK: %[[CONSTANT_0:.*]] = arith.constant 0 : index
+// CHECK: %[[CONSTANT_1:.*]] = arith.constant 1 : index
+// CHECK: %[[VAL_0:.*]], %[[VAL_1:.*]], %[[VAL_2:.*]], %[[EXTRACT_STRIDED_METADATA_0:.*]] = memref.extract_strided_metadata %[[ARG0]] : memref<1xf32> -> memref<f32>, index, index, index
+// CHECK: %[[CMPI_0:.*]] = arith.cmpi eq, %[[CONSTANT_1]], %[[CONSTANT_0]] : index
+// CHECK: %[[IF_0:.*]] = scf.if %[[CMPI_0]] -> (i1) {
+// CHECK: %[[CMPI_1:.*]] = arith.cmpi sge, %[[ARG1]], %[[CONSTANT_0]] : index
+// CHECK: %[[CMPI_2:.*]] = arith.cmpi sle, %[[ARG1]], %[[VAL_2]] : index
+// CHECK: %[[ANDI_0:.*]] = arith.andi %[[CMPI_1]], %[[CMPI_2]] : i1
+// CHECK: scf.yield %[[ANDI_0]] : i1
+// CHECK: } else {
+// CHECK: %[[CMPI_3:.*]] = arith.cmpi sge, %[[ARG1]], %[[CONSTANT_0]] : index
+// CHECK: %[[CMPI_4:.*]] = arith.cmpi slt, %[[ARG1]], %[[VAL_2]] : index
+// CHECK: %[[ANDI_1:.*]] = arith.andi %[[CMPI_3]], %[[CMPI_4]] : i1
+// CHECK: scf.yield %[[ANDI_1]] : i1
+// CHECK: }
+// CHECK: cf.assert %[[IF_0]], "ERROR: Runtime op verification failed
+// CHECK: %[[CMPI_5:.*]] = arith.cmpi sgt, %[[CONSTANT_1]], %[[CONSTANT_0]] : index
+// CHECK: %[[IF_1:.*]] = scf.if %[[CMPI_5]] -> (i1) {
+// CHECK: %[[SUBI_0:.*]] = arith.subi %[[CONSTANT_1]], %[[CONSTANT_1]] : index
+// CHECK: %[[MULI_0:.*]] = arith.muli %[[SUBI_0]], %[[CONSTANT_1]] : index
+// CHECK: %[[ADDI_0:.*]] = arith.addi %[[ARG1]], %[[MULI_0]] : index
+// CHECK: %[[CMPI_6:.*]] = arith.cmpi sge, %[[ADDI_0]], %[[CONSTANT_0]] : index
+// CHECK: %[[CMPI_7:.*]] = arith.cmpi slt, %[[ADDI_0]], %[[VAL_2]] : index
+// CHECK: %[[ANDI_2:.*]] = arith.andi %[[CMPI_6]], %[[CMPI_7]] : i1
+// CHECK: scf.yield %[[ANDI_2]] : i1
+// CHECK: } else {
+// CHECK: %[[CONSTANT_2:.*]] = arith.constant true
+// CHECK: scf.yield %[[CONSTANT_2]] : i1
+// CHECK: }
+// CHECK: cf.assert %[[IF_1]], "ERROR: Runtime op verification failed
+func.func @subview(%memref: memref<1xf32>, %offset: index) {
+ memref.subview %memref[%offset] [1] [1] :
+ memref<1xf32> to
+ memref<1xf32, strided<[1], offset: ?>>
+ return
+}
>From 043b1ec42b9d4b206a9fb01680f61fa927b11d89 Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Tue, 23 Jun 2026 19:10:40 +0800
Subject: [PATCH 3/3] simplify test
---
.../Dialect/MemRef/runtime-verification.mlir | 37 ++-----------------
1 file changed, 4 insertions(+), 33 deletions(-)
diff --git a/mlir/test/Dialect/MemRef/runtime-verification.mlir b/mlir/test/Dialect/MemRef/runtime-verification.mlir
index 733c0cfb8f167..2198f0032aff5 100644
--- a/mlir/test/Dialect/MemRef/runtime-verification.mlir
+++ b/mlir/test/Dialect/MemRef/runtime-verification.mlir
@@ -16,39 +16,10 @@ func.func @expand_shape(%m: memref<?xf32>, %sz0: index) -> memref<?x5xf32> {
// -----
-// CHECK-LABEL: func.func @subview(
-// CHECK-SAME: %[[ARG0:.*]]: memref<1xf32>,
-// CHECK-SAME: %[[ARG1:.*]]: index) {
-// CHECK: %[[CONSTANT_0:.*]] = arith.constant 0 : index
-// CHECK: %[[CONSTANT_1:.*]] = arith.constant 1 : index
-// CHECK: %[[VAL_0:.*]], %[[VAL_1:.*]], %[[VAL_2:.*]], %[[EXTRACT_STRIDED_METADATA_0:.*]] = memref.extract_strided_metadata %[[ARG0]] : memref<1xf32> -> memref<f32>, index, index, index
-// CHECK: %[[CMPI_0:.*]] = arith.cmpi eq, %[[CONSTANT_1]], %[[CONSTANT_0]] : index
-// CHECK: %[[IF_0:.*]] = scf.if %[[CMPI_0]] -> (i1) {
-// CHECK: %[[CMPI_1:.*]] = arith.cmpi sge, %[[ARG1]], %[[CONSTANT_0]] : index
-// CHECK: %[[CMPI_2:.*]] = arith.cmpi sle, %[[ARG1]], %[[VAL_2]] : index
-// CHECK: %[[ANDI_0:.*]] = arith.andi %[[CMPI_1]], %[[CMPI_2]] : i1
-// CHECK: scf.yield %[[ANDI_0]] : i1
-// CHECK: } else {
-// CHECK: %[[CMPI_3:.*]] = arith.cmpi sge, %[[ARG1]], %[[CONSTANT_0]] : index
-// CHECK: %[[CMPI_4:.*]] = arith.cmpi slt, %[[ARG1]], %[[VAL_2]] : index
-// CHECK: %[[ANDI_1:.*]] = arith.andi %[[CMPI_3]], %[[CMPI_4]] : i1
-// CHECK: scf.yield %[[ANDI_1]] : i1
-// CHECK: }
-// CHECK: cf.assert %[[IF_0]], "ERROR: Runtime op verification failed
-// CHECK: %[[CMPI_5:.*]] = arith.cmpi sgt, %[[CONSTANT_1]], %[[CONSTANT_0]] : index
-// CHECK: %[[IF_1:.*]] = scf.if %[[CMPI_5]] -> (i1) {
-// CHECK: %[[SUBI_0:.*]] = arith.subi %[[CONSTANT_1]], %[[CONSTANT_1]] : index
-// CHECK: %[[MULI_0:.*]] = arith.muli %[[SUBI_0]], %[[CONSTANT_1]] : index
-// CHECK: %[[ADDI_0:.*]] = arith.addi %[[ARG1]], %[[MULI_0]] : index
-// CHECK: %[[CMPI_6:.*]] = arith.cmpi sge, %[[ADDI_0]], %[[CONSTANT_0]] : index
-// CHECK: %[[CMPI_7:.*]] = arith.cmpi slt, %[[ADDI_0]], %[[VAL_2]] : index
-// CHECK: %[[ANDI_2:.*]] = arith.andi %[[CMPI_6]], %[[CMPI_7]] : i1
-// CHECK: scf.yield %[[ANDI_2]] : i1
-// CHECK: } else {
-// CHECK: %[[CONSTANT_2:.*]] = arith.constant true
-// CHECK: scf.yield %[[CONSTANT_2]] : i1
-// CHECK: }
-// CHECK: cf.assert %[[IF_1]], "ERROR: Runtime op verification failed
+// Ensure the SCF dialect is loaded.
+
+// CHECK-LABEL: func @subview(
+// CHECK: scf.if
func.func @subview(%memref: memref<1xf32>, %offset: index) {
memref.subview %memref[%offset] [1] [1] :
memref<1xf32> to
More information about the Mlir-commits
mailing list