[Mlir-commits] [mlir] [mlir][tosa] Fix validation check on controlflow operators (PR #159754)
Luke Hutton
llvmlistbot at llvm.org
Fri Sep 19 03:50:11 PDT 2025
https://github.com/lhutton1 created https://github.com/llvm/llvm-project/pull/159754
Previoulsy the error_if check for controlflow operators would silently fail on valid controflow operators. This was due to incorrect return logic in the validation function. This commit fixes that logic.
>From cd5c3257f66ebe3f129aa4adc956c8e536befd6b Mon Sep 17 00:00:00 2001
From: Luke Hutton <luke.hutton at arm.com>
Date: Fri, 19 Sep 2025 10:43:41 +0000
Subject: [PATCH] [mlir][tosa] Fix validation check on controlflow operators
Previoulsy the error_if check for controlflow operators would
silently fail on valid controflow operators. This was due to
incorrect return logic in the validation function. This commit
fixes that logic.
Change-Id: I3c69c726028ff387202eef1d1f56b3c40ce80157
---
.../Dialect/Tosa/Transforms/TosaValidation.cpp | 8 ++++----
.../Tosa/tosa-validation-valid-strict.mlir | 15 +++++++++++++++
2 files changed, 19 insertions(+), 4 deletions(-)
create mode 100644 mlir/test/Dialect/Tosa/tosa-validation-valid-strict.mlir
diff --git a/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp b/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp
index 790bbf77877bc..e6091df367754 100644
--- a/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp
+++ b/mlir/lib/Dialect/Tosa/Transforms/TosaValidation.cpp
@@ -1257,8 +1257,8 @@ bool checkErrorIfCondIf(Operation *op) {
// tosa.yield %arg4
// }
- return failed(checkIsolatedRegion(op, ifOp.getThenGraph(), "then")) ||
- failed(checkIsolatedRegion(op, ifOp.getElseGraph(), "else"));
+ return succeeded(checkIsolatedRegion(op, ifOp.getThenGraph(), "then")) &&
+ succeeded(checkIsolatedRegion(op, ifOp.getElseGraph(), "else"));
}
bool checkErrorIfWhileLoop(Operation *op) {
@@ -1266,8 +1266,8 @@ bool checkErrorIfWhileLoop(Operation *op) {
if (!whileOp)
return true;
- return failed(checkIsolatedRegion(op, whileOp.getCondGraph(), "cond")) ||
- failed(checkIsolatedRegion(op, whileOp.getBodyGraph(), "body"));
+ return succeeded(checkIsolatedRegion(op, whileOp.getCondGraph(), "cond")) &&
+ succeeded(checkIsolatedRegion(op, whileOp.getBodyGraph(), "body"));
}
bool checkErrorIfScatter(Operation *op) {
diff --git a/mlir/test/Dialect/Tosa/tosa-validation-valid-strict.mlir b/mlir/test/Dialect/Tosa/tosa-validation-valid-strict.mlir
new file mode 100644
index 0000000000000..fe423104359ab
--- /dev/null
+++ b/mlir/test/Dialect/Tosa/tosa-validation-valid-strict.mlir
@@ -0,0 +1,15 @@
+// RUN: mlir-opt %s -split-input-file -verify-diagnostics --tosa-validate="profile=pro_int,pro_fp extension=int16,int4,bf16,fp8e4m3,fp8e5m2,fft,variable,controlflow,doubleround,inexactround strict-op-spec-alignment" | FileCheck %s
+
+// -----
+
+// CHECK-LABEL: test_cond_if
+func.func @test_cond_if(%arg0: tensor<i8>, %arg1: tensor<i8>, %arg2: tensor<i1>) -> tensor<i8> {
+ %0 = tosa.cond_if %arg2 (%arg3 = %arg0, %arg4 = %arg1) : tensor<i1> (tensor<i8>, tensor<i8>) -> tensor<i8> {
+ ^bb0(%arg3: tensor<i8>, %arg4: tensor<i8>):
+ tosa.yield %arg3 : tensor<i8>
+ } else {
+ ^bb0(%arg3: tensor<i8>, %arg4: tensor<i8>):
+ tosa.yield %arg4 : tensor<i8>
+ }
+ return %0 : tensor<i8>
+}
More information about the Mlir-commits
mailing list