1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=arm64 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine float @fma32(float %a, float %b, float %c) nounwind readnone ssp { 4*9880d681SAndroid Build Coastguard Workerentry: 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fma32: 6*9880d681SAndroid Build Coastguard Worker; CHECK: fmadd s0, s0, s1, s2 7*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %a, float %b, float %c) 8*9880d681SAndroid Build Coastguard Worker ret float %0 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine float @fnma32(float %a, float %b, float %c) nounwind readnone ssp { 12*9880d681SAndroid Build Coastguard Workerentry: 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fnma32: 14*9880d681SAndroid Build Coastguard Worker; CHECK: fnmadd s0, s0, s1, s2 15*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %a, float %b, float %c) 16*9880d681SAndroid Build Coastguard Worker %mul = fmul float %0, -1.000000e+00 17*9880d681SAndroid Build Coastguard Worker ret float %mul 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine float @fms32(float %a, float %b, float %c) nounwind readnone ssp { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fms32: 23*9880d681SAndroid Build Coastguard Worker; CHECK: fmsub s0, s0, s1, s2 24*9880d681SAndroid Build Coastguard Worker %mul = fmul float %b, -1.000000e+00 25*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %a, float %mul, float %c) 26*9880d681SAndroid Build Coastguard Worker ret float %0 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine float @fms32_com(float %a, float %b, float %c) nounwind readnone ssp { 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fms32_com: 32*9880d681SAndroid Build Coastguard Worker; CHECK: fmsub s0, s1, s0, s2 33*9880d681SAndroid Build Coastguard Worker %mul = fmul float %b, -1.000000e+00 34*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %mul, float %a, float %c) 35*9880d681SAndroid Build Coastguard Worker ret float %0 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine float @fnms32(float %a, float %b, float %c) nounwind readnone ssp { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fnms32: 41*9880d681SAndroid Build Coastguard Worker; CHECK: fnmsub s0, s0, s1, s2 42*9880d681SAndroid Build Coastguard Worker %mul = fmul float %c, -1.000000e+00 43*9880d681SAndroid Build Coastguard Worker %0 = tail call float @llvm.fma.f32(float %a, float %b, float %mul) 44*9880d681SAndroid Build Coastguard Worker ret float %0 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine double @fma64(double %a, double %b, double %c) nounwind readnone ssp { 48*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fma64: 49*9880d681SAndroid Build Coastguard Worker; CHECK: fmadd d0, d0, d1, d2 50*9880d681SAndroid Build Coastguard Workerentry: 51*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %a, double %b, double %c) 52*9880d681SAndroid Build Coastguard Worker ret double %0 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine double @fnma64(double %a, double %b, double %c) nounwind readnone ssp { 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fnma64: 57*9880d681SAndroid Build Coastguard Worker; CHECK: fnmadd d0, d0, d1, d2 58*9880d681SAndroid Build Coastguard Workerentry: 59*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %a, double %b, double %c) 60*9880d681SAndroid Build Coastguard Worker %mul = fmul double %0, -1.000000e+00 61*9880d681SAndroid Build Coastguard Worker ret double %mul 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine double @fms64(double %a, double %b, double %c) nounwind readnone ssp { 65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fms64: 66*9880d681SAndroid Build Coastguard Worker; CHECK: fmsub d0, d0, d1, d2 67*9880d681SAndroid Build Coastguard Workerentry: 68*9880d681SAndroid Build Coastguard Worker %mul = fmul double %b, -1.000000e+00 69*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %a, double %mul, double %c) 70*9880d681SAndroid Build Coastguard Worker ret double %0 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerdefine double @fms64_com(double %a, double %b, double %c) nounwind readnone ssp { 74*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fms64_com: 75*9880d681SAndroid Build Coastguard Worker; CHECK: fmsub d0, d1, d0, d2 76*9880d681SAndroid Build Coastguard Workerentry: 77*9880d681SAndroid Build Coastguard Worker %mul = fmul double %b, -1.000000e+00 78*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %mul, double %a, double %c) 79*9880d681SAndroid Build Coastguard Worker ret double %0 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine double @fnms64(double %a, double %b, double %c) nounwind readnone ssp { 83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fnms64: 84*9880d681SAndroid Build Coastguard Worker; CHECK: fnmsub d0, d0, d1, d2 85*9880d681SAndroid Build Coastguard Workerentry: 86*9880d681SAndroid Build Coastguard Worker %mul = fmul double %c, -1.000000e+00 87*9880d681SAndroid Build Coastguard Worker %0 = tail call double @llvm.fma.f64(double %a, double %b, double %mul) 88*9880d681SAndroid Build Coastguard Worker ret double %0 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.fma.f32(float, float, float) nounwind readnone 92*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.fma.f64(double, double, double) nounwind readnone 93