summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>2009-01-21 20:18:03 +0000
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>2009-01-21 20:18:03 +0000
commit8aad8efdf407a45f9261f1e3cbcc0f62469c360c (patch)
tree2f02716dbcc337741c18718ad5f3ac83673f72de
parent8f057ffceded0312dfc15dca13f770be0ed46b19 (diff)
downloadppe42-gcc-8aad8efdf407a45f9261f1e3cbcc0f62469c360c.tar.gz
ppe42-gcc-8aad8efdf407a45f9261f1e3cbcc0f62469c360c.zip
2009-01-21 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/38587 * ira-color.c (coalesce_spill_slots): Don't coalesce allocnos crossing setjmps. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@143554 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ira-color.c3
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1fba853ce67..74824ec9ebd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-21 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR middle-end/38587
+ * ira-color.c (coalesce_spill_slots): Don't coalesce allocnos
+ crossing setjmps.
+
2009-01-21 Dave Korn <dave.korn.cygwin@gmail.com>
PR bootstrap/37660
diff --git a/gcc/ira-color.c b/gcc/ira-color.c
index f1adb1da06a..31f48623bbd 100644
--- a/gcc/ira-color.c
+++ b/gcc/ira-color.c
@@ -2537,6 +2537,7 @@ coalesce_spill_slots (ira_allocno_t *spilled_coalesced_allocnos, int num)
int i, j, n, last_coalesced_allocno_num;
ira_allocno_t allocno, a;
bool merged_p = false;
+ bitmap set_jump_crosses = regstat_get_setjmp_crosses ();
slot_coalesced_allocnos_live_ranges
= (allocno_live_range_t *) ira_allocate (sizeof (allocno_live_range_t)
@@ -2550,6 +2551,7 @@ coalesce_spill_slots (ira_allocno_t *spilled_coalesced_allocnos, int num)
{
allocno = spilled_coalesced_allocnos[i];
if (ALLOCNO_FIRST_COALESCED_ALLOCNO (allocno) != allocno
+ || bitmap_bit_p (set_jump_crosses, ALLOCNO_REGNO (allocno))
|| (ALLOCNO_REGNO (allocno) < ira_reg_equiv_len
&& (ira_reg_equiv_const[ALLOCNO_REGNO (allocno)] != NULL_RTX
|| ira_reg_equiv_invariant_p[ALLOCNO_REGNO (allocno)])))
@@ -2559,6 +2561,7 @@ coalesce_spill_slots (ira_allocno_t *spilled_coalesced_allocnos, int num)
a = spilled_coalesced_allocnos[j];
n = ALLOCNO_TEMP (a);
if (ALLOCNO_FIRST_COALESCED_ALLOCNO (a) == a
+ && ! bitmap_bit_p (set_jump_crosses, ALLOCNO_REGNO (a))
&& (ALLOCNO_REGNO (a) >= ira_reg_equiv_len
|| (! ira_reg_equiv_invariant_p[ALLOCNO_REGNO (a)]
&& ira_reg_equiv_const[ALLOCNO_REGNO (a)] == NULL_RTX))
OpenPOWER on IntegriCloud