1 /* { dg-require-effective-target vect_int } */
15 void __attribute__((noinline
))
16 foo (unsigned int *__restrict__ pInput
, unsigned int *__restrict__ pOutput
)
20 for (i
= 0; i
< N
/ 2; i
++)
25 *pOutput
++ = M00
* a
+ M01
* b
;
26 *pOutput
++ = M10
* a
+ M11
* b
;
30 int main (int argc
, const char* argv
[])
32 unsigned int input
[N
], output
[N
], i
;
33 unsigned int check_results
[N
] = {1322, 13, 4166, 471, 7010, 929, 9854, 1387, 12698, 1845, 15542, 2303, 18386, 2761, 21230, 3219};
37 for (i
= 0; i
< N
; i
++)
41 __asm__
volatile ("");
47 for (i
= 0; i
< N
; i
++)
49 if (output
[i
] != check_results
[i
])
51 __asm__
volatile ("");
57 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_perm } } } */
58 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { vect_perm || vect_load_lanes } } } } */
59 /* { dg-final { scan-tree-dump "LOAD_LANES" "vect" { target vect_load_lanes } } } */
60 /* { dg-final { scan-tree-dump "STORE_LANES" "vect" { target vect_load_lanes } } } */