* lra-constraints.c (need_for_all_save_p): Use macro
HARD_REGNO_CALL_PART_CLOBBERED.
* lra-lives.c (check_pseudos_live_through_calls): Use the macro to
set up pseudo conflict hard regs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202721
138bc75d-0d04-0410-961f-
82ee72b054a4
+2013-09-18 Vladimir Makarov <vmakarov@redhat.com>
+
+ * lra-constraints.c (need_for_all_save_p): Use macro
+ HARD_REGNO_CALL_PART_CLOBBERED.
+ * lra-lives.c (check_pseudos_live_through_calls): Use the macro to
+ set up pseudo conflict hard regs.
+
2013-09-18 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/58452
return (usage_insns[regno].calls_num < calls_num
&& (overlaps_hard_reg_set_p
(call_used_reg_set,
- PSEUDO_REGNO_MODE (regno), reg_renumber[regno])));
+ PSEUDO_REGNO_MODE (regno), reg_renumber[regno])
+ || HARD_REGNO_CALL_PART_CLOBBERED (reg_renumber[regno],
+ PSEUDO_REGNO_MODE (regno))));
}
/* Global registers occurring in the current EBB. */
static inline void
check_pseudos_live_through_calls (int regno)
{
+ int hr;
+
if (! sparseset_bit_p (pseudos_live_through_calls, regno))
return;
sparseset_clear_bit (pseudos_live_through_calls, regno);
IOR_HARD_REG_SET (lra_reg_info[regno].conflict_hard_regs,
call_used_reg_set);
+
+ for (hr = 0; hr < FIRST_PSEUDO_REGISTER; hr++)
+ if (HARD_REGNO_CALL_PART_CLOBBERED (hr, PSEUDO_REGNO_MODE (regno)))
+ SET_HARD_REG_BIT (lra_reg_info[regno].conflict_hard_regs, hr);
#ifdef ENABLE_CHECKING
lra_reg_info[regno].call_p = true;
#endif