| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-dce2" } */ |
| |
| struct X { float array[2]; }; |
| |
| struct X a,b; |
| |
| float foobar () { |
| float s = 0; |
| unsigned int d; |
| struct X c; |
| for (d=0; d<2; ++d) |
| c.array[d] = a.array[d] * b.array[d]; |
| for (d=0; d<2; ++d) |
| s+=c.array[d]; |
| return s; |
| } |
| |
| /* The temporary structure should have been promoted to registers |
| by FRE after the loops have been unrolled by the early unrolling pass. */ |
| /* { dg-final { scan-tree-dump-not "c\.array" "dce2" } } */ |
| /* { dg-final { cleanup-tree-dump "dce2" } } */ |