mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-30 10:14:53 +08:00
regrename.c (scan_rtx_reg): Terminate the chain rather than abort on mark_read with NO_REGS.
* regrename.c (scan_rtx_reg): Terminate the chain rather than abort on mark_read with NO_REGS. From-SVN: r37644
This commit is contained in:
parent
4dc1635549
commit
a125d8555a
@ -1,3 +1,8 @@
|
||||
2000-11-21 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* regrename.c (scan_rtx_reg): Terminate the chain rather than
|
||||
abort on mark_read with NO_REGS.
|
||||
|
||||
2000-11-21 Mike Stump <mrs@wrs.com>
|
||||
|
||||
* fixinc/fixtests.c (TEST_FOR_FIX_PROC_HEAD): Fix to allow
|
||||
|
@ -325,26 +325,36 @@ scan_rtx_reg (insn, loc, class, action, type)
|
||||
|
||||
if (regno + nregs <= this_regno
|
||||
|| this_regno + this_nregs <= regno)
|
||||
p = &this->next_chain;
|
||||
else if (action == mark_read)
|
||||
{
|
||||
p = &this->next_chain;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (action == mark_read)
|
||||
{
|
||||
if (! exact_match)
|
||||
abort ();
|
||||
if (class == NO_REGS)
|
||||
abort ();
|
||||
|
||||
this = (struct du_chain *)
|
||||
obstack_alloc (&rename_obstack, sizeof (struct du_chain));
|
||||
this->next_use = *p;
|
||||
this->next_chain = (*p)->next_chain;
|
||||
this->loc = loc;
|
||||
this->insn = insn;
|
||||
this->class = class;
|
||||
this->need_caller_save_reg = 0;
|
||||
*p = this;
|
||||
return;
|
||||
/* ??? Class NO_REGS can happen if the md file makes use of
|
||||
EXTRA_CONSTRAINTS to match registers. Which is arguably
|
||||
wrong, but there we are. Since we know not what this may
|
||||
be replaced with, terminate the chain. */
|
||||
if (class != NO_REGS)
|
||||
{
|
||||
this = (struct du_chain *)
|
||||
obstack_alloc (&rename_obstack, sizeof (struct du_chain));
|
||||
this->next_use = *p;
|
||||
this->next_chain = (*p)->next_chain;
|
||||
this->loc = loc;
|
||||
this->insn = insn;
|
||||
this->class = class;
|
||||
this->need_caller_save_reg = 0;
|
||||
*p = this;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (action != terminate_overlapping_read || ! exact_match)
|
||||
|
||||
if (action != terminate_overlapping_read || ! exact_match)
|
||||
{
|
||||
struct du_chain *next = this->next_chain;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user