nir: Restrict ufind_msb and ufind_msb_rev to 32- or 64-bit sources
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 12 Oct 2022 21:52:19 +0000 (14:52 -0700)
committerMarge Bot <emma+marge@anholt.net>
Fri, 10 Mar 2023 15:27:17 +0000 (15:27 +0000)
commitdb6d1edc1b614540d0c558571d5b0b09f7d8adef
tree84facb5042c1d2cc6c1721085e92b376a52b5c5c
parent2d6f48f6efd0cf9b9900d030aa1b571a2e22a4e1
nir: Restrict ufind_msb and ufind_msb_rev to 32- or 64-bit sources

4d802df3aac353970aae93699223fb15b24f8408 loosened the type restrictions
on these opcodes to enable support for 64-bit ballot operations.  In
doing so, it enabled 8-bit and 16-bit sizes as well.

It's impossible to get these sizes through GLSL or SPIR-V.  None of the
lowering in nir_opt_algebraic can handle non-32-bit sizes.  Almost no
drivers can handle non-32-bit sizes.

It doesn't seem possible to enforce anything other than "one bit size"
or "all bit sizes" in nir_opcodes.py.  The only way it seems possible to
enforce this is in nir_validate.  This is not ideal, but it be what it
be.

v2: Remove restriction on find_lsb. It is acutally possible to get this
via GLSL by doing findLSB() on a lowp value. findMSB declares its
parameter as highp, so that path is still impossible.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19042>
src/compiler/nir/nir_validate.c