|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp -verify-machineinstrs | FileCheck %s |
3 |
| -; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+ndd -verify-machineinstrs | FileCheck %s --check-prefix=NDD |
| 2 | +; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+nf -verify-machineinstrs | FileCheck %s |
| 3 | +; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ccmp,+ndd,+nf -verify-machineinstrs | FileCheck %s --check-prefix=NDD |
4 | 4 |
|
5 | 5 | define void @ctest8rr_zf(i8 noundef %a, i8 noundef %b) {
|
6 | 6 | ; CHECK-LABEL: ctest8rr_zf:
|
@@ -936,4 +936,52 @@ if.end: ; preds = %entry, %if.then
|
936 | 936 | ret void
|
937 | 937 | }
|
938 | 938 |
|
| 939 | +define void @cmp_srem(ptr %p, i32 %a, ptr %b) { |
| 940 | +; CHECK-LABEL: cmp_srem: |
| 941 | +; CHECK: # %bb.0: # %bb |
| 942 | +; CHECK-NEXT: movq %rdx, %rcx |
| 943 | +; CHECK-NEXT: movl %esi, %eax |
| 944 | +; CHECK-NEXT: subl $1, %eax |
| 945 | +; CHECK-NEXT: movl (%rdi), %edi |
| 946 | +; CHECK-NEXT: cltd |
| 947 | +; CHECK-NEXT: {nf} idivl %edi |
| 948 | +; CHECK-NEXT: ctestnel {dfv=} %edx, %edx |
| 949 | +; CHECK-NEXT: sete %al |
| 950 | +; CHECK-NEXT: cmpl $1, %esi |
| 951 | +; CHECK-NEXT: ccmpael {dfv=zf} $1, %edi |
| 952 | +; CHECK-NEXT: sete %dl |
| 953 | +; CHECK-NEXT: orb %al, %dl |
| 954 | +; CHECK-NEXT: movb %dl, (%rcx) |
| 955 | +; CHECK-NEXT: retq |
| 956 | +; |
| 957 | +; NDD-LABEL: cmp_srem: |
| 958 | +; NDD: # %bb.0: # %bb |
| 959 | +; NDD-NEXT: movq %rdx, %rcx |
| 960 | +; NDD-NEXT: subl $1, %esi, %eax |
| 961 | +; NDD-NEXT: movl (%rdi), %edi |
| 962 | +; NDD-NEXT: cltd |
| 963 | +; NDD-NEXT: {nf} idivl %edi |
| 964 | +; NDD-NEXT: ctestnel {dfv=} %edx, %edx |
| 965 | +; NDD-NEXT: sete %al |
| 966 | +; NDD-NEXT: cmpl $1, %esi |
| 967 | +; NDD-NEXT: ccmpael {dfv=zf} $1, %edi |
| 968 | +; NDD-NEXT: sete %dl |
| 969 | +; NDD-NEXT: orb %dl, %al |
| 970 | +; NDD-NEXT: movb %al, (%rcx) |
| 971 | +; NDD-NEXT: retq |
| 972 | +bb: |
| 973 | + %i = icmp eq i32 %a, 0 |
| 974 | + %i2 = load i32, ptr %p, align 4 |
| 975 | + %i3 = icmp eq i32 %i2, 1 |
| 976 | + %i4 = or i1 %i, %i3 |
| 977 | + %i5 = add i32 %a, -1 |
| 978 | + %i6 = srem i32 %i5, %i2 |
| 979 | + %i7 = icmp eq i32 %i6, 0 |
| 980 | + %i8 = icmp ne i32 %a, 1 |
| 981 | + %i9 = and i1 %i8, %i7 |
| 982 | + %i10 = or i1 %i4, %i9 |
| 983 | + store i1 %i10, ptr %b, align 1 |
| 984 | + ret void |
| 985 | +} |
| 986 | + |
939 | 987 | declare dso_local void @foo(...)
|
0 commit comments