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