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 <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
Kenneth Graunke 2015-01-19 22:11:39 -08:00
parent 9b5efac461
commit faa38e16aa

View file

@ -26,20 +26,9 @@
#include "glsl/nir/glsl_to_nir.h" #include "glsl/nir/glsl_to_nir.h"
#include "brw_fs.h" #include "brw_fs.h"
void static void
fs_visitor::emit_nir_code() 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; bool progress;
do { do {
progress = false; progress = false;
@ -58,6 +47,23 @@ fs_visitor::emit_nir_code()
progress |= nir_opt_constant_folding(nir); progress |= nir_opt_constant_folding(nir);
nir_validate_shader(nir); nir_validate_shader(nir);
} while (progress); } 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 */ /* Lower a bunch of stuff */
nir_lower_var_copies(nir); nir_lower_var_copies(nir);
@ -81,6 +87,8 @@ fs_visitor::emit_nir_code()
nir_lower_atomics(nir); nir_lower_atomics(nir);
nir_validate_shader(nir); nir_validate_shader(nir);
nir_optimize(nir);
nir_lower_to_source_mods(nir); nir_lower_to_source_mods(nir);
nir_validate_shader(nir); nir_validate_shader(nir);
nir_copy_prop(nir); nir_copy_prop(nir);