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