Skip to content

Commit f5694f0

Browse files
authored
[Headers][X86] Update SSE/AVX integer comparison intrinsics to be used in constexpr (llvm#155656)
Closes llvm#155413
1 parent 9a99896 commit f5694f0

File tree

7 files changed

+62
-30
lines changed

7 files changed

+62
-30
lines changed

clang/lib/Headers/avx2intrin.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ _mm256_blendv_epi8(__m256i __V1, __m256i __V2, __m256i __M)
634634
/// \param __b
635635
/// A 256-bit integer vector containing one of the inputs.
636636
/// \returns A 256-bit integer vector containing the result.
637-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
637+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
638638
_mm256_cmpeq_epi8(__m256i __a, __m256i __b)
639639
{
640640
return (__m256i)((__v32qi)__a == (__v32qi)__b);
@@ -660,7 +660,7 @@ _mm256_cmpeq_epi8(__m256i __a, __m256i __b)
660660
/// \param __b
661661
/// A 256-bit vector of [16 x i16] containing one of the inputs.
662662
/// \returns A 256-bit vector of [16 x i16] containing the result.
663-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
663+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
664664
_mm256_cmpeq_epi16(__m256i __a, __m256i __b)
665665
{
666666
return (__m256i)((__v16hi)__a == (__v16hi)__b);
@@ -686,7 +686,7 @@ _mm256_cmpeq_epi16(__m256i __a, __m256i __b)
686686
/// \param __b
687687
/// A 256-bit vector of [8 x i32] containing one of the inputs.
688688
/// \returns A 256-bit vector of [8 x i32] containing the result.
689-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
689+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
690690
_mm256_cmpeq_epi32(__m256i __a, __m256i __b)
691691
{
692692
return (__m256i)((__v8si)__a == (__v8si)__b);
@@ -712,7 +712,7 @@ _mm256_cmpeq_epi32(__m256i __a, __m256i __b)
712712
/// \param __b
713713
/// A 256-bit vector of [4 x i64] containing one of the inputs.
714714
/// \returns A 256-bit vector of [4 x i64] containing the result.
715-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
715+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
716716
_mm256_cmpeq_epi64(__m256i __a, __m256i __b)
717717
{
718718
return (__m256i)((__v4di)__a == (__v4di)__b);
@@ -738,7 +738,7 @@ _mm256_cmpeq_epi64(__m256i __a, __m256i __b)
738738
/// \param __b
739739
/// A 256-bit integer vector containing one of the inputs.
740740
/// \returns A 256-bit integer vector containing the result.
741-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
741+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
742742
_mm256_cmpgt_epi8(__m256i __a, __m256i __b)
743743
{
744744
/* This function always performs a signed comparison, but __v32qi is a char
@@ -766,7 +766,7 @@ _mm256_cmpgt_epi8(__m256i __a, __m256i __b)
766766
/// \param __b
767767
/// A 256-bit vector of [16 x i16] containing one of the inputs.
768768
/// \returns A 256-bit vector of [16 x i16] containing the result.
769-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
769+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
770770
_mm256_cmpgt_epi16(__m256i __a, __m256i __b)
771771
{
772772
return (__m256i)((__v16hi)__a > (__v16hi)__b);
@@ -792,7 +792,7 @@ _mm256_cmpgt_epi16(__m256i __a, __m256i __b)
792792
/// \param __b
793793
/// A 256-bit vector of [8 x i32] containing one of the inputs.
794794
/// \returns A 256-bit vector of [8 x i32] containing the result.
795-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
795+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
796796
_mm256_cmpgt_epi32(__m256i __a, __m256i __b)
797797
{
798798
return (__m256i)((__v8si)__a > (__v8si)__b);
@@ -818,7 +818,7 @@ _mm256_cmpgt_epi32(__m256i __a, __m256i __b)
818818
/// \param __b
819819
/// A 256-bit vector of [4 x i64] containing one of the inputs.
820820
/// \returns A 256-bit vector of [4 x i64] containing the result.
821-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
821+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
822822
_mm256_cmpgt_epi64(__m256i __a, __m256i __b)
823823
{
824824
return (__m256i)((__v4di)__a > (__v4di)__b);

clang/lib/Headers/emmintrin.h

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3090,8 +3090,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srl_epi64(__m128i __a,
30903090
/// \param __b
30913091
/// A 128-bit integer vector.
30923092
/// \returns A 128-bit integer vector containing the comparison results.
3093-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi8(__m128i __a,
3094-
__m128i __b) {
3093+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3094+
_mm_cmpeq_epi8(__m128i __a, __m128i __b) {
30953095
return (__m128i)((__v16qi)__a == (__v16qi)__b);
30963096
}
30973097

@@ -3109,8 +3109,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi8(__m128i __a,
31093109
/// \param __b
31103110
/// A 128-bit integer vector.
31113111
/// \returns A 128-bit integer vector containing the comparison results.
3112-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi16(__m128i __a,
3113-
__m128i __b) {
3112+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3113+
_mm_cmpeq_epi16(__m128i __a, __m128i __b) {
31143114
return (__m128i)((__v8hi)__a == (__v8hi)__b);
31153115
}
31163116

@@ -3128,8 +3128,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi16(__m128i __a,
31283128
/// \param __b
31293129
/// A 128-bit integer vector.
31303130
/// \returns A 128-bit integer vector containing the comparison results.
3131-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi32(__m128i __a,
3132-
__m128i __b) {
3131+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3132+
_mm_cmpeq_epi32(__m128i __a, __m128i __b) {
31333133
return (__m128i)((__v4si)__a == (__v4si)__b);
31343134
}
31353135

@@ -3148,8 +3148,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi32(__m128i __a,
31483148
/// \param __b
31493149
/// A 128-bit integer vector.
31503150
/// \returns A 128-bit integer vector containing the comparison results.
3151-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi8(__m128i __a,
3152-
__m128i __b) {
3151+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3152+
_mm_cmpgt_epi8(__m128i __a, __m128i __b) {
31533153
/* This function always performs a signed comparison, but __v16qi is a char
31543154
which may be signed or unsigned, so use __v16qs. */
31553155
return (__m128i)((__v16qs)__a > (__v16qs)__b);
@@ -3170,8 +3170,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi8(__m128i __a,
31703170
/// \param __b
31713171
/// A 128-bit integer vector.
31723172
/// \returns A 128-bit integer vector containing the comparison results.
3173-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi16(__m128i __a,
3174-
__m128i __b) {
3173+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3174+
_mm_cmpgt_epi16(__m128i __a, __m128i __b) {
31753175
return (__m128i)((__v8hi)__a > (__v8hi)__b);
31763176
}
31773177

@@ -3190,8 +3190,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi16(__m128i __a,
31903190
/// \param __b
31913191
/// A 128-bit integer vector.
31923192
/// \returns A 128-bit integer vector containing the comparison results.
3193-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi32(__m128i __a,
3194-
__m128i __b) {
3193+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3194+
_mm_cmpgt_epi32(__m128i __a, __m128i __b) {
31953195
return (__m128i)((__v4si)__a > (__v4si)__b);
31963196
}
31973197

@@ -3210,8 +3210,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi32(__m128i __a,
32103210
/// \param __b
32113211
/// A 128-bit integer vector.
32123212
/// \returns A 128-bit integer vector containing the comparison results.
3213-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi8(__m128i __a,
3214-
__m128i __b) {
3213+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3214+
_mm_cmplt_epi8(__m128i __a, __m128i __b) {
32153215
return _mm_cmpgt_epi8(__b, __a);
32163216
}
32173217

@@ -3230,8 +3230,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi8(__m128i __a,
32303230
/// \param __b
32313231
/// A 128-bit integer vector.
32323232
/// \returns A 128-bit integer vector containing the comparison results.
3233-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi16(__m128i __a,
3234-
__m128i __b) {
3233+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3234+
_mm_cmplt_epi16(__m128i __a, __m128i __b) {
32353235
return _mm_cmpgt_epi16(__b, __a);
32363236
}
32373237

@@ -3250,8 +3250,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi16(__m128i __a,
32503250
/// \param __b
32513251
/// A 128-bit integer vector.
32523252
/// \returns A 128-bit integer vector containing the comparison results.
3253-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi32(__m128i __a,
3254-
__m128i __b) {
3253+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
3254+
_mm_cmplt_epi32(__m128i __a, __m128i __b) {
32553255
return _mm_cmpgt_epi32(__b, __a);
32563256
}
32573257

clang/lib/Headers/smmintrin.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,8 +1211,8 @@ static __inline__ int __DEFAULT_FN_ATTRS _mm_testnzc_si128(__m128i __M,
12111211
/// \param __V2
12121212
/// A 128-bit integer vector.
12131213
/// \returns A 128-bit integer vector containing the comparison results.
1214-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi64(__m128i __V1,
1215-
__m128i __V2) {
1214+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
1215+
_mm_cmpeq_epi64(__m128i __V1, __m128i __V2) {
12161216
return (__m128i)((__v2di)__V1 == (__v2di)__V2);
12171217
}
12181218

@@ -2338,8 +2338,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_minpos_epu16(__m128i __V) {
23382338
/// \param __V2
23392339
/// A 128-bit integer vector.
23402340
/// \returns A 128-bit integer vector containing the comparison results.
2341-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi64(__m128i __V1,
2342-
__m128i __V2) {
2341+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2342+
_mm_cmpgt_epi64(__m128i __V1, __m128i __V2) {
23432343
return (__m128i)((__v2di)__V1 > (__v2di)__V2);
23442344
}
23452345

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,48 +290,62 @@ __m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) {
290290
// CHECK: icmp eq <32 x i8>
291291
return _mm256_cmpeq_epi8(a, b);
292292
}
293+
TEST_CONSTEXPR(match_v16qi(_mm_cmpeq_epi8(
294+
(__m128i)(__v16qs){1,-2,3,-4,-5,6,-7,8,-9,10,-11,12,-13,14,-15,16},
295+
(__m128i)(__v16qs){10,-2,6,-4,-5,12,-14,8,-9,20,-22,12,-26,14,-30,16}),
296+
0,-1,0,-1,-1,0,0,-1,-1,0,0,-1,0,-1,0,-1));
293297

294298
__m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) {
295299
// CHECK-LABEL: test_mm256_cmpeq_epi16
296300
// CHECK: icmp eq <16 x i16>
297301
return _mm256_cmpeq_epi16(a, b);
298302
}
303+
TEST_CONSTEXPR(match_v16hi(_mm256_cmpeq_epi16((__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-10, -2, +6, -4, +5, -12, +14, -8, +9, -20, +22, -12, +26, -14, +30, -16}), 0, -1, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, 0, -1, 0, -1));
299304

300305
__m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) {
301306
// CHECK-LABEL: test_mm256_cmpeq_epi32
302307
// CHECK: icmp eq <8 x i32>
303308
return _mm256_cmpeq_epi32(a, b);
304309
}
310+
TEST_CONSTEXPR(match_v8si(_mm256_cmpeq_epi32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-10, -2, +6, -4, +5, -12, +14, -8}), 0, -1, 0, -1, -1, 0, 0, -1));
305311

306312
__m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) {
307313
// CHECK-LABEL: test_mm256_cmpeq_epi64
308314
// CHECK: icmp eq <4 x i64>
309315
return _mm256_cmpeq_epi64(a, b);
310316
}
317+
TEST_CONSTEXPR(match_v4di(_mm256_cmpeq_epi64((__m256i)(__v4di){+1, -2, +3, -4}, (__m256i)(__v4di){-10, -2, +6, -4}), 0, -1, 0, -1));
311318

312319
__m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) {
313320
// CHECK-LABEL: test_mm256_cmpgt_epi8
314321
// CHECK: icmp sgt <32 x i8>
315322
return _mm256_cmpgt_epi8(a, b);
316323
}
324+
TEST_CONSTEXPR(match_v32qi(_mm256_cmpgt_epi8(
325+
(__m256i)(__v32qs){1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15, -16, -1, 2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13, 14, -15, 16},
326+
(__m256i)(__v32qs){10, -2, 6, -5, 30, -7, 8, -1, 20, -3, 12, -8, 25, -10, 9, -2, -10, 2, -6, 5, -30, 7, -8, 1, -20, 3, -12, 8, -25, 10, -9, 2}),
327+
0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1));
317328

318329
__m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) {
319330
// CHECK-LABEL: test_mm256_cmpgt_epi16
320331
// CHECK: icmp sgt <16 x i16>
321332
return _mm256_cmpgt_epi16(a, b);
322333
}
334+
TEST_CONSTEXPR(match_v16hi(_mm256_cmpgt_epi16((__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v16hi){-10, -2, +6, -5, +30, -7, +8, -1, -10, -2, +6, -5, +30, -7, +8, -1}), -1, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, -1, 0, -1, 0, 0));
323335

324336
__m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) {
325337
// CHECK-LABEL: test_mm256_cmpgt_epi32
326338
// CHECK: icmp sgt <8 x i32>
327339
return _mm256_cmpgt_epi32(a, b);
328340
}
341+
TEST_CONSTEXPR(match_v8si(_mm256_cmpgt_epi32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-10, -2, +6, -5, +30, -7, +8, -1}), -1, 0, 0, -1, 0, -1, 0, 0));
329342

330343
__m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) {
331344
// CHECK-LABEL: test_mm256_cmpgt_epi64
332345
// CHECK: icmp sgt <4 x i64>
333346
return _mm256_cmpgt_epi64(a, b);
334347
}
348+
TEST_CONSTEXPR(match_v4di(_mm256_cmpgt_epi64((__m256i)(__v4di){+1, -2, +3, -4}, (__m256i)(__v4di){-10, -2, +6, -5}), -1, 0, 0, -1));
335349

336350
__m256i test_mm256_cvtepi8_epi16(__m128i a) {
337351
// CHECK-LABEL: test_mm256_cvtepi8_epi16

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,18 +243,21 @@ __m128i test_mm_cmpeq_epi8(__m128i A, __m128i B) {
243243
// CHECK: icmp eq <16 x i8>
244244
return _mm_cmpeq_epi8(A, B);
245245
}
246+
TEST_CONSTEXPR(match_v16qi(_mm_cmpeq_epi8((__m128i)(__v16qs){1,-2,3,-4,-5,6,-7,8,-9,10,-11,12,-13,14,-15,16}, (__m128i)(__v16qs){10,-2,6,-4,-5,12,-14,8,-9,20,-22,12,-26,14,-30,16}), 0,-1,0,-1,-1,0,0,-1,-1,0,0,-1,0,-1,0,-1));
246247

247248
__m128i test_mm_cmpeq_epi16(__m128i A, __m128i B) {
248249
// CHECK-LABEL: test_mm_cmpeq_epi16
249250
// CHECK: icmp eq <8 x i16>
250251
return _mm_cmpeq_epi16(A, B);
251252
}
253+
TEST_CONSTEXPR(match_v8hi(_mm_cmpeq_epi16((__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-10, -2, +6, -4, +5, -12, +14, -8}), 0, -1, 0, -1, -1, 0, 0, -1));
252254

253255
__m128i test_mm_cmpeq_epi32(__m128i A, __m128i B) {
254256
// CHECK-LABEL: test_mm_cmpeq_epi32
255257
// CHECK: icmp eq <4 x i32>
256258
return _mm_cmpeq_epi32(A, B);
257259
}
260+
TEST_CONSTEXPR(match_v4si(_mm_cmpeq_epi32((__m128i)(__v4si){+1, -2, +3, -4}, (__m128i)(__v4si){-10, -2, +6, -4}), 0, -1, 0, -1));
258261

259262
__m128d test_mm_cmpeq_pd(__m128d A, __m128d B) {
260263
// CHECK-LABEL: test_mm_cmpeq_pd
@@ -293,18 +296,24 @@ __m128i test_mm_cmpgt_epi8(__m128i A, __m128i B) {
293296
// CHECK: icmp sgt <16 x i8>
294297
return _mm_cmpgt_epi8(A, B);
295298
}
299+
TEST_CONSTEXPR(match_v16qi(_mm_cmpgt_epi8(
300+
(__m128i)(__v16qs){15,-2,8,-4,12,6,-20,8,25,-10,30,12,-35,14,40,-16},
301+
(__m128i)(__v16qs){10,-2,6,-4,5,12,-14,8,9,-20,22,12,-26,14,30,-16}),
302+
-1, 0, -1, 0, -1, 0, 0, 0,-1, -1, -1, 0, 0, 0, -1, 0));
296303

297304
__m128i test_mm_cmpgt_epi16(__m128i A, __m128i B) {
298305
// CHECK-LABEL: test_mm_cmpgt_epi16
299306
// CHECK: icmp sgt <8 x i16>
300307
return _mm_cmpgt_epi16(A, B);
301308
}
309+
TEST_CONSTEXPR(match_v8hi(_mm_cmpgt_epi16((__m128i)(__v8hi){15,2,8,4,12,6,20,8}, (__m128i)(__v8hi){10,2,6,4,5,12,14,8}), -1,0,-1,0,-1,0,-1,0));
302310

303311
__m128i test_mm_cmpgt_epi32(__m128i A, __m128i B) {
304312
// CHECK-LABEL: test_mm_cmpgt_epi32
305313
// CHECK: icmp sgt <4 x i32>
306314
return _mm_cmpgt_epi32(A, B);
307315
}
316+
TEST_CONSTEXPR(match_v4si(_mm_cmpgt_epi32((__m128i)(__v4si){15,2,8,4}, (__m128i)(__v4si){10,2,6,4}), -1,0,-1,0));
308317

309318
__m128d test_mm_cmpgt_pd(__m128d A, __m128d B) {
310319
// CHECK-LABEL: test_mm_cmpgt_pd
@@ -343,18 +352,24 @@ __m128i test_mm_cmplt_epi8(__m128i A, __m128i B) {
343352
// CHECK: icmp sgt <16 x i8>
344353
return _mm_cmplt_epi8(A, B);
345354
}
355+
TEST_CONSTEXPR(match_v16qi(_mm_cmplt_epi8(
356+
(__m128i)(__v16qs){15,-2,8,-4,12,6,-20,8,25,-10,30,12,-35,14,40,-16},
357+
(__m128i)(__v16qs){10,-2,6,-4,5,12,-14,8,9,-20,22,12,-26,14,30,-16}),
358+
0, 0, 0, 0, 0, -1, -1, 0,0, 0, 0, 0, -1, 0, 0, 0));
346359

347360
__m128i test_mm_cmplt_epi16(__m128i A, __m128i B) {
348361
// CHECK-LABEL: test_mm_cmplt_epi16
349362
// CHECK: icmp sgt <8 x i16>
350363
return _mm_cmplt_epi16(A, B);
351364
}
365+
TEST_CONSTEXPR(match_v8hi(_mm_cmplt_epi16((__m128i)(__v8hi){5,2,3,4,1,6,7,8}, (__m128i)(__v8hi){10,2,6,4,5,12,14,8}), -1, 0, -1, 0, -1, -1, -1, 0));
352366

353367
__m128i test_mm_cmplt_epi32(__m128i A, __m128i B) {
354368
// CHECK-LABEL: test_mm_cmplt_epi32
355369
// CHECK: icmp sgt <4 x i32>
356370
return _mm_cmplt_epi32(A, B);
357371
}
372+
TEST_CONSTEXPR(match_v4si(_mm_cmplt_epi32((__m128i)(__v4si){5,2,3,4}, (__m128i)(__v4si){10,2,6,4}), -1,0,-1,0));
358373

359374
__m128d test_mm_cmplt_pd(__m128d A, __m128d B) {
360375
// CHECK-LABEL: test_mm_cmplt_pd

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ __m128i test_mm_cmpeq_epi64(__m128i A, __m128i B) {
7979
// CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
8080
return _mm_cmpeq_epi64(A, B);
8181
}
82+
TEST_CONSTEXPR(match_v2di(_mm_cmpeq_epi64((__m128i)(__v2di){+1, -8}, (__m128i)(__v2di){-10, -8}), 0, -1));
8283

8384
__m128i test_mm_cvtepi8_epi16(__m128i a) {
8485
// CHECK-LABEL: test_mm_cvtepi8_epi16

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010

1111
#include <immintrin.h>
12+
#include "builtin_test_helpers.h"
1213

1314
// NOTE: This should match the tests in llvm/test/CodeGen/X86/sse42-intrinsics-fast-isel.ll
1415

@@ -59,6 +60,7 @@ __m128i test_mm_cmpgt_epi64(__m128i A, __m128i B) {
5960
// CHECK: icmp sgt <2 x i64>
6061
return _mm_cmpgt_epi64(A, B);
6162
}
63+
TEST_CONSTEXPR(match_v2di(_mm_cmpgt_epi64((__m128i)(__v2di){+1, -8}, (__m128i)(__v2di){-10, -8}), -1, 0));
6264

6365
int test_mm_cmpistra(__m128i A, __m128i B) {
6466
// CHECK-LABEL: test_mm_cmpistra

0 commit comments

Comments
 (0)