1 /* { dg-require-effective-target vect_int } */
2 /* { dg-require-effective-target vect_shift } */
3 /* { dg-require-effective-target vect_pack_trunc } */
4 /* { dg-require-effective-target vect_unpack } */
10 /* The addition should be narrowed to short. */
12 void __attribute__ ((noipa
))
13 f (unsigned int *restrict a
, unsigned int *restrict b
,
14 unsigned short *restrict c
, unsigned char *restrict d
, unsigned int e
)
17 for (__INTPTR_TYPE__ i
= 0; i
< N
; ++i
)
19 unsigned int xor = d
[i
] ^ e
;
30 unsigned int a
[N
], b
[N
];
33 for (int i
= 0; i
< N
; ++i
)
37 asm volatile ("" ::: "memory");
41 for (int i
= 0; i
< N
; ++i
)
42 if (b
[i
] != ((i
* 2 + 3) ^ 0x73)
43 || a
[i
] != ((i
* 11) | b
[i
]))
49 /* { dg-final { scan-tree-dump {Splitting pattern statement} "vect" } } */
50 /* { dg-final { scan-tree-dump {vect_recog_over_widening_pattern: detected:[^\n]* \^} "vect" } } */
51 /* { dg-final { scan-tree-dump {vect_recog_over_widening_pattern: detected:[^\n]* \|} "vect" } } */
52 /* { dg-final { scan-tree-dump {demoting [^\n]* to [^\n]*char} "vect" } } */
53 /* { dg-final { scan-tree-dump {demoting [^\n]* to [^\n]*short} "vect" } } */
54 /* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" } } */