[Mlir-commits] [mlir] [mlir][tosa] Improve level check error messages (PR #174980)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Jan 8 05:50:48 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-tosa

Author: Luke Hutton (lhutton1)

<details>
<summary>Changes</summary>

This commit adds expected and actual values to the level check error messages, making it easier for a user to diagnose issues.

---

Patch is 55.34 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/174980.diff


2 Files Affected:

- (modified) mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp (+53-45) 
- (modified) mlir/test/Dialect/Tosa/level_check.mlir (+60-60) 


``````````diff
diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp
index e0943059e80ab..48e5beb65e98d 100644
--- a/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp
+++ b/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp
@@ -27,6 +27,7 @@
 #include "mlir/Pass/Pass.h"
 #include "mlir/Transforms/DialectConversion.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/Support/FormatVariadic.h"
 
 namespace mlir {
 namespace tosa {
@@ -179,33 +180,40 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
     constCheckers.emplace_back(checkConstantOperandNegate);
   }
 
-  LogicalResult levelCheckKernel(Operation *op, int32_t v,
-                                 const StringRef checkDesc) {
-    if (v > targetEnv.getLevel().MAX_KERNEL)
-      return op->emitOpError() << "failed level check: " << checkDesc;
+  LogicalResult levelCheck(Operation *op, const int32_t calculatedValue,
+                           const int32_t maxLevel, const StringRef inputName,
+                           const StringRef levelName) {
+    if (calculatedValue > maxLevel)
+      return op->emitOpError()
+             << "failed level check: " << inputName << " <= " << levelName
+             << " (" << maxLevel << "), got " << calculatedValue;
     return success();
   }
 
+  LogicalResult levelCheckKernel(Operation *op, int32_t v,
+                                 const StringRef inputName) {
+    return levelCheck(op, v, targetEnv.getLevel().MAX_KERNEL, inputName,
+                      "MAX_KERNEL");
+  }
+
   LogicalResult levelCheckStride(Operation *op, int32_t v,
-                                 const StringRef checkDesc) {
-    if (v > targetEnv.getLevel().MAX_STRIDE)
-      return op->emitOpError() << "failed level check: " << checkDesc;
-    return success();
+                                 const StringRef inputName) {
+    return levelCheck(op, v, targetEnv.getLevel().MAX_STRIDE, inputName,
+                      "MAX_STRIDE");
   }
 
   LogicalResult levelCheckScale(Operation *op, int32_t v,
-                                const StringRef checkDesc) {
-    if (v > targetEnv.getLevel().MAX_SCALE)
-      return op->emitOpError() << "failed level check: " << checkDesc;
-    return success();
+                                const StringRef inputName) {
+    return levelCheck(op, v, targetEnv.getLevel().MAX_SCALE, inputName,
+                      "MAX_SCALE");
   }
 
   LogicalResult levelCheckListSize(Operation *op, int32_t v,
-                                   const StringRef checkDesc) {
-    if (v > targetEnv.getLevel().MAX_TENSOR_LIST_SIZE)
-      return op->emitOpError()
-             << "failed level check for MAX_TENSOR_LIST_SIZE: " << checkDesc;
-    return success();
+                                   const StringRef inputName) {
+    const std::string inputDesc =
+        llvm::formatv("length(tensor_list_shape({0}))", inputName);
+    return levelCheck(op, v, targetEnv.getLevel().MAX_TENSOR_LIST_SIZE,
+                      inputDesc, "MAX_TENSOR_LIST_SIZE");
   }
 
   // Perform the Level Rank check on the tensor type.
@@ -286,17 +294,17 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
   LogicalResult levelCheckPool(Operation *op) {
     if (auto poolOp = dyn_cast<T>(op)) {
       for (auto k : poolOp.getKernel()) {
-        if (failed(levelCheckKernel(op, k, "kernel <= MAX_KERNEL"))) {
+        if (failed(levelCheckKernel(op, k, "kernel"))) {
           return failure();
         }
       }
       for (auto s : poolOp.getStride()) {
-        if (failed(levelCheckStride(op, s, "stride <= MAX_STRIDE"))) {
+        if (failed(levelCheckStride(op, s, "stride"))) {
           return failure();
         }
       }
       for (auto p : poolOp.getPad()) {
-        if (failed(levelCheckKernel(op, p, "pad <= MAX_KERNEL"))) {
+        if (failed(levelCheckKernel(op, p, "pad"))) {
           return failure();
         }
       }
@@ -310,17 +318,17 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
     if (auto convOp = dyn_cast<T>(op)) {
 
       for (auto k : convOp.getDilation()) {
-        if (failed(levelCheckKernel(op, k, "dilation <= MAX_KERNEL"))) {
+        if (failed(levelCheckKernel(op, k, "dilation"))) {
           return failure();
         }
       }
       for (auto p : convOp.getPad()) {
-        if (failed(levelCheckKernel(op, p, "pad <= MAX_KERNEL"))) {
+        if (failed(levelCheckKernel(op, p, "pad"))) {
           return failure();
         }
       }
       for (auto s : convOp.getStride()) {
-        if (failed(levelCheckStride(op, s, "stride <= MAX_STRIDE"))) {
+        if (failed(levelCheckStride(op, s, "stride"))) {
           return failure();
         }
       }
@@ -332,27 +340,27 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
           assert(shape.size() == 4);
           assert(dilation.size() == 2);
           if (failed(levelCheckKernel(op, dilation[0] * shape[1],
-                                      "dilation_y * KH <= MAX_KERNEL)")) ||
+                                      "dilation_y * KH")) ||
               failed(levelCheckKernel(op, dilation[1] * shape[2],
-                                      "dilation_x * KW <= MAX_KERNEL)")))
+                                      "dilation_x * KW")))
             return failure();
         } else if (isa<tosa::Conv3DOp>(op)) {
           assert(shape.size() == 5);
           assert(dilation.size() == 3);
           if (failed(levelCheckKernel(op, dilation[0] * shape[1],
-                                      "dilation_d * KD <= MAX_KERNEL)")) ||
+                                      "dilation_d * KD")) ||
               failed(levelCheckKernel(op, dilation[1] * shape[2],
-                                      "dilation_y * KH <= MAX_KERNEL)")) ||
+                                      "dilation_y * KH")) ||
               failed(levelCheckKernel(op, dilation[2] * shape[3],
-                                      "dilation_x * KW <= MAX_KERNEL)")))
+                                      "dilation_x * KW")))
             return failure();
         } else if (isa<tosa::DepthwiseConv2DOp>(op)) {
           assert(shape.size() == 4);
           assert(dilation.size() == 2);
           if (failed(levelCheckKernel(op, dilation[0] * shape[0],
-                                      "dilation_y * KH <= MAX_KERNEL)")) ||
+                                      "dilation_y * KH")) ||
               failed(levelCheckKernel(op, dilation[1] * shape[1],
-                                      "dilation_x * KW <= MAX_KERNEL)")))
+                                      "dilation_x * KW")))
             return failure();
         }
       }
@@ -368,8 +376,8 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
         if (ShapedType type = dyn_cast<ShapedType>(v.getType())) {
           auto shape = type.getShape();
           assert(shape.size() == 3);
-          if (failed(levelCheckKernel(op, shape[1], "H <= MAX_KERNEL")) ||
-              failed(levelCheckKernel(op, shape[2], "W <= MAX_KERNEL"))) {
+          if (failed(levelCheckKernel(op, shape[1], "H")) ||
+              failed(levelCheckKernel(op, shape[2], "W"))) {
             return failure();
           }
         }
@@ -386,18 +394,18 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
         auto shape = filterType.getShape();
         assert(shape.size() == 4);
         // level check kernel sizes for kH and KW
-        if (failed(levelCheckKernel(op, shape[1], "KH <= MAX_KERNEL")) ||
-            failed(levelCheckKernel(op, shape[2], "KW <= MAX_KERNEL"))) {
+        if (failed(levelCheckKernel(op, shape[1], "KH")) ||
+            failed(levelCheckKernel(op, shape[2], "KW"))) {
           return failure();
         }
       }
       for (auto p : transpose.getOutPad()) {
-        if (failed(levelCheckKernel(op, p, "pad <= MAX_KERNEL"))) {
+        if (failed(levelCheckKernel(op, p, "pad"))) {
           return failure();
         }
       }
       for (auto s : transpose.getStride()) {
-        if (failed(levelCheckStride(op, s, "stride <= MAX_STRIDE"))) {
+        if (failed(levelCheckStride(op, s, "stride"))) {
           return failure();
         }
       }
@@ -417,10 +425,10 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
       const int64_t scaleYD = scale[1];
       const int64_t scaleXN = scale[2];
       const int64_t scaleXD = scale[3];
-      if (failed(levelCheckScale(op, scaleYN / scaleYD,
-                                 "scale_y_n/scale_y_d <= MAX_SCALE")) ||
-          failed(levelCheckScale(op, scaleXN / scaleXD,
-                                 "scale_x_n/scale_x_d <= MAX_SCALE"))) {
+      if (failed(
+              levelCheckScale(op, scaleYN / scaleYD, "scale_y_n/scale_y_d")) ||
+          failed(
+              levelCheckScale(op, scaleXN / scaleXD, "scale_x_n/scale_x_d"))) {
         return failure();
       }
     }
@@ -447,11 +455,11 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
     int32_t maxNestedDepth = 0;
     getMaxNestedDepth(op, maxNestedDepth);
 
-    if (maxNestedDepth >= targetEnv.getLevel().MAX_NESTING) {
-      op->emitOpError() << "failed level check: " << maxNestedDepth
-                        << " >= MAX_NESTING";
-      return failure();
-    }
+    const int32_t maxNestingLevel = targetEnv.getLevel().MAX_NESTING;
+    if (maxNestedDepth >= maxNestingLevel)
+      return op->emitOpError()
+             << "failed level check: tosa_nesting_depth < MAX_NESTING" << " ("
+             << maxNestingLevel << "), got " << maxNestedDepth;
     return success();
   }
 
diff --git a/mlir/test/Dialect/Tosa/level_check.mlir b/mlir/test/Dialect/Tosa/level_check.mlir
index da21c18e19783..942b591bcfc95 100644
--- a/mlir/test/Dialect/Tosa/level_check.mlir
+++ b/mlir/test/Dialect/Tosa/level_check.mlir
@@ -521,7 +521,7 @@ func.func @test_identity_rank_valid(%arg0: tensor<i32>) -> tensor<i32> {
 // -----
 
 func.func @test_avgpool2d_kernel_y(%arg0: tensor<1x8194x32x8xf32>, %arg1: tensor<1xf32>, %arg2: tensor<1xf32>) -> tensor<1x2x32x8xf32> {
-  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: kernel <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: kernel <= MAX_KERNEL (8192), got 8193}}
   %0 = "tosa.avg_pool2d"(%arg0, %arg1, %arg2) {kernel = array<i64: 8193, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>, acc_type = f32} :
          (tensor<1x8194x32x8xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x2x32x8xf32>
   return %0 : tensor<1x2x32x8xf32>
@@ -530,7 +530,7 @@ func.func @test_avgpool2d_kernel_y(%arg0: tensor<1x8194x32x8xf32>, %arg1: tensor
 // -----
 
 func.func @test_avgpool2d_kernel_x(%arg0: tensor<1x32x8194x8xf32>, %arg1: tensor<1xf32>, %arg2: tensor<1xf32>) -> tensor<1x32x2x8xf32> {
-  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: kernel <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: kernel <= MAX_KERNEL (8192), got 8193}}
   %0 = "tosa.avg_pool2d"(%arg0, %arg1, %arg2) {kernel = array<i64: 1, 8193>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 1>, acc_type = f32} :
          (tensor<1x32x8194x8xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x32x2x8xf32>
   return %0 : tensor<1x32x2x8xf32>
@@ -539,7 +539,7 @@ func.func @test_avgpool2d_kernel_x(%arg0: tensor<1x32x8194x8xf32>, %arg1: tensor
 // -----
 
 func.func @test_avgpool2d_stride_y(%arg0: tensor<1x8194x32x8xf32>, %arg1: tensor<1xf32>, %arg2: tensor<1xf32>) -> tensor<1x2x32x8xf32> {
-  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: stride <= MAX_STRIDE}}
+  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: stride <= MAX_STRIDE (8192), got 8193}}
   %0 = "tosa.avg_pool2d"(%arg0, %arg1, %arg2) {kernel = array<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 8193, 1>, acc_type = f32} :
          (tensor<1x8194x32x8xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x2x32x8xf32>
   return %0 : tensor<1x2x32x8xf32>
@@ -548,7 +548,7 @@ func.func @test_avgpool2d_stride_y(%arg0: tensor<1x8194x32x8xf32>, %arg1: tensor
 // -----
 
 func.func @test_avgpool2d_stride_x(%arg0: tensor<1x32x8194x8xf32>, %arg1: tensor<1xf32>, %arg2: tensor<1xf32>) -> tensor<1x32x2x8xf32> {
-  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: stride <= MAX_STRIDE}}
+  // expected-error at +1 {{'tosa.avg_pool2d' op failed level check: stride <= MAX_STRIDE (8192), got 8193}}
   %0 = "tosa.avg_pool2d"(%arg0, %arg1, %arg2) {kernel = array<i64: 1, 1>, pad = array<i64: 0, 0, 0, 0>, stride = array<i64: 1, 8193>, acc_type = f32} :
          (tensor<1x32x8194x8xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x32x2x8xf32>
   return %0 : tensor<1x32x2x8xf32>
@@ -557,7 +557,7 @@ func.func @test_avgpool2d_stride_x(%arg0: tensor<1x32x8194x8xf32>, %arg1: tensor
 // -----
 
 func.func @test_conv2d_dilation_y(%arg0: tensor<1x8192x8192x1xf32>, %arg1: tensor<16x1025x1024x1xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x1x7170x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: dilation_y * KH <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: dilation_y * KH <= MAX_KERNEL (8192), got 8200}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 8, 1>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 1, 1>} :
             (tensor<1x8192x8192x1xf32>, tensor<16x1025x1024x1xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x1x7170x16xf32>
   return %0 : tensor<1x1x7170x16xf32>
@@ -566,7 +566,7 @@ func.func @test_conv2d_dilation_y(%arg0: tensor<1x8192x8192x1xf32>, %arg1: tenso
 // -----
 
 func.func @test_conv2d_dilation_x(%arg0: tensor<1x8192x8192x1xf32>, %arg1: tensor<16x1024x1025x1xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x7170x1x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: dilation_x * KW <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: dilation_x * KW <= MAX_KERNEL (8192), got 8200}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 1, 8>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 1, 1>} :
             (tensor<1x8192x8192x1xf32>, tensor<16x1024x1025x1xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x7170x1x16xf32>
   return %0 : tensor<1x7170x1x16xf32>
@@ -575,7 +575,7 @@ func.func @test_conv2d_dilation_x(%arg0: tensor<1x8192x8192x1xf32>, %arg1: tenso
 // -----
 
 func.func @test_conv2d_pad_top(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x2x2x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x8225x32x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL (8192), got 8193}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 1, 1>, pad = array<i64: 8193, 1, 0, 1>, stride = array<i64: 1, 1>} :
             (tensor<1x32x32x8xf32>, tensor<16x2x2x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x8225x32x16xf32>
   return %0 : tensor<1x8225x32x16xf32>
@@ -584,7 +584,7 @@ func.func @test_conv2d_pad_top(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x2x
 // -----
 
 func.func @test_conv2d_pad_bottom(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x2x2x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x8224x32x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL (8192), got 8193}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 1, 1>, pad = array<i64: 0, 8193, 0, 1>, stride = array<i64: 1, 1>} :
             (tensor<1x32x32x8xf32>, tensor<16x2x2x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x8224x32x16xf32>
   return %0 : tensor<1x8224x32x16xf32>
@@ -593,7 +593,7 @@ func.func @test_conv2d_pad_bottom(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16
 // -----
 
 func.func @test_conv2d_pad_left(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x2x2x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x32x8225x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL (8192), got 8193}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 1, 1>, pad = array<i64: 0, 1, 8193, 1>, stride = array<i64: 1, 1>} :
             (tensor<1x32x32x8xf32>, tensor<16x2x2x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x32x8225x16xf32>
   return %0 : tensor<1x32x8225x16xf32>
@@ -602,7 +602,7 @@ func.func @test_conv2d_pad_left(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x2
 // -----
 
 func.func @test_conv2d_pad_right(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x2x2x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x32x8224x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: pad <= MAX_KERNEL (8192), got 8193}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 1, 1>, pad = array<i64: 0, 1, 0, 8193>, stride = array<i64: 1, 1>} :
             (tensor<1x32x32x8xf32>, tensor<16x2x2x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x32x8224x16xf32>
   return %0 : tensor<1x32x8224x16xf32>
@@ -611,7 +611,7 @@ func.func @test_conv2d_pad_right(%arg0: tensor<1x32x32x8xf32>, %arg1: tensor<16x
 // -----
 
 func.func @test_conv2d_stride_y(%arg0: tensor<1x8194x33x8xf32>, %arg1: tensor<16x2x2x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x2x33x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: stride <= MAX_STRIDE}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: stride <= MAX_STRIDE (8192), got 8193}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 1, 1>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 8193, 1>} :
             (tensor<1x8194x33x8xf32>, tensor<16x2x2x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x2x33x16xf32>
   return %0 : tensor<1x2x33x16xf32>
@@ -620,7 +620,7 @@ func.func @test_conv2d_stride_y(%arg0: tensor<1x8194x33x8xf32>, %arg1: tensor<16
 // -----
 
 func.func @test_conv2d_stride_x(%arg0: tensor<1x33x8194x8xf32>, %arg1: tensor<16x2x2x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>) -> tensor<1x33x2x16xf32> {
-  // expected-error at +1 {{'tosa.conv2d' op failed level check: stride <= MAX_STRIDE}}
+  // expected-error at +1 {{'tosa.conv2d' op failed level check: stride <= MAX_STRIDE (8192), got 8193}}
   %0 = tosa.conv2d %arg0, %arg1, %arg2, %arg3, %arg3 {acc_type = f32, dilation = array<i64: 1, 1>, pad = array<i64: 0, 1, 0, 1>, stride = array<i64: 1, 8193>} :
             (tensor<1x33x8194x8xf32>, tensor<16x2x2x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x33x2x16xf32>
   return %0 : tensor<1x33x2x16xf32>
@@ -629,7 +629,7 @@ func.func @test_conv2d_stride_x(%arg0: tensor<1x33x8194x8xf32>, %arg1: tensor<16
 // -----
 
 func.func @test_conv3d_dilation_d(%arg0: tensor<1x8192x1x1x8xf32>, %arg1: tensor<16x1025x1x1x8xf32>, %arg2: tensor<16xf32>, %arg3: tensor<1xf32>, %arg4: tensor<1xf32>) -> tensor<1x1x2x2x16xf32> {
-  // expected-error at +1 {{'tosa.conv3d' op failed level check: dilation_d * KD <= MAX_KERNEL}}
+  // expected-error at +1 {{'tosa.conv3d' op failed level check: dilation_d * KD <= MAX_KERNEL (8192), got 8200}}
   %0 = tosa.conv3d %arg0, %arg1, %arg2, %arg3, %arg4 {acc_type = f32, dilation = array<i64: 8, 1, 1>, pad = array<i64: 0, 1, 0, 1, 0, 1>, stride = array<i64: 1, 1, 1>} :
             (tensor<1x8192x1x1x8xf32>, tensor<16x1025x1x1x8xf32>, tensor<16xf32>, tensor<1xf32>, tensor<1xf32>) -> tensor<1x1x2x2x16xf32>
   return %0 : tensor<1x1x2x2x16xf32>
@@ -638,7 +638,7 @@ func.func @test_conv3d_dilation_d(%arg0: tensor<1x8192x1x1x8xf32>, %arg1: tensor
 // -----
 
 func.func @test_conv3d_dilation_y(%arg0: tensor<1x1x8192x1x8xf32>, %arg1: tensor...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/174980


More information about the Mlir-commits mailing list