xref: /llvm-project/llvm/test/CodeGen/X86/apx/sub.ll (revision f30188797453fc9bccb0ba9e8bdb8fd47369dfa7)
11fe7bdb8SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2f6617091SXinWang10; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s
3a9e8a3a1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs --show-mc-encoding | FileCheck --check-prefix=NF %s
41fe7bdb8SShengchen Kan
51fe7bdb8SShengchen Kandefine i8 @sub8rr(i8 noundef %a, i8 noundef %b) {
61fe7bdb8SShengchen Kan; CHECK-LABEL: sub8rr:
71fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
8f6617091SXinWang10; CHECK-NEXT:    subb %sil, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x28,0xf7]
9f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
10a9e8a3a1SShengchen Kan;
11a9e8a3a1SShengchen Kan; NF-LABEL: sub8rr:
12a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
13a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subb %sil, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x28,0xf7]
14a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
151fe7bdb8SShengchen Kanentry:
161fe7bdb8SShengchen Kan    %sub = sub i8 %a, %b
171fe7bdb8SShengchen Kan    ret i8 %sub
181fe7bdb8SShengchen Kan}
191fe7bdb8SShengchen Kan
201fe7bdb8SShengchen Kandefine i16 @sub16rr(i16 noundef %a, i16 noundef %b) {
211fe7bdb8SShengchen Kan; CHECK-LABEL: sub16rr:
221fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
2320683de7SShengchen Kan; CHECK-NEXT:    subw %si, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x29,0xf7]
24f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
25a9e8a3a1SShengchen Kan;
26a9e8a3a1SShengchen Kan; NF-LABEL: sub16rr:
27a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
2820683de7SShengchen Kan; NF-NEXT:    {nf} subw %si, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x29,0xf7]
29a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
301fe7bdb8SShengchen Kanentry:
311fe7bdb8SShengchen Kan    %sub = sub i16 %a, %b
321fe7bdb8SShengchen Kan    ret i16 %sub
331fe7bdb8SShengchen Kan}
341fe7bdb8SShengchen Kan
351fe7bdb8SShengchen Kandefine i32 @sub32rr(i32 noundef %a, i32 noundef %b) {
361fe7bdb8SShengchen Kan; CHECK-LABEL: sub32rr:
371fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
38f6617091SXinWang10; CHECK-NEXT:    subl %esi, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x29,0xf7]
39f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
40a9e8a3a1SShengchen Kan;
41a9e8a3a1SShengchen Kan; NF-LABEL: sub32rr:
42a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
43a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subl %esi, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x29,0xf7]
44a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
451fe7bdb8SShengchen Kanentry:
461fe7bdb8SShengchen Kan    %sub = sub i32 %a, %b
471fe7bdb8SShengchen Kan    ret i32 %sub
481fe7bdb8SShengchen Kan}
491fe7bdb8SShengchen Kan
501fe7bdb8SShengchen Kandefine i64 @sub64rr(i64 noundef %a, i64 noundef %b) {
511fe7bdb8SShengchen Kan; CHECK-LABEL: sub64rr:
521fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
53f6617091SXinWang10; CHECK-NEXT:    subq %rsi, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x29,0xf7]
54f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
55a9e8a3a1SShengchen Kan;
56a9e8a3a1SShengchen Kan; NF-LABEL: sub64rr:
57a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
58a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subq %rsi, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x29,0xf7]
59a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
601fe7bdb8SShengchen Kanentry:
611fe7bdb8SShengchen Kan    %sub = sub i64 %a, %b
621fe7bdb8SShengchen Kan    ret i64 %sub
631fe7bdb8SShengchen Kan}
641fe7bdb8SShengchen Kan
651fe7bdb8SShengchen Kandefine i8 @sub8rm(i8 noundef %a, ptr %ptr) {
661fe7bdb8SShengchen Kan; CHECK-LABEL: sub8rm:
671fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
68f6617091SXinWang10; CHECK-NEXT:    subb (%rsi), %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x2a,0x3e]
69f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
70a9e8a3a1SShengchen Kan;
71a9e8a3a1SShengchen Kan; NF-LABEL: sub8rm:
72a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
73a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subb (%rsi), %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x2a,0x3e]
74a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
751fe7bdb8SShengchen Kanentry:
761fe7bdb8SShengchen Kan    %b = load i8, ptr %ptr
771fe7bdb8SShengchen Kan    %sub = sub i8 %a, %b
781fe7bdb8SShengchen Kan    ret i8 %sub
791fe7bdb8SShengchen Kan}
801fe7bdb8SShengchen Kan
811fe7bdb8SShengchen Kandefine i16 @sub16rm(i16 noundef %a, ptr %ptr) {
821fe7bdb8SShengchen Kan; CHECK-LABEL: sub16rm:
831fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
84f6617091SXinWang10; CHECK-NEXT:    subw (%rsi), %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x2b,0x3e]
85f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
86a9e8a3a1SShengchen Kan;
87a9e8a3a1SShengchen Kan; NF-LABEL: sub16rm:
88a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
89a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subw (%rsi), %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x2b,0x3e]
90a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
911fe7bdb8SShengchen Kanentry:
921fe7bdb8SShengchen Kan    %b = load i16, ptr %ptr
931fe7bdb8SShengchen Kan    %sub = sub i16 %a, %b
941fe7bdb8SShengchen Kan    ret i16 %sub
951fe7bdb8SShengchen Kan}
961fe7bdb8SShengchen Kan
971fe7bdb8SShengchen Kandefine i32 @sub32rm(i32 noundef %a, ptr %ptr) {
981fe7bdb8SShengchen Kan; CHECK-LABEL: sub32rm:
991fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
100f6617091SXinWang10; CHECK-NEXT:    subl (%rsi), %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x2b,0x3e]
101f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
102a9e8a3a1SShengchen Kan;
103a9e8a3a1SShengchen Kan; NF-LABEL: sub32rm:
104a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
105a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subl (%rsi), %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x2b,0x3e]
106a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1071fe7bdb8SShengchen Kanentry:
1081fe7bdb8SShengchen Kan    %b = load i32, ptr %ptr
1091fe7bdb8SShengchen Kan    %sub = sub i32 %a, %b
1101fe7bdb8SShengchen Kan    ret i32 %sub
1111fe7bdb8SShengchen Kan}
1121fe7bdb8SShengchen Kan
1131fe7bdb8SShengchen Kandefine i64 @sub64rm(i64 noundef %a, ptr %ptr) {
1141fe7bdb8SShengchen Kan; CHECK-LABEL: sub64rm:
1151fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
116f6617091SXinWang10; CHECK-NEXT:    subq (%rsi), %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x2b,0x3e]
117f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
118a9e8a3a1SShengchen Kan;
119a9e8a3a1SShengchen Kan; NF-LABEL: sub64rm:
120a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
121a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subq (%rsi), %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x2b,0x3e]
122a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1231fe7bdb8SShengchen Kanentry:
1241fe7bdb8SShengchen Kan    %b = load i64, ptr %ptr
1251fe7bdb8SShengchen Kan    %sub = sub i64 %a, %b
1261fe7bdb8SShengchen Kan    ret i64 %sub
1271fe7bdb8SShengchen Kan}
1281fe7bdb8SShengchen Kan
1291fe7bdb8SShengchen Kandefine i16 @sub16ri8(i16 noundef %a) {
1301fe7bdb8SShengchen Kan; CHECK-LABEL: sub16ri8:
1311fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
13220683de7SShengchen Kan; CHECK-NEXT:    subw $-128, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0xef,0x80]
133f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
134a9e8a3a1SShengchen Kan;
135a9e8a3a1SShengchen Kan; NF-LABEL: sub16ri8:
136a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
13720683de7SShengchen Kan; NF-NEXT:    {nf} subw $-128, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xef,0x80]
138a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1391fe7bdb8SShengchen Kanentry:
140924ad198SShengchen Kan    %sub = sub i16 %a, -128
1411fe7bdb8SShengchen Kan    ret i16 %sub
1421fe7bdb8SShengchen Kan}
1431fe7bdb8SShengchen Kan
1441fe7bdb8SShengchen Kandefine i32 @sub32ri8(i32 noundef %a) {
1451fe7bdb8SShengchen Kan; CHECK-LABEL: sub32ri8:
1461fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
147924ad198SShengchen Kan; CHECK-NEXT:    subl $-128, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0xef,0x80]
148f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
149a9e8a3a1SShengchen Kan;
150a9e8a3a1SShengchen Kan; NF-LABEL: sub32ri8:
151a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
152a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subl $-128, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x83,0xef,0x80]
153a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1541fe7bdb8SShengchen Kanentry:
155924ad198SShengchen Kan    %sub = sub i32 %a, -128
1561fe7bdb8SShengchen Kan    ret i32 %sub
1571fe7bdb8SShengchen Kan}
1581fe7bdb8SShengchen Kan
1591fe7bdb8SShengchen Kandefine i64 @sub64ri8(i64 noundef %a) {
1601fe7bdb8SShengchen Kan; CHECK-LABEL: sub64ri8:
1611fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
162924ad198SShengchen Kan; CHECK-NEXT:    subq $-128, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0xef,0x80]
163f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
164a9e8a3a1SShengchen Kan;
165a9e8a3a1SShengchen Kan; NF-LABEL: sub64ri8:
166a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
167a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subq $-128, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x83,0xef,0x80]
168a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1691fe7bdb8SShengchen Kanentry:
170924ad198SShengchen Kan    %sub = sub i64 %a, -128
1711fe7bdb8SShengchen Kan    ret i64 %sub
1721fe7bdb8SShengchen Kan}
1731fe7bdb8SShengchen Kan
1741fe7bdb8SShengchen Kandefine i8 @sub8ri(i8 noundef %a) {
1751fe7bdb8SShengchen Kan; CHECK-LABEL: sub8ri:
1761fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
177f6617091SXinWang10; CHECK-NEXT:    addb $-123, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0xc7,0x85]
178f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
179a9e8a3a1SShengchen Kan;
180a9e8a3a1SShengchen Kan; NF-LABEL: sub8ri:
181a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
182a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} addb $-123, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x80,0xc7,0x85]
183a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
1841fe7bdb8SShengchen Kanentry:
1851fe7bdb8SShengchen Kan    %sub = sub i8 %a, 123
1861fe7bdb8SShengchen Kan    ret i8 %sub
1871fe7bdb8SShengchen Kan}
1881fe7bdb8SShengchen Kan
1891fe7bdb8SShengchen Kandefine i16 @sub16ri(i16 noundef %a) {
1901fe7bdb8SShengchen Kan; CHECK-LABEL: sub16ri:
1911fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
19220683de7SShengchen Kan; CHECK-NEXT:    addw $-1234, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0xc7,0x2e,0xfb]
193f6617091SXinWang10; CHECK-NEXT:    # imm = 0xFB2E
194f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
195a9e8a3a1SShengchen Kan;
196a9e8a3a1SShengchen Kan; NF-LABEL: sub16ri:
197a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
19820683de7SShengchen Kan; NF-NEXT:    {nf} addw $-1234, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xc7,0x2e,0xfb]
199a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0xFB2E
200a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2011fe7bdb8SShengchen Kanentry:
2021fe7bdb8SShengchen Kan    %sub = sub i16 %a, 1234
2031fe7bdb8SShengchen Kan    ret i16 %sub
2041fe7bdb8SShengchen Kan}
2051fe7bdb8SShengchen Kan
2061fe7bdb8SShengchen Kandefine i32 @sub32ri(i32 noundef %a) {
2071fe7bdb8SShengchen Kan; CHECK-LABEL: sub32ri:
2081fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
209f6617091SXinWang10; CHECK-NEXT:    addl $-123456, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0xc7,0xc0,0x1d,0xfe,0xff]
210f6617091SXinWang10; CHECK-NEXT:    # imm = 0xFFFE1DC0
211f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
212a9e8a3a1SShengchen Kan;
213a9e8a3a1SShengchen Kan; NF-LABEL: sub32ri:
214a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
215a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} addl $-123456, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x81,0xc7,0xc0,0x1d,0xfe,0xff]
216a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0xFFFE1DC0
217a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2181fe7bdb8SShengchen Kanentry:
2191fe7bdb8SShengchen Kan    %sub = sub i32 %a, 123456
2201fe7bdb8SShengchen Kan    ret i32 %sub
2211fe7bdb8SShengchen Kan}
2221fe7bdb8SShengchen Kan
2231fe7bdb8SShengchen Kandefine i64 @sub64ri(i64 noundef %a) {
2241fe7bdb8SShengchen Kan; CHECK-LABEL: sub64ri:
2251fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
226924ad198SShengchen Kan; CHECK-NEXT:    subq $-2147483648, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0xef,0x00,0x00,0x00,0x80]
227924ad198SShengchen Kan; CHECK-NEXT:    # imm = 0x80000000
228f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
229a9e8a3a1SShengchen Kan;
230a9e8a3a1SShengchen Kan; NF-LABEL: sub64ri:
231a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
232a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subq $-2147483648, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x81,0xef,0x00,0x00,0x00,0x80]
233a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0x80000000
234a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2351fe7bdb8SShengchen Kanentry:
236924ad198SShengchen Kan    %sub = sub i64 %a, -2147483648
2371fe7bdb8SShengchen Kan    ret i64 %sub
2381fe7bdb8SShengchen Kan}
2391fe7bdb8SShengchen Kan
2401fe7bdb8SShengchen Kandefine i8 @sub8mr(ptr %a, i8 noundef %b) {
2411fe7bdb8SShengchen Kan; CHECK-LABEL: sub8mr:
2421fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
243f6617091SXinWang10; CHECK-NEXT:    subb %sil, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x28,0x37]
244f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
245a9e8a3a1SShengchen Kan;
246a9e8a3a1SShengchen Kan; NF-LABEL: sub8mr:
247a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
248a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subb %sil, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x28,0x37]
249a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2501fe7bdb8SShengchen Kanentry:
2511fe7bdb8SShengchen Kan  %t= load i8, ptr %a
2521fe7bdb8SShengchen Kan  %sub = sub nsw i8 %t, %b
2531fe7bdb8SShengchen Kan  ret i8 %sub
2541fe7bdb8SShengchen Kan}
2551fe7bdb8SShengchen Kan
2561fe7bdb8SShengchen Kandefine i16 @sub16mr(ptr %a, i16 noundef %b) {
2571fe7bdb8SShengchen Kan; CHECK-LABEL: sub16mr:
2581fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
25920683de7SShengchen Kan; CHECK-NEXT:    subw %si, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x29,0x37]
260f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
261a9e8a3a1SShengchen Kan;
262a9e8a3a1SShengchen Kan; NF-LABEL: sub16mr:
263a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
26420683de7SShengchen Kan; NF-NEXT:    {nf} subw %si, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x29,0x37]
265a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2661fe7bdb8SShengchen Kanentry:
2671fe7bdb8SShengchen Kan  %t= load i16, ptr %a
2681fe7bdb8SShengchen Kan  %sub = sub nsw i16 %t, %b
2691fe7bdb8SShengchen Kan  ret i16 %sub
2701fe7bdb8SShengchen Kan}
2711fe7bdb8SShengchen Kan
2721fe7bdb8SShengchen Kandefine i32 @sub32mr(ptr %a, i32 noundef %b) {
2731fe7bdb8SShengchen Kan; CHECK-LABEL: sub32mr:
2741fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
275f6617091SXinWang10; CHECK-NEXT:    subl %esi, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x29,0x37]
276f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
277a9e8a3a1SShengchen Kan;
278a9e8a3a1SShengchen Kan; NF-LABEL: sub32mr:
279a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
280a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subl %esi, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x29,0x37]
281a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2821fe7bdb8SShengchen Kanentry:
2831fe7bdb8SShengchen Kan  %t= load i32, ptr %a
2841fe7bdb8SShengchen Kan  %sub = sub nsw i32 %t, %b
2851fe7bdb8SShengchen Kan  ret i32 %sub
2861fe7bdb8SShengchen Kan}
2871fe7bdb8SShengchen Kan
2881fe7bdb8SShengchen Kandefine i64 @sub64mr(ptr %a, i64 noundef %b) {
2891fe7bdb8SShengchen Kan; CHECK-LABEL: sub64mr:
2901fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
291f6617091SXinWang10; CHECK-NEXT:    subq %rsi, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x29,0x37]
292f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
293a9e8a3a1SShengchen Kan;
294a9e8a3a1SShengchen Kan; NF-LABEL: sub64mr:
295a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
296a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subq %rsi, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x29,0x37]
297a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
2981fe7bdb8SShengchen Kanentry:
2991fe7bdb8SShengchen Kan  %t= load i64, ptr %a
3001fe7bdb8SShengchen Kan  %sub = sub nsw i64 %t, %b
3011fe7bdb8SShengchen Kan  ret i64 %sub
3021fe7bdb8SShengchen Kan}
3031fe7bdb8SShengchen Kan
3041fe7bdb8SShengchen Kandefine i16 @sub16mi8(ptr %a) {
3051fe7bdb8SShengchen Kan; CHECK-LABEL: sub16mi8:
3061fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
30720683de7SShengchen Kan; CHECK-NEXT:    subw $-128, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x83,0x2f,0x80]
308f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
309a9e8a3a1SShengchen Kan;
310a9e8a3a1SShengchen Kan; NF-LABEL: sub16mi8:
311a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
31220683de7SShengchen Kan; NF-NEXT:    {nf} subw $-128, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x83,0x2f,0x80]
313a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3141fe7bdb8SShengchen Kanentry:
3151fe7bdb8SShengchen Kan  %t= load i16, ptr %a
316924ad198SShengchen Kan  %sub = sub nsw i16 %t, -128
3171fe7bdb8SShengchen Kan  ret i16 %sub
3181fe7bdb8SShengchen Kan}
3191fe7bdb8SShengchen Kan
3201fe7bdb8SShengchen Kandefine i32 @sub32mi8(ptr %a) {
3211fe7bdb8SShengchen Kan; CHECK-LABEL: sub32mi8:
3221fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
323924ad198SShengchen Kan; CHECK-NEXT:    subl $-128, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x83,0x2f,0x80]
324f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
325a9e8a3a1SShengchen Kan;
326a9e8a3a1SShengchen Kan; NF-LABEL: sub32mi8:
327a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
328a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subl $-128, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x83,0x2f,0x80]
329a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3301fe7bdb8SShengchen Kanentry:
3311fe7bdb8SShengchen Kan  %t= load i32, ptr %a
332924ad198SShengchen Kan  %sub = sub nsw i32 %t, -128
3331fe7bdb8SShengchen Kan  ret i32 %sub
3341fe7bdb8SShengchen Kan}
3351fe7bdb8SShengchen Kan
3361fe7bdb8SShengchen Kandefine i64 @sub64mi8(ptr %a) {
3371fe7bdb8SShengchen Kan; CHECK-LABEL: sub64mi8:
3381fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
339924ad198SShengchen Kan; CHECK-NEXT:    subq $-128, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x83,0x2f,0x80]
340f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
341a9e8a3a1SShengchen Kan;
342a9e8a3a1SShengchen Kan; NF-LABEL: sub64mi8:
343a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
344a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subq $-128, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x83,0x2f,0x80]
345a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3461fe7bdb8SShengchen Kanentry:
3471fe7bdb8SShengchen Kan  %t= load i64, ptr %a
348924ad198SShengchen Kan  %sub = sub nsw i64 %t, -128
3491fe7bdb8SShengchen Kan  ret i64 %sub
3501fe7bdb8SShengchen Kan}
3511fe7bdb8SShengchen Kan
3521fe7bdb8SShengchen Kandefine i8 @sub8mi(ptr %a) {
3531fe7bdb8SShengchen Kan; CHECK-LABEL: sub8mi:
3541fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
355f6617091SXinWang10; CHECK-NEXT:    addb $-123, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0x80,0x07,0x85]
356f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
357a9e8a3a1SShengchen Kan;
358a9e8a3a1SShengchen Kan; NF-LABEL: sub8mi:
359a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
360a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} addb $-123, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x80,0x07,0x85]
361a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3621fe7bdb8SShengchen Kanentry:
3631fe7bdb8SShengchen Kan  %t= load i8, ptr %a
3641fe7bdb8SShengchen Kan  %sub = sub nsw i8 %t, 123
3651fe7bdb8SShengchen Kan  ret i8 %sub
3661fe7bdb8SShengchen Kan}
3671fe7bdb8SShengchen Kan
3681fe7bdb8SShengchen Kandefine i16 @sub16mi(ptr %a) {
3691fe7bdb8SShengchen Kan; CHECK-LABEL: sub16mi:
3701fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
37120683de7SShengchen Kan; CHECK-NEXT:    addw $-1234, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0x81,0x07,0x2e,0xfb]
372f6617091SXinWang10; CHECK-NEXT:    # imm = 0xFB2E
373f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
374a9e8a3a1SShengchen Kan;
375a9e8a3a1SShengchen Kan; NF-LABEL: sub16mi:
376a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
37720683de7SShengchen Kan; NF-NEXT:    {nf} addw $-1234, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0x81,0x07,0x2e,0xfb]
378a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0xFB2E
379a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3801fe7bdb8SShengchen Kanentry:
3811fe7bdb8SShengchen Kan  %t= load i16, ptr %a
3821fe7bdb8SShengchen Kan  %sub = sub nsw i16 %t, 1234
3831fe7bdb8SShengchen Kan  ret i16 %sub
3841fe7bdb8SShengchen Kan}
3851fe7bdb8SShengchen Kan
3861fe7bdb8SShengchen Kandefine i32 @sub32mi(ptr %a) {
3871fe7bdb8SShengchen Kan; CHECK-LABEL: sub32mi:
3881fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
389f6617091SXinWang10; CHECK-NEXT:    addl $-123456, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0x81,0x07,0xc0,0x1d,0xfe,0xff]
390f6617091SXinWang10; CHECK-NEXT:    # imm = 0xFFFE1DC0
391f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
392a9e8a3a1SShengchen Kan;
393a9e8a3a1SShengchen Kan; NF-LABEL: sub32mi:
394a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
395a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} addl $-123456, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0x81,0x07,0xc0,0x1d,0xfe,0xff]
396a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0xFFFE1DC0
397a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
3981fe7bdb8SShengchen Kanentry:
3991fe7bdb8SShengchen Kan  %t= load i32, ptr %a
4001fe7bdb8SShengchen Kan  %sub = sub nsw i32 %t, 123456
4011fe7bdb8SShengchen Kan  ret i32 %sub
4021fe7bdb8SShengchen Kan}
4031fe7bdb8SShengchen Kan
4041fe7bdb8SShengchen Kandefine i64 @sub64mi(ptr %a) {
4051fe7bdb8SShengchen Kan; CHECK-LABEL: sub64mi:
4061fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
407924ad198SShengchen Kan; CHECK-NEXT:    subq $-2147483648, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0x81,0x2f,0x00,0x00,0x00,0x80]
408924ad198SShengchen Kan; CHECK-NEXT:    # imm = 0x80000000
409f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
410a9e8a3a1SShengchen Kan;
411a9e8a3a1SShengchen Kan; NF-LABEL: sub64mi:
412a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
413a9e8a3a1SShengchen Kan; NF-NEXT:    {nf} subq $-2147483648, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0x81,0x2f,0x00,0x00,0x00,0x80]
414a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0x80000000
415a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4161fe7bdb8SShengchen Kanentry:
4171fe7bdb8SShengchen Kan  %t= load i64, ptr %a
418924ad198SShengchen Kan  %sub = sub nsw i64 %t, -2147483648
4191fe7bdb8SShengchen Kan  ret i64 %sub
4201fe7bdb8SShengchen Kan}
4211fe7bdb8SShengchen Kan
4221fe7bdb8SShengchen Kandeclare i8 @llvm.usub.sat.i8(i8, i8)
4231fe7bdb8SShengchen Kandeclare i16 @llvm.usub.sat.i16(i16, i16)
4241fe7bdb8SShengchen Kandeclare i32 @llvm.usub.sat.i32(i32, i32)
4251fe7bdb8SShengchen Kandeclare i64 @llvm.usub.sat.i64(i64, i64)
4261fe7bdb8SShengchen Kan
4271fe7bdb8SShengchen Kandefine i8 @subflag8rr(i8 noundef %a, i8 noundef %b) {
4281fe7bdb8SShengchen Kan; CHECK-LABEL: subflag8rr:
4291fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
4307b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
4317b766a6fSXinWang10; CHECK-NEXT:    subb %sil, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x28,0xf7]
4327b766a6fSXinWang10; CHECK-NEXT:    movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9]
4337b766a6fSXinWang10; CHECK-NEXT:    cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1]
4341fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $al killed $al killed $eax
435f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
436a9e8a3a1SShengchen Kan;
437a9e8a3a1SShengchen Kan; NF-LABEL: subflag8rr:
438a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
439a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
440a9e8a3a1SShengchen Kan; NF-NEXT:    subb %sil, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x28,0xf7]
441a9e8a3a1SShengchen Kan; NF-NEXT:    movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9]
442a9e8a3a1SShengchen Kan; NF-NEXT:    cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1]
443a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $al killed $al killed $eax
444a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4451fe7bdb8SShengchen Kanentry:
4461fe7bdb8SShengchen Kan    %sub = call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)
4471fe7bdb8SShengchen Kan    ret i8 %sub
4481fe7bdb8SShengchen Kan}
4491fe7bdb8SShengchen Kan
4501fe7bdb8SShengchen Kandefine i16 @subflag16rr(i16 noundef %a, i16 noundef %b) {
4511fe7bdb8SShengchen Kan; CHECK-LABEL: subflag16rr:
4521fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
4537b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
454*f3018879SFreddy Ye; CHECK-NEXT:    subw %si, %di # EVEX TO LEGACY Compression encoding: [0x66,0x29,0xf7]
455*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
4561fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
457f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
458a9e8a3a1SShengchen Kan;
459a9e8a3a1SShengchen Kan; NF-LABEL: subflag16rr:
460a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
461a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
462*f3018879SFreddy Ye; NF-NEXT:    subw %si, %di # EVEX TO LEGACY Compression encoding: [0x66,0x29,0xf7]
463*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
464a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $ax killed $ax killed $eax
465a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4661fe7bdb8SShengchen Kanentry:
4671fe7bdb8SShengchen Kan    %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 %b)
4681fe7bdb8SShengchen Kan    ret i16 %sub
4691fe7bdb8SShengchen Kan}
4701fe7bdb8SShengchen Kan
4711fe7bdb8SShengchen Kandefine i32 @subflag32rr(i32 noundef %a, i32 noundef %b) {
4721fe7bdb8SShengchen Kan; CHECK-LABEL: subflag32rr:
4731fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
4747b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
475*f3018879SFreddy Ye; CHECK-NEXT:    subl %esi, %edi # EVEX TO LEGACY Compression encoding: [0x29,0xf7]
476*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
477f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
478a9e8a3a1SShengchen Kan;
479a9e8a3a1SShengchen Kan; NF-LABEL: subflag32rr:
480a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
481a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
482*f3018879SFreddy Ye; NF-NEXT:    subl %esi, %edi # EVEX TO LEGACY Compression encoding: [0x29,0xf7]
483*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
484a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
4851fe7bdb8SShengchen Kanentry:
4861fe7bdb8SShengchen Kan    %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 %b)
4871fe7bdb8SShengchen Kan    ret i32 %sub
4881fe7bdb8SShengchen Kan}
4891fe7bdb8SShengchen Kan
4901fe7bdb8SShengchen Kandefine i64 @subflag64rr(i64 noundef %a, i64 noundef %b) {
4911fe7bdb8SShengchen Kan; CHECK-LABEL: subflag64rr:
4921fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
493f6617091SXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
494*f3018879SFreddy Ye; CHECK-NEXT:    subq %rsi, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x29,0xf7]
495*f3018879SFreddy Ye; CHECK-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
496f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
497a9e8a3a1SShengchen Kan;
498a9e8a3a1SShengchen Kan; NF-LABEL: subflag64rr:
499a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
500a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
501*f3018879SFreddy Ye; NF-NEXT:    subq %rsi, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x29,0xf7]
502*f3018879SFreddy Ye; NF-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
503a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5041fe7bdb8SShengchen Kanentry:
5051fe7bdb8SShengchen Kan    %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 %b)
5061fe7bdb8SShengchen Kan    ret i64 %sub
5071fe7bdb8SShengchen Kan}
5081fe7bdb8SShengchen Kan
5091fe7bdb8SShengchen Kandefine i8 @subflag8rm(i8 noundef %a, ptr %b) {
5101fe7bdb8SShengchen Kan; CHECK-LABEL: subflag8rm:
5111fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
5127b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
5137b766a6fSXinWang10; CHECK-NEXT:    subb (%rsi), %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x2a,0x3e]
5147b766a6fSXinWang10; CHECK-NEXT:    movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9]
5157b766a6fSXinWang10; CHECK-NEXT:    cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1]
5161fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $al killed $al killed $eax
517f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
518a9e8a3a1SShengchen Kan;
519a9e8a3a1SShengchen Kan; NF-LABEL: subflag8rm:
520a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
521a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
522a9e8a3a1SShengchen Kan; NF-NEXT:    subb (%rsi), %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x2a,0x3e]
523a9e8a3a1SShengchen Kan; NF-NEXT:    movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9]
524a9e8a3a1SShengchen Kan; NF-NEXT:    cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1]
525a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $al killed $al killed $eax
526a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5271fe7bdb8SShengchen Kanentry:
5281fe7bdb8SShengchen Kan    %t = load i8, ptr %b
5291fe7bdb8SShengchen Kan    %sub = call i8 @llvm.usub.sat.i8(i8 %a, i8 %t)
5301fe7bdb8SShengchen Kan    ret i8 %sub
5311fe7bdb8SShengchen Kan}
5321fe7bdb8SShengchen Kan
5331fe7bdb8SShengchen Kandefine i16 @subflag16rm(i16 noundef %a, ptr %b) {
5341fe7bdb8SShengchen Kan; CHECK-LABEL: subflag16rm:
5351fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
5367b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
537*f3018879SFreddy Ye; CHECK-NEXT:    subw (%rsi), %di # EVEX TO LEGACY Compression encoding: [0x66,0x2b,0x3e]
538*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
5391fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
540f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
541a9e8a3a1SShengchen Kan;
542a9e8a3a1SShengchen Kan; NF-LABEL: subflag16rm:
543a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
544a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
545*f3018879SFreddy Ye; NF-NEXT:    subw (%rsi), %di # EVEX TO LEGACY Compression encoding: [0x66,0x2b,0x3e]
546*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
547a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $ax killed $ax killed $eax
548a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5491fe7bdb8SShengchen Kanentry:
5501fe7bdb8SShengchen Kan    %t = load i16, ptr %b
5511fe7bdb8SShengchen Kan    %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 %t)
5521fe7bdb8SShengchen Kan    ret i16 %sub
5531fe7bdb8SShengchen Kan}
5541fe7bdb8SShengchen Kan
5551fe7bdb8SShengchen Kandefine i32 @subflag32rm(i32 noundef %a, ptr %b) {
5561fe7bdb8SShengchen Kan; CHECK-LABEL: subflag32rm:
5571fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
5587b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
559*f3018879SFreddy Ye; CHECK-NEXT:    subl (%rsi), %edi # EVEX TO LEGACY Compression encoding: [0x2b,0x3e]
560*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
561f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
562a9e8a3a1SShengchen Kan;
563a9e8a3a1SShengchen Kan; NF-LABEL: subflag32rm:
564a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
565a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
566*f3018879SFreddy Ye; NF-NEXT:    subl (%rsi), %edi # EVEX TO LEGACY Compression encoding: [0x2b,0x3e]
567*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
568a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5691fe7bdb8SShengchen Kanentry:
5701fe7bdb8SShengchen Kan    %t = load i32, ptr %b
5711fe7bdb8SShengchen Kan    %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 %t)
5721fe7bdb8SShengchen Kan    ret i32 %sub
5731fe7bdb8SShengchen Kan}
5741fe7bdb8SShengchen Kan
5751fe7bdb8SShengchen Kandefine i64 @subflag64rm(i64 noundef %a, ptr %b) {
5761fe7bdb8SShengchen Kan; CHECK-LABEL: subflag64rm:
5771fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
578f6617091SXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
579*f3018879SFreddy Ye; CHECK-NEXT:    subq (%rsi), %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x2b,0x3e]
580*f3018879SFreddy Ye; CHECK-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
581f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
582a9e8a3a1SShengchen Kan;
583a9e8a3a1SShengchen Kan; NF-LABEL: subflag64rm:
584a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
585a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
586*f3018879SFreddy Ye; NF-NEXT:    subq (%rsi), %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x2b,0x3e]
587*f3018879SFreddy Ye; NF-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
588a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
5891fe7bdb8SShengchen Kanentry:
5901fe7bdb8SShengchen Kan    %t = load i64, ptr %b
5911fe7bdb8SShengchen Kan    %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 %t)
5921fe7bdb8SShengchen Kan    ret i64 %sub
5931fe7bdb8SShengchen Kan}
5941fe7bdb8SShengchen Kan
5951fe7bdb8SShengchen Kandefine i16 @subflag16ri8(i16 noundef %a) {
5961fe7bdb8SShengchen Kan; CHECK-LABEL: subflag16ri8:
5971fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
5987b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
599*f3018879SFreddy Ye; CHECK-NEXT:    subw $123, %di # EVEX TO LEGACY Compression encoding: [0x66,0x83,0xef,0x7b]
600*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
6011fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
602f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
603a9e8a3a1SShengchen Kan;
604a9e8a3a1SShengchen Kan; NF-LABEL: subflag16ri8:
605a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
606a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
607*f3018879SFreddy Ye; NF-NEXT:    subw $123, %di # EVEX TO LEGACY Compression encoding: [0x66,0x83,0xef,0x7b]
608*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
609a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $ax killed $ax killed $eax
610a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6111fe7bdb8SShengchen Kanentry:
6121fe7bdb8SShengchen Kan    %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 123)
6131fe7bdb8SShengchen Kan    ret i16 %sub
6141fe7bdb8SShengchen Kan}
6151fe7bdb8SShengchen Kan
6161fe7bdb8SShengchen Kandefine i32 @subflag32ri8(i32 noundef %a) {
6171fe7bdb8SShengchen Kan; CHECK-LABEL: subflag32ri8:
6181fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
6197b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
620*f3018879SFreddy Ye; CHECK-NEXT:    subl $123, %edi # EVEX TO LEGACY Compression encoding: [0x83,0xef,0x7b]
621*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
622f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
623a9e8a3a1SShengchen Kan;
624a9e8a3a1SShengchen Kan; NF-LABEL: subflag32ri8:
625a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
626a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
627*f3018879SFreddy Ye; NF-NEXT:    subl $123, %edi # EVEX TO LEGACY Compression encoding: [0x83,0xef,0x7b]
628*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
629a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6301fe7bdb8SShengchen Kanentry:
6311fe7bdb8SShengchen Kan    %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 123)
6321fe7bdb8SShengchen Kan    ret i32 %sub
6331fe7bdb8SShengchen Kan}
6341fe7bdb8SShengchen Kan
6351fe7bdb8SShengchen Kandefine i64 @subflag64ri8(i64 noundef %a) {
6361fe7bdb8SShengchen Kan; CHECK-LABEL: subflag64ri8:
6371fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
638f6617091SXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
639*f3018879SFreddy Ye; CHECK-NEXT:    subq $123, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xef,0x7b]
640*f3018879SFreddy Ye; CHECK-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
641f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
642a9e8a3a1SShengchen Kan;
643a9e8a3a1SShengchen Kan; NF-LABEL: subflag64ri8:
644a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
645a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
646*f3018879SFreddy Ye; NF-NEXT:    subq $123, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x83,0xef,0x7b]
647*f3018879SFreddy Ye; NF-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
648a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6491fe7bdb8SShengchen Kanentry:
6501fe7bdb8SShengchen Kan    %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 123)
6511fe7bdb8SShengchen Kan    ret i64 %sub
6521fe7bdb8SShengchen Kan}
6531fe7bdb8SShengchen Kan
6541fe7bdb8SShengchen Kandefine i8 @subflag8ri(i8 noundef %a) {
6551fe7bdb8SShengchen Kan; CHECK-LABEL: subflag8ri:
6561fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
6577b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
6587b766a6fSXinWang10; CHECK-NEXT:    subb $123, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xef,0x7b]
6597b766a6fSXinWang10; CHECK-NEXT:    movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9]
6607b766a6fSXinWang10; CHECK-NEXT:    cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1]
6611fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $al killed $al killed $eax
662f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
663a9e8a3a1SShengchen Kan;
664a9e8a3a1SShengchen Kan; NF-LABEL: subflag8ri:
665a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
666a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
667a9e8a3a1SShengchen Kan; NF-NEXT:    subb $123, %dil, %cl # encoding: [0x62,0xf4,0x74,0x18,0x80,0xef,0x7b]
668a9e8a3a1SShengchen Kan; NF-NEXT:    movzbl %cl, %ecx # encoding: [0x0f,0xb6,0xc9]
669a9e8a3a1SShengchen Kan; NF-NEXT:    cmovael %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc1]
670a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $al killed $al killed $eax
671a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6721fe7bdb8SShengchen Kanentry:
6731fe7bdb8SShengchen Kan    %sub = call i8 @llvm.usub.sat.i8(i8 %a, i8 123)
6741fe7bdb8SShengchen Kan    ret i8 %sub
6751fe7bdb8SShengchen Kan}
6761fe7bdb8SShengchen Kan
6771fe7bdb8SShengchen Kandefine i16 @subflag16ri(i16 noundef %a) {
6781fe7bdb8SShengchen Kan; CHECK-LABEL: subflag16ri:
6791fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
6807b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
681*f3018879SFreddy Ye; CHECK-NEXT:    subw $1234, %di # EVEX TO LEGACY Compression encoding: [0x66,0x81,0xef,0xd2,0x04]
682f6617091SXinWang10; CHECK-NEXT:    # imm = 0x4D2
683*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
6841fe7bdb8SShengchen Kan; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
685f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
686a9e8a3a1SShengchen Kan;
687a9e8a3a1SShengchen Kan; NF-LABEL: subflag16ri:
688a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
689a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
690*f3018879SFreddy Ye; NF-NEXT:    subw $1234, %di # EVEX TO LEGACY Compression encoding: [0x66,0x81,0xef,0xd2,0x04]
691a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0x4D2
692*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
693a9e8a3a1SShengchen Kan; NF-NEXT:    # kill: def $ax killed $ax killed $eax
694a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
6951fe7bdb8SShengchen Kanentry:
6961fe7bdb8SShengchen Kan    %sub = call i16 @llvm.usub.sat.i16(i16 %a, i16 1234)
6971fe7bdb8SShengchen Kan    ret i16 %sub
6981fe7bdb8SShengchen Kan}
6991fe7bdb8SShengchen Kan
7001fe7bdb8SShengchen Kandefine i32 @subflag32ri(i32 noundef %a) {
7011fe7bdb8SShengchen Kan; CHECK-LABEL: subflag32ri:
7021fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
7037b766a6fSXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
704*f3018879SFreddy Ye; CHECK-NEXT:    subl $123456, %edi # EVEX TO LEGACY Compression encoding: [0x81,0xef,0x40,0xe2,0x01,0x00]
705f6617091SXinWang10; CHECK-NEXT:    # imm = 0x1E240
706*f3018879SFreddy Ye; CHECK-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
707f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
708a9e8a3a1SShengchen Kan;
709a9e8a3a1SShengchen Kan; NF-LABEL: subflag32ri:
710a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
711a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
712*f3018879SFreddy Ye; NF-NEXT:    subl $123456, %edi # EVEX TO LEGACY Compression encoding: [0x81,0xef,0x40,0xe2,0x01,0x00]
713a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0x1E240
714*f3018879SFreddy Ye; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
715a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7161fe7bdb8SShengchen Kanentry:
7171fe7bdb8SShengchen Kan    %sub = call i32 @llvm.usub.sat.i32(i32 %a, i32 123456)
7181fe7bdb8SShengchen Kan    ret i32 %sub
7191fe7bdb8SShengchen Kan}
7201fe7bdb8SShengchen Kan
7211fe7bdb8SShengchen Kandefine i64 @subflag64ri(i64 noundef %a) {
7221fe7bdb8SShengchen Kan; CHECK-LABEL: subflag64ri:
7231fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
724f6617091SXinWang10; CHECK-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
725*f3018879SFreddy Ye; CHECK-NEXT:    subq $123456, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x81,0xef,0x40,0xe2,0x01,0x00]
726f6617091SXinWang10; CHECK-NEXT:    # imm = 0x1E240
727*f3018879SFreddy Ye; CHECK-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
728f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
729a9e8a3a1SShengchen Kan;
730a9e8a3a1SShengchen Kan; NF-LABEL: subflag64ri:
731a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
732a9e8a3a1SShengchen Kan; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
733*f3018879SFreddy Ye; NF-NEXT:    subq $123456, %rdi # EVEX TO LEGACY Compression encoding: [0x48,0x81,0xef,0x40,0xe2,0x01,0x00]
734a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0x1E240
735*f3018879SFreddy Ye; NF-NEXT:    cmovaeq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x43,0xc7]
736a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7371fe7bdb8SShengchen Kanentry:
7381fe7bdb8SShengchen Kan    %sub = call i64 @llvm.usub.sat.i64(i64 %a, i64 123456)
7391fe7bdb8SShengchen Kan    ret i64 %sub
7401fe7bdb8SShengchen Kan}
7411fe7bdb8SShengchen Kan
7421fe7bdb8SShengchen Kan@val = external hidden global i8
7431fe7bdb8SShengchen Kan
7441fe7bdb8SShengchen Kandeclare void @f()
7451fe7bdb8SShengchen Kan
7461fe7bdb8SShengchen Kandefine void @sub64ri_reloc(i64 %val) {
7471fe7bdb8SShengchen Kan; CHECK-LABEL: sub64ri_reloc:
7481fe7bdb8SShengchen Kan; CHECK:       # %bb.0:
749f7b61f81SShengchen Kan; CHECK-NEXT:    cmpq $val, %rdi # encoding: [0x48,0x81,0xff,A,A,A,A]
750f7b61f81SShengchen Kan; CHECK-NEXT:    # fixup A - offset: 3, value: val, kind: reloc_signed_4byte
751f6617091SXinWang10; CHECK-NEXT:    jbe .LBB41_2 # encoding: [0x76,A]
752f6617091SXinWang10; CHECK-NEXT:    # fixup A - offset: 1, value: .LBB41_2-1, kind: FK_PCRel_1
7531fe7bdb8SShengchen Kan; CHECK-NEXT:  # %bb.1: # %t
754f6617091SXinWang10; CHECK-NEXT:    pushq %rax # encoding: [0x50]
7551fe7bdb8SShengchen Kan; CHECK-NEXT:    .cfi_def_cfa_offset 16
756f6617091SXinWang10; CHECK-NEXT:    callq f@PLT # encoding: [0xe8,A,A,A,A]
757f6617091SXinWang10; CHECK-NEXT:    # fixup A - offset: 1, value: f@PLT-4, kind: FK_PCRel_4
758f6617091SXinWang10; CHECK-NEXT:    popq %rax # encoding: [0x58]
7591fe7bdb8SShengchen Kan; CHECK-NEXT:    .cfi_def_cfa_offset 8
7601fe7bdb8SShengchen Kan; CHECK-NEXT:  .LBB41_2: # %f
761f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
762a9e8a3a1SShengchen Kan;
763a9e8a3a1SShengchen Kan; NF-LABEL: sub64ri_reloc:
764a9e8a3a1SShengchen Kan; NF:       # %bb.0:
765a9e8a3a1SShengchen Kan; NF-NEXT:    cmpq $val, %rdi # encoding: [0x48,0x81,0xff,A,A,A,A]
766a9e8a3a1SShengchen Kan; NF-NEXT:    # fixup A - offset: 3, value: val, kind: reloc_signed_4byte
767a9e8a3a1SShengchen Kan; NF-NEXT:    jbe .LBB41_2 # encoding: [0x76,A]
768a9e8a3a1SShengchen Kan; NF-NEXT:    # fixup A - offset: 1, value: .LBB41_2-1, kind: FK_PCRel_1
769a9e8a3a1SShengchen Kan; NF-NEXT:  # %bb.1: # %t
770a9e8a3a1SShengchen Kan; NF-NEXT:    pushq %rax # encoding: [0x50]
771a9e8a3a1SShengchen Kan; NF-NEXT:    .cfi_def_cfa_offset 16
772a9e8a3a1SShengchen Kan; NF-NEXT:    callq f@PLT # encoding: [0xe8,A,A,A,A]
773a9e8a3a1SShengchen Kan; NF-NEXT:    # fixup A - offset: 1, value: f@PLT-4, kind: FK_PCRel_4
774a9e8a3a1SShengchen Kan; NF-NEXT:    popq %rax # encoding: [0x58]
775a9e8a3a1SShengchen Kan; NF-NEXT:    .cfi_def_cfa_offset 8
776a9e8a3a1SShengchen Kan; NF-NEXT:  .LBB41_2: # %f
777a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7781fe7bdb8SShengchen Kan  %cmp = icmp ugt i64 %val, ptrtoint (ptr @val to i64)
7791fe7bdb8SShengchen Kan  br i1 %cmp, label %t, label %f
7801fe7bdb8SShengchen Kan
7811fe7bdb8SShengchen Kant:
7821fe7bdb8SShengchen Kan  call void @f()
7831fe7bdb8SShengchen Kan  ret void
7841fe7bdb8SShengchen Kan
7851fe7bdb8SShengchen Kanf:
7861fe7bdb8SShengchen Kan  ret void
7871fe7bdb8SShengchen Kan}
7881fe7bdb8SShengchen Kan
7891fe7bdb8SShengchen Kandefine void @sub8mr_legacy(ptr %a, i8 noundef %b) {
7901fe7bdb8SShengchen Kan; CHECK-LABEL: sub8mr_legacy:
7911fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
792f6617091SXinWang10; CHECK-NEXT:    subb %sil, (%rdi) # encoding: [0x40,0x28,0x37]
793f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
794a9e8a3a1SShengchen Kan;
795a9e8a3a1SShengchen Kan; NF-LABEL: sub8mr_legacy:
796a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
797a9e8a3a1SShengchen Kan; NF-NEXT:    subb %sil, (%rdi) # encoding: [0x40,0x28,0x37]
798a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
7991fe7bdb8SShengchen Kanentry:
8001fe7bdb8SShengchen Kan  %t= load i8, ptr %a
8011fe7bdb8SShengchen Kan  %sub = sub i8 %t, %b
8021fe7bdb8SShengchen Kan  store i8 %sub, ptr %a
8031fe7bdb8SShengchen Kan  ret void
8041fe7bdb8SShengchen Kan}
8051fe7bdb8SShengchen Kan
8061fe7bdb8SShengchen Kandefine void @sub16mr_legacy(ptr %a, i16 noundef %b) {
8071fe7bdb8SShengchen Kan; CHECK-LABEL: sub16mr_legacy:
8081fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
809f6617091SXinWang10; CHECK-NEXT:    subw %si, (%rdi) # encoding: [0x66,0x29,0x37]
810f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
811a9e8a3a1SShengchen Kan;
812a9e8a3a1SShengchen Kan; NF-LABEL: sub16mr_legacy:
813a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
814a9e8a3a1SShengchen Kan; NF-NEXT:    subw %si, (%rdi) # encoding: [0x66,0x29,0x37]
815a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
8161fe7bdb8SShengchen Kanentry:
8171fe7bdb8SShengchen Kan  %t= load i16, ptr %a
8181fe7bdb8SShengchen Kan  %sub = sub i16 %t, %b
8191fe7bdb8SShengchen Kan  store i16 %sub, ptr %a
8201fe7bdb8SShengchen Kan  ret void
8211fe7bdb8SShengchen Kan}
8221fe7bdb8SShengchen Kan
8231fe7bdb8SShengchen Kandefine void @sub32mr_legacy(ptr %a, i32 noundef %b) {
8241fe7bdb8SShengchen Kan; CHECK-LABEL: sub32mr_legacy:
8251fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
826f6617091SXinWang10; CHECK-NEXT:    subl %esi, (%rdi) # encoding: [0x29,0x37]
827f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
828a9e8a3a1SShengchen Kan;
829a9e8a3a1SShengchen Kan; NF-LABEL: sub32mr_legacy:
830a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
831a9e8a3a1SShengchen Kan; NF-NEXT:    subl %esi, (%rdi) # encoding: [0x29,0x37]
832a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
8331fe7bdb8SShengchen Kanentry:
8341fe7bdb8SShengchen Kan  %t= load i32, ptr %a
8351fe7bdb8SShengchen Kan  %sub = sub i32 %t, %b
8361fe7bdb8SShengchen Kan  store i32 %sub, ptr %a
8371fe7bdb8SShengchen Kan  ret void
8381fe7bdb8SShengchen Kan}
8391fe7bdb8SShengchen Kan
8401fe7bdb8SShengchen Kandefine void @sub64mr_legacy(ptr %a, i64 noundef %b) {
8411fe7bdb8SShengchen Kan; CHECK-LABEL: sub64mr_legacy:
8421fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
843f6617091SXinWang10; CHECK-NEXT:    subq %rsi, (%rdi) # encoding: [0x48,0x29,0x37]
844f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
845a9e8a3a1SShengchen Kan;
846a9e8a3a1SShengchen Kan; NF-LABEL: sub64mr_legacy:
847a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
848a9e8a3a1SShengchen Kan; NF-NEXT:    subq %rsi, (%rdi) # encoding: [0x48,0x29,0x37]
849a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
8501fe7bdb8SShengchen Kanentry:
8511fe7bdb8SShengchen Kan  %t= load i64, ptr %a
8521fe7bdb8SShengchen Kan  %sub = sub i64 %t, %b
8531fe7bdb8SShengchen Kan  store i64 %sub, ptr %a
8541fe7bdb8SShengchen Kan  ret void
8551fe7bdb8SShengchen Kan}
8561fe7bdb8SShengchen Kan
8571fe7bdb8SShengchen Kandefine void @sub8mi_legacy(ptr %a) {
8581fe7bdb8SShengchen Kan; CHECK-LABEL: sub8mi_legacy:
8591fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
860f6617091SXinWang10; CHECK-NEXT:    addb $-123, (%rdi) # encoding: [0x80,0x07,0x85]
861f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
862a9e8a3a1SShengchen Kan;
863a9e8a3a1SShengchen Kan; NF-LABEL: sub8mi_legacy:
864a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
865a9e8a3a1SShengchen Kan; NF-NEXT:    addb $-123, (%rdi) # encoding: [0x80,0x07,0x85]
866a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
8671fe7bdb8SShengchen Kanentry:
8681fe7bdb8SShengchen Kan  %t= load i8, ptr %a
8691fe7bdb8SShengchen Kan  %sub = sub nsw i8 %t, 123
8701fe7bdb8SShengchen Kan  store i8 %sub, ptr %a
8711fe7bdb8SShengchen Kan  ret void
8721fe7bdb8SShengchen Kan}
8731fe7bdb8SShengchen Kan
8741fe7bdb8SShengchen Kandefine void @sub16mi_legacy(ptr %a) {
8751fe7bdb8SShengchen Kan; CHECK-LABEL: sub16mi_legacy:
8761fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
877f6617091SXinWang10; CHECK-NEXT:    addw $-1234, (%rdi) # encoding: [0x66,0x81,0x07,0x2e,0xfb]
878f6617091SXinWang10; CHECK-NEXT:    # imm = 0xFB2E
879f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
880a9e8a3a1SShengchen Kan;
881a9e8a3a1SShengchen Kan; NF-LABEL: sub16mi_legacy:
882a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
883a9e8a3a1SShengchen Kan; NF-NEXT:    addw $-1234, (%rdi) # encoding: [0x66,0x81,0x07,0x2e,0xfb]
884a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0xFB2E
885a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
8861fe7bdb8SShengchen Kanentry:
8871fe7bdb8SShengchen Kan  %t= load i16, ptr %a
8881fe7bdb8SShengchen Kan  %sub = sub nsw i16 %t, 1234
8891fe7bdb8SShengchen Kan  store i16 %sub, ptr %a
8901fe7bdb8SShengchen Kan  ret void
8911fe7bdb8SShengchen Kan}
8921fe7bdb8SShengchen Kan
8931fe7bdb8SShengchen Kandefine void @sub32mi_legacy(ptr %a) {
8941fe7bdb8SShengchen Kan; CHECK-LABEL: sub32mi_legacy:
8951fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
896f6617091SXinWang10; CHECK-NEXT:    addl $-123456, (%rdi) # encoding: [0x81,0x07,0xc0,0x1d,0xfe,0xff]
897f6617091SXinWang10; CHECK-NEXT:    # imm = 0xFFFE1DC0
898f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
899a9e8a3a1SShengchen Kan;
900a9e8a3a1SShengchen Kan; NF-LABEL: sub32mi_legacy:
901a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
902a9e8a3a1SShengchen Kan; NF-NEXT:    addl $-123456, (%rdi) # encoding: [0x81,0x07,0xc0,0x1d,0xfe,0xff]
903a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0xFFFE1DC0
904a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
9051fe7bdb8SShengchen Kanentry:
9061fe7bdb8SShengchen Kan  %t= load i32, ptr %a
9071fe7bdb8SShengchen Kan  %sub = sub nsw i32 %t, 123456
9081fe7bdb8SShengchen Kan  store i32 %sub, ptr %a
9091fe7bdb8SShengchen Kan  ret void
9101fe7bdb8SShengchen Kan}
9111fe7bdb8SShengchen Kan
9121fe7bdb8SShengchen Kandefine void @sub64mi_legacy(ptr %a) {
9131fe7bdb8SShengchen Kan; CHECK-LABEL: sub64mi_legacy:
9141fe7bdb8SShengchen Kan; CHECK:       # %bb.0: # %entry
915f6617091SXinWang10; CHECK-NEXT:    addq $-123456, (%rdi) # encoding: [0x48,0x81,0x07,0xc0,0x1d,0xfe,0xff]
916f6617091SXinWang10; CHECK-NEXT:    # imm = 0xFFFE1DC0
917f6617091SXinWang10; CHECK-NEXT:    retq # encoding: [0xc3]
918a9e8a3a1SShengchen Kan;
919a9e8a3a1SShengchen Kan; NF-LABEL: sub64mi_legacy:
920a9e8a3a1SShengchen Kan; NF:       # %bb.0: # %entry
921a9e8a3a1SShengchen Kan; NF-NEXT:    addq $-123456, (%rdi) # encoding: [0x48,0x81,0x07,0xc0,0x1d,0xfe,0xff]
922a9e8a3a1SShengchen Kan; NF-NEXT:    # imm = 0xFFFE1DC0
923a9e8a3a1SShengchen Kan; NF-NEXT:    retq # encoding: [0xc3]
9241fe7bdb8SShengchen Kanentry:
9251fe7bdb8SShengchen Kan  %t= load i64, ptr %a
9261fe7bdb8SShengchen Kan  %sub = sub nsw i64 %t, 123456
9271fe7bdb8SShengchen Kan  store i64 %sub, ptr %a
9281fe7bdb8SShengchen Kan  ret void
9291fe7bdb8SShengchen Kan}
930