mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-24 01:39:20 +08:00
re PR target/28672 (Gcc went into infinite loop when building libstdc++)
2006-09-11 Alexandre Oliva <aoliva@redhat.com> PR target/28672 * var-tracking.c (dump_dataflow_set): Start dumping at register zero. (clobber_variable_part): Kill only the variable part in registers holding it, leaving other variables alone. From-SVN: r116859
This commit is contained in:
parent
b7886f1470
commit
d306730315
@ -1,3 +1,11 @@
|
|||||||
|
2006-09-11 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
|
PR target/28672
|
||||||
|
* var-tracking.c (dump_dataflow_set): Start dumping at
|
||||||
|
register zero.
|
||||||
|
(clobber_variable_part): Kill only the variable part in
|
||||||
|
registers holding it, leaving other variables alone.
|
||||||
|
|
||||||
2006-09-11 Josh Triplett <josh@freedesktop.org>
|
2006-09-11 Josh Triplett <josh@freedesktop.org>
|
||||||
|
|
||||||
* doc/extend.texi (Other Builtins): Actually use the macro
|
* doc/extend.texi (Other Builtins): Actually use the macro
|
||||||
|
@ -1960,7 +1960,7 @@ dump_dataflow_set (dataflow_set *set)
|
|||||||
|
|
||||||
fprintf (dump_file, "Stack adjustment: " HOST_WIDE_INT_PRINT_DEC "\n",
|
fprintf (dump_file, "Stack adjustment: " HOST_WIDE_INT_PRINT_DEC "\n",
|
||||||
set->stack_adjust);
|
set->stack_adjust);
|
||||||
for (i = 1; i < FIRST_PSEUDO_REGISTER; i++)
|
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||||
{
|
{
|
||||||
if (set->regs[i])
|
if (set->regs[i])
|
||||||
{
|
{
|
||||||
@ -2212,8 +2212,32 @@ clobber_variable_part (dataflow_set *set, rtx loc, tree decl,
|
|||||||
for (node = next; node; node = next)
|
for (node = next; node; node = next)
|
||||||
{
|
{
|
||||||
next = node->next;
|
next = node->next;
|
||||||
if (REG_P (node->loc) && node->loc != loc)
|
if (node->loc != loc)
|
||||||
var_reg_delete (set, node->loc, false);
|
{
|
||||||
|
if (REG_P (node->loc))
|
||||||
|
{
|
||||||
|
attrs anode, anext;
|
||||||
|
attrs *anextp;
|
||||||
|
|
||||||
|
/* Remove the variable part from the register's
|
||||||
|
list, but preserve any other variable parts
|
||||||
|
that might be regarded as live in that same
|
||||||
|
register. */
|
||||||
|
anextp = &set->regs[REGNO (node->loc)];
|
||||||
|
for (anode = *anextp; anode; anode = anext)
|
||||||
|
{
|
||||||
|
anext = anode->next;
|
||||||
|
if (anode->decl == decl
|
||||||
|
&& anode->offset == offset)
|
||||||
|
{
|
||||||
|
pool_free (attrs_pool, anode);
|
||||||
|
*anextp = anext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_variable_part (set, node->loc, decl, offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user