annotate gcc/testsuite/gcc.dg/sibcall-6.c @ 132:d34655255c78

update gcc-8.2
author mir3636
date Thu, 25 Oct 2018 10:21:07 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* A simple check to see whether indirect calls are
kono
parents:
diff changeset
2 being sibcall optimized on targets that do support
kono
parents:
diff changeset
3 this notion, i.e. have the according call patterns
kono
parents:
diff changeset
4 in place.
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 Copyright (C) 2002 Free Software Foundation Inc.
kono
parents:
diff changeset
7 Contributed by Andreas Bauer <baueran@in.tum.de> */
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 /* { dg-do run { target epiphany-*-* i?86-*-* x86_64-*-* s390*-*-* } } */
kono
parents:
diff changeset
10 /* { dg-skip-if "" { { i?86-*-* x86_64-*-* } && { ia32 && { ! nonpic } } } } */
kono
parents:
diff changeset
11 /* { dg-options "-O2 -foptimize-sibling-calls -fno-ipa-cp" } */
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 extern void abort (void);
kono
parents:
diff changeset
14 extern void exit (int);
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 int foo (int);
kono
parents:
diff changeset
17 int bar (int);
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 int (*ptr) (int);
kono
parents:
diff changeset
20 int *f_addr;
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 int
kono
parents:
diff changeset
23 main ()
kono
parents:
diff changeset
24 {
kono
parents:
diff changeset
25 ptr = bar;
kono
parents:
diff changeset
26 foo (7);
kono
parents:
diff changeset
27 exit (0);
kono
parents:
diff changeset
28 }
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 int __attribute__ ((noinline))
kono
parents:
diff changeset
31 bar (b)
kono
parents:
diff changeset
32 int b;
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 if (f_addr == (int*) __builtin_return_address (0))
kono
parents:
diff changeset
35 return b;
kono
parents:
diff changeset
36 else
kono
parents:
diff changeset
37 abort ();
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 int __attribute__ ((noinline))
kono
parents:
diff changeset
41 foo (f)
kono
parents:
diff changeset
42 int f;
kono
parents:
diff changeset
43 {
kono
parents:
diff changeset
44 f_addr = (int*) __builtin_return_address (0);
kono
parents:
diff changeset
45 return (*ptr)(f);
kono
parents:
diff changeset
46 }