1 /* { dg-do compile } */
2 /* { dg-require-effective-target vect_double } */
9 typedef struct { complex e
[3][3]; } su3_matrix
;
11 void mult_su3_an(su3_matrix
*a
, su3_matrix
*b
, su3_matrix
*c
)
14 double a0r
,a0i
,a1r
,a1i
,a2r
,a2i
;
15 double b0r
,b0i
,b1r
,b1i
,b2r
,b2i
;
18 a0r
=a
->e
[0][0].real
; a0i
=a
->e
[0][0].imag
;
19 b0r
=b
->e
[0][j
].real
; b0i
=b
->e
[0][j
].imag
;
20 a1r
=a
->e
[1][0].real
; a1i
=a
->e
[1][0].imag
;
21 b1r
=b
->e
[1][j
].real
; b1i
=b
->e
[1][j
].imag
;
22 a2r
=a
->e
[2][0].real
; a2i
=a
->e
[2][0].imag
;
23 b2r
=b
->e
[2][j
].real
; b2i
=b
->e
[2][j
].imag
;
25 c
->e
[0][j
].real
= a0r
*b0r
+ a0i
*b0i
+ a1r
*b1r
+ a1i
*b1i
+ a2r
*b2r
+ a2i
*b2i
;
26 c
->e
[0][j
].imag
= a0r
*b0i
- a0i
*b0r
+ a1r
*b1i
- a1i
*b1r
+ a2r
*b2i
- a2i
*b2r
;
28 a0r
=a
->e
[0][1].real
; a0i
=a
->e
[0][1].imag
;
29 b0r
=b
->e
[0][j
].real
; b0i
=b
->e
[0][j
].imag
;
30 a1r
=a
->e
[1][1].real
; a1i
=a
->e
[1][1].imag
;
31 b1r
=b
->e
[1][j
].real
; b1i
=b
->e
[1][j
].imag
;
32 a2r
=a
->e
[2][1].real
; a2i
=a
->e
[2][1].imag
;
33 b2r
=b
->e
[2][j
].real
; b2i
=b
->e
[2][j
].imag
;
35 c
->e
[1][j
].real
= a0r
*b0r
+ a0i
*b0i
+ a1r
*b1r
+ a1i
*b1i
+ a2r
*b2r
+ a2i
*b2i
;
36 c
->e
[1][j
].imag
= a0r
*b0i
- a0i
*b0r
+ a1r
*b1i
- a1i
*b1r
+ a2r
*b2i
- a2i
*b2r
;
38 a0r
=a
->e
[0][2].real
; a0i
=a
->e
[0][2].imag
;
39 b0r
=b
->e
[0][j
].real
; b0i
=b
->e
[0][j
].imag
;
40 a1r
=a
->e
[1][2].real
; a1i
=a
->e
[1][2].imag
;
41 b1r
=b
->e
[1][j
].real
; b1i
=b
->e
[1][j
].imag
;
42 a2r
=a
->e
[2][2].real
; a2i
=a
->e
[2][2].imag
;
43 b2r
=b
->e
[2][j
].real
; b2i
=b
->e
[2][j
].imag
;
45 c
->e
[2][j
].real
= a0r
*b0r
+ a0i
*b0i
+ a1r
*b1r
+ a1i
*b1i
+ a2r
*b2r
+ a2i
*b2i
;
46 c
->e
[2][j
].imag
= a0r
*b0i
- a0i
*b0r
+ a1r
*b1i
- a1i
*b1r
+ a2r
*b2i
- a2i
*b2r
;
50 /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target vect_hw_misalign } } } */