re PR rtl-optimization/72778 (internal compiler error: in create_pre_exit, at mode-switching.c:451)
2016-08-02 Vladimir Makarov <vmakarov@redhat.com> PR middle-end/72778 * lra-spills.c (regno_in_use_p): New. (lra_final_code_change): Use it. From-SVN: r239000
This commit is contained in:
parent
589a30d1a4
commit
00803109af
2 changed files with 22 additions and 6 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-08-02 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR middle-end/72778
|
||||
* lra-spills.c (regno_in_use_p): New.
|
||||
(lra_final_code_change): Use it.
|
||||
|
||||
2016-08-02 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/69847
|
||||
|
|
|
@ -686,6 +686,20 @@ return_regno_p (unsigned int regno)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* Return true if REGNO is one of subsequent USE after INSN. */
|
||||
static bool
|
||||
regno_in_use_p (rtx_insn *insn, unsigned int regno)
|
||||
{
|
||||
while ((insn = next_nondebug_insn (insn)) != NULL_RTX
|
||||
&& INSN_P (insn) && GET_CODE (PATTERN (insn)) == USE)
|
||||
{
|
||||
if (REG_P (XEXP (PATTERN (insn), 0))
|
||||
&& regno == REGNO (XEXP (PATTERN (insn), 0)))
|
||||
return TRUE;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Final change of pseudos got hard registers into the corresponding
|
||||
hard registers and removing temporary clobbers. */
|
||||
void
|
||||
|
@ -693,7 +707,7 @@ lra_final_code_change (void)
|
|||
{
|
||||
int i, hard_regno;
|
||||
basic_block bb;
|
||||
rtx_insn *insn, *curr, *next_insn;
|
||||
rtx_insn *insn, *curr;
|
||||
int max_regno = max_reg_num ();
|
||||
|
||||
for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
|
||||
|
@ -728,11 +742,7 @@ lra_final_code_change (void)
|
|||
&& REG_P (SET_SRC (pat)) && REG_P (SET_DEST (pat))
|
||||
&& REGNO (SET_SRC (pat)) == REGNO (SET_DEST (pat))
|
||||
&& (! return_regno_p (REGNO (SET_SRC (pat)))
|
||||
|| (next_insn = next_nondebug_insn (insn)) == NULL_RTX
|
||||
|| ! INSN_P (next_insn)
|
||||
|| GET_CODE (PATTERN (next_insn)) != USE
|
||||
|| ! REG_P (XEXP (PATTERN (next_insn), 0))
|
||||
|| REGNO (SET_SRC (pat)) != REGNO (XEXP (PATTERN (next_insn), 0))))
|
||||
|| ! regno_in_use_p (insn, REGNO (SET_SRC (pat)))))
|
||||
{
|
||||
lra_invalidate_insn_data (insn);
|
||||
delete_insn (insn);
|
||||
|
|
Loading…
Add table
Reference in a new issue