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