OSDN Git Service

i965/fs_nir: Add the CSE pass and actually run in a loop
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 12 Nov 2014 00:12:32 +0000 (16:12 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 15 Jan 2015 15:19:01 +0000 (07:19 -0800)
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/mesa/drivers/dri/i965/brw_fs_nir.cpp

index 9141dc6..2ca2e73 100644 (file)
@@ -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