mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 10:20:09 +01:00
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:d1ed4ffe0b("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> (cherry picked from commit8e77280774)
This commit is contained in:
parent
4558bdb95a
commit
fa0dcef2ef
2 changed files with 2 additions and 2 deletions
|
|
@ -13,7 +13,7 @@
|
|||
"description": "nir: do not use De Morgan's Law rules for flt and fge",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "d1ed4ffe0b70762477709e699f95c73602f9dc5a"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1279,7 +1279,7 @@ for bit_size in [8, 16, 32, 64]:
|
|||
('bcsel', ('ilt', a, ('isub', a, b)), intmin, ('isub', a, b))), 'options->lower_add_sat'),
|
||||
]
|
||||
|
||||
invert = OrderedDict([('feq', 'fne'), ('fne', 'feq'), ('fge', 'flt'), ('flt', 'fge')])
|
||||
invert = OrderedDict([('feq', 'fne'), ('fne', 'feq')])
|
||||
|
||||
for left, right in itertools.combinations_with_replacement(invert.keys(), 2):
|
||||
optimizations.append((('inot', ('ior(is_used_once)', (left, a, b), (right, c, d))),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue