brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 9f86d24 Raw
263 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; Test that library calls are emitted for LLVM IR intrinsics3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6define half @f1(half %x, i16 %y) nounwind {7; CHECK-LABEL: f1:8; CHECK:       # %bb.0:9; CHECK-NEXT:    stmg %r13, %r15, 104(%r15)10; CHECK-NEXT:    aghi %r15, -16011; CHECK-NEXT:    lhr %r13, %r212; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT13; CHECK-NEXT:    llgfr %r2, %r1314; CHECK-NEXT:    brasl %r14, __powisf2@PLT15; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT16; CHECK-NEXT:    lmg %r13, %r15, 264(%r15)17; CHECK-NEXT:    br %r1418  %tmp = call half @llvm.powi.f16.i16(half %x, i16 %y)19  ret half %tmp20}21 22define half @f2(half %x, half %y) nounwind {23; CHECK-LABEL: f2:24; CHECK:       # %bb.0:25; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)26; CHECK-NEXT:    aghi %r15, -17627; CHECK-NEXT:    std %f8, 168(%r15) # 8-byte Spill28; CHECK-NEXT:    std %f9, 160(%r15) # 8-byte Spill29; CHECK-NEXT:    ler %f8, %f230; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT31; CHECK-NEXT:    ler %f9, %f032; CHECK-NEXT:    ler %f0, %f833; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT34; CHECK-NEXT:    ler %f2, %f035; CHECK-NEXT:    ler %f0, %f936; CHECK-NEXT:    brasl %r14, powf@PLT37; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT38; CHECK-NEXT:    ld %f8, 168(%r15) # 8-byte Reload39; CHECK-NEXT:    ld %f9, 160(%r15) # 8-byte Reload40; CHECK-NEXT:    lmg %r14, %r15, 288(%r15)41; CHECK-NEXT:    br %r1442  %tmp = call half @llvm.pow.f16(half %x, half %y)43  ret half %tmp44}45 46define half @f3(half %x) nounwind {47; CHECK-LABEL: f3:48; CHECK:       # %bb.0:49; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)50; CHECK-NEXT:    aghi %r15, -16051; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT52; CHECK-NEXT:    brasl %r14, sinf@PLT53; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT54; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)55; CHECK-NEXT:    br %r1456  %tmp = call half @llvm.sin.f16(half %x)57  ret half %tmp58}59 60define half @f4(half %x) nounwind {61; CHECK-LABEL: f4:62; CHECK:       # %bb.0:63; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)64; CHECK-NEXT:    aghi %r15, -16065; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT66; CHECK-NEXT:    brasl %r14, cosf@PLT67; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT68; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)69; CHECK-NEXT:    br %r1470  %tmp = call half @llvm.cos.f16(half %x)71  ret half %tmp72}73 74define half @f5(half %x) nounwind {75; CHECK-LABEL: f5:76; CHECK:       # %bb.0:77; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)78; CHECK-NEXT:    aghi %r15, -16079; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT80; CHECK-NEXT:    brasl %r14, expf@PLT81; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT82; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)83; CHECK-NEXT:    br %r1484  %tmp = call half @llvm.exp.f16(half %x)85  ret half %tmp86}87 88define half @f6(half %x) nounwind {89; CHECK-LABEL: f6:90; CHECK:       # %bb.0:91; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)92; CHECK-NEXT:    aghi %r15, -16093; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT94; CHECK-NEXT:    brasl %r14, exp2f@PLT95; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT96; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)97; CHECK-NEXT:    br %r1498  %tmp = call half @llvm.exp2.f16(half %x)99  ret half %tmp100}101 102define half @f7(half %x) nounwind {103; CHECK-LABEL: f7:104; CHECK:       # %bb.0:105; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)106; CHECK-NEXT:    aghi %r15, -160107; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT108; CHECK-NEXT:    brasl %r14, logf@PLT109; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT110; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)111; CHECK-NEXT:    br %r14112  %tmp = call half @llvm.log.f16(half %x)113  ret half %tmp114}115 116define half @f8(half %x) nounwind {117; CHECK-LABEL: f8:118; CHECK:       # %bb.0:119; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)120; CHECK-NEXT:    aghi %r15, -160121; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT122; CHECK-NEXT:    brasl %r14, log2f@PLT123; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT124; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)125; CHECK-NEXT:    br %r14126  %tmp = call half @llvm.log2.f16(half %x)127  ret half %tmp128}129 130define half @f9(half %x) nounwind {131; CHECK-LABEL: f9:132; CHECK:       # %bb.0:133; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)134; CHECK-NEXT:    aghi %r15, -160135; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT136; CHECK-NEXT:    brasl %r14, log10f@PLT137; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT138; CHECK-NEXT:    lmg %r14, %r15, 272(%r15)139; CHECK-NEXT:    br %r14140  %tmp = call half @llvm.log10.f16(half %x)141  ret half %tmp142}143 144define half @f10(half %x, half %y) nounwind {145; CHECK-LABEL: f10:146; CHECK:       # %bb.0:147; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)148; CHECK-NEXT:    aghi %r15, -176149; CHECK-NEXT:    std %f8, 168(%r15) # 8-byte Spill150; CHECK-NEXT:    std %f9, 160(%r15) # 8-byte Spill151; CHECK-NEXT:    ler %f8, %f2152; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT153; CHECK-NEXT:    ler %f9, %f0154; CHECK-NEXT:    ler %f0, %f8155; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT156; CHECK-NEXT:    ler %f2, %f0157; CHECK-NEXT:    ler %f0, %f9158; CHECK-NEXT:    brasl %r14, fminf@PLT159; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT160; CHECK-NEXT:    ld %f8, 168(%r15) # 8-byte Reload161; CHECK-NEXT:    ld %f9, 160(%r15) # 8-byte Reload162; CHECK-NEXT:    lmg %r14, %r15, 288(%r15)163; CHECK-NEXT:    br %r14164  %tmp = call half @llvm.minnum.f16(half %x, half %y)165  ret half %tmp166}167 168define half @f11(half %x, half %y) nounwind {169; CHECK-LABEL: f11:170; CHECK:       # %bb.0:171; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)172; CHECK-NEXT:    aghi %r15, -176173; CHECK-NEXT:    std %f8, 168(%r15) # 8-byte Spill174; CHECK-NEXT:    std %f9, 160(%r15) # 8-byte Spill175; CHECK-NEXT:    ler %f8, %f2176; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT177; CHECK-NEXT:    ler %f9, %f0178; CHECK-NEXT:    ler %f0, %f8179; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT180; CHECK-NEXT:    ler %f2, %f0181; CHECK-NEXT:    ler %f0, %f9182; CHECK-NEXT:    brasl %r14, fmaxf@PLT183; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT184; CHECK-NEXT:    ld %f8, 168(%r15) # 8-byte Reload185; CHECK-NEXT:    ld %f9, 160(%r15) # 8-byte Reload186; CHECK-NEXT:    lmg %r14, %r15, 288(%r15)187; CHECK-NEXT:    br %r14188  %tmp = call half @llvm.maxnum.f16(half %x, half %y)189  ret half %tmp190}191 192; Verify that "nnan" minnum/maxnum calls are transformed to193; compare+select sequences instead of libcalls.194define half @f12(half %x, half %y) nounwind {195; CHECK-LABEL: f12:196; CHECK:       # %bb.0:197; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)198; CHECK-NEXT:    aghi %r15, -176199; CHECK-NEXT:    std %f8, 168(%r15) # 8-byte Spill200; CHECK-NEXT:    std %f9, 160(%r15) # 8-byte Spill201; CHECK-NEXT:    ler %f9, %f0202; CHECK-NEXT:    ler %f0, %f2203; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT204; CHECK-NEXT:    ler %f8, %f0205; CHECK-NEXT:    ler %f0, %f9206; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT207; CHECK-NEXT:    cebr %f0, %f8208; CHECK-NEXT:    jl .LBB11_2209; CHECK-NEXT:  # %bb.1:210; CHECK-NEXT:    ler %f0, %f8211; CHECK-NEXT:  .LBB11_2:212; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT213; CHECK-NEXT:    ld %f8, 168(%r15) # 8-byte Reload214; CHECK-NEXT:    ld %f9, 160(%r15) # 8-byte Reload215; CHECK-NEXT:    lmg %r14, %r15, 288(%r15)216; CHECK-NEXT:    br %r14217  %tmp = call nnan half @llvm.minnum.f16(half %x, half %y)218  ret half %tmp219}220 221define half @f13(half %x, half %y) nounwind {222; CHECK-LABEL: f13:223; CHECK:       # %bb.0:224; CHECK-NEXT:    stmg %r14, %r15, 112(%r15)225; CHECK-NEXT:    aghi %r15, -176226; CHECK-NEXT:    std %f8, 168(%r15) # 8-byte Spill227; CHECK-NEXT:    std %f9, 160(%r15) # 8-byte Spill228; CHECK-NEXT:    ler %f9, %f0229; CHECK-NEXT:    ler %f0, %f2230; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT231; CHECK-NEXT:    ler %f8, %f0232; CHECK-NEXT:    ler %f0, %f9233; CHECK-NEXT:    brasl %r14, __extendhfsf2@PLT234; CHECK-NEXT:    cebr %f0, %f8235; CHECK-NEXT:    jh .LBB12_2236; CHECK-NEXT:  # %bb.1:237; CHECK-NEXT:    ler %f0, %f8238; CHECK-NEXT:  .LBB12_2:239; CHECK-NEXT:    brasl %r14, __truncsfhf2@PLT240; CHECK-NEXT:    ld %f8, 168(%r15) # 8-byte Reload241; CHECK-NEXT:    ld %f9, 160(%r15) # 8-byte Reload242; CHECK-NEXT:    lmg %r14, %r15, 288(%r15)243; CHECK-NEXT:    br %r14244  %tmp = call nnan half @llvm.maxnum.f16(half %x, half %y)245  ret half %tmp246}247 248declare half @llvm.powi.f16.i16(half, i16)249declare half @llvm.pow.f16(half, half)250 251declare half @llvm.sin.f16(half)252declare half @llvm.cos.f16(half)253 254declare half @llvm.exp.f16(half)255declare half @llvm.exp2.f16(half)256 257declare half @llvm.log.f16(half)258declare half @llvm.log2.f16(half)259declare half @llvm.log10.f16(half)260 261declare half @llvm.minnum.f16(half, half)262declare half @llvm.maxnum.f16(half, half)263