Skip to content

Commit 91a1bde

Browse files
authored
[Clang] Add constexpr support for AVX512 permutexvar intrinsics (#167802)
Resolves #167476
1 parent 35ffe10 commit 91a1bde

File tree

15 files changed

+305
-137
lines changed

15 files changed

+305
-137
lines changed

clang/include/clang/Basic/BuiltinsX86.td

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -617,9 +617,7 @@ let Features = "avx2", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] i
617617
def psrlw256 : X86Builtin<"_Vector<16, short>(_Vector<16, short>, _Vector<8, short>)">;
618618
def psrld256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<4, int>)">;
619619
def psrlq256 : X86Builtin<"_Vector<4, long long int>(_Vector<4, long long int>, _Vector<2, long long int>)">;
620-
def permvarsi256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<8, int>)">;
621620
def permdf256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>, _Constant int)">;
622-
def permvarsf256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>, _Vector<8, int>)">;
623621
def permti256 : X86Builtin<"_Vector<4, long long int>(_Vector<4, long long int>, _Vector<4, long long int>, _Constant int)">;
624622
def permdi256 : X86Builtin<"_Vector<4, long long int>(_Vector<4, long long int>, _Constant int)">;
625623
}
@@ -692,6 +690,9 @@ let Features = "avx2", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWi
692690
def pshuflw256 : X86Builtin<"_Vector<16, short>(_Vector<16, short>, _Constant int)">;
693691
def pshufhw256 : X86Builtin<"_Vector<16, short>(_Vector<16, short>, _Constant int)">;
694692
def pshufd256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Constant int)">;
693+
694+
def permvarsi256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>, _Vector<8, int>)">;
695+
def permvarsf256 : X86Builtin<"_Vector<8, float>(_Vector<8, float>, _Vector<8, int>)">;
695696
}
696697

697698
let Features = "avx2", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<128>] in {
@@ -3042,38 +3043,38 @@ let Features = "avx512f", Attributes = [NoThrow, Const, RequiredVectorWidth<512>
30423043
def permdi512 : X86Builtin<"_Vector<8, long long int>(_Vector<8, long long int>, _Constant int)">;
30433044
}
30443045

3045-
let Features = "avx512bw", Attributes = [NoThrow, Const, RequiredVectorWidth<512>] in {
3046+
let Features = "avx512bw", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<512>] in {
30463047
def permvarhi512 : X86Builtin<"_Vector<32, short>(_Vector<32, short>, _Vector<32, short>)">;
30473048
}
30483049

3049-
let Features = "avx512f", Attributes = [NoThrow, Const, RequiredVectorWidth<512>] in {
3050+
let Features = "avx512f", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<512>] in {
30503051
def permvardf512 : X86Builtin<"_Vector<8, double>(_Vector<8, double>, _Vector<8, long long int>)">;
30513052
def permvardi512 : X86Builtin<"_Vector<8, long long int>(_Vector<8, long long int>, _Vector<8, long long int>)">;
30523053
def permvarsf512 : X86Builtin<"_Vector<16, float>(_Vector<16, float>, _Vector<16, int>)">;
30533054
def permvarsi512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>, _Vector<16, int>)">;
30543055
}
30553056

3056-
let Features = "avx512vbmi", Attributes = [NoThrow, Const, RequiredVectorWidth<512>] in {
3057+
let Features = "avx512vbmi", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<512>] in {
30573058
def permvarqi512 : X86Builtin<"_Vector<64, char>(_Vector<64, char>, _Vector<64, char>)">;
30583059
}
30593060

3060-
let Features = "avx512vbmi,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] in {
3061+
let Features = "avx512vbmi,avx512vl", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<128>] in {
30613062
def permvarqi128 : X86Builtin<"_Vector<16, char>(_Vector<16, char>, _Vector<16, char>)">;
30623063
}
30633064

3064-
let Features = "avx512vbmi,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] in {
3065+
let Features = "avx512vbmi,avx512vl", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<256>] in {
30653066
def permvarqi256 : X86Builtin<"_Vector<32, char>(_Vector<32, char>, _Vector<32, char>)">;
30663067
}
30673068

3068-
let Features = "avx512bw,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] in {
3069+
let Features = "avx512bw,avx512vl", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<128>] in {
30693070
def permvarhi128 : X86Builtin<"_Vector<8, short>(_Vector<8, short>, _Vector<8, short>)">;
30703071
}
30713072

3072-
let Features = "avx512bw,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] in {
3073+
let Features = "avx512bw,avx512vl", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<256>] in {
30733074
def permvarhi256 : X86Builtin<"_Vector<16, short>(_Vector<16, short>, _Vector<16, short>)">;
30743075
}
30753076

3076-
let Features = "avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] in {
3077+
let Features = "avx512vl", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<256>] in {
30773078
def permvardf256 : X86Builtin<"_Vector<4, double>(_Vector<4, double>, _Vector<4, long long int>)">;
30783079
def permvardi256 : X86Builtin<"_Vector<4, long long int>(_Vector<4, long long int>, _Vector<4, long long int>)">;
30793080
}

clang/lib/AST/ByteCode/InterpBuiltin.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4414,6 +4414,45 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
44144414
return std::pair<unsigned, int>{0, static_cast<int>(DstIdx)};
44154415
}
44164416
});
4417+
case X86::BI__builtin_ia32_permvarsi256:
4418+
case X86::BI__builtin_ia32_permvarsf256:
4419+
case X86::BI__builtin_ia32_permvardf512:
4420+
case X86::BI__builtin_ia32_permvardi512:
4421+
case X86::BI__builtin_ia32_permvarhi128:
4422+
return interp__builtin_ia32_shuffle_generic(
4423+
S, OpPC, Call, [](unsigned DstIdx, unsigned ShuffleMask) {
4424+
int Offset = ShuffleMask & 0x7;
4425+
return std::pair<unsigned, int>{0, Offset};
4426+
});
4427+
case X86::BI__builtin_ia32_permvarqi128:
4428+
case X86::BI__builtin_ia32_permvarhi256:
4429+
case X86::BI__builtin_ia32_permvarsi512:
4430+
case X86::BI__builtin_ia32_permvarsf512:
4431+
return interp__builtin_ia32_shuffle_generic(
4432+
S, OpPC, Call, [](unsigned DstIdx, unsigned ShuffleMask) {
4433+
int Offset = ShuffleMask & 0xF;
4434+
return std::pair<unsigned, int>{0, Offset};
4435+
});
4436+
case X86::BI__builtin_ia32_permvardi256:
4437+
case X86::BI__builtin_ia32_permvardf256:
4438+
return interp__builtin_ia32_shuffle_generic(
4439+
S, OpPC, Call, [](unsigned DstIdx, unsigned ShuffleMask) {
4440+
int Offset = ShuffleMask & 0x3;
4441+
return std::pair<unsigned, int>{0, Offset};
4442+
});
4443+
case X86::BI__builtin_ia32_permvarqi256:
4444+
case X86::BI__builtin_ia32_permvarhi512:
4445+
return interp__builtin_ia32_shuffle_generic(
4446+
S, OpPC, Call, [](unsigned DstIdx, unsigned ShuffleMask) {
4447+
int Offset = ShuffleMask & 0x1F;
4448+
return std::pair<unsigned, int>{0, Offset};
4449+
});
4450+
case X86::BI__builtin_ia32_permvarqi512:
4451+
return interp__builtin_ia32_shuffle_generic(
4452+
S, OpPC, Call, [](unsigned DstIdx, unsigned ShuffleMask) {
4453+
int Offset = ShuffleMask & 0x3F;
4454+
return std::pair<unsigned, int>{0, Offset};
4455+
});
44174456
case X86::BI__builtin_ia32_vpermi2varq128:
44184457
case X86::BI__builtin_ia32_vpermi2varpd128:
44194458
return interp__builtin_ia32_shuffle_generic(

clang/lib/AST/ExprConstant.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13551,6 +13551,65 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1355113551
return false;
1355213552
return Success(R, E);
1355313553
}
13554+
case X86::BI__builtin_ia32_permvarsi256:
13555+
case X86::BI__builtin_ia32_permvarsf256:
13556+
case X86::BI__builtin_ia32_permvardf512:
13557+
case X86::BI__builtin_ia32_permvardi512:
13558+
case X86::BI__builtin_ia32_permvarhi128: {
13559+
APValue R;
13560+
if (!evalShuffleGeneric(Info, E, R,
13561+
[](unsigned DstIdx, unsigned ShuffleMask) {
13562+
int Offset = ShuffleMask & 0x7;
13563+
return std::pair<unsigned, int>{0, Offset};
13564+
}))
13565+
return false;
13566+
return Success(R, E);
13567+
}
13568+
case X86::BI__builtin_ia32_permvarqi128:
13569+
case X86::BI__builtin_ia32_permvarhi256:
13570+
case X86::BI__builtin_ia32_permvarsi512:
13571+
case X86::BI__builtin_ia32_permvarsf512: {
13572+
APValue R;
13573+
if (!evalShuffleGeneric(Info, E, R,
13574+
[](unsigned DstIdx, unsigned ShuffleMask) {
13575+
int Offset = ShuffleMask & 0xF;
13576+
return std::pair<unsigned, int>{0, Offset};
13577+
}))
13578+
return false;
13579+
return Success(R, E);
13580+
}
13581+
case X86::BI__builtin_ia32_permvardi256:
13582+
case X86::BI__builtin_ia32_permvardf256: {
13583+
APValue R;
13584+
if (!evalShuffleGeneric(Info, E, R,
13585+
[](unsigned DstIdx, unsigned ShuffleMask) {
13586+
int Offset = ShuffleMask & 0x3;
13587+
return std::pair<unsigned, int>{0, Offset};
13588+
}))
13589+
return false;
13590+
return Success(R, E);
13591+
}
13592+
case X86::BI__builtin_ia32_permvarqi256:
13593+
case X86::BI__builtin_ia32_permvarhi512: {
13594+
APValue R;
13595+
if (!evalShuffleGeneric(Info, E, R,
13596+
[](unsigned DstIdx, unsigned ShuffleMask) {
13597+
int Offset = ShuffleMask & 0x1F;
13598+
return std::pair<unsigned, int>{0, Offset};
13599+
}))
13600+
return false;
13601+
return Success(R, E);
13602+
}
13603+
case X86::BI__builtin_ia32_permvarqi512: {
13604+
APValue R;
13605+
if (!evalShuffleGeneric(Info, E, R,
13606+
[](unsigned DstIdx, unsigned ShuffleMask) {
13607+
int Offset = ShuffleMask & 0x3F;
13608+
return std::pair<unsigned, int>{0, Offset};
13609+
}))
13610+
return false;
13611+
return Success(R, E);
13612+
}
1355413613
case X86::BI__builtin_ia32_vpermi2varq128:
1355513614
case X86::BI__builtin_ia32_vpermi2varpd128: {
1355613615
APValue R;

clang/lib/Headers/avx10_2_512bf16intrin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ _mm512_permutex2var_pbh(__m512bh __A, __m512i __I, __m512bh __B) {
179179
(__v32hi)__B);
180180
}
181181

182-
static __inline__ __m512bh __DEFAULT_FN_ATTRS512
182+
static __inline__ __m512bh __DEFAULT_FN_ATTRS512_CONSTEXPR
183183
_mm512_permutexvar_pbh(__m512i __A, __m512bh __B) {
184184
return (__m512bh)__builtin_ia32_permvarhi512((__v32hi)__B, (__v32hi)__A);
185185
}

clang/lib/Headers/avx10_2bf16intrin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,12 +307,12 @@ _mm256_permutex2var_pbh(__m256bh __A, __m256i __I, __m256bh __B) {
307307
(__v16hi)__B);
308308
}
309309

310-
static __inline__ __m128bh __DEFAULT_FN_ATTRS128
310+
static __inline__ __m128bh __DEFAULT_FN_ATTRS128_CONSTEXPR
311311
_mm_permutexvar_pbh(__m128i __A, __m128bh __B) {
312312
return (__m128bh)__builtin_ia32_permvarhi128((__v8hi)__B, (__v8hi)__A);
313313
}
314314

315-
static __inline__ __m256bh __DEFAULT_FN_ATTRS256
315+
static __inline__ __m256bh __DEFAULT_FN_ATTRS256_CONSTEXPR
316316
_mm256_permutexvar_pbh(__m256i __A, __m256bh __B) {
317317
return (__m256bh)__builtin_ia32_permvarhi256((__v16hi)__B, (__v16hi)__A);
318318
}

clang/lib/Headers/avx2intrin.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3214,9 +3214,8 @@ _mm_broadcastq_epi64(__m128i __X) {
32143214
/// A 256-bit vector of [8 x i32] containing indexes of values to use from
32153215
/// \a __a.
32163216
/// \returns A 256-bit vector of [8 x i32] containing the result.
3217-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
3218-
_mm256_permutevar8x32_epi32(__m256i __a, __m256i __b)
3219-
{
3217+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
3218+
_mm256_permutevar8x32_epi32(__m256i __a, __m256i __b) {
32203219
return (__m256i)__builtin_ia32_permvarsi256((__v8si)__a, (__v8si)__b);
32213220
}
32223221

@@ -3272,9 +3271,8 @@ _mm256_permutevar8x32_epi32(__m256i __a, __m256i __b)
32723271
/// A 256-bit vector of [8 x i32] containing indexes of values to use from
32733272
/// \a __a.
32743273
/// \returns A 256-bit vector of [8 x float] containing the result.
3275-
static __inline__ __m256 __DEFAULT_FN_ATTRS256
3276-
_mm256_permutevar8x32_ps(__m256 __a, __m256i __b)
3277-
{
3274+
static __inline__ __m256 __DEFAULT_FN_ATTRS256_CONSTEXPR
3275+
_mm256_permutevar8x32_ps(__m256 __a, __m256i __b) {
32783276
return (__m256)__builtin_ia32_permvarsf256((__v8sf)__a, (__v8si)__b);
32793277
}
32803278

clang/lib/Headers/avx512bwintrin.h

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,25 +1846,21 @@ _mm512_maskz_broadcastw_epi16 (__mmask32 __M, __m128i __A)
18461846
(__v32hi) _mm512_setzero_si512());
18471847
}
18481848

1849-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1850-
_mm512_permutexvar_epi16 (__m512i __A, __m512i __B)
1851-
{
1849+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1850+
_mm512_permutexvar_epi16(__m512i __A, __m512i __B) {
18521851
return (__m512i)__builtin_ia32_permvarhi512((__v32hi)__B, (__v32hi)__A);
18531852
}
18541853

1855-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1856-
_mm512_maskz_permutexvar_epi16 (__mmask32 __M, __m512i __A,
1857-
__m512i __B)
1858-
{
1854+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1855+
_mm512_maskz_permutexvar_epi16(__mmask32 __M, __m512i __A, __m512i __B) {
18591856
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
18601857
(__v32hi)_mm512_permutexvar_epi16(__A, __B),
18611858
(__v32hi)_mm512_setzero_si512());
18621859
}
18631860

1864-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
1865-
_mm512_mask_permutexvar_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
1866-
__m512i __B)
1867-
{
1861+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
1862+
_mm512_mask_permutexvar_epi16(__m512i __W, __mmask32 __M, __m512i __A,
1863+
__m512i __B) {
18681864
return (__m512i)__builtin_ia32_selectw_512((__mmask32)__M,
18691865
(__v32hi)_mm512_permutexvar_epi16(__A, __B),
18701866
(__v32hi)__W);

clang/lib/Headers/avx512fintrin.h

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7959,93 +7959,82 @@ _mm_mask3_fnmsub_sd (__m128d __W, __m128d __X, __m128d __Y, __mmask8 __U)
79597959
(__v8di)_mm512_permutex_epi64((X), (C)), \
79607960
(__v8di)_mm512_setzero_si512()))
79617961

7962-
static __inline__ __m512d __DEFAULT_FN_ATTRS512
7963-
_mm512_permutexvar_pd (__m512i __X, __m512d __Y)
7964-
{
7962+
static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
7963+
_mm512_permutexvar_pd(__m512i __X, __m512d __Y) {
79657964
return (__m512d)__builtin_ia32_permvardf512((__v8df) __Y, (__v8di) __X);
79667965
}
79677966

7968-
static __inline__ __m512d __DEFAULT_FN_ATTRS512
7969-
_mm512_mask_permutexvar_pd (__m512d __W, __mmask8 __U, __m512i __X, __m512d __Y)
7970-
{
7967+
static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
7968+
_mm512_mask_permutexvar_pd(__m512d __W, __mmask8 __U, __m512i __X,
7969+
__m512d __Y) {
79717970
return (__m512d)__builtin_ia32_selectpd_512((__mmask8)__U,
79727971
(__v8df)_mm512_permutexvar_pd(__X, __Y),
79737972
(__v8df)__W);
79747973
}
79757974

7976-
static __inline__ __m512d __DEFAULT_FN_ATTRS512
7977-
_mm512_maskz_permutexvar_pd (__mmask8 __U, __m512i __X, __m512d __Y)
7978-
{
7975+
static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
7976+
_mm512_maskz_permutexvar_pd(__mmask8 __U, __m512i __X, __m512d __Y) {
79797977
return (__m512d)__builtin_ia32_selectpd_512((__mmask8)__U,
79807978
(__v8df)_mm512_permutexvar_pd(__X, __Y),
79817979
(__v8df)_mm512_setzero_pd());
79827980
}
79837981

7984-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
7985-
_mm512_permutexvar_epi64 (__m512i __X, __m512i __Y)
7986-
{
7982+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
7983+
_mm512_permutexvar_epi64(__m512i __X, __m512i __Y) {
79877984
return (__m512i)__builtin_ia32_permvardi512((__v8di)__Y, (__v8di)__X);
79887985
}
79897986

7990-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
7991-
_mm512_maskz_permutexvar_epi64 (__mmask8 __M, __m512i __X, __m512i __Y)
7992-
{
7987+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
7988+
_mm512_maskz_permutexvar_epi64(__mmask8 __M, __m512i __X, __m512i __Y) {
79937989
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
79947990
(__v8di)_mm512_permutexvar_epi64(__X, __Y),
79957991
(__v8di)_mm512_setzero_si512());
79967992
}
79977993

7998-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
7999-
_mm512_mask_permutexvar_epi64 (__m512i __W, __mmask8 __M, __m512i __X,
8000-
__m512i __Y)
8001-
{
7994+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
7995+
_mm512_mask_permutexvar_epi64(__m512i __W, __mmask8 __M, __m512i __X,
7996+
__m512i __Y) {
80027997
return (__m512i)__builtin_ia32_selectq_512((__mmask8)__M,
80037998
(__v8di)_mm512_permutexvar_epi64(__X, __Y),
80047999
(__v8di)__W);
80058000
}
80068001

8007-
static __inline__ __m512 __DEFAULT_FN_ATTRS512
8008-
_mm512_permutexvar_ps (__m512i __X, __m512 __Y)
8009-
{
8002+
static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
8003+
_mm512_permutexvar_ps(__m512i __X, __m512 __Y) {
80108004
return (__m512)__builtin_ia32_permvarsf512((__v16sf)__Y, (__v16si)__X);
80118005
}
80128006

8013-
static __inline__ __m512 __DEFAULT_FN_ATTRS512
8014-
_mm512_mask_permutexvar_ps (__m512 __W, __mmask16 __U, __m512i __X, __m512 __Y)
8015-
{
8007+
static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
8008+
_mm512_mask_permutexvar_ps(__m512 __W, __mmask16 __U, __m512i __X, __m512 __Y) {
80168009
return (__m512)__builtin_ia32_selectps_512((__mmask16)__U,
80178010
(__v16sf)_mm512_permutexvar_ps(__X, __Y),
80188011
(__v16sf)__W);
80198012
}
80208013

8021-
static __inline__ __m512 __DEFAULT_FN_ATTRS512
8022-
_mm512_maskz_permutexvar_ps (__mmask16 __U, __m512i __X, __m512 __Y)
8023-
{
8014+
static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
8015+
_mm512_maskz_permutexvar_ps(__mmask16 __U, __m512i __X, __m512 __Y) {
80248016
return (__m512)__builtin_ia32_selectps_512((__mmask16)__U,
80258017
(__v16sf)_mm512_permutexvar_ps(__X, __Y),
80268018
(__v16sf)_mm512_setzero_ps());
80278019
}
80288020

8029-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
8030-
_mm512_permutexvar_epi32 (__m512i __X, __m512i __Y)
8031-
{
8021+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
8022+
_mm512_permutexvar_epi32(__m512i __X, __m512i __Y) {
80328023
return (__m512i)__builtin_ia32_permvarsi512((__v16si)__Y, (__v16si)__X);
80338024
}
80348025

80358026
#define _mm512_permutevar_epi32 _mm512_permutexvar_epi32
80368027

8037-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
8038-
_mm512_maskz_permutexvar_epi32 (__mmask16 __M, __m512i __X, __m512i __Y)
8039-
{
8028+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
8029+
_mm512_maskz_permutexvar_epi32(__mmask16 __M, __m512i __X, __m512i __Y) {
80408030
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
80418031
(__v16si)_mm512_permutexvar_epi32(__X, __Y),
80428032
(__v16si)_mm512_setzero_si512());
80438033
}
80448034

8045-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
8046-
_mm512_mask_permutexvar_epi32 (__m512i __W, __mmask16 __M, __m512i __X,
8047-
__m512i __Y)
8048-
{
8035+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
8036+
_mm512_mask_permutexvar_epi32(__m512i __W, __mmask16 __M, __m512i __X,
8037+
__m512i __Y) {
80498038
return (__m512i)__builtin_ia32_selectd_512((__mmask16)__M,
80508039
(__v16si)_mm512_permutexvar_epi32(__X, __Y),
80518040
(__v16si)__W);

0 commit comments

Comments
 (0)