From: Jason Ekstrand Date: Sat, 8 Nov 2014 03:35:23 +0000 (-0800) Subject: nir/nir: Patch up phi predecessors in move_successors X-Git-Tag: upstream/17.1.0~21429 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ef7ebb908ed0ebd005bb5eb4554dc2ba8d6be983;p=platform%2Fupstream%2Fmesa.git nir/nir: Patch up phi predecessors in move_successors Reviewed-by: Connor Abbott --- diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c index e5346ff..20826b8 100644 --- a/src/glsl/nir/nir.c +++ b/src/glsl/nir/nir.c @@ -730,6 +730,23 @@ split_block_beginning(nir_block *block) return new_block; } +static void +rewrite_phi_preds(nir_block *block, nir_block *old_pred, nir_block *new_pred) +{ + nir_foreach_instr_safe(block, instr) { + if (instr->type != nir_instr_type_phi) + break; + + nir_phi_instr *phi = nir_instr_as_phi(instr); + foreach_list_typed_safe(nir_phi_src, src, node, &phi->srcs) { + if (src->pred == old_pred) { + src->pred = new_pred; + break; + } + } + } +} + /** * Moves the successors of source to the successors of dest, leaving both * successors of source NULL. @@ -741,11 +758,15 @@ move_successors(nir_block *source, nir_block *dest) nir_block *succ1 = source->successors[0]; nir_block *succ2 = source->successors[1]; - if (succ1) + if (succ1) { unlink_blocks(source, succ1); + rewrite_phi_preds(succ1, source, dest); + } - if (succ2) + if (succ2) { unlink_blocks(source, succ2); + rewrite_phi_preds(succ2, source, dest); + } unlink_block_successors(dest); link_blocks(dest, succ1, succ2);