aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/i386/patch-functions-sibling-call.c
blob: 847a95ce6450122e09381f4c97c2ff62441c52c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* { dg-do compile } */
/* { dg-require-effective-target lp64 } */
/* -O2 forces a sibling call.  */
/* { dg-options "-O2 -mpatch-functions-for-instrumentation" } */

/* { dg-final { scan-assembler ".byte\t0xeb,0x09(.*).byte\t0x90" } } */

/* Checks correct nop-bytes are generated just before a sibling call.  */
/* { dg-final { scan-assembler ".byte\t0xeb,0x09(.*).byte\t0x90(.*)jmp" } } */

/* Not instrumented as function has no loop and is small.  */
__attribute__ ((noinline))
int foo(int n)
{
  int x = 0;
  return n + 10;
}

__attribute__ ((noinline))
int bar(int n)
{
  /* Dummy loop.  */
  while (--n)
    n = n * 2;
  return foo(n);
}