On Tue, Oct 2, 2018 at 5:53 AM Iago Toral <ito...@igalia.com> wrote: > On Sat, 2018-09-22 at 16:39 -0500, Jason Ekstrand wrote: > > If the block in which the jump is inserted is the predecessor of a > > phi > > then we need to remove phi sources otherwise the phi may end up with > > things improperly connected. Found by running the Vulkan CTS with > > SPIR-V optimizations enabled. > > > > Cc: mesa-sta...@lists.freedesktop.org > > --- > > src/compiler/nir/nir_control_flow.c | 36 +++++++++++++++---------- > > ---- > > 1 file changed, 19 insertions(+), 17 deletions(-) > > > > diff --git a/src/compiler/nir/nir_control_flow.c > > b/src/compiler/nir/nir_control_flow.c > > index 3b0a0f1a5b0..a82f35550b8 100644 > > --- a/src/compiler/nir/nir_control_flow.c > > +++ b/src/compiler/nir/nir_control_flow.c > > @@ -437,6 +437,23 @@ nearest_loop(nir_cf_node *node) > > return nir_cf_node_as_loop(node); > > } > > > > +static void > > +remove_phi_src(nir_block *block, nir_block *pred) > > +{ > > + nir_foreach_instr(instr, block) { > > + if (instr->type != nir_instr_type_phi) > > + break; > > + > > + nir_phi_instr *phi = nir_instr_as_phi(instr); > > + nir_foreach_phi_src_safe(src, phi) { > > + if (src->pred == pred) { > > + list_del(&src->src.use_link); > > + exec_node_remove(&src->node); > > + } > > + } > > + } > > +} > > + > > /* > > * update the CFG after a jump instruction has been added to the end > > of a block > > */ > > @@ -447,6 +464,8 @@ nir_handle_add_jump(nir_block *block) > > nir_instr *instr = nir_block_last_instr(block); > > nir_jump_instr *jump_instr = nir_instr_as_jump(instr); > > > > + if (block->successors[0]) > > + remove_phi_src(block->successors[0], block); > > Don't we need to do the same for block->successors[1]? >
I was going to say no because his function handles *adding* a phi and so the block should already only have one successor. However, I suppose you could add a phi right before an if. I'll add the one for block->successors[1] just to be safe. --Jason
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev