xref: /llvm-project/llvm/test/CodeGen/X86/fcmp-constant.ll (revision 8b43c1be23119c1024bed0a8ce392bc73727e2e2)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
3
4;
5; fcmp oeq
6;
7
8define <2 x i64> @fcmp_oeq_v2f64() {
9; CHECK-LABEL: fcmp_oeq_v2f64:
10; CHECK:       # %bb.0:
11; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
12; CHECK-NEXT:    retq
13  %1 = fcmp oeq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>
14  %2 = sext <2 x i1> %1 to <2 x i64>
15  ret <2 x i64> %2
16}
17
18define <2 x i64> @fcmp_oeq_v2f64_undef() {
19; CHECK-LABEL: fcmp_oeq_v2f64_undef:
20; CHECK:       # %bb.0:
21; CHECK-NEXT:    xorps %xmm0, %xmm0
22; CHECK-NEXT:    retq
23  %1 = fcmp oeq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef
24  %2 = sext <2 x i1> %1 to <2 x i64>
25  ret <2 x i64> %2
26}
27
28define <2 x i64> @fcmp_oeq_v2f64_undef_elt() {
29; CHECK-LABEL: fcmp_oeq_v2f64_undef_elt:
30; CHECK:       # %bb.0:
31; CHECK-NEXT:    xorps %xmm0, %xmm0
32; CHECK-NEXT:    retq
33  %1 = fcmp oeq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>
34  %2 = sext <2 x i1> %1 to <2 x i64>
35  ret <2 x i64> %2
36}
37
38define <4 x i32> @fcmp_oeq_v4f32() {
39; CHECK-LABEL: fcmp_oeq_v4f32:
40; CHECK:       # %bb.0:
41; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
42; CHECK-NEXT:    retq
43  %1 = fcmp oeq <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>
44  %2 = sext <4 x i1> %1 to <4 x i32>
45  ret <4 x i32> %2
46}
47
48define <4 x i32> @fcmp_oeq_v4f32_undef() {
49; CHECK-LABEL: fcmp_oeq_v4f32_undef:
50; CHECK:       # %bb.0:
51; CHECK-NEXT:    xorps %xmm0, %xmm0
52; CHECK-NEXT:    retq
53  %1 = fcmp oeq <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef
54  %2 = sext <4 x i1> %1 to <4 x i32>
55  ret <4 x i32> %2
56}
57
58define <4 x i32> @fcmp_oeq_v4f32_undef_elt() {
59; CHECK-LABEL: fcmp_oeq_v4f32_undef_elt:
60; CHECK:       # %bb.0:
61; CHECK-NEXT:    movaps {{.*#+}} xmm0 = [0,4294967295,4294967295,0]
62; CHECK-NEXT:    retq
63  %1 = fcmp oeq <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>
64  %2 = sext <4 x i1> %1 to <4 x i32>
65  ret <4 x i32> %2
66}
67
68;
69; fcmp ueq
70;
71
72define <2 x i64> @fcmp_ueq_v2f64() {
73; CHECK-LABEL: fcmp_ueq_v2f64:
74; CHECK:       # %bb.0:
75; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
76; CHECK-NEXT:    retq
77  %1 = fcmp ueq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>
78  %2 = sext <2 x i1> %1 to <2 x i64>
79  ret <2 x i64> %2
80}
81
82define <2 x i64> @fcmp_ueq_v2f64_undef() {
83; CHECK-LABEL: fcmp_ueq_v2f64_undef:
84; CHECK:       # %bb.0:
85; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
86; CHECK-NEXT:    retq
87  %1 = fcmp ueq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef
88  %2 = sext <2 x i1> %1 to <2 x i64>
89  ret <2 x i64> %2
90}
91
92define <2 x i64> @fcmp_ueq_v2f64_undef_elt() {
93; CHECK-LABEL: fcmp_ueq_v2f64_undef_elt:
94; CHECK:       # %bb.0:
95; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [18446744073709551615,0]
96; CHECK-NEXT:    retq
97  %1 = fcmp ueq <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>
98  %2 = sext <2 x i1> %1 to <2 x i64>
99  ret <2 x i64> %2
100}
101
102define <4 x i32> @fcmp_ueq_v4f32() {
103; CHECK-LABEL: fcmp_ueq_v4f32:
104; CHECK:       # %bb.0:
105; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
106; CHECK-NEXT:    retq
107  %1 = fcmp ueq <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>
108  %2 = sext <4 x i1> %1 to <4 x i32>
109  ret <4 x i32> %2
110}
111
112define <4 x i32> @fcmp_ueq_v4f32_undef() {
113; CHECK-LABEL: fcmp_ueq_v4f32_undef:
114; CHECK:       # %bb.0:
115; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
116; CHECK-NEXT:    retq
117  %1 = fcmp ueq <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef
118  %2 = sext <4 x i1> %1 to <4 x i32>
119  ret <4 x i32> %2
120}
121
122define <4 x i32> @fcmp_ueq_v4f32_undef_elt() {
123; CHECK-LABEL: fcmp_ueq_v4f32_undef_elt:
124; CHECK:       # %bb.0:
125; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
126; CHECK-NEXT:    retq
127  %1 = fcmp ueq <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>
128  %2 = sext <4 x i1> %1 to <4 x i32>
129  ret <4 x i32> %2
130}
131
132;
133; fcmp false
134;
135
136define <2 x i64> @fcmp_false_v2f64() {
137; CHECK-LABEL: fcmp_false_v2f64:
138; CHECK:       # %bb.0:
139; CHECK-NEXT:    xorps %xmm0, %xmm0
140; CHECK-NEXT:    retq
141  %1 = fcmp false <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>
142  %2 = sext <2 x i1> %1 to <2 x i64>
143  ret <2 x i64> %2
144}
145
146define <2 x i64> @fcmp_false_v2f64_undef() {
147; CHECK-LABEL: fcmp_false_v2f64_undef:
148; CHECK:       # %bb.0:
149; CHECK-NEXT:    xorps %xmm0, %xmm0
150; CHECK-NEXT:    retq
151  %1 = fcmp false <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef
152  %2 = sext <2 x i1> %1 to <2 x i64>
153  ret <2 x i64> %2
154}
155
156define <2 x i64> @fcmp_false_v2f64_undef_elt() {
157; CHECK-LABEL: fcmp_false_v2f64_undef_elt:
158; CHECK:       # %bb.0:
159; CHECK-NEXT:    xorps %xmm0, %xmm0
160; CHECK-NEXT:    retq
161  %1 = fcmp false <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>
162  %2 = sext <2 x i1> %1 to <2 x i64>
163  ret <2 x i64> %2
164}
165
166define <4 x i32> @fcmp_false_v4f32() {
167; CHECK-LABEL: fcmp_false_v4f32:
168; CHECK:       # %bb.0:
169; CHECK-NEXT:    xorps %xmm0, %xmm0
170; CHECK-NEXT:    retq
171  %1 = fcmp false <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>
172  %2 = sext <4 x i1> %1 to <4 x i32>
173  ret <4 x i32> %2
174}
175
176define <4 x i32> @fcmp_false_v4f32_undef() {
177; CHECK-LABEL: fcmp_false_v4f32_undef:
178; CHECK:       # %bb.0:
179; CHECK-NEXT:    xorps %xmm0, %xmm0
180; CHECK-NEXT:    retq
181  %1 = fcmp false <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef
182  %2 = sext <4 x i1> %1 to <4 x i32>
183  ret <4 x i32> %2
184}
185
186define <4 x i32> @fcmp_false_v4f32_undef_elt() {
187; CHECK-LABEL: fcmp_false_v4f32_undef_elt:
188; CHECK:       # %bb.0:
189; CHECK-NEXT:    xorps %xmm0, %xmm0
190; CHECK-NEXT:    retq
191  %1 = fcmp false <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>
192  %2 = sext <4 x i1> %1 to <4 x i32>
193  ret <4 x i32> %2
194}
195
196;
197; fcmp true
198;
199
200define <2 x i64> @fcmp_true_v2f64() {
201; CHECK-LABEL: fcmp_true_v2f64:
202; CHECK:       # %bb.0:
203; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
204; CHECK-NEXT:    retq
205  %1 = fcmp true <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>
206  %2 = sext <2 x i1> %1 to <2 x i64>
207  ret <2 x i64> %2
208}
209
210define <2 x i64> @fcmp_true_v2f64_undef() {
211; CHECK-LABEL: fcmp_true_v2f64_undef:
212; CHECK:       # %bb.0:
213; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
214; CHECK-NEXT:    retq
215  %1 = fcmp true <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, undef
216  %2 = sext <2 x i1> %1 to <2 x i64>
217  ret <2 x i64> %2
218}
219
220define <2 x i64> @fcmp_true_v2f64_undef_elt() {
221; CHECK-LABEL: fcmp_true_v2f64_undef_elt:
222; CHECK:       # %bb.0:
223; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
224; CHECK-NEXT:    retq
225  %1 = fcmp true <2 x double> <double 0x3FF0000000000000, double 0xFFEFFFFFFFFFFFFF>, <double undef, double 0x3FF0000000000000>
226  %2 = sext <2 x i1> %1 to <2 x i64>
227  ret <2 x i64> %2
228}
229
230define <4 x i32> @fcmp_true_v4f32() {
231; CHECK-LABEL: fcmp_true_v4f32:
232; CHECK:       # %bb.0:
233; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
234; CHECK-NEXT:    retq
235  %1 = fcmp true <4 x float> <float -0.0, float 1.0, float -1.0, float +2.0>, <float +0.0, float 1.0, float -1.0, float +2.0>
236  %2 = sext <4 x i1> %1 to <4 x i32>
237  ret <4 x i32> %2
238}
239
240define <4 x i32> @fcmp_true_v4f32_undef() {
241; CHECK-LABEL: fcmp_true_v4f32_undef:
242; CHECK:       # %bb.0:
243; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
244; CHECK-NEXT:    retq
245  %1 = fcmp true <4 x float> <float 1.0, float -1.0, float +2.0, float -0.0>, undef
246  %2 = sext <4 x i1> %1 to <4 x i32>
247  ret <4 x i32> %2
248}
249
250define <4 x i32> @fcmp_true_v4f32_undef_elt() {
251; CHECK-LABEL: fcmp_true_v4f32_undef_elt:
252; CHECK:       # %bb.0:
253; CHECK-NEXT:    pcmpeqd %xmm0, %xmm0
254; CHECK-NEXT:    retq
255  %1 = fcmp true <4 x float> <float -0.0, float 1.0, float -1.0, float undef>, <float undef, float 1.0, float -1.0, float +2.0>
256  %2 = sext <4 x i1> %1 to <4 x i32>
257  ret <4 x i32> %2
258}
259