From 7abf3955caa502992122b309881b3bc89e1c3be8 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 28 Oct 2020 22:32:16 -0500 Subject: [PATCH] nir/algebraic: Add some boolean optimizations Reviewed-by: Alyssa Rosenzweig Part-of: --- src/compiler/nir/nir_opt_algebraic.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index 2cfbc277b1a..1862fe98e0f 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -1241,9 +1241,22 @@ optimizations.extend([ (('ieq', ('ineg', ('b2i', 'a@1')), -1), a), (('ine', ('ineg', ('b2i', 'a@1')), 0), a), (('ine', ('ineg', ('b2i', 'a@1')), -1), ('inot', a)), + (('ige', ('ineg', ('b2i', 'a@1')), 0), ('inot', a)), + (('ilt', ('ineg', ('b2i', 'a@1')), 0), a), + (('ult', 0, ('ineg', ('b2i', 'a@1'))), a), (('iand', ('ineg', ('b2i', a)), 1.0), ('b2f', a)), (('iand', ('ineg', ('b2i', a)), 1), ('b2i', a)), + # With D3D booleans, imax is AND and umax is OR + (('imax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), + ('ineg', ('b2i', ('iand', a, b)))), + (('imin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), + ('ineg', ('b2i', ('ior', a, b)))), + (('umax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), + ('ineg', ('b2i', ('ior', a, b)))), + (('umin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), + ('ineg', ('b2i', ('iand', a, b)))), + # Conversions (('i2b16', ('b2i', 'a@16')), a), (('i2b32', ('b2i', 'a@32')), a),