Skip to content

Commit 3790080

Browse files
authored
[X86] vselect-pcmp.ll - add test showing failure to fold icmp_eq(and(x,pow2),0) to shl(x,c) for v4f32 select masks (#173359)
Noticed while trying to tweak backend folds to workaround #172888
1 parent c4088b2 commit 3790080

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

llvm/test/CodeGen/X86/vselect-pcmp.ll

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
547595
define <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

Comments
 (0)