xref: /llvm-project/llvm/test/CodeGen/X86/apx/inc.ll (revision 20683de70e43fa73536ac1e8ce4082604048d040)
11fe7bdb8SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
21fe7bdb8SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs | FileCheck %s
3a9e8a3a1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs | FileCheck --check-prefix=NF %s
41fe7bdb8SShengchen Kan
51fe7bdb8SShengchen Kandefine i8 @inc8r(i8 noundef %a) {
61fe7bdb8SShengchen Kan; CHECK-LABEL: inc8r:
71fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
81fe7bdb8SShengchen Kan; CHECK-NEXT:    incb %dil, %al
91fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
10a9e8a3a1SShengchen Kan;
11a9e8a3a1SShengchen Kan; NF-LABEL: inc8r:
12a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
13a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} incb %dil, %al
14a9e8a3a1SShengchen Kan; NF-NEXT:    retq
151fe7bdb8SShengchen Kanentry:
161fe7bdb8SShengchen Kan  %inc = add i8 %a, 1
171fe7bdb8SShengchen Kan  ret i8 %inc
181fe7bdb8SShengchen Kan}
191fe7bdb8SShengchen Kan
201fe7bdb8SShengchen Kandefine i16 @inc16r(i16 noundef %a) {
211fe7bdb8SShengchen Kan; CHECK-LABEL: inc16r:
221fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
23*20683de7SShengchen Kan; CHECK-NEXT:    incw %di, %ax
241fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
25a9e8a3a1SShengchen Kan;
26a9e8a3a1SShengchen Kan; NF-LABEL: inc16r:
27a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
28*20683de7SShengchen Kan; NF-NEXT:    {nf} incw %di, %ax
29a9e8a3a1SShengchen Kan; NF-NEXT:    retq
301fe7bdb8SShengchen Kanentry:
311fe7bdb8SShengchen Kan  %inc = add i16 %a, 1
321fe7bdb8SShengchen Kan  ret i16 %inc
331fe7bdb8SShengchen Kan}
341fe7bdb8SShengchen Kan
351fe7bdb8SShengchen Kandefine i32 @inc32r(i32 noundef %a) {
361fe7bdb8SShengchen Kan; CHECK-LABEL: inc32r:
371fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
381fe7bdb8SShengchen Kan; CHECK-NEXT:    incl %edi, %eax
391fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
40a9e8a3a1SShengchen Kan;
41a9e8a3a1SShengchen Kan; NF-LABEL: inc32r:
42a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
43a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} incl %edi, %eax
44a9e8a3a1SShengchen Kan; NF-NEXT:    retq
451fe7bdb8SShengchen Kanentry:
461fe7bdb8SShengchen Kan  %inc = add i32 %a, 1
471fe7bdb8SShengchen Kan  ret i32 %inc
481fe7bdb8SShengchen Kan}
491fe7bdb8SShengchen Kan
501fe7bdb8SShengchen Kandefine i64 @inc64r(i64 noundef %a) {
511fe7bdb8SShengchen Kan; CHECK-LABEL: inc64r:
521fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
531fe7bdb8SShengchen Kan; CHECK-NEXT:    incq %rdi, %rax
541fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
55a9e8a3a1SShengchen Kan;
56a9e8a3a1SShengchen Kan; NF-LABEL: inc64r:
57a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
58a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} incq %rdi, %rax
59a9e8a3a1SShengchen Kan; NF-NEXT:    retq
601fe7bdb8SShengchen Kanentry:
611fe7bdb8SShengchen Kan  %inc = add i64 %a, 1
621fe7bdb8SShengchen Kan  ret i64 %inc
631fe7bdb8SShengchen Kan}
641fe7bdb8SShengchen Kan
651fe7bdb8SShengchen Kandefine i8 @inc8m(ptr %ptr) {
661fe7bdb8SShengchen Kan; CHECK-LABEL: inc8m:
671fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
681fe7bdb8SShengchen Kan; CHECK-NEXT:    incb (%rdi), %al
691fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
70a9e8a3a1SShengchen Kan;
71a9e8a3a1SShengchen Kan; NF-LABEL: inc8m:
72a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
73a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} incb (%rdi), %al
74a9e8a3a1SShengchen Kan; NF-NEXT:    retq
751fe7bdb8SShengchen Kanentry:
761fe7bdb8SShengchen Kan  %a = load i8, ptr %ptr
771fe7bdb8SShengchen Kan  %inc = add i8 %a, 1
781fe7bdb8SShengchen Kan  ret i8 %inc
791fe7bdb8SShengchen Kan}
801fe7bdb8SShengchen Kan
811fe7bdb8SShengchen Kandefine i16 @inc16m(ptr %ptr) {
821fe7bdb8SShengchen Kan; CHECK-LABEL: inc16m:
831fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
84*20683de7SShengchen Kan; CHECK-NEXT:    incw (%rdi), %ax
851fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
86a9e8a3a1SShengchen Kan;
87a9e8a3a1SShengchen Kan; NF-LABEL: inc16m:
88a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
89*20683de7SShengchen Kan; NF-NEXT:    {nf} incw (%rdi), %ax
90a9e8a3a1SShengchen Kan; NF-NEXT:    retq
911fe7bdb8SShengchen Kanentry:
921fe7bdb8SShengchen Kan  %a = load i16, ptr %ptr
931fe7bdb8SShengchen Kan  %inc = add i16 %a, 1
941fe7bdb8SShengchen Kan  ret i16 %inc
951fe7bdb8SShengchen Kan}
961fe7bdb8SShengchen Kan
971fe7bdb8SShengchen Kandefine i32 @inc32m(ptr %ptr) {
981fe7bdb8SShengchen Kan; CHECK-LABEL: inc32m:
991fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1001fe7bdb8SShengchen Kan; CHECK-NEXT:    incl (%rdi), %eax
1011fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
102a9e8a3a1SShengchen Kan;
103a9e8a3a1SShengchen Kan; NF-LABEL: inc32m:
104a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
105a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} incl (%rdi), %eax
106a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1071fe7bdb8SShengchen Kanentry:
1081fe7bdb8SShengchen Kan  %a = load i32, ptr %ptr
1091fe7bdb8SShengchen Kan  %inc = add i32 %a, 1
1101fe7bdb8SShengchen Kan  ret i32 %inc
1111fe7bdb8SShengchen Kan}
1121fe7bdb8SShengchen Kan
1131fe7bdb8SShengchen Kandefine i64 @inc64m(ptr %ptr) {
1141fe7bdb8SShengchen Kan; CHECK-LABEL: inc64m:
1151fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1161fe7bdb8SShengchen Kan; CHECK-NEXT:    incq (%rdi), %rax
1171fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
118a9e8a3a1SShengchen Kan;
119a9e8a3a1SShengchen Kan; NF-LABEL: inc64m:
120a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
121a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} incq (%rdi), %rax
122a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1231fe7bdb8SShengchen Kanentry:
1241fe7bdb8SShengchen Kan  %a = load i64, ptr %ptr
1251fe7bdb8SShengchen Kan  %inc = add i64 %a, 1
1261fe7bdb8SShengchen Kan  ret i64 %inc
1271fe7bdb8SShengchen Kan}
1281fe7bdb8SShengchen Kan
1291fe7bdb8SShengchen Kandefine i8 @uinc8r(i8 noundef %a) {
1301fe7bdb8SShengchen Kan; CHECK-LABEL: uinc8r:
1311fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1321fe7bdb8SShengchen Kan; CHECK-NEXT:    incb %dil, %al
1337b766a6fSXinWang10; CHECK-NEXT:    movzbl %al, %eax
1347b766a6fSXinWang10; CHECK-NEXT:    movl $255, %ecx
1357b766a6fSXinWang10; CHECK-NEXT:    cmovel %ecx, %eax
1361fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $al killed $al killed $eax
1371fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
138a9e8a3a1SShengchen Kan;
139a9e8a3a1SShengchen Kan; NF-LABEL: uinc8r:
140a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
141a9e8a3a1SShengchen Kan; NF-NEXT:    incb %dil, %al
142a9e8a3a1SShengchen Kan; NF-NEXT:    movzbl %al, %eax
143a9e8a3a1SShengchen Kan; NF-NEXT:    movl $255, %ecx
144a9e8a3a1SShengchen Kan; NF-NEXT:    cmovel %ecx, %eax
145a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $al killed $al killed $eax
146a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1471fe7bdb8SShengchen Kanentry:
1481fe7bdb8SShengchen Kan  %inc = call i8 @llvm.uadd.sat.i8(i8 %a, i8 1)
1491fe7bdb8SShengchen Kan  ret i8 %inc
1501fe7bdb8SShengchen Kan}
1511fe7bdb8SShengchen Kan
1521fe7bdb8SShengchen Kandefine i16 @uinc16r(i16 noundef %a) {
1531fe7bdb8SShengchen Kan; CHECK-LABEL: uinc16r:
1541fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1557b766a6fSXinWang10; CHECK-NEXT:    incw %di, %ax
1567b766a6fSXinWang10; CHECK-NEXT:    movl $65535, %ecx # imm = 0xFFFF
1577b766a6fSXinWang10; CHECK-NEXT:    cmovel %ecx, %eax
1581fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
1591fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
160a9e8a3a1SShengchen Kan;
161a9e8a3a1SShengchen Kan; NF-LABEL: uinc16r:
162a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
163a9e8a3a1SShengchen Kan; NF-NEXT:    incw %di, %ax
164a9e8a3a1SShengchen Kan; NF-NEXT:    movl $65535, %ecx # imm = 0xFFFF
165a9e8a3a1SShengchen Kan; NF-NEXT:    cmovel %ecx, %eax
166a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $ax killed $ax killed $eax
167a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1681fe7bdb8SShengchen Kanentry:
1691fe7bdb8SShengchen Kan  %inc = call i16 @llvm.uadd.sat.i16(i16 %a, i16 1)
1701fe7bdb8SShengchen Kan  ret i16 %inc
1711fe7bdb8SShengchen Kan}
1721fe7bdb8SShengchen Kan
1731fe7bdb8SShengchen Kandefine i32 @uinc32r(i32 noundef %a) {
1741fe7bdb8SShengchen Kan; CHECK-LABEL: uinc32r:
1751fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1767b766a6fSXinWang10; CHECK-NEXT:    incl %edi, %eax
1777b766a6fSXinWang10; CHECK-NEXT:    movl $-1, %ecx
1787b766a6fSXinWang10; CHECK-NEXT:    cmovel %ecx, %eax
1791fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
180a9e8a3a1SShengchen Kan;
181a9e8a3a1SShengchen Kan; NF-LABEL: uinc32r:
182a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
183a9e8a3a1SShengchen Kan; NF-NEXT:    incl %edi, %eax
184a9e8a3a1SShengchen Kan; NF-NEXT:    movl $-1, %ecx
185a9e8a3a1SShengchen Kan; NF-NEXT:    cmovel %ecx, %eax
186a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1871fe7bdb8SShengchen Kanentry:
1881fe7bdb8SShengchen Kan  %inc = call i32 @llvm.uadd.sat.i32(i32 %a, i32 1)
1891fe7bdb8SShengchen Kan  ret i32 %inc
1901fe7bdb8SShengchen Kan}
1911fe7bdb8SShengchen Kan
1921fe7bdb8SShengchen Kandefine i64 @uinc64r(i64 noundef %a) {
1931fe7bdb8SShengchen Kan; CHECK-LABEL: uinc64r:
1941fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1957b766a6fSXinWang10; CHECK-NEXT:    incq %rdi, %rax
1967b766a6fSXinWang10; CHECK-NEXT:    movq $-1, %rcx
1977b766a6fSXinWang10; CHECK-NEXT:    cmoveq %rcx, %rax
1981fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
199a9e8a3a1SShengchen Kan;
200a9e8a3a1SShengchen Kan; NF-LABEL: uinc64r:
201a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
202a9e8a3a1SShengchen Kan; NF-NEXT:    incq %rdi, %rax
203a9e8a3a1SShengchen Kan; NF-NEXT:    movq $-1, %rcx
204a9e8a3a1SShengchen Kan; NF-NEXT:    cmoveq %rcx, %rax
205a9e8a3a1SShengchen Kan; NF-NEXT:    retq
2061fe7bdb8SShengchen Kanentry:
2071fe7bdb8SShengchen Kan  %inc = call i64 @llvm.uadd.sat.i64(i64 %a, i64 1)
2081fe7bdb8SShengchen Kan  ret i64 %inc
2091fe7bdb8SShengchen Kan}
2101fe7bdb8SShengchen Kan
2111fe7bdb8SShengchen Kandeclare i8 @llvm.uadd.sat.i8(i8, i8)
2121fe7bdb8SShengchen Kandeclare i16 @llvm.uadd.sat.i16(i16, i16)
2131fe7bdb8SShengchen Kandeclare i32 @llvm.uadd.sat.i32(i32, i32)
2141fe7bdb8SShengchen Kandeclare i64 @llvm.uadd.sat.i64(i64, i64)
2151fe7bdb8SShengchen Kan
2161fe7bdb8SShengchen Kandefine void @inc8m_legacy(ptr %ptr) {
2171fe7bdb8SShengchen Kan; CHECK-LABEL: inc8m_legacy:
2181fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
2191fe7bdb8SShengchen Kan; CHECK-NEXT:    incb (%rdi)
2201fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
221a9e8a3a1SShengchen Kan;
222a9e8a3a1SShengchen Kan; NF-LABEL: inc8m_legacy:
223a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
224a9e8a3a1SShengchen Kan; NF-NEXT:    incb (%rdi)
225a9e8a3a1SShengchen Kan; NF-NEXT:    retq
2261fe7bdb8SShengchen Kanentry:
2271fe7bdb8SShengchen Kan  %a = load i8, ptr %ptr
2281fe7bdb8SShengchen Kan  %inc = add i8 %a, 1
2291fe7bdb8SShengchen Kan  store i8 %inc, ptr %ptr
2301fe7bdb8SShengchen Kan  ret void
2311fe7bdb8SShengchen Kan}
2321fe7bdb8SShengchen Kan
2331fe7bdb8SShengchen Kandefine void @inc16m_legacy(ptr %ptr) {
2341fe7bdb8SShengchen Kan; CHECK-LABEL: inc16m_legacy:
2351fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
2361fe7bdb8SShengchen Kan; CHECK-NEXT:    incw (%rdi)
2371fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
238a9e8a3a1SShengchen Kan;
239a9e8a3a1SShengchen Kan; NF-LABEL: inc16m_legacy:
240a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
241a9e8a3a1SShengchen Kan; NF-NEXT:    incw (%rdi)
242a9e8a3a1SShengchen Kan; NF-NEXT:    retq
2431fe7bdb8SShengchen Kanentry:
2441fe7bdb8SShengchen Kan  %a = load i16, ptr %ptr
2451fe7bdb8SShengchen Kan  %inc = add i16 %a, 1
2461fe7bdb8SShengchen Kan  store i16 %inc, ptr %ptr
2471fe7bdb8SShengchen Kan  ret void
2481fe7bdb8SShengchen Kan}
2491fe7bdb8SShengchen Kan
2501fe7bdb8SShengchen Kandefine void @inc32m_legacy(ptr %ptr) {
2511fe7bdb8SShengchen Kan; CHECK-LABEL: inc32m_legacy:
2521fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
2531fe7bdb8SShengchen Kan; CHECK-NEXT:    incl (%rdi)
2541fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
255a9e8a3a1SShengchen Kan;
256a9e8a3a1SShengchen Kan; NF-LABEL: inc32m_legacy:
257a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
258a9e8a3a1SShengchen Kan; NF-NEXT:    incl (%rdi)
259a9e8a3a1SShengchen Kan; NF-NEXT:    retq
2601fe7bdb8SShengchen Kanentry:
2611fe7bdb8SShengchen Kan  %a = load i32, ptr %ptr
2621fe7bdb8SShengchen Kan  %inc = add i32 %a, 1
2631fe7bdb8SShengchen Kan  store i32 %inc, ptr %ptr
2641fe7bdb8SShengchen Kan  ret void
2651fe7bdb8SShengchen Kan}
2661fe7bdb8SShengchen Kan
2671fe7bdb8SShengchen Kandefine void @inc64m_legacy(ptr %ptr) {
2681fe7bdb8SShengchen Kan; CHECK-LABEL: inc64m_legacy:
2691fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
2701fe7bdb8SShengchen Kan; CHECK-NEXT:    incq (%rdi)
2711fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
272a9e8a3a1SShengchen Kan;
273a9e8a3a1SShengchen Kan; NF-LABEL: inc64m_legacy:
274a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
275a9e8a3a1SShengchen Kan; NF-NEXT:    incq (%rdi)
276a9e8a3a1SShengchen Kan; NF-NEXT:    retq
2771fe7bdb8SShengchen Kanentry:
2781fe7bdb8SShengchen Kan  %a = load i64, ptr %ptr
2791fe7bdb8SShengchen Kan  %inc = add i64 %a, 1
2801fe7bdb8SShengchen Kan  store i64 %inc, ptr %ptr
2811fe7bdb8SShengchen Kan  ret void
2821fe7bdb8SShengchen Kan}
283