284 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs | FileCheck --check-prefix=NF %s4; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -x86-enable-apx-for-relocation=true -verify-machineinstrs | FileCheck --check-prefix=NF %s5 6define i8 @inc8r(i8 noundef %a) {7; CHECK-LABEL: inc8r:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: incb %dil, %al10; CHECK-NEXT: retq11;12; NF-LABEL: inc8r:13; NF: # %bb.0: # %entry14; NF-NEXT: {nf} incb %dil, %al15; NF-NEXT: retq16entry:17 %inc = add i8 %a, 118 ret i8 %inc19}20 21define i16 @inc16r(i16 noundef %a) {22; CHECK-LABEL: inc16r:23; CHECK: # %bb.0: # %entry24; CHECK-NEXT: incw %di, %ax25; CHECK-NEXT: retq26;27; NF-LABEL: inc16r:28; NF: # %bb.0: # %entry29; NF-NEXT: {nf} incw %di, %ax30; NF-NEXT: retq31entry:32 %inc = add i16 %a, 133 ret i16 %inc34}35 36define i32 @inc32r(i32 noundef %a) {37; CHECK-LABEL: inc32r:38; CHECK: # %bb.0: # %entry39; CHECK-NEXT: incl %edi, %eax40; CHECK-NEXT: retq41;42; NF-LABEL: inc32r:43; NF: # %bb.0: # %entry44; NF-NEXT: {nf} incl %edi, %eax45; NF-NEXT: retq46entry:47 %inc = add i32 %a, 148 ret i32 %inc49}50 51define i64 @inc64r(i64 noundef %a) {52; CHECK-LABEL: inc64r:53; CHECK: # %bb.0: # %entry54; CHECK-NEXT: incq %rdi, %rax55; CHECK-NEXT: retq56;57; NF-LABEL: inc64r:58; NF: # %bb.0: # %entry59; NF-NEXT: {nf} incq %rdi, %rax60; NF-NEXT: retq61entry:62 %inc = add i64 %a, 163 ret i64 %inc64}65 66define i8 @inc8m(ptr %ptr) {67; CHECK-LABEL: inc8m:68; CHECK: # %bb.0: # %entry69; CHECK-NEXT: incb (%rdi), %al70; CHECK-NEXT: retq71;72; NF-LABEL: inc8m:73; NF: # %bb.0: # %entry74; NF-NEXT: {nf} incb (%rdi), %al75; NF-NEXT: retq76entry:77 %a = load i8, ptr %ptr78 %inc = add i8 %a, 179 ret i8 %inc80}81 82define i16 @inc16m(ptr %ptr) {83; CHECK-LABEL: inc16m:84; CHECK: # %bb.0: # %entry85; CHECK-NEXT: incw (%rdi), %ax86; CHECK-NEXT: retq87;88; NF-LABEL: inc16m:89; NF: # %bb.0: # %entry90; NF-NEXT: {nf} incw (%rdi), %ax91; NF-NEXT: retq92entry:93 %a = load i16, ptr %ptr94 %inc = add i16 %a, 195 ret i16 %inc96}97 98define i32 @inc32m(ptr %ptr) {99; CHECK-LABEL: inc32m:100; CHECK: # %bb.0: # %entry101; CHECK-NEXT: incl (%rdi), %eax102; CHECK-NEXT: retq103;104; NF-LABEL: inc32m:105; NF: # %bb.0: # %entry106; NF-NEXT: {nf} incl (%rdi), %eax107; NF-NEXT: retq108entry:109 %a = load i32, ptr %ptr110 %inc = add i32 %a, 1111 ret i32 %inc112}113 114define i64 @inc64m(ptr %ptr) {115; CHECK-LABEL: inc64m:116; CHECK: # %bb.0: # %entry117; CHECK-NEXT: incq (%rdi), %rax118; CHECK-NEXT: retq119;120; NF-LABEL: inc64m:121; NF: # %bb.0: # %entry122; NF-NEXT: {nf} incq (%rdi), %rax123; NF-NEXT: retq124entry:125 %a = load i64, ptr %ptr126 %inc = add i64 %a, 1127 ret i64 %inc128}129 130define i8 @uinc8r(i8 noundef %a) {131; CHECK-LABEL: uinc8r:132; CHECK: # %bb.0: # %entry133; CHECK-NEXT: incb %dil, %al134; CHECK-NEXT: movzbl %al, %eax135; CHECK-NEXT: movl $255, %ecx136; CHECK-NEXT: cmovel %ecx, %eax137; CHECK-NEXT: # kill: def $al killed $al killed $eax138; CHECK-NEXT: retq139;140; NF-LABEL: uinc8r:141; NF: # %bb.0: # %entry142; NF-NEXT: incb %dil, %al143; NF-NEXT: movzbl %al, %eax144; NF-NEXT: movl $255, %ecx145; NF-NEXT: cmovel %ecx, %eax146; NF-NEXT: # kill: def $al killed $al killed $eax147; NF-NEXT: retq148entry:149 %inc = call i8 @llvm.uadd.sat.i8(i8 %a, i8 1)150 ret i8 %inc151}152 153define i16 @uinc16r(i16 noundef %a) {154; CHECK-LABEL: uinc16r:155; CHECK: # %bb.0: # %entry156; CHECK-NEXT: incw %di, %ax157; CHECK-NEXT: movl $65535, %ecx # imm = 0xFFFF158; CHECK-NEXT: cmovel %ecx, %eax159; CHECK-NEXT: # kill: def $ax killed $ax killed $eax160; CHECK-NEXT: retq161;162; NF-LABEL: uinc16r:163; NF: # %bb.0: # %entry164; NF-NEXT: incw %di, %ax165; NF-NEXT: movl $65535, %ecx # imm = 0xFFFF166; NF-NEXT: cmovel %ecx, %eax167; NF-NEXT: # kill: def $ax killed $ax killed $eax168; NF-NEXT: retq169entry:170 %inc = call i16 @llvm.uadd.sat.i16(i16 %a, i16 1)171 ret i16 %inc172}173 174define i32 @uinc32r(i32 noundef %a) {175; CHECK-LABEL: uinc32r:176; CHECK: # %bb.0: # %entry177; CHECK-NEXT: incl %edi, %eax178; CHECK-NEXT: movl $-1, %ecx179; CHECK-NEXT: cmovel %ecx, %eax180; CHECK-NEXT: retq181;182; NF-LABEL: uinc32r:183; NF: # %bb.0: # %entry184; NF-NEXT: incl %edi, %eax185; NF-NEXT: movl $-1, %ecx186; NF-NEXT: cmovel %ecx, %eax187; NF-NEXT: retq188entry:189 %inc = call i32 @llvm.uadd.sat.i32(i32 %a, i32 1)190 ret i32 %inc191}192 193define i64 @uinc64r(i64 noundef %a) {194; CHECK-LABEL: uinc64r:195; CHECK: # %bb.0: # %entry196; CHECK-NEXT: incq %rdi, %rax197; CHECK-NEXT: movq $-1, %rcx198; CHECK-NEXT: cmoveq %rcx, %rax199; CHECK-NEXT: retq200;201; NF-LABEL: uinc64r:202; NF: # %bb.0: # %entry203; NF-NEXT: incq %rdi, %rax204; NF-NEXT: movq $-1, %rcx205; NF-NEXT: cmoveq %rcx, %rax206; NF-NEXT: retq207entry:208 %inc = call i64 @llvm.uadd.sat.i64(i64 %a, i64 1)209 ret i64 %inc210}211 212declare i8 @llvm.uadd.sat.i8(i8, i8)213declare i16 @llvm.uadd.sat.i16(i16, i16)214declare i32 @llvm.uadd.sat.i32(i32, i32)215declare i64 @llvm.uadd.sat.i64(i64, i64)216 217define void @inc8m_legacy(ptr %ptr) {218; CHECK-LABEL: inc8m_legacy:219; CHECK: # %bb.0: # %entry220; CHECK-NEXT: incb (%rdi)221; CHECK-NEXT: retq222;223; NF-LABEL: inc8m_legacy:224; NF: # %bb.0: # %entry225; NF-NEXT: incb (%rdi)226; NF-NEXT: retq227entry:228 %a = load i8, ptr %ptr229 %inc = add i8 %a, 1230 store i8 %inc, ptr %ptr231 ret void232}233 234define void @inc16m_legacy(ptr %ptr) {235; CHECK-LABEL: inc16m_legacy:236; CHECK: # %bb.0: # %entry237; CHECK-NEXT: incw (%rdi)238; CHECK-NEXT: retq239;240; NF-LABEL: inc16m_legacy:241; NF: # %bb.0: # %entry242; NF-NEXT: incw (%rdi)243; NF-NEXT: retq244entry:245 %a = load i16, ptr %ptr246 %inc = add i16 %a, 1247 store i16 %inc, ptr %ptr248 ret void249}250 251define void @inc32m_legacy(ptr %ptr) {252; CHECK-LABEL: inc32m_legacy:253; CHECK: # %bb.0: # %entry254; CHECK-NEXT: incl (%rdi)255; CHECK-NEXT: retq256;257; NF-LABEL: inc32m_legacy:258; NF: # %bb.0: # %entry259; NF-NEXT: incl (%rdi)260; NF-NEXT: retq261entry:262 %a = load i32, ptr %ptr263 %inc = add i32 %a, 1264 store i32 %inc, ptr %ptr265 ret void266}267 268define void @inc64m_legacy(ptr %ptr) {269; CHECK-LABEL: inc64m_legacy:270; CHECK: # %bb.0: # %entry271; CHECK-NEXT: incq (%rdi)272; CHECK-NEXT: retq273;274; NF-LABEL: inc64m_legacy:275; NF: # %bb.0: # %entry276; NF-NEXT: incq (%rdi)277; NF-NEXT: retq278entry:279 %a = load i64, ptr %ptr280 %inc = add i64 %a, 1281 store i64 %inc, ptr %ptr282 ret void283}284