Viewing file: pcrel-sibcall-1.c (1.12 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do compile } */ /* { dg-options "-mdejagnu-cpu=power10 -O2" } */ /* { dg-require-effective-target powerpc_elfv2 } */ /* { dg-require-effective-target power10_ok } */
/* Test that potential sibcalls are generated when the caller does not preserve the TOC, even for external calls; and that sibcalls are not generated when the caller preserves the TOC but the callee does not. */
#pragma GCC target ("cpu=power10,pcrel") int x (void) __attribute__((noinline)); int y (void) __attribute__((noinline)); int xx (void) __attribute__((noinline)); int x (void) { return 1; }
int y (void) { return 2; }
int sib_call (void) { return x (); }
#pragma GCC target ("cpu=power9,no-pcrel") int normal_call (void) { return y (); }
int xx (void) { return 1; }
extern int yy (void);
#pragma GCC target ("cpu=power10,pcrel") int notoc_sibcall (void) { return xx (); }
int extern_sibcall (void) { return yy (); }
/* { dg-final { scan-assembler {\mb x@notoc\M} } } */ /* { dg-final { scan-assembler {\mbl y\M} } } */ /* { dg-final { scan-assembler {\mb xx@notoc\M} } } */ /* { dg-final { scan-assembler {\mb yy@notoc\M} } } */
|