-
Notifications
You must be signed in to change notification settings - Fork 15.3k
Labels
backend:X86clang:bytecodeIssues for the clang bytecode constexpr interpreterIssues for the clang bytecode constexpr interpreterclang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"clang:headersHeaders provided by Clang, e.g. for intrinsicsHeaders provided by Clang, e.g. for intrinsicsconstexprAnything related to constant evaluationAnything related to constant evaluationgood first issuehttps://github.com/llvm/llvm-project/contributehttps://github.com/llvm/llvm-project/contribute
Description
Add constexpr handling and test coverage for the variable splat vector shifts - its unlikely we can reuse the existing interp__builtin_elementwise_int_binop handling used by 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)
Metadata
Metadata
Assignees
Labels
backend:X86clang:bytecodeIssues for the clang bytecode constexpr interpreterIssues for the clang bytecode constexpr interpreterclang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"clang:headersHeaders provided by Clang, e.g. for intrinsicsHeaders provided by Clang, e.g. for intrinsicsconstexprAnything related to constant evaluationAnything related to constant evaluationgood first issuehttps://github.com/llvm/llvm-project/contributehttps://github.com/llvm/llvm-project/contribute