Lines Matching refs:block_idx

176 next_uses_per_block(spill_ctx& ctx, unsigned block_idx, uint32_t& worklist)
178 Block* block = &ctx.program->blocks[block_idx];
179 ctx.next_use_distances_start[block_idx] = ctx.next_use_distances_end[block_idx];
180 auto& next_use_distances_start = ctx.next_use_distances_start[block_idx];
208 next_use_distances_start[op.getTemp()] = {block_idx, idx};
213 assert(block_idx != 0 || next_use_distances_start.empty());
219 std::pair<uint32_t, uint32_t> distance{block_idx, 0};
281 unsigned block_idx = --worklist;
282 next_uses_per_block(ctx, block_idx, worklist);
440 get_demand_before(spill_ctx& ctx, unsigned block_idx, unsigned idx)
443 RegisterDemand demand = ctx.register_demand[block_idx][idx];
444 aco_ptr<Instruction>& instr = ctx.program->blocks[block_idx].instructions[idx];
448 return ctx.register_demand[block_idx][idx - 1];
453 get_live_in_demand(spill_ctx& ctx, unsigned block_idx)
457 Block& block = ctx.program->blocks[block_idx];
468 !ctx.spills_entry[block_idx].count(phi->definitions[0].getTemp()))
472 reg_pressure += get_demand_before(ctx, block_idx, idx);
484 init_live_in_vars(spill_ctx& ctx, Block* block, unsigned block_idx)
489 if (block_idx == 0)
493 const auto& next_use_distances = ctx.next_use_distances_start[block_idx];
496 if (block->loop_nest_depth > ctx.program->blocks[block_idx - 1].loop_nest_depth) {
497 assert(block->linear_preds[0] == block_idx - 1);
498 assert(block->logical_preds[0] == block_idx - 1);
504 RegisterDemand reg_pressure = get_live_in_demand(ctx, block_idx);
506 unsigned i = block_idx;
513 for (auto spilled : ctx.spills_exit[block_idx - 1]) {
522 ctx.spills_entry[block_idx][spilled.first] = spilled.second;
545 pair.second.second > distance && !ctx.spills_entry[block_idx].count(pair.first)) {
560 if (!ctx.spills_exit[block_idx - 1].count(to_spill)) {
563 spill_id = ctx.spills_exit[block_idx - 1][to_spill];
566 ctx.spills_entry[block_idx][to_spill] = spill_id;
586 !ctx.spills_entry[block_idx].count(pair.first)) {
592 ctx.spills_entry[block_idx][to_spill] = ctx.allocate_spill_id(to_spill.regClass());
610 next_use_distance_it->second.first != block_idx) {
611 ctx.spills_entry[block_idx].insert(pair);
623 next_use_distance_it->second.first != block_idx) {
624 ctx.spills_entry[block_idx].insert(pair);
636 ctx.spills_entry[block_idx].insert(pair).second) {
646 ctx.spills_entry[block_idx].insert(pair).second) {
690 ctx.spills_entry[block_idx][pair.first] = spill_id;
715 ctx.spills_entry[block_idx][phi->definitions[0].getTemp()] =
725 RegisterDemand reg_pressure = get_live_in_demand(ctx, block_idx);
736 assert(!ctx.spills_entry[block_idx].count(*it));
746 ctx.spills_entry[block_idx][to_spill] = ctx.allocate_spill_id(to_spill.regClass());
756 add_coupling_code(spill_ctx& ctx, Block* block, unsigned block_idx)
767 assert(ctx.register_demand[block_idx].size() == block->instructions.size());
770 RegisterDemand demand_before = get_demand_before(ctx, block_idx, 0);
773 ctx.next_use_distances_start[block_idx]) {
779 if (ctx.spills_entry[block_idx].count(live.first))
787 ctx.renames[block_idx].insert(*it);
796 ctx.renames[block_idx][live.first] = new_name;
803 reg_demand.push_back(ctx.register_demand[block_idx][insert_idx]);
809 ctx.next_use_distances_start[block_idx]) {
813 if (ctx.spills_entry[block_idx].count(live.first))
821 ctx.renames[block_idx].insert(*it);
832 ctx.renames[block_idx][live.first] = new_name;
841 ctx.register_demand[block_idx] = std::move(reg_demand);
863 !ctx.spills_entry[block_idx].count(phi->definitions[0].getTemp())) {
870 uint32_t def_spill_id = ctx.spills_entry[block_idx][phi->definitions[0].getTemp()];
935 for (std::pair<Temp, uint32_t> pair : ctx.spills_entry[block_idx]) {
989 !ctx.spills_entry[block_idx].count(phi->definitions[0].getTemp()));
1047 ctx.next_use_distances_start[block_idx]) {
1049 if (ctx.spills_entry[block_idx].count(pair.first))
1116 } else if (preds[i] >= block_idx) {
1132 ctx.renames[block_idx][pair.first] = rename;
1141 if (!ctx.processed[block_idx]) {
1143 RegisterDemand demand_before = get_demand_before(ctx, block_idx, idx);
1158 process_block(spill_ctx& ctx, unsigned block_idx, Block* block, RegisterDemand spilled_registers)
1160 assert(!ctx.processed[block_idx]);
1177 auto& current_spills = ctx.spills_exit[block_idx];
1190 auto rename_it = ctx.renames[block_idx].find(op.getTemp());
1191 if (rename_it != ctx.renames[block_idx].end()) {
1204 ctx.renames[block_idx][op.getTemp()] = new_tmp;
1214 RegisterDemand new_demand = ctx.register_demand[block_idx][idx];
1215 new_demand.update(get_demand_before(ctx, block_idx, idx));
1254 if (ctx.renames[block_idx].count(to_spill)) {
1255 to_spill = ctx.renames[block_idx][to_spill];
1281 spill_block(spill_ctx& ctx, unsigned block_idx)
1283 Block* block = &ctx.program->blocks[block_idx];
1286 RegisterDemand spilled_registers = init_live_in_vars(ctx, block, block_idx);
1289 for (auto it = ctx.spills_entry[block_idx].begin(); it != ctx.spills_entry[block_idx].end();
1291 for (auto it2 = std::next(it); it2 != ctx.spills_entry[block_idx].end(); ++it2)
1295 bool is_loop_header = block->loop_nest_depth && ctx.loop_header.top()->index == block_idx;
1298 add_coupling_code(ctx, block, block_idx);
1301 const auto& current_spills = ctx.spills_entry[block_idx];
1305 !ctx.renames[block_idx].empty() || ctx.unused_remats.size();
1308 if (ctx.next_use_distances_start[block_idx].at(it->first).first == block_idx)
1312 assert(ctx.spills_exit[block_idx].empty());
1313 ctx.spills_exit[block_idx] = current_spills;
1315 process_block(ctx, block_idx, block, spilled_registers);
1318 ctx.processed[block_idx] = true;
1322 ctx.program->blocks[block_idx + 1].loop_nest_depth >= block->loop_nest_depth)
1336 for (unsigned idx = loop_header->index; idx <= block_idx; idx++) {
1400 for (int block_idx = block.index; block_idx >= 0; block_idx--) {
1401 if (!(ctx.program->blocks[block_idx].kind & block_kind_top_level))
1405 std::vector<aco_ptr<Instruction>>& prev_instructions = ctx.program->blocks[block_idx].instructions;