@@ -2717,6 +2717,100 @@ define <8 x i64> @sub_v8i64_cast_cond(i8 noundef zeroext %pb, <8 x i64> noundef
2717
2717
ret <8 x i64 > %r
2718
2718
}
2719
2719
2720
+ define <8 x i64 > @sub_v8i64_cast_cond_xor (i8 noundef zeroext %pb , <8 x i64 > noundef %x , <8 x i64 > noundef %y ) {
2721
+ ; SSE2-LABEL: sub_v8i64_cast_cond_xor:
2722
+ ; SSE2: # %bb.0:
2723
+ ; SSE2-NEXT: movd %edi, %xmm8
2724
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]
2725
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [64,128]
2726
+ ; SSE2-NEXT: movdqa %xmm9, %xmm8
2727
+ ; SSE2-NEXT: pand %xmm10, %xmm8
2728
+ ; SSE2-NEXT: pcmpeqd %xmm10, %xmm8
2729
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm8[1,0,3,2]
2730
+ ; SSE2-NEXT: pand %xmm7, %xmm8
2731
+ ; SSE2-NEXT: pand %xmm10, %xmm8
2732
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [16,32]
2733
+ ; SSE2-NEXT: movdqa %xmm9, %xmm7
2734
+ ; SSE2-NEXT: pand %xmm10, %xmm7
2735
+ ; SSE2-NEXT: pcmpeqd %xmm10, %xmm7
2736
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm7[1,0,3,2]
2737
+ ; SSE2-NEXT: pand %xmm6, %xmm7
2738
+ ; SSE2-NEXT: pand %xmm10, %xmm7
2739
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [4,8]
2740
+ ; SSE2-NEXT: movdqa %xmm9, %xmm10
2741
+ ; SSE2-NEXT: pand %xmm6, %xmm10
2742
+ ; SSE2-NEXT: pcmpeqd %xmm6, %xmm10
2743
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm10[1,0,3,2]
2744
+ ; SSE2-NEXT: pand %xmm5, %xmm10
2745
+ ; SSE2-NEXT: pand %xmm6, %xmm10
2746
+ ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [1,2]
2747
+ ; SSE2-NEXT: pand %xmm5, %xmm9
2748
+ ; SSE2-NEXT: pcmpeqd %xmm5, %xmm9
2749
+ ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,0,3,2]
2750
+ ; SSE2-NEXT: pand %xmm4, %xmm9
2751
+ ; SSE2-NEXT: pand %xmm5, %xmm9
2752
+ ; SSE2-NEXT: pxor %xmm9, %xmm0
2753
+ ; SSE2-NEXT: pxor %xmm10, %xmm1
2754
+ ; SSE2-NEXT: pxor %xmm7, %xmm2
2755
+ ; SSE2-NEXT: pxor %xmm8, %xmm3
2756
+ ; SSE2-NEXT: retq
2757
+ ;
2758
+ ; SSE42-LABEL: sub_v8i64_cast_cond_xor:
2759
+ ; SSE42: # %bb.0:
2760
+ ; SSE42-NEXT: movd %edi, %xmm8
2761
+ ; SSE42-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,1,0,1]
2762
+ ; SSE42-NEXT: pmovzxbq {{.*#+}} xmm10 = [64,128]
2763
+ ; SSE42-NEXT: movdqa %xmm9, %xmm8
2764
+ ; SSE42-NEXT: pand %xmm10, %xmm8
2765
+ ; SSE42-NEXT: pcmpeqq %xmm10, %xmm8
2766
+ ; SSE42-NEXT: pand %xmm7, %xmm8
2767
+ ; SSE42-NEXT: pmovsxbq {{.*#+}} xmm7 = [16,32]
2768
+ ; SSE42-NEXT: movdqa %xmm9, %xmm10
2769
+ ; SSE42-NEXT: pand %xmm7, %xmm10
2770
+ ; SSE42-NEXT: pcmpeqq %xmm7, %xmm10
2771
+ ; SSE42-NEXT: pand %xmm6, %xmm10
2772
+ ; SSE42-NEXT: pmovsxbq {{.*#+}} xmm6 = [4,8]
2773
+ ; SSE42-NEXT: movdqa %xmm9, %xmm7
2774
+ ; SSE42-NEXT: pand %xmm6, %xmm7
2775
+ ; SSE42-NEXT: pcmpeqq %xmm6, %xmm7
2776
+ ; SSE42-NEXT: pand %xmm5, %xmm7
2777
+ ; SSE42-NEXT: pmovsxbq {{.*#+}} xmm5 = [1,2]
2778
+ ; SSE42-NEXT: pand %xmm5, %xmm9
2779
+ ; SSE42-NEXT: pcmpeqq %xmm5, %xmm9
2780
+ ; SSE42-NEXT: pand %xmm4, %xmm9
2781
+ ; SSE42-NEXT: pxor %xmm9, %xmm0
2782
+ ; SSE42-NEXT: pxor %xmm7, %xmm1
2783
+ ; SSE42-NEXT: pxor %xmm10, %xmm2
2784
+ ; SSE42-NEXT: pxor %xmm8, %xmm3
2785
+ ; SSE42-NEXT: retq
2786
+ ;
2787
+ ; AVX2-LABEL: sub_v8i64_cast_cond_xor:
2788
+ ; AVX2: # %bb.0:
2789
+ ; AVX2-NEXT: vmovd %edi, %xmm4
2790
+ ; AVX2-NEXT: vpbroadcastb %xmm4, %ymm4
2791
+ ; AVX2-NEXT: vpmovzxbq {{.*#+}} ymm5 = [16,32,64,128]
2792
+ ; AVX2-NEXT: vpand %ymm5, %ymm4, %ymm6
2793
+ ; AVX2-NEXT: vpcmpeqq %ymm5, %ymm6, %ymm5
2794
+ ; AVX2-NEXT: vpand %ymm3, %ymm5, %ymm3
2795
+ ; AVX2-NEXT: vpmovsxbq {{.*#+}} ymm5 = [1,2,4,8]
2796
+ ; AVX2-NEXT: vpand %ymm5, %ymm4, %ymm4
2797
+ ; AVX2-NEXT: vpcmpeqq %ymm5, %ymm4, %ymm4
2798
+ ; AVX2-NEXT: vpand %ymm2, %ymm4, %ymm2
2799
+ ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
2800
+ ; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1
2801
+ ; AVX2-NEXT: retq
2802
+ ;
2803
+ ; AVX512-LABEL: sub_v8i64_cast_cond_xor:
2804
+ ; AVX512: # %bb.0:
2805
+ ; AVX512-NEXT: kmovw %edi, %k1
2806
+ ; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0 {%k1}
2807
+ ; AVX512-NEXT: retq
2808
+ %b = bitcast i8 %pb to <8 x i1 >
2809
+ %s = select <8 x i1 > %b , <8 x i64 > %y , <8 x i64 > zeroinitializer
2810
+ %r = xor <8 x i64 > %x , %s
2811
+ ret <8 x i64 > %r
2812
+ }
2813
+
2720
2814
define <4 x i32 > @mul_v4i32 (<4 x i1 > %b , <4 x i32 > noundef %x , <4 x i32 > noundef %y ) {
2721
2815
; SSE2-LABEL: mul_v4i32:
2722
2816
; SSE2: # %bb.0:
0 commit comments