OLD | NEW |
1 ; This tries to be a comprehensive test of f32 and f64 compare operations. | 1 ; This tries to be a comprehensive test of f32 and f64 compare operations. |
2 | 2 |
3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ | 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ |
4 ; RUN: -allow-externally-defined-symbols | FileCheck %s | 4 ; RUN: -allow-externally-defined-symbols | FileCheck %s |
5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ | 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ |
6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \ | 6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \ |
7 ; RUN: --check-prefix=CHECK-OM1 | 7 ; RUN: --check-prefix=CHECK-OM1 |
8 | 8 |
9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ | 9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
10 ; RUN: --target arm32 -i %s --args -O2 \ | 10 ; RUN: --target arm32 -i %s --args -O2 \ |
11 ; RUN: -allow-externally-defined-symbols \ | 11 ; RUN: -allow-externally-defined-symbols \ |
12 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ | 12 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ |
13 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 | 13 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 |
14 | 14 |
15 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ | 15 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
16 ; RUN: --target arm32 -i %s --args -Om1 \ | 16 ; RUN: --target arm32 -i %s --args -Om1 \ |
17 ; RUN: -allow-externally-defined-symbols \ | 17 ; RUN: -allow-externally-defined-symbols \ |
18 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ | 18 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ |
19 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-OM1 | 19 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-OM1 |
20 | 20 |
| 21 ; RUN: %if --need=allow_dump --need=target_MIPS32 --command %p2i \ |
| 22 ; RUN: --filetype=asm --target mips32 -i %s --args -Om1 \ |
| 23 ; RUN: -allow-externally-defined-symbols --skip-unimplemented \ |
| 24 ; RUN: | %if --need=allow_dump --need=target_MIPS32 --command FileCheck %s \ |
| 25 ; RUN: --check-prefix=MIPS32 |
| 26 |
21 define internal void @fcmpEq(float %a, float %b, double %c, double %d) { | 27 define internal void @fcmpEq(float %a, float %b, double %c, double %d) { |
22 entry: | 28 entry: |
23 %cmp = fcmp oeq float %a, %b | 29 %cmp = fcmp oeq float %a, %b |
24 br i1 %cmp, label %if.then, label %if.end | 30 br i1 %cmp, label %if.then, label %if.end |
25 | 31 |
26 if.then: ; preds = %entry | 32 if.then: ; preds = %entry |
27 call void @func() | 33 call void @func() |
28 br label %if.end | 34 br label %if.end |
29 | 35 |
30 if.end: ; preds = %if.then, %entry | 36 if.end: ; preds = %if.then, %entry |
(...skipping 29 matching lines...) Expand all Loading... |
60 ; ARM32: vmrs | 66 ; ARM32: vmrs |
61 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 67 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
62 ; ARM32-OM1: moveq [[R0]], #1 | 68 ; ARM32-OM1: moveq [[R0]], #1 |
63 ; ARM32-O2: bne | 69 ; ARM32-O2: bne |
64 ; ARM32: bl func | 70 ; ARM32: bl func |
65 ; ARM32: vcmp.f64 | 71 ; ARM32: vcmp.f64 |
66 ; ARM32: vmrs | 72 ; ARM32: vmrs |
67 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 73 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
68 ; ARM32-OM1: moveq [[R1]], #1 | 74 ; ARM32-OM1: moveq [[R1]], #1 |
69 ; ARM32-O2: bne | 75 ; ARM32-O2: bne |
| 76 ; MIPS32-LABEL: fcmpEq |
| 77 ; MIPS32-LABEL: .LfcmpEq$entry |
| 78 ; MIPS32: c.eq.s |
| 79 ; MIPS32: movf |
| 80 ; MIPS32-LABEL: .LfcmpEq$if.end |
| 81 ; MIPS32: c.eq.d |
| 82 ; MIPS32: movf |
70 | 83 |
71 declare void @func() | 84 declare void @func() |
72 | 85 |
73 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { | 86 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { |
74 entry: | 87 entry: |
75 %cmp = fcmp une float %a, %b | 88 %cmp = fcmp une float %a, %b |
76 br i1 %cmp, label %if.then, label %if.end | 89 br i1 %cmp, label %if.then, label %if.end |
77 | 90 |
78 if.then: ; preds = %entry | 91 if.then: ; preds = %entry |
79 call void @func() | 92 call void @func() |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 ; ARM32: vcmp.f32 | 129 ; ARM32: vcmp.f32 |
117 ; ARM32: vmrs | 130 ; ARM32: vmrs |
118 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 131 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
119 ; ARM32-OM1: movne [[R0]], #1 | 132 ; ARM32-OM1: movne [[R0]], #1 |
120 ; ARM32-O2: beq | 133 ; ARM32-O2: beq |
121 ; ARM32: vcmp.f64 | 134 ; ARM32: vcmp.f64 |
122 ; ARM32: vmrs | 135 ; ARM32: vmrs |
123 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 136 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
124 ; ARM32-OM1: movne [[R1]], #1 | 137 ; ARM32-OM1: movne [[R1]], #1 |
125 ; ARM32-O2: beq | 138 ; ARM32-O2: beq |
| 139 ; MIPS32-LABEL: fcmpNe |
| 140 ; MIPS32-LABEL: .LfcmpNe$entry |
| 141 ; MIPS32: c.eq.s |
| 142 ; MIPS32: movt |
| 143 ; MIPS32-LABEL: .LfcmpNe$if.end |
| 144 ; MIPS32: c.eq.d |
| 145 ; MIPS32: movt |
126 | 146 |
127 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { | 147 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { |
128 entry: | 148 entry: |
129 %cmp = fcmp ogt float %a, %b | 149 %cmp = fcmp ogt float %a, %b |
130 br i1 %cmp, label %if.then, label %if.end | 150 br i1 %cmp, label %if.then, label %if.end |
131 | 151 |
132 if.then: ; preds = %entry | 152 if.then: ; preds = %entry |
133 call void @func() | 153 call void @func() |
134 br label %if.end | 154 br label %if.end |
135 | 155 |
(...skipping 26 matching lines...) Expand all Loading... |
162 ; ARM32: vcmp.f32 | 182 ; ARM32: vcmp.f32 |
163 ; ARM32: vmrs | 183 ; ARM32: vmrs |
164 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 184 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
165 ; ARM32-OM1: movgt [[R0]], #1 | 185 ; ARM32-OM1: movgt [[R0]], #1 |
166 ; ARM32-O2: ble | 186 ; ARM32-O2: ble |
167 ; ARM32: vcmp.f64 | 187 ; ARM32: vcmp.f64 |
168 ; ARM32: vmrs | 188 ; ARM32: vmrs |
169 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 189 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
170 ; ARM32-OM1: movgt [[R1]], #1 | 190 ; ARM32-OM1: movgt [[R1]], #1 |
171 ; ARM32-O2: ble | 191 ; ARM32-O2: ble |
| 192 ; MIPS32-LABEL: fcmpGt |
| 193 ; MIPS32-LABEL: .LfcmpGt$entry |
| 194 ; MIPS32: c.ule.s |
| 195 ; MIPS32: movt |
| 196 ; MIPS32-LABEL: .LfcmpGt$if.end |
| 197 ; MIPS32: c.ule.d |
| 198 ; MIPS32: movt |
172 | 199 |
173 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { | 200 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { |
174 entry: | 201 entry: |
175 %cmp = fcmp ult float %a, %b | 202 %cmp = fcmp ult float %a, %b |
176 br i1 %cmp, label %if.end, label %if.then | 203 br i1 %cmp, label %if.end, label %if.then |
177 | 204 |
178 if.then: ; preds = %entry | 205 if.then: ; preds = %entry |
179 call void @func() | 206 call void @func() |
180 br label %if.end | 207 br label %if.end |
181 | 208 |
(...skipping 26 matching lines...) Expand all Loading... |
208 ; ARM32: vcmp.f32 | 235 ; ARM32: vcmp.f32 |
209 ; ARM32: vmrs | 236 ; ARM32: vmrs |
210 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 237 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
211 ; ARM32-OM1: movlt [[R0]], #1 | 238 ; ARM32-OM1: movlt [[R0]], #1 |
212 ; ARM32-O2: blt | 239 ; ARM32-O2: blt |
213 ; ARM32: vcmp.f64 | 240 ; ARM32: vcmp.f64 |
214 ; ARM32: vmrs | 241 ; ARM32: vmrs |
215 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 242 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
216 ; ARM32-OM1: movlt [[R1]], #1 | 243 ; ARM32-OM1: movlt [[R1]], #1 |
217 ; ARM32-O2: blt | 244 ; ARM32-O2: blt |
| 245 ; MIPS32-LABEL: fcmpGe |
| 246 ; MIPS32-LABEL: .LfcmpGe$entry |
| 247 ; MIPS32: c.ult.s |
| 248 ; MIPS32: movf |
| 249 ; MIPS32-LABEL: .LfcmpGe$if.end |
| 250 ; MIPS32: c.ult.d |
| 251 ; MIPS32: movf |
218 | 252 |
219 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { | 253 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { |
220 entry: | 254 entry: |
221 %cmp = fcmp olt float %a, %b | 255 %cmp = fcmp olt float %a, %b |
222 br i1 %cmp, label %if.then, label %if.end | 256 br i1 %cmp, label %if.then, label %if.end |
223 | 257 |
224 if.then: ; preds = %entry | 258 if.then: ; preds = %entry |
225 call void @func() | 259 call void @func() |
226 br label %if.end | 260 br label %if.end |
227 | 261 |
(...skipping 26 matching lines...) Expand all Loading... |
254 ; ARM32: vcmp.f32 | 288 ; ARM32: vcmp.f32 |
255 ; ARM32: vmrs | 289 ; ARM32: vmrs |
256 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 290 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
257 ; ARM32-OM1: movmi [[R0]], #1 | 291 ; ARM32-OM1: movmi [[R0]], #1 |
258 ; ARM32-O2: bpl | 292 ; ARM32-O2: bpl |
259 ; ARM32: vcmp.f64 | 293 ; ARM32: vcmp.f64 |
260 ; ARM32: vmrs | 294 ; ARM32: vmrs |
261 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 295 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
262 ; ARM32-OM1: movmi [[R1]], #1 | 296 ; ARM32-OM1: movmi [[R1]], #1 |
263 ; ARM32-O2: bpl | 297 ; ARM32-O2: bpl |
| 298 ; MIPS32-LABEL: fcmpLt |
| 299 ; MIPS32-LABEL: .LfcmpLt$entry |
| 300 ; MIPS32: c.olt.s |
| 301 ; MIPS32: movf |
| 302 ; MIPS32-LABEL: .LfcmpLt$if.end |
| 303 ; MIPS32: c.olt.d |
| 304 ; MIPS32: movf |
264 | 305 |
265 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { | 306 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { |
266 entry: | 307 entry: |
267 %cmp = fcmp ugt float %a, %b | 308 %cmp = fcmp ugt float %a, %b |
268 br i1 %cmp, label %if.end, label %if.then | 309 br i1 %cmp, label %if.end, label %if.then |
269 | 310 |
270 if.then: ; preds = %entry | 311 if.then: ; preds = %entry |
271 call void @func() | 312 call void @func() |
272 br label %if.end | 313 br label %if.end |
273 | 314 |
(...skipping 26 matching lines...) Expand all Loading... |
300 ; ARM32: vcmp.f32 | 341 ; ARM32: vcmp.f32 |
301 ; ARM32: vmrs | 342 ; ARM32: vmrs |
302 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 | 343 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0 |
303 ; ARM32-OM1: movhi [[R0]], #1 | 344 ; ARM32-OM1: movhi [[R0]], #1 |
304 ; ARM32-O2: bhi | 345 ; ARM32-O2: bhi |
305 ; ARM32: vcmp.f64 | 346 ; ARM32: vcmp.f64 |
306 ; ARM32: vmrs | 347 ; ARM32: vmrs |
307 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 | 348 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 |
308 ; ARM32-OM1: movhi [[R1]], #1 | 349 ; ARM32-OM1: movhi [[R1]], #1 |
309 ; ARM32-O2: bhi | 350 ; ARM32-O2: bhi |
| 351 ; MIPS32-LABEL: fcmpLe |
| 352 ; MIPS32-LABEL: .LfcmpLe$entry |
| 353 ; MIPS32: c.ole.s |
| 354 ; MIPS32: movt |
| 355 ; MIPS32-LABEL: .LfcmpLe$if.end |
| 356 ; MIPS32: c.ole.d |
| 357 ; MIPS32: movt |
310 | 358 |
311 define internal i32 @fcmpFalseFloat(float %a, float %b) { | 359 define internal i32 @fcmpFalseFloat(float %a, float %b) { |
312 entry: | 360 entry: |
313 %cmp = fcmp false float %a, %b | 361 %cmp = fcmp false float %a, %b |
314 %cmp.ret_ext = zext i1 %cmp to i32 | 362 %cmp.ret_ext = zext i1 %cmp to i32 |
315 ret i32 %cmp.ret_ext | 363 ret i32 %cmp.ret_ext |
316 } | 364 } |
317 ; CHECK-LABEL: fcmpFalseFloat | 365 ; CHECK-LABEL: fcmpFalseFloat |
318 ; CHECK: mov {{.*}},0x0 | 366 ; CHECK: mov {{.*}},0x0 |
319 ; ARM32-LABEL: fcmpFalseFloat | 367 ; ARM32-LABEL: fcmpFalseFloat |
320 ; ARM32: mov [[R:r[0-9]+]], #0 | 368 ; ARM32: mov [[R:r[0-9]+]], #0 |
| 369 ; MIPS32-LABEL: fcmpFalseFloat |
| 370 ; MIPS32: addiu |
| 371 ; MIPS32: sb |
321 | 372 |
322 define internal i32 @fcmpFalseDouble(double %a, double %b) { | 373 define internal i32 @fcmpFalseDouble(double %a, double %b) { |
323 entry: | 374 entry: |
324 %cmp = fcmp false double %a, %b | 375 %cmp = fcmp false double %a, %b |
325 %cmp.ret_ext = zext i1 %cmp to i32 | 376 %cmp.ret_ext = zext i1 %cmp to i32 |
326 ret i32 %cmp.ret_ext | 377 ret i32 %cmp.ret_ext |
327 } | 378 } |
328 ; CHECK-LABEL: fcmpFalseDouble | 379 ; CHECK-LABEL: fcmpFalseDouble |
329 ; CHECK: mov {{.*}},0x0 | 380 ; CHECK: mov {{.*}},0x0 |
330 ; ARM32-LABEL: fcmpFalseDouble | 381 ; ARM32-LABEL: fcmpFalseDouble |
331 ; ARM32: mov [[R:r[0-9]+]], #0 | 382 ; ARM32: mov [[R:r[0-9]+]], #0 |
| 383 ; MIPS32-LABEL: fcmpFalseDouble |
| 384 ; MIPS32: addiu |
| 385 ; MIPS32: sb |
332 | 386 |
333 define internal i32 @fcmpOeqFloat(float %a, float %b) { | 387 define internal i32 @fcmpOeqFloat(float %a, float %b) { |
334 entry: | 388 entry: |
335 %cmp = fcmp oeq float %a, %b | 389 %cmp = fcmp oeq float %a, %b |
336 %cmp.ret_ext = zext i1 %cmp to i32 | 390 %cmp.ret_ext = zext i1 %cmp to i32 |
337 ret i32 %cmp.ret_ext | 391 ret i32 %cmp.ret_ext |
338 } | 392 } |
339 ; CHECK-LABEL: fcmpOeqFloat | 393 ; CHECK-LABEL: fcmpOeqFloat |
340 ; CHECK: ucomiss | 394 ; CHECK: ucomiss |
341 ; CHECK: jne | 395 ; CHECK: jne |
342 ; CHECK: jp | 396 ; CHECK: jp |
343 ; ARM32-LABEL: fcmpOeqFloat | 397 ; ARM32-LABEL: fcmpOeqFloat |
344 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 398 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
345 ; ARM32: vcmp.f32 | 399 ; ARM32: vcmp.f32 |
346 ; ARM32: vmrs | 400 ; ARM32: vmrs |
347 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 401 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
348 ; ARM32: moveq [[R]], #1 | 402 ; ARM32: moveq [[R]], #1 |
| 403 ; MIPS32-LABEL: fcmpOeqFloat |
| 404 ; MIPS32: c.eq.s |
| 405 ; MIPS32: movf |
349 | 406 |
350 define internal i32 @fcmpOeqDouble(double %a, double %b) { | 407 define internal i32 @fcmpOeqDouble(double %a, double %b) { |
351 entry: | 408 entry: |
352 %cmp = fcmp oeq double %a, %b | 409 %cmp = fcmp oeq double %a, %b |
353 %cmp.ret_ext = zext i1 %cmp to i32 | 410 %cmp.ret_ext = zext i1 %cmp to i32 |
354 ret i32 %cmp.ret_ext | 411 ret i32 %cmp.ret_ext |
355 } | 412 } |
356 ; CHECK-LABEL: fcmpOeqDouble | 413 ; CHECK-LABEL: fcmpOeqDouble |
357 ; CHECK: ucomisd | 414 ; CHECK: ucomisd |
358 ; CHECK: jne | 415 ; CHECK: jne |
359 ; CHECK: jp | 416 ; CHECK: jp |
360 ; ARM32-LABEL: fcmpOeqDouble | 417 ; ARM32-LABEL: fcmpOeqDouble |
361 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 418 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
362 ; ARM32: vcmp.f64 | 419 ; ARM32: vcmp.f64 |
363 ; ARM32: vmrs | 420 ; ARM32: vmrs |
364 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 421 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
365 ; ARM32: moveq [[R]], #1 | 422 ; ARM32: moveq [[R]], #1 |
| 423 ; MIPS32-LABEL: fcmpOeqDouble |
| 424 ; MIPS32: c.eq.d |
| 425 ; MIPS32: movf |
366 | 426 |
367 define internal i32 @fcmpOgtFloat(float %a, float %b) { | 427 define internal i32 @fcmpOgtFloat(float %a, float %b) { |
368 entry: | 428 entry: |
369 %cmp = fcmp ogt float %a, %b | 429 %cmp = fcmp ogt float %a, %b |
370 %cmp.ret_ext = zext i1 %cmp to i32 | 430 %cmp.ret_ext = zext i1 %cmp to i32 |
371 ret i32 %cmp.ret_ext | 431 ret i32 %cmp.ret_ext |
372 } | 432 } |
373 ; CHECK-LABEL: fcmpOgtFloat | 433 ; CHECK-LABEL: fcmpOgtFloat |
374 ; CHECK: ucomiss | 434 ; CHECK: ucomiss |
375 ; CHECK: seta | 435 ; CHECK: seta |
376 ; ARM32-LABEL: fcmpOgtFloat | 436 ; ARM32-LABEL: fcmpOgtFloat |
377 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 437 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
378 ; ARM32: vcmp.f32 | 438 ; ARM32: vcmp.f32 |
379 ; ARM32: vmrs | 439 ; ARM32: vmrs |
380 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 440 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
381 ; ARM32: movgt [[R]], #1 | 441 ; ARM32: movgt [[R]], #1 |
| 442 ; MIPS32-LABEL: fcmpOgtFloat |
| 443 ; MIPS32: c.ule.s |
| 444 ; MIPS32: movt |
382 | 445 |
383 define internal i32 @fcmpOgtDouble(double %a, double %b) { | 446 define internal i32 @fcmpOgtDouble(double %a, double %b) { |
384 entry: | 447 entry: |
385 %cmp = fcmp ogt double %a, %b | 448 %cmp = fcmp ogt double %a, %b |
386 %cmp.ret_ext = zext i1 %cmp to i32 | 449 %cmp.ret_ext = zext i1 %cmp to i32 |
387 ret i32 %cmp.ret_ext | 450 ret i32 %cmp.ret_ext |
388 } | 451 } |
389 ; CHECK-LABEL: fcmpOgtDouble | 452 ; CHECK-LABEL: fcmpOgtDouble |
390 ; CHECK: ucomisd | 453 ; CHECK: ucomisd |
391 ; CHECK: seta | 454 ; CHECK: seta |
392 ; ARM32-LABEL: fcmpOgtDouble | 455 ; ARM32-LABEL: fcmpOgtDouble |
393 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 456 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
394 ; ARM32: vcmp.f64 | 457 ; ARM32: vcmp.f64 |
395 ; ARM32: vmrs | 458 ; ARM32: vmrs |
396 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 459 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
397 ; ARM32: movgt [[R]], #1 | 460 ; ARM32: movgt [[R]], #1 |
| 461 ; MIPS32-LABEL: fcmpOgtDouble |
| 462 ; MIPS32: c.ule.d |
| 463 ; MIPS32: movt |
398 | 464 |
399 define internal i32 @fcmpOgeFloat(float %a, float %b) { | 465 define internal i32 @fcmpOgeFloat(float %a, float %b) { |
400 entry: | 466 entry: |
401 %cmp = fcmp oge float %a, %b | 467 %cmp = fcmp oge float %a, %b |
402 %cmp.ret_ext = zext i1 %cmp to i32 | 468 %cmp.ret_ext = zext i1 %cmp to i32 |
403 ret i32 %cmp.ret_ext | 469 ret i32 %cmp.ret_ext |
404 } | 470 } |
405 ; CHECK-LABEL: fcmpOgeFloat | 471 ; CHECK-LABEL: fcmpOgeFloat |
406 ; CHECK: ucomiss | 472 ; CHECK: ucomiss |
407 ; CHECK: setae | 473 ; CHECK: setae |
408 ; ARM32-LABEL: fcmpOgeFloat | 474 ; ARM32-LABEL: fcmpOgeFloat |
409 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 475 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
410 ; ARM32: vcmp.f32 | 476 ; ARM32: vcmp.f32 |
411 ; ARM32: vmrs | 477 ; ARM32: vmrs |
412 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 478 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
413 ; ARM32: movge [[R]], #1 | 479 ; ARM32: movge [[R]], #1 |
| 480 ; MIPS32-LABEL: fcmpOgeFloat |
| 481 ; MIPS32: c.ult.s |
| 482 ; MIPS32: movt |
414 | 483 |
415 define internal i32 @fcmpOgeDouble(double %a, double %b) { | 484 define internal i32 @fcmpOgeDouble(double %a, double %b) { |
416 entry: | 485 entry: |
417 %cmp = fcmp oge double %a, %b | 486 %cmp = fcmp oge double %a, %b |
418 %cmp.ret_ext = zext i1 %cmp to i32 | 487 %cmp.ret_ext = zext i1 %cmp to i32 |
419 ret i32 %cmp.ret_ext | 488 ret i32 %cmp.ret_ext |
420 } | 489 } |
421 ; CHECK-LABEL: fcmpOgeDouble | 490 ; CHECK-LABEL: fcmpOgeDouble |
422 ; CHECK: ucomisd | 491 ; CHECK: ucomisd |
423 ; CHECK: setae | 492 ; CHECK: setae |
424 ; ARM32-LABEL: fcmpOgeDouble | 493 ; ARM32-LABEL: fcmpOgeDouble |
425 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 494 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
426 ; ARM32: vcmp.f64 | 495 ; ARM32: vcmp.f64 |
427 ; ARM32: vmrs | 496 ; ARM32: vmrs |
428 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 497 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
429 ; ARM32: movge [[R]], #1 | 498 ; ARM32: movge [[R]], #1 |
| 499 ; MIPS32-LABEL: fcmpOgeDouble |
| 500 ; MIPS32: c.ult.d |
| 501 ; MIPS32: movt |
430 | 502 |
431 define internal i32 @fcmpOltFloat(float %a, float %b) { | 503 define internal i32 @fcmpOltFloat(float %a, float %b) { |
432 entry: | 504 entry: |
433 %cmp = fcmp olt float %a, %b | 505 %cmp = fcmp olt float %a, %b |
434 %cmp.ret_ext = zext i1 %cmp to i32 | 506 %cmp.ret_ext = zext i1 %cmp to i32 |
435 ret i32 %cmp.ret_ext | 507 ret i32 %cmp.ret_ext |
436 } | 508 } |
437 ; CHECK-LABEL: fcmpOltFloat | 509 ; CHECK-LABEL: fcmpOltFloat |
438 ; CHECK: ucomiss | 510 ; CHECK: ucomiss |
439 ; CHECK: seta | 511 ; CHECK: seta |
440 ; ARM32-LABEL: fcmpOltFloat | 512 ; ARM32-LABEL: fcmpOltFloat |
441 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 513 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
442 ; ARM32: vcmp.f32 | 514 ; ARM32: vcmp.f32 |
443 ; ARM32: vmrs | 515 ; ARM32: vmrs |
444 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 516 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
445 ; ARM32: movmi [[R]], #1 | 517 ; ARM32: movmi [[R]], #1 |
| 518 ; MIPS32-LABEL: fcmpOltFloat |
| 519 ; MIPS32: c.olt.s |
| 520 ; MIPS32: movf |
446 | 521 |
447 define internal i32 @fcmpOltDouble(double %a, double %b) { | 522 define internal i32 @fcmpOltDouble(double %a, double %b) { |
448 entry: | 523 entry: |
449 %cmp = fcmp olt double %a, %b | 524 %cmp = fcmp olt double %a, %b |
450 %cmp.ret_ext = zext i1 %cmp to i32 | 525 %cmp.ret_ext = zext i1 %cmp to i32 |
451 ret i32 %cmp.ret_ext | 526 ret i32 %cmp.ret_ext |
452 } | 527 } |
453 ; CHECK-LABEL: fcmpOltDouble | 528 ; CHECK-LABEL: fcmpOltDouble |
454 ; CHECK: ucomisd | 529 ; CHECK: ucomisd |
455 ; CHECK: seta | 530 ; CHECK: seta |
456 ; ARM32-LABEL: fcmpOltDouble | 531 ; ARM32-LABEL: fcmpOltDouble |
457 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 532 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
458 ; ARM32: vcmp.f64 | 533 ; ARM32: vcmp.f64 |
459 ; ARM32: vmrs | 534 ; ARM32: vmrs |
460 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 535 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
461 ; ARM32: movmi [[R]], #1 | 536 ; ARM32: movmi [[R]], #1 |
| 537 ; MIPS32-LABEL: fcmpOltDouble |
| 538 ; MIPS32: c.olt.d |
| 539 ; MIPS32: movf |
462 | 540 |
463 define internal i32 @fcmpOleFloat(float %a, float %b) { | 541 define internal i32 @fcmpOleFloat(float %a, float %b) { |
464 entry: | 542 entry: |
465 %cmp = fcmp ole float %a, %b | 543 %cmp = fcmp ole float %a, %b |
466 %cmp.ret_ext = zext i1 %cmp to i32 | 544 %cmp.ret_ext = zext i1 %cmp to i32 |
467 ret i32 %cmp.ret_ext | 545 ret i32 %cmp.ret_ext |
468 } | 546 } |
469 ; CHECK-LABEL: fcmpOleFloat | 547 ; CHECK-LABEL: fcmpOleFloat |
470 ; CHECK: ucomiss | 548 ; CHECK: ucomiss |
471 ; CHECK: setae | 549 ; CHECK: setae |
472 ; ARM32-LABEL: fcmpOleFloat | 550 ; ARM32-LABEL: fcmpOleFloat |
473 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 551 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
474 ; ARM32: vcmp.f32 | 552 ; ARM32: vcmp.f32 |
475 ; ARM32: vmrs | 553 ; ARM32: vmrs |
476 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 554 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
477 ; ARM32: movls [[R]], #1 | 555 ; ARM32: movls [[R]], #1 |
| 556 ; MIPS32-LABEL: fcmpOleFloat |
| 557 ; MIPS32: c.ole.s |
| 558 ; MIPS32: movf |
478 | 559 |
479 define internal i32 @fcmpOleDouble(double %a, double %b) { | 560 define internal i32 @fcmpOleDouble(double %a, double %b) { |
480 entry: | 561 entry: |
481 %cmp = fcmp ole double %a, %b | 562 %cmp = fcmp ole double %a, %b |
482 %cmp.ret_ext = zext i1 %cmp to i32 | 563 %cmp.ret_ext = zext i1 %cmp to i32 |
483 ret i32 %cmp.ret_ext | 564 ret i32 %cmp.ret_ext |
484 } | 565 } |
485 ; CHECK-LABEL: fcmpOleDouble | 566 ; CHECK-LABEL: fcmpOleDouble |
486 ; CHECK: ucomisd | 567 ; CHECK: ucomisd |
487 ; CHECK: setae | 568 ; CHECK: setae |
488 ; ARM32-LABEL: fcmpOleDouble | 569 ; ARM32-LABEL: fcmpOleDouble |
489 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 570 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
490 ; ARM32: vcmp.f64 | 571 ; ARM32: vcmp.f64 |
491 ; ARM32: vmrs | 572 ; ARM32: vmrs |
492 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 573 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
493 ; ARM32: movls [[R]], #1 | 574 ; ARM32: movls [[R]], #1 |
| 575 ; MIPS32-LABEL: fcmpOleDouble |
| 576 ; MIPS32: c.ole.d |
| 577 ; MIPS32: movf |
494 | 578 |
495 define internal i32 @fcmpOneFloat(float %a, float %b) { | 579 define internal i32 @fcmpOneFloat(float %a, float %b) { |
496 entry: | 580 entry: |
497 %cmp = fcmp one float %a, %b | 581 %cmp = fcmp one float %a, %b |
498 %cmp.ret_ext = zext i1 %cmp to i32 | 582 %cmp.ret_ext = zext i1 %cmp to i32 |
499 ret i32 %cmp.ret_ext | 583 ret i32 %cmp.ret_ext |
500 } | 584 } |
501 ; CHECK-LABEL: fcmpOneFloat | 585 ; CHECK-LABEL: fcmpOneFloat |
502 ; CHECK: ucomiss | 586 ; CHECK: ucomiss |
503 ; CHECK: setne | 587 ; CHECK: setne |
504 ; ARM32-LABEL: fcmpOneFloat | 588 ; ARM32-LABEL: fcmpOneFloat |
505 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 589 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
506 ; ARM32: vcmp.f32 | 590 ; ARM32: vcmp.f32 |
507 ; ARM32: vmrs | 591 ; ARM32: vmrs |
508 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 592 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
509 ; ARM32: movmi [[R]], #1 | 593 ; ARM32: movmi [[R]], #1 |
510 ; ARM32: movgt [[R]], #1 | 594 ; ARM32: movgt [[R]], #1 |
| 595 ; MIPS32-LABEL: fcmpOneFloat |
| 596 ; MIPS32: c.ueq.s |
| 597 ; MIPS32: movt |
511 | 598 |
512 define internal i32 @fcmpOneDouble(double %a, double %b) { | 599 define internal i32 @fcmpOneDouble(double %a, double %b) { |
513 entry: | 600 entry: |
514 %cmp = fcmp one double %a, %b | 601 %cmp = fcmp one double %a, %b |
515 %cmp.ret_ext = zext i1 %cmp to i32 | 602 %cmp.ret_ext = zext i1 %cmp to i32 |
516 ret i32 %cmp.ret_ext | 603 ret i32 %cmp.ret_ext |
517 } | 604 } |
518 ; CHECK-LABEL: fcmpOneDouble | 605 ; CHECK-LABEL: fcmpOneDouble |
519 ; CHECK: ucomisd | 606 ; CHECK: ucomisd |
520 ; CHECK: setne | 607 ; CHECK: setne |
521 ; ARM32-LABEL: fcmpOneDouble | 608 ; ARM32-LABEL: fcmpOneDouble |
522 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 609 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
523 ; ARM32: vcmp.f64 | 610 ; ARM32: vcmp.f64 |
524 ; ARM32: vmrs | 611 ; ARM32: vmrs |
525 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 612 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
526 ; ARM32: movmi [[R]], #1 | 613 ; ARM32: movmi [[R]], #1 |
527 ; ARM32: movgt [[R]], #1 | 614 ; ARM32: movgt [[R]], #1 |
| 615 ; MIPS32-LABEL: fcmpOneDouble |
| 616 ; MIPS32: c.ueq.d |
| 617 ; MIPS32: movt |
528 | 618 |
529 define internal i32 @fcmpOrdFloat(float %a, float %b) { | 619 define internal i32 @fcmpOrdFloat(float %a, float %b) { |
530 entry: | 620 entry: |
531 %cmp = fcmp ord float %a, %b | 621 %cmp = fcmp ord float %a, %b |
532 %cmp.ret_ext = zext i1 %cmp to i32 | 622 %cmp.ret_ext = zext i1 %cmp to i32 |
533 ret i32 %cmp.ret_ext | 623 ret i32 %cmp.ret_ext |
534 } | 624 } |
535 ; CHECK-LABEL: fcmpOrdFloat | 625 ; CHECK-LABEL: fcmpOrdFloat |
536 ; CHECK: ucomiss | 626 ; CHECK: ucomiss |
537 ; CHECK: setnp | 627 ; CHECK: setnp |
538 ; ARM32-LABEL: fcmpOrdFloat | 628 ; ARM32-LABEL: fcmpOrdFloat |
539 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 629 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
540 ; ARM32: vcmp.f32 | 630 ; ARM32: vcmp.f32 |
541 ; ARM32: vmrs | 631 ; ARM32: vmrs |
542 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 632 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
543 ; ARM32: movvc [[R]], #1 | 633 ; ARM32: movvc [[R]], #1 |
| 634 ; MIPS32-LABEL: fcmpOrdFloat |
| 635 ; MIPS32: c.un.s |
| 636 ; MIPS32: movt |
544 | 637 |
545 define internal i32 @fcmpOrdDouble(double %a, double %b) { | 638 define internal i32 @fcmpOrdDouble(double %a, double %b) { |
546 entry: | 639 entry: |
547 %cmp = fcmp ord double %a, %b | 640 %cmp = fcmp ord double %a, %b |
548 %cmp.ret_ext = zext i1 %cmp to i32 | 641 %cmp.ret_ext = zext i1 %cmp to i32 |
549 ret i32 %cmp.ret_ext | 642 ret i32 %cmp.ret_ext |
550 } | 643 } |
551 ; CHECK-LABEL: fcmpOrdDouble | 644 ; CHECK-LABEL: fcmpOrdDouble |
552 ; CHECK: ucomisd | 645 ; CHECK: ucomisd |
553 ; CHECK: setnp | 646 ; CHECK: setnp |
554 ; ARM32-LABEL: fcmpOrdDouble | 647 ; ARM32-LABEL: fcmpOrdDouble |
555 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 648 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
556 ; ARM32: vcmp.f64 | 649 ; ARM32: vcmp.f64 |
557 ; ARM32: vmrs | 650 ; ARM32: vmrs |
558 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 651 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
559 ; ARM32: movvc [[R]], #1 | 652 ; ARM32: movvc [[R]], #1 |
| 653 ; MIPS32-LABEL: fcmpOrdDouble |
| 654 ; MIPS32: c.un.d |
| 655 ; MIPS32: movt |
560 | 656 |
561 define internal i32 @fcmpUeqFloat(float %a, float %b) { | 657 define internal i32 @fcmpUeqFloat(float %a, float %b) { |
562 entry: | 658 entry: |
563 %cmp = fcmp ueq float %a, %b | 659 %cmp = fcmp ueq float %a, %b |
564 %cmp.ret_ext = zext i1 %cmp to i32 | 660 %cmp.ret_ext = zext i1 %cmp to i32 |
565 ret i32 %cmp.ret_ext | 661 ret i32 %cmp.ret_ext |
566 } | 662 } |
567 ; CHECK-LABEL: fcmpUeqFloat | 663 ; CHECK-LABEL: fcmpUeqFloat |
568 ; CHECK: ucomiss | 664 ; CHECK: ucomiss |
569 ; CHECK: sete | 665 ; CHECK: sete |
570 ; ARM32-LABEL: fcmpUeqFloat | 666 ; ARM32-LABEL: fcmpUeqFloat |
571 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 667 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
572 ; ARM32: vcmp.f32 | 668 ; ARM32: vcmp.f32 |
573 ; ARM32: vmrs | 669 ; ARM32: vmrs |
574 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 670 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
575 ; ARM32: moveq [[R]], #1 | 671 ; ARM32: moveq [[R]], #1 |
576 ; ARM32: movvs [[R]], #1 | 672 ; ARM32: movvs [[R]], #1 |
| 673 ; MIPS32-LABEL: fcmpUeqFloat |
| 674 ; MIPS32: c.ueq.s |
| 675 ; MIPS32: movf |
577 | 676 |
578 define internal i32 @fcmpUeqDouble(double %a, double %b) { | 677 define internal i32 @fcmpUeqDouble(double %a, double %b) { |
579 entry: | 678 entry: |
580 %cmp = fcmp ueq double %a, %b | 679 %cmp = fcmp ueq double %a, %b |
581 %cmp.ret_ext = zext i1 %cmp to i32 | 680 %cmp.ret_ext = zext i1 %cmp to i32 |
582 ret i32 %cmp.ret_ext | 681 ret i32 %cmp.ret_ext |
583 } | 682 } |
584 ; CHECK-LABEL: fcmpUeqDouble | 683 ; CHECK-LABEL: fcmpUeqDouble |
585 ; CHECK: ucomisd | 684 ; CHECK: ucomisd |
586 ; CHECK: sete | 685 ; CHECK: sete |
587 ; ARM32-LABEL: fcmpUeqDouble | 686 ; ARM32-LABEL: fcmpUeqDouble |
588 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 687 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
589 ; ARM32: vcmp.f64 | 688 ; ARM32: vcmp.f64 |
590 ; ARM32: vmrs | 689 ; ARM32: vmrs |
591 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 690 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
592 ; ARM32: moveq [[R]], #1 | 691 ; ARM32: moveq [[R]], #1 |
593 ; ARM32: movvs [[R]], #1 | 692 ; ARM32: movvs [[R]], #1 |
| 693 ; MIPS32-LABEL: fcmpUeqDouble |
| 694 ; MIPS32: c.ueq.d |
| 695 ; MIPS32: movf |
594 | 696 |
595 define internal i32 @fcmpUgtFloat(float %a, float %b) { | 697 define internal i32 @fcmpUgtFloat(float %a, float %b) { |
596 entry: | 698 entry: |
597 %cmp = fcmp ugt float %a, %b | 699 %cmp = fcmp ugt float %a, %b |
598 %cmp.ret_ext = zext i1 %cmp to i32 | 700 %cmp.ret_ext = zext i1 %cmp to i32 |
599 ret i32 %cmp.ret_ext | 701 ret i32 %cmp.ret_ext |
600 } | 702 } |
601 ; CHECK-LABEL: fcmpUgtFloat | 703 ; CHECK-LABEL: fcmpUgtFloat |
602 ; CHECK: ucomiss | 704 ; CHECK: ucomiss |
603 ; CHECK: setb | 705 ; CHECK: setb |
604 ; ARM32-LABEL: fcmpUgtFloat | 706 ; ARM32-LABEL: fcmpUgtFloat |
605 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 707 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
606 ; ARM32: vcmp.f32 | 708 ; ARM32: vcmp.f32 |
607 ; ARM32: vmrs | 709 ; ARM32: vmrs |
608 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 710 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
609 ; ARM32: movhi [[R]], #1 | 711 ; ARM32: movhi [[R]], #1 |
| 712 ; MIPS32-LABEL: fcmpUgtFloat |
| 713 ; MIPS32: c.ole.s |
| 714 ; MIPS32: movt |
610 | 715 |
611 define internal i32 @fcmpUgtDouble(double %a, double %b) { | 716 define internal i32 @fcmpUgtDouble(double %a, double %b) { |
612 entry: | 717 entry: |
613 %cmp = fcmp ugt double %a, %b | 718 %cmp = fcmp ugt double %a, %b |
614 %cmp.ret_ext = zext i1 %cmp to i32 | 719 %cmp.ret_ext = zext i1 %cmp to i32 |
615 ret i32 %cmp.ret_ext | 720 ret i32 %cmp.ret_ext |
616 } | 721 } |
617 ; CHECK-LABEL: fcmpUgtDouble | 722 ; CHECK-LABEL: fcmpUgtDouble |
618 ; CHECK: ucomisd | 723 ; CHECK: ucomisd |
619 ; CHECK: setb | 724 ; CHECK: setb |
620 ; ARM32-LABEL: fcmpUgtDouble | 725 ; ARM32-LABEL: fcmpUgtDouble |
621 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 726 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
622 ; ARM32: vcmp.f64 | 727 ; ARM32: vcmp.f64 |
623 ; ARM32: vmrs | 728 ; ARM32: vmrs |
624 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 729 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
625 ; ARM32: movhi [[R]], #1 | 730 ; ARM32: movhi [[R]], #1 |
| 731 ; MIPS32-LABEL: fcmpUgtDouble |
| 732 ; MIPS32: c.ole.d |
| 733 ; MIPS32: movt |
626 | 734 |
627 define internal i32 @fcmpUgeFloat(float %a, float %b) { | 735 define internal i32 @fcmpUgeFloat(float %a, float %b) { |
628 entry: | 736 entry: |
629 %cmp = fcmp uge float %a, %b | 737 %cmp = fcmp uge float %a, %b |
630 %cmp.ret_ext = zext i1 %cmp to i32 | 738 %cmp.ret_ext = zext i1 %cmp to i32 |
631 ret i32 %cmp.ret_ext | 739 ret i32 %cmp.ret_ext |
632 } | 740 } |
633 ; CHECK-LABEL: fcmpUgeFloat | 741 ; CHECK-LABEL: fcmpUgeFloat |
634 ; CHECK: ucomiss | 742 ; CHECK: ucomiss |
635 ; CHECK: setbe | 743 ; CHECK: setbe |
636 ; ARM32-LABEL: fcmpUgeFloat | 744 ; ARM32-LABEL: fcmpUgeFloat |
637 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 745 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
638 ; ARM32: vcmp.f32 | 746 ; ARM32: vcmp.f32 |
639 ; ARM32: vmrs | 747 ; ARM32: vmrs |
640 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 748 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
641 ; ARM32: movpl [[R]], #1 | 749 ; ARM32: movpl [[R]], #1 |
| 750 ; MIPS32-LABEL: fcmpUgeFloat |
| 751 ; MIPS32: c.olt.s |
| 752 ; MIPS32: movt |
642 | 753 |
643 define internal i32 @fcmpUgeDouble(double %a, double %b) { | 754 define internal i32 @fcmpUgeDouble(double %a, double %b) { |
644 entry: | 755 entry: |
645 %cmp = fcmp uge double %a, %b | 756 %cmp = fcmp uge double %a, %b |
646 %cmp.ret_ext = zext i1 %cmp to i32 | 757 %cmp.ret_ext = zext i1 %cmp to i32 |
647 ret i32 %cmp.ret_ext | 758 ret i32 %cmp.ret_ext |
648 } | 759 } |
649 ; CHECK-LABEL: fcmpUgeDouble | 760 ; CHECK-LABEL: fcmpUgeDouble |
650 ; CHECK: ucomisd | 761 ; CHECK: ucomisd |
651 ; CHECK: setbe | 762 ; CHECK: setbe |
652 ; ARM32-LABEL: fcmpUgeDouble | 763 ; ARM32-LABEL: fcmpUgeDouble |
653 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 764 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
654 ; ARM32: vcmp.f64 | 765 ; ARM32: vcmp.f64 |
655 ; ARM32: vmrs | 766 ; ARM32: vmrs |
656 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 767 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
657 ; ARM32: movpl [[R]], #1 | 768 ; ARM32: movpl [[R]], #1 |
| 769 ; MIPS32-LABEL: fcmpUgeDouble |
| 770 ; MIPS32: c.olt.d |
| 771 ; MIPS32: movt |
658 | 772 |
659 define internal i32 @fcmpUltFloat(float %a, float %b) { | 773 define internal i32 @fcmpUltFloat(float %a, float %b) { |
660 entry: | 774 entry: |
661 %cmp = fcmp ult float %a, %b | 775 %cmp = fcmp ult float %a, %b |
662 %cmp.ret_ext = zext i1 %cmp to i32 | 776 %cmp.ret_ext = zext i1 %cmp to i32 |
663 ret i32 %cmp.ret_ext | 777 ret i32 %cmp.ret_ext |
664 } | 778 } |
665 ; CHECK-LABEL: fcmpUltFloat | 779 ; CHECK-LABEL: fcmpUltFloat |
666 ; CHECK: ucomiss | 780 ; CHECK: ucomiss |
667 ; CHECK: setb | 781 ; CHECK: setb |
668 ; ARM32-LABEL: fcmpUltFloat | 782 ; ARM32-LABEL: fcmpUltFloat |
669 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 783 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
670 ; ARM32: vcmp.f32 | 784 ; ARM32: vcmp.f32 |
671 ; ARM32: vmrs | 785 ; ARM32: vmrs |
672 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
673 ; ARM32: movlt [[R]], #1 | 787 ; ARM32: movlt [[R]], #1 |
| 788 ; MIPS32-LABEL: fcmpUltFloat |
| 789 ; MIPS32: c.ult.s |
| 790 ; MIPS32: movf |
674 | 791 |
675 define internal i32 @fcmpUltDouble(double %a, double %b) { | 792 define internal i32 @fcmpUltDouble(double %a, double %b) { |
676 entry: | 793 entry: |
677 %cmp = fcmp ult double %a, %b | 794 %cmp = fcmp ult double %a, %b |
678 %cmp.ret_ext = zext i1 %cmp to i32 | 795 %cmp.ret_ext = zext i1 %cmp to i32 |
679 ret i32 %cmp.ret_ext | 796 ret i32 %cmp.ret_ext |
680 } | 797 } |
681 ; CHECK-LABEL: fcmpUltDouble | 798 ; CHECK-LABEL: fcmpUltDouble |
682 ; CHECK: ucomisd | 799 ; CHECK: ucomisd |
683 ; CHECK: setb | 800 ; CHECK: setb |
684 ; ARM32-LABEL: fcmpUltDouble | 801 ; ARM32-LABEL: fcmpUltDouble |
685 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 802 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
686 ; ARM32: vcmp.f64 | 803 ; ARM32: vcmp.f64 |
687 ; ARM32: vmrs | 804 ; ARM32: vmrs |
688 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 805 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
689 ; ARM32: movlt [[R]], #1 | 806 ; ARM32: movlt [[R]], #1 |
| 807 ; MIPS32-LABEL: fcmpUltDouble |
| 808 ; MIPS32: c.ult.d |
| 809 ; MIPS32: movf |
690 | 810 |
691 define internal i32 @fcmpUleFloat(float %a, float %b) { | 811 define internal i32 @fcmpUleFloat(float %a, float %b) { |
692 entry: | 812 entry: |
693 %cmp = fcmp ule float %a, %b | 813 %cmp = fcmp ule float %a, %b |
694 %cmp.ret_ext = zext i1 %cmp to i32 | 814 %cmp.ret_ext = zext i1 %cmp to i32 |
695 ret i32 %cmp.ret_ext | 815 ret i32 %cmp.ret_ext |
696 } | 816 } |
697 ; CHECK-LABEL: fcmpUleFloat | 817 ; CHECK-LABEL: fcmpUleFloat |
698 ; CHECK: ucomiss | 818 ; CHECK: ucomiss |
699 ; CHECK: setbe | 819 ; CHECK: setbe |
700 ; ARM32-LABEL: fcmpUleFloat | 820 ; ARM32-LABEL: fcmpUleFloat |
701 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 821 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
702 ; ARM32: vcmp.f32 | 822 ; ARM32: vcmp.f32 |
703 ; ARM32: vmrs | 823 ; ARM32: vmrs |
704 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 824 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
705 ; ARM32: movle [[R]], #1 | 825 ; ARM32: movle [[R]], #1 |
| 826 ; MIPS32-LABEL: fcmpUleFloat |
| 827 ; MIPS32: c.ule.s |
| 828 ; MIPS32: movf |
706 | 829 |
707 define internal i32 @fcmpUleDouble(double %a, double %b) { | 830 define internal i32 @fcmpUleDouble(double %a, double %b) { |
708 entry: | 831 entry: |
709 %cmp = fcmp ule double %a, %b | 832 %cmp = fcmp ule double %a, %b |
710 %cmp.ret_ext = zext i1 %cmp to i32 | 833 %cmp.ret_ext = zext i1 %cmp to i32 |
711 ret i32 %cmp.ret_ext | 834 ret i32 %cmp.ret_ext |
712 } | 835 } |
713 ; CHECK-LABEL: fcmpUleDouble | 836 ; CHECK-LABEL: fcmpUleDouble |
714 ; CHECK: ucomisd | 837 ; CHECK: ucomisd |
715 ; CHECK: setbe | 838 ; CHECK: setbe |
716 ; ARM32-LABEL: fcmpUleDouble | 839 ; ARM32-LABEL: fcmpUleDouble |
717 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 840 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
718 ; ARM32: vcmp.f64 | 841 ; ARM32: vcmp.f64 |
719 ; ARM32: vmrs | 842 ; ARM32: vmrs |
720 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 843 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
721 ; ARM32: movle [[R]], #1 | 844 ; ARM32: movle [[R]], #1 |
| 845 ; MIPS32-LABEL: fcmpUleDouble |
| 846 ; MIPS32: c.ule.d |
| 847 ; MIPS32: movf |
722 | 848 |
723 define internal i32 @fcmpUneFloat(float %a, float %b) { | 849 define internal i32 @fcmpUneFloat(float %a, float %b) { |
724 entry: | 850 entry: |
725 %cmp = fcmp une float %a, %b | 851 %cmp = fcmp une float %a, %b |
726 %cmp.ret_ext = zext i1 %cmp to i32 | 852 %cmp.ret_ext = zext i1 %cmp to i32 |
727 ret i32 %cmp.ret_ext | 853 ret i32 %cmp.ret_ext |
728 } | 854 } |
729 ; CHECK-LABEL: fcmpUneFloat | 855 ; CHECK-LABEL: fcmpUneFloat |
730 ; CHECK: ucomiss | 856 ; CHECK: ucomiss |
731 ; CHECK: jne | 857 ; CHECK: jne |
732 ; CHECK: jp | 858 ; CHECK: jp |
733 ; ARM32-LABEL: fcmpUneFloat | 859 ; ARM32-LABEL: fcmpUneFloat |
734 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 860 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
735 ; ARM32: vcmp.f32 | 861 ; ARM32: vcmp.f32 |
736 ; ARM32: vmrs | 862 ; ARM32: vmrs |
737 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 863 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
738 ; ARM32: movne [[R]], #1 | 864 ; ARM32: movne [[R]], #1 |
| 865 ; MIPS32-LABEL: fcmpUneFloat |
| 866 ; MIPS32: c.eq.s |
| 867 ; MIPS32: movt |
739 | 868 |
740 define internal i32 @fcmpUneDouble(double %a, double %b) { | 869 define internal i32 @fcmpUneDouble(double %a, double %b) { |
741 entry: | 870 entry: |
742 %cmp = fcmp une double %a, %b | 871 %cmp = fcmp une double %a, %b |
743 %cmp.ret_ext = zext i1 %cmp to i32 | 872 %cmp.ret_ext = zext i1 %cmp to i32 |
744 ret i32 %cmp.ret_ext | 873 ret i32 %cmp.ret_ext |
745 } | 874 } |
746 ; CHECK-LABEL: fcmpUneDouble | 875 ; CHECK-LABEL: fcmpUneDouble |
747 ; CHECK: ucomisd | 876 ; CHECK: ucomisd |
748 ; CHECK: jne | 877 ; CHECK: jne |
749 ; CHECK: jp | 878 ; CHECK: jp |
750 ; ARM32-LABEL: fcmpUneDouble | 879 ; ARM32-LABEL: fcmpUneDouble |
751 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 880 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
752 ; ARM32: vcmp.f64 | 881 ; ARM32: vcmp.f64 |
753 ; ARM32: vmrs | 882 ; ARM32: vmrs |
754 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 883 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
755 ; ARM32: movne [[R]], #1 | 884 ; ARM32: movne [[R]], #1 |
| 885 ; MIPS32-LABEL: fcmpUneDouble |
| 886 ; MIPS32: c.eq.d |
| 887 ; MIPS32: movt |
756 | 888 |
757 define internal i32 @fcmpUnoFloat(float %a, float %b) { | 889 define internal i32 @fcmpUnoFloat(float %a, float %b) { |
758 entry: | 890 entry: |
759 %cmp = fcmp uno float %a, %b | 891 %cmp = fcmp uno float %a, %b |
760 %cmp.ret_ext = zext i1 %cmp to i32 | 892 %cmp.ret_ext = zext i1 %cmp to i32 |
761 ret i32 %cmp.ret_ext | 893 ret i32 %cmp.ret_ext |
762 } | 894 } |
763 ; CHECK-LABEL: fcmpUnoFloat | 895 ; CHECK-LABEL: fcmpUnoFloat |
764 ; CHECK: ucomiss | 896 ; CHECK: ucomiss |
765 ; CHECK: setp | 897 ; CHECK: setp |
766 ; ARM32-LABEL: fcmpUnoFloat | 898 ; ARM32-LABEL: fcmpUnoFloat |
767 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 899 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
768 ; ARM32: vcmp.f32 | 900 ; ARM32: vcmp.f32 |
769 ; ARM32: vmrs | 901 ; ARM32: vmrs |
770 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 902 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
771 ; ARM32: movvs [[R]], #1 | 903 ; ARM32: movvs [[R]], #1 |
| 904 ; MIPS32-LABEL: fcmpUnoFloat |
| 905 ; MIPS32: c.un.s |
| 906 ; MIPS32: movf |
772 | 907 |
773 define internal i32 @fcmpUnoDouble(double %a, double %b) { | 908 define internal i32 @fcmpUnoDouble(double %a, double %b) { |
774 entry: | 909 entry: |
775 %cmp = fcmp uno double %a, %b | 910 %cmp = fcmp uno double %a, %b |
776 %cmp.ret_ext = zext i1 %cmp to i32 | 911 %cmp.ret_ext = zext i1 %cmp to i32 |
777 ret i32 %cmp.ret_ext | 912 ret i32 %cmp.ret_ext |
778 } | 913 } |
779 ; CHECK-LABEL: fcmpUnoDouble | 914 ; CHECK-LABEL: fcmpUnoDouble |
780 ; CHECK: ucomisd | 915 ; CHECK: ucomisd |
781 ; CHECK: setp | 916 ; CHECK: setp |
782 ; ARM32-LABEL: fcmpUnoDouble | 917 ; ARM32-LABEL: fcmpUnoDouble |
783 ; ARM32-O2: mov [[R:r[0-9]+]], #0 | 918 ; ARM32-O2: mov [[R:r[0-9]+]], #0 |
784 ; ARM32: vcmp.f64 | 919 ; ARM32: vcmp.f64 |
785 ; ARM32: vmrs | 920 ; ARM32: vmrs |
786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 | 921 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 |
787 ; ARM32: movvs [[R]], #1 | 922 ; ARM32: movvs [[R]], #1 |
| 923 ; MIPS32-LABEL: fcmpUnoDouble |
| 924 ; MIPS32: c.un.d |
| 925 ; MIPS32: movf |
788 | 926 |
789 define internal i32 @fcmpTrueFloat(float %a, float %b) { | 927 define internal i32 @fcmpTrueFloat(float %a, float %b) { |
790 entry: | 928 entry: |
791 %cmp = fcmp true float %a, %b | 929 %cmp = fcmp true float %a, %b |
792 %cmp.ret_ext = zext i1 %cmp to i32 | 930 %cmp.ret_ext = zext i1 %cmp to i32 |
793 ret i32 %cmp.ret_ext | 931 ret i32 %cmp.ret_ext |
794 } | 932 } |
795 ; CHECK-LABEL: fcmpTrueFloat | 933 ; CHECK-LABEL: fcmpTrueFloat |
796 ; CHECK: mov {{.*}},0x1 | 934 ; CHECK: mov {{.*}},0x1 |
797 ; ARM32-LABEL: fcmpTrueFloat | 935 ; ARM32-LABEL: fcmpTrueFloat |
798 ; ARM32: mov {{r[0-9]+}}, #1 | 936 ; ARM32: mov {{r[0-9]+}}, #1 |
| 937 ; MIPS32-LABEL: fcmpTrueFloat |
| 938 ; MIPS32: addiu |
| 939 ; MIPS32: sb |
799 | 940 |
800 define internal i32 @fcmpTrueDouble(double %a, double %b) { | 941 define internal i32 @fcmpTrueDouble(double %a, double %b) { |
801 entry: | 942 entry: |
802 %cmp = fcmp true double %a, %b | 943 %cmp = fcmp true double %a, %b |
803 %cmp.ret_ext = zext i1 %cmp to i32 | 944 %cmp.ret_ext = zext i1 %cmp to i32 |
804 ret i32 %cmp.ret_ext | 945 ret i32 %cmp.ret_ext |
805 } | 946 } |
806 ; CHECK-LABEL: fcmpTrueDouble | 947 ; CHECK-LABEL: fcmpTrueDouble |
807 ; CHECK: mov {{.*}},0x1 | 948 ; CHECK: mov {{.*}},0x1 |
808 ; ARM32-LABEL: fcmpTrueDouble | 949 ; ARM32-LABEL: fcmpTrueDouble |
809 ; ARM32: mov {{r[0-9]+}}, #1 | 950 ; ARM32: mov {{r[0-9]+}}, #1 |
| 951 ; MIPS32-LABEL: fcmpTrueDouble |
| 952 ; MIPS32: addiu |
| 953 ; MIPS32: sb |
810 | 954 |
811 define internal float @selectFloatVarVar(float %a, float %b) { | 955 define internal float @selectFloatVarVar(float %a, float %b) { |
812 entry: | 956 entry: |
813 %cmp = fcmp olt float %a, %b | 957 %cmp = fcmp olt float %a, %b |
814 %cond = select i1 %cmp, float %a, float %b | 958 %cond = select i1 %cmp, float %a, float %b |
815 ret float %cond | 959 ret float %cond |
816 } | 960 } |
817 ; CHECK-LABEL: selectFloatVarVar | 961 ; CHECK-LABEL: selectFloatVarVar |
818 ; CHECK: movss | 962 ; CHECK: movss |
819 ; CHECK: ucomiss | 963 ; CHECK: ucomiss |
(...skipping 14 matching lines...) Expand all Loading... |
834 ; CHECK-LABEL: selectDoubleVarVar | 978 ; CHECK-LABEL: selectDoubleVarVar |
835 ; CHECK: movsd | 979 ; CHECK: movsd |
836 ; CHECK: ucomisd | 980 ; CHECK: ucomisd |
837 ; CHECK: ja | 981 ; CHECK: ja |
838 ; CHECK: movsd | 982 ; CHECK: movsd |
839 ; ARM32-LABEL: selectDoubleVarVar | 983 ; ARM32-LABEL: selectDoubleVarVar |
840 ; ARM32: vcmp.f64 | 984 ; ARM32: vcmp.f64 |
841 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} | 985 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} |
842 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} | 986 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} |
843 ; ARM32: bx | 987 ; ARM32: bx |
OLD | NEW |