One more comment: These and the other two CFG fixes should probably be promoted to stable.
On Tue, Nov 11, 2014 at 7:37 AM, Jason Ekstrand <[email protected]> wrote: > Two questions: Does it fix the bug? And did you ever figure out what was > going on there? > On Nov 11, 2014 6:58 AM, "Jason Ekstrand" <[email protected]> wrote: > >> Both patches are Reviewed-by: Jason Ekstrand <[email protected]> >> On Nov 10, 2014 11:37 PM, "Matt Turner" <[email protected]> wrote: >> >>> I used these in the SEL peephole, but they require extra tracking and >>> fix ups. The SEL peephole can pretty easily find the blocks it needs >>> without these. >>> --- >>> src/mesa/drivers/dri/i965/brw_cfg.cpp | 15 +-------------- >>> src/mesa/drivers/dri/i965/brw_cfg.h | 8 -------- >>> src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp | 8 -------- >>> 3 files changed, 1 insertion(+), 30 deletions(-) >>> >>> diff --git a/src/mesa/drivers/dri/i965/brw_cfg.cpp >>> b/src/mesa/drivers/dri/i965/brw_cfg.cpp >>> index bb49a0a..02149e2 100644 >>> --- a/src/mesa/drivers/dri/i965/brw_cfg.cpp >>> +++ b/src/mesa/drivers/dri/i965/brw_cfg.cpp >>> @@ -51,8 +51,7 @@ link(void *mem_ctx, bblock_t *block) >>> } >>> >>> bblock_t::bblock_t(cfg_t *cfg) : >>> - cfg(cfg), start_ip(0), end_ip(0), num(0), >>> - if_block(NULL), else_block(NULL) >>> + cfg(cfg), start_ip(0), end_ip(0), num(0) >>> { >>> instructions.make_empty(); >>> parents.make_empty(); >>> @@ -136,7 +135,6 @@ bblock_t::combine_with(bblock_t *that) >>> } >>> >>> this->end_ip = that->end_ip; >>> - this->else_block = that->else_block; >>> this->instructions.append_list(&that->instructions); >>> >>> this->cfg->remove_block(that); >>> @@ -238,17 +236,6 @@ cfg_t::cfg_t(exec_list *instructions) >>> assert(cur_if->end()->opcode == BRW_OPCODE_IF); >>> assert(!cur_else || cur_else->end()->opcode == >>> BRW_OPCODE_ELSE); >>> >>> - cur_if->if_block = cur_if; >>> - cur_if->else_block = cur_else; >>> - >>> - if (cur_else) { >>> - cur_else->if_block = cur_if; >>> - cur_else->else_block = cur_else; >>> - } >>> - >>> - cur->if_block = cur_if; >>> - cur->else_block = cur_else; >>> - >>> /* Pop the stack so we're in the previous if/else/endif */ >>> cur_if = pop_stack(&if_stack); >>> cur_else = pop_stack(&else_stack); >>> diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h >>> b/src/mesa/drivers/dri/i965/brw_cfg.h >>> index 388d29e..48bca9f 100644 >>> --- a/src/mesa/drivers/dri/i965/brw_cfg.h >>> +++ b/src/mesa/drivers/dri/i965/brw_cfg.h >>> @@ -89,14 +89,6 @@ struct bblock_t { >>> struct exec_list parents; >>> struct exec_list children; >>> int num; >>> - >>> - /* If the current basic block ends in an IF or ELSE instruction, >>> these will >>> - * point to the basic blocks containing the other associated >>> instruction. >>> - * >>> - * Otherwise they are NULL. >>> - */ >>> - struct bblock_t *if_block; >>> - struct bblock_t *else_block; >>> }; >>> >>> static inline struct backend_instruction * >>> diff --git a/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp >>> b/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp >>> index 4c9d7b9..03f838d 100644 >>> --- a/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp >>> +++ b/src/mesa/drivers/dri/i965/brw_dead_control_flow.cpp >>> @@ -85,7 +85,6 @@ dead_control_flow_eliminate(backend_visitor *v) >>> } >>> >>> if (else_inst) { >>> - else_block->if_block->else_block = NULL; >>> else_inst->remove(else_block); >>> } >>> >>> @@ -102,13 +101,6 @@ dead_control_flow_eliminate(backend_visitor *v) >>> if (earlier_block && >>> earlier_block->can_combine_with(later_block)) { >>> earlier_block->combine_with(later_block); >>> >>> - foreach_block (block, v->cfg) { >>> - if (block->if_block == later_block) >>> - block->if_block = earlier_block; >>> - if (block->else_block == later_block) >>> - block->else_block = earlier_block; >>> - } >>> - >>> /* If ENDIF was in its own block, then we've now deleted it >>> and >>> * merged the two surrounding blocks, the latter of which >>> the >>> * __next block pointer was pointing to. >>> -- >>> 2.0.4 >>> >>>
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
