diff options
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_cfg.cpp | 28 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_cfg.h | 10 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp | 4 |
3 files changed, 15 insertions, 27 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_cfg.cpp b/src/mesa/drivers/dri/i965/brw_cfg.cpp index c39edad51c4..3895469b055 100644 --- a/src/mesa/drivers/dri/i965/brw_cfg.cpp +++ b/src/mesa/drivers/dri/i965/brw_cfg.cpp @@ -51,17 +51,14 @@ link(void *mem_ctx, bblock_t *block) } bblock_t::bblock_t(cfg_t *cfg) : - cfg(cfg), start_ip(0), end_ip(0), num(0) + cfg(cfg), start_ip(0), end_ip(0), num(0), + if_block(NULL), else_block(NULL) { start = NULL; end = NULL; parents.make_empty(); children.make_empty(); - - if_inst = NULL; - else_inst = NULL; - endif_inst = NULL; } void @@ -183,32 +180,25 @@ cfg_t::cfg_t(exec_list *instructions) set_next_block(&cur, cur_endif, ip - 1); } - backend_instruction *else_inst = NULL; if (cur_else) { - else_inst = (backend_instruction *)cur_else->end; - cur_else->add_successor(mem_ctx, cur_endif); } else { cur_if->add_successor(mem_ctx, cur_endif); } assert(cur_if->end->opcode == BRW_OPCODE_IF); - assert(!else_inst || else_inst->opcode == BRW_OPCODE_ELSE); - assert(inst->opcode == BRW_OPCODE_ENDIF); + assert(!cur_else || cur_else->end->opcode == BRW_OPCODE_ELSE); - cur_if->if_inst = cur_if->end; - cur_if->else_inst = else_inst; - cur_if->endif_inst = inst; + cur_if->if_block = cur_if; + cur_if->else_block = cur_else; if (cur_else) { - cur_else->if_inst = cur_if->end; - cur_else->else_inst = else_inst; - cur_else->endif_inst = inst; + cur_else->if_block = cur_if; + cur_else->else_block = cur_else; } - cur->if_inst = cur_if->end; - cur->else_inst = else_inst; - cur->endif_inst = inst; + 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); diff --git a/src/mesa/drivers/dri/i965/brw_cfg.h b/src/mesa/drivers/dri/i965/brw_cfg.h index d6e11050ff9..ecbb996244e 100644 --- a/src/mesa/drivers/dri/i965/brw_cfg.h +++ b/src/mesa/drivers/dri/i965/brw_cfg.h @@ -76,15 +76,13 @@ struct bblock_t { struct exec_list children; int num; - /* If the current basic block ends in an IF, ELSE, or ENDIF instruction, - * these pointers will hold the locations of the other associated control - * flow instructions. + /* 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 backend_instruction *if_inst; - struct backend_instruction *else_inst; - struct backend_instruction *endif_inst; + struct bblock_t *if_block; + struct bblock_t *else_block; }; struct cfg_t { diff --git a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp index 5c79296f5a8..d64cd98343a 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp @@ -137,10 +137,10 @@ fs_visitor::opt_peephole_sel() if (if_inst->opcode != BRW_OPCODE_IF) continue; - if (!block->else_inst) + if (!block->else_block) continue; - fs_inst *else_inst = (fs_inst *) block->else_inst; + fs_inst *else_inst = (fs_inst *) block->else_block->end; assert(else_inst->opcode == BRW_OPCODE_ELSE); fs_inst *else_mov[MAX_MOVS] = { NULL }; |