[MLIR] `tosa.rescale` op validation incorrectly fails on unsigned integer type

Hi,
I’m running into an issue where the validation for the tosa.rescale op fails incorrectly for unsigned integer types:

module {
  func.func @main(%arg0: tensor<1x1xi8>) -> (tensor<1x1xui8>) {
    %0 = "tosa.const"() <{values = dense<1> : tensor<1xi8>}> : () -> tensor<1xi8>
    %1 = "tosa.const"() <{values = dense<2> : tensor<1xi32>}> : () -> tensor<1xi32>
    %2 = "tosa.const"() <{values = dense<3> : tensor<1xi8>}> : () -> tensor<1xi8>
    %3 = "tosa.const"() <{values = dense<-128> : tensor<1xi8>}> : () -> tensor<1xi8>
    %r = tosa.rescale %arg0, %1, %0, %3, %2 {input_unsigned = false, output_unsigned = true, per_channel = false, rounding_mode = "SINGLE_ROUND", scale32 = true} : (tensor<1x1xi8>, tensor<1xi32>, tensor<1xi8>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x1xui8>
    return %r : tensor<1x1xui8>
  }
}

Output:

$ mlir-opt -tosa-validate <input>
<source>:7:10: error: 'tosa.rescale' op is not profile-aligned: element type 'ui8' is not legal
    %r = tosa.rescale %arg0, %1, %0, %3, %2 {input_unsigned = false, output_unsigned = true, per_channel = false, rounding_mode = "SINGLE_ROUND", scale32 = true} : (tensor<1x1xi8>, tensor<1xi32>, tensor<1xi8>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x1xui8>
         ^
<source>:7:10: note: see current operation: %4 = "tosa.rescale"(%arg0, %1, %0, %3, %2) <{input_unsigned = false, output_unsigned = true, per_channel = false, rounding_mode = "SINGLE_ROUND", scale32 = true}> : (tensor<1x1xi8>, tensor<1xi32>, tensor<1xi8>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x1xui8>

According to the TOSA Spec (here), unsigned 8 and 16-bit types are allowed in the RESCALE operation. The TOSA dialect docs specify the same as well (here).

godbolt link: Compiler Explorer

Link to the corresponding llvm-project issue: https://github.com/llvm/llvm-project/issues/135699