From 9486614938035f6bec746d207a9cf79a7def0724 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 30 Mar 2016 12:00:02 -0700 Subject: [PATCH] i965: Make bblock_t::next and friends return NULL at sentinels. 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 Reviewed-by: Jason Ekstrand Reviewed-by: Matt Turner --- 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 405020b77e5..5b770aa7af1 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 736deb443dd..376cb258232 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.30.2