/* { dg-do compile } */ /* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-details" } */ struct bovid { float red; int green; void *blue; }; static int __attribute__((noinline)) ox (struct bovid *cow) { cow->red = cow->red + cow->green + cow->green; return 0; } int something; static int __attribute__((noinline)) ox_improved (struct bovid *calf) { if (something > 0) calf->red = calf->red + calf->green; else calf->red = calf->green + 87; something = 77; return 0; } int main (int argc, char *argv[]) { struct bovid cow; cow.red = 7.4; cow.green = 6; cow.blue = &cow; ox (&cow); ox_improved (&cow); return 0; } /* { dg-final { scan-tree-dump "About to replace expr cow_.*D.->red with \\*ISRA" "eipa_sra" } } */ /* { dg-final { scan-tree-dump "About to replace expr cow_.*D.->green with ISRA" "eipa_sra" } } */ /* { dg-final { scan-tree-dump "About to replace expr calf_.*D.->red with \\*ISRA" "eipa_sra" } } */ /* { dg-final { scan-tree-dump "About to replace expr calf_.*D.->green with ISRA" "eipa_sra" } } */ /* { dg-final { cleanup-tree-dump "eipa_sra" } } */