[Mlir-commits] [mlir] ca21499 - [mlir][tosa] Fix floating point offset for tosa.resize
Rob Suderman
llvmlistbot at llvm.org
Wed Jan 4 12:56:41 PST 2023
Author: Robert Walker
Date: 2023-01-04T12:53:54-08:00
New Revision: ca214995266267271153482fceb09c32abfb3707
URL: https://github.com/llvm/llvm-project/commit/ca214995266267271153482fceb09c32abfb3707
DIFF: https://github.com/llvm/llvm-project/commit/ca214995266267271153482fceb09c32abfb3707.diff
LOG: [mlir][tosa] Fix floating point offset for tosa.resize
Offset is a signed value, so use `arith.sitofp`
See also https://github.com/llvm/llvm-project/issues/59585
Reviewed By: NatashaKnk, jpienaar
Differential Revision: https://reviews.llvm.org/D140958
Added:
Modified:
mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp
mlir/test/Conversion/TosaToLinalg/tosa-to-linalg-resize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp
index 199d81da2c631..5f982e9a04da8 100644
--- a/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp
+++ b/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp
@@ -1614,7 +1614,7 @@ class GenericResizeConverter : public OpRewritePattern<tosa::ResizeOp> {
Value val = b.create<arith::UIToFPOp>(b.getF32Type(), in);
scaleN = b.create<arith::UIToFPOp>(b.getF32Type(), scaleN);
scaleD = b.create<arith::UIToFPOp>(b.getF32Type(), scaleD);
- offset = b.create<arith::UIToFPOp>(b.getF32Type(), offset);
+ offset = b.create<arith::SIToFPOp>(b.getF32Type(), offset);
val = b.create<arith::MulFOp>(val, scaleD);
val = b.create<arith::AddFOp>(val, offset);
val = b.create<arith::DivFOp>(val, scaleN);
diff --git a/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg-resize.mlir b/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg-resize.mlir
index 9a6067f8e5c30..cac74d0b85a89 100644
--- a/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg-resize.mlir
+++ b/mlir/test/Conversion/TosaToLinalg/tosa-to-linalg-resize.mlir
@@ -310,7 +310,7 @@ func.func @resize_nearest_fp(%input: tensor<1x50x48x1xf32>) -> () {
// CHECK: %[[Y0:.+]] = arith.uitofp %[[Y]]
// CHECK: %[[SCALE_Y_N:.*]] = arith.uitofp %[[ISCALE_Y_N]]
// CHECK: %[[SCALE_Y_D:.*]] = arith.uitofp %[[ISCALE_Y_D]]
- // CHECK: %[[OFFSET_Y:.*]] = arith.uitofp %[[IOFFSET_Y]]
+ // CHECK: %[[OFFSET_Y:.*]] = arith.sitofp %[[IOFFSET_Y]]
// CHECK: %[[VAL_29:.*]] = arith.mulf %[[Y0]], %[[SCALE_Y_D]]
// CHECK: %[[VAL_31:.*]] = arith.addf %[[VAL_29]], %[[OFFSET_Y]]
// CHECK: %[[VAL_33:.*]] = arith.divf %[[VAL_31]], %[[SCALE_Y_N]]
@@ -321,7 +321,7 @@ func.func @resize_nearest_fp(%input: tensor<1x50x48x1xf32>) -> () {
// CHECK: %[[X0:.+]] = arith.uitofp %[[X]]
// CHECK: %[[SCALE_X_N:.*]] = arith.uitofp %[[ISCALE_X_N]]
// CHECK: %[[SCALE_X_D:.*]] = arith.uitofp %[[ISCALE_X_D]]
- // CHECK: %[[OFFSET_X:.*]] = arith.uitofp %[[IOFFSET_X]]
+ // CHECK: %[[OFFSET_X:.*]] = arith.sitofp %[[IOFFSET_X]]
// CHECK: %[[VAL_30:.*]] = arith.mulf %[[X0]], %[[SCALE_X_D]]
// CHECK: %[[VAL_32:.*]] = arith.addf %[[VAL_30]], %[[OFFSET_X]]
// CHECK: %[[VAL_34:.*]] = arith.divf %[[VAL_32]], %[[SCALE_X_N]]
@@ -384,7 +384,7 @@ func.func @resize_bilinear_fp(%input: tensor<1x23x24x1xf32>) -> () {
// CHECK: %[[Y0:.+]] = arith.uitofp %[[Y]]
// CHECK: %[[SCALE_Y_N:.*]] = arith.uitofp %[[ISCALE_Y_N]]
// CHECK: %[[SCALE_Y_D:.*]] = arith.uitofp %[[ISCALE_Y_D]]
- // CHECK: %[[OFFSET_Y:.*]] = arith.uitofp %[[IOFFSET_Y]]
+ // CHECK: %[[OFFSET_Y:.*]] = arith.sitofp %[[IOFFSET_Y]]
// CHECK: %[[VAL_29:.*]] = arith.mulf %[[Y0]], %[[SCALE_Y_D]]
// CHECK: %[[VAL_31:.*]] = arith.addf %[[VAL_29]], %[[OFFSET_Y]]
// CHECK: %[[VAL_33:.*]] = arith.divf %[[VAL_31]], %[[SCALE_Y_N]]
@@ -395,7 +395,7 @@ func.func @resize_bilinear_fp(%input: tensor<1x23x24x1xf32>) -> () {
// CHECK: %[[X0:.+]] = arith.uitofp %[[X]]
// CHECK: %[[SCALE_X_N:.*]] = arith.uitofp %[[ISCALE_X_N]]
// CHECK: %[[SCALE_X_D:.*]] = arith.uitofp %[[ISCALE_X_D]]
- // CHECK: %[[OFFSET_X:.*]] = arith.uitofp %[[IOFFSET_X]]
+ // CHECK: %[[OFFSET_X:.*]] = arith.sitofp %[[IOFFSET_X]]
// CHECK: %[[VAL_30:.*]] = arith.mulf %[[X0]], %[[SCALE_X_D]]
// CHECK: %[[VAL_32:.*]] = arith.addf %[[VAL_30]], %[[OFFSET_X]]
// CHECK: %[[VAL_34:.*]] = arith.divf %[[VAL_32]], %[[SCALE_X_N]]
More information about the Mlir-commits
mailing list