1 /* { dg-do compile } */
2 /* { dg-options "-O2 -mavx512fp16 -mavx512vl -mprefer-vector-width=512" } */
3
4 /* { dg-final { scan-assembler-times "vcmpph" 27 } } */
5 /* { dg-final { scan-assembler-times "(?:vpcmpw|vpcmpeqw)" 12 } } */
6 /* { dg-final { scan-assembler-times "vpcmpuw" 6 } } */
7
8 typedef unsigned short u16;
9 typedef short s16;
10
11 #define CONDMOV_LOOP(size, type, ptype, op, name) \
12 void \
13 __attribute__ ((noinline, noclone, optimize("tree-vectorize"))) \
14 loop_cond_##size##ptype##type##name ( \
15 ptype * restrict a, ptype * restrict b, \
16 type * restrict c, type * restrict d) \
17 { \
18 int i; \
19 for (i = 0; i < size; i++) \
20 { \
21 if (a[i] op b[i]) \
22 d[i] = c[i]; \
23 } \
24 }
25
26 CONDMOV_LOOP (32, _Float16, _Float16, <, lt)
27 CONDMOV_LOOP (32, _Float16, _Float16, >, gt)
28 CONDMOV_LOOP (32, _Float16, _Float16, ==, eq)
29 CONDMOV_LOOP (16, _Float16, _Float16, <, lt)
30 CONDMOV_LOOP (16, _Float16, _Float16, >, gt)
31 CONDMOV_LOOP (16, _Float16, _Float16, ==, eq)
32 CONDMOV_LOOP (8, _Float16, _Float16, <, lt)
33 CONDMOV_LOOP (8, _Float16, _Float16, >, gt)
34 CONDMOV_LOOP (8, _Float16, _Float16, ==, eq)
35 CONDMOV_LOOP (32, _Float16, s16, <, lt)
36 CONDMOV_LOOP (32, _Float16, s16, >, gt)
37 CONDMOV_LOOP (32, _Float16, s16, ==, eq)
38 CONDMOV_LOOP (16, _Float16, s16, <, lt)
39 CONDMOV_LOOP (16, _Float16, s16, >, gt)
40 CONDMOV_LOOP (16, _Float16, s16, ==, eq)
41 CONDMOV_LOOP (8, _Float16, s16, <, lt)
42 CONDMOV_LOOP (8, _Float16, s16, >, gt)
43 CONDMOV_LOOP (8, _Float16, s16, ==, eq)
44 CONDMOV_LOOP (32, s16, _Float16, <, lt)
45 CONDMOV_LOOP (32, s16, _Float16, >, gt)
46 CONDMOV_LOOP (32, s16, _Float16, ==, eq)
47 CONDMOV_LOOP (16, s16, _Float16, <, lt)
48 CONDMOV_LOOP (16, s16, _Float16, >, gt)
49 CONDMOV_LOOP (16, s16, _Float16, ==, eq)
50 CONDMOV_LOOP (8, s16, _Float16, <, lt)
51 CONDMOV_LOOP (8, s16, _Float16, >, gt)
52 CONDMOV_LOOP (8, s16, _Float16, ==, eq)
53 CONDMOV_LOOP (32, _Float16, u16, <, lt)
54 CONDMOV_LOOP (32, _Float16, u16, >, gt)
55 CONDMOV_LOOP (32, _Float16, u16, ==, eq)
56 CONDMOV_LOOP (16, _Float16, u16, <, lt)
57 CONDMOV_LOOP (16, _Float16, u16, >, gt)
58 CONDMOV_LOOP (16, _Float16, u16, ==, eq)
59 CONDMOV_LOOP (8, _Float16, u16, <, lt)
60 CONDMOV_LOOP (8, _Float16, u16, >, gt)
61 CONDMOV_LOOP (8, _Float16, u16, ==, eq)
62 CONDMOV_LOOP (32, u16, _Float16, <, lt)
63 CONDMOV_LOOP (32, u16, _Float16, >, gt)
64 CONDMOV_LOOP (32, u16, _Float16, ==, eq)
65 CONDMOV_LOOP (16, u16, _Float16, <, lt)
66 CONDMOV_LOOP (16, u16, _Float16, >, gt)
67 CONDMOV_LOOP (16, u16, _Float16, ==, eq)
68 CONDMOV_LOOP (8, u16, _Float16, <, lt)
69 CONDMOV_LOOP (8, u16, _Float16, >, gt)
70 CONDMOV_LOOP (8, u16, _Float16, ==, eq)