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