diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2009-01-21 20:18:03 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2009-01-21 20:18:03 +0000 |
commit | 1240d76e00f8d9fdb7a38088db9d10f16d4c01d6 (patch) | |
tree | 2f02716dbcc337741c18718ad5f3ac83673f72de | |
parent | b8a1087d675032e053fb105871bd1811a62d1519 (diff) | |
download | gcc-1240d76e00f8d9fdb7a38088db9d10f16d4c01d6.zip gcc-1240d76e00f8d9fdb7a38088db9d10f16d4c01d6.tar.gz gcc-1240d76e00f8d9fdb7a38088db9d10f16d4c01d6.tar.bz2 |
re PR middle-end/38587 (IRA doesn't preserve local variables after setjmp)
2009-01-21 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/38587
* ira-color.c (coalesce_spill_slots): Don't coalesce allocnos
crossing setjmps.
From-SVN: r143554
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ira-color.c | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1fba853..74824ec 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 f1adb1d..31f4862 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)) |