From: vmakarov Date: Thu, 9 Sep 2010 13:53:32 +0000 (+0000) Subject: 2010-09-09 Vladimir Makarov X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4fe288045d740f89abdf200d6015db1014d28005;p=thirdparty%2Fgcc.git 2010-09-09 Vladimir Makarov PR middle-end/44554 * ira.c (ira): Switch off sharing spill slots if setjmp is called. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164102 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f407781ca46a..1a4cab94043d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-09-09 Vladimir Makarov + + PR middle-end/44554 + * ira.c (ira): Switch off sharing spill slots if setjmp is called. + 2010-09-09 Vladimir Makarov PR middle-end/40386 diff --git a/gcc/ira.c b/gcc/ira.c index a38808ce59d8..e4dd2d31bb5b 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -3178,9 +3178,12 @@ ira (FILE *f) ira_assert (ira_conflicts_p || !loops_p); saved_flag_ira_share_spill_slots = flag_ira_share_spill_slots; - if (too_high_register_pressure_p ()) + if (too_high_register_pressure_p () || cfun->calls_setjmp) /* It is just wasting compiler's time to pack spilled pseudos into - stack slots in this case -- prohibit it. */ + stack slots in this case -- prohibit it. We also do this if + there is setjmp call because a variable not modified between + setjmp and longjmp the compiler is required to preserve its + value and sharing slots does not guarantee it. */ flag_ira_share_spill_slots = FALSE; ira_color ();