Skip to content

Commit 5d13f28

Browse files
authored
[Headers][X86] Allow AVX2/AVX512 integer min/max intrinsics to be used in constexpr (#156833)
Update the AVX2/AVX512 min/max integer intrinsics to be constexpr compatible. This PR is a follow-up to #156678. The AVX512 mask/maskz variants will be addressed in the next follow-up. Part of #153153.
1 parent 36fb493 commit 5d13f28

File tree

8 files changed

+158
-100
lines changed

8 files changed

+158
-100
lines changed

clang/lib/Headers/avx2intrin.h

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,9 +1106,8 @@ _mm256_madd_epi16(__m256i __a, __m256i __b)
11061106
/// \param __b
11071107
/// A 256-bit integer vector.
11081108
/// \returns A 256-bit integer vector containing the result.
1109-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1110-
_mm256_max_epi8(__m256i __a, __m256i __b)
1111-
{
1109+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1110+
_mm256_max_epi8(__m256i __a, __m256i __b) {
11121111
return (__m256i)__builtin_elementwise_max((__v32qs)__a, (__v32qs)__b);
11131112
}
11141113

@@ -1125,9 +1124,8 @@ _mm256_max_epi8(__m256i __a, __m256i __b)
11251124
/// \param __b
11261125
/// A 256-bit vector of [16 x i16].
11271126
/// \returns A 256-bit vector of [16 x i16] containing the result.
1128-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1129-
_mm256_max_epi16(__m256i __a, __m256i __b)
1130-
{
1127+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1128+
_mm256_max_epi16(__m256i __a, __m256i __b) {
11311129
return (__m256i)__builtin_elementwise_max((__v16hi)__a, (__v16hi)__b);
11321130
}
11331131

@@ -1144,9 +1142,8 @@ _mm256_max_epi16(__m256i __a, __m256i __b)
11441142
/// \param __b
11451143
/// A 256-bit vector of [8 x i32].
11461144
/// \returns A 256-bit vector of [8 x i32] containing the result.
1147-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1148-
_mm256_max_epi32(__m256i __a, __m256i __b)
1149-
{
1145+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1146+
_mm256_max_epi32(__m256i __a, __m256i __b) {
11501147
return (__m256i)__builtin_elementwise_max((__v8si)__a, (__v8si)__b);
11511148
}
11521149

@@ -1163,9 +1160,8 @@ _mm256_max_epi32(__m256i __a, __m256i __b)
11631160
/// \param __b
11641161
/// A 256-bit integer vector.
11651162
/// \returns A 256-bit integer vector containing the result.
1166-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1167-
_mm256_max_epu8(__m256i __a, __m256i __b)
1168-
{
1163+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1164+
_mm256_max_epu8(__m256i __a, __m256i __b) {
11691165
return (__m256i)__builtin_elementwise_max((__v32qu)__a, (__v32qu)__b);
11701166
}
11711167

@@ -1182,9 +1178,8 @@ _mm256_max_epu8(__m256i __a, __m256i __b)
11821178
/// \param __b
11831179
/// A 256-bit vector of [16 x i16].
11841180
/// \returns A 256-bit vector of [16 x i16] containing the result.
1185-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1186-
_mm256_max_epu16(__m256i __a, __m256i __b)
1187-
{
1181+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1182+
_mm256_max_epu16(__m256i __a, __m256i __b) {
11881183
return (__m256i)__builtin_elementwise_max((__v16hu)__a, (__v16hu)__b);
11891184
}
11901185

@@ -1201,9 +1196,8 @@ _mm256_max_epu16(__m256i __a, __m256i __b)
12011196
/// \param __b
12021197
/// A 256-bit vector of [8 x i32].
12031198
/// \returns A 256-bit vector of [8 x i32] containing the result.
1204-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1205-
_mm256_max_epu32(__m256i __a, __m256i __b)
1206-
{
1199+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1200+
_mm256_max_epu32(__m256i __a, __m256i __b) {
12071201
return (__m256i)__builtin_elementwise_max((__v8su)__a, (__v8su)__b);
12081202
}
12091203

@@ -1220,9 +1214,8 @@ _mm256_max_epu32(__m256i __a, __m256i __b)
12201214
/// \param __b
12211215
/// A 256-bit integer vector.
12221216
/// \returns A 256-bit integer vector containing the result.
1223-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1224-
_mm256_min_epi8(__m256i __a, __m256i __b)
1225-
{
1217+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1218+
_mm256_min_epi8(__m256i __a, __m256i __b) {
12261219
return (__m256i)__builtin_elementwise_min((__v32qs)__a, (__v32qs)__b);
12271220
}
12281221

@@ -1239,9 +1232,8 @@ _mm256_min_epi8(__m256i __a, __m256i __b)
12391232
/// \param __b
12401233
/// A 256-bit vector of [16 x i16].
12411234
/// \returns A 256-bit vector of [16 x i16] containing the result.
1242-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1243-
_mm256_min_epi16(__m256i __a, __m256i __b)
1244-
{
1235+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1236+
_mm256_min_epi16(__m256i __a, __m256i __b) {
12451237
return (__m256i)__builtin_elementwise_min((__v16hi)__a, (__v16hi)__b);
12461238
}
12471239

@@ -1258,9 +1250,8 @@ _mm256_min_epi16(__m256i __a, __m256i __b)
12581250
/// \param __b
12591251
/// A 256-bit vector of [8 x i32].
12601252
/// \returns A 256-bit vector of [8 x i32] containing the result.
1261-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1262-
_mm256_min_epi32(__m256i __a, __m256i __b)
1263-
{
1253+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1254+
_mm256_min_epi32(__m256i __a, __m256i __b) {
12641255
return (__m256i)__builtin_elementwise_min((__v8si)__a, (__v8si)__b);
12651256
}
12661257

@@ -1277,9 +1268,8 @@ _mm256_min_epi32(__m256i __a, __m256i __b)
12771268
/// \param __b
12781269
/// A 256-bit integer vector.
12791270
/// \returns A 256-bit integer vector containing the result.
1280-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1281-
_mm256_min_epu8(__m256i __a, __m256i __b)
1282-
{
1271+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1272+
_mm256_min_epu8(__m256i __a, __m256i __b) {
12831273
return (__m256i)__builtin_elementwise_min((__v32qu)__a, (__v32qu)__b);
12841274
}
12851275

@@ -1296,9 +1286,8 @@ _mm256_min_epu8(__m256i __a, __m256i __b)
12961286
/// \param __b
12971287
/// A 256-bit vector of [16 x i16].
12981288
/// \returns A 256-bit vector of [16 x i16] containing the result.
1299-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1300-
_mm256_min_epu16(__m256i __a, __m256i __b)
1301-
{
1289+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1290+
_mm256_min_epu16(__m256i __a, __m256i __b) {
13021291
return (__m256i)__builtin_elementwise_min((__v16hu)__a, (__v16hu)__b);
13031292
}
13041293

@@ -1315,9 +1304,8 @@ _mm256_min_epu16(__m256i __a, __m256i __b)
13151304
/// \param __b
13161305
/// A 256-bit vector of [8 x i32].
13171306
/// \returns A 256-bit vector of [8 x i32] containing the result.
1318-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1319-
_mm256_min_epu32(__m256i __a, __m256i __b)
1320-
{
1307+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1308+
_mm256_min_epu32(__m256i __a, __m256i __b) {
13211309
return (__m256i)__builtin_elementwise_min((__v8su)__a, (__v8su)__b);
13221310
}
13231311

clang/lib/Headers/avx512bwintrin.h

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -737,9 +737,8 @@ _mm512_maskz_avg_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
737737
(__v32hi) _mm512_setzero_si512());
738738
}
739739

740-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
741-
_mm512_max_epi8 (__m512i __A, __m512i __B)
742-
{
740+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
741+
_mm512_max_epi8(__m512i __A, __m512i __B) {
743742
return (__m512i)__builtin_elementwise_max((__v64qs) __A, (__v64qs) __B);
744743
}
745744

@@ -759,9 +758,8 @@ _mm512_mask_max_epi8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
759758
(__v64qi)__W);
760759
}
761760

762-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
763-
_mm512_max_epi16 (__m512i __A, __m512i __B)
764-
{
761+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
762+
_mm512_max_epi16(__m512i __A, __m512i __B) {
765763
return (__m512i)__builtin_elementwise_max((__v32hi) __A, (__v32hi) __B);
766764
}
767765

@@ -782,9 +780,8 @@ _mm512_mask_max_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
782780
(__v32hi)__W);
783781
}
784782

785-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
786-
_mm512_max_epu8 (__m512i __A, __m512i __B)
787-
{
783+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
784+
_mm512_max_epu8(__m512i __A, __m512i __B) {
788785
return (__m512i)__builtin_elementwise_max((__v64qu)__A, (__v64qu)__B);
789786
}
790787

@@ -804,9 +801,8 @@ _mm512_mask_max_epu8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
804801
(__v64qi)__W);
805802
}
806803

807-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
808-
_mm512_max_epu16 (__m512i __A, __m512i __B)
809-
{
804+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
805+
_mm512_max_epu16(__m512i __A, __m512i __B) {
810806
return (__m512i)__builtin_elementwise_max((__v32hu)__A, (__v32hu)__B);
811807
}
812808

@@ -826,9 +822,8 @@ _mm512_mask_max_epu16 (__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
826822
(__v32hi)__W);
827823
}
828824

829-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
830-
_mm512_min_epi8 (__m512i __A, __m512i __B)
831-
{
825+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
826+
_mm512_min_epi8(__m512i __A, __m512i __B) {
832827
return (__m512i)__builtin_elementwise_min((__v64qs) __A, (__v64qs) __B);
833828
}
834829

@@ -848,9 +843,8 @@ _mm512_mask_min_epi8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
848843
(__v64qi)__W);
849844
}
850845

851-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
852-
_mm512_min_epi16 (__m512i __A, __m512i __B)
853-
{
846+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
847+
_mm512_min_epi16(__m512i __A, __m512i __B) {
854848
return (__m512i)__builtin_elementwise_min((__v32hi) __A, (__v32hi) __B);
855849
}
856850

@@ -870,9 +864,8 @@ _mm512_mask_min_epi16 (__m512i __W, __mmask32 __M, __m512i __A, __m512i __B)
870864
(__v32hi)__W);
871865
}
872866

873-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
874-
_mm512_min_epu8 (__m512i __A, __m512i __B)
875-
{
867+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
868+
_mm512_min_epu8(__m512i __A, __m512i __B) {
876869
return (__m512i)__builtin_elementwise_min((__v64qu)__A, (__v64qu)__B);
877870
}
878871

@@ -892,9 +885,8 @@ _mm512_mask_min_epu8 (__m512i __W, __mmask64 __M, __m512i __A, __m512i __B)
892885
(__v64qi)__W);
893886
}
894887

895-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
896-
_mm512_min_epu16 (__m512i __A, __m512i __B)
897-
{
888+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
889+
_mm512_min_epu16(__m512i __A, __m512i __B) {
898890
return (__m512i)__builtin_elementwise_min((__v32hu)__A, (__v32hu)__B);
899891
}
900892

clang/lib/Headers/avx512fintrin.h

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,9 +1087,7 @@ _mm_maskz_max_sd(__mmask8 __U,__m128d __A, __m128d __B) {
10871087
(__mmask8)(U), (int)(R)))
10881088

10891089
static __inline __m512i
1090-
__DEFAULT_FN_ATTRS512
1091-
_mm512_max_epi32(__m512i __A, __m512i __B)
1092-
{
1090+
__DEFAULT_FN_ATTRS512_CONSTEXPR _mm512_max_epi32(__m512i __A, __m512i __B) {
10931091
return (__m512i)__builtin_elementwise_max((__v16si)__A, (__v16si)__B);
10941092
}
10951093

@@ -1109,9 +1107,8 @@ _mm512_maskz_max_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
11091107
(__v16si)_mm512_setzero_si512());
11101108
}
11111109

1112-
static __inline __m512i __DEFAULT_FN_ATTRS512
1113-
_mm512_max_epu32(__m512i __A, __m512i __B)
1114-
{
1110+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1111+
_mm512_max_epu32(__m512i __A, __m512i __B) {
11151112
return (__m512i)__builtin_elementwise_max((__v16su)__A, (__v16su)__B);
11161113
}
11171114

@@ -1131,9 +1128,8 @@ _mm512_maskz_max_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
11311128
(__v16si)_mm512_setzero_si512());
11321129
}
11331130

1134-
static __inline __m512i __DEFAULT_FN_ATTRS512
1135-
_mm512_max_epi64(__m512i __A, __m512i __B)
1136-
{
1131+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1132+
_mm512_max_epi64(__m512i __A, __m512i __B) {
11371133
return (__m512i)__builtin_elementwise_max((__v8di)__A, (__v8di)__B);
11381134
}
11391135

@@ -1153,9 +1149,8 @@ _mm512_maskz_max_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
11531149
(__v8di)_mm512_setzero_si512());
11541150
}
11551151

1156-
static __inline __m512i __DEFAULT_FN_ATTRS512
1157-
_mm512_max_epu64(__m512i __A, __m512i __B)
1158-
{
1152+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1153+
_mm512_max_epu64(__m512i __A, __m512i __B) {
11591154
return (__m512i)__builtin_elementwise_max((__v8du)__A, (__v8du)__B);
11601155
}
11611156

@@ -1322,9 +1317,7 @@ _mm_maskz_min_sd(__mmask8 __U,__m128d __A, __m128d __B) {
13221317
(__mmask8)(U), (int)(R)))
13231318

13241319
static __inline __m512i
1325-
__DEFAULT_FN_ATTRS512
1326-
_mm512_min_epi32(__m512i __A, __m512i __B)
1327-
{
1320+
__DEFAULT_FN_ATTRS512_CONSTEXPR _mm512_min_epi32(__m512i __A, __m512i __B) {
13281321
return (__m512i)__builtin_elementwise_min((__v16si)__A, (__v16si)__B);
13291322
}
13301323

@@ -1344,9 +1337,8 @@ _mm512_maskz_min_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
13441337
(__v16si)_mm512_setzero_si512());
13451338
}
13461339

1347-
static __inline __m512i __DEFAULT_FN_ATTRS512
1348-
_mm512_min_epu32(__m512i __A, __m512i __B)
1349-
{
1340+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1341+
_mm512_min_epu32(__m512i __A, __m512i __B) {
13501342
return (__m512i)__builtin_elementwise_min((__v16su)__A, (__v16su)__B);
13511343
}
13521344

@@ -1366,9 +1358,8 @@ _mm512_maskz_min_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
13661358
(__v16si)_mm512_setzero_si512());
13671359
}
13681360

1369-
static __inline __m512i __DEFAULT_FN_ATTRS512
1370-
_mm512_min_epi64(__m512i __A, __m512i __B)
1371-
{
1361+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1362+
_mm512_min_epi64(__m512i __A, __m512i __B) {
13721363
return (__m512i)__builtin_elementwise_min((__v8di)__A, (__v8di)__B);
13731364
}
13741365

@@ -1388,9 +1379,8 @@ _mm512_maskz_min_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
13881379
(__v8di)_mm512_setzero_si512());
13891380
}
13901381

1391-
static __inline __m512i __DEFAULT_FN_ATTRS512
1392-
_mm512_min_epu64(__m512i __A, __m512i __B)
1393-
{
1382+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1383+
_mm512_min_epu64(__m512i __A, __m512i __B) {
13941384
return (__m512i)__builtin_elementwise_min((__v8du)__A, (__v8du)__B);
13951385
}
13961386

0 commit comments

Comments
 (0)