mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-30 02:51:24 +00:00
nir/algebraic: Small optimizations for SpvOpFOrdNotEqual and SpvOpFUnordEqual
No shader-db changes on any Intel platform. Fossil-db results: All Intel platforms had similar results. (Ice Lake shown) Instructions in all programs: 144380118 -> 143692823 (-0.5%) SENDs in all programs: 6920822 -> 6920822 (+0.0%) Loops in all programs: 38299 -> 38299 (+0.0%) Cycles in all programs: 8434782176 -> 8423078994 (-0.1%) Spills in all programs: 206830 -> 204469 (-1.1%) Fills in all programs: 318737 -> 313660 (-1.6%) Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12320>
This commit is contained in:
parent
0cf25f559f
commit
cb28361642
@ -804,6 +804,10 @@ optimizations.extend([
|
||||
(('ior', ('ior(is_used_once)', ('flt', a, c), d), ('flt(is_used_once)', b, c)), ('ior', ('flt', ('!fmin', a, b), c), d)),
|
||||
(('ior', ('ior(is_used_once)', ('flt(is_used_once)', a, b), d), ('flt', a, c)), ('ior', ('flt', a, ('!fmax', b, c)), d)),
|
||||
(('ior', ('ior(is_used_once)', ('flt', a, b), d), ('flt(is_used_once)', a, c)), ('ior', ('flt', a, ('!fmax', b, c)), d)),
|
||||
|
||||
# This is how SpvOpFOrdNotEqual might be implemented. If both values are
|
||||
# numbers, then it can be replaced with fneu.
|
||||
(('ior', ('flt', 'a(is_a_number)', 'b(is_a_number)'), ('flt', b, a)), ('fneu', a, b)),
|
||||
])
|
||||
|
||||
# Float sizes
|
||||
@ -2414,6 +2418,16 @@ late_optimizations = [
|
||||
(('feq', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('feq', a, ('fneg', b))),
|
||||
(('fneu', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('fneu', a, ('fneg', b))),
|
||||
|
||||
# This is how SpvOpFOrdNotEqual might be implemented. Replace it with
|
||||
# SpvOpLessOrGreater.
|
||||
(('iand', ('fneu', a, b), ('iand', ('feq', a, a), ('feq', b, b))), ('ior', ('!flt', a, b), ('!flt', b, a))),
|
||||
(('iand', ('fneu', a, 0.0), ('feq', a, a) ), ('!flt', 0.0, ('fabs', a))),
|
||||
|
||||
# This is how SpvOpFUnordEqual might be implemented. Replace it with
|
||||
# !SpvOpLessOrGreater.
|
||||
(('ior', ('feq', a, b), ('ior', ('fneu', a, a), ('fneu', b, b))), ('inot', ('ior', ('!flt', a, b), ('!flt', b, a)))),
|
||||
(('ior', ('feq', a, 0.0), ('fneu', a, a), ), ('inot', ('!flt', 0.0, ('fabs', a)))),
|
||||
|
||||
# nir_lower_to_source_mods will collapse this, but its existence during the
|
||||
# optimization loop can prevent other optimizations.
|
||||
(('fneg', ('fneg', a)), a),
|
||||
|
Loading…
Reference in New Issue
Block a user