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:
parent
46ce03de3a
commit
397d0df98c
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
40
gcc/testsuite/gcc.target/i386/pr67770.c
Normal file
40
gcc/testsuite/gcc.target/i386/pr67770.c
Normal 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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user