1 /* { dg-do compile } */ 2 /* { dg-options "-O2 -fdump-tree-pre-stats" } */ 3 4 struct Loc { 5 int x[3]; 6 }; 7 8 void bar (struct Loc *); 9 foo(int i,int j,int k,int b)10int foo (int i, int j, int k, int b) 11 { 12 struct Loc IND; 13 int res; 14 15 if (b) 16 { 17 IND.x[0] = i; 18 IND.x[1] = j; 19 IND.x[2] = k-1; 20 } 21 else 22 { 23 IND.x[0] = i; 24 IND.x[1] = j; 25 IND.x[2] = k; 26 } 27 28 /* This should be optimized to i + j + {k, k + 1}. */ 29 res = IND.x[0] + IND.x[1] + IND.x[2]; 30 31 /* This is just to prevent SRA. */ 32 bar (&IND); 33 34 return res; 35 } 36 37 /* All three loads should be eliminated. */ 38 /* { dg-final { scan-tree-dump "Eliminated: 3" "pre" } } */ 39