From: Joern Rennecke Date: Sat, 27 Jul 2013 18:41:49 +0000 (+0000) Subject: epiphany.c (epiphany_compute_frame_size): Also reserve space for saving UNKNOWN_REGNU... X-Git-Tag: releases/gcc-4.9.0~4806 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4c97f1cc9dd9543a266e4f258c811cb4577f4fc5;p=thirdparty%2Fgcc.git epiphany.c (epiphany_compute_frame_size): Also reserve space for saving UNKNOWN_REGNUM for leaf functions. * config/epiphany/epiphany.c (epiphany_compute_frame_size): Also reserve space for saving UNKNOWN_REGNUM for leaf functions. From-SVN: r201287 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c3b52cd3ce42..db8db6f894a1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-07-27 Joern Rennecke + + * config/epiphany/epiphany.c (epiphany_compute_frame_size): + Also reserve space for saving UNKNOWN_REGNUM for leaf functions. + 2013-07-26 Cary Coutant * dwarf2out.c (die_checksum_ordered): Don't include template diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c index 3b6f63ab975d..1dcdc4b38085 100644 --- a/gcc/config/epiphany/epiphany.c +++ b/gcc/config/epiphany/epiphany.c @@ -884,6 +884,11 @@ struct epiphany_frame_info int stld_sz; /* Current load/store data size for offset adjustment. */ int need_fp; /* value to override "frame_pointer_needed */ + /* FIRST_SLOT is the slot that is saved first, at the very start of + the frame, with a POST_MODIFY to allocate the frame, if the size fits, + or at least the parm and register save areas, otherwise. + In the case of a large frame, LAST_SLOT is the slot that is saved last, + with a POST_MODIFY to allocate the rest of the frame. */ int first_slot, last_slot, first_slot_offset, last_slot_offset; int first_slot_size; int small_threshold; @@ -1069,7 +1074,10 @@ epiphany_compute_frame_size (int size /* # of var. bytes allocated. */) to be a lot of code complexity for little gain. */ || (reg_size > 8 && optimize)) reg_size = EPIPHANY_STACK_ALIGN (reg_size); - if (total_size + reg_size <= (unsigned) epiphany_stack_offset + if (((total_size + reg_size + /* Reserve space for UNKNOWN_REGNUM. */ + + EPIPHANY_STACK_ALIGN (4)) + <= (unsigned) epiphany_stack_offset) && !interrupt_p && crtl->is_leaf && !frame_pointer_needed) { @@ -1108,7 +1116,7 @@ epiphany_compute_frame_size (int size /* # of var. bytes allocated. */) if (total_size + reg_size <= (unsigned) epiphany_stack_offset) { gcc_assert (first_slot < 0); - gcc_assert (reg_size == 0); + gcc_assert (reg_size == 0 || reg_size == epiphany_stack_offset); last_slot_offset = EPIPHANY_STACK_ALIGN (total_size + reg_size); } else