brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 34cc9a9 Raw
203 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 i16 @mul16rr(i16 noundef %a, i16 noundef %b) {7; CHECK-LABEL: mul16rr:8; CHECK:       # %bb.0: # %entry9; CHECK-NEXT:    imull %esi, %edi, %eax10; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax11; CHECK-NEXT:    retq12;13; NF-LABEL: mul16rr:14; NF:       # %bb.0: # %entry15; NF-NEXT:    {nf} imull %esi, %edi, %eax16; NF-NEXT:    # kill: def $ax killed $ax killed $eax17; NF-NEXT:    retq18entry:19  %mul = mul i16 %a, %b20  ret i16 %mul21}22 23define i32 @mul32rr(i32 noundef %a, i32 noundef %b) {24; CHECK-LABEL: mul32rr:25; CHECK:       # %bb.0: # %entry26; CHECK-NEXT:    imull %esi, %edi, %eax27; CHECK-NEXT:    retq28;29; NF-LABEL: mul32rr:30; NF:       # %bb.0: # %entry31; NF-NEXT:    {nf} imull %esi, %edi, %eax32; NF-NEXT:    retq33entry:34  %mul = mul i32 %a, %b35  ret i32 %mul36}37 38define i64 @mul64rr(i64 noundef %a, i64 noundef %b) {39; CHECK-LABEL: mul64rr:40; CHECK:       # %bb.0: # %entry41; CHECK-NEXT:    imulq %rsi, %rdi, %rax42; CHECK-NEXT:    retq43;44; NF-LABEL: mul64rr:45; NF:       # %bb.0: # %entry46; NF-NEXT:    {nf} imulq %rsi, %rdi, %rax47; NF-NEXT:    retq48entry:49  %mul = mul i64 %a, %b50  ret i64 %mul51}52 53define i16 @smul16rr(i16 noundef %a, i16 noundef %b) {54; CHECK-LABEL: smul16rr:55; CHECK:       # %bb.0: # %entry56; CHECK-NEXT:    imulw %si, %di, %ax57; CHECK-NEXT:    retq58;59; NF-LABEL: smul16rr:60; NF:       # %bb.0: # %entry61; NF-NEXT:    {nf} imulw %si, %di, %ax62; NF-NEXT:    retq63entry:64  %t = call {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)65  %mul = extractvalue {i16, i1} %t, 066  ret i16 %mul67}68 69define i32 @smul32rr(i32 noundef %a, i32 noundef %b) {70; CHECK-LABEL: smul32rr:71; CHECK:       # %bb.0: # %entry72; CHECK-NEXT:    imull %esi, %edi, %eax73; CHECK-NEXT:    retq74;75; NF-LABEL: smul32rr:76; NF:       # %bb.0: # %entry77; NF-NEXT:    {nf} imull %esi, %edi, %eax78; NF-NEXT:    retq79entry:80  %t = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)81  %mul = extractvalue {i32, i1} %t, 082  ret i32 %mul83}84 85define i64 @smul64rr(i64 noundef %a, i64 noundef %b) {86; CHECK-LABEL: smul64rr:87; CHECK:       # %bb.0: # %entry88; CHECK-NEXT:    imulq %rsi, %rdi, %rax89; CHECK-NEXT:    retq90;91; NF-LABEL: smul64rr:92; NF:       # %bb.0: # %entry93; NF-NEXT:    {nf} imulq %rsi, %rdi, %rax94; NF-NEXT:    retq95entry:96  %t = call {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)97  %mul = extractvalue {i64, i1} %t, 098  ret i64 %mul99}100 101define i16 @mul16rm(i16 noundef %a, ptr %ptr) {102; CHECK-LABEL: mul16rm:103; CHECK:       # %bb.0: # %entry104; CHECK-NEXT:    imulw (%rsi), %di, %ax105; CHECK-NEXT:    retq106;107; NF-LABEL: mul16rm:108; NF:       # %bb.0: # %entry109; NF-NEXT:    {nf} imulw (%rsi), %di, %ax110; NF-NEXT:    retq111entry:112  %b = load i16, ptr %ptr113  %mul = mul i16 %a, %b114  ret i16 %mul115}116 117define i32 @mul32rm(i32 noundef %a, ptr %ptr) {118; CHECK-LABEL: mul32rm:119; CHECK:       # %bb.0: # %entry120; CHECK-NEXT:    imull (%rsi), %edi, %eax121; CHECK-NEXT:    retq122;123; NF-LABEL: mul32rm:124; NF:       # %bb.0: # %entry125; NF-NEXT:    {nf} imull (%rsi), %edi, %eax126; NF-NEXT:    retq127entry:128  %b = load i32, ptr %ptr129  %mul = mul i32 %a, %b130  ret i32 %mul131}132 133define i64 @mul64rm(i64 noundef %a, ptr %ptr) {134; CHECK-LABEL: mul64rm:135; CHECK:       # %bb.0: # %entry136; CHECK-NEXT:    imulq (%rsi), %rdi, %rax137; CHECK-NEXT:    retq138;139; NF-LABEL: mul64rm:140; NF:       # %bb.0: # %entry141; NF-NEXT:    {nf} imulq (%rsi), %rdi, %rax142; NF-NEXT:    retq143entry:144  %b = load i64, ptr %ptr145  %mul = mul i64 %a, %b146  ret i64 %mul147}148 149define i16 @smul16rm(i16 noundef %a, ptr %ptr) {150; CHECK-LABEL: smul16rm:151; CHECK:       # %bb.0: # %entry152; CHECK-NEXT:    imulw (%rsi), %di, %ax153; CHECK-NEXT:    retq154;155; NF-LABEL: smul16rm:156; NF:       # %bb.0: # %entry157; NF-NEXT:    {nf} imulw (%rsi), %di, %ax158; NF-NEXT:    retq159entry:160  %b = load i16, ptr %ptr161  %t = call {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b)162  %mul = extractvalue {i16, i1} %t, 0163  ret i16 %mul164}165 166define i32 @smul32rm(i32 noundef %a, ptr %ptr) {167; CHECK-LABEL: smul32rm:168; CHECK:       # %bb.0: # %entry169; CHECK-NEXT:    imull (%rsi), %edi, %eax170; CHECK-NEXT:    retq171;172; NF-LABEL: smul32rm:173; NF:       # %bb.0: # %entry174; NF-NEXT:    {nf} imull (%rsi), %edi, %eax175; NF-NEXT:    retq176entry:177  %b = load i32, ptr %ptr178  %t = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b)179  %mul = extractvalue {i32, i1} %t, 0180  ret i32 %mul181}182 183define i64 @smul64rm(i64 noundef %a, ptr %ptr) {184; CHECK-LABEL: smul64rm:185; CHECK:       # %bb.0: # %entry186; CHECK-NEXT:    imulq (%rsi), %rdi, %rax187; CHECK-NEXT:    retq188;189; NF-LABEL: smul64rm:190; NF:       # %bb.0: # %entry191; NF-NEXT:    {nf} imulq (%rsi), %rdi, %rax192; NF-NEXT:    retq193entry:194  %b = load i64, ptr %ptr195  %t = call {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b)196  %mul = extractvalue {i64, i1} %t, 0197  ret i64 %mul198}199 200declare { i16, i1 } @llvm.smul.with.overflow.i16(i16, i16) nounwind readnone201declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone202declare { i64, i1 } @llvm.smul.with.overflow.i64(i64, i64) nounwind readnone203