diff --git a/src/compiler/nir/nir_control_flow.h b/src/compiler/nir/nir_control_flow.h index 74e083cb209..49f17c9c161 100644 --- a/src/compiler/nir/nir_control_flow.h +++ b/src/compiler/nir/nir_control_flow.h @@ -171,6 +171,18 @@ nir_cf_node_remove(nir_cf_node *node) nir_cf_delete(&list); } +static inline void +nir_remove_after_cf_node(nir_cf_node *node) +{ + nir_cf_node *end = node; + while (!nir_cf_node_is_last(end)) + end = nir_cf_node_next(end); + + nir_cf_list list; + nir_cf_extract(&list, nir_after_cf_node(node), nir_after_cf_node(end)); + nir_cf_delete(&list); +} + /** inserts undef phi sources from predcessor into phis of the block */ void nir_insert_phi_undef(nir_block *block, nir_block *pred); diff --git a/src/compiler/nir/nir_opt_dead_cf.c b/src/compiler/nir/nir_opt_dead_cf.c index bd6559a3672..d716b0883af 100644 --- a/src/compiler/nir/nir_opt_dead_cf.c +++ b/src/compiler/nir/nir_opt_dead_cf.c @@ -68,18 +68,6 @@ * cf_node (see dead_cf_list()) so this is a convenient place to remove them. */ -static void -remove_after_cf_node(nir_cf_node *node) -{ - nir_cf_node *end = node; - while (!nir_cf_node_is_last(end)) - end = nir_cf_node_next(end); - - nir_cf_list list; - nir_cf_extract(&list, nir_after_cf_node(node), nir_after_cf_node(end)); - nir_cf_delete(&list); -} - static void opt_constant_if(nir_if *if_stmt, bool condition) { @@ -93,7 +81,7 @@ opt_constant_if(nir_if *if_stmt, bool condition) */ if (nir_block_ends_in_jump(last_block)) { - remove_after_cf_node(&if_stmt->cf_node); + nir_remove_after_cf_node(&if_stmt->cf_node); } else { /* Remove any phi nodes after the if by rewriting uses to point to the * correct source. @@ -276,7 +264,7 @@ dead_cf_block(nir_block *block) /* opt_constant_if() doesn't handle this case. */ if (nir_block_ends_in_jump(block) && !exec_node_is_tail_sentinel(block->cf_node.node.next)) { - remove_after_cf_node(&block->cf_node); + nir_remove_after_cf_node(&block->cf_node); return true; } @@ -358,7 +346,7 @@ dead_cf_list(struct exec_list *list, bool *list_ends_in_jump) nir_block *next = nir_cf_node_as_block(nir_cf_node_next(cur)); if (!exec_list_is_empty(&next->instr_list) || !exec_node_is_tail_sentinel(next->cf_node.node.next)) { - remove_after_cf_node(cur); + nir_remove_after_cf_node(cur); return true; } } @@ -376,7 +364,7 @@ dead_cf_list(struct exec_list *list, bool *list_ends_in_jump) if (next->predecessors->entries == 0 && (!exec_list_is_empty(&next->instr_list) || !exec_node_is_tail_sentinel(next->cf_node.node.next))) { - remove_after_cf_node(cur); + nir_remove_after_cf_node(cur); return true; } break;