xref: /llvm-project/llvm/test/CodeGen/X86/apx/dec.ll (revision 20683de70e43fa73536ac1e8ce4082604048d040)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs | FileCheck %s
3; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs | FileCheck --check-prefix=NF %s
4
5define i8 @dec8r(i8 noundef %a) {
6; CHECK-LABEL: dec8r:
7; CHECK:       # %bb.0: # %entry
8; CHECK-NEXT:    decb %dil, %al
9; CHECK-NEXT:    retq
10;
11; NF-LABEL: dec8r:
12; NF:       # %bb.0: # %entry
13; NF-NEXT:    {nf} decb %dil, %al
14; NF-NEXT:    retq
15entry:
16  %dec = sub i8 %a, 1
17  ret i8 %dec
18}
19
20define i16 @dec16r(i16 noundef %a) {
21; CHECK-LABEL: dec16r:
22; CHECK:       # %bb.0: # %entry
23; CHECK-NEXT:    decw %di, %ax
24; CHECK-NEXT:    retq
25;
26; NF-LABEL: dec16r:
27; NF:       # %bb.0: # %entry
28; NF-NEXT:    {nf} decw %di, %ax
29; NF-NEXT:    retq
30entry:
31  %dec = sub i16 %a, 1
32  ret i16 %dec
33}
34
35define i32 @dec32r(i32 noundef %a) {
36; CHECK-LABEL: dec32r:
37; CHECK:       # %bb.0: # %entry
38; CHECK-NEXT:    decl %edi, %eax
39; CHECK-NEXT:    retq
40;
41; NF-LABEL: dec32r:
42; NF:       # %bb.0: # %entry
43; NF-NEXT:    {nf} decl %edi, %eax
44; NF-NEXT:    retq
45entry:
46  %dec = sub i32 %a, 1
47  ret i32 %dec
48}
49
50define i64 @dec64r(i64 noundef %a) {
51; CHECK-LABEL: dec64r:
52; CHECK:       # %bb.0: # %entry
53; CHECK-NEXT:    decq %rdi, %rax
54; CHECK-NEXT:    retq
55;
56; NF-LABEL: dec64r:
57; NF:       # %bb.0: # %entry
58; NF-NEXT:    {nf} decq %rdi, %rax
59; NF-NEXT:    retq
60entry:
61  %dec = sub i64 %a, 1
62  ret i64 %dec
63}
64
65define i8 @dec8m(ptr %ptr) {
66; CHECK-LABEL: dec8m:
67; CHECK:       # %bb.0: # %entry
68; CHECK-NEXT:    decb (%rdi), %al
69; CHECK-NEXT:    retq
70;
71; NF-LABEL: dec8m:
72; NF:       # %bb.0: # %entry
73; NF-NEXT:    {nf} decb (%rdi), %al
74; NF-NEXT:    retq
75entry:
76  %a = load i8, ptr %ptr
77  %dec = sub i8 %a, 1
78  ret i8 %dec
79}
80
81define i16 @dec16m(ptr %ptr) {
82; CHECK-LABEL: dec16m:
83; CHECK:       # %bb.0: # %entry
84; CHECK-NEXT:    decw (%rdi), %ax
85; CHECK-NEXT:    retq
86;
87; NF-LABEL: dec16m:
88; NF:       # %bb.0: # %entry
89; NF-NEXT:    {nf} decw (%rdi), %ax
90; NF-NEXT:    retq
91entry:
92  %a = load i16, ptr %ptr
93  %dec = sub i16 %a, 1
94  ret i16 %dec
95}
96
97define i32 @dec32m(ptr %ptr) {
98; CHECK-LABEL: dec32m:
99; CHECK:       # %bb.0: # %entry
100; CHECK-NEXT:    decl (%rdi), %eax
101; CHECK-NEXT:    retq
102;
103; NF-LABEL: dec32m:
104; NF:       # %bb.0: # %entry
105; NF-NEXT:    {nf} decl (%rdi), %eax
106; NF-NEXT:    retq
107entry:
108  %a = load i32, ptr %ptr
109  %dec = sub i32 %a, 1
110  ret i32 %dec
111}
112
113define i64 @dec64m(ptr %ptr) {
114; CHECK-LABEL: dec64m:
115; CHECK:       # %bb.0: # %entry
116; CHECK-NEXT:    decq (%rdi), %rax
117; CHECK-NEXT:    retq
118;
119; NF-LABEL: dec64m:
120; NF:       # %bb.0: # %entry
121; NF-NEXT:    {nf} decq (%rdi), %rax
122; NF-NEXT:    retq
123entry:
124  %a = load i64, ptr %ptr
125  %dec = sub i64 %a, 1
126  ret i64 %dec
127}
128
129define void @dec8m_legacy(ptr %ptr) {
130; CHECK-LABEL: dec8m_legacy:
131; CHECK:       # %bb.0: # %entry
132; CHECK-NEXT:    decb (%rdi)
133; CHECK-NEXT:    retq
134;
135; NF-LABEL: dec8m_legacy:
136; NF:       # %bb.0: # %entry
137; NF-NEXT:    decb (%rdi)
138; NF-NEXT:    retq
139entry:
140  %a = load i8, ptr %ptr
141  %dec = sub i8 %a, 1
142  store i8 %dec, ptr %ptr
143  ret void
144}
145
146define void @dec16m_legacy(ptr %ptr) {
147; CHECK-LABEL: dec16m_legacy:
148; CHECK:       # %bb.0: # %entry
149; CHECK-NEXT:    decw (%rdi)
150; CHECK-NEXT:    retq
151;
152; NF-LABEL: dec16m_legacy:
153; NF:       # %bb.0: # %entry
154; NF-NEXT:    decw (%rdi)
155; NF-NEXT:    retq
156entry:
157  %a = load i16, ptr %ptr
158  %dec = sub i16 %a, 1
159  store i16 %dec, ptr %ptr
160  ret void
161}
162
163define void @dec32m_legacy(ptr %ptr) {
164; CHECK-LABEL: dec32m_legacy:
165; CHECK:       # %bb.0: # %entry
166; CHECK-NEXT:    decl (%rdi)
167; CHECK-NEXT:    retq
168;
169; NF-LABEL: dec32m_legacy:
170; NF:       # %bb.0: # %entry
171; NF-NEXT:    decl (%rdi)
172; NF-NEXT:    retq
173entry:
174  %a = load i32, ptr %ptr
175  %dec = sub i32 %a, 1
176  store i32 %dec, ptr %ptr
177  ret void
178}
179
180define void @dec64m_legacy(ptr %ptr) {
181; CHECK-LABEL: dec64m_legacy:
182; CHECK:       # %bb.0: # %entry
183; CHECK-NEXT:    decq (%rdi)
184; CHECK-NEXT:    retq
185;
186; NF-LABEL: dec64m_legacy:
187; NF:       # %bb.0: # %entry
188; NF-NEXT:    decq (%rdi)
189; NF-NEXT:    retq
190entry:
191  %a = load i64, ptr %ptr
192  %dec = sub i64 %a, 1
193  store i64 %dec, ptr %ptr
194  ret void
195}
196