1 /* Verify that indirect inlining can also remove references of the functions it
2 discovers calls for, even when nodes being inlined are virtual IPA-CP
3 clones. */
4 /* { dg-do compile } */
5 /* { dg-options "-O3 -fno-early-inlining -fdump-ipa-cp-details -fdump-ipa-inline -fdump-tree-optimized" } */
6
7 int global;
8
9 void __attribute__ ((noinline, noclone, used))
stuff(int i)10 stuff (int i)
11 {
12 global = i;
13 }
14
hooray()15 static void hooray ()
16 {
17 stuff (1);
18 }
19
hiphip(void (* f)())20 static void hiphip (void (*f)())
21 {
22 stuff (2);
23 f ();
24 }
25
main(void)26 int main (void)
27 {
28 hiphip (hooray);
29 return 0;
30 }
31
32 /* { dg-final { scan-ipa-dump "removing its cloning-created reference" "cp" } } */
33 /* { dg-final { scan-ipa-dump "ipa-prop: Removed a reference" "inline" } } */
34 /* { dg-final { scan-tree-dump-not "hooray" "optimized" } } */
35