[Mlir-commits] [mlir] Reland: [mlir][tosa] Improve level check error messages (PR #178248)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Jan 27 08:23:16 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.99 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/178248.diff
2 Files Affected:
- (modified) mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp (+53-45)
- (modified) mlir/test/Dialect/Tosa/level_check.mlir (+61-61)
``````````diff
diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp
index d4241d1428956..97572fdd13953 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 {
@@ -189,33 +190,40 @@ struct TosaValidation : public tosa::impl::TosaValidationBase<TosaValidation> {
constCheckers.emplace_back(checkConstantOperandSilceShape);
}
- 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.
@@ -317,17 +325,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();
}
}
@@ -341,17 +349,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();
}
}
@@ -363,27 +371,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();
}
}
@@ -445,8 +453,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();
}
}
@@ -463,18 +471,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();
}
}
@@ -494,10 +502,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();
}
}
@@ -524,11 +532,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 fe02864c8b28f..216f05a484927 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: te...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/178248
More information about the Mlir-commits
mailing list