From 6413e6759195c0ebb341f896c1e4d83ac8e64a9f Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 4 Feb 2021 10:38:21 -0600 Subject: [PATCH] nir: Add a couple helpers for phis and cursors Reviewed-by: Ian Romanick Part-of: --- src/compiler/nir/nir.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 197a12e4e73..4d80453c52b 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2700,6 +2700,19 @@ nir_block_ends_in_jump(nir_block *block) #define nir_foreach_instr_reverse_safe(instr, block) \ foreach_list_typed_reverse_safe(nir_instr, instr, node, &(block)->instr_list) +static inline nir_phi_instr * +nir_block_last_phi_instr(nir_block *block) +{ + nir_phi_instr *last_phi = NULL; + nir_foreach_instr(instr, block) { + if (instr->type == nir_instr_type_phi) + last_phi = nir_instr_as_phi(instr); + else + return last_phi; + } + return last_phi; +} + typedef enum { nir_selection_control_none = 0x0, nir_selection_control_flatten = 0x1, @@ -3662,6 +3675,16 @@ nir_after_instr(nir_instr *instr) return cursor; } +static inline nir_cursor +nir_before_block_after_phis(nir_block *block) +{ + nir_phi_instr *last_phi = nir_block_last_phi_instr(block); + if (last_phi) + return nir_after_instr(&last_phi->instr); + else + return nir_before_block(block); +} + static inline nir_cursor nir_after_block_before_jump(nir_block *block) {