diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 6201f9f8154..76f2ab8abd5 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -4939,11 +4939,23 @@ nir_block *nir_cf_node_cf_tree_prev(nir_cf_node *node); block != nir_cf_node_cf_tree_next(node); \ block = nir_block_cf_tree_next(block)) +#define nir_foreach_block_in_cf_node_safe(block, node) \ + for (nir_block *block = nir_cf_node_cf_tree_first(node), \ + *next = nir_block_cf_tree_next(block); \ + block != nir_cf_node_cf_tree_next(node); \ + block = next, next = nir_block_cf_tree_next(block)) + #define nir_foreach_block_in_cf_node_reverse(block, node) \ for (nir_block *block = nir_cf_node_cf_tree_last(node); \ block != nir_cf_node_cf_tree_prev(node); \ block = nir_block_cf_tree_prev(block)) +#define nir_foreach_block_in_cf_node_reverse_safe(block, node) \ + for (nir_block *block = nir_cf_node_cf_tree_last(node), \ + *prev = nir_block_cf_tree_prev(block); \ + block != nir_cf_node_cf_tree_prev(node); \ + block = prev, prev = nir_block_cf_tree_prev(block)) + /* If the following CF node is an if, this function returns that if. * Otherwise, it returns NULL. */