https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122762

--- Comment #22 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Perhaps something similar to what is used e.g. for AVX512F gathers (those also
have integer masks).
Though, the ZMM simd clones are more complicated, because when the
characteristic data type is large, the mask can hold just a few bits, fewer
than the precision of the type.
Consider
#pragma omp declare simd simdlen(64) inbranch
char foo (char x) { return x; }
#pragma omp declare simd simdlen(64) inbranch
short qux (short x) { return x; }
#pragma omp declare simd simdlen(64) inbranch
int bar (int x) { return x; }
#pragma omp declare simd simdlen(32) inbranch
long long baz (long long x) { return x; }
The _ZGVe* clones will have:
for foo just a single 64-bit integer mask argument
for qux 2 32-bit integer mask arguments, each holding 32 bits
for bar 4 32-bit integer mask arguments, each holding just 16 bits
for baz 4 32-bit integer mask arguments, each holding 16 bits as well (for
simdlen(64)
baz we punt, too large simdlen, because for _ZGVb it would need 32 arguments
for x and that is more than the ABI specifies).

Reply via email to