/* { 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} } } */