llvm/llvm-project

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

Closed

#161,340 opened on Sep 30, 2025

 (7 comments) (0 reactions) (1 assignee)C++ (10,782 forks)batch import
backend:X86clang:bytecodeclang:headersconstexprgood first issue

Repository metrics

Stars
 (26,378 stars)
PR merge metrics
 (Avg merge 1d 2h) (1,000 merged PRs in 30d)

Description

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