blob: c791900cc2ff41ebc85b4cae73d0c5948fa0f913 [file] [log] [blame]
Tim Northover00ed9962014-03-29 10:18:08 +00001; RUN: llc -march=arm64 < %s | FileCheck %s
2
3define float @fma32(float %a, float %b, float %c) nounwind readnone ssp {
4entry:
5; CHECK-LABEL: fma32:
Tim Northover33d07462014-04-08 12:23:51 +00006; CHECK: fmadd s0, s0, s1, s2
Tim Northover00ed9962014-03-29 10:18:08 +00007 %0 = tail call float @llvm.fma.f32(float %a, float %b, float %c)
8 ret float %0
9}
10
11define float @fnma32(float %a, float %b, float %c) nounwind readnone ssp {
12entry:
13; CHECK-LABEL: fnma32:
Tim Northover33d07462014-04-08 12:23:51 +000014; CHECK: fnmadd s0, s0, s1, s2
Tim Northover00ed9962014-03-29 10:18:08 +000015 %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
20define float @fms32(float %a, float %b, float %c) nounwind readnone ssp {
21entry:
22; CHECK-LABEL: fms32:
Tim Northover33d07462014-04-08 12:23:51 +000023; CHECK: fmsub s0, s0, s1, s2
Tim Northover00ed9962014-03-29 10:18:08 +000024 %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
Tim Northover5731fc72014-03-31 15:46:34 +000029define float @fms32_com(float %a, float %b, float %c) nounwind readnone ssp {
30entry:
31; CHECK-LABEL: fms32_com:
Tim Northover33d07462014-04-08 12:23:51 +000032; CHECK: fmsub s0, s1, s0, s2
Tim Northover5731fc72014-03-31 15:46:34 +000033 %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
Tim Northover00ed9962014-03-29 10:18:08 +000038define float @fnms32(float %a, float %b, float %c) nounwind readnone ssp {
39entry:
40; CHECK-LABEL: fnms32:
Tim Northover33d07462014-04-08 12:23:51 +000041; CHECK: fnmsub s0, s0, s1, s2
Tim Northover00ed9962014-03-29 10:18:08 +000042 %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
47define double @fma64(double %a, double %b, double %c) nounwind readnone ssp {
48; CHECK-LABEL: fma64:
Tim Northover33d07462014-04-08 12:23:51 +000049; CHECK: fmadd d0, d0, d1, d2
Tim Northover00ed9962014-03-29 10:18:08 +000050entry:
51 %0 = tail call double @llvm.fma.f64(double %a, double %b, double %c)
52 ret double %0
53}
54
55define double @fnma64(double %a, double %b, double %c) nounwind readnone ssp {
56; CHECK-LABEL: fnma64:
Tim Northover33d07462014-04-08 12:23:51 +000057; CHECK: fnmadd d0, d0, d1, d2
Tim Northover00ed9962014-03-29 10:18:08 +000058entry:
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
64define double @fms64(double %a, double %b, double %c) nounwind readnone ssp {
65; CHECK-LABEL: fms64:
Tim Northover33d07462014-04-08 12:23:51 +000066; CHECK: fmsub d0, d0, d1, d2
Tim Northover00ed9962014-03-29 10:18:08 +000067entry:
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
Tim Northover5731fc72014-03-31 15:46:34 +000073define double @fms64_com(double %a, double %b, double %c) nounwind readnone ssp {
74; CHECK-LABEL: fms64_com:
Tim Northover33d07462014-04-08 12:23:51 +000075; CHECK: fmsub d0, d1, d0, d2
Tim Northover5731fc72014-03-31 15:46:34 +000076entry:
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
Tim Northover00ed9962014-03-29 10:18:08 +000082define double @fnms64(double %a, double %b, double %c) nounwind readnone ssp {
83; CHECK-LABEL: fnms64:
Tim Northover33d07462014-04-08 12:23:51 +000084; CHECK: fnmsub d0, d0, d1, d2
Tim Northover00ed9962014-03-29 10:18:08 +000085entry:
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
91declare float @llvm.fma.f32(float, float, float) nounwind readnone
92declare double @llvm.fma.f64(double, double, double) nounwind readnone