Home | History | Annotate | Download | only in gcc

Lines Matching refs:vd

111 free_debug_insn_changes (struct value_data *vd, unsigned int regno)
114 for (cur = vd->e[regno].debug_insn_changes; cur; cur = next)
117 --vd->n_debug_insn_changes;
120 vd->e[regno].debug_insn_changes = NULL;
129 kill_value_one_regno (unsigned int regno, struct value_data *vd)
133 if (vd->e[regno].oldest_regno != regno)
135 for (i = vd->e[regno].oldest_regno;
136 vd->e[i].next_regno != regno;
137 i = vd->e[i].next_regno)
139 vd->e[i].next_regno = vd->e[regno].next_regno;
141 else if ((next = vd->e[regno].next_regno) != INVALID_REGNUM)
143 for (i = next; i != INVALID_REGNUM; i = vd->e[i].next_regno)
144 vd->e[i].oldest_regno = next;
147 vd->e[regno].mode = VOIDmode;
148 vd->e[regno].oldest_regno = regno;
149 vd->e[regno].next_regno = INVALID_REGNUM;
150 if (vd->e[regno].debug_insn_changes)
151 free_debug_insn_changes (vd, regno);
154 validate_value_data (vd);
162 struct value_data *vd)
168 kill_value_one_regno (regno + j, vd);
171 if (regno < vd->max_value_regs)
174 j = regno - vd->max_value_regs;
178 if (vd->e[j].mode == VOIDmode)
180 n = hard_regno_nregs (j, vd->e[j].mode);
183 kill_value_one_regno (j + i, vd);
191 kill_value (const_rtx x, struct value_data *vd)
200 kill_value_regno (REGNO (x), REG_NREGS (x), vd);
207 struct value_data *vd)
211 vd->e[regno].mode = mode;
214 if (nregs > vd->max_value_regs)
215 vd->max_value_regs = nregs;
218 /* Initialize VD such that there are no known relationships between regs. */
221 init_value_data (struct value_data *vd)
226 vd->e[i].mode = VOIDmode;
227 vd->e[i].oldest_regno = i;
228 vd->e[i].next_regno = INVALID_REGNUM;
229 vd->e[i].debug_insn_changes = NULL;
231 vd->max_value_regs = 0;
232 vd->n_debug_insn_changes = 0;
240 struct value_data *const vd = (struct value_data *) data;
243 kill_value (x, vd);
249 struct value_data *vd;
265 kill_value (x, ksvd->vd);
267 set_value_regno (REGNO (x), GET_MODE (x), ksvd->vd);
275 kill_autoinc_value (rtx_insn *insn, struct value_data *vd)
284 kill_value (x, vd);
285 set_value_regno (REGNO (x), GET_MODE (x), vd);
295 copy_value (rtx dest, rtx src, struct value_data *vd)
332 if (vd->e[sr].mode == VOIDmode)
333 set_value_regno (sr, vd->e[dr].mode, vd);
350 else if (sn < hard_regno_nregs (sr, vd->e[sr].mode)
352 vd->e[sr].mode), 0U))
358 else if (sn > hard_regno_nregs (sr, vd->e[sr].mode))
374 else if (partial_subreg_p (vd->e[sr].mode, GET_MODE (src)))
376 if (!REG_CAN_CHANGE_MODE_P (sr, GET_MODE (src), vd->e[sr].mode)
377 || !REG_CAN_CHANGE_MODE_P (dr, vd->e[sr].mode, GET_MODE (dest)))
379 set_value_regno (dr, vd->e[sr].mode, vd);
384 vd->e[dr].oldest_regno = vd->e[sr].oldest_regno;
386 for (i = sr; vd->e[i].next_regno != INVALID_REGNUM; i = vd->e[i].next_regno)
388 vd->e[i].next_regno = dr;
391 validate_value_data (vd);
454 find_oldest_value_reg (enum reg_class cl, rtx reg, struct value_data *vd)
469 if (mode != vd->e[regno].mode
470 && (REG_NREGS (reg) > hard_regno_nregs (regno, vd->e[regno].mode)
471 || !REG_CAN_CHANGE_MODE_P (regno, mode, vd->e[regno].mode)))
474 for (i = vd->e[regno].oldest_regno; i != regno; i = vd->e[i].next_regno)
476 machine_mode oldmode = vd->e[i].mode;
482 new_rtx = maybe_mode_change (oldmode, vd->e[regno].mode, mode, i, regno);
500 struct value_data *vd)
502 rtx new_rtx = find_oldest_value_reg (cl, *loc, vd);
514 change->next = vd->e[REGNO (new_rtx)].debug_insn_changes;
518 vd->e[REGNO (new_rtx)].debug_insn_changes = change;
519 ++vd->n_debug_insn_changes;
539 rtx_insn *insn, struct value_data *vd)
640 mode, as, insn, vd);
645 mode, as, insn, vd);
658 return replace_oldest_value_mem (x, insn, vd);
661 return replace_oldest_value_reg (loc, cl, insn, vd);
672 insn, vd);
676 mode, as, insn, vd);
685 replace_oldest_value_mem (rtx x, rtx_insn *insn, struct value_data *vd)
696 insn, vd);
703 apply_debug_insn_changes (struct value_data *vd, unsigned int regno)
706 rtx_insn *last_insn = vd->e[regno].debug_insn_changes->insn;
708 for (change = vd->e[regno].debug_insn_changes;
729 struct value_data *const vd = (struct value_data *) data;
737 if (vd->e[regno].debug_insn_changes)
739 apply_debug_insn_changes (vd, regno);
740 free_debug_insn_changes (vd, regno);
746 /* Apply clobbers of INSN in PATTERN and C_I_F_U to value_data VD. */
749 kill_clobbered_values (rtx_insn *insn, struct value_data *vd)
751 note_stores (insn, kill_clobbered_value, vd);
757 copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
780 ADDR_SPACE_GENERIC, insn, vd);
796 SET_DEST (set), vd);
798 SET_SRC (set), vd);
845 if (vd->n_debug_insn_changes)
846 note_uses (&PATTERN (insn), cprop_find_used_regs, vd);
851 kill_value (recog_data.operand[i], vd);
856 kill_clobbered_values (insn, vd);
860 kill_autoinc_value (insn, vd);
865 kill_value (recog_data.operand[i], vd);
873 kill_value (XEXP (link, 0), vd);
903 if (mode != vd->e[regno].mode)
906 > hard_regno_nregs (regno, vd->e[regno].mode))
911 if (REG_NREGS (src) < hard_regno_nregs (regno, vd->e[regno].mode)
913 vd->e[regno].mode), 0U))
922 src, vd);
940 for (i = vd->e[regno].oldest_regno; i != regno;
941 i = vd->e[i].next_regno)
943 new_rtx = maybe_mode_change (vd->e[i].mode, vd->e[regno].mode,
1009 insn, vd);
1014 insn, vd);
1017 insn, vd);
1021 insn, vd);
1059 if (vd->n_debug_insn_changes)
1060 note_uses (&PATTERN (insn), cprop_find_used_regs, vd);
1064 ksvd.vd = vd;
1081 kill_value (dest, vd);
1082 set_value_regno (REGNO (dest), GET_MODE (dest), vd);
1083 copy_value (dest, SET_SRC (x), vd);
1093 if (vd->e[regno].mode != VOIDmode
1094 && callee_abi.clobbers_reg_p (vd->e[regno].mode, regno)
1096 kill_value_regno (regno, 1, vd);
1103 kill_clobbered_values (insn, vd);
1116 vd->e[REGNO (SET_DEST (set))].mode))
1138 copy_value (SET_DEST (set), SET_SRC (set), vd);
1152 debug_value_data (struct value_data *vd)
1160 if (vd->e[i].oldest_regno == i)
1162 if (vd->e[i].mode == VOIDmode)
1164 if (vd->e[i].next_regno != INVALID_REGNUM)
1166 i, vd->e[i].next_regno);
1171 fprintf (stderr, "[%u %s] ", i, GET_MODE_NAME (vd->e[i].mode));
1173 for (j = vd->e[i].next_regno;
1175 j = vd->e[j].next_regno)
1183 if (vd->e[j].oldest_regno != i)
1186 j, vd->e[j].oldest_regno);
1190 fprintf (stderr, "[%u %s] ", j, GET_MODE_NAME (vd->e[j].mode));
1197 && (vd->e[i].mode != VOIDmode
1198 || vd->e[i].oldest_regno != i
1199 || vd->e[i].next_regno != INVALID_REGNUM))
1201 i, GET_MODE_NAME (vd->e[i].mode), vd->e[i].oldest_regno,
1202 vd->e[i].next_regno);
1215 struct value_data *vd;
1216 vd = XNEWVEC (struct value_data, 1);
1217 init_value_data (vd);
1220 copyprop_hardreg_forward_1 (bb, vd);
1221 free (vd);
1226 validate_value_data (struct value_data *vd)
1234 if (vd->e[i].oldest_regno == i)
1236 if (vd->e[i].mode == VOIDmode)
1238 if (vd->e[i].next_regno != INVALID_REGNUM)
1240 __func__, i, vd->e[i].next_regno);
1246 for (j = vd->e[i].next_regno;
1248 j = vd->e[j].next_regno)
1253 if (vd->e[j].oldest_regno != i)
1255 __func__, j, vd->e[j].oldest_regno);
1263 && (vd->e[i].mode != VOIDmode
1264 || vd->e[i].oldest_regno != i
1265 || vd->e[i].next_regno != INVALID_REGNUM))
1268 GET_MODE_NAME (vd->e[i].mode), vd->e[i].oldest_regno,
1269 vd->e[i].next_regno);