Commit 8589ae15 by Pat Haugen Committed by David Edelsohn

ra-build.c (conflicts_between_webs): For webs that cross a call add conflicts to…

ra-build.c (conflicts_between_webs): For webs that cross a call add conflicts to regs_invalidated_by_call.

2004-08-03  Pat Haugen  <pthaugen@us.ibm.com>

        * ra-build.c (conflicts_between_webs): For webs that cross a call add
        conflicts to regs_invalidated_by_call.

From-SVN: r85482
parent 8ee6eb4e
2004-08-03 Pat Haugen <pthaugen@us.ibm.com>
* ra-build.c (conflicts_between_webs): For webs that cross a call add
conflicts to regs_invalidated_by_call.
2004-08-03 Paul Brook <paul@codesourcery.com> 2004-08-03 Paul Brook <paul@codesourcery.com>
* config/arm/arm.c (emit_sfm): Only emit a single frame adjustment. * config/arm/arm.c (emit_sfm): Only emit a single frame adjustment.
......
...@@ -2176,9 +2176,7 @@ static void ...@@ -2176,9 +2176,7 @@ static void
conflicts_between_webs (struct df *df) conflicts_between_webs (struct df *df)
{ {
unsigned int i; unsigned int i;
#ifdef STACK_REGS
struct dlist *d; struct dlist *d;
#endif
bitmap ignore_defs = BITMAP_XMALLOC (); bitmap ignore_defs = BITMAP_XMALLOC ();
unsigned int have_ignored; unsigned int have_ignored;
unsigned int *pass_cache = xcalloc (num_webs, sizeof (int)); unsigned int *pass_cache = xcalloc (num_webs, sizeof (int));
...@@ -2253,18 +2251,24 @@ conflicts_between_webs (struct df *df) ...@@ -2253,18 +2251,24 @@ conflicts_between_webs (struct df *df)
free (pass_cache); free (pass_cache);
BITMAP_XFREE (ignore_defs); BITMAP_XFREE (ignore_defs);
#ifdef STACK_REGS
/* Pseudos can't go in stack regs if they are live at the beginning of
a block that is reached by an abnormal edge. */
for (d = WEBS(INITIAL); d; d = d->next) for (d = WEBS(INITIAL); d; d = d->next)
{ {
struct web *web = DLIST_WEB (d); struct web *web = DLIST_WEB (d);
int j; int j;
if (web->crosses_call)
for (j = 0; j < FIRST_PSEUDO_REGISTER; j++)
if (TEST_HARD_REG_BIT (regs_invalidated_by_call, j))
record_conflict (web, hardreg2web[j]);
#ifdef STACK_REGS
/* Pseudos can't go in stack regs if they are live at the beginning of
a block that is reached by an abnormal edge. */
if (web->live_over_abnormal) if (web->live_over_abnormal)
for (j = FIRST_STACK_REG; j <= LAST_STACK_REG; j++) for (j = FIRST_STACK_REG; j <= LAST_STACK_REG; j++)
record_conflict (web, hardreg2web[j]); record_conflict (web, hardreg2web[j]);
}
#endif #endif
}
} }
/* Remember that a web was spilled, and change some characteristics /* Remember that a web was spilled, and change some characteristics
......
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