1/* { dg-do compile } */
2/* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-details"  } */
3
4struct bovid
5{
6  float red;
7  int green;
8  void *blue;
9};
10
11static int
12__attribute__((noinline))
13ox (struct bovid *cow)
14{
15  cow->red = cow->red + cow->green + cow->green;
16  return 0;
17}
18
19int something;
20
21static int
22__attribute__((noinline))
23ox_improved (struct bovid *calf)
24{
25  if (something > 0)
26    calf->red = calf->red + calf->green;
27  else
28    calf->red = calf->green + 87;
29  something = 77;
30  return 0;
31}
32
33
34int main (int argc, char *argv[])
35{
36  struct bovid cow;
37
38  cow.red = 7.4;
39  cow.green = 6;
40  cow.blue = &cow;
41
42  ox (&cow);
43
44  ox_improved (&cow);
45  return 0;
46}
47
48/* { dg-final { scan-tree-dump "About to replace expr cow_.*D.->red with \\*ISRA" "eipa_sra"  } } */
49/* { dg-final { scan-tree-dump "About to replace expr cow_.*D.->green with ISRA" "eipa_sra"  } } */
50/* { dg-final { scan-tree-dump "About to replace expr calf_.*D.->red with \\*ISRA" "eipa_sra"  } } */
51/* { dg-final { scan-tree-dump "About to replace expr calf_.*D.->green with ISRA" "eipa_sra"  } } */
52/* { dg-final { cleanup-tree-dump "eipa_sra" } } */
53