Commit 7d2a8452 by Alexandre Oliva Committed by Jakub Jelinek

var-tracking.c (var_reg_delete): Don't delete the association between REGs and…

var-tracking.c (var_reg_delete): Don't delete the association between REGs and values or one-part variables if...

	* var-tracking.c (var_reg_delete): Don't delete the association
	between REGs and values or one-part variables if the register
	isn't clobbered.

From-SVN: r155918
parent d17af147
2010-01-14 Alexandre Oliva <aoliva@redhat.com>
* var-tracking.c (var_reg_delete): Don't delete the association
between REGs and values or one-part variables if the register
isn't clobbered.
2010-01-14 Jakub Jelinek <jakub@redhat.com> 2010-01-14 Jakub Jelinek <jakub@redhat.com>
PR debug/42657 PR debug/42657
......
...@@ -1401,14 +1401,15 @@ var_reg_delete_and_set (dataflow_set *set, rtx loc, bool modify, ...@@ -1401,14 +1401,15 @@ var_reg_delete_and_set (dataflow_set *set, rtx loc, bool modify,
var_reg_set (set, loc, initialized, set_src); var_reg_set (set, loc, initialized, set_src);
} }
/* Delete current content of register LOC in dataflow set SET. If /* Delete the association of register LOC in dataflow set SET with any
CLOBBER is true, also delete any other live copies of the same variables that aren't onepart. If CLOBBER is true, also delete any
variable part. */ other live copies of the same variable part, and delete the
association with onepart dvs too. */
static void static void
var_reg_delete (dataflow_set *set, rtx loc, bool clobber) var_reg_delete (dataflow_set *set, rtx loc, bool clobber)
{ {
attrs *reg = &set->regs[REGNO (loc)]; attrs *nextp = &set->regs[REGNO (loc)];
attrs node, next; attrs node, next;
if (clobber) if (clobber)
...@@ -1421,13 +1422,18 @@ var_reg_delete (dataflow_set *set, rtx loc, bool clobber) ...@@ -1421,13 +1422,18 @@ var_reg_delete (dataflow_set *set, rtx loc, bool clobber)
clobber_variable_part (set, NULL, dv_from_decl (decl), offset, NULL); clobber_variable_part (set, NULL, dv_from_decl (decl), offset, NULL);
} }
for (node = *reg; node; node = next) for (node = *nextp; node; node = next)
{ {
next = node->next; next = node->next;
delete_variable_part (set, node->loc, node->dv, node->offset); if (clobber || !dv_onepart_p (node->dv))
pool_free (attrs_pool, node); {
delete_variable_part (set, node->loc, node->dv, node->offset);
pool_free (attrs_pool, node);
*nextp = next;
}
else
nextp = &node->next;
} }
*reg = NULL;
} }
/* Delete content of register with number REGNO in dataflow set SET. */ /* Delete content of register with number REGNO in dataflow set SET. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment