nir: Fix validation error after nir_round_int_to_float()

CL CTS test_conversions hits a nir_validate assert than ufind_msb is 32b
or 64b:

    16     %61 = @load_global (%185) (access=none, align_mul=2, align_offset=0)
    32    %240 = ufind_msb %61 error: src_bit_size == 32 || src_bit_size == 64 (../src/compiler/nir/nir_validate.c:273)

Signed-off-by: Rob Clark <rob.clark@oss.qualcomm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40054>
This commit is contained in:
Rob Clark 2026-02-23 11:53:53 -08:00 committed by Marge Bot
parent 85394f39e5
commit ff8b688fc7

View file

@ -163,7 +163,10 @@ nir_round_int_to_float(nir_builder *b, nir_def *src,
UNREACHABLE("unexpected rounding mode");
} else {
nir_def *mantissa_bit_size = nir_imm_int(b, mantissa_bits);
nir_def *msb = nir_imax(b, nir_ufind_msb(b, src), mantissa_bit_size);
nir_def *ufind_msb_src = src;
if (src->bit_size < 32)
ufind_msb_src = nir_u2u32(b, src);
nir_def *msb = nir_imax(b, nir_ufind_msb(b, ufind_msb_src), mantissa_bit_size);
nir_def *bits_to_lose = nir_isub(b, msb, mantissa_bit_size);
nir_def *one = nir_imm_intN_t(b, 1, src->bit_size);
nir_def *adjust = nir_ishl(b, one, bits_to_lose);