Skip to content

Commit 50bd897

Browse files
authored
[Headers][X86] Allow SSE41/AVX2/AVX512F/AVX512BW integer extension intrinsics to be used in constexpr (#152971)
### Summary This PR resolves #152315
1 parent aea82a7 commit 50bd897

File tree

8 files changed

+152
-84
lines changed

8 files changed

+152
-84
lines changed

clang/lib/Headers/avx2intrin.h

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,9 +1371,8 @@ _mm256_movemask_epi8(__m256i __a)
13711371
/// A 128-bit integer vector containing the source bytes.
13721372
/// \returns A 256-bit vector of [16 x i16] containing the sign-extended
13731373
/// values.
1374-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1375-
_mm256_cvtepi8_epi16(__m128i __V)
1376-
{
1374+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1375+
_mm256_cvtepi8_epi16(__m128i __V) {
13771376
/* This function always performs a signed extension, but __v16qi is a char
13781377
which may be signed or unsigned, so use __v16qs. */
13791378
return (__m256i)__builtin_convertvector((__v16qs)__V, __v16hi);
@@ -1399,9 +1398,8 @@ _mm256_cvtepi8_epi16(__m128i __V)
13991398
/// A 128-bit integer vector containing the source bytes.
14001399
/// \returns A 256-bit vector of [8 x i32] containing the sign-extended
14011400
/// values.
1402-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1403-
_mm256_cvtepi8_epi32(__m128i __V)
1404-
{
1401+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1402+
_mm256_cvtepi8_epi32(__m128i __V) {
14051403
/* This function always performs a signed extension, but __v16qi is a char
14061404
which may be signed or unsigned, so use __v16qs. */
14071405
return (__m256i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8si);
@@ -1426,9 +1424,8 @@ _mm256_cvtepi8_epi32(__m128i __V)
14261424
/// A 128-bit integer vector containing the source bytes.
14271425
/// \returns A 256-bit vector of [4 x i64] containing the sign-extended
14281426
/// values.
1429-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1430-
_mm256_cvtepi8_epi64(__m128i __V)
1431-
{
1427+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1428+
_mm256_cvtepi8_epi64(__m128i __V) {
14321429
/* This function always performs a signed extension, but __v16qi is a char
14331430
which may be signed or unsigned, so use __v16qs. */
14341431
return (__m256i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3), __v4di);
@@ -1454,9 +1451,8 @@ _mm256_cvtepi8_epi64(__m128i __V)
14541451
/// A 128-bit vector of [8 x i16] containing the source values.
14551452
/// \returns A 256-bit vector of [8 x i32] containing the sign-extended
14561453
/// values.
1457-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1458-
_mm256_cvtepi16_epi32(__m128i __V)
1459-
{
1454+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1455+
_mm256_cvtepi16_epi32(__m128i __V) {
14601456
return (__m256i)__builtin_convertvector((__v8hi)__V, __v8si);
14611457
}
14621458

@@ -1479,9 +1475,8 @@ _mm256_cvtepi16_epi32(__m128i __V)
14791475
/// A 128-bit vector of [8 x i16] containing the source values.
14801476
/// \returns A 256-bit vector of [4 x i64] containing the sign-extended
14811477
/// values.
1482-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1483-
_mm256_cvtepi16_epi64(__m128i __V)
1484-
{
1478+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1479+
_mm256_cvtepi16_epi64(__m128i __V) {
14851480
return (__m256i)__builtin_convertvector(__builtin_shufflevector((__v8hi)__V, (__v8hi)__V, 0, 1, 2, 3), __v4di);
14861481
}
14871482

@@ -1504,9 +1499,8 @@ _mm256_cvtepi16_epi64(__m128i __V)
15041499
/// A 128-bit vector of [4 x i32] containing the source values.
15051500
/// \returns A 256-bit vector of [4 x i64] containing the sign-extended
15061501
/// values.
1507-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1508-
_mm256_cvtepi32_epi64(__m128i __V)
1509-
{
1502+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1503+
_mm256_cvtepi32_epi64(__m128i __V) {
15101504
return (__m256i)__builtin_convertvector((__v4si)__V, __v4di);
15111505
}
15121506

@@ -1530,9 +1524,8 @@ _mm256_cvtepi32_epi64(__m128i __V)
15301524
/// A 128-bit integer vector containing the source bytes.
15311525
/// \returns A 256-bit vector of [16 x i16] containing the zero-extended
15321526
/// values.
1533-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1534-
_mm256_cvtepu8_epi16(__m128i __V)
1535-
{
1527+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1528+
_mm256_cvtepu8_epi16(__m128i __V) {
15361529
return (__m256i)__builtin_convertvector((__v16qu)__V, __v16hi);
15371530
}
15381531

@@ -1556,9 +1549,8 @@ _mm256_cvtepu8_epi16(__m128i __V)
15561549
/// A 128-bit integer vector containing the source bytes.
15571550
/// \returns A 256-bit vector of [8 x i32] containing the zero-extended
15581551
/// values.
1559-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1560-
_mm256_cvtepu8_epi32(__m128i __V)
1561-
{
1552+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1553+
_mm256_cvtepu8_epi32(__m128i __V) {
15621554
return (__m256i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8si);
15631555
}
15641556

@@ -1581,9 +1573,8 @@ _mm256_cvtepu8_epi32(__m128i __V)
15811573
/// A 128-bit integer vector containing the source bytes.
15821574
/// \returns A 256-bit vector of [4 x i64] containing the zero-extended
15831575
/// values.
1584-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1585-
_mm256_cvtepu8_epi64(__m128i __V)
1586-
{
1576+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1577+
_mm256_cvtepu8_epi64(__m128i __V) {
15871578
return (__m256i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__V, (__v16qu)__V, 0, 1, 2, 3), __v4di);
15881579
}
15891580

@@ -1607,9 +1598,8 @@ _mm256_cvtepu8_epi64(__m128i __V)
16071598
/// A 128-bit vector of [8 x i16] containing the source values.
16081599
/// \returns A 256-bit vector of [8 x i32] containing the zero-extended
16091600
/// values.
1610-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1611-
_mm256_cvtepu16_epi32(__m128i __V)
1612-
{
1601+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1602+
_mm256_cvtepu16_epi32(__m128i __V) {
16131603
return (__m256i)__builtin_convertvector((__v8hu)__V, __v8si);
16141604
}
16151605

@@ -1632,9 +1622,8 @@ _mm256_cvtepu16_epi32(__m128i __V)
16321622
/// A 128-bit vector of [8 x i16] containing the source values.
16331623
/// \returns A 256-bit vector of [4 x i64] containing the zero-extended
16341624
/// values.
1635-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1636-
_mm256_cvtepu16_epi64(__m128i __V)
1637-
{
1625+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1626+
_mm256_cvtepu16_epi64(__m128i __V) {
16381627
return (__m256i)__builtin_convertvector(__builtin_shufflevector((__v8hu)__V, (__v8hu)__V, 0, 1, 2, 3), __v4di);
16391628
}
16401629

@@ -1657,9 +1646,8 @@ _mm256_cvtepu16_epi64(__m128i __V)
16571646
/// A 128-bit vector of [4 x i32] containing the source values.
16581647
/// \returns A 256-bit vector of [4 x i64] containing the zero-extended
16591648
/// values.
1660-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1661-
_mm256_cvtepu32_epi64(__m128i __V)
1662-
{
1649+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
1650+
_mm256_cvtepu32_epi64(__m128i __V) {
16631651
return (__m256i)__builtin_convertvector((__v4su)__V, __v4di);
16641652
}
16651653

clang/lib/Headers/avx512bwintrin.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,9 +1379,8 @@ _mm512_maskz_unpacklo_epi16(__mmask32 __U, __m512i __A, __m512i __B) {
13791379
(__v32hi)_mm512_setzero_si512());
13801380
}
13811381

1382-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1383-
_mm512_cvtepi8_epi16(__m256i __A)
1384-
{
1382+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1383+
_mm512_cvtepi8_epi16(__m256i __A) {
13851384
/* This function always performs a signed extension, but __v32qi is a char
13861385
which may be signed or unsigned, so use __v32qs. */
13871386
return (__m512i)__builtin_convertvector((__v32qs)__A, __v32hi);
@@ -1403,9 +1402,8 @@ _mm512_maskz_cvtepi8_epi16(__mmask32 __U, __m256i __A)
14031402
(__v32hi)_mm512_setzero_si512());
14041403
}
14051404

1406-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1407-
_mm512_cvtepu8_epi16(__m256i __A)
1408-
{
1405+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1406+
_mm512_cvtepu8_epi16(__m256i __A) {
14091407
return (__m512i)__builtin_convertvector((__v32qu)__A, __v32hi);
14101408
}
14111409

clang/lib/Headers/avx512fintrin.h

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4714,9 +4714,8 @@ _mm512_knot(__mmask16 __M)
47144714
#define _mm512_mask_cmpneq_epu64_mask(k, A, B) \
47154715
_mm512_mask_cmp_epu64_mask((k), (A), (B), _MM_CMPINT_NE)
47164716

4717-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4718-
_mm512_cvtepi8_epi32(__m128i __A)
4719-
{
4717+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4718+
_mm512_cvtepi8_epi32(__m128i __A) {
47204719
/* This function always performs a signed extension, but __v16qi is a char
47214720
which may be signed or unsigned, so use __v16qs. */
47224721
return (__m512i)__builtin_convertvector((__v16qs)__A, __v16si);
@@ -4738,9 +4737,8 @@ _mm512_maskz_cvtepi8_epi32(__mmask16 __U, __m128i __A)
47384737
(__v16si)_mm512_setzero_si512());
47394738
}
47404739

4741-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4742-
_mm512_cvtepi8_epi64(__m128i __A)
4743-
{
4740+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4741+
_mm512_cvtepi8_epi64(__m128i __A) {
47444742
/* This function always performs a signed extension, but __v16qi is a char
47454743
which may be signed or unsigned, so use __v16qs. */
47464744
return (__m512i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__A, (__v16qs)__A, 0, 1, 2, 3, 4, 5, 6, 7), __v8di);
@@ -4762,9 +4760,8 @@ _mm512_maskz_cvtepi8_epi64(__mmask8 __U, __m128i __A)
47624760
(__v8di)_mm512_setzero_si512 ());
47634761
}
47644762

4765-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4766-
_mm512_cvtepi32_epi64(__m256i __X)
4767-
{
4763+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4764+
_mm512_cvtepi32_epi64(__m256i __X) {
47684765
return (__m512i)__builtin_convertvector((__v8si)__X, __v8di);
47694766
}
47704767

@@ -4784,9 +4781,8 @@ _mm512_maskz_cvtepi32_epi64(__mmask8 __U, __m256i __X)
47844781
(__v8di)_mm512_setzero_si512());
47854782
}
47864783

4787-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4788-
_mm512_cvtepi16_epi32(__m256i __A)
4789-
{
4784+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4785+
_mm512_cvtepi16_epi32(__m256i __A) {
47904786
return (__m512i)__builtin_convertvector((__v16hi)__A, __v16si);
47914787
}
47924788

@@ -4806,9 +4802,8 @@ _mm512_maskz_cvtepi16_epi32(__mmask16 __U, __m256i __A)
48064802
(__v16si)_mm512_setzero_si512 ());
48074803
}
48084804

4809-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4810-
_mm512_cvtepi16_epi64(__m128i __A)
4811-
{
4805+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4806+
_mm512_cvtepi16_epi64(__m128i __A) {
48124807
return (__m512i)__builtin_convertvector((__v8hi)__A, __v8di);
48134808
}
48144809

@@ -4828,9 +4823,8 @@ _mm512_maskz_cvtepi16_epi64(__mmask8 __U, __m128i __A)
48284823
(__v8di)_mm512_setzero_si512());
48294824
}
48304825

4831-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4832-
_mm512_cvtepu8_epi32(__m128i __A)
4833-
{
4826+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4827+
_mm512_cvtepu8_epi32(__m128i __A) {
48344828
return (__m512i)__builtin_convertvector((__v16qu)__A, __v16si);
48354829
}
48364830

@@ -4850,9 +4844,8 @@ _mm512_maskz_cvtepu8_epi32(__mmask16 __U, __m128i __A)
48504844
(__v16si)_mm512_setzero_si512());
48514845
}
48524846

4853-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4854-
_mm512_cvtepu8_epi64(__m128i __A)
4855-
{
4847+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4848+
_mm512_cvtepu8_epi64(__m128i __A) {
48564849
return (__m512i)__builtin_convertvector(__builtin_shufflevector((__v16qu)__A, (__v16qu)__A, 0, 1, 2, 3, 4, 5, 6, 7), __v8di);
48574850
}
48584851

@@ -4872,9 +4865,8 @@ _mm512_maskz_cvtepu8_epi64(__mmask8 __U, __m128i __A)
48724865
(__v8di)_mm512_setzero_si512());
48734866
}
48744867

4875-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4876-
_mm512_cvtepu32_epi64(__m256i __X)
4877-
{
4868+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4869+
_mm512_cvtepu32_epi64(__m256i __X) {
48784870
return (__m512i)__builtin_convertvector((__v8su)__X, __v8di);
48794871
}
48804872

@@ -4894,9 +4886,8 @@ _mm512_maskz_cvtepu32_epi64(__mmask8 __U, __m256i __X)
48944886
(__v8di)_mm512_setzero_si512());
48954887
}
48964888

4897-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4898-
_mm512_cvtepu16_epi32(__m256i __A)
4899-
{
4889+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4890+
_mm512_cvtepu16_epi32(__m256i __A) {
49004891
return (__m512i)__builtin_convertvector((__v16hu)__A, __v16si);
49014892
}
49024893

@@ -4916,9 +4907,8 @@ _mm512_maskz_cvtepu16_epi32(__mmask16 __U, __m256i __A)
49164907
(__v16si)_mm512_setzero_si512());
49174908
}
49184909

4919-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
4920-
_mm512_cvtepu16_epi64(__m128i __A)
4921-
{
4910+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
4911+
_mm512_cvtepu16_epi64(__m128i __A) {
49224912
return (__m512i)__builtin_convertvector((__v8hu)__A, __v8di);
49234913
}
49244914

0 commit comments

Comments
 (0)