Home | History | Annotate | Download | only in SystemZ
      1 ; Test that library calls are emitted for LLVM IR intrinsics
      2 ;
      3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
      4 
      5 define float @f1(float %x, i32 %y) {
      6 ; CHECK-LABEL: f1:
      7 ; CHECK: brasl %r14, __powisf2@PLT
      8   %tmp = call float @llvm.powi.f32(float %x, i32 %y)
      9   ret float %tmp
     10 }
     11 
     12 define double @f2(double %x, i32 %y) {
     13 ; CHECK-LABEL: f2:
     14 ; CHECK: brasl %r14, __powidf2@PLT
     15   %tmp = call double @llvm.powi.f64(double %x, i32 %y)
     16   ret double %tmp
     17 }
     18 
     19 define fp128 @f3(fp128 %x, i32 %y) {
     20 ; CHECK-LABEL: f3:
     21 ; CHECK: brasl %r14, __powitf2@PLT
     22   %tmp = call fp128 @llvm.powi.f128(fp128 %x, i32 %y)
     23   ret fp128 %tmp
     24 }
     25 
     26 define float @f4(float %x, float %y) {
     27 ; CHECK-LABEL: f4:
     28 ; CHECK: brasl %r14, powf@PLT
     29   %tmp = call float @llvm.pow.f32(float %x, float %y)
     30   ret float %tmp
     31 }
     32 
     33 define double @f5(double %x, double %y) {
     34 ; CHECK-LABEL: f5:
     35 ; CHECK: brasl %r14, pow@PLT
     36   %tmp = call double @llvm.pow.f64(double %x, double %y)
     37   ret double %tmp
     38 }
     39 
     40 define fp128 @f6(fp128 %x, fp128 %y) {
     41 ; CHECK-LABEL: f6:
     42 ; CHECK: brasl %r14, powl@PLT
     43   %tmp = call fp128 @llvm.pow.f128(fp128 %x, fp128 %y)
     44   ret fp128 %tmp
     45 }
     46 
     47 define float @f7(float %x) {
     48 ; CHECK-LABEL: f7:
     49 ; CHECK: brasl %r14, sinf@PLT
     50   %tmp = call float @llvm.sin.f32(float %x)
     51   ret float %tmp
     52 }
     53 
     54 define double @f8(double %x) {
     55 ; CHECK-LABEL: f8:
     56 ; CHECK: brasl %r14, sin@PLT
     57   %tmp = call double @llvm.sin.f64(double %x)
     58   ret double %tmp
     59 }
     60 
     61 define fp128 @f9(fp128 %x) {
     62 ; CHECK-LABEL: f9:
     63 ; CHECK: brasl %r14, sinl@PLT
     64   %tmp = call fp128 @llvm.sin.f128(fp128 %x)
     65   ret fp128 %tmp
     66 }
     67 
     68 define float @f10(float %x) {
     69 ; CHECK-LABEL: f10:
     70 ; CHECK: brasl %r14, cosf@PLT
     71   %tmp = call float @llvm.cos.f32(float %x)
     72   ret float %tmp
     73 }
     74 
     75 define double @f11(double %x) {
     76 ; CHECK-LABEL: f11:
     77 ; CHECK: brasl %r14, cos@PLT
     78   %tmp = call double @llvm.cos.f64(double %x)
     79   ret double %tmp
     80 }
     81 
     82 define fp128 @f12(fp128 %x) {
     83 ; CHECK-LABEL: f12:
     84 ; CHECK: brasl %r14, cosl@PLT
     85   %tmp = call fp128 @llvm.cos.f128(fp128 %x)
     86   ret fp128 %tmp
     87 }
     88 
     89 define float @f13(float %x) {
     90 ; CHECK-LABEL: f13:
     91 ; CHECK: brasl %r14, expf@PLT
     92   %tmp = call float @llvm.exp.f32(float %x)
     93   ret float %tmp
     94 }
     95 
     96 define double @f14(double %x) {
     97 ; CHECK-LABEL: f14:
     98 ; CHECK: brasl %r14, exp@PLT
     99   %tmp = call double @llvm.exp.f64(double %x)
    100   ret double %tmp
    101 }
    102 
    103 define fp128 @f15(fp128 %x) {
    104 ; CHECK-LABEL: f15:
    105 ; CHECK: brasl %r14, expl@PLT
    106   %tmp = call fp128 @llvm.exp.f128(fp128 %x)
    107   ret fp128 %tmp
    108 }
    109 
    110 define float @f16(float %x) {
    111 ; CHECK-LABEL: f16:
    112 ; CHECK: brasl %r14, exp2f@PLT
    113   %tmp = call float @llvm.exp2.f32(float %x)
    114   ret float %tmp
    115 }
    116 
    117 define double @f17(double %x) {
    118 ; CHECK-LABEL: f17:
    119 ; CHECK: brasl %r14, exp2@PLT
    120   %tmp = call double @llvm.exp2.f64(double %x)
    121   ret double %tmp
    122 }
    123 
    124 define fp128 @f18(fp128 %x) {
    125 ; CHECK-LABEL: f18:
    126 ; CHECK: brasl %r14, exp2l@PLT
    127   %tmp = call fp128 @llvm.exp2.f128(fp128 %x)
    128   ret fp128 %tmp
    129 }
    130 
    131 define float @f19(float %x) {
    132 ; CHECK-LABEL: f19:
    133 ; CHECK: brasl %r14, logf@PLT
    134   %tmp = call float @llvm.log.f32(float %x)
    135   ret float %tmp
    136 }
    137 
    138 define double @f20(double %x) {
    139 ; CHECK-LABEL: f20:
    140 ; CHECK: brasl %r14, log@PLT
    141   %tmp = call double @llvm.log.f64(double %x)
    142   ret double %tmp
    143 }
    144 
    145 define fp128 @f21(fp128 %x) {
    146 ; CHECK-LABEL: f21:
    147 ; CHECK: brasl %r14, logl@PLT
    148   %tmp = call fp128 @llvm.log.f128(fp128 %x)
    149   ret fp128 %tmp
    150 }
    151 
    152 define float @f22(float %x) {
    153 ; CHECK-LABEL: f22:
    154 ; CHECK: brasl %r14, log2f@PLT
    155   %tmp = call float @llvm.log2.f32(float %x)
    156   ret float %tmp
    157 }
    158 
    159 define double @f23(double %x) {
    160 ; CHECK-LABEL: f23:
    161 ; CHECK: brasl %r14, log2@PLT
    162   %tmp = call double @llvm.log2.f64(double %x)
    163   ret double %tmp
    164 }
    165 
    166 define fp128 @f24(fp128 %x) {
    167 ; CHECK-LABEL: f24:
    168 ; CHECK: brasl %r14, log2l@PLT
    169   %tmp = call fp128 @llvm.log2.f128(fp128 %x)
    170   ret fp128 %tmp
    171 }
    172 
    173 define float @f25(float %x) {
    174 ; CHECK-LABEL: f25:
    175 ; CHECK: brasl %r14, log10f@PLT
    176   %tmp = call float @llvm.log10.f32(float %x)
    177   ret float %tmp
    178 }
    179 
    180 define double @f26(double %x) {
    181 ; CHECK-LABEL: f26:
    182 ; CHECK: brasl %r14, log10@PLT
    183   %tmp = call double @llvm.log10.f64(double %x)
    184   ret double %tmp
    185 }
    186 
    187 define fp128 @f27(fp128 %x) {
    188 ; CHECK-LABEL: f27:
    189 ; CHECK: brasl %r14, log10l@PLT
    190   %tmp = call fp128 @llvm.log10.f128(fp128 %x)
    191   ret fp128 %tmp
    192 }
    193 
    194 define float @f28(float %x, float %y) {
    195 ; CHECK-LABEL: f28:
    196 ; CHECK: brasl %r14, fminf@PLT
    197   %tmp = call float @llvm.minnum.f32(float %x, float %y)
    198   ret float %tmp
    199 }
    200 
    201 define double @f29(double %x, double %y) {
    202 ; CHECK-LABEL: f29:
    203 ; CHECK: brasl %r14, fmin@PLT
    204   %tmp = call double @llvm.minnum.f64(double %x, double %y)
    205   ret double %tmp
    206 }
    207 
    208 define fp128 @f30(fp128 %x, fp128 %y) {
    209 ; CHECK-LABEL: f30:
    210 ; CHECK: brasl %r14, fminl@PLT
    211   %tmp = call fp128 @llvm.minnum.f128(fp128 %x, fp128 %y)
    212   ret fp128 %tmp
    213 }
    214 
    215 define float @f31(float %x, float %y) {
    216 ; CHECK-LABEL: f31:
    217 ; CHECK: brasl %r14, fmaxf@PLT
    218   %tmp = call float @llvm.maxnum.f32(float %x, float %y)
    219   ret float %tmp
    220 }
    221 
    222 define double @f32(double %x, double %y) {
    223 ; CHECK-LABEL: f32:
    224 ; CHECK: brasl %r14, fmax@PLT
    225   %tmp = call double @llvm.maxnum.f64(double %x, double %y)
    226   ret double %tmp
    227 }
    228 
    229 define fp128 @f33(fp128 %x, fp128 %y) {
    230 ; CHECK-LABEL: f33:
    231 ; CHECK: brasl %r14, fmaxl@PLT
    232   %tmp = call fp128 @llvm.maxnum.f128(fp128 %x, fp128 %y)
    233   ret fp128 %tmp
    234 }
    235 
    236 declare float @llvm.powi.f32(float, i32)
    237 declare double @llvm.powi.f64(double, i32)
    238 declare fp128 @llvm.powi.f128(fp128, i32)
    239 declare float @llvm.pow.f32(float, float)
    240 declare double @llvm.pow.f64(double, double)
    241 declare fp128 @llvm.pow.f128(fp128, fp128)
    242 
    243 declare float @llvm.sin.f32(float)
    244 declare double @llvm.sin.f64(double)
    245 declare fp128 @llvm.sin.f128(fp128)
    246 declare float @llvm.cos.f32(float)
    247 declare double @llvm.cos.f64(double)
    248 declare fp128 @llvm.cos.f128(fp128)
    249 
    250 declare float @llvm.exp.f32(float)
    251 declare double @llvm.exp.f64(double)
    252 declare fp128 @llvm.exp.f128(fp128)
    253 declare float @llvm.exp2.f32(float)
    254 declare double @llvm.exp2.f64(double)
    255 declare fp128 @llvm.exp2.f128(fp128)
    256 
    257 declare float @llvm.log.f32(float)
    258 declare double @llvm.log.f64(double)
    259 declare fp128 @llvm.log.f128(fp128)
    260 declare float @llvm.log2.f32(float)
    261 declare double @llvm.log2.f64(double)
    262 declare fp128 @llvm.log2.f128(fp128)
    263 declare float @llvm.log10.f32(float)
    264 declare double @llvm.log10.f64(double)
    265 declare fp128 @llvm.log10.f128(fp128)
    266 
    267 declare float @llvm.minnum.f32(float, float)
    268 declare double @llvm.minnum.f64(double, double)
    269 declare fp128 @llvm.minnum.f128(fp128, fp128)
    270 declare float @llvm.maxnum.f32(float, float)
    271 declare double @llvm.maxnum.f64(double, double)
    272 declare fp128 @llvm.maxnum.f128(fp128, fp128)
    273 
    274