@@ -544,6 +544,54 @@ define <4 x i64> @blend_splat1_mask_cond_v4i64(<4 x i64> %x, <4 x i64> %y, <4 x
544544 ret <4 x i64 > %r
545545}
546546
547+ ; FIXME: use PSLLD(Z,31) like blend_splat1_mask_cond_v4i32
548+ define <4 x float > @blend_splat1_mask_cond_v4f32 (<4 x i32 > %x , <4 x float > %y , <4 x float > %z ) {
549+ ; AVX1-LABEL: blend_splat1_mask_cond_v4f32:
550+ ; AVX1: # %bb.0:
551+ ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [1,1,1,1]
552+ ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
553+ ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm0
554+ ; AVX1-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm0
555+ ; AVX1-NEXT: retq
556+ ;
557+ ; AVX2-LABEL: blend_splat1_mask_cond_v4f32:
558+ ; AVX2: # %bb.0:
559+ ; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm3 = [1,1,1,1]
560+ ; AVX2-NEXT: vpand %xmm3, %xmm0, %xmm0
561+ ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm0
562+ ; AVX2-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm0
563+ ; AVX2-NEXT: retq
564+ ;
565+ ; AVX512F-LABEL: blend_splat1_mask_cond_v4f32:
566+ ; AVX512F: # %bb.0:
567+ ; AVX512F-NEXT: # kill: def $xmm2 killed $xmm2 def $zmm2
568+ ; AVX512F-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
569+ ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
570+ ; AVX512F-NEXT: vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %k1
571+ ; AVX512F-NEXT: vblendmps %zmm1, %zmm2, %zmm0 {%k1}
572+ ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
573+ ; AVX512F-NEXT: vzeroupper
574+ ; AVX512F-NEXT: retq
575+ ;
576+ ; AVX512VL-LABEL: blend_splat1_mask_cond_v4f32:
577+ ; AVX512VL: # %bb.0:
578+ ; AVX512VL-NEXT: vptestnmd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
579+ ; AVX512VL-NEXT: vblendmps %xmm1, %xmm2, %xmm0 {%k1}
580+ ; AVX512VL-NEXT: retq
581+ ;
582+ ; XOP-LABEL: blend_splat1_mask_cond_v4f32:
583+ ; XOP: # %bb.0:
584+ ; XOP-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
585+ ; XOP-NEXT: vpxor %xmm3, %xmm3, %xmm3
586+ ; XOP-NEXT: vpcomeqd %xmm3, %xmm0, %xmm0
587+ ; XOP-NEXT: vblendvps %xmm0, %xmm1, %xmm2, %xmm0
588+ ; XOP-NEXT: retq
589+ %a = and <4 x i32 > %x , <i32 1 , i32 1 , i32 1 , i32 1 >
590+ %c = icmp eq <4 x i32 > %a , zeroinitializer
591+ %r = select <4 x i1 > %c , <4 x float > %y , <4 x float > %z
592+ ret <4 x float > %r
593+ }
594+
547595define <4 x i32 > @blend_splat1_mask_cond_v4i32 (<4 x i32 > %x , <4 x i32 > %y , <4 x i32 > %z ) {
548596; AVX12-LABEL: blend_splat1_mask_cond_v4i32:
549597; AVX12: # %bb.0:
0 commit comments