From e05cb967e7443d0eca5090537ad0a0902e7ec1d6 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Sat, 25 May 2024 08:09:43 -0500 Subject: [PATCH] nir: Add nir_foreach_block_in_cf_node_safe() iterators Reviewed-by: Karol Herbst Reviewed-by: Alyssa Rosenzweig Part-of: --- src/compiler/nir/nir.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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. */