diff options
author | Kenneth Graunke <[email protected]> | 2015-01-19 22:11:39 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2015-01-23 14:53:25 -0800 |
commit | faa38e16aadd9f2a2416fcb5087d7f8fc8178bf2 (patch) | |
tree | dc9d04684bf18ce719160185ccd5913885f93996 /src/mesa | |
parent | 9b5efac4617d29bdd8a4cfb64acb84c8c0817c23 (diff) |
i965/nir: Do optimizations again just before lowering source mods.
We want to run CSE and algebraic optimizations again after lowering IO.
Some of the passes in the optimization loop don't handle saturates and
other modifiers, so run it before lowering to source modifiers.
total instructions in shared programs: 6046190 -> 6045768 (-0.01%)
instructions in affected programs: 22406 -> 21984 (-1.88%)
helped: 47
HURT: 0
GAINED: 0
LOST: 0
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index 510092eae50..40a16736489 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -26,20 +26,9 @@ #include "glsl/nir/glsl_to_nir.h" #include "brw_fs.h" -void -fs_visitor::emit_nir_code() +static void +nir_optimize(nir_shader *nir) { - /* first, lower the GLSL IR shader to NIR */ - lower_output_reads(shader->base.ir); - nir_shader *nir = glsl_to_nir(shader->base.ir, NULL, true); - nir_validate_shader(nir); - - nir_lower_global_vars_to_local(nir); - nir_validate_shader(nir); - - nir_split_var_copies(nir); - nir_validate_shader(nir); - bool progress; do { progress = false; @@ -58,6 +47,23 @@ fs_visitor::emit_nir_code() progress |= nir_opt_constant_folding(nir); nir_validate_shader(nir); } while (progress); +} + +void +fs_visitor::emit_nir_code() +{ + /* first, lower the GLSL IR shader to NIR */ + lower_output_reads(shader->base.ir); + nir_shader *nir = glsl_to_nir(shader->base.ir, NULL, true); + nir_validate_shader(nir); + + nir_lower_global_vars_to_local(nir); + nir_validate_shader(nir); + + nir_split_var_copies(nir); + nir_validate_shader(nir); + + nir_optimize(nir); /* Lower a bunch of stuff */ nir_lower_var_copies(nir); @@ -81,6 +87,8 @@ fs_visitor::emit_nir_code() nir_lower_atomics(nir); nir_validate_shader(nir); + nir_optimize(nir); + nir_lower_to_source_mods(nir); nir_validate_shader(nir); nir_copy_prop(nir); |