nir/opt_loop_unroll: Remove unneeded phis if we make progress

Now that SSA values can be derefs and they have special rules, we have
to be a bit more careful about our LCSSA phis.  In particular, we need
to clean up in case LCSSA ended up creating a phi node for a deref.
This avoids validation issues with some CTS tests with the following
patch, but its possible this we could also see the same problem with
the existing unrolling passes.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Timothy Arceri
2018-07-11 10:50:16 +10:00
parent 5a6b04d94b
commit 0f450b57a1

View File

@@ -575,9 +575,17 @@ nir_opt_loop_unroll_impl(nir_function_impl *impl,
&has_nested_loop);
}
if (progress)
if (progress) {
nir_lower_regs_to_ssa_impl(impl);
/* Calling nir_convert_loop_to_lcssa() adds extra phi nodes which may
* not be valid if they're used for something such as a deref.
* Remove any unneeded phis.
*/
nir_copy_prop(impl->function->shader);
nir_opt_remove_phis_impl(impl);
}
return progress;
}