From 755611c0ba0baf60ce700d4c972ff87268ce46e8 Mon Sep 17 00:00:00 2001 From: Jasmine Tang Date: Tue, 15 Jul 2025 19:26:53 -0700 Subject: [PATCH 1/2] Precommit test for mlir tosa i1 true to i32 --- mlir/test/Dialect/Tosa/constant-op-fold.mlir | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mlir/test/Dialect/Tosa/constant-op-fold.mlir b/mlir/test/Dialect/Tosa/constant-op-fold.mlir index d9d188dd25061..a622d183e832c 100644 --- a/mlir/test/Dialect/Tosa/constant-op-fold.mlir +++ b/mlir/test/Dialect/Tosa/constant-op-fold.mlir @@ -594,6 +594,16 @@ func.func @cast_int_to_int_sign() -> tensor { return %cast : tensor } + +// CHECK: func.func @cast_i1_true_to_i32 +func.func @cast_i1_true_to_i32() -> tensor { + %splat = "tosa.const"() {values = dense : tensor} : () -> tensor + // CHECK: %[[SPLAT:.+]] = "tosa.const"() <{values = dense<-1> : tensor} + %cast = tosa.cast %splat : (tensor) -> tensor + // CHECK: return %[[SPLAT]] + return %cast : tensor +} + // ----- // CHECK-LABEL: @reverse_splat From 7e140acb0dee77436c19a0a35ce05a9924fe3d74 Mon Sep 17 00:00:00 2001 From: Jasmine Tang Date: Tue, 15 Jul 2025 19:27:15 -0700 Subject: [PATCH 2/2] Fix folding i1 true to i32 --- mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp | 3 ++- mlir/test/Dialect/Tosa/constant-op-fold.mlir | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp index 2dd45d27157cb..8f698e4b0dffb 100644 --- a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp +++ b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp @@ -1303,7 +1303,8 @@ OpFoldResult CastOp::fold(FoldAdaptor adaptor) { if (trunc) { intVal = intVal.trunc(bitwidth); - } else if (unsignIn) { + } else if (unsignIn || inETy.getIntOrFloatBitWidth() == 1) { + // Casting from i1 to iX will treat it as unsigned. intVal = intVal.zext(bitwidth); } else { intVal = intVal.sext(bitwidth); diff --git a/mlir/test/Dialect/Tosa/constant-op-fold.mlir b/mlir/test/Dialect/Tosa/constant-op-fold.mlir index a622d183e832c..e803105f719db 100644 --- a/mlir/test/Dialect/Tosa/constant-op-fold.mlir +++ b/mlir/test/Dialect/Tosa/constant-op-fold.mlir @@ -598,7 +598,7 @@ func.func @cast_int_to_int_sign() -> tensor { // CHECK: func.func @cast_i1_true_to_i32 func.func @cast_i1_true_to_i32() -> tensor { %splat = "tosa.const"() {values = dense : tensor} : () -> tensor - // CHECK: %[[SPLAT:.+]] = "tosa.const"() <{values = dense<-1> : tensor} + // CHECK: %[[SPLAT:.+]] = "tosa.const"() <{values = dense<1> : tensor} %cast = tosa.cast %splat : (tensor) -> tensor // CHECK: return %[[SPLAT]] return %cast : tensor