nir: split out lower_sub from lower_negate
authorRob Clark <robclark@freedesktop.org>
Sat, 4 Apr 2015 12:13:44 +0000 (08:13 -0400)
committerRob Clark <robclark@freedesktop.org>
Sat, 11 Apr 2015 14:43:16 +0000 (10:43 -0400)
Originally you had to have one or the other.  But actually I don't want
either.  (Or rather I want whatever is the minimum # of instructions.)

TODO: not sure where the best place to insert a check that driver hasn't
set *both* lower_negate and lower_sub?

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/glsl/nir/nir.h
src/glsl/nir/nir_opt_algebraic.py
src/mesa/drivers/dri/i965/brw_context.c

index e844e4daef816cbdc47658141774bd376dd8a180..653123780ffb841002a2ed4c0837bef61a89d120 100644 (file)
@@ -1382,6 +1382,8 @@ typedef struct nir_shader_compiler_options {
    bool lower_fsqrt;
    /** lowers fneg and ineg to fsub and isub. */
    bool lower_negate;
+   /** lowers fsub and isub to fadd+fneg and iadd+ineg. */
+   bool lower_sub;
 
    /* lower {slt,sge,seq,sne} to {flt,fge,feq,fne} + b2f: */
    bool lower_scmp;
index a8c1745d09b5729c8a2e249e86976914e49e1f64..319732dfca7ae3cf66ac1cdd10650b25c85b1dbe 100644 (file)
@@ -192,8 +192,8 @@ optimizations = [
    # Subtracts
    (('fsub', a, ('fsub', 0.0, b)), ('fadd', a, b)),
    (('isub', a, ('isub', 0, b)), ('iadd', a, b)),
-   (('fsub', a, b), ('fadd', a, ('fneg', b)), '!options->lower_negate'),
-   (('isub', a, b), ('iadd', a, ('ineg', b)), '!options->lower_negate'),
+   (('fsub', a, b), ('fadd', a, ('fneg', b)), 'options->lower_sub'),
+   (('isub', a, b), ('iadd', a, ('ineg', b)), 'options->lower_sub'),
    (('fneg', a), ('fsub', 0.0, a), 'options->lower_negate'),
    (('ineg', a), ('isub', 0, a), 'options->lower_negate'),
    (('fadd', a, ('fsub', 0.0, b)), ('fsub', a, b)),
index e52c44e3f6d77ab27dc341ef7e006ca4f41e2abf..d4a7d3de7a79c46fa1cd38ed041c1aa432cfea1f 100644 (file)
@@ -558,6 +558,7 @@ brw_initialize_context_constants(struct brw_context *brw)
        * re-combine them as a later step.
        */
       .lower_ffma = true,
+      .lower_sub = true,
    };
 
    /* We want the GLSL compiler to emit code that uses condition codes */