diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2015-02-04 21:22:45 -0800 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2015-02-19 17:06:17 -0800 |
commit | 3d25afc51c1d56fe8c29147825e53ba272780360 (patch) | |
tree | 8619262c095fb5dbf3d063faa18e4047182e930c /src | |
parent | 902b0ccc9a5266955d104dc7652ac00e66081f95 (diff) | |
download | external_mesa3d-3d25afc51c1d56fe8c29147825e53ba272780360.zip external_mesa3d-3d25afc51c1d56fe8c29147825e53ba272780360.tar.gz external_mesa3d-3d25afc51c1d56fe8c29147825e53ba272780360.tar.bz2 |
nir: Make nir_[cf_node/instr]_[prev/next] return null if at the end
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/glsl/nir/nir.h | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 7f6e241..b4cccb9 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -416,15 +416,23 @@ typedef struct { } nir_instr; static inline nir_instr * -nir_instr_next(const nir_instr *instr) +nir_instr_next(nir_instr *instr) { - return exec_node_data(nir_instr, (instr)->node.next, node); + struct exec_node *next = exec_node_get_next(&instr->node); + if (exec_node_is_tail_sentinel(next)) + return NULL; + else + return exec_node_data(nir_instr, next, node); } static inline nir_instr * -nir_instr_prev(const nir_instr *instr) +nir_instr_prev(nir_instr *instr) { - return exec_node_data(nir_instr, (instr)->node.prev, node); + struct exec_node *prev = exec_node_get_prev(&instr->node); + if (exec_node_is_head_sentinel(prev)) + return NULL; + else + return exec_node_data(nir_instr, prev, node); } typedef struct { @@ -1272,13 +1280,21 @@ typedef struct { static inline nir_cf_node * nir_cf_node_next(nir_cf_node *node) { - return exec_node_data(nir_cf_node, exec_node_get_next(&node->node), node); + struct exec_node *next = exec_node_get_next(&node->node); + if (exec_node_is_tail_sentinel(next)) + return NULL; + else + return exec_node_data(nir_cf_node, next, node); } static inline nir_cf_node * nir_cf_node_prev(nir_cf_node *node) { - return exec_node_data(nir_cf_node, exec_node_get_prev(&node->node), node); + struct exec_node *prev = exec_node_get_prev(&node->node); + if (exec_node_is_head_sentinel(prev)) + return NULL; + else + return exec_node_data(nir_cf_node, prev, node); } static inline bool |