1 /* PR tree-optimization/53366 */
2 /* { dg-do run { target { size32plus } } } */
3 /* { dg-require-effective-target size32plus } */
5 extern void abort (void);
7 struct S
{ double v
[3]; };
8 struct T
{ struct S r
, i
; };
9 struct U
{ struct T j
[5]; };
12 foo (struct U
*__restrict p1
, struct U
*__restrict p2
,
13 struct S l1
, struct S l2
, struct S l3
, struct S l4
,
14 const double _Complex
* __restrict x
, int y
, int z
)
19 for (j
= 0; j
< 5; ++j
)
21 double a
= __real__ x
[5 * y
+ j
];
22 double b
= __imag__ x
[5 * y
+ j
];
23 double c
= __real__ x
[5 * (y
+ 2) + j
];
24 double d
= __imag__ x
[5 * (y
+ 2) + j
];
25 double e
= __real__ x
[5 * (y
+ 1) + j
];
26 double f
= __imag__ x
[5 * (y
+ 1) + j
];
27 double g
= __real__ x
[5 * (y
+ 3) + j
];
28 double h
= __imag__ x
[5 * (y
+ 3) + j
];
29 for (i
= 0; i
< 3; ++i
)
31 p1
->j
[j
].r
.v
[i
] += l2
.v
[i
] * a
;
32 p1
->j
[j
].r
.v
[i
] += l4
.v
[i
] * c
;
33 p1
->j
[j
].i
.v
[i
] += l2
.v
[i
] * b
;
34 p1
->j
[j
].i
.v
[i
] += l4
.v
[i
] * d
;
35 p2
->j
[j
].r
.v
[i
] += l3
.v
[i
] * e
;
36 p2
->j
[j
].r
.v
[i
] += l1
.v
[i
] * g
;
37 p2
->j
[j
].i
.v
[i
] += l3
.v
[i
] * f
;
38 p2
->j
[j
].i
.v
[i
] += l1
.v
[i
] * h
;
45 _Complex
double x
[5005];
52 struct S l1
, l2
, l3
, l4
;
53 for (i
= 0; i
< 5005; ++i
)
54 x
[i
] = i
+ 1.0iF
* (2 * i
);
55 for (i
= 0; i
< 3; ++i
)
62 foo (&p1
, &p2
, l1
, l2
, l3
, l4
, x
, 5, 1000);
63 for (j
= 0; j
< 5; ++j
)
64 for (i
= 0; i
< 3; ++i
)
65 if (p1
.j
[j
].r
.v
[i
] != 3752430 + j
* 1494.0
66 || p1
.j
[j
].i
.v
[i
] != p1
.j
[j
].r
.v
[i
] * 2
67 || p2
.j
[j
].r
.v
[i
] != 2502450 + j
* 996.0
68 || p2
.j
[j
].i
.v
[i
] != p2
.j
[j
].r
.v
[i
] * 2)