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