1 /* { dg-require-effective-target vect_int } */
23 /* SLP with load permutation and loop-based vectorization. */
24 void foo (int *__restrict__ pInput
, int *__restrict__ pOutput
,
25 int *__restrict__ pInput2
, int *__restrict__ pOutput2
)
29 for (i
= 0; i
< N
/ 3; i
++)
36 *pOutput
++ = M00
* a
+ M01
* b
+ M02
* c
;
37 *pOutput
++ = M10
* a
+ M11
* b
+ M12
* c
;
38 *pOutput
++ = M20
* a
+ M21
* b
+ M22
* c
;
40 /* Loop-based vectorization. */
41 *pOutput2
++ = K00
* d
;
45 int main (int argc
, const char* argv
[])
47 int input
[N
], output
[N
], i
;
48 int check_results
[N
] = {1470, 395, 28271, 5958, 1655, 111653, 10446, 2915, 195035, 14934, 4175, 278417, 19422, 5435, 361799, 0};
49 int input2
[N
], output2
[N
];
50 int check_results2
[N
] = {0, 405, 810, 1215, 1620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
54 for (i
= 0; i
< N
; i
++)
64 foo (input
, output
, input2
, output2
);
66 for (i
= 0; i
< N
; i
++)
67 if (output
[i
] != check_results
[i
] || output2
[i
] != check_results2
[i
])
73 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_perm } } } */
74 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_perm } } } */
75 /* { dg-final { cleanup-tree-dump "vect" } } */