Skip to content

Commit 2a18010

Browse files
committed
[Headers][X86] Allow AVX2/AVX512 integer min/max intrinsics to be used in constexpr
Update the AVX2/AVX512 min/max integer intrinsics to be constexpr compatible.
1 parent 018dc1b commit 2a18010

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
@@ -1079,9 +1079,7 @@ _mm_maskz_max_sd(__mmask8 __U,__m128d __A, __m128d __B) {
10791079
(__mmask8)(U), (int)(R)))
10801080

10811081
static __inline __m512i
1082-
__DEFAULT_FN_ATTRS512
1083-
_mm512_max_epi32(__m512i __A, __m512i __B)
1084-
{
1082+
__DEFAULT_FN_ATTRS512_CONSTEXPR _mm512_max_epi32(__m512i __A, __m512i __B) {
10851083
return (__m512i)__builtin_elementwise_max((__v16si)__A, (__v16si)__B);
10861084
}
10871085

@@ -1101,9 +1099,8 @@ _mm512_maskz_max_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
11011099
(__v16si)_mm512_setzero_si512());
11021100
}
11031101

1104-
static __inline __m512i __DEFAULT_FN_ATTRS512
1105-
_mm512_max_epu32(__m512i __A, __m512i __B)
1106-
{
1102+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1103+
_mm512_max_epu32(__m512i __A, __m512i __B) {
11071104
return (__m512i)__builtin_elementwise_max((__v16su)__A, (__v16su)__B);
11081105
}
11091106

@@ -1123,9 +1120,8 @@ _mm512_maskz_max_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
11231120
(__v16si)_mm512_setzero_si512());
11241121
}
11251122

1126-
static __inline __m512i __DEFAULT_FN_ATTRS512
1127-
_mm512_max_epi64(__m512i __A, __m512i __B)
1128-
{
1123+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1124+
_mm512_max_epi64(__m512i __A, __m512i __B) {
11291125
return (__m512i)__builtin_elementwise_max((__v8di)__A, (__v8di)__B);
11301126
}
11311127

@@ -1145,9 +1141,8 @@ _mm512_maskz_max_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
11451141
(__v8di)_mm512_setzero_si512());
11461142
}
11471143

1148-
static __inline __m512i __DEFAULT_FN_ATTRS512
1149-
_mm512_max_epu64(__m512i __A, __m512i __B)
1150-
{
1144+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1145+
_mm512_max_epu64(__m512i __A, __m512i __B) {
11511146
return (__m512i)__builtin_elementwise_max((__v8du)__A, (__v8du)__B);
11521147
}
11531148

@@ -1314,9 +1309,7 @@ _mm_maskz_min_sd(__mmask8 __U,__m128d __A, __m128d __B) {
13141309
(__mmask8)(U), (int)(R)))
13151310

13161311
static __inline __m512i
1317-
__DEFAULT_FN_ATTRS512
1318-
_mm512_min_epi32(__m512i __A, __m512i __B)
1319-
{
1312+
__DEFAULT_FN_ATTRS512_CONSTEXPR _mm512_min_epi32(__m512i __A, __m512i __B) {
13201313
return (__m512i)__builtin_elementwise_min((__v16si)__A, (__v16si)__B);
13211314
}
13221315

@@ -1336,9 +1329,8 @@ _mm512_maskz_min_epi32 (__mmask16 __M, __m512i __A, __m512i __B)
13361329
(__v16si)_mm512_setzero_si512());
13371330
}
13381331

1339-
static __inline __m512i __DEFAULT_FN_ATTRS512
1340-
_mm512_min_epu32(__m512i __A, __m512i __B)
1341-
{
1332+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1333+
_mm512_min_epu32(__m512i __A, __m512i __B) {
13421334
return (__m512i)__builtin_elementwise_min((__v16su)__A, (__v16su)__B);
13431335
}
13441336

@@ -1358,9 +1350,8 @@ _mm512_maskz_min_epu32 (__mmask16 __M, __m512i __A, __m512i __B)
13581350
(__v16si)_mm512_setzero_si512());
13591351
}
13601352

1361-
static __inline __m512i __DEFAULT_FN_ATTRS512
1362-
_mm512_min_epi64(__m512i __A, __m512i __B)
1363-
{
1353+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1354+
_mm512_min_epi64(__m512i __A, __m512i __B) {
13641355
return (__m512i)__builtin_elementwise_min((__v8di)__A, (__v8di)__B);
13651356
}
13661357

@@ -1380,9 +1371,8 @@ _mm512_maskz_min_epi64 (__mmask8 __M, __m512i __A, __m512i __B)
13801371
(__v8di)_mm512_setzero_si512());
13811372
}
13821373

1383-
static __inline __m512i __DEFAULT_FN_ATTRS512
1384-
_mm512_min_epu64(__m512i __A, __m512i __B)
1385-
{
1374+
static __inline __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1375+
_mm512_min_epu64(__m512i __A, __m512i __B) {
13861376
return (__m512i)__builtin_elementwise_min((__v8du)__A, (__v8du)__B);
13871377
}
13881378

0 commit comments

Comments
 (0)