re PR target/32338 (Error: .prologue within prologue)

PR target/32338
	* config/ia64/ia64.c (ia64_expand_epilogue): Emit blockage
	before sp restoration even when total_size is 0, but
	frame_pointer_needed.

	* gcc.dg/pr32338-1.c: New test.
	* gcc.dg/pr32338-2.c: New test.

From-SVN: r128446
This commit is contained in:
Jakub Jelinek 2007-09-12 23:19:51 +02:00 committed by Jakub Jelinek
parent 901e210ea1
commit c93646bd3c
5 changed files with 110 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2007-09-12 Jakub Jelinek <jakub@redhat.com>
PR target/32338
* config/ia64/ia64.c (ia64_expand_epilogue): Emit blockage
before sp restoration even when total_size is 0, but
frame_pointer_needed.
2007-09-12 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/xtensa.c (machine_function): Add vararg_a7_copy.

View File

@ -3437,7 +3437,9 @@ ia64_expand_epilogue (int sibcall_p)
finish_spill_pointers ();
if (current_frame_info.total_size || cfun->machine->ia64_eh_epilogue_sp)
if (current_frame_info.total_size
|| cfun->machine->ia64_eh_epilogue_sp
|| frame_pointer_needed)
{
/* ??? At this point we must generate a magic insn that appears to
modify the spill iterators, the stack pointer, and the frame

View File

@ -1,3 +1,9 @@
2007-09-12 Jakub Jelinek <jakub@redhat.com>
PR target/32338
* gcc.dg/pr32338-1.c: New test.
* gcc.dg/pr32338-2.c: New test.
2007-09-12 Bob Wilson <bob.wilson@acm.org>
* lib/target-supports.exp (check_effective_target_sync_int_long):

View File

@ -0,0 +1,47 @@
/* PR target/32338 */
/* { dg-do link } */
/* { dg-options "-O2 -fno-omit-frame-pointer" } */
struct S
{
};
int
__attribute__((noinline))
foo (struct S *d)
{
return 2;
}
int
__attribute__((noinline))
bar (struct S *d)
{
return 4;
}
int
__attribute__((noinline))
fnl (char const *q)
{
return __builtin_strlen (q);
}
int
__attribute__((noinline))
baz (struct S *d, char const *q)
{
unsigned int len;
len = fnl (q);
if (len > 512)
return bar (d);
return foo (d);
}
int
main (int argc, char *argv[])
{
if (argc > 30)
return baz ((void *) 0, "abcde");
return 0;
}

View File

@ -0,0 +1,47 @@
/* PR target/32338 */
/* { dg-do link } */
/* { dg-options "-O2 -fno-omit-frame-pointer" } */
struct S
{
};
int
__attribute__((noinline))
foo (void)
{
return 2;
}
int
__attribute__((noinline))
bar (void)
{
return 4;
}
int
__attribute__((noinline))
fnl (void)
{
return 6;
}
int
__attribute__((noinline))
baz (void)
{
unsigned int len;
len = fnl ();
if (len > 512)
return bar ();
return foo ();
}
int
main (int argc, char *argv[])
{
if (argc > 30)
return baz ();
return 0;
}