1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-none-linux-gnu -verify-machineinstrs -o - %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker@varfloat = global float 0.0 4*9880d681SAndroid Build Coastguard Worker@vardouble = global double 0.0 5*9880d681SAndroid Build Coastguard Worker@varfp128 = global fp128 zeroinitializer 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.cos.f32(float) 8*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.cos.f64(double) 9*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.cos.f128(fp128) 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine void @test_cos(float %float, double %double, fp128 %fp128) { 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_cos: 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker %cosfloat = call float @llvm.cos.f32(float %float) 15*9880d681SAndroid Build Coastguard Worker store float %cosfloat, float* @varfloat 16*9880d681SAndroid Build Coastguard Worker; CHECK: bl cosf 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker %cosdouble = call double @llvm.cos.f64(double %double) 19*9880d681SAndroid Build Coastguard Worker store double %cosdouble, double* @vardouble 20*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker %cosfp128 = call fp128 @llvm.cos.f128(fp128 %fp128) 23*9880d681SAndroid Build Coastguard Worker store fp128 %cosfp128, fp128* @varfp128 24*9880d681SAndroid Build Coastguard Worker; CHECK: bl cosl 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.exp.f32(float) 30*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.exp.f64(double) 31*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.exp.f128(fp128) 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine void @test_exp(float %float, double %double, fp128 %fp128) { 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_exp: 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker %expfloat = call float @llvm.exp.f32(float %float) 37*9880d681SAndroid Build Coastguard Worker store float %expfloat, float* @varfloat 38*9880d681SAndroid Build Coastguard Worker; CHECK: bl expf 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker %expdouble = call double @llvm.exp.f64(double %double) 41*9880d681SAndroid Build Coastguard Worker store double %expdouble, double* @vardouble 42*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker %expfp128 = call fp128 @llvm.exp.f128(fp128 %fp128) 45*9880d681SAndroid Build Coastguard Worker store fp128 %expfp128, fp128* @varfp128 46*9880d681SAndroid Build Coastguard Worker; CHECK: bl expl 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker ret void 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.exp2.f32(float) 52*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.exp2.f64(double) 53*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.exp2.f128(fp128) 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine void @test_exp2(float %float, double %double, fp128 %fp128) { 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_exp2: 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker %exp2float = call float @llvm.exp2.f32(float %float) 59*9880d681SAndroid Build Coastguard Worker store float %exp2float, float* @varfloat 60*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp2f 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker %exp2double = call double @llvm.exp2.f64(double %double) 63*9880d681SAndroid Build Coastguard Worker store double %exp2double, double* @vardouble 64*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp2 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker %exp2fp128 = call fp128 @llvm.exp2.f128(fp128 %fp128) 67*9880d681SAndroid Build Coastguard Worker store fp128 %exp2fp128, fp128* @varfp128 68*9880d681SAndroid Build Coastguard Worker; CHECK: bl exp2l 69*9880d681SAndroid Build Coastguard Worker ret void 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.log.f32(float) 74*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.log.f64(double) 75*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.log.f128(fp128) 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine void @test_log(float %float, double %double, fp128 %fp128) { 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log: 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker %logfloat = call float @llvm.log.f32(float %float) 81*9880d681SAndroid Build Coastguard Worker store float %logfloat, float* @varfloat 82*9880d681SAndroid Build Coastguard Worker; CHECK: bl logf 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker %logdouble = call double @llvm.log.f64(double %double) 85*9880d681SAndroid Build Coastguard Worker store double %logdouble, double* @vardouble 86*9880d681SAndroid Build Coastguard Worker; CHECK: bl log 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker %logfp128 = call fp128 @llvm.log.f128(fp128 %fp128) 89*9880d681SAndroid Build Coastguard Worker store fp128 %logfp128, fp128* @varfp128 90*9880d681SAndroid Build Coastguard Worker; CHECK: bl logl 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker ret void 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.log2.f32(float) 96*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.log2.f64(double) 97*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.log2.f128(fp128) 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdefine void @test_log2(float %float, double %double, fp128 %fp128) { 100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log2: 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker %log2float = call float @llvm.log2.f32(float %float) 103*9880d681SAndroid Build Coastguard Worker store float %log2float, float* @varfloat 104*9880d681SAndroid Build Coastguard Worker; CHECK: bl log2f 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Worker %log2double = call double @llvm.log2.f64(double %double) 107*9880d681SAndroid Build Coastguard Worker store double %log2double, double* @vardouble 108*9880d681SAndroid Build Coastguard Worker; CHECK: bl log2 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker %log2fp128 = call fp128 @llvm.log2.f128(fp128 %fp128) 111*9880d681SAndroid Build Coastguard Worker store fp128 %log2fp128, fp128* @varfp128 112*9880d681SAndroid Build Coastguard Worker; CHECK: bl log2l 113*9880d681SAndroid Build Coastguard Worker ret void 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.log10.f32(float) 118*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.log10.f64(double) 119*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.log10.f128(fp128) 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdefine void @test_log10(float %float, double %double, fp128 %fp128) { 122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_log10: 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker %log10float = call float @llvm.log10.f32(float %float) 125*9880d681SAndroid Build Coastguard Worker store float %log10float, float* @varfloat 126*9880d681SAndroid Build Coastguard Worker; CHECK: bl log10f 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker %log10double = call double @llvm.log10.f64(double %double) 129*9880d681SAndroid Build Coastguard Worker store double %log10double, double* @vardouble 130*9880d681SAndroid Build Coastguard Worker; CHECK: bl log10 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Worker %log10fp128 = call fp128 @llvm.log10.f128(fp128 %fp128) 133*9880d681SAndroid Build Coastguard Worker store fp128 %log10fp128, fp128* @varfp128 134*9880d681SAndroid Build Coastguard Worker; CHECK: bl log10l 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker ret void 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.sin.f32(float) 140*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.sin.f64(double) 141*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.sin.f128(fp128) 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine void @test_sin(float %float, double %double, fp128 %fp128) { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sin: 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker %sinfloat = call float @llvm.sin.f32(float %float) 147*9880d681SAndroid Build Coastguard Worker store float %sinfloat, float* @varfloat 148*9880d681SAndroid Build Coastguard Worker; CHECK: bl sinf 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Worker %sindouble = call double @llvm.sin.f64(double %double) 151*9880d681SAndroid Build Coastguard Worker store double %sindouble, double* @vardouble 152*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker %sinfp128 = call fp128 @llvm.sin.f128(fp128 %fp128) 155*9880d681SAndroid Build Coastguard Worker store fp128 %sinfp128, fp128* @varfp128 156*9880d681SAndroid Build Coastguard Worker; CHECK: bl sinl 157*9880d681SAndroid Build Coastguard Worker ret void 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker} 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.pow.f32(float, float) 162*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.pow.f64(double, double) 163*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.pow.f128(fp128, fp128) 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine void @test_pow(float %float, double %double, fp128 %fp128) { 166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pow: 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker %powfloat = call float @llvm.pow.f32(float %float, float %float) 169*9880d681SAndroid Build Coastguard Worker store float %powfloat, float* @varfloat 170*9880d681SAndroid Build Coastguard Worker; CHECK: bl powf 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Worker %powdouble = call double @llvm.pow.f64(double %double, double %double) 173*9880d681SAndroid Build Coastguard Worker store double %powdouble, double* @vardouble 174*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Worker %powfp128 = call fp128 @llvm.pow.f128(fp128 %fp128, fp128 %fp128) 177*9880d681SAndroid Build Coastguard Worker store fp128 %powfp128, fp128* @varfp128 178*9880d681SAndroid Build Coastguard Worker; CHECK: bl powl 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Worker ret void 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.powi.f32(float, i32) 184*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.powi.f64(double, i32) 185*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.powi.f128(fp128, i32) 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdefine void @test_powi(float %float, double %double, i32 %exponent, fp128 %fp128) { 188*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_powi: 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker %powifloat = call float @llvm.powi.f32(float %float, i32 %exponent) 191*9880d681SAndroid Build Coastguard Worker store float %powifloat, float* @varfloat 192*9880d681SAndroid Build Coastguard Worker; CHECK: bl __powisf2 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Worker %powidouble = call double @llvm.powi.f64(double %double, i32 %exponent) 195*9880d681SAndroid Build Coastguard Worker store double %powidouble, double* @vardouble 196*9880d681SAndroid Build Coastguard Worker; CHECK: bl __powidf2 197*9880d681SAndroid Build Coastguard Worker 198*9880d681SAndroid Build Coastguard Worker %powifp128 = call fp128 @llvm.powi.f128(fp128 %fp128, i32 %exponent) 199*9880d681SAndroid Build Coastguard Worker store fp128 %powifp128, fp128* @varfp128 200*9880d681SAndroid Build Coastguard Worker; CHECK: bl __powitf2 201*9880d681SAndroid Build Coastguard Worker ret void 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine void @test_frem(float %float, double %double, fp128 %fp128) { 206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_frem: 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker %fremfloat = frem float %float, %float 209*9880d681SAndroid Build Coastguard Worker store float %fremfloat, float* @varfloat 210*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmodf 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Worker %fremdouble = frem double %double, %double 213*9880d681SAndroid Build Coastguard Worker store double %fremdouble, double* @vardouble 214*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmod 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker %fremfp128 = frem fp128 %fp128, %fp128 217*9880d681SAndroid Build Coastguard Worker store fp128 %fremfp128, fp128* @varfp128 218*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmodl 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Worker ret void 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.fma.f128(fp128, fp128, fp128) 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Workerdefine void @test_fma(fp128 %fp128) { 226*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fma: 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Worker %fmafp128 = call fp128 @llvm.fma.f128(fp128 %fp128, fp128 %fp128, fp128 %fp128) 229*9880d681SAndroid Build Coastguard Worker store fp128 %fmafp128, fp128* @varfp128 230*9880d681SAndroid Build Coastguard Worker; CHECK: bl fmal 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Worker ret void 233*9880d681SAndroid Build Coastguard Worker} 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.fmuladd.f128(fp128, fp128, fp128) 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Workerdefine void @test_fmuladd(fp128 %fp128) { 238*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fmuladd: 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker %fmuladdfp128 = call fp128 @llvm.fmuladd.f128(fp128 %fp128, fp128 %fp128, fp128 %fp128) 241*9880d681SAndroid Build Coastguard Worker store fp128 %fmuladdfp128, fp128* @varfp128 242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: bl fmal 243*9880d681SAndroid Build Coastguard Worker; CHECK: bl __multf3 244*9880d681SAndroid Build Coastguard Worker; CHECK: bl __addtf3 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Worker ret void 247*9880d681SAndroid Build Coastguard Worker} 248