On Wed, Feb 24, 2016 at 10:02 PM, Connor Abbott <cwabbo...@gmail.com> wrote:
> I believe this is correct, and won't cause any issues with phi node > placement, etc. before dead_cf comes and gets rid any code in the > unreachable block(s). > > Reviewed-by: Connor Abbott <cwabbo...@gmail.com> > > BTW, I'd ask that you hold off on pushing this until I at least get a > chance to look at the phi builder stuff. I've already talked with you > about the return lowering pass, and the inlining itself shouldn't be > *that* bad, but when I glanced at the phi builder interface I couldn't > grasp quite what was going on. > Um... Ping? I'd really like to get the rest of this pushed as soon as I can. > > > On Sat, Feb 13, 2016 at 9:14 PM, Jason Ekstrand <ja...@jlekstrand.net> > wrote: > > Previously, nir_dominance.c didn't properly handle unreachable blocks. > > This can happen if, for instance, you have something like this: > > > > loop { > > if (...) { > > break; > > } else { > > break; > > } > > } > > > > In this case, the block right after the if statement will be unreachable. > > This commit makes two changes to handle this. First, it removes an > assert > > and allows block->imm_dom to be null if the block is unreachable. > Second, > > it properly skips unreachable blocks in calc_dom_frontier_cb. > > > > Cc: Connor Abbott <cwabbo...@gmail.com> > > --- > > src/compiler/nir/nir_dominance.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/src/compiler/nir/nir_dominance.c > b/src/compiler/nir/nir_dominance.c > > index b345b85..d95f396 100644 > > --- a/src/compiler/nir/nir_dominance.c > > +++ b/src/compiler/nir/nir_dominance.c > > @@ -94,7 +94,6 @@ calc_dominance_cb(nir_block *block, void *_state) > > } > > } > > > > - assert(new_idom); > > if (block->imm_dom != new_idom) { > > block->imm_dom = new_idom; > > state->progress = true; > > @@ -112,6 +111,11 @@ calc_dom_frontier_cb(nir_block *block, void *state) > > struct set_entry *entry; > > set_foreach(block->predecessors, entry) { > > nir_block *runner = (nir_block *) entry->key; > > + > > + /* Skip unreachable predecessors */ > > + if (runner->imm_dom == NULL) > > + continue; > > + > > while (runner != block->imm_dom) { > > _mesa_set_add(runner->dom_frontier, block); > > runner = runner->imm_dom; > > -- > > 2.5.0.400.gff86faf > > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev