| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-slim" } */ |
| /* { dg-require-effective-target non_strict_align } */ |
| |
| struct bovid |
| { |
| float a; |
| int b; |
| struct bovid *next; |
| }; |
| |
| static int |
| __attribute__((noinline)) |
| foo (struct bovid *cow, int i) |
| { |
| i++; |
| if (cow->next) |
| foo (cow->next, i); |
| return i; |
| } |
| |
| int main (int argc, char *argv[]) |
| { |
| struct bovid cow; |
| |
| cow.a = 7.4; |
| cow.b = 6; |
| cow.next = (struct bovid *) 0; |
| |
| return foo (&cow, 0); |
| } |
| |
| /* { dg-final { scan-tree-dump-times "foo " 1 "eipa_sra" } } */ |
| /* { dg-final { cleanup-tree-dump "eipa_sra" } } */ |