mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 13:30:12 +01:00
nir: Add more matches for fmulz
In some cases after other passes, `(a == 0.0 ? 0 : b)` can be turned into `(a != 0.0 ? b : 0)`, so let's match those cases too. Also matching `min(abs(a), abs(b)) == 0.0 ? 0.0 : a * b`. Signed-off-by: Karmjit Mahil <karmjit.mahil@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31479>
This commit is contained in:
parent
c85168160e
commit
8d19ffef0a
1 changed files with 12 additions and 0 deletions
|
|
@ -337,6 +337,18 @@ optimizations = [
|
|||
# (b==0.0 ? 0.0 : a) * (a==0.0 ? 0.0 : b) -> fmulz(a, b)
|
||||
*add_fabs_fneg((('fmul@32(nsz)', ('bcsel', ignore_exact('feq', b, 0.0), 0.0, 'ma'), ('bcsel', ignore_exact('feq', a, 0.0), 0.0, 'mb')),
|
||||
('fmulz', 'ma', 'mb'), has_fmulz), {'ma' : a, 'mb' : b}),
|
||||
# (b!=0.0 ? a : 0.0) * (a==0.0 ? 0.0 : b) -> fmulz(a, b)
|
||||
*add_fabs_fneg((('fmul@32(nsz)', ('bcsel', ignore_exact('fneu', b, 0.0), 'ma', 0.0), ('bcsel', ignore_exact('feq', a, 0.0), 0.0, 'mb')),
|
||||
('fmulz', 'ma', 'mb'), has_fmulz), {'ma' : a, 'mb' : b}),
|
||||
# (b!=0.0 ? a : 0.0) * (a!=0.0 ? b : 0.0) -> fmulz(a, b)
|
||||
*add_fabs_fneg((('fmul@32(nsz)', ('bcsel', ignore_exact('fneu', b, 0.0), 'ma', 0.0), ('bcsel', ignore_exact('fneu', a, 0.0), 'mb', 0.0)),
|
||||
('fmulz', 'ma', 'mb'), has_fmulz), {'ma' : a, 'mb' : b}),
|
||||
|
||||
# (min(abs(a), abs(b)) == 0.0 ? 0.0 : a * b) -> fmulz(a,b)
|
||||
*add_fabs_fneg((('bcsel', ('feq', ('fmin', ('fabs', a), ('fabs', b)), 0.0), 0.0, ('fmul@32', 'ma', 'mb')),
|
||||
('fmulz', 'ma', 'mb'), has_fmulz), {'ma': a, 'mb': b}),
|
||||
|
||||
# a * (a == 0.0 ? 0.0 : b(is_non_const_zero))
|
||||
*add_fabs_fneg((('fmul@32(nsz)', 'ma', ('bcsel', ignore_exact('feq', a, 0.0), 0.0, '#b(is_not_const_zero)')),
|
||||
('fmulz', 'ma', b), has_fmulz), {'ma' : a}),
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue