<p dir="ltr">Um, why?  I'm sure you have some reason but I don't immediately see how a progress flag from lower_vec_to_movs is useful.  Some of the others definitely are.<br>
--Jason</p>
<div class="gmail_quote">On Sep 18, 2015 10:37 AM, "Kenneth Graunke" <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Signed-off-by: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>><br>
---<br>
 src/glsl/nir/nir.h                   |  2 +-<br>
 src/glsl/nir/nir_lower_vec_to_movs.c | 16 ++++++++++++----<br>
 2 files changed, 13 insertions(+), 5 deletions(-)<br>
<br>
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h<br>
index 31c0c27..0950289 100644<br>
--- a/src/glsl/nir/nir.h<br>
+++ b/src/glsl/nir/nir.h<br>
@@ -1826,7 +1826,7 @@ void nir_lower_vars_to_ssa(nir_shader *shader);<br>
 void nir_remove_dead_variables(nir_shader *shader);<br>
<br>
 void nir_move_vec_src_uses_to_dest(nir_shader *shader);<br>
-void nir_lower_vec_to_movs(nir_shader *shader);<br>
+bool nir_lower_vec_to_movs(nir_shader *shader);<br>
 void nir_lower_alu_to_scalar(nir_shader *shader);<br>
 void nir_lower_load_const_to_scalar(nir_shader *shader);<br>
<br>
diff --git a/src/glsl/nir/nir_lower_vec_to_movs.c b/src/glsl/nir/nir_lower_vec_to_movs.c<br>
index f5d30be..b7ee4e8 100644<br>
--- a/src/glsl/nir/nir_lower_vec_to_movs.c<br>
+++ b/src/glsl/nir/nir_lower_vec_to_movs.c<br>
@@ -34,6 +34,7 @@<br>
<br>
 struct vec_to_movs_state {<br>
    nir_function_impl *impl;<br>
+   bool progress;<br>
 };<br>
<br>
 static bool<br>
@@ -251,24 +252,31 @@ lower_vec_to_movs_block(nir_block *block, void *void_state)<br>
<br>
       nir_instr_remove(&vec->instr);<br>
       ralloc_free(vec);<br>
+      state->progress = true;<br>
    }<br>
<br>
    return true;<br>
 }<br>
<br>
-static void<br>
+static bool<br>
 nir_lower_vec_to_movs_impl(nir_function_impl *impl)<br>
 {<br>
-   struct vec_to_movs_state state = { impl };<br>
+   struct vec_to_movs_state state = { impl, false };<br>
<br>
    nir_foreach_block(impl, lower_vec_to_movs_block, &state);<br>
+<br>
+   return state.progress;<br>
 }<br>
<br>
-void<br>
+bool<br>
 nir_lower_vec_to_movs(nir_shader *shader)<br>
 {<br>
+   bool progress = false;<br>
+<br>
    nir_foreach_overload(shader, overload) {<br>
       if (overload->impl)<br>
-         nir_lower_vec_to_movs_impl(overload->impl);<br>
+         progress = nir_lower_vec_to_movs_impl(overload->impl) || progress;<br>
    }<br>
+<br>
+   return progress;<br>
 }<br>
--<br>
2.5.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div>