brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 671edf8 Raw
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