ia64.c (ia64_compute_frame_size): Allocate the scratch area if the function allocates dynamic stack space.

* config/ia64/ia64.c (ia64_compute_frame_size): Allocate the scratch
	area if the function allocates dynamic stack space.
	(ia64_initial_elimination_offset): Adjust offsets to above change.

From-SVN: r194122
This commit is contained in:
Eric Botcazou 2012-12-04 09:07:45 +00:00 committed by Eric Botcazou
parent ee88f662f7
commit b38fd39644
2 changed files with 16 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2012-12-03 Eric Botcazou <ebotcazou@adacore.com>
* config/ia64/ia64.c (ia64_compute_frame_size): Allocate the scratch
area if the function allocates dynamic stack space.
(ia64_initial_elimination_offset): Adjust offsets to above change.
2012-12-03 Richard Biener <rguenther@suse.de>
Backport from mainline

View File

@ -2943,8 +2943,10 @@ ia64_compute_frame_size (HOST_WIDE_INT size)
/* We always use the 16-byte scratch area provided by the caller, but
if we are a leaf function, there's no one to which we need to provide
a scratch area. */
if (current_function_is_leaf)
a scratch area. However, if the function allocates dynamic stack space,
the dynamic offset is computed early and contains STACK_POINTER_OFFSET,
so we need to cope. */
if (current_function_is_leaf && !cfun->calls_alloca)
total_size = MAX (0, total_size - 16);
current_frame_info.total_size = total_size;
@ -2978,18 +2980,15 @@ ia64_initial_elimination_offset (int from, int to)
switch (to)
{
case HARD_FRAME_POINTER_REGNUM:
if (current_function_is_leaf)
offset = -current_frame_info.total_size;
else
offset = -(current_frame_info.total_size
- crtl->outgoing_args_size - 16);
offset = -current_frame_info.total_size;
if (!current_function_is_leaf || cfun->calls_alloca)
offset += 16 + crtl->outgoing_args_size;
break;
case STACK_POINTER_REGNUM:
if (current_function_is_leaf)
offset = 0;
else
offset = 16 + crtl->outgoing_args_size;
offset = 0;
if (!current_function_is_leaf || cfun->calls_alloca)
offset += 16 + crtl->outgoing_args_size;
break;
default: