/* { dg-do compile } */ /* { dg-options "-O2 -fdump-ipa-sra" } */ struct S { long a, b; }; extern void leaf_a (int ); extern void leaf_b (int, int); extern void leaf_c (int, int); extern void leaf_sa (struct S); static void baz (int i, int j, int k, int l, struct S a, struct S b); extern int gi; static void __attribute__((noinline)) foo (int i, int j, int k, int l, struct S a, struct S b) { gi += l; baz (i, j, k, l, a, b); } static void __attribute__((noinline)) bar (int i, int j, int k, int l, struct S a, struct S b) { foo (i, j, k, l, a, b); leaf_sa (b); } static void __attribute__((noinline)) baz (int i, int j, int k, int l, struct S a, struct S b) { if (--k) bar (i, j, k, l, a, b); leaf_b (i, k); } void entry (int i, int j, int k, int l, struct S a, struct S b) { foo (i, j, k, l, a, b); } /* { dg-final { scan-ipa-dump-times "Will remove parameter 1" 3 "sra" } } */ /* { dg-final { scan-ipa-dump-times "Will remove parameter 4" 3 "sra" } } */