xref: /llvm-project/llvm/test/CodeGen/ARM/fmuladd-soft-float.ll (revision 5785cbb40570c3847aa994b2d2b7e03321eee7eb)
1*5785cbb4SAlex Rønne Petersen; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2*5785cbb4SAlex Rønne Petersen; RUN: llc -mtriple=arm < %s | FileCheck %s -check-prefix=SOFT-FLOAT
3*5785cbb4SAlex Rønne Petersen; RUN: llc -mtriple=arm -mattr=+vfp4d16sp < %s | FileCheck %s -check-prefix=SOFT-FLOAT-VFP32
4*5785cbb4SAlex Rønne Petersen; RUN: llc -mtriple=arm -mattr=+vfp4d16sp,+fp64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-VFP64
5*5785cbb4SAlex Rønne Petersen
6*5785cbb4SAlex Rønne Petersendefine float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 {
7*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_intrinsic_f32:
8*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT:       @ %bb.0:
9*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    push {r4, lr}
10*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r4, r2
11*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __mulsf3
12*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r1, r4
13*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __addsf3
14*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    pop {r4, lr}
15*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov pc, lr
16*5785cbb4SAlex Rønne Petersen;
17*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_intrinsic_f32:
18*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32:       @ %bb.0:
19*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    push {r4, lr}
20*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r4, r2
21*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __mulsf3
22*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r1, r4
23*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __addsf3
24*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    pop {r4, lr}
25*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov pc, lr
26*5785cbb4SAlex Rønne Petersen;
27*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_intrinsic_f32:
28*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64:       @ %bb.0:
29*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    push {r4, lr}
30*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r4, r2
31*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __mulsf3
32*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r1, r4
33*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __addsf3
34*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    pop {r4, lr}
35*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov pc, lr
36*5785cbb4SAlex Rønne Petersen  %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c)
37*5785cbb4SAlex Rønne Petersen  ret float %result
38*5785cbb4SAlex Rønne Petersen}
39*5785cbb4SAlex Rønne Petersen
40*5785cbb4SAlex Rønne Petersendefine double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 {
41*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_intrinsic_f64:
42*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT:       @ %bb.0:
43*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    push {r11, lr}
44*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __muldf3
45*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #8]
46*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #12]
47*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __adddf3
48*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    pop {r11, lr}
49*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov pc, lr
50*5785cbb4SAlex Rønne Petersen;
51*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_intrinsic_f64:
52*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32:       @ %bb.0:
53*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    push {r11, lr}
54*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __muldf3
55*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #8]
56*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #12]
57*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __adddf3
58*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    pop {r11, lr}
59*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov pc, lr
60*5785cbb4SAlex Rønne Petersen;
61*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_intrinsic_f64:
62*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64:       @ %bb.0:
63*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    push {r11, lr}
64*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __muldf3
65*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #8]
66*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #12]
67*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __adddf3
68*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    pop {r11, lr}
69*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov pc, lr
70*5785cbb4SAlex Rønne Petersen  %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c)
71*5785cbb4SAlex Rønne Petersen  ret double %result
72*5785cbb4SAlex Rønne Petersen}
73*5785cbb4SAlex Rønne Petersen
74*5785cbb4SAlex Rønne Petersendefine float @fmuladd_contract_f32(float %a, float %b, float %c) #0 {
75*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_f32:
76*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT:       @ %bb.0:
77*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    push {r4, lr}
78*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r4, r2
79*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __mulsf3
80*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r1, r4
81*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __addsf3
82*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    pop {r4, lr}
83*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov pc, lr
84*5785cbb4SAlex Rønne Petersen;
85*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_f32:
86*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32:       @ %bb.0:
87*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    push {r4, lr}
88*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r4, r2
89*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __mulsf3
90*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r1, r4
91*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __addsf3
92*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    pop {r4, lr}
93*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov pc, lr
94*5785cbb4SAlex Rønne Petersen;
95*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_f32:
96*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64:       @ %bb.0:
97*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    push {r4, lr}
98*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r4, r2
99*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __mulsf3
100*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r1, r4
101*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __addsf3
102*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    pop {r4, lr}
103*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov pc, lr
104*5785cbb4SAlex Rønne Petersen  %product = fmul contract float %a, %b
105*5785cbb4SAlex Rønne Petersen  %result = fadd contract float %product, %c
106*5785cbb4SAlex Rønne Petersen  ret float %result
107*5785cbb4SAlex Rønne Petersen}
108*5785cbb4SAlex Rønne Petersen
109*5785cbb4SAlex Rønne Petersendefine double @fmuladd_contract_f64(double %a, double %b, double %c) #0 {
110*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_f64:
111*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT:       @ %bb.0:
112*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    push {r11, lr}
113*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __muldf3
114*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #8]
115*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #12]
116*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __adddf3
117*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    pop {r11, lr}
118*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov pc, lr
119*5785cbb4SAlex Rønne Petersen;
120*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_f64:
121*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32:       @ %bb.0:
122*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    push {r11, lr}
123*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __muldf3
124*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #8]
125*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #12]
126*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __adddf3
127*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    pop {r11, lr}
128*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov pc, lr
129*5785cbb4SAlex Rønne Petersen;
130*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_f64:
131*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64:       @ %bb.0:
132*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    push {r11, lr}
133*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __muldf3
134*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #8]
135*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #12]
136*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __adddf3
137*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    pop {r11, lr}
138*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov pc, lr
139*5785cbb4SAlex Rønne Petersen  %product = fmul contract double %a, %b
140*5785cbb4SAlex Rønne Petersen  %result = fadd contract double %product, %c
141*5785cbb4SAlex Rønne Petersen  ret double %result
142*5785cbb4SAlex Rønne Petersen}
143*5785cbb4SAlex Rønne Petersen
144*5785cbb4SAlex Rønne Petersendefine <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 {
145*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_v4f32:
146*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT:       @ %bb.0:
147*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    push {r4, r5, r6, r7, r11, lr}
148*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r7, r1
149*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #24]
150*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r4, r3
151*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r6, r2
152*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __mulsf3
153*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #40]
154*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __addsf3
155*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #28]
156*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r5, r0
157*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r0, r7
158*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __mulsf3
159*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #44]
160*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __addsf3
161*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #32]
162*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r7, r0
163*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r0, r6
164*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __mulsf3
165*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #48]
166*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __addsf3
167*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #36]
168*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r6, r0
169*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r0, r4
170*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __mulsf3
171*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #52]
172*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __addsf3
173*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r3, r0
174*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r0, r5
175*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r1, r7
176*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r2, r6
177*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    pop {r4, r5, r6, r7, r11, lr}
178*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov pc, lr
179*5785cbb4SAlex Rønne Petersen;
180*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_v4f32:
181*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32:       @ %bb.0:
182*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    push {r4, r5, r6, r7, r11, lr}
183*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r7, r1
184*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #24]
185*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r4, r3
186*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r6, r2
187*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __mulsf3
188*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #40]
189*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __addsf3
190*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #28]
191*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r5, r0
192*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r0, r7
193*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __mulsf3
194*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #44]
195*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __addsf3
196*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #32]
197*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r7, r0
198*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r0, r6
199*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __mulsf3
200*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #48]
201*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __addsf3
202*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #36]
203*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r6, r0
204*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r0, r4
205*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __mulsf3
206*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #52]
207*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __addsf3
208*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r3, r0
209*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r0, r5
210*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r1, r7
211*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r2, r6
212*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    pop {r4, r5, r6, r7, r11, lr}
213*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov pc, lr
214*5785cbb4SAlex Rønne Petersen;
215*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_v4f32:
216*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64:       @ %bb.0:
217*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    push {r4, r5, r6, r7, r11, lr}
218*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r7, r1
219*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #24]
220*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r4, r3
221*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r6, r2
222*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __mulsf3
223*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #40]
224*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __addsf3
225*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #28]
226*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r5, r0
227*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r0, r7
228*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __mulsf3
229*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #44]
230*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __addsf3
231*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #32]
232*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r7, r0
233*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r0, r6
234*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __mulsf3
235*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #48]
236*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __addsf3
237*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #36]
238*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r6, r0
239*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r0, r4
240*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __mulsf3
241*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #52]
242*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __addsf3
243*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r3, r0
244*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r0, r5
245*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r1, r7
246*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r2, r6
247*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    pop {r4, r5, r6, r7, r11, lr}
248*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov pc, lr
249*5785cbb4SAlex Rønne Petersen  %product = fmul contract <4 x float> %a, %b
250*5785cbb4SAlex Rønne Petersen  %result = fadd contract <4 x float> %product, %c
251*5785cbb4SAlex Rønne Petersen  ret <4 x float> %result
252*5785cbb4SAlex Rønne Petersen}
253*5785cbb4SAlex Rønne Petersen
254*5785cbb4SAlex Rønne Petersendefine <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 {
255*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-LABEL: fmuladd_contract_v4f64:
256*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT:       @ %bb.0:
257*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    push {r4, r5, r6, lr}
258*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r5, r3
259*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r6, r2
260*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r4, r0
261*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r0, [sp, #32]
262*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #36]
263*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #64]
264*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #68]
265*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __muldf3
266*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #96]
267*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #100]
268*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __adddf3
269*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    str r0, [r4, #24]
270*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    str r1, [r4, #28]
271*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r0, [sp, #24]
272*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #28]
273*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #56]
274*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #60]
275*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __muldf3
276*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #88]
277*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #92]
278*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __adddf3
279*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    str r0, [r4, #16]
280*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    str r1, [r4, #20]
281*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r0, [sp, #16]
282*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r1, [sp, #20]
283*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #48]
284*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #52]
285*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __muldf3
286*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #80]
287*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #84]
288*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __adddf3
289*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #40]
290*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #44]
291*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    str r0, [r4, #8]
292*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r0, r6
293*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    str r1, [r4, #12]
294*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov r1, r5
295*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __muldf3
296*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r2, [sp, #72]
297*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    ldr r3, [sp, #76]
298*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    bl __adddf3
299*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    stm r4, {r0, r1}
300*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    pop {r4, r5, r6, lr}
301*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-NEXT:    mov pc, lr
302*5785cbb4SAlex Rønne Petersen;
303*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-LABEL: fmuladd_contract_v4f64:
304*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32:       @ %bb.0:
305*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    push {r4, r5, r6, lr}
306*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r5, r3
307*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r6, r2
308*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r4, r0
309*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r0, [sp, #32]
310*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #36]
311*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #64]
312*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #68]
313*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __muldf3
314*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #96]
315*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #100]
316*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __adddf3
317*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    str r0, [r4, #24]
318*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    str r1, [r4, #28]
319*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r0, [sp, #24]
320*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #28]
321*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #56]
322*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #60]
323*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __muldf3
324*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #88]
325*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #92]
326*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __adddf3
327*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    str r0, [r4, #16]
328*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    str r1, [r4, #20]
329*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r0, [sp, #16]
330*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r1, [sp, #20]
331*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #48]
332*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #52]
333*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __muldf3
334*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #80]
335*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #84]
336*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __adddf3
337*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #40]
338*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #44]
339*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    str r0, [r4, #8]
340*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r0, r6
341*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    str r1, [r4, #12]
342*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov r1, r5
343*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __muldf3
344*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r2, [sp, #72]
345*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    ldr r3, [sp, #76]
346*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    bl __adddf3
347*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    stm r4, {r0, r1}
348*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    pop {r4, r5, r6, lr}
349*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP32-NEXT:    mov pc, lr
350*5785cbb4SAlex Rønne Petersen;
351*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-LABEL: fmuladd_contract_v4f64:
352*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64:       @ %bb.0:
353*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    push {r4, r5, r6, lr}
354*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r5, r3
355*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r6, r2
356*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r4, r0
357*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r0, [sp, #32]
358*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #36]
359*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #64]
360*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #68]
361*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __muldf3
362*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #96]
363*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #100]
364*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __adddf3
365*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    str r0, [r4, #24]
366*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    str r1, [r4, #28]
367*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r0, [sp, #24]
368*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #28]
369*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #56]
370*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #60]
371*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __muldf3
372*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #88]
373*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #92]
374*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __adddf3
375*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    str r0, [r4, #16]
376*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    str r1, [r4, #20]
377*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r0, [sp, #16]
378*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r1, [sp, #20]
379*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #48]
380*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #52]
381*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __muldf3
382*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #80]
383*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #84]
384*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __adddf3
385*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #40]
386*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #44]
387*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    str r0, [r4, #8]
388*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r0, r6
389*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    str r1, [r4, #12]
390*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov r1, r5
391*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __muldf3
392*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r2, [sp, #72]
393*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    ldr r3, [sp, #76]
394*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    bl __adddf3
395*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    stm r4, {r0, r1}
396*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    pop {r4, r5, r6, lr}
397*5785cbb4SAlex Rønne Petersen; SOFT-FLOAT-VFP64-NEXT:    mov pc, lr
398*5785cbb4SAlex Rønne Petersen  %product = fmul contract <4 x double> %a, %b
399*5785cbb4SAlex Rønne Petersen  %result = fadd contract <4 x double> %product, %c
400*5785cbb4SAlex Rønne Petersen  ret <4 x double> %result
401*5785cbb4SAlex Rønne Petersen}
402*5785cbb4SAlex Rønne Petersen
403*5785cbb4SAlex Rønne Petersenattributes #0 = { "use-soft-float"="true" }
404*5785cbb4SAlex Rønne Petersen
405*5785cbb4SAlex Rønne Petersendeclare float @llvm.fmuladd.f32(float %a, float %b, float %c)
406*5785cbb4SAlex Rønne Petersendeclare double @llvm.fmuladd.f64(double %a, double %b, double %c)
407