summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2015-01-19 22:11:39 -0800
committerKenneth Graunke <[email protected]>2015-01-23 14:53:25 -0800
commitfaa38e16aadd9f2a2416fcb5087d7f8fc8178bf2 (patch)
treedc9d04684bf18ce719160185ccd5913885f93996
parent9b5efac4617d29bdd8a4cfb64acb84c8c0817c23 (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]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_nir.cpp34
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);