| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fipa-sra -fno-ipa-pure-const -fdump-ipa-sra" } */ |
| |
| static int |
| __attribute__((noinline)) |
| ox (int *i) |
| { |
| return *i+4**i; |
| } |
| |
| int *holder; |
| |
| static int |
| __attribute__((noinline)) |
| ox_ctrl_1 (int *j) |
| { |
| holder = j; |
| return *j+4 * *j+1; |
| } |
| |
| static void |
| __attribute__((noinline)) |
| ox_ctrl_2 (int *k) |
| { |
| *k = 8; |
| } |
| |
| static int zzz[10]; |
| |
| static int |
| __attribute__((noinline)) |
| ox_improved (int recurse, int *l) |
| { |
| int r = 0; |
| |
| r = *l; |
| |
| if (recurse) |
| { |
| if (recurse > 2) |
| l = &zzz[3]; |
| else |
| l = zzz; |
| |
| ox_improved (0, l); |
| } |
| |
| return r; |
| } |
| |
| void caller (void) |
| { |
| int a = 1; |
| int b = 10; |
| int c; |
| |
| ox (&a); |
| ox_ctrl_1 (&a); |
| ox_ctrl_2 (&a); |
| *holder = ox_improved (1, &b); |
| return; |
| } |
| |
| /* { dg-final { scan-ipa-dump-times "Will split parameter" 2 "sra" } } */ |
| |