nir/algebraic: Separate ffma lowering from fusing
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 5 May 2016 23:58:44 +0000 (16:58 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 11 May 2016 18:44:35 +0000 (11:44 -0700)
The i965 driver has its own pass for fusing mul+add combinations that's
much smarter than what nir_opt_algebraic can do so we don't want to get the
nir_opt_algebraic one just because we didn't set lower_ffma.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/nir/nir.h
src/compiler/nir/nir_opt_algebraic.py
src/gallium/drivers/freedreno/ir3/ir3_nir.c

index c96eaf9c3fcfdb28fdaf1b2da47b32f9d8d67872..20927a26abfbf92717a96d7fe34124c6dbe2eb91 100644 (file)
@@ -1624,6 +1624,7 @@ typedef struct nir_function {
 typedef struct nir_shader_compiler_options {
    bool lower_fdiv;
    bool lower_ffma;
+   bool fuse_ffma;
    bool lower_flrp32;
    /** Lowers flrp when it does not support doubles */
    bool lower_flrp64;
index 0a95725f962f29616994aed6d523e0f5eb904068..f8db2b690ac2aefbb55c71b4bbf69c628eb9cb49 100644 (file)
@@ -108,7 +108,7 @@ optimizations = [
    (('~fadd@32', a, ('fmul',         c , ('fadd', b, ('fneg', a)))), ('flrp', a, b, c), '!options->lower_flrp32'),
    (('~fadd@64', a, ('fmul',         c , ('fadd', b, ('fneg', a)))), ('flrp', a, b, c), '!options->lower_flrp64'),
    (('ffma', a, b, c), ('fadd', ('fmul', a, b), c), 'options->lower_ffma'),
-   (('~fadd', ('fmul', a, b), c), ('ffma', a, b, c), '!options->lower_ffma'),
+   (('~fadd', ('fmul', a, b), c), ('ffma', a, b, c), 'options->fuse_ffma'),
    # Comparison simplifications
    (('~inot', ('flt', a, b)), ('fge', a, b)),
    (('~inot', ('fge', a, b)), ('flt', a, b)),
index 28cde5b25cb41e15613e40c37b5e2dac2dc34c0f..d93765cdd325692a0b9de49a38c6bf934f0d1612 100644 (file)
@@ -45,6 +45,7 @@ ir3_tgsi_to_nir(const struct tgsi_token *tokens)
                        .lower_flrp32 = true,
                        .lower_flrp64 = true,
                        .lower_ffract = true,
+                       .fuse_ffma = true,
                        .native_integers = true,
                        .vertex_id_zero_based = true,
                        .lower_extract_byte = true,