@@ -416,6 +416,54 @@ define i32 @ptestz_v2i64_concat(<4 x i64> %c, <4 x i64> %d, i32 %a, i32 %b) {
416
416
ret i32 %t9
417
417
}
418
418
419
+ ; FIXME: Foldable to ptest(xor(%0,%1),xor(%0,%1))
420
+ define i1 @PR38788_0 (<4 x i32 > %0 , <4 x i32 > %1 ) {
421
+ ; CHECK-LABEL: PR38788_0:
422
+ ; CHECK: # %bb.0:
423
+ ; CHECK-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
424
+ ; CHECK-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
425
+ ; CHECK-NEXT: vptest %xmm1, %xmm0
426
+ ; CHECK-NEXT: setb %al
427
+ ; CHECK-NEXT: retq
428
+ %3 = icmp eq <4 x i32 > %0 , %1
429
+ %4 = sext <4 x i1 > %3 to <4 x i32 >
430
+ %5 = bitcast <4 x i32 > %4 to <2 x i64 >
431
+ %6 = tail call i32 @llvm.x86.sse41.ptestc (<2 x i64 > %5 , <2 x i64 > <i64 -1 , i64 -1 >)
432
+ %7 = icmp eq i32 %6 , 1
433
+ ret i1 %7
434
+ }
435
+
436
+ define i1 @PR38788_1 (<16 x i16 > %0 , <16 x i16 > %1 ) {
437
+ ; AVX1-LABEL: PR38788_1:
438
+ ; AVX1: # %bb.0:
439
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
440
+ ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
441
+ ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm3, %xmm2
442
+ ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
443
+ ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
444
+ ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
445
+ ; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1
446
+ ; AVX1-NEXT: vptest %ymm1, %ymm0
447
+ ; AVX1-NEXT: setae %al
448
+ ; AVX1-NEXT: vzeroupper
449
+ ; AVX1-NEXT: retq
450
+ ;
451
+ ; AVX2-LABEL: PR38788_1:
452
+ ; AVX2: # %bb.0:
453
+ ; AVX2-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0
454
+ ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
455
+ ; AVX2-NEXT: vptest %ymm1, %ymm0
456
+ ; AVX2-NEXT: setae %al
457
+ ; AVX2-NEXT: vzeroupper
458
+ ; AVX2-NEXT: retq
459
+ %3 = icmp eq <16 x i16 > %0 , %1
460
+ %4 = sext <16 x i1 > %3 to <16 x i16 >
461
+ %5 = bitcast <16 x i16 > %4 to <4 x i64 >
462
+ %6 = tail call i32 @llvm.x86.avx.ptestc.256 (<4 x i64 > %5 , <4 x i64 > <i64 -1 , i64 -1 , i64 -1 , i64 -1 >)
463
+ %7 = icmp eq i32 %6 , 0
464
+ ret i1 %7
465
+ }
466
+
419
467
declare i32 @llvm.x86.sse41.ptestz (<2 x i64 >, <2 x i64 >) nounwind readnone
420
468
declare i32 @llvm.x86.sse41.ptestc (<2 x i64 >, <2 x i64 >) nounwind readnone
421
469
declare i32 @llvm.x86.sse41.ptestnzc (<2 x i64 >, <2 x i64 >) nounwind readnone
0 commit comments