diff options
-rw-r--r-- | src/glsl/nir/nir_control_flow.c | 3 | ||||
-rw-r--r-- | src/glsl/nir/nir_opt_dead_cf.c | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/glsl/nir/nir_control_flow.c b/src/glsl/nir/nir_control_flow.c index 55d0689c45e..7f51c4faf49 100644 --- a/src/glsl/nir/nir_control_flow.c +++ b/src/glsl/nir/nir_control_flow.c @@ -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) { diff --git a/src/glsl/nir/nir_opt_dead_cf.c b/src/glsl/nir/nir_opt_dead_cf.c index 317bbc5ba63..0d4819b5158 100644 --- a/src/glsl/nir/nir_opt_dead_cf.c +++ b/src/glsl/nir/nir_opt_dead_cf.c @@ -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); |