Lines Matching refs:pair
75 std::vector<std::unordered_map<Temp, std::pair<uint32_t, uint32_t>>> next_use_distances_start;
76 std::vector<std::unordered_map<Temp, std::pair<uint32_t, uint32_t>>> next_use_distances_end;
77 std::vector<std::vector<std::pair<Temp, uint32_t>>> local_next_use_distance; /* Working buffer */
78 std::vector<std::pair<RegClass, std::unordered_set<uint32_t>>> interferences;
184 for (std::unordered_map<Temp, std::pair<uint32_t, uint32_t>>::iterator it =
219 std::pair<uint32_t, uint32_t> distance{block_idx, 0};
235 std::pair<uint32_t, uint32_t>& entry_distance = insert_result.first->second;
245 for (std::pair<const Temp, std::pair<uint32_t, uint32_t>>& pair : next_use_distances_start) {
246 Temp temp = pair.first;
250 uint32_t distance = pair.second.second;
251 uint32_t dom = pair.second.first;
257 std::make_pair(temp, std::pair<uint32_t, uint32_t>{}));
259 std::pair<uint32_t, uint32_t>& entry_distance = insert_result.first->second;
265 if (entry_distance != std::pair<uint32_t, uint32_t>{dom, distance}) {
386 std::vector<std::vector<std::pair<Temp, uint32_t>>>& local_next_uses)
395 for (std::pair<const Temp, std::pair<uint32_t, uint32_t>>& pair :
398 (Temp)pair.first, pair.second.second + block->instructions.size()));
419 [op](auto& pair) { return pair.first == op.getTemp(); });
430 [def](auto& pair) { return pair.first == def.getTemp(); });
540 for (const std::pair<const Temp, std::pair<uint32_t, uint32_t>>& pair :
542 if (pair.first.type() == type &&
543 (pair.second.first >= loop_end ||
544 (ctx.remat.count(pair.first) && type == RegType::sgpr)) &&
545 pair.second.second > distance && !ctx.spills_entry[block_idx].count(pair.first)) {
546 to_spill = pair.first;
547 distance = pair.second.second;
583 for (const std::pair<const Temp, std::pair<uint32_t, uint32_t>>& pair :
585 if (pair.first.type() == type && pair.second.second > distance &&
586 !ctx.spills_entry[block_idx].count(pair.first)) {
587 to_spill = pair.first;
588 distance = pair.second.second;
604 for (std::pair<Temp, uint32_t> pair : ctx.spills_exit[pred_idx]) {
605 if (pair.first.type() != RegType::sgpr) {
608 auto next_use_distance_it = next_use_distances.find(pair.first);
611 ctx.spills_entry[block_idx].insert(pair);
612 spilled_registers.sgpr += pair.first.size();
617 for (std::pair<Temp, uint32_t> pair : ctx.spills_exit[pred_idx]) {
618 if (pair.first.type() != RegType::vgpr) {
621 auto next_use_distance_it = next_use_distances.find(pair.first);
624 ctx.spills_entry[block_idx].insert(pair);
625 spilled_registers.vgpr += pair.first.size();
634 for (std::pair<Temp, uint32_t> pair : ctx.spills_exit[pred_idx]) {
635 if (pair.first.type() == RegType::sgpr && next_use_distances.count(pair.first) &&
636 ctx.spills_entry[block_idx].insert(pair).second) {
637 spilled_registers.sgpr += pair.first.size();
644 for (std::pair<Temp, uint32_t> pair : ctx.spills_exit[pred_idx]) {
645 if (pair.first.type() == RegType::vgpr && next_use_distances.count(pair.first) &&
646 ctx.spills_entry[block_idx].insert(pair).second) {
647 spilled_registers.vgpr += pair.first.size();
659 for (const std::pair<const Temp, std::pair<uint32_t, uint32_t>>& pair : next_use_distances) {
661 pair.first.is_linear() ? block->linear_preds : block->logical_preds;
668 bool remat = ctx.remat.count(pair.first);
673 if (!ctx.next_use_distances_end[pred_idx].count(pair.first)) {
677 if (!ctx.spills_exit[pred_idx].count(pair.first)) {
681 partial_spills.insert(pair.first);
684 spill_id = ctx.spills_exit[pred_idx][pair.first];
690 ctx.spills_entry[block_idx][pair.first] = spill_id;
691 partial_spills.erase(pair.first);
692 spilled_registers += pair.first;
772 for (std::pair<const Temp, std::pair<uint32_t, uint32_t>>& live :
808 for (std::pair<const Temp, std::pair<uint32_t, uint32_t>>& live :
906 for (std::pair<Temp, uint32_t> pair : ctx.spills_exit[pred_idx])
907 ctx.add_interference(spill_id, pair.second);
935 for (std::pair<Temp, uint32_t> pair : ctx.spills_entry[block_idx]) {
937 pair.first.is_linear() ? block->linear_preds : block->logical_preds;
941 auto spilled = ctx.spills_exit[pred_idx].find(pair.first);
943 if (spilled->second != pair.second)
944 ctx.add_affinity(pair.second, spilled->second);
949 if (!ctx.next_use_distances_end[pred_idx].count(pair.first))
953 for (std::pair<Temp, uint32_t> exit_spill : ctx.spills_exit[pred_idx]) {
954 if (exit_spill.first == pair.first)
956 ctx.add_interference(exit_spill.second, pair.second);
961 Temp var = pair.first;
971 spill->operands[1] = Operand::c32(pair.second);
977 } while (pair.first.type() == RegType::vgpr &&
981 ctx.spills_exit[pred.index][pair.first] = pair.second;
1046 for (std::pair<const Temp, std::pair<uint32_t, uint32_t>>& pair :
1049 if (ctx.spills_entry[block_idx].count(pair.first))
1052 pair.first.is_linear() ? block->linear_preds : block->logical_preds;
1057 if (!ctx.next_use_distances_end[pred_idx].count(pair.first))
1064 if (!ctx.spills_exit[pred_idx].count(pair.first))
1068 Temp new_name = ctx.program->allocateTmp(pair.first.regClass());
1074 } while (pair.first.type() == RegType::vgpr &&
1079 do_reload(ctx, pair.first, new_name, ctx.spills_exit[pred.index][pair.first]);
1082 ctx.spills_exit[pred.index].erase(pair.first);
1083 ctx.renames[pred.index][pair.first] = new_name;
1090 if (!ctx.renames[pred_idx].count(pair.first)) {
1092 rename = pair.first;
1094 is_same = rename == pair.first;
1097 rename = ctx.renames[pred_idx][pair.first];
1099 is_same = rename == ctx.renames[pred_idx][pair.first];
1108 aco_opcode opcode = pair.first.is_linear() ? aco_opcode::p_linear_phi : aco_opcode::p_phi;
1111 rename = ctx.program->allocateTmp(pair.first.regClass());
1114 if (ctx.renames[preds[i]].count(pair.first)) {
1115 tmp = ctx.renames[preds[i]][pair.first];
1119 tmp = pair.first;
1131 if (!(rename == Temp() || rename == pair.first))
1132 ctx.renames[block_idx][pair.first] = rename;
1182 std::map<Temp, std::pair<Temp, uint32_t>> reloads;
1228 for (std::pair<Temp, uint32_t> pair : ctx.local_next_use_distance[idx]) {
1229 if (pair.first.type() != type)
1231 bool can_rematerialize = ctx.remat.count(pair.first);
1232 if (((pair.second > distance && can_rematerialize == do_rematerialize) ||
1233 (can_rematerialize && !do_rematerialize && pair.second > idx)) &&
1234 !current_spills.count(pair.first)) {
1235 to_spill = pair.first;
1236 distance = pair.second;
1245 for (std::pair<Temp, uint32_t> pair : current_spills)
1246 ctx.add_interference(spill_id, pair.second);
1247 for (std::pair<const Temp, std::pair<Temp, uint32_t>>& pair : reloads)
1248 ctx.add_interference(spill_id, pair.second.second);
1268 for (std::pair<const Temp, std::pair<Temp, uint32_t>>& pair : reloads) {
1270 do_reload(ctx, pair.second.first, pair.first, pair.second.second);
1335 for (std::pair<Temp, Temp> rename : renames) {
1749 for (std::pair<Temp, uint32_t> pair : ctx.spills_entry[block.index]) {
1751 if (ctx.interferences[pair.second].first.type() == RegType::sgpr &&
1752 slots[pair.second] / ctx.wave_size == i) {