xref: /llvm-project/llvm/test/CodeGen/X86/apx/dec.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 @dec8r(i8 noundef %a) {
61fe7bdb8SShengchen Kan; CHECK-LABEL: dec8r:
71fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
81fe7bdb8SShengchen Kan; CHECK-NEXT:    decb %dil, %al
91fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
10a9e8a3a1SShengchen Kan;
11a9e8a3a1SShengchen Kan; NF-LABEL: dec8r:
12a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
13a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} decb %dil, %al
14a9e8a3a1SShengchen Kan; NF-NEXT:    retq
151fe7bdb8SShengchen Kanentry:
161fe7bdb8SShengchen Kan  %dec = sub i8 %a, 1
171fe7bdb8SShengchen Kan  ret i8 %dec
181fe7bdb8SShengchen Kan}
191fe7bdb8SShengchen Kan
201fe7bdb8SShengchen Kandefine i16 @dec16r(i16 noundef %a) {
211fe7bdb8SShengchen Kan; CHECK-LABEL: dec16r:
221fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
23*20683de7SShengchen Kan; CHECK-NEXT:    decw %di, %ax
241fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
25a9e8a3a1SShengchen Kan;
26a9e8a3a1SShengchen Kan; NF-LABEL: dec16r:
27a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
28*20683de7SShengchen Kan; NF-NEXT:    {nf} decw %di, %ax
29a9e8a3a1SShengchen Kan; NF-NEXT:    retq
301fe7bdb8SShengchen Kanentry:
311fe7bdb8SShengchen Kan  %dec = sub i16 %a, 1
321fe7bdb8SShengchen Kan  ret i16 %dec
331fe7bdb8SShengchen Kan}
341fe7bdb8SShengchen Kan
351fe7bdb8SShengchen Kandefine i32 @dec32r(i32 noundef %a) {
361fe7bdb8SShengchen Kan; CHECK-LABEL: dec32r:
371fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
381fe7bdb8SShengchen Kan; CHECK-NEXT:    decl %edi, %eax
391fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
40a9e8a3a1SShengchen Kan;
41a9e8a3a1SShengchen Kan; NF-LABEL: dec32r:
42a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
43a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} decl %edi, %eax
44a9e8a3a1SShengchen Kan; NF-NEXT:    retq
451fe7bdb8SShengchen Kanentry:
461fe7bdb8SShengchen Kan  %dec = sub i32 %a, 1
471fe7bdb8SShengchen Kan  ret i32 %dec
481fe7bdb8SShengchen Kan}
491fe7bdb8SShengchen Kan
501fe7bdb8SShengchen Kandefine i64 @dec64r(i64 noundef %a) {
511fe7bdb8SShengchen Kan; CHECK-LABEL: dec64r:
521fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
531fe7bdb8SShengchen Kan; CHECK-NEXT:    decq %rdi, %rax
541fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
55a9e8a3a1SShengchen Kan;
56a9e8a3a1SShengchen Kan; NF-LABEL: dec64r:
57a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
58a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} decq %rdi, %rax
59a9e8a3a1SShengchen Kan; NF-NEXT:    retq
601fe7bdb8SShengchen Kanentry:
611fe7bdb8SShengchen Kan  %dec = sub i64 %a, 1
621fe7bdb8SShengchen Kan  ret i64 %dec
631fe7bdb8SShengchen Kan}
641fe7bdb8SShengchen Kan
651fe7bdb8SShengchen Kandefine i8 @dec8m(ptr %ptr) {
661fe7bdb8SShengchen Kan; CHECK-LABEL: dec8m:
671fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
681fe7bdb8SShengchen Kan; CHECK-NEXT:    decb (%rdi), %al
691fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
70a9e8a3a1SShengchen Kan;
71a9e8a3a1SShengchen Kan; NF-LABEL: dec8m:
72a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
73a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} decb (%rdi), %al
74a9e8a3a1SShengchen Kan; NF-NEXT:    retq
751fe7bdb8SShengchen Kanentry:
761fe7bdb8SShengchen Kan  %a = load i8, ptr %ptr
771fe7bdb8SShengchen Kan  %dec = sub i8 %a, 1
781fe7bdb8SShengchen Kan  ret i8 %dec
791fe7bdb8SShengchen Kan}
801fe7bdb8SShengchen Kan
811fe7bdb8SShengchen Kandefine i16 @dec16m(ptr %ptr) {
821fe7bdb8SShengchen Kan; CHECK-LABEL: dec16m:
831fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
84*20683de7SShengchen Kan; CHECK-NEXT:    decw (%rdi), %ax
851fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
86a9e8a3a1SShengchen Kan;
87a9e8a3a1SShengchen Kan; NF-LABEL: dec16m:
88a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
89*20683de7SShengchen Kan; NF-NEXT:    {nf} decw (%rdi), %ax
90a9e8a3a1SShengchen Kan; NF-NEXT:    retq
911fe7bdb8SShengchen Kanentry:
921fe7bdb8SShengchen Kan  %a = load i16, ptr %ptr
931fe7bdb8SShengchen Kan  %dec = sub i16 %a, 1
941fe7bdb8SShengchen Kan  ret i16 %dec
951fe7bdb8SShengchen Kan}
961fe7bdb8SShengchen Kan
971fe7bdb8SShengchen Kandefine i32 @dec32m(ptr %ptr) {
981fe7bdb8SShengchen Kan; CHECK-LABEL: dec32m:
991fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1001fe7bdb8SShengchen Kan; CHECK-NEXT:    decl (%rdi), %eax
1011fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
102a9e8a3a1SShengchen Kan;
103a9e8a3a1SShengchen Kan; NF-LABEL: dec32m:
104a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
105a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} decl (%rdi), %eax
106a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1071fe7bdb8SShengchen Kanentry:
1081fe7bdb8SShengchen Kan  %a = load i32, ptr %ptr
1091fe7bdb8SShengchen Kan  %dec = sub i32 %a, 1
1101fe7bdb8SShengchen Kan  ret i32 %dec
1111fe7bdb8SShengchen Kan}
1121fe7bdb8SShengchen Kan
1131fe7bdb8SShengchen Kandefine i64 @dec64m(ptr %ptr) {
1141fe7bdb8SShengchen Kan; CHECK-LABEL: dec64m:
1151fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1161fe7bdb8SShengchen Kan; CHECK-NEXT:    decq (%rdi), %rax
1171fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
118a9e8a3a1SShengchen Kan;
119a9e8a3a1SShengchen Kan; NF-LABEL: dec64m:
120a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
121a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} decq (%rdi), %rax
122a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1231fe7bdb8SShengchen Kanentry:
1241fe7bdb8SShengchen Kan  %a = load i64, ptr %ptr
1251fe7bdb8SShengchen Kan  %dec = sub i64 %a, 1
1261fe7bdb8SShengchen Kan  ret i64 %dec
1271fe7bdb8SShengchen Kan}
1281fe7bdb8SShengchen Kan
1291fe7bdb8SShengchen Kandefine void @dec8m_legacy(ptr %ptr) {
1301fe7bdb8SShengchen Kan; CHECK-LABEL: dec8m_legacy:
1311fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1321fe7bdb8SShengchen Kan; CHECK-NEXT:    decb (%rdi)
1331fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
134a9e8a3a1SShengchen Kan;
135a9e8a3a1SShengchen Kan; NF-LABEL: dec8m_legacy:
136a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
137a9e8a3a1SShengchen Kan; NF-NEXT:    decb (%rdi)
138a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1391fe7bdb8SShengchen Kanentry:
1401fe7bdb8SShengchen Kan  %a = load i8, ptr %ptr
1411fe7bdb8SShengchen Kan  %dec = sub i8 %a, 1
1421fe7bdb8SShengchen Kan  store i8 %dec, ptr %ptr
1431fe7bdb8SShengchen Kan  ret void
1441fe7bdb8SShengchen Kan}
1451fe7bdb8SShengchen Kan
1461fe7bdb8SShengchen Kandefine void @dec16m_legacy(ptr %ptr) {
1471fe7bdb8SShengchen Kan; CHECK-LABEL: dec16m_legacy:
1481fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1491fe7bdb8SShengchen Kan; CHECK-NEXT:    decw (%rdi)
1501fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
151a9e8a3a1SShengchen Kan;
152a9e8a3a1SShengchen Kan; NF-LABEL: dec16m_legacy:
153a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
154a9e8a3a1SShengchen Kan; NF-NEXT:    decw (%rdi)
155a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1561fe7bdb8SShengchen Kanentry:
1571fe7bdb8SShengchen Kan  %a = load i16, ptr %ptr
1581fe7bdb8SShengchen Kan  %dec = sub i16 %a, 1
1591fe7bdb8SShengchen Kan  store i16 %dec, ptr %ptr
1601fe7bdb8SShengchen Kan  ret void
1611fe7bdb8SShengchen Kan}
1621fe7bdb8SShengchen Kan
1631fe7bdb8SShengchen Kandefine void @dec32m_legacy(ptr %ptr) {
1641fe7bdb8SShengchen Kan; CHECK-LABEL: dec32m_legacy:
1651fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1661fe7bdb8SShengchen Kan; CHECK-NEXT:    decl (%rdi)
1671fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
168a9e8a3a1SShengchen Kan;
169a9e8a3a1SShengchen Kan; NF-LABEL: dec32m_legacy:
170a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
171a9e8a3a1SShengchen Kan; NF-NEXT:    decl (%rdi)
172a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1731fe7bdb8SShengchen Kanentry:
1741fe7bdb8SShengchen Kan  %a = load i32, ptr %ptr
1751fe7bdb8SShengchen Kan  %dec = sub i32 %a, 1
1761fe7bdb8SShengchen Kan  store i32 %dec, ptr %ptr
1771fe7bdb8SShengchen Kan  ret void
1781fe7bdb8SShengchen Kan}
1791fe7bdb8SShengchen Kan
1801fe7bdb8SShengchen Kandefine void @dec64m_legacy(ptr %ptr) {
1811fe7bdb8SShengchen Kan; CHECK-LABEL: dec64m_legacy:
1821fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
1831fe7bdb8SShengchen Kan; CHECK-NEXT:    decq (%rdi)
1841fe7bdb8SShengchen Kan; CHECK-NEXT:    retq
185a9e8a3a1SShengchen Kan;
186a9e8a3a1SShengchen Kan; NF-LABEL: dec64m_legacy:
187a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
188a9e8a3a1SShengchen Kan; NF-NEXT:    decq (%rdi)
189a9e8a3a1SShengchen Kan; NF-NEXT:    retq
1901fe7bdb8SShengchen Kanentry:
1911fe7bdb8SShengchen Kan  %a = load i64, ptr %ptr
1921fe7bdb8SShengchen Kan  %dec = sub i64 %a, 1
1931fe7bdb8SShengchen Kan  store i64 %dec, ptr %ptr
1941fe7bdb8SShengchen Kan  ret void
1951fe7bdb8SShengchen Kan}
196