Skip to content

Commit b7f7d96

Browse files
authored
[Headers][X86] Allow SSE2/AVX2/AVX512F/AVX512BW/AVX512DQ integer multiply intrinsics to be used in constexpr (#156369)
Fixes #155411
1 parent 372a86b commit b7f7d96

16 files changed

+54
-38
lines changed

clang/lib/Headers/avx2intrin.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,9 +1766,8 @@ _mm256_mullo_epi16(__m256i __a, __m256i __b)
17661766
/// \param __b
17671767
/// A 256-bit vector of [8 x i32] containing one of the source operands.
17681768
/// \returns A 256-bit vector of [8 x i32] containing the products.
1769-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1770-
_mm256_mullo_epi32 (__m256i __a, __m256i __b)
1771-
{
1769+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1770+
_mm256_mullo_epi32(__m256i __a, __m256i __b) {
17721771
return (__m256i)((__v8su)__a * (__v8su)__b);
17731772
}
17741773

clang/lib/Headers/avx512bwintrin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,14 +451,14 @@ _mm512_mullo_epi16 (__m512i __A, __m512i __B) {
451451
return (__m512i) ((__v32hu) __A * (__v32hu) __B);
452452
}
453453

454-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
454+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
455455
_mm512_mask_mullo_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
456456
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
457457
(__v32hi)_mm512_mullo_epi16(__A, __B),
458458
(__v32hi)__W);
459459
}
460460

461-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
461+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
462462
_mm512_maskz_mullo_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
463463
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
464464
(__v32hi)_mm512_mullo_epi16(__A, __B),

clang/lib/Headers/avx512dqintrin.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,19 +156,19 @@ _store_mask8(__mmask8 *__A, __mmask8 __B) {
156156
*(__mmask8 *)__A = __builtin_ia32_kmovb((__mmask8)__B);
157157
}
158158

159-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
160-
_mm512_mullo_epi64 (__m512i __A, __m512i __B) {
159+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
160+
_mm512_mullo_epi64(__m512i __A, __m512i __B) {
161161
return (__m512i) ((__v8du) __A * (__v8du) __B);
162162
}
163163

164-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
164+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
165165
_mm512_mask_mullo_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
166166
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
167167
(__v8di)_mm512_mullo_epi64(__A, __B),
168168
(__v8di)__W);
169169
}
170170

171-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
171+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
172172
_mm512_maskz_mullo_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
173173
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
174174
(__v8di)_mm512_mullo_epi64(__A, __B),

clang/lib/Headers/avx512fintrin.h

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1450,23 +1450,20 @@ _mm512_maskz_mul_epu32(__mmask8 __M, __m512i __X, __m512i __Y)
14501450
(__v8di)_mm512_setzero_si512 ());
14511451
}
14521452

1453-
static __inline __m512i __DEFAULT_FN_ATTRS512
1454-
_mm512_mullo_epi32 (__m512i __A, __m512i __B)
1455-
{
1453+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1454+
_mm512_mullo_epi32(__m512i __A, __m512i __B) {
14561455
return (__m512i) ((__v16su) __A * (__v16su) __B);
14571456
}
14581457

1459-
static __inline __m512i __DEFAULT_FN_ATTRS512
1460-
_mm512_maskz_mullo_epi32(__mmask16 __M, __m512i __A, __m512i __B)
1461-
{
1458+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1459+
_mm512_maskz_mullo_epi32(__mmask16 __M, __m512i __A, __m512i __B) {
14621460
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
14631461
(__v16si)_mm512_mullo_epi32(__A, __B),
14641462
(__v16si)_mm512_setzero_si512());
14651463
}
14661464

1467-
static __inline __m512i __DEFAULT_FN_ATTRS512
1468-
_mm512_mask_mullo_epi32(__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
1469-
{
1465+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1466+
_mm512_mask_mullo_epi32(__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) {
14701467
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
14711468
(__v16si)_mm512_mullo_epi32(__A, __B),
14721469
(__v16si)__W);

clang/lib/Headers/avx512vlbwintrin.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -426,28 +426,28 @@ _mm_maskz_sub_epi16(__mmask8 __U, __m128i __A, __m128i __B) {
426426
(__v8hi)_mm_setzero_si128());
427427
}
428428

429-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
429+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
430430
_mm256_mask_mullo_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) {
431431
return (__m256i)__builtin_ia32_selectw_256((__mmask16)__U,
432432
(__v16hi)_mm256_mullo_epi16(__A, __B),
433433
(__v16hi)__W);
434434
}
435435

436-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
436+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
437437
_mm256_maskz_mullo_epi16(__mmask16 __U, __m256i __A, __m256i __B) {
438438
return (__m256i)__builtin_ia32_selectw_256((__mmask16)__U,
439439
(__v16hi)_mm256_mullo_epi16(__A, __B),
440440
(__v16hi)_mm256_setzero_si256());
441441
}
442442

443-
static __inline__ __m128i __DEFAULT_FN_ATTRS128
443+
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
444444
_mm_mask_mullo_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) {
445445
return (__m128i)__builtin_ia32_selectw_128((__mmask8)__U,
446446
(__v8hi)_mm_mullo_epi16(__A, __B),
447447
(__v8hi)__W);
448448
}
449449

450-
static __inline__ __m128i __DEFAULT_FN_ATTRS128
450+
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
451451
_mm_maskz_mullo_epi16(__mmask8 __U, __m128i __A, __m128i __B) {
452452
return (__m128i)__builtin_ia32_selectw_128((__mmask8)__U,
453453
(__v8hi)_mm_mullo_epi16(__A, __B),

clang/lib/Headers/avx512vldqintrin.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,38 @@
3232
#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128
3333
#endif
3434

35-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
36-
_mm256_mullo_epi64 (__m256i __A, __m256i __B) {
35+
static __inline__ __m256i __DEFAULT_FN_ATTRS128_CONSTEXPR
36+
_mm256_mullo_epi64(__m256i __A, __m256i __B) {
3737
return (__m256i) ((__v4du) __A * (__v4du) __B);
3838
}
3939

40-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
40+
static __inline__ __m256i __DEFAULT_FN_ATTRS128_CONSTEXPR
4141
_mm256_mask_mullo_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) {
4242
return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
4343
(__v4di)_mm256_mullo_epi64(__A, __B),
4444
(__v4di)__W);
4545
}
4646

47-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
47+
static __inline__ __m256i __DEFAULT_FN_ATTRS128_CONSTEXPR
4848
_mm256_maskz_mullo_epi64(__mmask8 __U, __m256i __A, __m256i __B) {
4949
return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
5050
(__v4di)_mm256_mullo_epi64(__A, __B),
5151
(__v4di)_mm256_setzero_si256());
5252
}
5353

54-
static __inline__ __m128i __DEFAULT_FN_ATTRS128
55-
_mm_mullo_epi64 (__m128i __A, __m128i __B) {
54+
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
55+
_mm_mullo_epi64(__m128i __A, __m128i __B) {
5656
return (__m128i) ((__v2du) __A * (__v2du) __B);
5757
}
5858

59-
static __inline__ __m128i __DEFAULT_FN_ATTRS128
59+
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
6060
_mm_mask_mullo_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) {
6161
return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
6262
(__v2di)_mm_mullo_epi64(__A, __B),
6363
(__v2di)__W);
6464
}
6565

66-
static __inline__ __m128i __DEFAULT_FN_ATTRS128
66+
static __inline__ __m128i __DEFAULT_FN_ATTRS128_CONSTEXPR
6767
_mm_maskz_mullo_epi64(__mmask8 __U, __m128i __A, __m128i __B) {
6868
return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
6969
(__v2di)_mm_mullo_epi64(__A, __B),

clang/lib/Headers/avx512vlintrin.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -429,17 +429,15 @@ _mm_maskz_mul_epu32(__mmask8 __M, __m128i __X, __m128i __Y)
429429
(__v2di)_mm_setzero_si128());
430430
}
431431

432-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
433-
_mm256_maskz_mullo_epi32(__mmask8 __M, __m256i __A, __m256i __B)
434-
{
432+
static __inline__ __m256i __DEFAULT_FN_ATTRS128_CONSTEXPR
433+
_mm256_maskz_mullo_epi32(__mmask8 __M, __m256i __A, __m256i __B) {
435434
return (__m256i)__builtin_ia32_selectd_256((__mmask8)__M,
436435
(__v8si)_mm256_mullo_epi32(__A, __B),
437436
(__v8si)_mm256_setzero_si256());
438437
}
439438

440-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
441-
_mm256_mask_mullo_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B)
442-
{
439+
static __inline__ __m256i __DEFAULT_FN_ATTRS128_CONSTEXPR
440+
_mm256_mask_mullo_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) {
443441
return (__m256i)__builtin_ia32_selectd_256((__mmask8)__M,
444442
(__v8si)_mm256_mullo_epi32(__A, __B),
445443
(__v8si)__W);

clang/lib/Headers/smmintrin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -548,8 +548,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_blendv_epi8(__m128i __V1,
548548
/// \param __V2
549549
/// A 128-bit integer vector.
550550
/// \returns A 128-bit integer vector containing the products of both operands.
551-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mullo_epi32(__m128i __V1,
552-
__m128i __V2) {
551+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
552+
_mm_mullo_epi32(__m128i __V1, __m128i __V2) {
553553
return (__m128i)((__v4su)__V1 * (__v4su)__V2);
554554
}
555555

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,7 @@ __m256i test_mm256_mullo_epi32(__m256i a, __m256i b) {
976976
// CHECK: mul <8 x i32>
977977
return _mm256_mullo_epi32(a, b);
978978
}
979+
TEST_CONSTEXPR(match_v8si(_mm256_mullo_epi32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-16, -14, +12, +10, -8, +6, -4, +2}), -16, 28, 36, -40, -40, -36, -28, -16));
979980

980981
__m256i test_mm256_or_si256(__m256i a, __m256i b) {
981982
// CHECK-LABEL: test_mm256_or_si256

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,13 +839,15 @@ __m512i test_mm512_mask_mullo_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __
839839
//CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
840840
return _mm512_mask_mullo_epi16(__W, __U, __A, __B);
841841
}
842+
TEST_CONSTEXPR(match_v32hi(_mm512_mask_mullo_epi16((__m512i)(__v32hi){-1, +2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32}, 0x0000FFFF, (__m512i)(__v32hi){+2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33}, (__m512i)(__v32hi){-3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33, +34}), -6, -12, -20, -30, -42, -56, -72, -90, -110, -132, -156, -182, -210, -240, -272, -306, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32));
842843

843844
__m512i test_mm512_maskz_mullo_epi16 (__mmask32 __U, __m512i __A, __m512i __B) {
844845
//CHECK-LABEL: test_mm512_maskz_mullo_epi16
845846
//CHECK: mul <32 x i16> %{{.*}}, %{{.*}}
846847
//CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
847848
return _mm512_maskz_mullo_epi16(__U, __A, __B);
848849
}
850+
TEST_CONSTEXPR(match_v32hi(_mm512_maskz_mullo_epi16(0x0000FFFF, (__m512i)(__v32hi){+2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33}, (__m512i)(__v32hi){-3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33, +34}), -6, -12, -20, -30, -42, -56, -72, -90, -110, -132, -156, -182, -210, -240, -272, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
849851

850852
__m512i test_mm512_mask_blend_epi8(__mmask64 __U, __m512i __A, __m512i __W) {
851853
// CHECK-LABEL: test_mm512_mask_blend_epi8

0 commit comments

Comments
 (0)