brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 5069b9b Raw
346 lines · plain
1; Test that library calls are emitted for LLVM IR intrinsics2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5define float @f1(float %x, i32 %y) {6; CHECK-LABEL: f1:7; CHECK: brasl %r14, __powisf2@PLT8  %tmp = call float @llvm.powi.f32.i32(float %x, i32 %y)9  ret float %tmp10}11 12define double @f2(double %x, i32 %y) {13; CHECK-LABEL: f2:14; CHECK: brasl %r14, __powidf2@PLT15  %tmp = call double @llvm.powi.f64.i32(double %x, i32 %y)16  ret double %tmp17}18 19define fp128 @f3(fp128 %x, i32 %y) {20; CHECK-LABEL: f3:21; CHECK: brasl %r14, __powitf2@PLT22  %tmp = call fp128 @llvm.powi.f128.i32(fp128 %x, i32 %y)23  ret fp128 %tmp24}25 26define float @f4(float %x, float %y) {27; CHECK-LABEL: f4:28; CHECK: brasl %r14, powf@PLT29  %tmp = call float @llvm.pow.f32(float %x, float %y)30  ret float %tmp31}32 33define double @f5(double %x, double %y) {34; CHECK-LABEL: f5:35; CHECK: brasl %r14, pow@PLT36  %tmp = call double @llvm.pow.f64(double %x, double %y)37  ret double %tmp38}39 40define fp128 @f6(fp128 %x, fp128 %y) {41; CHECK-LABEL: f6:42; CHECK: brasl %r14, powl@PLT43  %tmp = call fp128 @llvm.pow.f128(fp128 %x, fp128 %y)44  ret fp128 %tmp45}46 47define float @f7(float %x) {48; CHECK-LABEL: f7:49; CHECK: brasl %r14, sinf@PLT50  %tmp = call float @llvm.sin.f32(float %x)51  ret float %tmp52}53 54define double @f8(double %x) {55; CHECK-LABEL: f8:56; CHECK: brasl %r14, sin@PLT57  %tmp = call double @llvm.sin.f64(double %x)58  ret double %tmp59}60 61define fp128 @f9(fp128 %x) {62; CHECK-LABEL: f9:63; CHECK: brasl %r14, sinl@PLT64  %tmp = call fp128 @llvm.sin.f128(fp128 %x)65  ret fp128 %tmp66}67 68define float @f10(float %x) {69; CHECK-LABEL: f10:70; CHECK: brasl %r14, cosf@PLT71  %tmp = call float @llvm.cos.f32(float %x)72  ret float %tmp73}74 75define double @f11(double %x) {76; CHECK-LABEL: f11:77; CHECK: brasl %r14, cos@PLT78  %tmp = call double @llvm.cos.f64(double %x)79  ret double %tmp80}81 82define fp128 @f12(fp128 %x) {83; CHECK-LABEL: f12:84; CHECK: brasl %r14, cosl@PLT85  %tmp = call fp128 @llvm.cos.f128(fp128 %x)86  ret fp128 %tmp87}88 89define float @f13(float %x) {90; CHECK-LABEL: f13:91; CHECK: brasl %r14, expf@PLT92  %tmp = call float @llvm.exp.f32(float %x)93  ret float %tmp94}95 96define double @f14(double %x) {97; CHECK-LABEL: f14:98; CHECK: brasl %r14, exp@PLT99  %tmp = call double @llvm.exp.f64(double %x)100  ret double %tmp101}102 103define fp128 @f15(fp128 %x) {104; CHECK-LABEL: f15:105; CHECK: brasl %r14, expl@PLT106  %tmp = call fp128 @llvm.exp.f128(fp128 %x)107  ret fp128 %tmp108}109 110define float @f16(float %x) {111; CHECK-LABEL: f16:112; CHECK: brasl %r14, exp2f@PLT113  %tmp = call float @llvm.exp2.f32(float %x)114  ret float %tmp115}116 117define double @f17(double %x) {118; CHECK-LABEL: f17:119; CHECK: brasl %r14, exp2@PLT120  %tmp = call double @llvm.exp2.f64(double %x)121  ret double %tmp122}123 124define fp128 @f18(fp128 %x) {125; CHECK-LABEL: f18:126; CHECK: brasl %r14, exp2l@PLT127  %tmp = call fp128 @llvm.exp2.f128(fp128 %x)128  ret fp128 %tmp129}130 131define float @f19(float %x) {132; CHECK-LABEL: f19:133; CHECK: brasl %r14, logf@PLT134  %tmp = call float @llvm.log.f32(float %x)135  ret float %tmp136}137 138define double @f20(double %x) {139; CHECK-LABEL: f20:140; CHECK: brasl %r14, log@PLT141  %tmp = call double @llvm.log.f64(double %x)142  ret double %tmp143}144 145define fp128 @f21(fp128 %x) {146; CHECK-LABEL: f21:147; CHECK: brasl %r14, logl@PLT148  %tmp = call fp128 @llvm.log.f128(fp128 %x)149  ret fp128 %tmp150}151 152define float @f22(float %x) {153; CHECK-LABEL: f22:154; CHECK: brasl %r14, log2f@PLT155  %tmp = call float @llvm.log2.f32(float %x)156  ret float %tmp157}158 159define double @f23(double %x) {160; CHECK-LABEL: f23:161; CHECK: brasl %r14, log2@PLT162  %tmp = call double @llvm.log2.f64(double %x)163  ret double %tmp164}165 166define fp128 @f24(fp128 %x) {167; CHECK-LABEL: f24:168; CHECK: brasl %r14, log2l@PLT169  %tmp = call fp128 @llvm.log2.f128(fp128 %x)170  ret fp128 %tmp171}172 173define float @f25(float %x) {174; CHECK-LABEL: f25:175; CHECK: brasl %r14, log10f@PLT176  %tmp = call float @llvm.log10.f32(float %x)177  ret float %tmp178}179 180define double @f26(double %x) {181; CHECK-LABEL: f26:182; CHECK: brasl %r14, log10@PLT183  %tmp = call double @llvm.log10.f64(double %x)184  ret double %tmp185}186 187define fp128 @f27(fp128 %x) {188; CHECK-LABEL: f27:189; CHECK: brasl %r14, log10l@PLT190  %tmp = call fp128 @llvm.log10.f128(fp128 %x)191  ret fp128 %tmp192}193 194define float @f28(float %x, float %y) {195; CHECK-LABEL: f28:196; CHECK: brasl %r14, fminf@PLT197  %tmp = call float @llvm.minnum.f32(float %x, float %y)198  ret float %tmp199}200 201define double @f29(double %x, double %y) {202; CHECK-LABEL: f29:203; CHECK: brasl %r14, fmin@PLT204  %tmp = call double @llvm.minnum.f64(double %x, double %y)205  ret double %tmp206}207 208define fp128 @f30(fp128 %x, fp128 %y) {209; CHECK-LABEL: f30:210; CHECK: brasl %r14, fminl@PLT211  %tmp = call fp128 @llvm.minnum.f128(fp128 %x, fp128 %y)212  ret fp128 %tmp213}214 215define half @f31_half(half %x, half %y) {216; CHECK-LABEL: f31_half:217; CHECK: brasl %r14, __extendhfsf2@PLT218; CHECK: brasl %r14, __extendhfsf2@PLT219; CHECK: brasl %r14, fmaxf@PLT220; CHECK: brasl %r14, __truncsfhf2@PLT221  %tmp = call half @llvm.maxnum.f16(half %x, half %y)222  ret half %tmp223}224 225define float @f31(float %x, float %y) {226; CHECK-LABEL: f31:227; CHECK: brasl %r14, fmaxf@PLT228  %tmp = call float @llvm.maxnum.f32(float %x, float %y)229  ret float %tmp230}231 232define double @f32(double %x, double %y) {233; CHECK-LABEL: f32:234; CHECK: brasl %r14, fmax@PLT235  %tmp = call double @llvm.maxnum.f64(double %x, double %y)236  ret double %tmp237}238 239define fp128 @f33(fp128 %x, fp128 %y) {240; CHECK-LABEL: f33:241; CHECK: brasl %r14, fmaxl@PLT242  %tmp = call fp128 @llvm.maxnum.f128(fp128 %x, fp128 %y)243  ret fp128 %tmp244}245 246; Verify that "nnan" minnum/maxnum calls are transformed to247; compare+select sequences instead of libcalls.248define float @f34(float %x, float %y) {249; CHECK-LABEL: f34:250; CHECK: cebr %f0, %f2251; CHECK: blr %r14252; CHECK: ler %f0, %f2253; CHECK: br %r14254  %tmp = call nnan float @llvm.minnum.f32(float %x, float %y)255  ret float %tmp256}257 258define double @f35(double %x, double %y) {259; CHECK-LABEL: f35:260; CHECK: cdbr %f0, %f2261; CHECK: blr %r14262; CHECK: ldr %f0, %f2263; CHECK: br %r14264  %tmp = call nnan double @llvm.minnum.f64(double %x, double %y)265  ret double %tmp266}267 268define fp128 @f36(fp128 %x, fp128 %y) {269; CHECK-LABEL: f36:270; CHECK: cxbr271; CHECK: jl272; CHECK: lxr273; CHECK: br %r14274  %tmp = call nnan fp128 @llvm.minnum.f128(fp128 %x, fp128 %y)275  ret fp128 %tmp276}277 278define float @f37(float %x, float %y) {279; CHECK-LABEL: f37:280; CHECK: cebr %f0, %f2281; CHECK: bhr %r14282; CHECK: ler %f0, %f2283; CHECK: br %r14284  %tmp = call nnan float @llvm.maxnum.f32(float %x, float %y)285  ret float %tmp286}287 288define double @f38(double %x, double %y) {289; CHECK-LABEL: f38:290; CHECK: cdbr %f0, %f2291; CHECK: bhr %r14292; CHECK: ldr %f0, %f2293; CHECK: br %r14294  %tmp = call nnan double @llvm.maxnum.f64(double %x, double %y)295  ret double %tmp296}297 298define fp128 @f39(fp128 %x, fp128 %y) {299; CHECK-LABEL: f39:300; CHECK: cxbr301; CHECK: jh302; CHECK: lxr303; CHECK: br %r14304  %tmp = call nnan fp128 @llvm.maxnum.f128(fp128 %x, fp128 %y)305  ret fp128 %tmp306}307 308declare float @llvm.powi.f32.i32(float, i32)309declare double @llvm.powi.f64.i32(double, i32)310declare fp128 @llvm.powi.f128.i32(fp128, i32)311declare float @llvm.pow.f32(float, float)312declare double @llvm.pow.f64(double, double)313declare fp128 @llvm.pow.f128(fp128, fp128)314 315declare float @llvm.sin.f32(float)316declare double @llvm.sin.f64(double)317declare fp128 @llvm.sin.f128(fp128)318declare float @llvm.cos.f32(float)319declare double @llvm.cos.f64(double)320declare fp128 @llvm.cos.f128(fp128)321 322declare float @llvm.exp.f32(float)323declare double @llvm.exp.f64(double)324declare fp128 @llvm.exp.f128(fp128)325declare float @llvm.exp2.f32(float)326declare double @llvm.exp2.f64(double)327declare fp128 @llvm.exp2.f128(fp128)328 329declare float @llvm.log.f32(float)330declare double @llvm.log.f64(double)331declare fp128 @llvm.log.f128(fp128)332declare float @llvm.log2.f32(float)333declare double @llvm.log2.f64(double)334declare fp128 @llvm.log2.f128(fp128)335declare float @llvm.log10.f32(float)336declare double @llvm.log10.f64(double)337declare fp128 @llvm.log10.f128(fp128)338 339declare float @llvm.minnum.f32(float, float)340declare double @llvm.minnum.f64(double, double)341declare fp128 @llvm.minnum.f128(fp128, fp128)342declare float @llvm.maxnum.f32(float, float)343declare double @llvm.maxnum.f64(double, double)344declare fp128 @llvm.maxnum.f128(fp128, fp128)345 346