Lines Matching refs:def

90   /* If this def has a reaching use which is not a simple use
95 def/use web, because it records the set of blocks that contain
98 containing the def (before the def), or in a block containing
132 static void clear_btr_from_live_range (btr_def def);
159 /* An obstack to hold the def-use web data structures built up for
266 group exists, create one. Add def to the group. */
268 find_btr_def_group (btr_def_group *all_btr_def_groups, btr_def def)
270 if (insn_sets_btr_p (def->insn, 1, NULL))
273 rtx def_src = SET_SRC (single_set (def->insn));
292 def->group = this_group;
293 def->next_this_group = this_group->members;
294 this_group->members = def;
297 def->group = NULL;
497 btr_def def = add_btr_def (
502 def_array[insn_uid] = def;
508 def->next_this_bb = defs_this_bb;
509 defs_this_bb = def;
691 btr_def def = def_array[insn_uid];
693 if (def != NULL)
698 btr_defset[def->btr - first_btr]);
730 btr_def def = def_array[uid];
732 /* We now know that def reaches user. */
741 def->has_ambiguous_use = 1;
743 { /* There is more than one reaching def. This is
744 a rare case, so just give up on this def/use
746 def->has_ambiguous_use = 1;
757 def->other_btr_uses_after_use = 1;
758 user->next = def->uses;
759 def->uses = user;
820 block_at_edge_of_live_range_p (int bb, btr_def def)
822 if (def->other_btr_uses_before_def && BASIC_BLOCK (bb) == def->bb)
824 else if (def->other_btr_uses_after_use)
827 for (user = def->uses; user != NULL; user = user->next)
834 /* We are removing the def/use web DEF. The target register
843 clear_btr_from_live_range (btr_def def)
848 EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
850 if ((!def->other_btr_uses_before_def
851 && !def->other_btr_uses_after_use)
852 || !block_at_edge_of_live_range_p (bb, def))
854 CLEAR_HARD_REG_BIT (btrs_live[bb], def->btr);
855 CLEAR_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
860 if (def->own_end)
861 CLEAR_HARD_REG_BIT (btrs_live_at_end[def->bb->index], def->btr);
865 /* We are adding the def/use web DEF. Add the target register used
871 add_btr_to_live_range (btr_def def, int own_end)
876 EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
878 SET_HARD_REG_BIT (btrs_live[bb], def->btr);
879 SET_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
885 SET_HARD_REG_BIT (btrs_live_at_end[def->bb->index], def->btr);
886 def->own_end = 1;
1010 the def/use web DEF.
1015 btr_def_live_range (btr_def def, HARD_REG_SET *btrs_live_in_range)
1017 if (!def->live_range)
1021 def->live_range = BITMAP_ALLOC (NULL);
1023 bitmap_set_bit (def->live_range, def->bb->index);
1026 ? btrs_live : btrs_live_at_end)[def->bb->index]);
1028 for (user = def->uses; user != NULL; user = user->next)
1029 augment_live_range (def->live_range, btrs_live_in_range,
1030 def->bb, user->bb,
1032 || user->insn != BB_END (def->bb)
1037 /* def->live_range is accurate, but we need to recompute
1042 unsigned def_bb = flag_btr_bb_exclusive ? -1 : def->bb->index;
1046 EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
1053 if (!def->other_btr_uses_before_def &&
1054 !def->other_btr_uses_after_use)
1055 CLEAR_HARD_REG_BIT (*btrs_live_in_range, def->btr);
1058 /* Merge into the def/use web DEF any other def/use webs in the same
1062 combine_btr_defs (btr_def def, HARD_REG_SET *btrs_live_in_range)
1066 for (other_def = def->group->members;
1070 if (other_def != def
1073 && dominated_by_p (CDI_DOMINATORS, other_def->bb, def->bb))
1075 /* def->bb dominates the other def, so def and other_def could
1090 bitmap_copy (combined_live_range, def->live_range);
1094 def->bb, user->bb,
1096 || user->insn != BB_END (def->bb)
1105 "Combining def in insn %d with def in insn %d\n",
1106 INSN_UID (other_def->insn), INSN_UID (def->insn));
1108 def->btr = btr;
1114 user->next = def->uses;
1115 def->uses = user;
1118 /* Combining def/use webs can make target registers live
1124 for (user = def->uses; user != NULL; user = user->next)
1130 bitmap_copy (def->live_range, combined_live_range);
1132 def->other_btr_uses_after_use = 1;
1151 move_btr_def (basic_block new_def_bb, int btr, btr_def def, bitmap live_range,
1161 rtx old_insn = def->insn;
1173 clear_btr_from_live_range (def);
1174 def->btr = btr;
1175 def->bb = new_def_bb;
1176 def->luid = 0;
1177 def->cost = basic_block_freq (new_def_bb);
1178 bitmap_copy (def->live_range, live_range);
1179 combine_btr_defs (def, btrs_live_in_range);
1180 btr = def->btr;
1181 def->other_btr_uses_before_def
1183 add_btr_to_live_range (def, 1);
1191 if (def->other_btr_uses_before_def)
1209 def->insn = emit_insn_after (new_insn, insp);
1215 INSN_UID (def->insn), INSN_UID (insp));
1222 for (user = def->uses; user != NULL; user = user->next)
1276 migrate_btr_def (btr_def def, int min_cost)
1291 INSN_UID (def->insn), def->cost, min_cost);
1293 if (!def->group || def->has_ambiguous_use)
1301 if (!def->uses)
1302 /* We have combined this def with another in the same group, so
1311 btr_def_live_range (def, &btrs_live_in_range);
1313 bitmap_copy (live_range, def->live_range);
1316 def_latency = insn_default_latency (def->insn) * issue_rate;
1321 for (user = def->uses; user != NULL; user = user->next)
1323 if (user->bb == def->bb
1324 && user->luid > def->luid
1325 && (def->luid + def_latency) > user->luid
1326 && ! can_move_up (def->bb, def->insn,
1327 (def->luid + def_latency) - user->luid))
1334 def_basic_block_freq = basic_block_freq (def->bb);
1336 for (try = get_immediate_dominator (CDI_DOMINATORS, def->bb);
1337 !give_up && try && try != ENTRY_BLOCK_PTR && def->cost >= min_cost;
1360 augment_live_range (live_range, &btrs_live_in_range, def->bb, try,
1371 move_btr_def (try, btr, def, live_range, &btrs_live_in_range);
1372 bitmap_copy(live_range, def->live_range);
1375 def_basic_block_freq = basic_block_freq (def->bb);
1441 btr_def def = fibheap_extract_min (all_btr_defs);
1443 if (migrate_btr_def (def, min_cost))
1445 fibheap_insert (all_btr_defs, -def->cost, (void *) def);
1450 INSN_UID (def->insn), def->cost);
1454 BITMAP_FREE (def->live_range);