nir: Move panfrost's isign lowering to nir_opt_algebraic.
authorEric Anholt <eric@anholt.net>
Wed, 6 Feb 2019 21:12:25 +0000 (13:12 -0800)
committerEric Anholt <eric@anholt.net>
Thu, 14 Feb 2019 00:32:30 +0000 (00:32 +0000)
I wanted to reuse this from v3d.

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/nir/nir.h
src/compiler/nir/nir_opt_algebraic.py
src/gallium/drivers/panfrost/midgard/midgard_compile.h
src/gallium/drivers/panfrost/midgard/midgard_nir_algebraic.py

index 353a1604785d729e34b09147aff3c3d2ee3c755b..94ca6c4646842477c054c9232ab28dd0d3e30cba 100644 (file)
@@ -2156,6 +2156,9 @@ typedef struct nir_shader_compiler_options {
    /** enables rules to lower idiv by power-of-two: */
    bool lower_idiv;
 
+   /** enables rules to lower isign to imin+imax */
+   bool lower_isign;
+
    /* Does the native fdot instruction replicate its result for four
     * components?  If so, then opt_algebraic_late will turn all fdotN
     * instructions into fdot_replicatedN instructions.
index 75a3d2ad238b7c70dbec0bc2a591717b1a754e6f..11d6aca1183c457ef74e7cc22a58ad0d9527149e 100644 (file)
@@ -758,6 +758,8 @@ optimizations = [
                                                             ('extract_i8', 'v', 3))),
                                            127.0))),
      'options->lower_unpack_snorm_4x8'),
+
+   (('isign', a), ('imin', ('imax', a, -1), 1), 'options->lower_isign'),
 ]
 
 invert = OrderedDict([('feq', 'fne'), ('fne', 'feq'), ('fge', 'flt'), ('flt', 'fge')])
index 887fd4e746fc22fb947ceb095d6950ed81dcda17..2fcbc3171644103782746263c6f08ec5df4cd335 100644 (file)
@@ -71,6 +71,7 @@ static const nir_shader_compiler_options midgard_nir_options = {
         .lower_fmod64 = true,
         .lower_fdiv = true,
         .lower_idiv = true,
+        .lower_isign = true,
 
         .vertex_id_zero_based = true,
         .lower_extract_byte = true,
index 44441727b78c3ce66c33f8e95119d11fa4bba977..07ea427359b6548b47f4321352f303173fa0d007 100644 (file)
@@ -31,7 +31,6 @@ b = 'b'
 
 algebraic = [
     (('b2i32', a), ('iand@32', "a@32", 1)),
-    (('isign', a), ('imin', ('imax', a, -1), 1)),
     (('fge', a, b), ('flt', b, a)),
 
     # XXX: We have hw ops for this, just unknown atm..