summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2016-12-14 16:14:20 +1100
committerTimothy Arceri <[email protected]>2016-12-23 10:15:36 +1100
commitb84dfa0f628717f62b58db94c88123325ef542cd (patch)
treecc9ce9a2d209d8b70fdbeb2f6ae6f051e04f1dc3 /src/compiler
parentd7813209748865d934528389c4aadc194bda8827 (diff)
nir: update fixup_phi_srcs() to handle registers
We need to do this because we partially get out of SSA when unrolling and cloning loops. Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir_clone.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/compiler/nir/nir_clone.c b/src/compiler/nir/nir_clone.c
index fb1558c6f01..91ffe624473 100644
--- a/src/compiler/nir/nir_clone.c
+++ b/src/compiler/nir/nir_clone.c
@@ -603,12 +603,17 @@ fixup_phi_srcs(clone_state *state)
{
list_for_each_entry_safe(nir_phi_src, src, &state->phi_srcs, src.use_link) {
src->pred = remap_local(state, src->pred);
- assert(src->src.is_ssa);
- src->src.ssa = remap_local(state, src->src.ssa);
- /* Remove from this list and place in the uses of the SSA def */
+ /* Remove from this list */
list_del(&src->src.use_link);
- list_addtail(&src->src.use_link, &src->src.ssa->uses);
+
+ if (src->src.is_ssa) {
+ src->src.ssa = remap_local(state, src->src.ssa);
+ list_addtail(&src->src.use_link, &src->src.ssa->uses);
+ } else {
+ src->src.reg.reg = remap_reg(state, src->src.reg.reg);
+ list_addtail(&src->src.use_link, &src->src.reg.reg->uses);
+ }
}
assert(list_empty(&state->phi_srcs));
}