regrename.c (scan_rtx_reg): Handle the case where we write to an open chain in a smaller mode without...
* regrename.c (scan_rtx_reg): Handle the case where we write to an open chain in a smaller mode without failing the entire block. From-SVN: r175225
This commit is contained in:
parent
222d3b39a6
commit
998c75b661
|
@ -1,3 +1,8 @@
|
||||||
|
2011-06-20 Bernd Schmidt <bernds@codesourcery.com>
|
||||||
|
|
||||||
|
* regrename.c (scan_rtx_reg): Handle the case where we write to an
|
||||||
|
open chain in a smaller mode without failing the entire block.
|
||||||
|
|
||||||
2011-06-20 H.J. Lu <hongjiu.lu@intel.com>
|
2011-06-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR middle-end/47725
|
PR middle-end/47725
|
||||||
|
|
|
@ -721,25 +721,34 @@ scan_rtx_reg (rtx insn, rtx *loc, enum reg_class cl, enum scan_actions action,
|
||||||
In either case, we remove this element from open_chains. */
|
In either case, we remove this element from open_chains. */
|
||||||
|
|
||||||
if ((action == terminate_dead || action == terminate_write)
|
if ((action == terminate_dead || action == terminate_write)
|
||||||
&& superset)
|
&& (superset || subset))
|
||||||
{
|
{
|
||||||
unsigned nregs;
|
unsigned nregs;
|
||||||
|
|
||||||
head->terminated = 1;
|
head->terminated = 1;
|
||||||
|
if (subset && !superset)
|
||||||
|
head->cannot_rename = 1;
|
||||||
head->next_chain = closed_chains;
|
head->next_chain = closed_chains;
|
||||||
closed_chains = head;
|
closed_chains = head;
|
||||||
bitmap_clear_bit (&open_chains_set, head->id);
|
bitmap_clear_bit (&open_chains_set, head->id);
|
||||||
|
|
||||||
nregs = head->nregs;
|
nregs = head->nregs;
|
||||||
while (nregs-- > 0)
|
while (nregs-- > 0)
|
||||||
CLEAR_HARD_REG_BIT (live_in_chains, head->regno + nregs);
|
{
|
||||||
|
CLEAR_HARD_REG_BIT (live_in_chains, head->regno + nregs);
|
||||||
|
if (subset && !superset
|
||||||
|
&& (head->regno + nregs < this_regno
|
||||||
|
|| head->regno + nregs >= this_regno + this_nregs))
|
||||||
|
SET_HARD_REG_BIT (live_hard_regs, head->regno + nregs);
|
||||||
|
}
|
||||||
|
|
||||||
*p = next;
|
*p = next;
|
||||||
if (dump_file)
|
if (dump_file)
|
||||||
fprintf (dump_file,
|
fprintf (dump_file,
|
||||||
"Closing chain %s (%d) at insn %d (%s)\n",
|
"Closing chain %s (%d) at insn %d (%s%s)\n",
|
||||||
reg_names[head->regno], head->id, INSN_UID (insn),
|
reg_names[head->regno], head->id, INSN_UID (insn),
|
||||||
scan_actions_name[(int) action]);
|
scan_actions_name[(int) action],
|
||||||
|
superset ? ", superset" : subset ? ", subset" : "");
|
||||||
}
|
}
|
||||||
else if (action == terminate_dead || action == terminate_write)
|
else if (action == terminate_dead || action == terminate_write)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue