<div dir="ltr"><div>LGTM<br><br></div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 22, 2017 at 8:43 AM, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 src/compiler/nir/nir.h          |  2 +-<br>
 src/compiler/nir/nir_from_ssa.<wbr>c | 21 ++++++++++++++-------<br>
 2 files changed, 15 insertions(+), 8 deletions(-)<br>
<span class=""><br>
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h<br>
index db47699..0a127cd 100644<br>
--- a/src/compiler/nir/nir.h<br>
+++ b/src/compiler/nir/nir.h<br>
@@ -2587,7 +2587,7 @@ void nir_convert_loop_to_lcssa(nir_<wbr>loop *loop);<br>
  * registers.  If false, convert all values (even those not involved in a phi<br>
  * node) to registers.<br>
  */<br>
-void nir_convert_from_ssa(nir_<wbr>shader *shader, bool phi_webs_only);<br>
+bool nir_convert_from_ssa(nir_<wbr>shader *shader, bool phi_webs_only);<br>
<br>
 bool nir_lower_phis_to_regs_block(<wbr>nir_block *block);<br>
 bool nir_lower_ssa_defs_to_regs_<wbr>block(nir_block *block);<br>
diff --git a/src/compiler/nir/nir_from_<wbr>ssa.c b/src/compiler/nir/nir_from_<wbr>ssa.c<br>
</span>index d2646c6..1aa3550 100644<br>
<span class="">--- a/src/compiler/nir/nir_from_<wbr>ssa.c<br>
+++ b/src/compiler/nir/nir_from_<wbr>ssa.c<br>
@@ -41,6 +41,7 @@ struct from_ssa_state {<br>
    bool phi_webs_only;<br>
    struct hash_table *merge_node_table;<br>
    nir_instr *instr;<br>
+   bool progress;<br>
 };<br>
<br>
 /* Returns true if a dominates b */<br>
</span>@@ -503,6 +504,7 @@ rewrite_ssa_def(nir_ssa_def *def, void *void_state)<br>
       nir_instr *parent_instr = def->parent_instr;<br>
       nir_instr_remove(parent_instr)<wbr>;<br>
       ralloc_steal(state->dead_ctx, parent_instr);<br>
<span class="">+      state->progress = true;<br>
</span>       return true;<br>
    }<br>
<br>
@@ -514,14 +516,14 @@ rewrite_ssa_def(nir_ssa_def *def, void *void_state)<br>
    nir_dest *dest = exec_node_data(nir_dest, def, ssa);<br>
<br>
    nir_instr_rewrite_dest(state-><wbr>instr, dest, nir_dest_for_reg(reg));<br>
-<br>
<span class="">+   state->progress = true;<br>
</span>    return true;<br>
<span class=""> }<br>
<br>
 /* Resolves ssa definitions to registers.  While we're at it, we also<br>
  * remove phi nodes.<br>
  */<br>
-static bool<br>
+static void<br>
 resolve_registers_block(nir_<wbr>block *block, struct from_ssa_state *state)<br>
 {<br>
    nir_foreach_instr_safe(instr, block) {<br>
</span>@@ -531,11 +533,10 @@ resolve_registers_block(nir_<wbr>block *block, struct from_ssa_state *state)<br>
<span class="">       if (instr->type == nir_instr_type_phi) {<br>
          nir_instr_remove(instr);<br>
          ralloc_steal(state->dead_ctx, instr);<br>
+         state->progress = true;<br>
       }<br>
    }<br>
</span><span class="">    state->instr = NULL;<br>
-<br>
-   return true;<br>
 }<br>
<br>
 static void<br>
</span>@@ -756,7 +757,7 @@ resolve_parallel_copies_block(<wbr>nir_block *block, struct from_ssa_state *state)<br>
<span class="">    return true;<br>
 }<br>
<br>
-static void<br>
+static bool<br>
 nir_convert_from_ssa_impl(nir_<wbr>function_impl *impl, bool phi_webs_only)<br>
 {<br>
    struct from_ssa_state state;<br>
</span>@@ -766,6 +767,7 @@ nir_convert_from_ssa_impl(nir_<wbr>function_impl *impl, bool phi_webs_only)<br>
<span class="">    state.phi_webs_only = phi_webs_only;<br>
    state.merge_node_table = _mesa_hash_table_create(NULL, _mesa_hash_pointer,<br>
                                                     _mesa_key_pointer_equal);<br>
+   state.progress = false;<br>
<br>
    nir_foreach_block(block, impl) {<br>
       add_parallel_copy_to_end_of_<wbr>block(block, state.dead_ctx);<br>
</span>@@ -804,15 +806,20 @@ nir_convert_from_ssa_impl(nir_<wbr>function_impl *impl, bool phi_webs_only)<br>
<div class="HOEnZb"><div class="h5">    /* Clean up dead instructions and the hash tables */<br>
    _mesa_hash_table_destroy(<wbr>state.merge_node_table, NULL);<br>
    ralloc_free(state.dead_ctx);<br>
+   return state.progress;<br>
 }<br>
<br>
-void<br>
+bool<br>
 nir_convert_from_ssa(nir_<wbr>shader *shader, bool phi_webs_only)<br>
 {<br>
+   bool progress = false;<br>
+<br>
    nir_foreach_function(function, shader) {<br>
       if (function->impl)<br>
-         nir_convert_from_ssa_impl(<wbr>function->impl, phi_webs_only);<br>
+         progress |= nir_convert_from_ssa_impl(<wbr>function->impl, phi_webs_only);<br>
    }<br>
+<br>
+   return progress;<br>
 }<br>
<br>
<br>
--<br>
2.10.2<br>
<br>
</div></div></blockquote></div><br></div>