|
2 | 2 | ; RUN: llc < %s -O0 -mtriple=x86_64-unknown-unknown -mcpu=corei7 -verify-machineinstrs | FileCheck %s -check-prefixes=X64,X64-CMOV
|
3 | 3 | ; RUN: llc < %s -O0 -mtriple=i686-unknown-unknown -mcpu=corei7 -verify-machineinstrs | FileCheck %s -check-prefixes=X86,X86-CMOV
|
4 | 4 | ; RUN: llc < %s -O0 -mtriple=i686-unknown-unknown -mcpu=corei7 -mattr=-cmov,-sse -verify-machineinstrs | FileCheck %s --check-prefixes=X86,X86-NOCMOV
|
| 5 | +; RUN: llc < %s -O0 -mtriple=i686-unknown-unknown -mcpu=corei7 -mattr=-cmov,-sse,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,X86-NOX87 |
5 | 6 |
|
6 | 7 | @sc32 = external global i32
|
7 | 8 | @fsc32 = external global float
|
@@ -361,6 +362,48 @@ define void @atomic_fetch_max32(i32 %x) nounwind {
|
361 | 362 | ; X86-NOCMOV-NEXT: popl %esi
|
362 | 363 | ; X86-NOCMOV-NEXT: popl %ebx
|
363 | 364 | ; X86-NOCMOV-NEXT: retl
|
| 365 | +; |
| 366 | +; X86-NOX87-LABEL: atomic_fetch_max32: |
| 367 | +; X86-NOX87: # %bb.0: |
| 368 | +; X86-NOX87-NEXT: pushl %ebx |
| 369 | +; X86-NOX87-NEXT: pushl %esi |
| 370 | +; X86-NOX87-NEXT: subl $20, %esp |
| 371 | +; X86-NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax |
| 372 | +; X86-NOX87-NEXT: movl sc32, %ecx |
| 373 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 374 | +; X86-NOX87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 375 | +; X86-NOX87-NEXT: .LBB6_1: # %atomicrmw.start |
| 376 | +; X86-NOX87-NEXT: # =>This Inner Loop Header: Depth=1 |
| 377 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 378 | +; X86-NOX87-NEXT: movl %eax, %ecx |
| 379 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload |
| 380 | +; X86-NOX87-NEXT: subl %edx, %ecx |
| 381 | +; X86-NOX87-NEXT: movl %eax, %esi |
| 382 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 383 | +; X86-NOX87-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 384 | +; X86-NOX87-NEXT: jge .LBB6_4 |
| 385 | +; X86-NOX87-NEXT: # %bb.3: # %atomicrmw.start |
| 386 | +; X86-NOX87-NEXT: # in Loop: Header=BB6_1 Depth=1 |
| 387 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 388 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 389 | +; X86-NOX87-NEXT: .LBB6_4: # %atomicrmw.start |
| 390 | +; X86-NOX87-NEXT: # in Loop: Header=BB6_1 Depth=1 |
| 391 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 392 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload |
| 393 | +; X86-NOX87-NEXT: movl %eax, (%esp) # 4-byte Spill |
| 394 | +; X86-NOX87-NEXT: movl %ecx, %eax |
| 395 | +; X86-NOX87-NEXT: movl (%esp), %edx # 4-byte Reload |
| 396 | +; X86-NOX87-NEXT: lock cmpxchgl %edx, sc32 |
| 397 | +; X86-NOX87-NEXT: sete %bl |
| 398 | +; X86-NOX87-NEXT: testb $1, %bl |
| 399 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 400 | +; X86-NOX87-NEXT: jne .LBB6_2 |
| 401 | +; X86-NOX87-NEXT: jmp .LBB6_1 |
| 402 | +; X86-NOX87-NEXT: .LBB6_2: # %atomicrmw.end |
| 403 | +; X86-NOX87-NEXT: addl $20, %esp |
| 404 | +; X86-NOX87-NEXT: popl %esi |
| 405 | +; X86-NOX87-NEXT: popl %ebx |
| 406 | +; X86-NOX87-NEXT: retl |
364 | 407 | %t1 = atomicrmw max i32* @sc32, i32 %x acquire
|
365 | 408 | ret void
|
366 | 409 | }
|
@@ -456,6 +499,48 @@ define void @atomic_fetch_min32(i32 %x) nounwind {
|
456 | 499 | ; X86-NOCMOV-NEXT: popl %esi
|
457 | 500 | ; X86-NOCMOV-NEXT: popl %ebx
|
458 | 501 | ; X86-NOCMOV-NEXT: retl
|
| 502 | +; |
| 503 | +; X86-NOX87-LABEL: atomic_fetch_min32: |
| 504 | +; X86-NOX87: # %bb.0: |
| 505 | +; X86-NOX87-NEXT: pushl %ebx |
| 506 | +; X86-NOX87-NEXT: pushl %esi |
| 507 | +; X86-NOX87-NEXT: subl $20, %esp |
| 508 | +; X86-NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax |
| 509 | +; X86-NOX87-NEXT: movl sc32, %ecx |
| 510 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 511 | +; X86-NOX87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 512 | +; X86-NOX87-NEXT: .LBB7_1: # %atomicrmw.start |
| 513 | +; X86-NOX87-NEXT: # =>This Inner Loop Header: Depth=1 |
| 514 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 515 | +; X86-NOX87-NEXT: movl %eax, %ecx |
| 516 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload |
| 517 | +; X86-NOX87-NEXT: subl %edx, %ecx |
| 518 | +; X86-NOX87-NEXT: movl %eax, %esi |
| 519 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 520 | +; X86-NOX87-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 521 | +; X86-NOX87-NEXT: jle .LBB7_4 |
| 522 | +; X86-NOX87-NEXT: # %bb.3: # %atomicrmw.start |
| 523 | +; X86-NOX87-NEXT: # in Loop: Header=BB7_1 Depth=1 |
| 524 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 525 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 526 | +; X86-NOX87-NEXT: .LBB7_4: # %atomicrmw.start |
| 527 | +; X86-NOX87-NEXT: # in Loop: Header=BB7_1 Depth=1 |
| 528 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 529 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload |
| 530 | +; X86-NOX87-NEXT: movl %eax, (%esp) # 4-byte Spill |
| 531 | +; X86-NOX87-NEXT: movl %ecx, %eax |
| 532 | +; X86-NOX87-NEXT: movl (%esp), %edx # 4-byte Reload |
| 533 | +; X86-NOX87-NEXT: lock cmpxchgl %edx, sc32 |
| 534 | +; X86-NOX87-NEXT: sete %bl |
| 535 | +; X86-NOX87-NEXT: testb $1, %bl |
| 536 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 537 | +; X86-NOX87-NEXT: jne .LBB7_2 |
| 538 | +; X86-NOX87-NEXT: jmp .LBB7_1 |
| 539 | +; X86-NOX87-NEXT: .LBB7_2: # %atomicrmw.end |
| 540 | +; X86-NOX87-NEXT: addl $20, %esp |
| 541 | +; X86-NOX87-NEXT: popl %esi |
| 542 | +; X86-NOX87-NEXT: popl %ebx |
| 543 | +; X86-NOX87-NEXT: retl |
459 | 544 | %t1 = atomicrmw min i32* @sc32, i32 %x acquire
|
460 | 545 | ret void
|
461 | 546 | }
|
@@ -551,6 +636,48 @@ define void @atomic_fetch_umax32(i32 %x) nounwind {
|
551 | 636 | ; X86-NOCMOV-NEXT: popl %esi
|
552 | 637 | ; X86-NOCMOV-NEXT: popl %ebx
|
553 | 638 | ; X86-NOCMOV-NEXT: retl
|
| 639 | +; |
| 640 | +; X86-NOX87-LABEL: atomic_fetch_umax32: |
| 641 | +; X86-NOX87: # %bb.0: |
| 642 | +; X86-NOX87-NEXT: pushl %ebx |
| 643 | +; X86-NOX87-NEXT: pushl %esi |
| 644 | +; X86-NOX87-NEXT: subl $20, %esp |
| 645 | +; X86-NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax |
| 646 | +; X86-NOX87-NEXT: movl sc32, %ecx |
| 647 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 648 | +; X86-NOX87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 649 | +; X86-NOX87-NEXT: .LBB8_1: # %atomicrmw.start |
| 650 | +; X86-NOX87-NEXT: # =>This Inner Loop Header: Depth=1 |
| 651 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 652 | +; X86-NOX87-NEXT: movl %eax, %ecx |
| 653 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload |
| 654 | +; X86-NOX87-NEXT: subl %edx, %ecx |
| 655 | +; X86-NOX87-NEXT: movl %eax, %esi |
| 656 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 657 | +; X86-NOX87-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 658 | +; X86-NOX87-NEXT: ja .LBB8_4 |
| 659 | +; X86-NOX87-NEXT: # %bb.3: # %atomicrmw.start |
| 660 | +; X86-NOX87-NEXT: # in Loop: Header=BB8_1 Depth=1 |
| 661 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 662 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 663 | +; X86-NOX87-NEXT: .LBB8_4: # %atomicrmw.start |
| 664 | +; X86-NOX87-NEXT: # in Loop: Header=BB8_1 Depth=1 |
| 665 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 666 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload |
| 667 | +; X86-NOX87-NEXT: movl %eax, (%esp) # 4-byte Spill |
| 668 | +; X86-NOX87-NEXT: movl %ecx, %eax |
| 669 | +; X86-NOX87-NEXT: movl (%esp), %edx # 4-byte Reload |
| 670 | +; X86-NOX87-NEXT: lock cmpxchgl %edx, sc32 |
| 671 | +; X86-NOX87-NEXT: sete %bl |
| 672 | +; X86-NOX87-NEXT: testb $1, %bl |
| 673 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 674 | +; X86-NOX87-NEXT: jne .LBB8_2 |
| 675 | +; X86-NOX87-NEXT: jmp .LBB8_1 |
| 676 | +; X86-NOX87-NEXT: .LBB8_2: # %atomicrmw.end |
| 677 | +; X86-NOX87-NEXT: addl $20, %esp |
| 678 | +; X86-NOX87-NEXT: popl %esi |
| 679 | +; X86-NOX87-NEXT: popl %ebx |
| 680 | +; X86-NOX87-NEXT: retl |
554 | 681 | %t1 = atomicrmw umax i32* @sc32, i32 %x acquire
|
555 | 682 | ret void
|
556 | 683 | }
|
@@ -646,6 +773,48 @@ define void @atomic_fetch_umin32(i32 %x) nounwind {
|
646 | 773 | ; X86-NOCMOV-NEXT: popl %esi
|
647 | 774 | ; X86-NOCMOV-NEXT: popl %ebx
|
648 | 775 | ; X86-NOCMOV-NEXT: retl
|
| 776 | +; |
| 777 | +; X86-NOX87-LABEL: atomic_fetch_umin32: |
| 778 | +; X86-NOX87: # %bb.0: |
| 779 | +; X86-NOX87-NEXT: pushl %ebx |
| 780 | +; X86-NOX87-NEXT: pushl %esi |
| 781 | +; X86-NOX87-NEXT: subl $20, %esp |
| 782 | +; X86-NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax |
| 783 | +; X86-NOX87-NEXT: movl sc32, %ecx |
| 784 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 785 | +; X86-NOX87-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 786 | +; X86-NOX87-NEXT: .LBB9_1: # %atomicrmw.start |
| 787 | +; X86-NOX87-NEXT: # =>This Inner Loop Header: Depth=1 |
| 788 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 789 | +; X86-NOX87-NEXT: movl %eax, %ecx |
| 790 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload |
| 791 | +; X86-NOX87-NEXT: subl %edx, %ecx |
| 792 | +; X86-NOX87-NEXT: movl %eax, %esi |
| 793 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 794 | +; X86-NOX87-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 795 | +; X86-NOX87-NEXT: jbe .LBB9_4 |
| 796 | +; X86-NOX87-NEXT: # %bb.3: # %atomicrmw.start |
| 797 | +; X86-NOX87-NEXT: # in Loop: Header=BB9_1 Depth=1 |
| 798 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 799 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 800 | +; X86-NOX87-NEXT: .LBB9_4: # %atomicrmw.start |
| 801 | +; X86-NOX87-NEXT: # in Loop: Header=BB9_1 Depth=1 |
| 802 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload |
| 803 | +; X86-NOX87-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload |
| 804 | +; X86-NOX87-NEXT: movl %eax, (%esp) # 4-byte Spill |
| 805 | +; X86-NOX87-NEXT: movl %ecx, %eax |
| 806 | +; X86-NOX87-NEXT: movl (%esp), %edx # 4-byte Reload |
| 807 | +; X86-NOX87-NEXT: lock cmpxchgl %edx, sc32 |
| 808 | +; X86-NOX87-NEXT: sete %bl |
| 809 | +; X86-NOX87-NEXT: testb $1, %bl |
| 810 | +; X86-NOX87-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill |
| 811 | +; X86-NOX87-NEXT: jne .LBB9_2 |
| 812 | +; X86-NOX87-NEXT: jmp .LBB9_1 |
| 813 | +; X86-NOX87-NEXT: .LBB9_2: # %atomicrmw.end |
| 814 | +; X86-NOX87-NEXT: addl $20, %esp |
| 815 | +; X86-NOX87-NEXT: popl %esi |
| 816 | +; X86-NOX87-NEXT: popl %ebx |
| 817 | +; X86-NOX87-NEXT: retl |
649 | 818 | %t1 = atomicrmw umin i32* @sc32, i32 %x acquire
|
650 | 819 | ret void
|
651 | 820 | }
|
@@ -721,6 +890,12 @@ define void @atomic_fetch_swapf32(float %x) nounwind {
|
721 | 890 | ; X86-NOCMOV-NEXT: xchgl %eax, fsc32
|
722 | 891 | ; X86-NOCMOV-NEXT: popl %eax
|
723 | 892 | ; X86-NOCMOV-NEXT: retl
|
| 893 | +; |
| 894 | +; X86-NOX87-LABEL: atomic_fetch_swapf32: |
| 895 | +; X86-NOX87: # %bb.0: |
| 896 | +; X86-NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax |
| 897 | +; X86-NOX87-NEXT: xchgl %eax, fsc32 |
| 898 | +; X86-NOX87-NEXT: retl |
724 | 899 | %t1 = atomicrmw xchg float* @fsc32, float %x acquire
|
725 | 900 | ret void
|
726 | 901 | }
|
0 commit comments