Issue 178215
Summary [X86] Add i512 shift expansion on AVX512 targets
Labels backend:X86
Assignees
Reporter RKSimon
    These haven't been fully tested, but should efficiently handle `_BitInt(512)` shifts when AVX512F is available:

```cpp
__m512i shlv(__m512i x, unsigned a) {
  __m512i lo = _mm512_maskz_expand_epi64(-1U << (a / 64), x);
 __m512i hi = _mm512_alignr_epi64(lo, _mm512_setzero_epi32(), 7);
  return __builtin_elementwise_fshl(lo, hi, _mm512_set1_epi64(a % 64));
}

__m512i srlv(__m512i x, unsigned a) {
  __m512i hi = _mm512_maskz_compress_epi64(-1U << (a / 64), x);
  __m512i lo = _mm512_alignr_epi64(_mm512_setzero_epi32(), hi, 1);
  return __builtin_elementwise_fshr(lo, hi, _mm512_set1_epi64(a % 64));
}

__m512i srav(__m512i x, unsigned a) {
    __m512i sign = __builtin_shufflevector(_mm512_srai_epi64(x, 63), _mm512_setzero_epi32(), 7, 7, 7, 7, 7, 7, 7, 7);
    __m512i hi = _mm512_mask_compress_epi64(sign, -1U << (a / 64), x);
    __m512i lo = _mm512_alignr_epi64(sign, hi, 1);
 return __builtin_elementwise_fshr(lo, hi, _mm512_set1_epi64(a % 64));
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to