mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
i965/cfg: Remove if_block/else_block.
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. Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
4001181ba3
commit
7a82961b71
3 changed files with 1 additions and 30 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 *
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue