| Issue |
169176
|
| Summary |
[Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - add PSLL/PSRA/PSRL var intrinsics to be used in constexpr
|
| Labels |
good first issue,
backend:X86,
clang:frontend,
clang:headers,
constexpr,
clang:bytecode
|
| Assignees |
|
| Reporter |
RKSimon
|
Add constexpr handling and test coverage for the variable splat vector shifts - its unlikely we can reuse the existing interp__builtin_elementwise_int_binop handing for other x86 vector shifts intrinsics.
These are going to be a little messy because the lower 64-bits of the unsigned `count` operand is used for the shift amount for all types (SRA clamps to BW-1 but SLL/SRL return zero for out of bounds values), which requires concatenation of the lower vector elements for vXi16/Xi32 types - see X86InstCombineIntrinsic.cpp simplifyX86varShift for examples.
```
__m128i _mm_sll_epi16 (__m128i a, __m128i count)
__m128i _mm_mask_sll_epi16 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_sll_epi16 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_sll_epi16 (__m256i a, __m128i count)
__m256i _mm256_mask_sll_epi16 (__m256i src, __mmask16 k, __m256i a, __m128i count)
__m256i _mm256_maskz_sll_epi16 (__mmask16 k, __m256i a, __m128i count)
__m512i _mm512_sll_epi16 (__m512i a, __m128i count)
__m512i _mm512_mask_sll_epi16 (__m512i src, __mmask32 k, __m512i a, __m128i count)
__m512i _mm512_maskz_sll_epi16 (__mmask32 k, __m512i a, __m128i count)
__m128i _mm_sll_epi32 (__m128i a, __m128i count)
__m128i _mm_mask_sll_epi32 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_sll_epi32 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_sll_epi32 (__m256i a, __m128i count)
__m256i _mm256_mask_sll_epi32 (__m256i src, __mmask8 k, __m256i a, __m128i count)
__m256i _mm256_maskz_sll_epi32 (__mmask8 k, __m256i a, __m128i count)
__m512i _mm512_sll_epi32 (__m512i a, __m128i count)
__m512i _mm512_mask_sll_epi32 (__m512i src, __mmask16 k, __m512i a, __m128i count)
__m512i _mm512_maskz_sll_epi32 (__mmask16 k, __m512i a, __m128i count)
__m128i _mm_sll_epi64 (__m128i a, __m128i count)
__m128i _mm_mask_sll_epi64 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_sll_epi64 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_sll_epi64 (__m256i a, __m128i count)
__m256i _mm256_mask_sll_epi64 (__m256i src, __mmask8 k, __m256i a, __m128i count)
__m256i _mm256_maskz_sll_epi64 (__mmask8 k, __m256i a, __m128i count)
__m512i _mm512_sll_epi64 (__m512i a, __m128i count)
__m512i _mm512_mask_sll_epi64 (__m512i src, __mmask8 k, __m512i a, __m128i count)
__m512i _mm512_maskz_sll_epi64 (__mmask8 k, __m512i a, __m128i count)
__m128i _mm_sra_epi16 (__m128i a, __m128i count)
__m128i _mm_mask_sra_epi16 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_sra_epi16 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_sra_epi16 (__m256i a, __m128i count)
__m256i _mm256_mask_sra_epi16 (__m256i src, __mmask16 k, __m256i a, __m128i count)
__m256i _mm256_maskz_sra_epi16 (__mmask16 k, __m256i a, __m128i count)
__m512i _mm512_sra_epi16 (__m512i a, __m128i count)
__m512i _mm512_mask_sra_epi16 (__m512i src, __mmask32 k, __m512i a, __m128i count)
__m512i _mm512_maskz_sra_epi16 (__mmask32 k, __m512i a, __m128i count)
__m128i _mm_sra_epi32 (__m128i a, __m128i count)
__m128i _mm_mask_sra_epi32 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_sra_epi32 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_sra_epi32 (__m256i a, __m128i count)
__m256i _mm256_mask_sra_epi32 (__m256i src, __mmask8 k, __m256i a, __m128i count)
__m256i _mm256_maskz_sra_epi32 (__mmask8 k, __m256i a, __m128i count)
__m512i _mm512_sra_epi32 (__m512i a, __m128i count)
__m512i _mm512_mask_sra_epi32 (__m512i src, __mmask16 k, __m512i a, __m128i count)
__m512i _mm512_maskz_sra_epi32 (__mmask16 k, __m512i a, __m128i count)
__m128i _mm_sra_epi64 (__m128i a, __m128i count)
__m128i _mm_mask_sra_epi64 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_sra_epi64 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_sra_epi64 (__m256i a, __m128i count)
__m256i _mm256_mask_sra_epi64 (__m256i src, __mmask8 k, __m256i a, __m128i count)
__m256i _mm256_maskz_sra_epi64 (__mmask8 k, __m256i a, __m128i count)
__m512i _mm512_sra_epi64 (__m512i a, __m128i count)
__m512i _mm512_mask_sra_epi64 (__m512i src, __mmask8 k, __m512i a, __m128i count)
__m512i _mm512_maskz_sra_epi64 (__mmask8 k, __m512i a, __m128i count)
__m128i _mm_srl_epi16 (__m128i a, __m128i count)
__m128i _mm_mask_srl_epi16 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_srl_epi16 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_srl_epi16 (__m256i a, __m128i count)
__m256i _mm256_mask_srl_epi16 (__m256i src, __mmask16 k, __m256i a, __m128i count)
__m256i _mm256_maskz_srl_epi16 (__mmask16 k, __m256i a, __m128i count)
__m512i _mm512_srl_epi16 (__m512i a, __m128i count)
__m512i _mm512_mask_srl_epi16 (__m512i src, __mmask32 k, __m512i a, __m128i count)
__m512i _mm512_maskz_srl_epi16 (__mmask32 k, __m512i a, __m128i count)
__m128i _mm_srl_epi32 (__m128i a, __m128i count)
__m128i _mm_mask_srl_epi32 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_srl_epi32 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_srl_epi32 (__m256i a, __m128i count)
__m256i _mm256_mask_srl_epi32 (__m256i src, __mmask8 k, __m256i a, __m128i count)
__m256i _mm256_maskz_srl_epi32 (__mmask8 k, __m256i a, __m128i count)
__m512i _mm512_srl_epi32 (__m512i a, __m128i count)
__m512i _mm512_mask_srl_epi32 (__m512i src, __mmask16 k, __m512i a, __m128i count)
__m512i _mm512_maskz_srl_epi32 (__mmask16 k, __m512i a, __m128i count)
__m128i _mm_srl_epi64 (__m128i a, __m128i count)
__m128i _mm_mask_srl_epi64 (__m128i src, __mmask8 k, __m128i a, __m128i count)
__m128i _mm_maskz_srl_epi64 (__mmask8 k, __m128i a, __m128i count)
__m256i _mm256_srl_epi64 (__m256i a, __m128i count)
__m256i _mm256_mask_srl_epi64 (__m256i src, __mmask8 k, __m256i a, __m128i count)
__m256i _mm256_maskz_srl_epi64 (__mmask8 k, __m256i a, __m128i count)
__m512i _mm512_srl_epi64 (__m512i a, __m128i count)
__m512i _mm512_mask_srl_epi64 (__m512i src, __mmask8 k, __m512i a, __m128i count)
__m512i _mm512_maskz_srl_epi64 (__mmask8 k, __m512i a, __m128i count)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs