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