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 /* This shouldn't be treated as an over-widening operation: it's better
11 to reuse the extensions of di and ei for di + ei than to add them
12 as shorts and introduce a third extension. */
14 void __attribute__ ((noipa
))
15 f (unsigned int *restrict a
, unsigned int *restrict b
,
16 unsigned int *restrict c
, unsigned char *restrict d
,
17 unsigned char *restrict e
)
19 for (__INTPTR_TYPE__ i
= 0; i
< N
; ++i
)
32 unsigned int a
[N
], b
[N
], c
[N
];
33 unsigned char d
[N
], e
[N
];
34 for (int i
= 0; i
< N
; ++i
)
38 asm volatile ("" ::: "memory");
42 for (int i
= 0; i
< N
; ++i
)
45 || c
[i
] != i
* 3 + 103)
51 /* { dg-final { scan-tree-dump-not {vect_recog_over_widening_pattern: detected} "vect" } } */
52 /* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" } } */