llvm/llvm-project

[X86][Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - add AVX512 integer comparison intrinsics to be used in constexpr

Open

#162.054 aperta il 6 ott 2025

Vedi su GitHub
 (15 commenti) (0 reazioni) (2 assegnatari)C++ (10.782 fork)batch import
backend:X86clang:bytecodeclang:headersconstexprgood first issue

Metriche repository

Star
 (26.378 star)
Metriche merge PR
 (Merge medio 1g 2h) (1000 PR mergiate in 30 g)

Descrizione

The core integer comparison intrinsics could be used in constexpr:

_mm_cmp_epi8_mask _mm_cmp_epu8_mask
_mm_cmp_epi16_mask _mm_cmp_epu16_mask
_mm_cmp_epi32_mask _mm_cmp_epu32_mask
_mm_cmp_epi64_mask _mm_cmp_epu64_mask

_mm256_cmp_epi8_mask _mm256_cmp_epu8_mask
_mm256_cmp_epi16_mask _mm256_cmp_epu16_mask
_mm256_cmp_epi32_mask _mm256_cmp_epu32_mask
_mm256_cmp_epi64_mask _mm256_cmp_epu64_mask

_mm512_cmp_epi8_mask _mm512_cmp_epu8_mask
_mm512_cmp_epi16_mask _mm512_cmp_epu16_mask
_mm512_cmp_epi32_mask _mm512_cmp_epu32_mask
_mm512_cmp_epi64_mask _mm512_cmp_epu64_mask

These need to handle the comparison modes detailed in the Intel Intrinsics Guide:

0: OP := _MM_CMPINT_EQ
1: OP := _MM_CMPINT_LT
2: OP := _MM_CMPINT_LE
3: OP := _MM_CMPINT_FALSE
4: OP := _MM_CMPINT_NE
5: OP := _MM_CMPINT_NLT
6: OP := _MM_CMPINT_NLE
7: OP := _MM_CMPINT_TRUE

There are a LOT of wrappers to these intrinsics (e.g. eq/ge/gt/le/lt/neq variants) - ideally we need test coverage for all of them. To avoid incredible boredom you should probably write a script to autogen the TEST_CONSTEXPR lines somehow that you then copy+paste into the relevant locations.

Guida contributor