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