brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · 8f8a391 Raw
334 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 --show-mc-encoding | FileCheck --check-prefix=NF %s5 6define i8 @neg8r(i8 noundef %a) {7; CHECK-LABEL: neg8r:8; CHECK:       # %bb.0: # %entry9; CHECK-NEXT:    negb %dil, %al10; CHECK-NEXT:    retq11;12; NF-LABEL: neg8r:13; NF:       # %bb.0: # %entry14; NF-NEXT:    {nf} negb %dil, %al15; NF-NEXT:    retq16entry:17  %neg = sub i8 0, %a18  ret i8 %neg19}20 21define i16 @neg16r(i16 noundef %a) {22; CHECK-LABEL: neg16r:23; CHECK:       # %bb.0: # %entry24; CHECK-NEXT:    negw %di, %ax25; CHECK-NEXT:    retq26;27; NF-LABEL: neg16r:28; NF:       # %bb.0: # %entry29; NF-NEXT:    {nf} negw %di, %ax30; NF-NEXT:    retq31entry:32  %neg = sub i16 0, %a33  ret i16 %neg34}35 36define i32 @neg32r(i32 noundef %a) {37; CHECK-LABEL: neg32r:38; CHECK:       # %bb.0: # %entry39; CHECK-NEXT:    negl %edi, %eax40; CHECK-NEXT:    retq41;42; NF-LABEL: neg32r:43; NF:       # %bb.0: # %entry44; NF-NEXT:    {nf} negl %edi, %eax45; NF-NEXT:    retq46entry:47  %neg = sub i32 0, %a48  ret i32 %neg49}50 51define i64 @neg64r(i64 noundef %a) {52; CHECK-LABEL: neg64r:53; CHECK:       # %bb.0: # %entry54; CHECK-NEXT:    negq %rdi, %rax55; CHECK-NEXT:    retq56;57; NF-LABEL: neg64r:58; NF:       # %bb.0: # %entry59; NF-NEXT:    {nf} negq %rdi, %rax60; NF-NEXT:    retq61entry:62  %neg = sub i64 0, %a63  ret i64 %neg64}65 66define i8 @neg8m(ptr %ptr) {67; CHECK-LABEL: neg8m:68; CHECK:       # %bb.0: # %entry69; CHECK-NEXT:    negb (%rdi), %al70; CHECK-NEXT:    retq71;72; NF-LABEL: neg8m:73; NF:       # %bb.0: # %entry74; NF-NEXT:    {nf} negb (%rdi), %al75; NF-NEXT:    retq76entry:77  %a = load i8, ptr %ptr78  %neg = sub i8 0, %a79  ret i8 %neg80}81 82define i16 @neg16m(ptr %ptr) {83; CHECK-LABEL: neg16m:84; CHECK:       # %bb.0: # %entry85; CHECK-NEXT:    negw (%rdi), %ax86; CHECK-NEXT:    retq87;88; NF-LABEL: neg16m:89; NF:       # %bb.0: # %entry90; NF-NEXT:    {nf} negw (%rdi), %ax91; NF-NEXT:    retq92entry:93  %a = load i16, ptr %ptr94  %neg = sub i16 0, %a95  ret i16 %neg96}97 98define i32 @neg32m(ptr %ptr) {99; CHECK-LABEL: neg32m:100; CHECK:       # %bb.0: # %entry101; CHECK-NEXT:    negl (%rdi), %eax102; CHECK-NEXT:    retq103;104; NF-LABEL: neg32m:105; NF:       # %bb.0: # %entry106; NF-NEXT:    {nf} negl (%rdi), %eax107; NF-NEXT:    retq108entry:109  %a = load i32, ptr %ptr110  %neg = sub i32 0, %a111  ret i32 %neg112}113 114define i64 @neg64m(ptr %ptr) {115; CHECK-LABEL: neg64m:116; CHECK:       # %bb.0: # %entry117; CHECK-NEXT:    negq (%rdi), %rax118; CHECK-NEXT:    retq119;120; NF-LABEL: neg64m:121; NF:       # %bb.0: # %entry122; NF-NEXT:    {nf} negq (%rdi), %rax123; NF-NEXT:    retq124entry:125  %a = load i64, ptr %ptr126  %neg = sub i64 0, %a127  ret i64 %neg128}129 130define i8 @uneg8r(i8 noundef %a) {131; CHECK-LABEL: uneg8r:132; CHECK:       # %bb.0: # %entry133; CHECK-NEXT:    negb %dil, %al134; CHECK-NEXT:    retq135;136; NF-LABEL: uneg8r:137; NF:       # %bb.0: # %entry138; NF-NEXT:    {nf} negb %dil, %al139; NF-NEXT:    retq140entry:141  %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 0, i8 %a)142  %neg = extractvalue {i8, i1} %t, 0143  ret i8 %neg144}145 146define i16 @uneg16r(i16 noundef %a) {147; CHECK-LABEL: uneg16r:148; CHECK:       # %bb.0: # %entry149; CHECK-NEXT:    negw %di, %ax150; CHECK-NEXT:    retq151;152; NF-LABEL: uneg16r:153; NF:       # %bb.0: # %entry154; NF-NEXT:    {nf} negw %di, %ax155; NF-NEXT:    retq156entry:157  %t = call {i16, i1} @llvm.usub.with.overflow.i16(i16 0, i16 %a)158  %neg = extractvalue {i16, i1} %t, 0159  ret i16 %neg160}161 162define i32 @uneg32r(i32 noundef %a) {163; CHECK-LABEL: uneg32r:164; CHECK:       # %bb.0: # %entry165; CHECK-NEXT:    negl %edi, %eax166; CHECK-NEXT:    retq167;168; NF-LABEL: uneg32r:169; NF:       # %bb.0: # %entry170; NF-NEXT:    {nf} negl %edi, %eax171; NF-NEXT:    retq172entry:173  %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 0, i32 %a)174  %neg = extractvalue {i32, i1} %t, 0175  ret i32 %neg176}177 178define i64 @uneg64r(i64 noundef %a) {179; CHECK-LABEL: uneg64r:180; CHECK:       # %bb.0: # %entry181; CHECK-NEXT:    negq %rdi, %rax182; CHECK-NEXT:    retq183;184; NF-LABEL: uneg64r:185; NF:       # %bb.0: # %entry186; NF-NEXT:    {nf} negq %rdi, %rax187; NF-NEXT:    retq188entry:189  %t = call {i64, i1} @llvm.usub.with.overflow.i64(i64 0, i64 %a)190  %neg = extractvalue {i64, i1} %t, 0191  ret i64 %neg192}193 194define i8 @uneg8m(ptr %ptr) {195; CHECK-LABEL: uneg8m:196; CHECK:       # %bb.0: # %entry197; CHECK-NEXT:    negb (%rdi), %al198; CHECK-NEXT:    retq199;200; NF-LABEL: uneg8m:201; NF:       # %bb.0: # %entry202; NF-NEXT:    {nf} negb (%rdi), %al203; NF-NEXT:    retq204entry:205  %a = load i8, ptr %ptr206  %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 0, i8 %a)207  %neg = extractvalue {i8, i1} %t, 0208  ret i8 %neg209}210 211define i16 @uneg16m(ptr %ptr) {212; CHECK-LABEL: uneg16m:213; CHECK:       # %bb.0: # %entry214; CHECK-NEXT:    negw (%rdi), %ax215; CHECK-NEXT:    retq216;217; NF-LABEL: uneg16m:218; NF:       # %bb.0: # %entry219; NF-NEXT:    {nf} negw (%rdi), %ax220; NF-NEXT:    retq221entry:222  %a = load i16, ptr %ptr223  %t = call {i16, i1} @llvm.usub.with.overflow.i16(i16 0, i16 %a)224  %neg = extractvalue {i16, i1} %t, 0225  ret i16 %neg226}227 228define i32 @uneg32m(ptr %ptr) {229; CHECK-LABEL: uneg32m:230; CHECK:       # %bb.0: # %entry231; CHECK-NEXT:    negl (%rdi), %eax232; CHECK-NEXT:    retq233;234; NF-LABEL: uneg32m:235; NF:       # %bb.0: # %entry236; NF-NEXT:    {nf} negl (%rdi), %eax237; NF-NEXT:    retq238entry:239  %a = load i32, ptr %ptr240  %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 0, i32 %a)241  %neg = extractvalue {i32, i1} %t, 0242  ret i32 %neg243}244 245define i64 @uneg64m(ptr %ptr) {246; CHECK-LABEL: uneg64m:247; CHECK:       # %bb.0: # %entry248; CHECK-NEXT:    negq (%rdi), %rax249; CHECK-NEXT:    retq250;251; NF-LABEL: uneg64m:252; NF:       # %bb.0: # %entry253; NF-NEXT:    {nf} negq (%rdi), %rax254; NF-NEXT:    retq255entry:256  %a = load i64, ptr %ptr257  %t = call {i64, i1} @llvm.usub.with.overflow.i64(i64 0, i64 %a)258  %neg = extractvalue {i64, i1} %t, 0259  ret i64 %neg260}261 262declare {i8, i1} @llvm.usub.with.overflow.i8(i8, i8)263declare {i16, i1} @llvm.usub.with.overflow.i16(i16, i16)264declare {i32, i1} @llvm.usub.with.overflow.i32(i32, i32)265declare {i64, i1} @llvm.usub.with.overflow.i64(i64, i64)266 267define void @neg8m_legacy(ptr %ptr) {268; CHECK-LABEL: neg8m_legacy:269; CHECK:       # %bb.0: # %entry270; CHECK-NEXT:    negb (%rdi)271; CHECK-NEXT:    retq272;273; NF-LABEL: neg8m_legacy:274; NF:       # %bb.0: # %entry275; NF-NEXT:    negb (%rdi)276; NF-NEXT:    retq277entry:278  %a = load i8, ptr %ptr279  %neg = sub i8 0, %a280  store i8 %neg, ptr %ptr281  ret void282}283 284define void @neg16m_legacy(ptr %ptr) {285; CHECK-LABEL: neg16m_legacy:286; CHECK:       # %bb.0: # %entry287; CHECK-NEXT:    negw (%rdi)288; CHECK-NEXT:    retq289;290; NF-LABEL: neg16m_legacy:291; NF:       # %bb.0: # %entry292; NF-NEXT:    negw (%rdi)293; NF-NEXT:    retq294entry:295  %a = load i16, ptr %ptr296  %neg = sub i16 0, %a297  store i16 %neg, ptr %ptr298  ret void299}300 301define void @neg32m_legacy(ptr %ptr) {302; CHECK-LABEL: neg32m_legacy:303; CHECK:       # %bb.0: # %entry304; CHECK-NEXT:    negl (%rdi)305; CHECK-NEXT:    retq306;307; NF-LABEL: neg32m_legacy:308; NF:       # %bb.0: # %entry309; NF-NEXT:    negl (%rdi)310; NF-NEXT:    retq311entry:312  %a = load i32, ptr %ptr313  %neg = sub i32 0, %a314  store i32 %neg, ptr %ptr315  ret void316}317 318define void @neg64m_legacy(ptr %ptr) {319; CHECK-LABEL: neg64m_legacy:320; CHECK:       # %bb.0: # %entry321; CHECK-NEXT:    negq (%rdi)322; CHECK-NEXT:    retq323;324; NF-LABEL: neg64m_legacy:325; NF:       # %bb.0: # %entry326; NF-NEXT:    negq (%rdi)327; NF-NEXT:    retq328entry:329  %a = load i64, ptr %ptr330  %neg = sub i64 0, %a331  store i64 %neg, ptr %ptr332  ret void333}334