From 1b72c31e1f1947123d8c236b56e230f030f60cf9 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 5 May 2016 16:58:44 -0700 Subject: [PATCH] nir/algebraic: Separate ffma lowering from fusing 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 --- src/compiler/nir/nir.h | 1 + src/compiler/nir/nir_opt_algebraic.py | 2 +- src/gallium/drivers/freedreno/ir3/ir3_nir.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index c96eaf9c3fc..20927a26abf 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -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; diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index 0a95725f962..f8db2b690ac 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -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)), diff --git a/src/gallium/drivers/freedreno/ir3/ir3_nir.c b/src/gallium/drivers/freedreno/ir3/ir3_nir.c index 28cde5b25cb..d93765cdd32 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_nir.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_nir.c @@ -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, -- 2.30.2