diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 31f9f990dcb..26dedff4e37 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1821,6 +1821,17 @@ nir_cf_node_cf_tree_next(nir_cf_node *node) return nir_cf_node_as_block(nir_cf_node_next(node)); } +nir_block * +nir_cf_node_cf_tree_prev(nir_cf_node *node) +{ + if (node->type == nir_cf_node_block) + return nir_block_cf_tree_prev(nir_cf_node_as_block(node)); + else if (node->type == nir_cf_node_function) + return NULL; + else + return nir_cf_node_as_block(nir_cf_node_prev(node)); +} + nir_if * nir_block_get_following_if(nir_block *block) { diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 119b9efc105..a3c8127d0da 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -4551,6 +4551,10 @@ nir_block *nir_cf_node_cf_tree_last(nir_cf_node *node); nir_block *nir_cf_node_cf_tree_next(nir_cf_node *node); +/* Gets the block before a CF node in source-code order */ + +nir_block *nir_cf_node_cf_tree_prev(nir_cf_node *node); + /* Macros for loops that visit blocks in source-code order */ #define nir_foreach_block(block, impl) \