Skip to content

Commit 44e71c9

Browse files
donneyprRKSimon
andauthored
[Headers][X86] Allow SSE2/AVX2/AVX512F/AVX512BW/AVX512DQ integer arithmetic intrinsics to be used in constexpr (#157582)
Fixes #152490 --------- Co-authored-by: Simon Pilgrim <[email protected]>
1 parent 4839cc1 commit 44e71c9

12 files changed

+255
-150
lines changed

clang/lib/Headers/avx2intrin.h

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -279,9 +279,8 @@ _mm256_packus_epi32(__m256i __V1, __m256i __V2)
279279
/// \param __b
280280
/// A 256-bit integer vector containing one of the source operands.
281281
/// \returns A 256-bit integer vector containing the sums.
282-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
283-
_mm256_add_epi8(__m256i __a, __m256i __b)
284-
{
282+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
283+
_mm256_add_epi8(__m256i __a, __m256i __b) {
285284
return (__m256i)((__v32qu)__a + (__v32qu)__b);
286285
}
287286

@@ -298,9 +297,8 @@ _mm256_add_epi8(__m256i __a, __m256i __b)
298297
/// \param __b
299298
/// A 256-bit vector of [16 x i16] containing one of the source operands.
300299
/// \returns A 256-bit vector of [16 x i16] containing the sums.
301-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
302-
_mm256_add_epi16(__m256i __a, __m256i __b)
303-
{
300+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
301+
_mm256_add_epi16(__m256i __a, __m256i __b) {
304302
return (__m256i)((__v16hu)__a + (__v16hu)__b);
305303
}
306304

@@ -317,9 +315,8 @@ _mm256_add_epi16(__m256i __a, __m256i __b)
317315
/// \param __b
318316
/// A 256-bit vector of [8 x i32] containing one of the source operands.
319317
/// \returns A 256-bit vector of [8 x i32] containing the sums.
320-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
321-
_mm256_add_epi32(__m256i __a, __m256i __b)
322-
{
318+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
319+
_mm256_add_epi32(__m256i __a, __m256i __b) {
323320
return (__m256i)((__v8su)__a + (__v8su)__b);
324321
}
325322

@@ -336,9 +333,8 @@ _mm256_add_epi32(__m256i __a, __m256i __b)
336333
/// \param __b
337334
/// A 256-bit vector of [4 x i64] containing one of the source operands.
338335
/// \returns A 256-bit vector of [4 x i64] containing the sums.
339-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
340-
_mm256_add_epi64(__m256i __a, __m256i __b)
341-
{
336+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
337+
_mm256_add_epi64(__m256i __a, __m256i __b) {
342338
return (__m256i)((__v4du)__a + (__v4du)__b);
343339
}
344340

@@ -2464,9 +2460,8 @@ _mm256_srl_epi64(__m256i __a, __m128i __count)
24642460
/// \param __b
24652461
/// A 256-bit integer vector containing the subtrahends.
24662462
/// \returns A 256-bit integer vector containing the differences.
2467-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
2468-
_mm256_sub_epi8(__m256i __a, __m256i __b)
2469-
{
2463+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
2464+
_mm256_sub_epi8(__m256i __a, __m256i __b) {
24702465
return (__m256i)((__v32qu)__a - (__v32qu)__b);
24712466
}
24722467

@@ -2491,9 +2486,8 @@ _mm256_sub_epi8(__m256i __a, __m256i __b)
24912486
/// \param __b
24922487
/// A 256-bit vector of [16 x i16] containing the subtrahends.
24932488
/// \returns A 256-bit vector of [16 x i16] containing the differences.
2494-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
2495-
_mm256_sub_epi16(__m256i __a, __m256i __b)
2496-
{
2489+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
2490+
_mm256_sub_epi16(__m256i __a, __m256i __b) {
24972491
return (__m256i)((__v16hu)__a - (__v16hu)__b);
24982492
}
24992493

@@ -2517,9 +2511,8 @@ _mm256_sub_epi16(__m256i __a, __m256i __b)
25172511
/// \param __b
25182512
/// A 256-bit vector of [8 x i32] containing the subtrahends.
25192513
/// \returns A 256-bit vector of [8 x i32] containing the differences.
2520-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
2521-
_mm256_sub_epi32(__m256i __a, __m256i __b)
2522-
{
2514+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
2515+
_mm256_sub_epi32(__m256i __a, __m256i __b) {
25232516
return (__m256i)((__v8su)__a - (__v8su)__b);
25242517
}
25252518

@@ -2543,9 +2536,8 @@ _mm256_sub_epi32(__m256i __a, __m256i __b)
25432536
/// \param __b
25442537
/// A 256-bit vector of [4 x i64] containing the subtrahends.
25452538
/// \returns A 256-bit vector of [4 x i64] containing the differences.
2546-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
2547-
_mm256_sub_epi64(__m256i __a, __m256i __b)
2548-
{
2539+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
2540+
_mm256_sub_epi64(__m256i __a, __m256i __b) {
25492541
return (__m256i)((__v4du)__a - (__v4du)__b);
25502542
}
25512543

clang/lib/Headers/avx512bwintrin.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -369,76 +369,76 @@ static __inline__ void __DEFAULT_FN_ATTRS _store_mask64(__mmask64 *__A,
369369
#define _mm512_mask_cmpneq_epu16_mask(k, A, B) \
370370
_mm512_mask_cmp_epu16_mask((k), (A), (B), _MM_CMPINT_NE)
371371

372-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
373-
_mm512_add_epi8 (__m512i __A, __m512i __B) {
372+
static __inline__ __m512i
373+
__DEFAULT_FN_ATTRS512_CONSTEXPR _mm512_add_epi8(__m512i __A, __m512i __B) {
374374
return (__m512i) ((__v64qu) __A + (__v64qu) __B);
375375
}
376376

377-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
377+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
378378
_mm512_mask_add_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
379379
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
380380
(__v64qi)_mm512_add_epi8(__A, __B),
381381
(__v64qi)__W);
382382
}
383383

384-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
384+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
385385
_mm512_maskz_add_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
386386
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
387387
(__v64qi)_mm512_add_epi8(__A, __B),
388388
(__v64qi)_mm512_setzero_si512());
389389
}
390390

391-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
392-
_mm512_sub_epi8 (__m512i __A, __m512i __B) {
391+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
392+
_mm512_sub_epi8(__m512i __A, __m512i __B) {
393393
return (__m512i) ((__v64qu) __A - (__v64qu) __B);
394394
}
395395

396-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
396+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
397397
_mm512_mask_sub_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) {
398398
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
399399
(__v64qi)_mm512_sub_epi8(__A, __B),
400400
(__v64qi)__W);
401401
}
402402

403-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
403+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
404404
_mm512_maskz_sub_epi8(__mmask64 __U, __m512i __A, __m512i __B) {
405405
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U,
406406
(__v64qi)_mm512_sub_epi8(__A, __B),
407407
(__v64qi)_mm512_setzero_si512());
408408
}
409409

410-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
411-
_mm512_add_epi16 (__m512i __A, __m512i __B) {
410+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
411+
_mm512_add_epi16(__m512i __A, __m512i __B) {
412412
return (__m512i) ((__v32hu) __A + (__v32hu) __B);
413413
}
414414

415-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
415+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
416416
_mm512_mask_add_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
417417
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
418418
(__v32hi)_mm512_add_epi16(__A, __B),
419419
(__v32hi)__W);
420420
}
421421

422-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
422+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
423423
_mm512_maskz_add_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
424424
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
425425
(__v32hi)_mm512_add_epi16(__A, __B),
426426
(__v32hi)_mm512_setzero_si512());
427427
}
428428

429-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
430-
_mm512_sub_epi16 (__m512i __A, __m512i __B) {
429+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
430+
_mm512_sub_epi16(__m512i __A, __m512i __B) {
431431
return (__m512i) ((__v32hu) __A - (__v32hu) __B);
432432
}
433433

434-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
434+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
435435
_mm512_mask_sub_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) {
436436
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
437437
(__v32hi)_mm512_sub_epi16(__A, __B),
438438
(__v32hi)__W);
439439
}
440440

441-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
441+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
442442
_mm512_maskz_sub_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
443443
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__U,
444444
(__v32hi)_mm512_sub_epi16(__A, __B),

clang/lib/Headers/avx512fintrin.h

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -859,83 +859,72 @@ _mm512_add_epi64(__m512i __A, __m512i __B) {
859859
return (__m512i) ((__v8du) __A + (__v8du) __B);
860860
}
861861

862-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
863-
_mm512_mask_add_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B)
864-
{
862+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
863+
_mm512_mask_add_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
865864
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
866865
(__v8di)_mm512_add_epi64(__A, __B),
867866
(__v8di)__W);
868867
}
869868

870-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
871-
_mm512_maskz_add_epi64(__mmask8 __U, __m512i __A, __m512i __B)
872-
{
869+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
870+
_mm512_maskz_add_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
873871
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
874872
(__v8di)_mm512_add_epi64(__A, __B),
875873
(__v8di)_mm512_setzero_si512());
876874
}
877875

878-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
879-
_mm512_sub_epi64 (__m512i __A, __m512i __B)
880-
{
876+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
877+
_mm512_sub_epi64(__m512i __A, __m512i __B) {
881878
return (__m512i) ((__v8du) __A - (__v8du) __B);
882879
}
883880

884-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
885-
_mm512_mask_sub_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B)
886-
{
881+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
882+
_mm512_mask_sub_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) {
887883
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
888884
(__v8di)_mm512_sub_epi64(__A, __B),
889885
(__v8di)__W);
890886
}
891887

892-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
893-
_mm512_maskz_sub_epi64(__mmask8 __U, __m512i __A, __m512i __B)
894-
{
888+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
889+
_mm512_maskz_sub_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
895890
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
896891
(__v8di)_mm512_sub_epi64(__A, __B),
897892
(__v8di)_mm512_setzero_si512());
898893
}
899894

900-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
901-
_mm512_add_epi32 (__m512i __A, __m512i __B)
902-
{
895+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
896+
_mm512_add_epi32(__m512i __A, __m512i __B) {
903897
return (__m512i) ((__v16su) __A + (__v16su) __B);
904898
}
905899

906-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
907-
_mm512_mask_add_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B)
908-
{
900+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
901+
_mm512_mask_add_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
909902
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
910903
(__v16si)_mm512_add_epi32(__A, __B),
911904
(__v16si)__W);
912905
}
913906

914-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
915-
_mm512_maskz_add_epi32 (__mmask16 __U, __m512i __A, __m512i __B)
916-
{
907+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
908+
_mm512_maskz_add_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
917909
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
918910
(__v16si)_mm512_add_epi32(__A, __B),
919911
(__v16si)_mm512_setzero_si512());
920912
}
921913

922-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
923-
_mm512_sub_epi32 (__m512i __A, __m512i __B)
924-
{
914+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
915+
_mm512_sub_epi32(__m512i __A, __m512i __B) {
925916
return (__m512i) ((__v16su) __A - (__v16su) __B);
926917
}
927918

928-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
929-
_mm512_mask_sub_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B)
930-
{
919+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
920+
_mm512_mask_sub_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
931921
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
932922
(__v16si)_mm512_sub_epi32(__A, __B),
933923
(__v16si)__W);
934924
}
935925

936-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
937-
_mm512_maskz_sub_epi32(__mmask16 __U, __m512i __A, __m512i __B)
938-
{
926+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
927+
_mm512_maskz_sub_epi32(__mmask16 __U, __m512i __A, __m512i __B) {
939928
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
940929
(__v16si)_mm512_sub_epi32(__A, __B),
941930
(__v16si)_mm512_setzero_si512());

0 commit comments

Comments
 (0)