From 8e1b75b330954a2e40e8ed0c04871e43120d4f4a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Sch=C3=BCrmann?= Date: Wed, 29 Apr 2020 17:49:45 +0100 Subject: [PATCH] nir/algebraic: optimize iand/ior of (n)eq zero MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Rhys Perry Reviewed-by: Marek Olšák Part-of: --- src/compiler/nir/nir_opt_algebraic.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index 507a4d397b7..3719d0cc8c6 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -646,8 +646,10 @@ optimizations.extend([ (('ine', ('ineg', ('b2i32', 'a@1')), ('ineg', ('b2i32', 'b@1'))), ('ine', 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'), - (('ior', ('ine', 'a@32', 0), ('ine', 'b@32', 0)), ('ine', ('ior', a, b), 0), '!options->lower_bitops'), + (('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)), ('ieq', ('umax', a, b), 0)), + (('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. # The first part of the iand comes from the !__feq64_nonnan. -- 2.30.2