Skip to content

Commit 5433c44

Browse files
authored
[Headers][X86] Allow AVX512 integer min/max mask/maskz variants intrinsics to be used in constexpr (#156901)
Update the AVX512 integer min/max mask/maskz variants intrinsics to be constexpr compatible. This is a follow-up to #156833, and the last in the 'Allow MMX/SSE/AVX2/AVX512 integer min/max intrinsics to be used in constexpr' series. Closes #153153
1 parent 6e52283 commit 5433c44

File tree

8 files changed

+449
-242
lines changed

8 files changed

+449
-242
lines changed

clang/lib/Headers/avx512bwintrin.h

Lines changed: 32 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -741,17 +741,15 @@ _mm512_max_epi8(__m512i __A, __m512i __B) {
741741
return (__m512i)__builtin_elementwise_max((__v64qs) __A, (__v64qs) __B);
742742
}
743743

744-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
745-
_mm512_maskz_max_epi8 (__mmask64 __M, __m512i __A, __m512i __B)
746-
{
744+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
745+
_mm512_maskz_max_epi8(__mmask64 __M, __m512i __A, __m512i __B) {
747746
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
748747
(__v64qi)_mm512_max_epi8(__A, __B),
749748
(__v64qi)_mm512_setzero_si512());
750749
}
751750

752-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
753-
_mm512_mask_max_epi8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
754-
{
751+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
752+
_mm512_mask_max_epi8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
755753
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
756754
(__v64qi)_mm512_max_epi8(__A, __B),
757755
(__v64qi)__W);
@@ -762,18 +760,15 @@ _mm512_max_epi16(__m512i __A, __m512i __B) {
762760
return (__m512i)__builtin_elementwise_max((__v32hi) __A, (__v32hi) __B);
763761
}
764762

765-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
766-
_mm512_maskz_max_epi16 (__mmask32 __M, __m512i __A, __m512i __B)
767-
{
763+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
764+
_mm512_maskz_max_epi16(__mmask32 __M, __m512i __A, __m512i __B) {
768765
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
769766
(__v32hi)_mm512_max_epi16(__A, __B),
770767
(__v32hi)_mm512_setzero_si512());
771768
}
772769

773-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
774-
_mm512_mask_max_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
775-
__m512i __B)
776-
{
770+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
771+
_mm512_mask_max_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
777772
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
778773
(__v32hi)_mm512_max_epi16(__A, __B),
779774
(__v32hi)__W);
@@ -784,17 +779,15 @@ _mm512_max_epu8(__m512i __A, __m512i __B) {
784779
return (__m512i)__builtin_elementwise_max((__v64qu)__A, (__v64qu)__B);
785780
}
786781

787-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
788-
_mm512_maskz_max_epu8 (__mmask64 __M, __m512i __A, __m512i __B)
789-
{
782+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
783+
_mm512_maskz_max_epu8(__mmask64 __M, __m512i __A, __m512i __B) {
790784
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
791785
(__v64qi)_mm512_max_epu8(__A, __B),
792786
(__v64qi)_mm512_setzero_si512());
793787
}
794788

795-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
796-
_mm512_mask_max_epu8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
797-
{
789+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
790+
_mm512_mask_max_epu8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
798791
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
799792
(__v64qi)_mm512_max_epu8(__A, __B),
800793
(__v64qi)__W);
@@ -805,17 +798,15 @@ _mm512_max_epu16(__m512i __A, __m512i __B) {
805798
return (__m512i)__builtin_elementwise_max((__v32hu)__A, (__v32hu)__B);
806799
}
807800

808-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
809-
_mm512_maskz_max_epu16 (__mmask32 __M, __m512i __A, __m512i __B)
810-
{
801+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
802+
_mm512_maskz_max_epu16(__mmask32 __M, __m512i __A, __m512i __B) {
811803
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
812804
(__v32hi)_mm512_max_epu16(__A, __B),
813805
(__v32hi)_mm512_setzero_si512());
814806
}
815807

816-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
817-
_mm512_mask_max_epu16 (__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
818-
{
808+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
809+
_mm512_mask_max_epu16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
819810
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
820811
(__v32hi)_mm512_max_epu16(__A, __B),
821812
(__v32hi)__W);
@@ -826,17 +817,15 @@ _mm512_min_epi8(__m512i __A, __m512i __B) {
826817
return (__m512i)__builtin_elementwise_min((__v64qs) __A, (__v64qs) __B);
827818
}
828819

829-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
830-
_mm512_maskz_min_epi8 (__mmask64 __M, __m512i __A, __m512i __B)
831-
{
820+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
821+
_mm512_maskz_min_epi8(__mmask64 __M, __m512i __A, __m512i __B) {
832822
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
833823
(__v64qi)_mm512_min_epi8(__A, __B),
834824
(__v64qi)_mm512_setzero_si512());
835825
}
836826

837-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
838-
_mm512_mask_min_epi8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
839-
{
827+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
828+
_mm512_mask_min_epi8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
840829
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
841830
(__v64qi)_mm512_min_epi8(__A, __B),
842831
(__v64qi)__W);
@@ -847,17 +836,15 @@ _mm512_min_epi16(__m512i __A, __m512i __B) {
847836
return (__m512i)__builtin_elementwise_min((__v32hi) __A, (__v32hi) __B);
848837
}
849838

850-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
851-
_mm512_maskz_min_epi16 (__mmask32 __M, __m512i __A, __m512i __B)
852-
{
839+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
840+
_mm512_maskz_min_epi16(__mmask32 __M, __m512i __A, __m512i __B) {
853841
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
854842
(__v32hi)_mm512_min_epi16(__A, __B),
855843
(__v32hi)_mm512_setzero_si512());
856844
}
857845

858-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
859-
_mm512_mask_min_epi16 (__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
860-
{
846+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
847+
_mm512_mask_min_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
861848
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
862849
(__v32hi)_mm512_min_epi16(__A, __B),
863850
(__v32hi)__W);
@@ -868,17 +855,15 @@ _mm512_min_epu8(__m512i __A, __m512i __B) {
868855
return (__m512i)__builtin_elementwise_min((__v64qu)__A, (__v64qu)__B);
869856
}
870857

871-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
872-
_mm512_maskz_min_epu8 (__mmask64 __M, __m512i __A, __m512i __B)
873-
{
858+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
859+
_mm512_maskz_min_epu8(__mmask64 __M, __m512i __A, __m512i __B) {
874860
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
875861
(__v64qi)_mm512_min_epu8(__A, __B),
876862
(__v64qi)_mm512_setzero_si512());
877863
}
878864

879-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
880-
_mm512_mask_min_epu8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
881-
{
865+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
866+
_mm512_mask_min_epu8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) {
882867
return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
883868
(__v64qi)_mm512_min_epu8(__A, __B),
884869
(__v64qi)__W);
@@ -889,17 +874,15 @@ _mm512_min_epu16(__m512i __A, __m512i __B) {
889874
return (__m512i)__builtin_elementwise_min((__v32hu)__A, (__v32hu)__B);
890875
}
891876

892-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
893-
_mm512_maskz_min_epu16 (__mmask32 __M, __m512i __A, __m512i __B)
894-
{
877+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
878+
_mm512_maskz_min_epu16(__mmask32 __M, __m512i __A, __m512i __B) {
895879
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
896880
(__v32hi)_mm512_min_epu16(__A, __B),
897881
(__v32hi)_mm512_setzero_si512());
898882
}
899883

900-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
901-
_mm512_mask_min_epu16 (__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
902-
{
884+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
885+
_mm512_mask_min_epu16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) {
903886
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
904887
(__v32hi)_mm512_min_epu16(__A, __B),
905888
(__v32hi)__W);

clang/lib/Headers/avx512fintrin.h

Lines changed: 32 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,17 +1092,15 @@ static __inline __m512i
10921092
return (__m512i)__builtin_elementwise_max((__v16si)__A, (__v16si)__B);
10931093
}
10941094

1095-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1096-
_mm512_mask_max_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
1097-
{
1095+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1096+
_mm512_mask_max_epi32(__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) {
10981097
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
10991098
(__v16si)_mm512_max_epi32(__A, __B),
11001099
(__v16si)__W);
11011100
}
11021101

1103-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1104-
_mm512_maskz_max_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
1105-
{
1102+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1103+
_mm512_maskz_max_epi32(__mmask16 __M, __m512i __A, __m512i __B) {
11061104
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
11071105
(__v16si)_mm512_max_epi32(__A, __B),
11081106
(__v16si)_mm512_setzero_si512());
@@ -1113,17 +1111,15 @@ _mm512_max_epu32(__m512i __A, __m512i __B) {
11131111
return (__m512i)__builtin_elementwise_max((__v16su)__A, (__v16su)__B);
11141112
}
11151113

1116-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1117-
_mm512_mask_max_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
1118-
{
1114+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1115+
_mm512_mask_max_epu32(__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) {
11191116
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
11201117
(__v16si)_mm512_max_epu32(__A, __B),
11211118
(__v16si)__W);
11221119
}
11231120

1124-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1125-
_mm512_maskz_max_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
1126-
{
1121+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1122+
_mm512_maskz_max_epu32(__mmask16 __M, __m512i __A, __m512i __B) {
11271123
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
11281124
(__v16si)_mm512_max_epu32(__A, __B),
11291125
(__v16si)_mm512_setzero_si512());
@@ -1134,17 +1130,15 @@ _mm512_max_epi64(__m512i __A, __m512i __B) {
11341130
return (__m512i)__builtin_elementwise_max((__v8di)__A, (__v8di)__B);
11351131
}
11361132

1137-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1138-
_mm512_mask_max_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
1139-
{
1133+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1134+
_mm512_mask_max_epi64(__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) {
11401135
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
11411136
(__v8di)_mm512_max_epi64(__A, __B),
11421137
(__v8di)__W);
11431138
}
11441139

1145-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1146-
_mm512_maskz_max_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
1147-
{
1140+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1141+
_mm512_maskz_max_epi64(__mmask8 __M, __m512i __A, __m512i __B) {
11481142
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
11491143
(__v8di)_mm512_max_epi64(__A, __B),
11501144
(__v8di)_mm512_setzero_si512());
@@ -1155,17 +1149,15 @@ _mm512_max_epu64(__m512i __A, __m512i __B) {
11551149
return (__m512i)__builtin_elementwise_max((__v8du)__A, (__v8du)__B);
11561150
}
11571151

1158-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1159-
_mm512_mask_max_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
1160-
{
1152+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1153+
_mm512_mask_max_epu64(__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) {
11611154
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
11621155
(__v8di)_mm512_max_epu64(__A, __B),
11631156
(__v8di)__W);
11641157
}
11651158

1166-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1167-
_mm512_maskz_max_epu64 (__mmask8 __M, __m512i __A, __m512i __B)
1168-
{
1159+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1160+
_mm512_maskz_max_epu64(__mmask8 __M, __m512i __A, __m512i __B) {
11691161
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
11701162
(__v8di)_mm512_max_epu64(__A, __B),
11711163
(__v8di)_mm512_setzero_si512());
@@ -1322,17 +1314,15 @@ static __inline __m512i
13221314
return (__m512i)__builtin_elementwise_min((__v16si)__A, (__v16si)__B);
13231315
}
13241316

1325-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1326-
_mm512_mask_min_epi32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
1327-
{
1317+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1318+
_mm512_mask_min_epi32(__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) {
13281319
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
13291320
(__v16si)_mm512_min_epi32(__A, __B),
13301321
(__v16si)__W);
13311322
}
13321323

1333-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1334-
_mm512_maskz_min_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
1335-
{
1324+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1325+
_mm512_maskz_min_epi32(__mmask16 __M, __m512i __A, __m512i __B) {
13361326
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
13371327
(__v16si)_mm512_min_epi32(__A, __B),
13381328
(__v16si)_mm512_setzero_si512());
@@ -1343,17 +1333,15 @@ _mm512_min_epu32(__m512i __A, __m512i __B) {
13431333
return (__m512i)__builtin_elementwise_min((__v16su)__A, (__v16su)__B);
13441334
}
13451335

1346-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1347-
_mm512_mask_min_epu32 (__m512i __W, __mmask16 __M, __m512i __A, __m512i __B)
1348-
{
1336+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1337+
_mm512_mask_min_epu32(__m512i __W, __mmask16 __M, __m512i __A, __m512i __B) {
13491338
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
13501339
(__v16si)_mm512_min_epu32(__A, __B),
13511340
(__v16si)__W);
13521341
}
13531342

1354-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1355-
_mm512_maskz_min_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
1356-
{
1343+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1344+
_mm512_maskz_min_epu32(__mmask16 __M, __m512i __A, __m512i __B) {
13571345
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
13581346
(__v16si)_mm512_min_epu32(__A, __B),
13591347
(__v16si)_mm512_setzero_si512());
@@ -1364,17 +1352,15 @@ _mm512_min_epi64(__m512i __A, __m512i __B) {
13641352
return (__m512i)__builtin_elementwise_min((__v8di)__A, (__v8di)__B);
13651353
}
13661354

1367-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1368-
_mm512_mask_min_epi64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
1369-
{
1355+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1356+
_mm512_mask_min_epi64(__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) {
13701357
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
13711358
(__v8di)_mm512_min_epi64(__A, __B),
13721359
(__v8di)__W);
13731360
}
13741361

1375-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1376-
_mm512_maskz_min_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
1377-
{
1362+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1363+
_mm512_maskz_min_epi64(__mmask8 __M, __m512i __A, __m512i __B) {
13781364
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
13791365
(__v8di)_mm512_min_epi64(__A, __B),
13801366
(__v8di)_mm512_setzero_si512());
@@ -1385,17 +1371,15 @@ _mm512_min_epu64(__m512i __A, __m512i __B) {
13851371
return (__m512i)__builtin_elementwise_min((__v8du)__A, (__v8du)__B);
13861372
}
13871373

1388-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1389-
_mm512_mask_min_epu64 (__m512i __W, __mmask8 __M, __m512i __A, __m512i __B)
1390-
{
1374+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1375+
_mm512_mask_min_epu64(__m512i __W, __mmask8 __M, __m512i __A, __m512i __B) {
13911376
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
13921377
(__v8di)_mm512_min_epu64(__A, __B),
13931378
(__v8di)__W);
13941379
}
13951380

1396-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1397-
_mm512_maskz_min_epu64 (__mmask8 __M, __m512i __A, __m512i __B)
1398-
{
1381+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1382+
_mm512_maskz_min_epu64(__mmask8 __M, __m512i __A, __m512i __B) {
13991383
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
14001384
(__v8di)_mm512_min_epu64(__A, __B),
14011385
(__v8di)_mm512_setzero_si512());

0 commit comments

Comments
 (0)