mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
nir/dominance: Handle unreachable blocks
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.
This commit is contained in:
parent
b4a1c9b506
commit
51b04d03d5
1 changed files with 5 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue