[mlir][tosa] Check negative output size in resize shape inference (#143382)
This commit adds a check to ensure that the calculated output height and width, during shape inference, should be non-negative. An error is output if this is the case. Fixes: #142402
This commit is contained in:
@@ -2533,16 +2533,26 @@ LogicalResult tosa::ResizeOp::inferReturnTypeComponents(
|
||||
}
|
||||
|
||||
// Compute the output shape based on attributes: scale, offset, and border.
|
||||
outputShape[1] =
|
||||
const int64_t outputHeight =
|
||||
(((inputHeight - 1) * scaleInt[0] - offsetInt[0] + borderInt[0]) /
|
||||
scaleInt[1]) +
|
||||
1;
|
||||
|
||||
outputShape[2] =
|
||||
const int64_t outputWidth =
|
||||
(((inputWidth - 1) * scaleInt[2] - offsetInt[1] + borderInt[1]) /
|
||||
scaleInt[3]) +
|
||||
1;
|
||||
|
||||
if (outputHeight < 0 || outputWidth < 0) {
|
||||
return emitOptionalError(
|
||||
location,
|
||||
"calculated output height and width must be non-negative, "
|
||||
"got height = ",
|
||||
outputHeight, ", width = ", outputWidth);
|
||||
}
|
||||
|
||||
outputShape[1] = outputHeight;
|
||||
outputShape[2] = outputWidth;
|
||||
inferredReturnShapes.push_back(ShapedTypeComponents(outputShape));
|
||||
return success();
|
||||
}
|
||||
|
||||
@@ -1115,6 +1115,18 @@ func.func @resize_fp_power_of_two_upscale_offsetted(%arg0: tensor<1x50x48x1xf32>
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: @resize_negative_output_dim
|
||||
func.func @resize_negative_output_dim(%arg0: tensor<1x3x1x1xi8>) {
|
||||
%scale = tosa.const_shape { values = dense<[1, 3, 1, 1]> : tensor<4xindex> } : () -> !tosa.shape<4>
|
||||
%offset = tosa.const_shape { values = dense<[6, 1]> : tensor<2xindex> } : () -> !tosa.shape<2>
|
||||
%border = tosa.const_shape { values = dense<[-15, 0]> : tensor<2xindex> } : () -> !tosa.shape<2>
|
||||
// expected-error@+1 {{calculated output height and width must be non-negative, got height = -5, width = 0}}
|
||||
%0 = tosa.resize %arg0, %scale, %offset, %border {mode = "NEAREST_NEIGHBOR"} : (tensor<1x3x1x1xi8>, !tosa.shape<4>, !tosa.shape<2>, !tosa.shape<2>) -> tensor<*xi8>
|
||||
return
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
// CHECK-LABEL: @if_test_simple
|
||||
func.func @if_test_simple(%arg0 : tensor<f32>, %arg1 : tensor<f32>, %arg2 : tensor<i1>) -> () {
|
||||
%a = tosa.log %arg0 : (tensor<f32>) -> tensor<f32>
|
||||
|
||||
Reference in New Issue
Block a user