1 /* Verify the strength reduction adjustment for -ftrivial-auto-var-init. */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -ftrivial-auto-var-init=zero -fno-PIC -fdump-tree-gimple -fdump-tree-esra" } */
4
5
6 typedef double VECTOR[3];
7
8 enum
9 {
10 X = 0,
11 Y = 1,
12 Z = 2,
13 T = 3
14 };
15
16 void Assign_Vector(VECTOR d, VECTOR s)
17 {
18 d[X] = s[X];
19 d[Y] = s[Y];
20 d[Z] = s[Z];
21 }
22
23 void VCross(VECTOR a, const VECTOR b, const VECTOR c)
24 {
25 VECTOR tmp;
26
27 tmp[X] = b[Y] * c[Z] - b[Z] * c[Y];
28 tmp[Y] = b[Z] * c[X] - b[X] * c[Z];
29 tmp[Z] = b[X] * c[Y] - b[Y] * c[X];
30
31 Assign_Vector(a, tmp);
32 }
33
34 /* { dg-final { scan-tree-dump-times "tmp = .DEFERRED_INIT \\(24, 2, \&\"tmp\"" 1 "gimple" } } */
35 /* { dg-final { scan-tree-dump-times ".DEFERRED_INIT \\(8, 2, \&\"tmp\"" 3 "esra" } } */