llvm/llvm-project

[Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - allow AVX/AVX512 VNNI intrinsics to be used in constexpr

Geschlossen

#161.340 geöffnet am 30.09.2025

 (7 Kommentare) (0 Reaktionen) (1 zugewiesene Person)C++ (10.782 Forks)batch import
backend:X86clang:bytecodeclang:headersconstexprgood first issue

Repository-Metriken

Stars
 (26.378 Sterne)
PR-Merge-Metriken
 (Durchschn. Merge 1T 2h) (1.000 gemergte PRs in 30 T)

Beschreibung

avxvnniintrin.h
__m128i _mm_dpbusd_avx_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpbusd_avx_epi32 (__m256i src, __m256i a, __m256i b)
__m128i _mm_dpbusd_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpbusd_epi32 (__m256i src, __m256i a, __m256i b)
__m128i _mm_dpbusds_avx_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpbusds_avx_epi32 (__m256i src, __m256i a, __m256i b)
__m128i _mm_dpbusds_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpbusds_epi32 (__m256i src, __m256i a, __m256i b)
__m128i _mm_dpwssd_avx_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpwssd_avx_epi32 (__m256i src, __m256i a, __m256i b)
__m128i _mm_dpwssd_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpwssd_epi32 (__m256i src, __m256i a, __m256i b)
__m128i _mm_dpwssds_avx_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpwssds_avx_epi32 (__m256i src, __m256i a, __m256i b)
__m128i _mm_dpwssds_epi32 (__m128i src, __m128i a, __m128i b)
__m256i _mm256_dpwssds_epi32 (__m256i src, __m256i a, __m256i b)

avx512vnniintrin.h
__m512i _mm512_dpbusd_epi32 (__m512i src, __m512i a, __m512i b)
__m512i _mm512_mask_dpbusd_epi32 (__m512i src, __mmask16 k, __m512i a, __m512i b)
__m512i _mm512_maskz_dpbusd_epi32 (__mmask16 k, __m512i src, __m512i a, __m512i b)
__m512i _mm512_dpbusds_epi32 (__m512i src, __m512i a, __m512i b)
__m512i _mm512_mask_dpbusds_epi32 (__m512i src, __mmask16 k, __m512i a, __m512i b)
__m512i _mm512_maskz_dpbusds_epi32 (__mmask16 k, __m512i src, __m512i a, __m512i b)
__m512i _mm512_dpwssd_epi32 (__m512i src, __m512i a, __m512i b)
__m512i _mm512_mask_dpwssd_epi32 (__m512i src, __mmask16 k, __m512i a, __m512i b)
__m512i _mm512_maskz_dpwssd_epi32 (__mmask16 k, __m512i src, __m512i a, __m512i b)
__m512i _mm512_dpwssds_epi32 (__m512i src, __m512i a, __m512i b)
__m512i _mm512_mask_dpwssds_epi32 (__m512i src, __mmask16 k, __m512i a, __m512i b)
__m512i _mm512_maskz_dpwssds_epi32 (__mmask16 k, __m512i src, __m512i a, __m512i b)

avx512vlvnniintrin.h
__m128i _mm_dpbusd_epi32 (__m128i src, __m128i a, __m128i b)
__m128i _mm_mask_dpbusd_epi32 (__m128i src, __mmask8 k, __m128i a, __m128i b)
__m128i _mm_maskz_dpbusd_epi32 (__mmask8 k, __m128i src, __m128i a, __m128i b)
__m256i _mm256_dpbusd_epi32 (__m256i src, __m256i a, __m256i b)
__m256i _mm256_mask_dpbusd_epi32 (__m256i src, __mmask8 k, __m256i a, __m256i b)
__m256i _mm256_maskz_dpbusd_epi32 (__mmask8 k, __m256i src, __m256i a, __m256i b)
__m128i _mm_dpbusds_epi32 (__m128i src, __m128i a, __m128i b)
__m128i _mm_mask_dpbusds_epi32 (__m128i src, __mmask8 k, __m128i a, __m128i b)
__m128i _mm_maskz_dpbusds_epi32 (__mmask8 k, __m128i src, __m128i a, __m128i b)
__m256i _mm256_dpbusds_epi32 (__m256i src, __m256i a, __m256i b)
__m256i _mm256_mask_dpbusds_epi32 (__m256i src, __mmask8 k, __m256i a, __m256i b)
__m256i _mm256_maskz_dpbusds_epi32 (__mmask8 k, __m256i src, __m256i a, __m256i b)
__m128i _mm_dpwssd_epi32 (__m128i src, __m128i a, __m128i b)
__m128i _mm_mask_dpwssd_epi32 (__m128i src, __mmask8 k, __m128i a, __m128i b)
__m128i _mm_maskz_dpwssd_epi32 (__mmask8 k, __m128i src, __m128i a, __m128i b)
__m256i _mm256_dpwssd_epi32 (__m256i src, __m256i a, __m256i b)
__m256i _mm256_mask_dpwssd_epi32 (__m256i src, __mmask8 k, __m256i a, __m256i b)
__m256i _mm256_maskz_dpwssd_epi32 (__mmask8 k, __m256i src, __m256i a, __m256i b)
__m128i _mm_dpwssds_epi32 (__m128i src, __m128i a, __m128i b)
__m128i _mm_mask_dpwssds_epi32 (__m128i src, __mmask8 k, __m128i a, __m128i b)
__m128i _mm_maskz_dpwssds_epi32 (__mmask8 k, __m128i src, __m128i a, __m128i b)
__m256i _mm256_dpwssds_epi32 (__m256i src, __m256i a, __m256i b)
__m256i _mm256_mask_dpwssds_epi32 (__m256i src, __mmask8 k, __m256i a, __m256i b)
__m256i _mm256_maskz_dpwssds_epi32 (__mmask8 k, __m256i src, __m256i a, __m256i b)

Some of the vnni8/16 intrinsics still have incorrect intrinsic types, so care must be taken attempting those (see #97271).

Please consult the Intel Intrinsics Guide, and ideally have access to a recent Intel/AMD machine to test your implementation.

Contributor Guide