nir: do not use De Morgan's Law rules for flt and fge
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 4 Feb 2020 16:25:35 +0000 (17:25 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 11 Feb 2020 07:36:00 +0000 (08:36 +0100)
commit8e7728077435c5c5ad8c328761277f8ff3b32112
tree67f407b4b2fa58d5c3df7175299cfb78d6ab31df
parentddd767387f336ed1578f171a2af4ca33c564d7f3
nir: do not use De Morgan's Law rules for flt and fge

In presence of NaNs, "!(flt(a, b) && flt(c, d))" is NOT EQUAL
to "fge(a, b) || fge(c, d)". These optimizations are unsafe for
apps that rely on NaN behaviour.

pipeline-db (GFX9/LLVM):
Totals from affected shaders:
SGPRS: 3176 -> 3136 (-1.26 %)
VGPRS: 2188 -> 2144 (-2.01 %)
Spilled SGPRs: 227 -> 169 (-25.55 %)
Code Size: 150572 -> 151800 (0.82 %) bytes
Max Waves: 307 -> 310 (0.98 %)

pipeline-db (GFX9/ACO):
Totals from affected shaders:
SGPRS: 18744 -> 18744 (0.00 %)
VGPRS: 15576 -> 15580 (0.03 %)
Spilled SGPRs: 164 -> 164 (0.00 %)
Code Size: 1573012 -> 1576492 (0.22 %) bytes
Max Waves: 1534 -> 1532 (-0.13 %)

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2127
Fixes: d1ed4ffe0b7 ("nir: Use De Morgan's Law on logic compounded comparisons")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3696>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3696>
src/compiler/nir/nir_opt_algebraic.py