[Mesa-stable] [Mesa-dev] [PATCH 1/5] nir/cf: Remove phi sources if needed in nir_handle_add_jump
Jason Ekstrand
jason at jlekstrand.net
Tue Oct 2 12:30:53 UTC 2018
On Tue, Oct 2, 2018 at 5:53 AM Iago Toral <itoral at 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-stable at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-stable/attachments/20181002/1601338b/attachment.html>
More information about the mesa-stable
mailing list