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