Rather than doing a NULL check on every block that is passed in just do it for nir_foreach_block_{reverse}_safe() where the potential problem is.
This is a micro optimisation after seeing nir_block_cf_tree_next() when profiling shader compile-times. --- src/compiler/nir/nir.c | 13 ------------- src/compiler/nir/nir.h | 4 ++-- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 60e30ae1008..104f87debea 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1552,14 +1552,6 @@ nir_ssa_def_components_read(const nir_ssa_def *def) nir_block * nir_block_cf_tree_next(nir_block *block) { - if (block == NULL) { - /* nir_foreach_block_safe() will call this function on a NULL block - * after the last iteration, but it won't use the result so just return - * NULL here. - */ - return NULL; - } - nir_cf_node *cf_next = nir_cf_node_next(&block->cf_node); if (cf_next) return nir_cf_node_cf_tree_first(cf_next); @@ -1591,11 +1583,6 @@ nir_block_cf_tree_next(nir_block *block) nir_block * nir_block_cf_tree_prev(nir_block *block) { - if (block == NULL) { - /* do this for consistency with nir_block_cf_tree_next() */ - return NULL; - } - nir_cf_node *cf_prev = nir_cf_node_prev(&block->cf_node); if (cf_prev) return nir_cf_node_cf_tree_last(cf_prev); diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index ff2c41faf27..65c904e4b1f 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2727,7 +2727,7 @@ nir_block *nir_cf_node_cf_tree_next(nir_cf_node *node); for (nir_block *block = nir_start_block(impl), \ *next = nir_block_cf_tree_next(block); \ block != NULL; \ - block = next, next = nir_block_cf_tree_next(block)) + block = next, next = block ? nir_block_cf_tree_next(block) : NULL) #define nir_foreach_block_reverse(block, impl) \ for (nir_block *block = nir_impl_last_block(impl); block != NULL; \ @@ -2737,7 +2737,7 @@ nir_block *nir_cf_node_cf_tree_next(nir_cf_node *node); for (nir_block *block = nir_impl_last_block(impl), \ *prev = nir_block_cf_tree_prev(block); \ block != NULL; \ - block = prev, prev = nir_block_cf_tree_prev(block)) + block = prev, prev = block ? nir_block_cf_tree_prev(block) : NULL) #define nir_foreach_block_in_cf_node(block, node) \ for (nir_block *block = nir_cf_node_cf_tree_first(node); \ -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev