1 /* { dg-additional-options "-mavx2 -mtune-ctrl=use_gather" { target avx2_runtime } } */
5 #define MASKGATHER(SUFF, TYPE1, TYPE2) \
6 TYPE1 * __attribute__((noipa)) \
7 maskgather ## SUFF (int n, TYPE2 *indices, TYPE1 *data) \
9 TYPE1 *out = __builtin_malloc (sizeof (TYPE1) * n); \
10 for (int i = 0; i < n; ++i) \
12 TYPE2 d = indices[i]; \
19 MASKGATHER(udiusi
, unsigned long long, unsigned int)
20 MASKGATHER(usiusi
, unsigned int, unsigned int)
21 MASKGATHER(udiudi
, unsigned long long, unsigned long long)
22 MASKGATHER(usiudi
, unsigned int, unsigned long long)
29 unsigned int idx4
[32], data4
[32];
30 unsigned long long idx8
[32], data8
[32];
31 for (int i
= 0; i
< 32; ++i
)
38 unsigned long long *resudiusi
= maskgatherudiusi (16, idx4
, data8
);
39 unsigned int *resusiusi
= maskgatherusiusi (16, idx4
, data4
);
40 unsigned long long *resudiudi
= maskgatherudiudi (16, idx8
, data8
);
41 unsigned int *resusiudi
= maskgatherusiudi (16, idx8
, data4
);
43 for (int i
= 0; i
< 16; ++i
)
45 unsigned int d
= idx4
[i
];
48 if (resudiusi
[i
] != data4
[d
])
50 if (resudiudi
[i
] != data4
[d
])
52 if (resusiudi
[i
] != data4
[d
])
54 if (resusiusi
[i
] != data4
[d
])