Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit 966966c

Browse files
committed
[x86] add test for FP select with constant; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@347401 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 21ee033 commit 966966c

File tree

1 file changed

+69
-5
lines changed

1 file changed

+69
-5
lines changed

test/CodeGen/X86/vselect-zero.ll

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,83 @@ define <4 x i32> @test2(<4 x float> %a, <4 x float> %b, <4 x i32> %x) {
4141
ret <4 x i32> %r
4242
}
4343

44-
define float @fsel(float %a, float %b, float %x) {
45-
; SSE-LABEL: fsel:
44+
define float @fsel_zero_false_val(float %a, float %b, float %x) {
45+
; SSE-LABEL: fsel_zero_false_val:
46+
; SSE: # %bb.0:
47+
; SSE-NEXT: cmpeqss %xmm1, %xmm0
48+
; SSE-NEXT: andps %xmm2, %xmm0
49+
; SSE-NEXT: retq
50+
;
51+
; AVX-LABEL: fsel_zero_false_val:
52+
; AVX: # %bb.0:
53+
; AVX-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0
54+
; AVX-NEXT: vandps %xmm2, %xmm0, %xmm0
55+
; AVX-NEXT: retq
56+
%cond = fcmp oeq float %a, %b
57+
%r = select i1 %cond, float %x, float 0.0
58+
ret float %r
59+
}
60+
61+
define float @fsel_zero_true_val(float %a, float %b, float %x) {
62+
; SSE-LABEL: fsel_zero_true_val:
4663
; SSE: # %bb.0:
4764
; SSE-NEXT: cmpeqss %xmm1, %xmm0
4865
; SSE-NEXT: andnps %xmm2, %xmm0
4966
; SSE-NEXT: retq
5067
;
51-
; AVX-LABEL: fsel:
68+
; AVX-LABEL: fsel_zero_true_val:
5269
; AVX: # %bb.0:
5370
; AVX-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0
5471
; AVX-NEXT: vandnps %xmm2, %xmm0, %xmm0
5572
; AVX-NEXT: retq
5673
%cond = fcmp oeq float %a, %b
57-
%sel = select i1 %cond, float 0.0, float %x
58-
ret float %sel
74+
%r = select i1 %cond, float 0.0, float %x
75+
ret float %r
5976
}
77+
78+
define double @fsel_nonzero_false_val(double %x, double %y, double %z) {
79+
; SSE-LABEL: fsel_nonzero_false_val:
80+
; SSE: # %bb.0:
81+
; SSE-NEXT: cmpeqsd %xmm1, %xmm0
82+
; SSE-NEXT: andpd %xmm0, %xmm2
83+
; SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
84+
; SSE-NEXT: andnpd %xmm1, %xmm0
85+
; SSE-NEXT: orpd %xmm2, %xmm0
86+
; SSE-NEXT: retq
87+
;
88+
; AVX-LABEL: fsel_nonzero_false_val:
89+
; AVX: # %bb.0:
90+
; AVX-NEXT: vcmpeqsd %xmm1, %xmm0, %xmm0
91+
; AVX-NEXT: vandpd %xmm2, %xmm0, %xmm1
92+
; AVX-NEXT: vmovsd {{.*#+}} xmm2 = mem[0],zero
93+
; AVX-NEXT: vandnpd %xmm2, %xmm0, %xmm0
94+
; AVX-NEXT: vorpd %xmm1, %xmm0, %xmm0
95+
; AVX-NEXT: retq
96+
%cond = fcmp oeq double %x, %y
97+
%r = select i1 %cond, double %z, double 42.0
98+
ret double %r
99+
}
100+
101+
define double @fsel_nonzero_true_val(double %x, double %y, double %z) {
102+
; SSE-LABEL: fsel_nonzero_true_val:
103+
; SSE: # %bb.0:
104+
; SSE-NEXT: cmpeqsd %xmm1, %xmm0
105+
; SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
106+
; SSE-NEXT: andpd %xmm0, %xmm1
107+
; SSE-NEXT: andnpd %xmm2, %xmm0
108+
; SSE-NEXT: orpd %xmm1, %xmm0
109+
; SSE-NEXT: retq
110+
;
111+
; AVX-LABEL: fsel_nonzero_true_val:
112+
; AVX: # %bb.0:
113+
; AVX-NEXT: vcmpeqsd %xmm1, %xmm0, %xmm0
114+
; AVX-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero
115+
; AVX-NEXT: vandpd %xmm1, %xmm0, %xmm1
116+
; AVX-NEXT: vandnpd %xmm2, %xmm0, %xmm0
117+
; AVX-NEXT: vorpd %xmm1, %xmm0, %xmm0
118+
; AVX-NEXT: retq
119+
%cond = fcmp oeq double %x, %y
120+
%r = select i1 %cond, double 42.0, double %z
121+
ret double %r
122+
}
123+

0 commit comments

Comments
 (0)