[Mesa-dev] [PATCH 073/133] i965/fs_nir: Add the CSE pass and actually run in a loop

Jason Ekstrand jason at jlekstrand.net
Mon Dec 15 22:05:23 PST 2014


---
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 31 ++++++++++++++++++-------------
 1 file changed, 18 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 b6720af..5703225 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
@@ -54,25 +54,30 @@ fs_visitor::emit_nir_code()
    if (1)
       nir_print_shader(nir, stderr);
 
-   if (1) {
-      nir_convert_to_ssa(nir);
+   nir_convert_to_ssa(nir);
+   nir_validate_shader(nir);
+
+   bool progress;
+   do {
+      progress = false;
+      progress |= nir_copy_prop(nir);
       nir_validate_shader(nir);
-      nir_copy_prop(nir);
+      progress |= nir_opt_dce(nir);
       nir_validate_shader(nir);
-      nir_opt_dce(nir);
+      progress |= nir_opt_cse(nir);
       nir_validate_shader(nir);
-      nir_opt_peephole_select(nir);
+      progress |= nir_opt_peephole_select(nir);
       nir_validate_shader(nir);
-      nir_opt_peephole_ffma(nir);
+      progress |= nir_opt_peephole_ffma(nir);
       nir_validate_shader(nir);
-      nir_print_shader(nir, stderr);
+   } while (progress);
+   nir_print_shader(nir, stderr);
 
-      nir_convert_from_ssa(nir);
-      nir_print_shader(nir, stderr);
-      nir_validate_shader(nir);
-      nir_lower_vec_to_movs(nir);
-      nir_validate_shader(nir);
-   }
+   nir_convert_from_ssa(nir);
+   nir_validate_shader(nir);
+   nir_print_shader(nir, stderr);
+   nir_lower_vec_to_movs(nir);
+   nir_validate_shader(nir);
 
    /* emit the arrays used for inputs and outputs - load/store intrinsics will
     * be converted to reads/writes of these arrays
-- 
2.2.0



More information about the mesa-dev mailing list