xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-fmadd.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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