nir: fix nir_alu_type_range_contains_type_range for fp16 to int

The special value "Inf" doesn't fit into an int and therefore we have to
clamp regardless of whether all the other values would fit. And because
f2u32 and f2u64 define out-of-range conversions as UB in nir, we need to
clamp.

This change should have no effect for non saturating conversions.

Fixes "conversions long_sat_*half" CL CTS tests

Cc: mesa-stable
Suggested-by: Rob Clark <rob.clark@oss.qualcomm.com>
Reviewed-by: Rob Clark <rob.clark@oss.qualcomm.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40163>
This commit is contained in:
Karol Herbst 2026-03-02 01:40:42 +01:00 committed by Marge Bot
parent 56f5e35d95
commit 8e8fb2ebaa

View file

@ -210,11 +210,6 @@ nir_alu_type_range_contains_type_range(nir_alu_type a, nir_alu_type b)
a_bit_size > b_bit_size)
return true;
/* 16-bit floats fit in 32-bit integers */
if (a_base_type == nir_type_int && a_bit_size >= 32 &&
b == nir_type_float16)
return true;
/* All signed or unsigned ints can fit in float or above. A uint8 can fit
* in a float16.
*/