Viewing file: iinline-4.c (3.09 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Verify that simple indirect calls are inlined even without early inlining.. */ /* { dg-do compile } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-icf" } */
struct S { int i; void (*f)(struct S *); unsigned u; };
struct U { struct U *next; struct S s; short a[8]; };
extern void non_existent(struct S *p, int);
/* ----- 1 ----- */
static void hooray1 (struct S *p) { non_existent (p, 1); }
static void hiphip1 (struct S *p) { p->f (p); }
int test1 (void) { struct S s; s.i = 1234; s.f = hooray1; s.u = 1001; hiphip1 (&s); return 0; }
/* ----- 2 ----- */
struct S *gp;
static void hooray2 (struct S *p) { non_existent (p, 2); }
static void hip2 (struct S *p) { p->f (p); }
static void hiphip2 (struct S *p) { hip2 (p); }
int test2 (void) { struct S *p = gp; p->i = 2341; p->f = hooray2; p->u = 1002; hiphip2 (p); return 0; }
/* ----- 3 ----- */
static void hooray3 (struct S *p) { non_existent (p, 2); }
static void hip3 (struct S *p) { p->f (p); }
static __attribute__ ((flatten)) void hiphip3 (struct S *p) { hip3 (p); }
int test3 (void) { struct S *p = gp; p->i = 2341; p->f = hooray3; p->u = 1003; hiphip3 (p); return 0; }
/* ----- 4 ----- */
static void hooray4 (struct S *p) { non_existent (p, 3); }
static void hiphip4 (struct S s) { s.f (&s); }
int test4(void) { struct S s; s.i = 3412; s.f = hooray4; s.u = 1004; hiphip4 (s); return 0; }
/* ----- 5 ----- */
struct U *gu;
static void hooray5 (struct S *p) { non_existent (p, 5); }
static void hip5 (struct S *p) { p->f (p); }
static void hiphip5 (struct U *u) { hip5 (&u->s); }
int test5 (void) { struct U *u = gu; u->next = u; u->s.i = 9876; u->s.f = hooray5; u->s.u = 1005; hiphip5 (u); return 0; }
/* ----- 6 ----- */
static void hooray6 (struct S *p) { non_existent (p, 6); }
static void hip6 (struct S *p) { p->f (p); }
static __attribute__ ((flatten)) void hiphip6 (struct U *u) { hip6 (&u->s); }
int test6 (void) { struct U *u = gu; u->next = u; u->s.i = 9876; u->s.f = hooray6; u->s.u = 1006; hiphip6 (u); return 0; }
/* ----- 7 ----- */
struct S **gdp;
static void hooray7 (struct S *p) { non_existent (p, 7); }
static void hip7 (struct S *p) { p->f (p); gdp = &p; }
static void hiphip7 (struct S *p) { hip7 (p); gdp = &p; }
int test7 (void) { struct S *p = gp; p->i = 7341; p->f = hooray7; p->u = 1007; hiphip7 (p); return 0; }
/* { dg-final { scan-ipa-dump "hooray1\[^\\n\]*inline copy in test1" "inline" } } */ /* { dg-final { scan-ipa-dump "hooray2\[^\\n\]*inline copy in test2" "inline" } } */ /* { dg-final { scan-ipa-dump "hooray3\[^\\n\]*inline copy in test3" "inline" } } */ /* { dg-final { scan-ipa-dump "hooray4\[^\\n\]*inline copy in test4" "inline" { xfail { { hppa*-*-* } && { ! lp64 } } } } } */ /* { dg-final { scan-ipa-dump "hooray5\[^\\n\]*inline copy in test5" "inline" } } */ /* { dg-final { scan-ipa-dump "hooray6\[^\\n\]*inline copy in test6" "inline" } } */ /* { dg-final { scan-ipa-dump "hooray7\[^\\n\]*inline copy in test7" "inline" } } */
|