nir: Report progress from nir_split_var_copies().
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 17 Sep 2015 19:33:36 +0000 (12:33 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 21 Sep 2015 20:46:59 +0000 (13:46 -0700)
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/glsl/nir/nir.h
src/glsl/nir/nir_split_var_copies.c

index 26b3c75c1405875d6e90094bd38254687cd58a9d..bccaf58c03c72d4c586c4acfff79a65dbec81d58 100644 (file)
@@ -1804,7 +1804,7 @@ void nir_dump_dom_frontier(nir_shader *shader, FILE *fp);
 void nir_dump_cfg_impl(nir_function_impl *impl, FILE *fp);
 void nir_dump_cfg(nir_shader *shader, FILE *fp);
 
-void nir_split_var_copies(nir_shader *shader);
+bool nir_split_var_copies(nir_shader *shader);
 
 void nir_lower_var_copy_instr(nir_intrinsic_instr *copy, void *mem_ctx);
 void nir_lower_var_copies(nir_shader *shader);
index fc72c078c7769b5418b78afc9714bcb63f2eb797..d2ea58a8b7c6d9f781d41739d769134c5a72b2e5 100644 (file)
@@ -64,6 +64,7 @@
 struct split_var_copies_state {
    void *mem_ctx;
    void *dead_ctx;
+   bool progress;
 };
 
 static nir_deref *
@@ -198,6 +199,7 @@ split_var_copy_instr(nir_intrinsic_instr *old_copy,
           * remove the old one later.
           */
          nir_instr_insert_after(&old_copy->instr, &new_copy->instr);
+         state->progress = true;
       }
       break;
 
@@ -256,24 +258,31 @@ split_var_copies_block(nir_block *block, void *void_state)
    return true;
 }
 
-static void
+static bool
 split_var_copies_impl(nir_function_impl *impl)
 {
    struct split_var_copies_state state;
 
    state.mem_ctx = ralloc_parent(impl);
    state.dead_ctx = ralloc_context(NULL);
+   state.progress = false;
 
    nir_foreach_block(impl, split_var_copies_block, &state);
 
    ralloc_free(state.dead_ctx);
+
+   return state.progress;
 }
 
-void
+bool
 nir_split_var_copies(nir_shader *shader)
 {
+   bool progress = false;
+
    nir_foreach_overload(shader, overload) {
       if (overload->impl)
-         split_var_copies_impl(overload->impl);
+         progress = split_var_copies_impl(overload->impl) || progress;
    }
+
+   return progress;
 }