mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 10:50:10 +01:00
nir/cf: Fix dominance metadata in the dead control flow pass.
The NIR control flow modification API churns the block structure, splitting blocks, stitching them back together, and so on. Preserving information about block dominance is hard (and probably not worthwhile). This patch makes nir_cf_extract() throw away all metadata, like we do when adding/removing jumps. We then make the dead control flow pass compute dominance information right before it uses it. This is necessary because earlier work by the pass may have invalidated it. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Connor Abbott <cwabbott0@gmail.com> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
6560838703
commit
fbaa1b19d7
2 changed files with 7 additions and 3 deletions
|
|
@ -756,6 +756,9 @@ nir_cf_extract(nir_cf_list *extracted, nir_cursor begin, nir_cursor end)
|
|||
extracted->impl = nir_cf_node_get_function(&block_begin->cf_node);
|
||||
exec_list_make_empty(&extracted->list);
|
||||
|
||||
/* Dominance and other block-related information is toast. */
|
||||
nir_metadata_preserve(extracted->impl, nir_metadata_none);
|
||||
|
||||
nir_cf_node *cf_node = &block_begin->cf_node;
|
||||
nir_cf_node *cf_node_end = &block_end->cf_node;
|
||||
while (true) {
|
||||
|
|
|
|||
|
|
@ -203,6 +203,10 @@ loop_is_dead(nir_loop *loop)
|
|||
NULL))
|
||||
return false;
|
||||
|
||||
nir_function_impl *impl = nir_cf_node_get_function(&loop->cf_node);
|
||||
nir_metadata_require(impl, nir_metadata_live_variables |
|
||||
nir_metadata_dominance);
|
||||
|
||||
for (nir_block *cur = after->imm_dom; cur != before; cur = cur->imm_dom) {
|
||||
nir_foreach_instr(cur, instr) {
|
||||
if (!nir_foreach_ssa_def(instr, def_not_live_out, after))
|
||||
|
|
@ -332,9 +336,6 @@ dead_cf_list(struct exec_list *list, bool *list_ends_in_jump)
|
|||
static bool
|
||||
opt_dead_cf_impl(nir_function_impl *impl)
|
||||
{
|
||||
nir_metadata_require(impl, nir_metadata_live_variables |
|
||||
nir_metadata_dominance);
|
||||
|
||||
bool dummy;
|
||||
bool progress = dead_cf_list(&impl->body, &dummy);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue