re PR target/67770 (i386: -fshrink-wrap can interact badly with trampolines)

PR target/67770
	* config/i386/i386.md (simple_return): Disable if
	ix86_static_chain_on_stack is true.

	* gcc.target/i386/pr67770.c: New test.

From-SVN: r230593
This commit is contained in:
Jakub Jelinek 2015-11-19 09:30:19 +01:00 committed by Jakub Jelinek
parent 46ce03de3a
commit 397d0df98c
4 changed files with 56 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2015-11-19 Jakub Jelinek <jakub@redhat.com>
PR target/67770
* config/i386/i386.md (simple_return): Disable if
ix86_static_chain_on_stack is true.
2015-11-19 Richard Sandiford <richard.sandiford@arm.com>
PR bootstrap/68393

View File

@ -12203,10 +12203,14 @@
;; We need to disable this for TARGET_SEH, as otherwise
;; shrink-wrapped prologue gets enabled too. This might exceed
;; the maximum size of prologue in unwind information.
;; Also disallow shrink-wrapping if using stack slot to pass the
;; static chain pointer - the first instruction has to be pushl %esi
;; and it can't be moved around, as we use alternate entry points
;; in that case.
(define_expand "simple_return"
[(simple_return)]
"!TARGET_SEH"
"!TARGET_SEH && !ix86_static_chain_on_stack"
{
if (crtl->args.pops_args)
{

View File

@ -1,3 +1,8 @@
2015-11-19 Jakub Jelinek <jakub@redhat.com>
PR target/67770
* gcc.target/i386/pr67770.c: New test.
2015-11-18 Jeff Law <law@redhat.com>
PR tree-optimization/68198

View File

@ -0,0 +1,40 @@
/* PR target/67770 */
/* { dg-do run { target ia32 } } */
/* { dg-require-effective-target trampolines } */
/* { dg-options "-O2" } */
#ifndef NO_TRAMPOLINES
__attribute__ ((noinline)) void
foo (int i, void (* __attribute__ ((regparm (3))) bar) (int))
{
bar (i);
}
#endif
int
main ()
{
#ifndef NO_TRAMPOLINES
int p = 0;
__attribute__ ((regparm (3), noinline)) void
bar (int i)
{
if (__builtin_expect (i, 0))
++p;
}
foo (0, bar);
bar (0);
if (p != 0)
__builtin_abort ();
foo (1, bar);
bar (1);
if (p != 2)
__builtin_abort ();
#endif
return 0;
}