Mesa (master): i965/nir: Do optimizations again just before lowering source mods.

Kenneth Graunke kwg at kemper.freedesktop.org
Fri Jan 23 22:55:22 UTC 2015


Module: Mesa
Branch: master
Commit: faa38e16aadd9f2a2416fcb5087d7f8fc8178bf2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=faa38e16aadd9f2a2416fcb5087d7f8fc8178bf2

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Mon Jan 19 22:11:39 2015 -0800

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 at whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>

---

 src/mesa/drivers/dri/i965/brw_fs_nir.cpp |   34 ++++++++++++++++++------------
 1 file 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 510092e..40a1673 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);




More information about the mesa-commit mailing list