{
bool progress = false;
- cfg_t cfg(&instructions);
-
- calculate_live_intervals(&cfg);
+ calculate_live_intervals();
int num_vars = live_intervals->num_vars;
BITSET_WORD *live = ralloc_array(NULL, BITSET_WORD, BITSET_WORDS(num_vars));
- for (int b = 0; b < cfg.num_blocks; b++) {
- bblock_t *block = cfg.blocks[b];
- memcpy(live, live_intervals->bd[b].liveout,
+ foreach_block (block, cfg) {
+ memcpy(live, live_intervals->bd[block->num].liveout,
sizeof(BITSET_WORD) * BITSET_WORDS(num_vars));
foreach_inst_in_block_reverse(fs_inst, inst, block) {
int var = live_intervals->var_from_reg(&inst->dst);
result_live = BITSET_TEST(live, var);
} else {
- int var = live_intervals->var_from_vgrf[inst->dst.reg];
+ int var = live_intervals->var_from_reg(&inst->dst);
for (int i = 0; i < inst->regs_written; i++) {
result_live = result_live || BITSET_TEST(live, var + i);
}
if (inst->dst.file == GRF) {
if (!inst->is_partial_write()) {
- int var = live_intervals->var_from_vgrf[inst->dst.reg];
+ int var = live_intervals->var_from_reg(&inst->dst);
for (int i = 0; i < inst->regs_written; i++) {
- BITSET_CLEAR(live, var + inst->dst.reg_offset + i);
+ BITSET_CLEAR(live, var + i);
}
}
}
for (int i = 0; i < inst->sources; i++) {
if (inst->src[i].file == GRF) {
- int var = live_intervals->var_from_vgrf[inst->src[i].reg];
+ int var = live_intervals->var_from_reg(&inst->src[i]);
for (int j = 0; j < inst->regs_read(this, i); j++) {
- BITSET_SET(live, var + inst->src[i].reg_offset + j);
+ BITSET_SET(live, var + j);
}
}
}
ralloc_free(live);
if (progress) {
- foreach_in_list_safe(fs_inst, inst, &instructions) {
+ foreach_block_and_inst_safe (block, backend_instruction, inst, cfg) {
if (inst->opcode == BRW_OPCODE_NOP) {
- inst->remove();
+ inst->remove(block);
}
}