[clang] [Clang] Allow VDBPSADBW intrinsics in constexpr (PR #188887)
Simon Pilgrim via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 29 07:11:50 PDT 2026
================
@@ -3676,41 +3676,83 @@ TEST_CONSTEXPR(match_v32qi(_mm256_maskz_alignr_epi8((__mmask32)0xf000000f, ((__m
__m128i test_mm_dbsad_epu8(__m128i __A, __m128i __B) {
// CHECK-LABEL: test_mm_dbsad_epu8
// CHECK: @llvm.x86.avx512.dbpsadbw.128
- return _mm_dbsad_epu8(__A, __B, 170);
-}
+ return _mm_dbsad_epu8(__A, __B, 170);
+}
+// imm8=4: blockA=A[0..3]={0,1,2,3}, blockB=A[4..7]={4,5,6,7}
+// J=0: B[0..3]={1,2,3,4} vs blockA=4, vs blockB=12
+// J=1: B[4..7]={5,6,7,8} vs blockA=20, vs blockB=4
+// J=2: B[8..11]={9,10,11,12} vs blockA=36, vs blockB=20
+// J=3: B[12..15]={13,14,15,16} vs blockA=52, vs blockB=36
+TEST_CONSTEXPR(match_v8hu(_mm_dbsad_epu8(
+ ((__m128i)(__v16qu){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}),
+ ((__m128i)(__v16qu){1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}),
+ 4), 4, 12, 20, 4, 36, 20, 52, 36));
----------------
RKSimon wrote:
have you checked these numbers on actual avx512 hardware?
it doesn't seem to match:
```c
#include <stdio.h>
#include <immintrin.h>
int main() {
__v8hu v = _mm_dbsad_epu8(
((__m128i)(__v16qu){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}),
((__m128i)(__v16qu){1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}),
4);
// 4, 12, 20, 4, 36, 20, 52, 36
for (int i = 0; i != 8; ++i)
printf("%d, ", v[i]);
printf("\n");
printf("4, 12, 20, 4, 36, 20, 52, 36\n");
return 0;
}
```
```
4, 8, 4, 0, 28, 28, 44, 44,
4, 12, 20, 4, 36, 20, 52, 36
```
https://github.com/llvm/llvm-project/pull/188887
More information about the cfe-commits
mailing list