Skip to content

Commit 070790e

Browse files
committed
[Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - allow AVX512 mask broadcast intrinsics to be used in constexpr
1 parent 0e4fb17 commit 070790e

File tree

4 files changed

+20
-20
lines changed

4 files changed

+20
-20
lines changed

clang/lib/Headers/avx512cdintrin.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,14 @@ _mm512_maskz_lzcnt_epi64(__mmask8 __U, __m512i __A) {
109109
(__v8di)_mm512_setzero_si512());
110110
}
111111

112-
static __inline__ __m512i __DEFAULT_FN_ATTRS
113-
_mm512_broadcastmb_epi64 (__mmask8 __A)
114-
{
112+
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
113+
_mm512_broadcastmb_epi64(__mmask8 __A) {
115114
return (__m512i) _mm512_set1_epi64((long long) __A);
116115
}
117116

118-
static __inline__ __m512i __DEFAULT_FN_ATTRS
119-
_mm512_broadcastmw_epi32 (__mmask16 __A)
120-
{
117+
static __inline__ __m512i __DEFAULT_FN_ATTRS_CONSTEXPR
118+
_mm512_broadcastmw_epi32(__mmask16 __A) {
121119
return (__m512i) _mm512_set1_epi32((int) __A);
122-
123120
}
124121

125122
#undef __DEFAULT_FN_ATTRS

clang/lib/Headers/avx512vlcdintrin.h

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,26 @@
2929
#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128
3030
#endif
3131

32-
static __inline__ __m128i __DEFAULT_FN_ATTRS128
33-
_mm_broadcastmb_epi64 (__mmask8 __A)
34-
{
32+
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
33+
_mm_broadcastmb_epi64(__mmask8 __A) {
3534
return (__m128i) _mm_set1_epi64x((long long) __A);
3635
}
3736

38-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
39-
_mm256_broadcastmb_epi64 (__mmask8 __A)
40-
{
37+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
38+
_mm256_broadcastmb_epi64(__mmask8 __A) {
4139
return (__m256i) _mm256_set1_epi64x((long long)__A);
4240
}
4341

44-
static __inline__ __m128i __DEFAULT_FN_ATTRS128
45-
_mm_broadcastmw_epi32 (__mmask16 __A)
46-
{
42+
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
43+
_mm_broadcastmw_epi32(__mmask16 __A) {
4744
return (__m128i) _mm_set1_epi32((int)__A);
4845
}
4946

50-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
51-
_mm256_broadcastmw_epi32 (__mmask16 __A)
52-
{
47+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
48+
_mm256_broadcastmw_epi32(__mmask16 __A) {
5349
return (__m256i) _mm256_set1_epi32((int)__A);
5450
}
5551

56-
5752
static __inline__ __m128i __DEFAULT_FN_ATTRS128
5853
_mm_conflict_epi64 (__m128i __A)
5954
{

clang/test/CodeGen/X86/avx512cd-builtins.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ __m512i test_mm512_broadcastmb_epi64(__m512i a, __m512i b) {
125125
// CHECK: insertelement <8 x i64> %{{.*}}, i64 %{{.*}}, i32 7
126126
return _mm512_broadcastmb_epi64(_mm512_cmpeq_epu64_mask ( a, b));
127127
}
128+
TEST_CONSTEXPR(match_v8di(_mm512_broadcastmb_epi64((__mmask8)(0)), 0,0,0,0, 0,0,0,0));
129+
TEST_CONSTEXPR(match_v8di(_mm512_broadcastmb_epi64((__mmask8)(0xab)), 0xab,0xab,0xab,0xab, 0xab,0xab,0xab,0xab));
128130

129131
__m512i test_mm512_broadcastmw_epi32(__m512i a, __m512i b) {
130132
// CHECK-LABEL: test_mm512_broadcastmw_epi32
@@ -148,3 +150,5 @@ __m512i test_mm512_broadcastmw_epi32(__m512i a, __m512i b) {
148150
// CHECK: insertelement <16 x i32> %{{.*}}, i32 %{{.*}}
149151
return _mm512_broadcastmw_epi32(_mm512_cmpeq_epi32_mask ( a, b));
150152
}
153+
TEST_CONSTEXPR(match_v16si(_mm512_broadcastmw_epi32((__mmask16)(0xff)), 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff));
154+
TEST_CONSTEXPR(match_v16si(_mm512_broadcastmw_epi32((__mmask16)(0x0FA1L)), 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L, 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L, 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L, 0x0FA1L,0x0FA1L,0x0FA1L,0x0FA1L));

clang/test/CodeGen/X86/avx512vlcd-builtins.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ __m128i test_mm_broadcastmb_epi64(__m128i a,__m128i b) {
2020
// CHECK: insertelement <2 x i64> %{{.*}}, i64 %{{.*}}, i32 1
2121
return _mm_broadcastmb_epi64(_mm_cmpeq_epi32_mask (a, b));
2222
}
23+
TEST_CONSTEXPR(match_v2du(_mm_broadcastmb_epi64((__mmask8)(76)), 76, 76));
2324

2425
__m256i test_mm256_broadcastmb_epi64(__m256i a, __m256i b) {
2526
// CHECK-LABEL: test_mm256_broadcastmb_epi64
@@ -32,6 +33,7 @@ __m256i test_mm256_broadcastmb_epi64(__m256i a, __m256i b) {
3233
// CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
3334
return _mm256_broadcastmb_epi64(_mm256_cmpeq_epi64_mask ( a, b));
3435
}
36+
TEST_CONSTEXPR(match_v4di(_mm256_broadcastmb_epi64((__mmask8)(67)), 67, 67, 67, 67));
3537

3638
__m128i test_mm_broadcastmw_epi32(__m512i a, __m512i b) {
3739
// CHECK-LABEL: test_mm_broadcastmw_epi32
@@ -43,6 +45,7 @@ __m128i test_mm_broadcastmw_epi32(__m512i a, __m512i b) {
4345
// CHECK: insertelement <4 x i32> %{{.*}}, i32 %{{.*}}, i32 3
4446
return _mm_broadcastmw_epi32(_mm512_cmpeq_epi32_mask ( a, b));
4547
}
48+
TEST_CONSTEXPR(match_v4su(_mm_broadcastmw_epi32((__mmask16)(0xbabe)), 0xbabe, 0xbabe, 0xbabe, 0xbabe));
4649

4750
__m256i test_mm256_broadcastmw_epi32(__m512i a, __m512i b) {
4851
// CHECK-LABEL: test_mm256_broadcastmw_epi32
@@ -58,6 +61,7 @@ __m256i test_mm256_broadcastmw_epi32(__m512i a, __m512i b) {
5861
// CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
5962
return _mm256_broadcastmw_epi32(_mm512_cmpeq_epi32_mask ( a, b));
6063
}
64+
TEST_CONSTEXPR(match_v8si(_mm256_broadcastmw_epi32((__mmask16)(0xcafe)), 0xcafe,0xcafe,0xcafe,0xcafe, 0xcafe,0xcafe,0xcafe,0xcafe));
6165

6266
__m128i test_mm_conflict_epi64(__m128i __A) {
6367
// CHECK-LABEL: test_mm_conflict_epi64

0 commit comments

Comments
 (0)