Skip to content

Commit 1ddbdbb

Browse files
committed
[X86] Allow PSHUFD/PSHUFLW/PSHUFW intrinsics in constexpr, Fixes Issue: #156611
1 parent 2d0c3f8 commit 1ddbdbb

File tree

11 files changed

+11
-0
lines changed

11 files changed

+11
-0
lines changed

clang/include/clang/Basic/BuiltinsX86.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5150,6 +5150,7 @@ let Features = "avx512bw", Attributes = [NoThrow, Const, Constexpr, RequiredVect
51505150
def pshufhw512_maskz : X86Builtin<"_Vector<32, short>(_Vector<32, short>, _Constant int, unsigned int)">;
51515151
}
51525152

5153+
51535154
let Features = "avx512vl,avx512bw", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<256>] in {
51545155
def pshuflw256_mask : X86Builtin<"_Vector<16, short>(_Vector<16, short>, _Constant int, _Vector<16, short>, unsigned short)">;
51555156
def pshuflw256_maskz : X86Builtin<"_Vector<16, short>(_Vector<16, short>, _Constant int, unsigned short)">;

clang/lib/AST/ByteCode/InterpBuiltin.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3179,6 +3179,7 @@ static bool interp__builtin_x86_insert_subvector(InterpState &S, CodePtr OpPC,
31793179
return true;
31803180
}
31813181

3182+
31823183
bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
31833184
uint32_t BuiltinID) {
31843185
if (!S.getASTContext().BuiltinInfo.isConstantEvaluated(BuiltinID))

clang/lib/AST/ExprConstant.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12477,6 +12477,7 @@ case clang::X86::BI__builtin_ia32_pshufd512_maskz: {
1247712477
return Success(APValue(ResultElements.data(), ResultElements.size()), E);
1247812478
}
1247912479

12480+
1248012481
case X86::BI__builtin_ia32_insertf32x4_256:
1248112482
case X86::BI__builtin_ia32_inserti32x4_256:
1248212483
case X86::BI__builtin_ia32_insertf64x2_256:

clang/lib/Headers/mmintrin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ _mm_packs_pi32(__m64 __m1, __m64 __m2) {
192192
(__v4si)__builtin_shufflevector(__m1, __m2, 0, 1), (__v4si){}));
193193
}
194194

195+
195196
/// Converts, with saturation, 16-bit signed integers from both 64-bit integer
196197
/// vector parameters of [4 x i16] into 8-bit unsigned integer values, and
197198
/// constructs a 64-bit integer vector of [8 x i8] as the result.

clang/test/CodeGen/X86/avx2-builtins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,6 +1126,7 @@ TEST_CONSTEXPR(match_v8si(_mm256_shuffle_epi32((((__m256i)(__v8si){0,1,2,3,4,5,6
11261126
TEST_CONSTEXPR(match_v16hi(_mm256_shufflehi_epi16((((__m256i)(__v16hi){0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15})), 107), 0,1,2,3, 7,6,6,5, 8,9,10,11, 15,14,14,13));
11271127
TEST_CONSTEXPR(match_v16hi(_mm256_shufflelo_epi16(((__m256i)(__v16hi){ 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15}), 83), 3,0,1,1, 4,5,6,7, 11,8,9,9, 12,13,14,15) );
11281128

1129+
11291130
__m256i test_mm256_sign_epi8(__m256i a, __m256i b) {
11301131
// CHECK-LABEL: test_mm256_sign_epi8
11311132
// CHECK: call <32 x i8> @llvm.x86.avx2.psign.b(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})

clang/test/CodeGen/X86/avx512bw-builtins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1910,6 +1910,7 @@ __m512i test_mm512_maskz_shufflelo_epi16(__mmask32 __U, __m512i __A) {
19101910
return _mm512_maskz_shufflelo_epi16(__U, __A, 5);
19111911
}
19121912

1913+
19131914
//_mm512_shufflehi_epi16 , _mm512_mask_shufflehi_epi16 , _mm512_maskz_shufflehi_epi16
19141915
TEST_CONSTEXPR(match_v32hi(_mm512_shufflehi_epi16((((__m512i)(__v32hi){0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31})), 5), 0,1,2,3, 5,5,4,4, 8,9,10,11, 13,13,12,12, 16,17,18,19, 21,21,20,20, 24,25,26,27, 29,29,28,28));
19151916
TEST_CONSTEXPR(match_v32hi(_mm512_mask_shufflehi_epi16((((__m512i)(__v32hi){100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131})), 0xFFFF0000u, (((__m512i)(__v32hi){0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31})), 5), 100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115, 16,17,18,19,21,21,20,20, 24,25,26,27,29,29,28,28));

clang/test/CodeGen/X86/avx512f-builtins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9101,6 +9101,7 @@ TEST_CONSTEXPR(match_v16si(_mm512_maskz_shuffle_epi32(0xFFFFu, ((__m512i)(__v16s
91019101
TEST_CONSTEXPR(match_v16si(_mm512_maskz_shuffle_epi32(0x5555u, ((__m512i)(__v16si){0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}), 1), 1,0,0,0, 5,0,4,0, 9,0,8,0, 13,0,12,0));
91029102
TEST_CONSTEXPR(match_v16si(_mm512_maskz_shuffle_epi32(0x8001u, ((__m512i)(__v16si){0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}), 1), 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,12));
91039103

9104+
91049105
__m512d test_mm512_mask_expand_pd(__m512d __W, __mmask8 __U, __m512d __A) {
91059106
// CHECK-LABEL: test_mm512_mask_expand_pd
91069107
// CHECK: @llvm.x86.avx512.mask.expand

clang/test/CodeGen/X86/avx512vl-builtins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10046,6 +10046,7 @@ __m256i test_mm256_maskz_shuffle_epi32(__mmask8 __U, __m256i __A) {
1004610046
return _mm256_maskz_shuffle_epi32(__U, __A, 2);
1004710047
}
1004810048

10049+
1004910050
// 128-bit (_mm_mask_shuffle_epi32 / _mm_maskz_shuffle_epi32)
1005010051
TEST_CONSTEXPR(match_v4si(_mm_mask_shuffle_epi32(((__m128i)(__v4si){100,101,102,103}), 0x0Fu, ((__m128i)(__v4si){0,1,2,3}), 1), 1,0,0,0));
1005110052
TEST_CONSTEXPR(match_v4si(_mm_mask_shuffle_epi32(((__m128i)(__v4si){100,101,102,103}), 0x0Au, ((__m128i)(__v4si){0,1,2,3}), 1), 100,0,102,0));

clang/test/CodeGen/X86/avx512vlbw-builtins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3441,6 +3441,7 @@ __m256i test_mm256_maskz_shufflelo_epi16(__mmask16 __U, __m256i __A) {
34413441
return _mm256_maskz_shufflelo_epi16(__U, __A, 5);
34423442
}
34433443

3444+
34443445
// 128-bit shufflelo (mask)
34453446
TEST_CONSTEXPR(match_v8hi(_mm_mask_shufflelo_epi16(((__m128i)(__v8hi){0,1,2,3,4,5,6,7}),0xFF,((__m128i)(__v8hi){0,1,2,3,4,5,6,7}),5),1,1,0,0,4,5,6,7));
34463447
TEST_CONSTEXPR(match_v8hi(_mm_mask_shufflelo_epi16(((__m128i)(__v8hi){100,101,102,103,104,105,106,107}),0x00u,((__m128i)(__v8hi){0,1,2,3,4,5,6,7}),5),100,101,102,103,104,105,106,107));

clang/test/CodeGen/X86/mmx-builtins.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,7 @@ __m64 test_mm_shuffle_pi8(__m64 a, __m64 b) {
579579
return _mm_shuffle_pi8(a, b);
580580
}
581581

582+
582583
__m64 test_mm_shuffle_pi16(__m64 a) {
583584
// CHECK-LABEL: test_mm_shuffle_pi16
584585
// CHECK: shufflevector <4 x i16> {{%.*}}, <4 x i16> {{%.*}}, <4 x i32> <i32 3, i32 0, i32 0, i32 0>

0 commit comments

Comments
 (0)