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