This is what NIR does and I think it's rather sensible. Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>
On Sun, Apr 3, 2016 at 10:56 PM, Kenneth Graunke <kenn...@whitecape.org> wrote: > The bblock_t::prev/prev_const/next/next_const API returns bblock_t > pointers, rather than exec_nodes. So it's a bit surprising. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/i965/brw_cfg.h | 12 ++++++++++++ > src/mesa/drivers/dri/i965/brw_shader.cpp | 2 +- > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h > b/src/mesa/drivers/dri/i965/brw_cfg.h > index 405020b..5b770aa 100644 > --- a/src/mesa/drivers/dri/i965/brw_cfg.h > +++ b/src/mesa/drivers/dri/i965/brw_cfg.h > @@ -121,24 +121,36 @@ bblock_end_const(const struct bblock_t *block) > static inline struct bblock_t * > bblock_next(struct bblock_t *block) > { > + if (exec_node_is_tail_sentinel(block->link.next)) > + return NULL; > + > return (struct bblock_t *)block->link.next; > } > > static inline const struct bblock_t * > bblock_next_const(const struct bblock_t *block) > { > + if (exec_node_is_tail_sentinel(block->link.next)) > + return NULL; > + > return (const struct bblock_t *)block->link.next; > } > > static inline struct bblock_t * > bblock_prev(struct bblock_t *block) > { > + if (exec_node_is_head_sentinel(block->link.prev)) > + return NULL; > + > return (struct bblock_t *)block->link.prev; > } > > static inline const struct bblock_t * > bblock_prev_const(const struct bblock_t *block) > { > + if (exec_node_is_head_sentinel(block->link.prev)) > + return NULL; > + > return (const struct bblock_t *)block->link.prev; > } > > diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp > b/src/mesa/drivers/dri/i965/brw_shader.cpp > index 736deb4..376cb25 100644 > --- a/src/mesa/drivers/dri/i965/brw_shader.cpp > +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp > @@ -938,7 +938,7 @@ static void > adjust_later_block_ips(bblock_t *start_block, int ip_adjustment) > { > for (bblock_t *block_iter = start_block->next(); > - !block_iter->link.is_tail_sentinel(); > + block_iter; > block_iter = block_iter->next()) { > block_iter->start_ip += ip_adjustment; > block_iter->end_ip += ip_adjustment; > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev