r300: add some early safe bool lowering
authorPavel Ondračka <pavel.ondracka@gmail.com>
Thu, 15 Jun 2023 07:27:59 +0000 (09:27 +0200)
committerMarge Bot <emma+marge@anholt.net>
Wed, 5 Jul 2023 18:34:37 +0000 (18:34 +0000)
commit41f1dd89a35a3396f562e7a07d8234439f87a6aa
treefa6ad68208086b33c32556afb1763deb3f86ee01
parent0bf6dcb785ce82006f9757217153735e39127834
r300: add some early safe bool lowering

This lowers some of the bool-producing comparisons and following bcsels
if the bool comparison results is only used in the bcsel.
This is a temporary solution before we can fork ntt and optimize
the pass sequence there. Right now if we have something like
bcsel(a,b,0.0) we lower it to flrp in nir_lower_bool_to_float. The
flrp goes to backend where it will be lowered to 2 MADs. However in this
case with one of the arguments being a constant one MAD is enough. The
backend can figure this out in the constant folding pass, however this
is actually one of the last things we need it for. So if we do early
translation of the bcsels, than the algebraic pass can clean it up and
we can remove more backend code in the next patch.

no significant change with RV370 shader-db:
total instructions in shared programs: 82497 -> 82496 (<.01%)
instructions in affected programs: 1029 -> 1028 (-0.10%)
helped: 4
HURT: 3
total temps in shared programs: 12351 -> 12355 (0.03%)
temps in affected programs: 10 -> 14 (40.00%)
helped: 0
HURT: 4

Reviewed-by: Filip Gawin <filip.gawin@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23927>
src/gallium/drivers/r300/compiler/r300_nir.c
src/gallium/drivers/r300/compiler/r300_nir.h
src/gallium/drivers/r300/compiler/r300_nir_algebraic.py