nir/algebraic: optimize iand/ior of (n)eq zero
Found in some Detroit: Become Human shaders. Totals from affected shaders: SGPRS: 700256 -> 700256 (0.00 %) VGPRS: 507208 -> 507212 (0.00 %) Spilled SGPRs: 142531 -> 142531 (0.00 %) Spilled VGPRs: 0 -> 0 (0.00 %) Private memory VGPRs: 0 -> 0 (0.00 %) Scratch size: 0 -> 0 (0.00 %) dwords per thread Code Size: 76404616 -> 76301768 (-0.13 %) bytes LDS: 43 -> 43 (0.00 %) blocks Max Waves: 21438 -> 21438 (0.00 %) Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4830>
This commit is contained in:
parent
e4281dbecc
commit
8e1b75b330
|
@ -646,8 +646,10 @@ optimizations.extend([
|
||||||
(('ine', ('ineg', ('b2i32', 'a@1')), ('ineg', ('b2i32', 'b@1'))), ('ine', a, b)),
|
(('ine', ('ineg', ('b2i32', 'a@1')), ('ineg', ('b2i32', 'b@1'))), ('ine', a, b)),
|
||||||
(('b2i32', ('ine', 'a@1', 'b@1')), ('b2i32', ('ixor', a, b))),
|
(('b2i32', ('ine', 'a@1', 'b@1')), ('b2i32', ('ixor', a, b))),
|
||||||
|
|
||||||
(('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)), ('ieq', ('ior', a, b), 0), '!options->lower_bitops'),
|
(('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)), ('ieq', ('umax', a, b), 0)),
|
||||||
(('ior', ('ine', 'a@32', 0), ('ine', 'b@32', 0)), ('ine', ('ior', a, b), 0), '!options->lower_bitops'),
|
(('ior', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)), ('ieq', ('umin', a, b), 0)),
|
||||||
|
(('iand', ('ine', 'a@32', 0), ('ine', 'b@32', 0)), ('ine', ('umin', a, b), 0)),
|
||||||
|
(('ior', ('ine', 'a@32', 0), ('ine', 'b@32', 0)), ('ine', ('umax', a, b), 0)),
|
||||||
|
|
||||||
# This pattern occurs coutresy of __flt64_nonnan in the soft-fp64 code.
|
# This pattern occurs coutresy of __flt64_nonnan in the soft-fp64 code.
|
||||||
# The first part of the iand comes from the !__feq64_nonnan.
|
# The first part of the iand comes from the !__feq64_nonnan.
|
||||||
|
|
Loading…
Reference in New Issue