1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s
3 ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s
5 define <1 x float> @constrained_vector_fdiv_v1f32() {
6 ; PC64LE-LABEL: constrained_vector_fdiv_v1f32:
7 ; PC64LE: # %bb.0: # %entry
8 ; PC64LE-NEXT: addis 3, 2, .LCPI0_0@toc@ha
9 ; PC64LE-NEXT: addis 4, 2, .LCPI0_1@toc@ha
10 ; PC64LE-NEXT: lfs 0, .LCPI0_0@toc@l(3)
11 ; PC64LE-NEXT: lfs 1, .LCPI0_1@toc@l(4)
12 ; PC64LE-NEXT: xsdivsp 0, 1, 0
13 ; PC64LE-NEXT: xscvdpspn 0, 0
14 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
17 ; PC64LE9-LABEL: constrained_vector_fdiv_v1f32:
18 ; PC64LE9: # %bb.0: # %entry
19 ; PC64LE9-NEXT: addis 3, 2, .LCPI0_0@toc@ha
20 ; PC64LE9-NEXT: lfs 0, .LCPI0_0@toc@l(3)
21 ; PC64LE9-NEXT: addis 3, 2, .LCPI0_1@toc@ha
22 ; PC64LE9-NEXT: lfs 1, .LCPI0_1@toc@l(3)
23 ; PC64LE9-NEXT: xsdivsp 0, 1, 0
24 ; PC64LE9-NEXT: xscvdpspn 0, 0
25 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
28 %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32(
29 <1 x float> <float 1.000000e+00>,
30 <1 x float> <float 1.000000e+01>,
31 metadata !"round.dynamic",
32 metadata !"fpexcept.strict")
36 define <2 x double> @constrained_vector_fdiv_v2f64() {
37 ; PC64LE-LABEL: constrained_vector_fdiv_v2f64:
38 ; PC64LE: # %bb.0: # %entry
39 ; PC64LE-NEXT: addis 3, 2, .LCPI1_0@toc@ha
40 ; PC64LE-NEXT: addis 4, 2, .LCPI1_1@toc@ha
41 ; PC64LE-NEXT: addi 3, 3, .LCPI1_0@toc@l
42 ; PC64LE-NEXT: addi 4, 4, .LCPI1_1@toc@l
43 ; PC64LE-NEXT: lxvd2x 0, 0, 3
44 ; PC64LE-NEXT: lxvd2x 1, 0, 4
45 ; PC64LE-NEXT: xxswapd 0, 0
46 ; PC64LE-NEXT: xxswapd 1, 1
47 ; PC64LE-NEXT: xvdivdp 34, 1, 0
50 ; PC64LE9-LABEL: constrained_vector_fdiv_v2f64:
51 ; PC64LE9: # %bb.0: # %entry
52 ; PC64LE9-NEXT: addis 3, 2, .LCPI1_0@toc@ha
53 ; PC64LE9-NEXT: addi 3, 3, .LCPI1_0@toc@l
54 ; PC64LE9-NEXT: lxvx 0, 0, 3
55 ; PC64LE9-NEXT: addis 3, 2, .LCPI1_1@toc@ha
56 ; PC64LE9-NEXT: addi 3, 3, .LCPI1_1@toc@l
57 ; PC64LE9-NEXT: lxvx 1, 0, 3
58 ; PC64LE9-NEXT: xvdivdp 34, 1, 0
61 %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64(
62 <2 x double> <double 1.000000e+00, double 2.000000e+00>,
63 <2 x double> <double 1.000000e+01, double 1.000000e+01>,
64 metadata !"round.dynamic",
65 metadata !"fpexcept.strict")
69 define <3 x float> @constrained_vector_fdiv_v3f32() {
70 ; PC64LE-LABEL: constrained_vector_fdiv_v3f32:
71 ; PC64LE: # %bb.0: # %entry
72 ; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha
73 ; PC64LE-NEXT: addis 4, 2, .LCPI2_3@toc@ha
74 ; PC64LE-NEXT: addis 5, 2, .LCPI2_2@toc@ha
75 ; PC64LE-NEXT: lfs 0, .LCPI2_0@toc@l(3)
76 ; PC64LE-NEXT: lfs 1, .LCPI2_3@toc@l(4)
77 ; PC64LE-NEXT: lfs 2, .LCPI2_2@toc@l(5)
78 ; PC64LE-NEXT: addis 3, 2, .LCPI2_1@toc@ha
79 ; PC64LE-NEXT: xsdivsp 1, 1, 0
80 ; PC64LE-NEXT: lfs 3, .LCPI2_1@toc@l(3)
81 ; PC64LE-NEXT: addis 3, 2, .LCPI2_4@toc@ha
82 ; PC64LE-NEXT: xsdivsp 2, 2, 0
83 ; PC64LE-NEXT: addi 3, 3, .LCPI2_4@toc@l
84 ; PC64LE-NEXT: lvx 4, 0, 3
85 ; PC64LE-NEXT: xsdivsp 0, 3, 0
86 ; PC64LE-NEXT: xscvdpspn 1, 1
87 ; PC64LE-NEXT: xscvdpspn 2, 2
88 ; PC64LE-NEXT: xscvdpspn 0, 0
89 ; PC64LE-NEXT: xxsldwi 34, 1, 1, 1
90 ; PC64LE-NEXT: xxsldwi 35, 2, 2, 1
91 ; PC64LE-NEXT: vmrglw 2, 3, 2
92 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
93 ; PC64LE-NEXT: vperm 2, 3, 2, 4
96 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
97 ; PC64LE9: # %bb.0: # %entry
98 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha
99 ; PC64LE9-NEXT: lfs 0, .LCPI2_0@toc@l(3)
100 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_1@toc@ha
101 ; PC64LE9-NEXT: lfs 1, .LCPI2_1@toc@l(3)
102 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_2@toc@ha
103 ; PC64LE9-NEXT: xsdivsp 1, 1, 0
104 ; PC64LE9-NEXT: lfs 2, .LCPI2_2@toc@l(3)
105 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_3@toc@ha
106 ; PC64LE9-NEXT: lfs 3, .LCPI2_3@toc@l(3)
107 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_4@toc@ha
108 ; PC64LE9-NEXT: addi 3, 3, .LCPI2_4@toc@l
109 ; PC64LE9-NEXT: lxvx 36, 0, 3
110 ; PC64LE9-NEXT: xsdivsp 2, 2, 0
111 ; PC64LE9-NEXT: xsdivsp 0, 3, 0
112 ; PC64LE9-NEXT: xscvdpspn 0, 0
113 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
114 ; PC64LE9-NEXT: xscvdpspn 0, 2
115 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
116 ; PC64LE9-NEXT: xscvdpspn 0, 1
117 ; PC64LE9-NEXT: vmrglw 2, 3, 2
118 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
119 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
122 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32(
123 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
124 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
125 metadata !"round.dynamic",
126 metadata !"fpexcept.strict")
130 define <3 x double> @constrained_vector_fdiv_v3f64() {
131 ; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
132 ; PC64LE: # %bb.0: # %entry
133 ; PC64LE-NEXT: addis 3, 2, .LCPI3_2@toc@ha
134 ; PC64LE-NEXT: addis 4, 2, .LCPI3_3@toc@ha
135 ; PC64LE-NEXT: addi 3, 3, .LCPI3_2@toc@l
136 ; PC64LE-NEXT: addi 4, 4, .LCPI3_3@toc@l
137 ; PC64LE-NEXT: lxvd2x 0, 0, 3
138 ; PC64LE-NEXT: lxvd2x 1, 0, 4
139 ; PC64LE-NEXT: addis 3, 2, .LCPI3_0@toc@ha
140 ; PC64LE-NEXT: addis 4, 2, .LCPI3_1@toc@ha
141 ; PC64LE-NEXT: lfs 3, .LCPI3_0@toc@l(3)
142 ; PC64LE-NEXT: xxswapd 0, 0
143 ; PC64LE-NEXT: xxswapd 1, 1
144 ; PC64LE-NEXT: xvdivdp 2, 1, 0
145 ; PC64LE-NEXT: lfs 0, .LCPI3_1@toc@l(4)
146 ; PC64LE-NEXT: xsdivdp 3, 0, 3
147 ; PC64LE-NEXT: xxswapd 1, 2
148 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
149 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
152 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
153 ; PC64LE9: # %bb.0: # %entry
154 ; PC64LE9-NEXT: addis 3, 2, .LCPI3_0@toc@ha
155 ; PC64LE9-NEXT: lfs 0, .LCPI3_0@toc@l(3)
156 ; PC64LE9-NEXT: addis 3, 2, .LCPI3_1@toc@ha
157 ; PC64LE9-NEXT: lfs 1, .LCPI3_1@toc@l(3)
158 ; PC64LE9-NEXT: addis 3, 2, .LCPI3_2@toc@ha
159 ; PC64LE9-NEXT: addi 3, 3, .LCPI3_2@toc@l
160 ; PC64LE9-NEXT: xsdivdp 3, 1, 0
161 ; PC64LE9-NEXT: lxvx 0, 0, 3
162 ; PC64LE9-NEXT: addis 3, 2, .LCPI3_3@toc@ha
163 ; PC64LE9-NEXT: addi 3, 3, .LCPI3_3@toc@l
164 ; PC64LE9-NEXT: lxvx 1, 0, 3
165 ; PC64LE9-NEXT: xvdivdp 2, 1, 0
166 ; PC64LE9-NEXT: xxswapd 1, 2
167 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
168 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
171 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64(
172 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
173 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
174 metadata !"round.dynamic",
175 metadata !"fpexcept.strict")
176 ret <3 x double> %div
179 define <4 x double> @constrained_vector_fdiv_v4f64() {
180 ; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
181 ; PC64LE: # %bb.0: # %entry
182 ; PC64LE-NEXT: addis 3, 2, .LCPI4_0@toc@ha
183 ; PC64LE-NEXT: addis 4, 2, .LCPI4_1@toc@ha
184 ; PC64LE-NEXT: addis 5, 2, .LCPI4_2@toc@ha
185 ; PC64LE-NEXT: addi 3, 3, .LCPI4_0@toc@l
186 ; PC64LE-NEXT: lxvd2x 0, 0, 3
187 ; PC64LE-NEXT: addi 3, 4, .LCPI4_1@toc@l
188 ; PC64LE-NEXT: addi 4, 5, .LCPI4_2@toc@l
189 ; PC64LE-NEXT: lxvd2x 1, 0, 3
190 ; PC64LE-NEXT: lxvd2x 2, 0, 4
191 ; PC64LE-NEXT: xxswapd 0, 0
192 ; PC64LE-NEXT: xxswapd 1, 1
193 ; PC64LE-NEXT: xxswapd 2, 2
194 ; PC64LE-NEXT: xvdivdp 34, 1, 0
195 ; PC64LE-NEXT: xvdivdp 35, 2, 0
198 ; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
199 ; PC64LE9: # %bb.0: # %entry
200 ; PC64LE9-NEXT: addis 3, 2, .LCPI4_0@toc@ha
201 ; PC64LE9-NEXT: addi 3, 3, .LCPI4_0@toc@l
202 ; PC64LE9-NEXT: lxvx 0, 0, 3
203 ; PC64LE9-NEXT: addis 3, 2, .LCPI4_1@toc@ha
204 ; PC64LE9-NEXT: addi 3, 3, .LCPI4_1@toc@l
205 ; PC64LE9-NEXT: lxvx 1, 0, 3
206 ; PC64LE9-NEXT: addis 3, 2, .LCPI4_2@toc@ha
207 ; PC64LE9-NEXT: addi 3, 3, .LCPI4_2@toc@l
208 ; PC64LE9-NEXT: xvdivdp 34, 1, 0
209 ; PC64LE9-NEXT: lxvx 1, 0, 3
210 ; PC64LE9-NEXT: xvdivdp 35, 1, 0
213 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64(
214 <4 x double> <double 1.000000e+00, double 2.000000e+00,
215 double 3.000000e+00, double 4.000000e+00>,
216 <4 x double> <double 1.000000e+01, double 1.000000e+01,
217 double 1.000000e+01, double 1.000000e+01>,
218 metadata !"round.dynamic",
219 metadata !"fpexcept.strict")
220 ret <4 x double> %div
223 define <1 x float> @constrained_vector_frem_v1f32() {
224 ; PC64LE-LABEL: constrained_vector_frem_v1f32:
225 ; PC64LE: # %bb.0: # %entry
226 ; PC64LE-NEXT: mflr 0
227 ; PC64LE-NEXT: std 0, 16(1)
228 ; PC64LE-NEXT: stdu 1, -32(1)
229 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
230 ; PC64LE-NEXT: .cfi_offset lr, 16
231 ; PC64LE-NEXT: addis 3, 2, .LCPI5_0@toc@ha
232 ; PC64LE-NEXT: addis 4, 2, .LCPI5_1@toc@ha
233 ; PC64LE-NEXT: lfs 1, .LCPI5_0@toc@l(3)
234 ; PC64LE-NEXT: lfs 2, .LCPI5_1@toc@l(4)
235 ; PC64LE-NEXT: bl fmodf
237 ; PC64LE-NEXT: xscvdpspn 0, 1
238 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
239 ; PC64LE-NEXT: addi 1, 1, 32
240 ; PC64LE-NEXT: ld 0, 16(1)
241 ; PC64LE-NEXT: mtlr 0
244 ; PC64LE9-LABEL: constrained_vector_frem_v1f32:
245 ; PC64LE9: # %bb.0: # %entry
246 ; PC64LE9-NEXT: mflr 0
247 ; PC64LE9-NEXT: std 0, 16(1)
248 ; PC64LE9-NEXT: stdu 1, -32(1)
249 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
250 ; PC64LE9-NEXT: .cfi_offset lr, 16
251 ; PC64LE9-NEXT: addis 3, 2, .LCPI5_0@toc@ha
252 ; PC64LE9-NEXT: lfs 1, .LCPI5_0@toc@l(3)
253 ; PC64LE9-NEXT: addis 3, 2, .LCPI5_1@toc@ha
254 ; PC64LE9-NEXT: lfs 2, .LCPI5_1@toc@l(3)
255 ; PC64LE9-NEXT: bl fmodf
257 ; PC64LE9-NEXT: xscvdpspn 0, 1
258 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
259 ; PC64LE9-NEXT: addi 1, 1, 32
260 ; PC64LE9-NEXT: ld 0, 16(1)
261 ; PC64LE9-NEXT: mtlr 0
264 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32(
265 <1 x float> <float 1.000000e+00>,
266 <1 x float> <float 1.000000e+01>,
267 metadata !"round.dynamic",
268 metadata !"fpexcept.strict")
272 define <2 x double> @constrained_vector_frem_v2f64() {
273 ; PC64LE-LABEL: constrained_vector_frem_v2f64:
274 ; PC64LE: # %bb.0: # %entry
275 ; PC64LE-NEXT: mflr 0
276 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
277 ; PC64LE-NEXT: .cfi_offset lr, 16
278 ; PC64LE-NEXT: .cfi_offset f31, -8
279 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
280 ; PC64LE-NEXT: std 0, 16(1)
281 ; PC64LE-NEXT: stdu 1, -80(1)
282 ; PC64LE-NEXT: addis 4, 2, .LCPI6_1@toc@ha
283 ; PC64LE-NEXT: addis 3, 2, .LCPI6_0@toc@ha
284 ; PC64LE-NEXT: lfs 31, .LCPI6_1@toc@l(4)
285 ; PC64LE-NEXT: lfs 1, .LCPI6_0@toc@l(3)
286 ; PC64LE-NEXT: fmr 2, 31
287 ; PC64LE-NEXT: bl fmod
289 ; PC64LE-NEXT: li 3, 48
290 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
291 ; PC64LE-NEXT: fmr 2, 31
292 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
293 ; PC64LE-NEXT: addis 3, 2, .LCPI6_2@toc@ha
294 ; PC64LE-NEXT: lfs 1, .LCPI6_2@toc@l(3)
295 ; PC64LE-NEXT: bl fmod
297 ; PC64LE-NEXT: li 3, 48
298 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
299 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
300 ; PC64LE-NEXT: xxmrghd 34, 1, 0
301 ; PC64LE-NEXT: addi 1, 1, 80
302 ; PC64LE-NEXT: ld 0, 16(1)
303 ; PC64LE-NEXT: mtlr 0
304 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
307 ; PC64LE9-LABEL: constrained_vector_frem_v2f64:
308 ; PC64LE9: # %bb.0: # %entry
309 ; PC64LE9-NEXT: mflr 0
310 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
311 ; PC64LE9-NEXT: .cfi_offset lr, 16
312 ; PC64LE9-NEXT: .cfi_offset f31, -8
313 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
314 ; PC64LE9-NEXT: std 0, 16(1)
315 ; PC64LE9-NEXT: stdu 1, -64(1)
316 ; PC64LE9-NEXT: addis 3, 2, .LCPI6_0@toc@ha
317 ; PC64LE9-NEXT: lfs 1, .LCPI6_0@toc@l(3)
318 ; PC64LE9-NEXT: addis 3, 2, .LCPI6_1@toc@ha
319 ; PC64LE9-NEXT: lfs 31, .LCPI6_1@toc@l(3)
320 ; PC64LE9-NEXT: fmr 2, 31
321 ; PC64LE9-NEXT: bl fmod
323 ; PC64LE9-NEXT: addis 3, 2, .LCPI6_2@toc@ha
324 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
325 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
326 ; PC64LE9-NEXT: lfs 1, .LCPI6_2@toc@l(3)
327 ; PC64LE9-NEXT: fmr 2, 31
328 ; PC64LE9-NEXT: bl fmod
330 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
331 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
332 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
333 ; PC64LE9-NEXT: addi 1, 1, 64
334 ; PC64LE9-NEXT: ld 0, 16(1)
335 ; PC64LE9-NEXT: mtlr 0
336 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
339 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64(
340 <2 x double> <double 1.000000e+00, double 2.000000e+00>,
341 <2 x double> <double 1.000000e+01, double 1.000000e+01>,
342 metadata !"round.dynamic",
343 metadata !"fpexcept.strict")
344 ret <2 x double> %rem
347 define <3 x float> @constrained_vector_frem_v3f32() {
348 ; PC64LE-LABEL: constrained_vector_frem_v3f32:
349 ; PC64LE: # %bb.0: # %entry
350 ; PC64LE-NEXT: mflr 0
351 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
352 ; PC64LE-NEXT: .cfi_offset lr, 16
353 ; PC64LE-NEXT: .cfi_offset f29, -24
354 ; PC64LE-NEXT: .cfi_offset f30, -16
355 ; PC64LE-NEXT: .cfi_offset f31, -8
356 ; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
357 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
358 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
359 ; PC64LE-NEXT: std 0, 16(1)
360 ; PC64LE-NEXT: stdu 1, -64(1)
361 ; PC64LE-NEXT: addis 4, 2, .LCPI7_1@toc@ha
362 ; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha
363 ; PC64LE-NEXT: lfs 31, .LCPI7_1@toc@l(4)
364 ; PC64LE-NEXT: lfs 1, .LCPI7_0@toc@l(3)
365 ; PC64LE-NEXT: fmr 2, 31
366 ; PC64LE-NEXT: bl fmodf
368 ; PC64LE-NEXT: addis 3, 2, .LCPI7_2@toc@ha
369 ; PC64LE-NEXT: fmr 2, 31
370 ; PC64LE-NEXT: fmr 30, 1
371 ; PC64LE-NEXT: lfs 1, .LCPI7_2@toc@l(3)
372 ; PC64LE-NEXT: bl fmodf
374 ; PC64LE-NEXT: addis 3, 2, .LCPI7_3@toc@ha
375 ; PC64LE-NEXT: fmr 2, 31
376 ; PC64LE-NEXT: fmr 29, 1
377 ; PC64LE-NEXT: lfs 1, .LCPI7_3@toc@l(3)
378 ; PC64LE-NEXT: bl fmodf
380 ; PC64LE-NEXT: xscvdpspn 0, 29
381 ; PC64LE-NEXT: addis 3, 2, .LCPI7_4@toc@ha
382 ; PC64LE-NEXT: xscvdpspn 1, 1
383 ; PC64LE-NEXT: addi 3, 3, .LCPI7_4@toc@l
384 ; PC64LE-NEXT: lvx 4, 0, 3
385 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
386 ; PC64LE-NEXT: xscvdpspn 0, 30
387 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
388 ; PC64LE-NEXT: vmrglw 2, 2, 3
389 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
390 ; PC64LE-NEXT: vperm 2, 3, 2, 4
391 ; PC64LE-NEXT: addi 1, 1, 64
392 ; PC64LE-NEXT: ld 0, 16(1)
393 ; PC64LE-NEXT: mtlr 0
394 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
395 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
396 ; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
399 ; PC64LE9-LABEL: constrained_vector_frem_v3f32:
400 ; PC64LE9: # %bb.0: # %entry
401 ; PC64LE9-NEXT: mflr 0
402 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
403 ; PC64LE9-NEXT: .cfi_offset lr, 16
404 ; PC64LE9-NEXT: .cfi_offset f29, -24
405 ; PC64LE9-NEXT: .cfi_offset f30, -16
406 ; PC64LE9-NEXT: .cfi_offset f31, -8
407 ; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
408 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
409 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
410 ; PC64LE9-NEXT: std 0, 16(1)
411 ; PC64LE9-NEXT: stdu 1, -64(1)
412 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha
413 ; PC64LE9-NEXT: lfs 1, .LCPI7_0@toc@l(3)
414 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_1@toc@ha
415 ; PC64LE9-NEXT: lfs 31, .LCPI7_1@toc@l(3)
416 ; PC64LE9-NEXT: fmr 2, 31
417 ; PC64LE9-NEXT: bl fmodf
419 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_2@toc@ha
420 ; PC64LE9-NEXT: fmr 30, 1
421 ; PC64LE9-NEXT: lfs 1, .LCPI7_2@toc@l(3)
422 ; PC64LE9-NEXT: fmr 2, 31
423 ; PC64LE9-NEXT: bl fmodf
425 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_3@toc@ha
426 ; PC64LE9-NEXT: fmr 29, 1
427 ; PC64LE9-NEXT: lfs 1, .LCPI7_3@toc@l(3)
428 ; PC64LE9-NEXT: fmr 2, 31
429 ; PC64LE9-NEXT: bl fmodf
431 ; PC64LE9-NEXT: xscvdpspn 0, 1
432 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
433 ; PC64LE9-NEXT: xscvdpspn 0, 29
434 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
435 ; PC64LE9-NEXT: xscvdpspn 0, 30
436 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_4@toc@ha
437 ; PC64LE9-NEXT: addi 3, 3, .LCPI7_4@toc@l
438 ; PC64LE9-NEXT: lxvx 36, 0, 3
439 ; PC64LE9-NEXT: vmrglw 2, 3, 2
440 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
441 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
442 ; PC64LE9-NEXT: addi 1, 1, 64
443 ; PC64LE9-NEXT: ld 0, 16(1)
444 ; PC64LE9-NEXT: mtlr 0
445 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
446 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
447 ; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
450 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32(
451 <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
452 <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
453 metadata !"round.dynamic",
454 metadata !"fpexcept.strict")
458 define <3 x double> @constrained_vector_frem_v3f64() {
459 ; PC64LE-LABEL: constrained_vector_frem_v3f64:
460 ; PC64LE: # %bb.0: # %entry
461 ; PC64LE-NEXT: mflr 0
462 ; PC64LE-NEXT: std 0, 16(1)
463 ; PC64LE-NEXT: stdu 1, -96(1)
464 ; PC64LE-NEXT: .cfi_def_cfa_offset 96
465 ; PC64LE-NEXT: .cfi_offset lr, 16
466 ; PC64LE-NEXT: .cfi_offset f31, -8
467 ; PC64LE-NEXT: .cfi_offset v31, -32
468 ; PC64LE-NEXT: addis 4, 2, .LCPI8_1@toc@ha
469 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
470 ; PC64LE-NEXT: li 3, 64
471 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
472 ; PC64LE-NEXT: addis 3, 2, .LCPI8_0@toc@ha
473 ; PC64LE-NEXT: lfs 31, .LCPI8_1@toc@l(4)
474 ; PC64LE-NEXT: lfs 1, .LCPI8_0@toc@l(3)
475 ; PC64LE-NEXT: fmr 2, 31
476 ; PC64LE-NEXT: bl fmod
478 ; PC64LE-NEXT: li 3, 48
479 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
480 ; PC64LE-NEXT: fmr 2, 31
481 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
482 ; PC64LE-NEXT: addis 3, 2, .LCPI8_2@toc@ha
483 ; PC64LE-NEXT: lfs 1, .LCPI8_2@toc@l(3)
484 ; PC64LE-NEXT: bl fmod
486 ; PC64LE-NEXT: li 3, 48
487 ; PC64LE-NEXT: fmr 2, 31
488 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
489 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
490 ; PC64LE-NEXT: addis 3, 2, .LCPI8_3@toc@ha
491 ; PC64LE-NEXT: xxmrghd 63, 1, 0
492 ; PC64LE-NEXT: lfs 1, .LCPI8_3@toc@l(3)
493 ; PC64LE-NEXT: bl fmod
495 ; PC64LE-NEXT: li 3, 64
496 ; PC64LE-NEXT: fmr 3, 1
497 ; PC64LE-NEXT: xxlor 1, 63, 63
498 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
499 ; PC64LE-NEXT: xxlor 2, 63, 63
500 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
501 ; PC64LE-NEXT: addi 1, 1, 96
502 ; PC64LE-NEXT: ld 0, 16(1)
503 ; PC64LE-NEXT: mtlr 0
506 ; PC64LE9-LABEL: constrained_vector_frem_v3f64:
507 ; PC64LE9: # %bb.0: # %entry
508 ; PC64LE9-NEXT: mflr 0
509 ; PC64LE9-NEXT: std 0, 16(1)
510 ; PC64LE9-NEXT: stdu 1, -80(1)
511 ; PC64LE9-NEXT: .cfi_def_cfa_offset 80
512 ; PC64LE9-NEXT: .cfi_offset lr, 16
513 ; PC64LE9-NEXT: .cfi_offset f31, -8
514 ; PC64LE9-NEXT: .cfi_offset v31, -32
515 ; PC64LE9-NEXT: addis 3, 2, .LCPI8_0@toc@ha
516 ; PC64LE9-NEXT: lfs 1, .LCPI8_0@toc@l(3)
517 ; PC64LE9-NEXT: addis 3, 2, .LCPI8_1@toc@ha
518 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
519 ; PC64LE9-NEXT: lfs 31, .LCPI8_1@toc@l(3)
520 ; PC64LE9-NEXT: fmr 2, 31
521 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
522 ; PC64LE9-NEXT: bl fmod
524 ; PC64LE9-NEXT: addis 3, 2, .LCPI8_2@toc@ha
525 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
526 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
527 ; PC64LE9-NEXT: lfs 1, .LCPI8_2@toc@l(3)
528 ; PC64LE9-NEXT: fmr 2, 31
529 ; PC64LE9-NEXT: bl fmod
531 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
532 ; PC64LE9-NEXT: addis 3, 2, .LCPI8_3@toc@ha
533 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
534 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
535 ; PC64LE9-NEXT: lfs 1, .LCPI8_3@toc@l(3)
536 ; PC64LE9-NEXT: fmr 2, 31
537 ; PC64LE9-NEXT: bl fmod
539 ; PC64LE9-NEXT: fmr 3, 1
540 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
541 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
542 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
543 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
544 ; PC64LE9-NEXT: addi 1, 1, 80
545 ; PC64LE9-NEXT: ld 0, 16(1)
546 ; PC64LE9-NEXT: mtlr 0
549 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64(
550 <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
551 <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
552 metadata !"round.dynamic",
553 metadata !"fpexcept.strict")
554 ret <3 x double> %rem
557 define <4 x double> @constrained_vector_frem_v4f64() {
558 ; PC64LE-LABEL: constrained_vector_frem_v4f64:
560 ; PC64LE-NEXT: mflr 0
561 ; PC64LE-NEXT: std 0, 16(1)
562 ; PC64LE-NEXT: stdu 1, -96(1)
563 ; PC64LE-NEXT: .cfi_def_cfa_offset 96
564 ; PC64LE-NEXT: .cfi_offset lr, 16
565 ; PC64LE-NEXT: .cfi_offset f31, -8
566 ; PC64LE-NEXT: .cfi_offset v31, -32
567 ; PC64LE-NEXT: addis 4, 2, .LCPI9_1@toc@ha
568 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
569 ; PC64LE-NEXT: li 3, 64
570 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
571 ; PC64LE-NEXT: addis 3, 2, .LCPI9_0@toc@ha
572 ; PC64LE-NEXT: lfs 31, .LCPI9_1@toc@l(4)
573 ; PC64LE-NEXT: lfs 1, .LCPI9_0@toc@l(3)
574 ; PC64LE-NEXT: fmr 2, 31
575 ; PC64LE-NEXT: bl fmod
577 ; PC64LE-NEXT: li 3, 48
578 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
579 ; PC64LE-NEXT: fmr 2, 31
580 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
581 ; PC64LE-NEXT: addis 3, 2, .LCPI9_2@toc@ha
582 ; PC64LE-NEXT: lfs 1, .LCPI9_2@toc@l(3)
583 ; PC64LE-NEXT: bl fmod
585 ; PC64LE-NEXT: li 3, 48
586 ; PC64LE-NEXT: fmr 2, 31
587 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
588 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
589 ; PC64LE-NEXT: addis 3, 2, .LCPI9_3@toc@ha
590 ; PC64LE-NEXT: xxmrghd 63, 1, 0
591 ; PC64LE-NEXT: lfs 1, .LCPI9_3@toc@l(3)
592 ; PC64LE-NEXT: bl fmod
594 ; PC64LE-NEXT: li 3, 48
595 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
596 ; PC64LE-NEXT: fmr 2, 31
597 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
598 ; PC64LE-NEXT: addis 3, 2, .LCPI9_4@toc@ha
599 ; PC64LE-NEXT: lfs 1, .LCPI9_4@toc@l(3)
600 ; PC64LE-NEXT: bl fmod
602 ; PC64LE-NEXT: li 3, 48
603 ; PC64LE-NEXT: vmr 2, 31
604 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
605 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
606 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
607 ; PC64LE-NEXT: li 3, 64
608 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
609 ; PC64LE-NEXT: xxmrghd 35, 1, 0
610 ; PC64LE-NEXT: addi 1, 1, 96
611 ; PC64LE-NEXT: ld 0, 16(1)
612 ; PC64LE-NEXT: mtlr 0
615 ; PC64LE9-LABEL: constrained_vector_frem_v4f64:
617 ; PC64LE9-NEXT: mflr 0
618 ; PC64LE9-NEXT: std 0, 16(1)
619 ; PC64LE9-NEXT: stdu 1, -80(1)
620 ; PC64LE9-NEXT: .cfi_def_cfa_offset 80
621 ; PC64LE9-NEXT: .cfi_offset lr, 16
622 ; PC64LE9-NEXT: .cfi_offset f31, -8
623 ; PC64LE9-NEXT: .cfi_offset v31, -32
624 ; PC64LE9-NEXT: addis 3, 2, .LCPI9_0@toc@ha
625 ; PC64LE9-NEXT: lfs 1, .LCPI9_0@toc@l(3)
626 ; PC64LE9-NEXT: addis 3, 2, .LCPI9_1@toc@ha
627 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
628 ; PC64LE9-NEXT: lfs 31, .LCPI9_1@toc@l(3)
629 ; PC64LE9-NEXT: fmr 2, 31
630 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
631 ; PC64LE9-NEXT: bl fmod
633 ; PC64LE9-NEXT: addis 3, 2, .LCPI9_2@toc@ha
634 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
635 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
636 ; PC64LE9-NEXT: lfs 1, .LCPI9_2@toc@l(3)
637 ; PC64LE9-NEXT: fmr 2, 31
638 ; PC64LE9-NEXT: bl fmod
640 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
641 ; PC64LE9-NEXT: addis 3, 2, .LCPI9_3@toc@ha
642 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
643 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
644 ; PC64LE9-NEXT: lfs 1, .LCPI9_3@toc@l(3)
645 ; PC64LE9-NEXT: fmr 2, 31
646 ; PC64LE9-NEXT: bl fmod
648 ; PC64LE9-NEXT: addis 3, 2, .LCPI9_4@toc@ha
649 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
650 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
651 ; PC64LE9-NEXT: lfs 1, .LCPI9_4@toc@l(3)
652 ; PC64LE9-NEXT: fmr 2, 31
653 ; PC64LE9-NEXT: bl fmod
655 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
656 ; PC64LE9-NEXT: vmr 2, 31
657 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
658 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
659 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
660 ; PC64LE9-NEXT: xxmrghd 35, 1, 0
661 ; PC64LE9-NEXT: addi 1, 1, 80
662 ; PC64LE9-NEXT: ld 0, 16(1)
663 ; PC64LE9-NEXT: mtlr 0
665 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64(
666 <4 x double> <double 1.000000e+00, double 2.000000e+00,
667 double 3.000000e+00, double 4.000000e+00>,
668 <4 x double> <double 1.000000e+01, double 1.000000e+01,
669 double 1.000000e+01, double 1.000000e+01>,
670 metadata !"round.dynamic",
671 metadata !"fpexcept.strict")
672 ret <4 x double> %rem
675 define <1 x float> @constrained_vector_fmul_v1f32() {
676 ; PC64LE-LABEL: constrained_vector_fmul_v1f32:
677 ; PC64LE: # %bb.0: # %entry
678 ; PC64LE-NEXT: addis 3, 2, .LCPI10_0@toc@ha
679 ; PC64LE-NEXT: addis 4, 2, .LCPI10_1@toc@ha
680 ; PC64LE-NEXT: lfs 0, .LCPI10_0@toc@l(3)
681 ; PC64LE-NEXT: lfs 1, .LCPI10_1@toc@l(4)
682 ; PC64LE-NEXT: xsmulsp 0, 1, 0
683 ; PC64LE-NEXT: xscvdpspn 0, 0
684 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
687 ; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
688 ; PC64LE9: # %bb.0: # %entry
689 ; PC64LE9-NEXT: addis 3, 2, .LCPI10_0@toc@ha
690 ; PC64LE9-NEXT: lfs 0, .LCPI10_0@toc@l(3)
691 ; PC64LE9-NEXT: addis 3, 2, .LCPI10_1@toc@ha
692 ; PC64LE9-NEXT: lfs 1, .LCPI10_1@toc@l(3)
693 ; PC64LE9-NEXT: xsmulsp 0, 1, 0
694 ; PC64LE9-NEXT: xscvdpspn 0, 0
695 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
698 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
699 <1 x float> <float 0x7FF0000000000000>,
700 <1 x float> <float 2.000000e+00>,
701 metadata !"round.dynamic",
702 metadata !"fpexcept.strict")
706 define <2 x double> @constrained_vector_fmul_v2f64() {
707 ; PC64LE-LABEL: constrained_vector_fmul_v2f64:
708 ; PC64LE: # %bb.0: # %entry
709 ; PC64LE-NEXT: addis 3, 2, .LCPI11_0@toc@ha
710 ; PC64LE-NEXT: addis 4, 2, .LCPI11_1@toc@ha
711 ; PC64LE-NEXT: addi 3, 3, .LCPI11_0@toc@l
712 ; PC64LE-NEXT: addi 4, 4, .LCPI11_1@toc@l
713 ; PC64LE-NEXT: lxvd2x 0, 0, 3
714 ; PC64LE-NEXT: lxvd2x 1, 0, 4
715 ; PC64LE-NEXT: xxswapd 0, 0
716 ; PC64LE-NEXT: xxswapd 1, 1
717 ; PC64LE-NEXT: xvmuldp 34, 1, 0
720 ; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
721 ; PC64LE9: # %bb.0: # %entry
722 ; PC64LE9-NEXT: addis 3, 2, .LCPI11_0@toc@ha
723 ; PC64LE9-NEXT: addi 3, 3, .LCPI11_0@toc@l
724 ; PC64LE9-NEXT: lxvx 0, 0, 3
725 ; PC64LE9-NEXT: addis 3, 2, .LCPI11_1@toc@ha
726 ; PC64LE9-NEXT: addi 3, 3, .LCPI11_1@toc@l
727 ; PC64LE9-NEXT: lxvx 1, 0, 3
728 ; PC64LE9-NEXT: xvmuldp 34, 1, 0
731 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(
732 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
733 <2 x double> <double 2.000000e+00, double 3.000000e+00>,
734 metadata !"round.dynamic",
735 metadata !"fpexcept.strict")
736 ret <2 x double> %mul
739 define <3 x float> @constrained_vector_fmul_v3f32() {
740 ; PC64LE-LABEL: constrained_vector_fmul_v3f32:
741 ; PC64LE: # %bb.0: # %entry
742 ; PC64LE-NEXT: addis 3, 2, .LCPI12_1@toc@ha
743 ; PC64LE-NEXT: addis 4, 2, .LCPI12_3@toc@ha
744 ; PC64LE-NEXT: addis 5, 2, .LCPI12_2@toc@ha
745 ; PC64LE-NEXT: lfs 0, .LCPI12_1@toc@l(3)
746 ; PC64LE-NEXT: lfs 1, .LCPI12_3@toc@l(4)
747 ; PC64LE-NEXT: lfs 2, .LCPI12_2@toc@l(5)
748 ; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha
749 ; PC64LE-NEXT: xsmulsp 1, 0, 1
750 ; PC64LE-NEXT: lfs 3, .LCPI12_0@toc@l(3)
751 ; PC64LE-NEXT: addis 3, 2, .LCPI12_4@toc@ha
752 ; PC64LE-NEXT: xsmulsp 2, 0, 2
753 ; PC64LE-NEXT: addi 3, 3, .LCPI12_4@toc@l
754 ; PC64LE-NEXT: lvx 4, 0, 3
755 ; PC64LE-NEXT: xsmulsp 0, 0, 3
756 ; PC64LE-NEXT: xscvdpspn 1, 1
757 ; PC64LE-NEXT: xscvdpspn 2, 2
758 ; PC64LE-NEXT: xscvdpspn 0, 0
759 ; PC64LE-NEXT: xxsldwi 34, 1, 1, 1
760 ; PC64LE-NEXT: xxsldwi 35, 2, 2, 1
761 ; PC64LE-NEXT: vmrglw 2, 3, 2
762 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
763 ; PC64LE-NEXT: vperm 2, 3, 2, 4
766 ; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
767 ; PC64LE9: # %bb.0: # %entry
768 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha
769 ; PC64LE9-NEXT: lfs 0, .LCPI12_0@toc@l(3)
770 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_1@toc@ha
771 ; PC64LE9-NEXT: lfs 1, .LCPI12_1@toc@l(3)
772 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_2@toc@ha
773 ; PC64LE9-NEXT: xsmulsp 0, 1, 0
774 ; PC64LE9-NEXT: lfs 2, .LCPI12_2@toc@l(3)
775 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_3@toc@ha
776 ; PC64LE9-NEXT: lfs 3, .LCPI12_3@toc@l(3)
777 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_4@toc@ha
778 ; PC64LE9-NEXT: addi 3, 3, .LCPI12_4@toc@l
779 ; PC64LE9-NEXT: lxvx 36, 0, 3
780 ; PC64LE9-NEXT: xsmulsp 2, 1, 2
781 ; PC64LE9-NEXT: xsmulsp 1, 1, 3
782 ; PC64LE9-NEXT: xscvdpspn 0, 0
783 ; PC64LE9-NEXT: xscvdpspn 1, 1
784 ; PC64LE9-NEXT: xxsldwi 34, 1, 1, 1
785 ; PC64LE9-NEXT: xscvdpspn 1, 2
786 ; PC64LE9-NEXT: xxsldwi 35, 1, 1, 1
787 ; PC64LE9-NEXT: vmrglw 2, 3, 2
788 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
789 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
792 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32(
793 <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000,
794 float 0x7FF0000000000000>,
795 <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>,
796 metadata !"round.dynamic",
797 metadata !"fpexcept.strict")
801 define <3 x double> @constrained_vector_fmul_v3f64() {
802 ; PC64LE-LABEL: constrained_vector_fmul_v3f64:
803 ; PC64LE: # %bb.0: # %entry
804 ; PC64LE-NEXT: addis 3, 2, .LCPI13_2@toc@ha
805 ; PC64LE-NEXT: addis 4, 2, .LCPI13_3@toc@ha
806 ; PC64LE-NEXT: addi 3, 3, .LCPI13_2@toc@l
807 ; PC64LE-NEXT: addi 4, 4, .LCPI13_3@toc@l
808 ; PC64LE-NEXT: lxvd2x 0, 0, 3
809 ; PC64LE-NEXT: lxvd2x 1, 0, 4
810 ; PC64LE-NEXT: addis 3, 2, .LCPI13_0@toc@ha
811 ; PC64LE-NEXT: addis 4, 2, .LCPI13_1@toc@ha
812 ; PC64LE-NEXT: lfd 3, .LCPI13_0@toc@l(3)
813 ; PC64LE-NEXT: xxswapd 0, 0
814 ; PC64LE-NEXT: xxswapd 1, 1
815 ; PC64LE-NEXT: xvmuldp 2, 1, 0
816 ; PC64LE-NEXT: lfs 0, .LCPI13_1@toc@l(4)
817 ; PC64LE-NEXT: xsmuldp 3, 3, 0
818 ; PC64LE-NEXT: xxswapd 1, 2
819 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
820 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
823 ; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
824 ; PC64LE9: # %bb.0: # %entry
825 ; PC64LE9-NEXT: addis 3, 2, .LCPI13_0@toc@ha
826 ; PC64LE9-NEXT: lfd 0, .LCPI13_0@toc@l(3)
827 ; PC64LE9-NEXT: addis 3, 2, .LCPI13_1@toc@ha
828 ; PC64LE9-NEXT: lfs 1, .LCPI13_1@toc@l(3)
829 ; PC64LE9-NEXT: addis 3, 2, .LCPI13_2@toc@ha
830 ; PC64LE9-NEXT: addi 3, 3, .LCPI13_2@toc@l
831 ; PC64LE9-NEXT: xsmuldp 3, 0, 1
832 ; PC64LE9-NEXT: lxvx 0, 0, 3
833 ; PC64LE9-NEXT: addis 3, 2, .LCPI13_3@toc@ha
834 ; PC64LE9-NEXT: addi 3, 3, .LCPI13_3@toc@l
835 ; PC64LE9-NEXT: lxvx 1, 0, 3
836 ; PC64LE9-NEXT: xvmuldp 2, 1, 0
837 ; PC64LE9-NEXT: xxswapd 1, 2
838 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
839 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
842 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
843 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
844 double 0x7FEFFFFFFFFFFFFF>,
845 <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>,
846 metadata !"round.dynamic",
847 metadata !"fpexcept.strict")
848 ret <3 x double> %mul
851 define <4 x double> @constrained_vector_fmul_v4f64() {
852 ; PC64LE-LABEL: constrained_vector_fmul_v4f64:
853 ; PC64LE: # %bb.0: # %entry
854 ; PC64LE-NEXT: addis 3, 2, .LCPI14_0@toc@ha
855 ; PC64LE-NEXT: addis 4, 2, .LCPI14_1@toc@ha
856 ; PC64LE-NEXT: addis 5, 2, .LCPI14_2@toc@ha
857 ; PC64LE-NEXT: addi 3, 3, .LCPI14_0@toc@l
858 ; PC64LE-NEXT: addi 4, 4, .LCPI14_1@toc@l
859 ; PC64LE-NEXT: lxvd2x 0, 0, 3
860 ; PC64LE-NEXT: addi 3, 5, .LCPI14_2@toc@l
861 ; PC64LE-NEXT: lxvd2x 1, 0, 4
862 ; PC64LE-NEXT: lxvd2x 2, 0, 3
863 ; PC64LE-NEXT: xxswapd 0, 0
864 ; PC64LE-NEXT: xxswapd 1, 1
865 ; PC64LE-NEXT: xxswapd 2, 2
866 ; PC64LE-NEXT: xvmuldp 34, 1, 0
867 ; PC64LE-NEXT: xvmuldp 35, 1, 2
870 ; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
871 ; PC64LE9: # %bb.0: # %entry
872 ; PC64LE9-NEXT: addis 3, 2, .LCPI14_0@toc@ha
873 ; PC64LE9-NEXT: addi 3, 3, .LCPI14_0@toc@l
874 ; PC64LE9-NEXT: lxvx 0, 0, 3
875 ; PC64LE9-NEXT: addis 3, 2, .LCPI14_1@toc@ha
876 ; PC64LE9-NEXT: addi 3, 3, .LCPI14_1@toc@l
877 ; PC64LE9-NEXT: lxvx 1, 0, 3
878 ; PC64LE9-NEXT: addis 3, 2, .LCPI14_2@toc@ha
879 ; PC64LE9-NEXT: addi 3, 3, .LCPI14_2@toc@l
880 ; PC64LE9-NEXT: xvmuldp 34, 1, 0
881 ; PC64LE9-NEXT: lxvx 0, 0, 3
882 ; PC64LE9-NEXT: xvmuldp 35, 1, 0
885 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(
886 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
887 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
888 <4 x double> <double 2.000000e+00, double 3.000000e+00,
889 double 4.000000e+00, double 5.000000e+00>,
890 metadata !"round.dynamic",
891 metadata !"fpexcept.strict")
892 ret <4 x double> %mul
895 define <1 x float> @constrained_vector_fadd_v1f32() {
896 ; PC64LE-LABEL: constrained_vector_fadd_v1f32:
897 ; PC64LE: # %bb.0: # %entry
898 ; PC64LE-NEXT: addis 3, 2, .LCPI15_0@toc@ha
899 ; PC64LE-NEXT: addis 4, 2, .LCPI15_1@toc@ha
900 ; PC64LE-NEXT: lfs 0, .LCPI15_0@toc@l(3)
901 ; PC64LE-NEXT: lfs 1, .LCPI15_1@toc@l(4)
902 ; PC64LE-NEXT: xsaddsp 0, 1, 0
903 ; PC64LE-NEXT: xscvdpspn 0, 0
904 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
907 ; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
908 ; PC64LE9: # %bb.0: # %entry
909 ; PC64LE9-NEXT: addis 3, 2, .LCPI15_0@toc@ha
910 ; PC64LE9-NEXT: lfs 0, .LCPI15_0@toc@l(3)
911 ; PC64LE9-NEXT: addis 3, 2, .LCPI15_1@toc@ha
912 ; PC64LE9-NEXT: lfs 1, .LCPI15_1@toc@l(3)
913 ; PC64LE9-NEXT: xsaddsp 0, 1, 0
914 ; PC64LE9-NEXT: xscvdpspn 0, 0
915 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
918 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
919 <1 x float> <float 0x7FF0000000000000>,
920 <1 x float> <float 1.0>,
921 metadata !"round.dynamic",
922 metadata !"fpexcept.strict")
926 define <2 x double> @constrained_vector_fadd_v2f64() {
927 ; PC64LE-LABEL: constrained_vector_fadd_v2f64:
928 ; PC64LE: # %bb.0: # %entry
929 ; PC64LE-NEXT: addis 3, 2, .LCPI16_0@toc@ha
930 ; PC64LE-NEXT: addis 4, 2, .LCPI16_1@toc@ha
931 ; PC64LE-NEXT: addi 3, 3, .LCPI16_0@toc@l
932 ; PC64LE-NEXT: addi 4, 4, .LCPI16_1@toc@l
933 ; PC64LE-NEXT: lxvd2x 0, 0, 3
934 ; PC64LE-NEXT: lxvd2x 1, 0, 4
935 ; PC64LE-NEXT: xxswapd 0, 0
936 ; PC64LE-NEXT: xxswapd 1, 1
937 ; PC64LE-NEXT: xvadddp 34, 1, 0
940 ; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
941 ; PC64LE9: # %bb.0: # %entry
942 ; PC64LE9-NEXT: addis 3, 2, .LCPI16_0@toc@ha
943 ; PC64LE9-NEXT: addi 3, 3, .LCPI16_0@toc@l
944 ; PC64LE9-NEXT: lxvx 0, 0, 3
945 ; PC64LE9-NEXT: addis 3, 2, .LCPI16_1@toc@ha
946 ; PC64LE9-NEXT: addi 3, 3, .LCPI16_1@toc@l
947 ; PC64LE9-NEXT: lxvx 1, 0, 3
948 ; PC64LE9-NEXT: xvadddp 34, 1, 0
951 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(
952 <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
953 <2 x double> <double 1.000000e+00, double 1.000000e-01>,
954 metadata !"round.dynamic",
955 metadata !"fpexcept.strict")
956 ret <2 x double> %add
959 define <3 x float> @constrained_vector_fadd_v3f32() {
960 ; PC64LE-LABEL: constrained_vector_fadd_v3f32:
961 ; PC64LE: # %bb.0: # %entry
962 ; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha
963 ; PC64LE-NEXT: addis 4, 2, .LCPI17_2@toc@ha
964 ; PC64LE-NEXT: addis 5, 2, .LCPI17_1@toc@ha
965 ; PC64LE-NEXT: xxlxor 3, 3, 3
966 ; PC64LE-NEXT: lfs 0, .LCPI17_0@toc@l(3)
967 ; PC64LE-NEXT: lfs 1, .LCPI17_2@toc@l(4)
968 ; PC64LE-NEXT: lfs 2, .LCPI17_1@toc@l(5)
969 ; PC64LE-NEXT: addis 3, 2, .LCPI17_3@toc@ha
970 ; PC64LE-NEXT: addi 3, 3, .LCPI17_3@toc@l
971 ; PC64LE-NEXT: xsaddsp 1, 0, 1
972 ; PC64LE-NEXT: lvx 4, 0, 3
973 ; PC64LE-NEXT: xsaddsp 2, 0, 2
974 ; PC64LE-NEXT: xsaddsp 0, 0, 3
975 ; PC64LE-NEXT: xscvdpspn 1, 1
976 ; PC64LE-NEXT: xscvdpspn 2, 2
977 ; PC64LE-NEXT: xscvdpspn 0, 0
978 ; PC64LE-NEXT: xxsldwi 34, 1, 1, 1
979 ; PC64LE-NEXT: xxsldwi 35, 2, 2, 1
980 ; PC64LE-NEXT: vmrglw 2, 3, 2
981 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
982 ; PC64LE-NEXT: vperm 2, 3, 2, 4
985 ; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
986 ; PC64LE9: # %bb.0: # %entry
987 ; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha
988 ; PC64LE9-NEXT: lfs 0, .LCPI17_0@toc@l(3)
989 ; PC64LE9-NEXT: addis 3, 2, .LCPI17_1@toc@ha
990 ; PC64LE9-NEXT: lfs 2, .LCPI17_1@toc@l(3)
991 ; PC64LE9-NEXT: addis 3, 2, .LCPI17_2@toc@ha
992 ; PC64LE9-NEXT: xsaddsp 2, 0, 2
993 ; PC64LE9-NEXT: lfs 3, .LCPI17_2@toc@l(3)
994 ; PC64LE9-NEXT: xxlxor 1, 1, 1
995 ; PC64LE9-NEXT: xsaddsp 1, 0, 1
996 ; PC64LE9-NEXT: xsaddsp 0, 0, 3
997 ; PC64LE9-NEXT: xscvdpspn 0, 0
998 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
999 ; PC64LE9-NEXT: xscvdpspn 0, 2
1000 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
1001 ; PC64LE9-NEXT: xscvdpspn 0, 1
1002 ; PC64LE9-NEXT: addis 3, 2, .LCPI17_3@toc@ha
1003 ; PC64LE9-NEXT: addi 3, 3, .LCPI17_3@toc@l
1004 ; PC64LE9-NEXT: lxvx 36, 0, 3
1005 ; PC64LE9-NEXT: vmrglw 2, 3, 2
1006 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
1007 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
1010 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32(
1011 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
1012 float 0xFFFFFFFFE0000000>,
1013 <3 x float> <float 2.0, float 1.0, float 0.0>,
1014 metadata !"round.dynamic",
1015 metadata !"fpexcept.strict")
1016 ret <3 x float> %add
1019 define <3 x double> @constrained_vector_fadd_v3f64() {
1020 ; PC64LE-LABEL: constrained_vector_fadd_v3f64:
1021 ; PC64LE: # %bb.0: # %entry
1022 ; PC64LE-NEXT: addis 3, 2, .LCPI18_1@toc@ha
1023 ; PC64LE-NEXT: addis 4, 2, .LCPI18_2@toc@ha
1024 ; PC64LE-NEXT: addi 3, 3, .LCPI18_1@toc@l
1025 ; PC64LE-NEXT: addi 4, 4, .LCPI18_2@toc@l
1026 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1027 ; PC64LE-NEXT: lxvd2x 1, 0, 4
1028 ; PC64LE-NEXT: addis 3, 2, .LCPI18_0@toc@ha
1029 ; PC64LE-NEXT: lfd 3, .LCPI18_0@toc@l(3)
1030 ; PC64LE-NEXT: xxswapd 0, 0
1031 ; PC64LE-NEXT: xxswapd 1, 1
1032 ; PC64LE-NEXT: xvadddp 2, 1, 0
1033 ; PC64LE-NEXT: xxlxor 0, 0, 0
1034 ; PC64LE-NEXT: xsadddp 3, 3, 0
1035 ; PC64LE-NEXT: xxswapd 1, 2
1036 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1037 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1040 ; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
1041 ; PC64LE9: # %bb.0: # %entry
1042 ; PC64LE9-NEXT: addis 3, 2, .LCPI18_0@toc@ha
1043 ; PC64LE9-NEXT: lfd 0, .LCPI18_0@toc@l(3)
1044 ; PC64LE9-NEXT: addis 3, 2, .LCPI18_1@toc@ha
1045 ; PC64LE9-NEXT: xxlxor 1, 1, 1
1046 ; PC64LE9-NEXT: addi 3, 3, .LCPI18_1@toc@l
1047 ; PC64LE9-NEXT: xsadddp 3, 0, 1
1048 ; PC64LE9-NEXT: lxvx 0, 0, 3
1049 ; PC64LE9-NEXT: addis 3, 2, .LCPI18_2@toc@ha
1050 ; PC64LE9-NEXT: addi 3, 3, .LCPI18_2@toc@l
1051 ; PC64LE9-NEXT: lxvx 1, 0, 3
1052 ; PC64LE9-NEXT: xvadddp 2, 1, 0
1053 ; PC64LE9-NEXT: xxswapd 1, 2
1054 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1055 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1058 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
1059 <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
1060 double 0x7FEFFFFFFFFFFFFF>,
1061 <3 x double> <double 2.0, double 1.0, double 0.0>,
1062 metadata !"round.dynamic",
1063 metadata !"fpexcept.strict")
1064 ret <3 x double> %add
1067 define <4 x double> @constrained_vector_fadd_v4f64() {
1068 ; PC64LE-LABEL: constrained_vector_fadd_v4f64:
1069 ; PC64LE: # %bb.0: # %entry
1070 ; PC64LE-NEXT: addis 3, 2, .LCPI19_0@toc@ha
1071 ; PC64LE-NEXT: addis 4, 2, .LCPI19_1@toc@ha
1072 ; PC64LE-NEXT: addis 5, 2, .LCPI19_2@toc@ha
1073 ; PC64LE-NEXT: addi 3, 3, .LCPI19_0@toc@l
1074 ; PC64LE-NEXT: addi 4, 4, .LCPI19_1@toc@l
1075 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1076 ; PC64LE-NEXT: addi 3, 5, .LCPI19_2@toc@l
1077 ; PC64LE-NEXT: lxvd2x 1, 0, 4
1078 ; PC64LE-NEXT: lxvd2x 2, 0, 3
1079 ; PC64LE-NEXT: xxswapd 0, 0
1080 ; PC64LE-NEXT: xxswapd 1, 1
1081 ; PC64LE-NEXT: xxswapd 2, 2
1082 ; PC64LE-NEXT: xvadddp 34, 1, 0
1083 ; PC64LE-NEXT: xvadddp 35, 1, 2
1086 ; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
1087 ; PC64LE9: # %bb.0: # %entry
1088 ; PC64LE9-NEXT: addis 3, 2, .LCPI19_0@toc@ha
1089 ; PC64LE9-NEXT: addi 3, 3, .LCPI19_0@toc@l
1090 ; PC64LE9-NEXT: lxvx 0, 0, 3
1091 ; PC64LE9-NEXT: addis 3, 2, .LCPI19_1@toc@ha
1092 ; PC64LE9-NEXT: addi 3, 3, .LCPI19_1@toc@l
1093 ; PC64LE9-NEXT: lxvx 1, 0, 3
1094 ; PC64LE9-NEXT: addis 3, 2, .LCPI19_2@toc@ha
1095 ; PC64LE9-NEXT: addi 3, 3, .LCPI19_2@toc@l
1096 ; PC64LE9-NEXT: xvadddp 34, 1, 0
1097 ; PC64LE9-NEXT: lxvx 0, 0, 3
1098 ; PC64LE9-NEXT: xvadddp 35, 1, 0
1101 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64(
1102 <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
1103 double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
1104 <4 x double> <double 1.000000e+00, double 1.000000e-01,
1105 double 2.000000e+00, double 2.000000e-01>,
1106 metadata !"round.dynamic",
1107 metadata !"fpexcept.strict")
1108 ret <4 x double> %add
1111 define <1 x float> @constrained_vector_fsub_v1f32() {
1112 ; PC64LE-LABEL: constrained_vector_fsub_v1f32:
1113 ; PC64LE: # %bb.0: # %entry
1114 ; PC64LE-NEXT: addis 3, 2, .LCPI20_0@toc@ha
1115 ; PC64LE-NEXT: addis 4, 2, .LCPI20_1@toc@ha
1116 ; PC64LE-NEXT: lfs 0, .LCPI20_0@toc@l(3)
1117 ; PC64LE-NEXT: lfs 1, .LCPI20_1@toc@l(4)
1118 ; PC64LE-NEXT: xssubsp 0, 1, 0
1119 ; PC64LE-NEXT: xscvdpspn 0, 0
1120 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
1123 ; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
1124 ; PC64LE9: # %bb.0: # %entry
1125 ; PC64LE9-NEXT: addis 3, 2, .LCPI20_0@toc@ha
1126 ; PC64LE9-NEXT: lfs 0, .LCPI20_0@toc@l(3)
1127 ; PC64LE9-NEXT: addis 3, 2, .LCPI20_1@toc@ha
1128 ; PC64LE9-NEXT: lfs 1, .LCPI20_1@toc@l(3)
1129 ; PC64LE9-NEXT: xssubsp 0, 1, 0
1130 ; PC64LE9-NEXT: xscvdpspn 0, 0
1131 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
1134 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
1135 <1 x float> <float 0x7FF0000000000000>,
1136 <1 x float> <float 1.000000e+00>,
1137 metadata !"round.dynamic",
1138 metadata !"fpexcept.strict")
1139 ret <1 x float> %sub
1142 define <2 x double> @constrained_vector_fsub_v2f64() {
1143 ; PC64LE-LABEL: constrained_vector_fsub_v2f64:
1144 ; PC64LE: # %bb.0: # %entry
1145 ; PC64LE-NEXT: addis 3, 2, .LCPI21_0@toc@ha
1146 ; PC64LE-NEXT: addis 4, 2, .LCPI21_1@toc@ha
1147 ; PC64LE-NEXT: addi 3, 3, .LCPI21_0@toc@l
1148 ; PC64LE-NEXT: addi 4, 4, .LCPI21_1@toc@l
1149 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1150 ; PC64LE-NEXT: lxvd2x 1, 0, 4
1151 ; PC64LE-NEXT: xxswapd 0, 0
1152 ; PC64LE-NEXT: xxswapd 1, 1
1153 ; PC64LE-NEXT: xvsubdp 34, 1, 0
1156 ; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
1157 ; PC64LE9: # %bb.0: # %entry
1158 ; PC64LE9-NEXT: addis 3, 2, .LCPI21_0@toc@ha
1159 ; PC64LE9-NEXT: addi 3, 3, .LCPI21_0@toc@l
1160 ; PC64LE9-NEXT: lxvx 0, 0, 3
1161 ; PC64LE9-NEXT: addis 3, 2, .LCPI21_1@toc@ha
1162 ; PC64LE9-NEXT: addi 3, 3, .LCPI21_1@toc@l
1163 ; PC64LE9-NEXT: lxvx 1, 0, 3
1164 ; PC64LE9-NEXT: xvsubdp 34, 1, 0
1167 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(
1168 <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1169 <2 x double> <double 1.000000e+00, double 1.000000e-01>,
1170 metadata !"round.dynamic",
1171 metadata !"fpexcept.strict")
1172 ret <2 x double> %sub
1175 define <3 x float> @constrained_vector_fsub_v3f32() {
1176 ; PC64LE-LABEL: constrained_vector_fsub_v3f32:
1177 ; PC64LE: # %bb.0: # %entry
1178 ; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha
1179 ; PC64LE-NEXT: addis 4, 2, .LCPI22_2@toc@ha
1180 ; PC64LE-NEXT: addis 5, 2, .LCPI22_1@toc@ha
1181 ; PC64LE-NEXT: xxlxor 3, 3, 3
1182 ; PC64LE-NEXT: lfs 0, .LCPI22_0@toc@l(3)
1183 ; PC64LE-NEXT: lfs 1, .LCPI22_2@toc@l(4)
1184 ; PC64LE-NEXT: lfs 2, .LCPI22_1@toc@l(5)
1185 ; PC64LE-NEXT: addis 3, 2, .LCPI22_3@toc@ha
1186 ; PC64LE-NEXT: addi 3, 3, .LCPI22_3@toc@l
1187 ; PC64LE-NEXT: xssubsp 1, 0, 1
1188 ; PC64LE-NEXT: lvx 4, 0, 3
1189 ; PC64LE-NEXT: xssubsp 2, 0, 2
1190 ; PC64LE-NEXT: xssubsp 0, 0, 3
1191 ; PC64LE-NEXT: xscvdpspn 1, 1
1192 ; PC64LE-NEXT: xscvdpspn 2, 2
1193 ; PC64LE-NEXT: xscvdpspn 0, 0
1194 ; PC64LE-NEXT: xxsldwi 34, 1, 1, 1
1195 ; PC64LE-NEXT: xxsldwi 35, 2, 2, 1
1196 ; PC64LE-NEXT: vmrglw 2, 3, 2
1197 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
1198 ; PC64LE-NEXT: vperm 2, 3, 2, 4
1201 ; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
1202 ; PC64LE9: # %bb.0: # %entry
1203 ; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha
1204 ; PC64LE9-NEXT: lfs 0, .LCPI22_0@toc@l(3)
1205 ; PC64LE9-NEXT: addis 3, 2, .LCPI22_1@toc@ha
1206 ; PC64LE9-NEXT: lfs 2, .LCPI22_1@toc@l(3)
1207 ; PC64LE9-NEXT: addis 3, 2, .LCPI22_2@toc@ha
1208 ; PC64LE9-NEXT: xssubsp 2, 0, 2
1209 ; PC64LE9-NEXT: lfs 3, .LCPI22_2@toc@l(3)
1210 ; PC64LE9-NEXT: xxlxor 1, 1, 1
1211 ; PC64LE9-NEXT: xssubsp 1, 0, 1
1212 ; PC64LE9-NEXT: xssubsp 0, 0, 3
1213 ; PC64LE9-NEXT: xscvdpspn 0, 0
1214 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
1215 ; PC64LE9-NEXT: xscvdpspn 0, 2
1216 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
1217 ; PC64LE9-NEXT: xscvdpspn 0, 1
1218 ; PC64LE9-NEXT: addis 3, 2, .LCPI22_3@toc@ha
1219 ; PC64LE9-NEXT: addi 3, 3, .LCPI22_3@toc@l
1220 ; PC64LE9-NEXT: lxvx 36, 0, 3
1221 ; PC64LE9-NEXT: vmrglw 2, 3, 2
1222 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
1223 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
1226 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(
1227 <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
1228 float 0xFFFFFFFFE0000000>,
1229 <3 x float> <float 2.0, float 1.0, float 0.0>,
1230 metadata !"round.dynamic",
1231 metadata !"fpexcept.strict")
1232 ret <3 x float> %sub
1235 define <3 x double> @constrained_vector_fsub_v3f64() {
1236 ; PC64LE-LABEL: constrained_vector_fsub_v3f64:
1237 ; PC64LE: # %bb.0: # %entry
1238 ; PC64LE-NEXT: addis 3, 2, .LCPI23_1@toc@ha
1239 ; PC64LE-NEXT: addis 4, 2, .LCPI23_2@toc@ha
1240 ; PC64LE-NEXT: addi 3, 3, .LCPI23_1@toc@l
1241 ; PC64LE-NEXT: addi 4, 4, .LCPI23_2@toc@l
1242 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1243 ; PC64LE-NEXT: lxvd2x 1, 0, 4
1244 ; PC64LE-NEXT: addis 3, 2, .LCPI23_0@toc@ha
1245 ; PC64LE-NEXT: lfd 3, .LCPI23_0@toc@l(3)
1246 ; PC64LE-NEXT: xxswapd 0, 0
1247 ; PC64LE-NEXT: xxswapd 1, 1
1248 ; PC64LE-NEXT: xvsubdp 2, 1, 0
1249 ; PC64LE-NEXT: xxlxor 0, 0, 0
1250 ; PC64LE-NEXT: xssubdp 3, 3, 0
1251 ; PC64LE-NEXT: xxswapd 1, 2
1252 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1253 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1256 ; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
1257 ; PC64LE9: # %bb.0: # %entry
1258 ; PC64LE9-NEXT: addis 3, 2, .LCPI23_0@toc@ha
1259 ; PC64LE9-NEXT: lfd 0, .LCPI23_0@toc@l(3)
1260 ; PC64LE9-NEXT: addis 3, 2, .LCPI23_1@toc@ha
1261 ; PC64LE9-NEXT: xxlxor 1, 1, 1
1262 ; PC64LE9-NEXT: addi 3, 3, .LCPI23_1@toc@l
1263 ; PC64LE9-NEXT: xssubdp 3, 0, 1
1264 ; PC64LE9-NEXT: lxvx 0, 0, 3
1265 ; PC64LE9-NEXT: addis 3, 2, .LCPI23_2@toc@ha
1266 ; PC64LE9-NEXT: addi 3, 3, .LCPI23_2@toc@l
1267 ; PC64LE9-NEXT: lxvx 1, 0, 3
1268 ; PC64LE9-NEXT: xvsubdp 2, 1, 0
1269 ; PC64LE9-NEXT: xxswapd 1, 2
1270 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1271 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1274 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
1275 <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1276 double 0xFFEFFFFFFFFFFFFF>,
1277 <3 x double> <double 2.0, double 1.0, double 0.0>,
1278 metadata !"round.dynamic",
1279 metadata !"fpexcept.strict")
1280 ret <3 x double> %sub
1283 define <4 x double> @constrained_vector_fsub_v4f64() {
1284 ; PC64LE-LABEL: constrained_vector_fsub_v4f64:
1285 ; PC64LE: # %bb.0: # %entry
1286 ; PC64LE-NEXT: addis 3, 2, .LCPI24_0@toc@ha
1287 ; PC64LE-NEXT: addis 4, 2, .LCPI24_1@toc@ha
1288 ; PC64LE-NEXT: addis 5, 2, .LCPI24_2@toc@ha
1289 ; PC64LE-NEXT: addi 3, 3, .LCPI24_0@toc@l
1290 ; PC64LE-NEXT: addi 4, 4, .LCPI24_1@toc@l
1291 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1292 ; PC64LE-NEXT: addi 3, 5, .LCPI24_2@toc@l
1293 ; PC64LE-NEXT: lxvd2x 1, 0, 4
1294 ; PC64LE-NEXT: lxvd2x 2, 0, 3
1295 ; PC64LE-NEXT: xxswapd 0, 0
1296 ; PC64LE-NEXT: xxswapd 1, 1
1297 ; PC64LE-NEXT: xxswapd 2, 2
1298 ; PC64LE-NEXT: xvsubdp 34, 1, 0
1299 ; PC64LE-NEXT: xvsubdp 35, 1, 2
1302 ; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
1303 ; PC64LE9: # %bb.0: # %entry
1304 ; PC64LE9-NEXT: addis 3, 2, .LCPI24_0@toc@ha
1305 ; PC64LE9-NEXT: addi 3, 3, .LCPI24_0@toc@l
1306 ; PC64LE9-NEXT: lxvx 0, 0, 3
1307 ; PC64LE9-NEXT: addis 3, 2, .LCPI24_1@toc@ha
1308 ; PC64LE9-NEXT: addi 3, 3, .LCPI24_1@toc@l
1309 ; PC64LE9-NEXT: lxvx 1, 0, 3
1310 ; PC64LE9-NEXT: addis 3, 2, .LCPI24_2@toc@ha
1311 ; PC64LE9-NEXT: addi 3, 3, .LCPI24_2@toc@l
1312 ; PC64LE9-NEXT: xvsubdp 34, 1, 0
1313 ; PC64LE9-NEXT: lxvx 0, 0, 3
1314 ; PC64LE9-NEXT: xvsubdp 35, 1, 0
1317 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(
1318 <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1319 double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1320 <4 x double> <double 1.000000e+00, double 1.000000e-01,
1321 double 2.000000e+00, double 2.000000e-01>,
1322 metadata !"round.dynamic",
1323 metadata !"fpexcept.strict")
1324 ret <4 x double> %sub
1327 define <1 x float> @constrained_vector_sqrt_v1f32() {
1328 ; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
1329 ; PC64LE: # %bb.0: # %entry
1330 ; PC64LE-NEXT: addis 3, 2, .LCPI25_0@toc@ha
1331 ; PC64LE-NEXT: lfs 0, .LCPI25_0@toc@l(3)
1332 ; PC64LE-NEXT: xssqrtsp 0, 0
1333 ; PC64LE-NEXT: xscvdpspn 0, 0
1334 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
1337 ; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
1338 ; PC64LE9: # %bb.0: # %entry
1339 ; PC64LE9-NEXT: addis 3, 2, .LCPI25_0@toc@ha
1340 ; PC64LE9-NEXT: lfs 0, .LCPI25_0@toc@l(3)
1341 ; PC64LE9-NEXT: xssqrtsp 0, 0
1342 ; PC64LE9-NEXT: xscvdpspn 0, 0
1343 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
1346 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
1347 <1 x float> <float 42.0>,
1348 metadata !"round.dynamic",
1349 metadata !"fpexcept.strict")
1350 ret <1 x float> %sqrt
1353 define <2 x double> @constrained_vector_sqrt_v2f64() {
1354 ; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
1355 ; PC64LE: # %bb.0: # %entry
1356 ; PC64LE-NEXT: addis 3, 2, .LCPI26_0@toc@ha
1357 ; PC64LE-NEXT: addi 3, 3, .LCPI26_0@toc@l
1358 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1359 ; PC64LE-NEXT: xxswapd 0, 0
1360 ; PC64LE-NEXT: xvsqrtdp 34, 0
1363 ; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
1364 ; PC64LE9: # %bb.0: # %entry
1365 ; PC64LE9-NEXT: addis 3, 2, .LCPI26_0@toc@ha
1366 ; PC64LE9-NEXT: addi 3, 3, .LCPI26_0@toc@l
1367 ; PC64LE9-NEXT: lxvx 0, 0, 3
1368 ; PC64LE9-NEXT: xvsqrtdp 34, 0
1371 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
1372 <2 x double> <double 42.0, double 42.1>,
1373 metadata !"round.dynamic",
1374 metadata !"fpexcept.strict")
1375 ret <2 x double> %sqrt
1378 define <3 x float> @constrained_vector_sqrt_v3f32() {
1379 ; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
1380 ; PC64LE: # %bb.0: # %entry
1381 ; PC64LE-NEXT: addis 3, 2, .LCPI27_2@toc@ha
1382 ; PC64LE-NEXT: addis 4, 2, .LCPI27_1@toc@ha
1383 ; PC64LE-NEXT: lfs 0, .LCPI27_2@toc@l(3)
1384 ; PC64LE-NEXT: lfs 1, .LCPI27_1@toc@l(4)
1385 ; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1386 ; PC64LE-NEXT: xssqrtsp 0, 0
1387 ; PC64LE-NEXT: lfs 2, .LCPI27_0@toc@l(3)
1388 ; PC64LE-NEXT: addis 3, 2, .LCPI27_3@toc@ha
1389 ; PC64LE-NEXT: xssqrtsp 1, 1
1390 ; PC64LE-NEXT: addi 3, 3, .LCPI27_3@toc@l
1391 ; PC64LE-NEXT: xssqrtsp 2, 2
1392 ; PC64LE-NEXT: xscvdpspn 0, 0
1393 ; PC64LE-NEXT: xscvdpspn 1, 1
1394 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
1395 ; PC64LE-NEXT: xscvdpspn 0, 2
1396 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
1397 ; PC64LE-NEXT: vmrglw 2, 3, 2
1398 ; PC64LE-NEXT: lvx 3, 0, 3
1399 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
1400 ; PC64LE-NEXT: vperm 2, 4, 2, 3
1403 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
1404 ; PC64LE9: # %bb.0: # %entry
1405 ; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1406 ; PC64LE9-NEXT: lfs 0, .LCPI27_0@toc@l(3)
1407 ; PC64LE9-NEXT: addis 3, 2, .LCPI27_1@toc@ha
1408 ; PC64LE9-NEXT: lfs 1, .LCPI27_1@toc@l(3)
1409 ; PC64LE9-NEXT: addis 3, 2, .LCPI27_2@toc@ha
1410 ; PC64LE9-NEXT: xssqrtsp 0, 0
1411 ; PC64LE9-NEXT: lfs 2, .LCPI27_2@toc@l(3)
1412 ; PC64LE9-NEXT: addis 3, 2, .LCPI27_3@toc@ha
1413 ; PC64LE9-NEXT: addi 3, 3, .LCPI27_3@toc@l
1414 ; PC64LE9-NEXT: xssqrtsp 1, 1
1415 ; PC64LE9-NEXT: xssqrtsp 2, 2
1416 ; PC64LE9-NEXT: xscvdpspn 0, 0
1417 ; PC64LE9-NEXT: xscvdpspn 1, 1
1418 ; PC64LE9-NEXT: xscvdpspn 2, 2
1419 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
1420 ; PC64LE9-NEXT: xxsldwi 35, 1, 1, 1
1421 ; PC64LE9-NEXT: xxsldwi 34, 2, 2, 1
1422 ; PC64LE9-NEXT: vmrglw 2, 3, 2
1423 ; PC64LE9-NEXT: lxvx 35, 0, 3
1424 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
1427 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
1428 <3 x float> <float 42.0, float 43.0, float 44.0>,
1429 metadata !"round.dynamic",
1430 metadata !"fpexcept.strict")
1431 ret <3 x float> %sqrt
1434 define <3 x double> @constrained_vector_sqrt_v3f64() {
1435 ; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
1436 ; PC64LE: # %bb.0: # %entry
1437 ; PC64LE-NEXT: addis 3, 2, .LCPI28_1@toc@ha
1438 ; PC64LE-NEXT: addi 3, 3, .LCPI28_1@toc@l
1439 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1440 ; PC64LE-NEXT: addis 3, 2, .LCPI28_0@toc@ha
1441 ; PC64LE-NEXT: lfd 1, .LCPI28_0@toc@l(3)
1442 ; PC64LE-NEXT: xxswapd 0, 0
1443 ; PC64LE-NEXT: xssqrtdp 3, 1
1444 ; PC64LE-NEXT: xvsqrtdp 2, 0
1445 ; PC64LE-NEXT: xxswapd 1, 2
1446 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1447 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1450 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
1451 ; PC64LE9: # %bb.0: # %entry
1452 ; PC64LE9-NEXT: addis 3, 2, .LCPI28_0@toc@ha
1453 ; PC64LE9-NEXT: lfd 0, .LCPI28_0@toc@l(3)
1454 ; PC64LE9-NEXT: addis 3, 2, .LCPI28_1@toc@ha
1455 ; PC64LE9-NEXT: addi 3, 3, .LCPI28_1@toc@l
1456 ; PC64LE9-NEXT: xssqrtdp 3, 0
1457 ; PC64LE9-NEXT: lxvx 0, 0, 3
1458 ; PC64LE9-NEXT: xvsqrtdp 2, 0
1459 ; PC64LE9-NEXT: xxswapd 1, 2
1460 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1461 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1464 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
1465 <3 x double> <double 42.0, double 42.1, double 42.2>,
1466 metadata !"round.dynamic",
1467 metadata !"fpexcept.strict")
1468 ret <3 x double> %sqrt
1471 define <4 x double> @constrained_vector_sqrt_v4f64() {
1472 ; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
1473 ; PC64LE: # %bb.0: # %entry
1474 ; PC64LE-NEXT: addis 3, 2, .LCPI29_0@toc@ha
1475 ; PC64LE-NEXT: addis 4, 2, .LCPI29_1@toc@ha
1476 ; PC64LE-NEXT: addi 3, 3, .LCPI29_0@toc@l
1477 ; PC64LE-NEXT: addi 4, 4, .LCPI29_1@toc@l
1478 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1479 ; PC64LE-NEXT: lxvd2x 1, 0, 4
1480 ; PC64LE-NEXT: xxswapd 0, 0
1481 ; PC64LE-NEXT: xxswapd 1, 1
1482 ; PC64LE-NEXT: xvsqrtdp 34, 0
1483 ; PC64LE-NEXT: xvsqrtdp 35, 1
1486 ; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
1487 ; PC64LE9: # %bb.0: # %entry
1488 ; PC64LE9-NEXT: addis 3, 2, .LCPI29_0@toc@ha
1489 ; PC64LE9-NEXT: addi 3, 3, .LCPI29_0@toc@l
1490 ; PC64LE9-NEXT: lxvx 0, 0, 3
1491 ; PC64LE9-NEXT: addis 3, 2, .LCPI29_1@toc@ha
1492 ; PC64LE9-NEXT: addi 3, 3, .LCPI29_1@toc@l
1493 ; PC64LE9-NEXT: xvsqrtdp 34, 0
1494 ; PC64LE9-NEXT: lxvx 0, 0, 3
1495 ; PC64LE9-NEXT: xvsqrtdp 35, 0
1498 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(
1499 <4 x double> <double 42.0, double 42.1,
1500 double 42.2, double 42.3>,
1501 metadata !"round.dynamic",
1502 metadata !"fpexcept.strict")
1503 ret <4 x double> %sqrt
1506 define <1 x float> @constrained_vector_pow_v1f32() {
1507 ; PC64LE-LABEL: constrained_vector_pow_v1f32:
1508 ; PC64LE: # %bb.0: # %entry
1509 ; PC64LE-NEXT: mflr 0
1510 ; PC64LE-NEXT: std 0, 16(1)
1511 ; PC64LE-NEXT: stdu 1, -32(1)
1512 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
1513 ; PC64LE-NEXT: .cfi_offset lr, 16
1514 ; PC64LE-NEXT: addis 3, 2, .LCPI30_0@toc@ha
1515 ; PC64LE-NEXT: addis 4, 2, .LCPI30_1@toc@ha
1516 ; PC64LE-NEXT: lfs 1, .LCPI30_0@toc@l(3)
1517 ; PC64LE-NEXT: lfs 2, .LCPI30_1@toc@l(4)
1518 ; PC64LE-NEXT: bl powf
1520 ; PC64LE-NEXT: xscvdpspn 0, 1
1521 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
1522 ; PC64LE-NEXT: addi 1, 1, 32
1523 ; PC64LE-NEXT: ld 0, 16(1)
1524 ; PC64LE-NEXT: mtlr 0
1527 ; PC64LE9-LABEL: constrained_vector_pow_v1f32:
1528 ; PC64LE9: # %bb.0: # %entry
1529 ; PC64LE9-NEXT: mflr 0
1530 ; PC64LE9-NEXT: std 0, 16(1)
1531 ; PC64LE9-NEXT: stdu 1, -32(1)
1532 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
1533 ; PC64LE9-NEXT: .cfi_offset lr, 16
1534 ; PC64LE9-NEXT: addis 3, 2, .LCPI30_0@toc@ha
1535 ; PC64LE9-NEXT: lfs 1, .LCPI30_0@toc@l(3)
1536 ; PC64LE9-NEXT: addis 3, 2, .LCPI30_1@toc@ha
1537 ; PC64LE9-NEXT: lfs 2, .LCPI30_1@toc@l(3)
1538 ; PC64LE9-NEXT: bl powf
1540 ; PC64LE9-NEXT: xscvdpspn 0, 1
1541 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
1542 ; PC64LE9-NEXT: addi 1, 1, 32
1543 ; PC64LE9-NEXT: ld 0, 16(1)
1544 ; PC64LE9-NEXT: mtlr 0
1547 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
1548 <1 x float> <float 42.0>,
1549 <1 x float> <float 3.0>,
1550 metadata !"round.dynamic",
1551 metadata !"fpexcept.strict")
1552 ret <1 x float> %pow
1555 define <2 x double> @constrained_vector_pow_v2f64() {
1556 ; PC64LE-LABEL: constrained_vector_pow_v2f64:
1557 ; PC64LE: # %bb.0: # %entry
1558 ; PC64LE-NEXT: mflr 0
1559 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
1560 ; PC64LE-NEXT: .cfi_offset lr, 16
1561 ; PC64LE-NEXT: .cfi_offset f31, -8
1562 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
1563 ; PC64LE-NEXT: std 0, 16(1)
1564 ; PC64LE-NEXT: stdu 1, -80(1)
1565 ; PC64LE-NEXT: addis 4, 2, .LCPI31_1@toc@ha
1566 ; PC64LE-NEXT: addis 3, 2, .LCPI31_0@toc@ha
1567 ; PC64LE-NEXT: lfs 31, .LCPI31_1@toc@l(4)
1568 ; PC64LE-NEXT: lfd 1, .LCPI31_0@toc@l(3)
1569 ; PC64LE-NEXT: fmr 2, 31
1570 ; PC64LE-NEXT: bl pow
1572 ; PC64LE-NEXT: li 3, 48
1573 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1574 ; PC64LE-NEXT: fmr 2, 31
1575 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
1576 ; PC64LE-NEXT: addis 3, 2, .LCPI31_2@toc@ha
1577 ; PC64LE-NEXT: lfd 1, .LCPI31_2@toc@l(3)
1578 ; PC64LE-NEXT: bl pow
1580 ; PC64LE-NEXT: li 3, 48
1581 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1582 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
1583 ; PC64LE-NEXT: xxmrghd 34, 1, 0
1584 ; PC64LE-NEXT: addi 1, 1, 80
1585 ; PC64LE-NEXT: ld 0, 16(1)
1586 ; PC64LE-NEXT: mtlr 0
1587 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
1590 ; PC64LE9-LABEL: constrained_vector_pow_v2f64:
1591 ; PC64LE9: # %bb.0: # %entry
1592 ; PC64LE9-NEXT: mflr 0
1593 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
1594 ; PC64LE9-NEXT: .cfi_offset lr, 16
1595 ; PC64LE9-NEXT: .cfi_offset f31, -8
1596 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
1597 ; PC64LE9-NEXT: std 0, 16(1)
1598 ; PC64LE9-NEXT: stdu 1, -64(1)
1599 ; PC64LE9-NEXT: addis 3, 2, .LCPI31_0@toc@ha
1600 ; PC64LE9-NEXT: lfd 1, .LCPI31_0@toc@l(3)
1601 ; PC64LE9-NEXT: addis 3, 2, .LCPI31_1@toc@ha
1602 ; PC64LE9-NEXT: lfs 31, .LCPI31_1@toc@l(3)
1603 ; PC64LE9-NEXT: fmr 2, 31
1604 ; PC64LE9-NEXT: bl pow
1606 ; PC64LE9-NEXT: addis 3, 2, .LCPI31_2@toc@ha
1607 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1608 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
1609 ; PC64LE9-NEXT: lfd 1, .LCPI31_2@toc@l(3)
1610 ; PC64LE9-NEXT: fmr 2, 31
1611 ; PC64LE9-NEXT: bl pow
1613 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
1614 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1615 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
1616 ; PC64LE9-NEXT: addi 1, 1, 64
1617 ; PC64LE9-NEXT: ld 0, 16(1)
1618 ; PC64LE9-NEXT: mtlr 0
1619 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
1622 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64(
1623 <2 x double> <double 42.1, double 42.2>,
1624 <2 x double> <double 3.0, double 3.0>,
1625 metadata !"round.dynamic",
1626 metadata !"fpexcept.strict")
1627 ret <2 x double> %pow
1630 define <3 x float> @constrained_vector_pow_v3f32() {
1631 ; PC64LE-LABEL: constrained_vector_pow_v3f32:
1632 ; PC64LE: # %bb.0: # %entry
1633 ; PC64LE-NEXT: mflr 0
1634 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
1635 ; PC64LE-NEXT: .cfi_offset lr, 16
1636 ; PC64LE-NEXT: .cfi_offset f29, -24
1637 ; PC64LE-NEXT: .cfi_offset f30, -16
1638 ; PC64LE-NEXT: .cfi_offset f31, -8
1639 ; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
1640 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
1641 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
1642 ; PC64LE-NEXT: std 0, 16(1)
1643 ; PC64LE-NEXT: stdu 1, -64(1)
1644 ; PC64LE-NEXT: addis 4, 2, .LCPI32_1@toc@ha
1645 ; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1646 ; PC64LE-NEXT: lfs 31, .LCPI32_1@toc@l(4)
1647 ; PC64LE-NEXT: lfs 1, .LCPI32_0@toc@l(3)
1648 ; PC64LE-NEXT: fmr 2, 31
1649 ; PC64LE-NEXT: bl powf
1651 ; PC64LE-NEXT: addis 3, 2, .LCPI32_2@toc@ha
1652 ; PC64LE-NEXT: fmr 2, 31
1653 ; PC64LE-NEXT: fmr 30, 1
1654 ; PC64LE-NEXT: lfs 1, .LCPI32_2@toc@l(3)
1655 ; PC64LE-NEXT: bl powf
1657 ; PC64LE-NEXT: addis 3, 2, .LCPI32_3@toc@ha
1658 ; PC64LE-NEXT: fmr 2, 31
1659 ; PC64LE-NEXT: fmr 29, 1
1660 ; PC64LE-NEXT: lfs 1, .LCPI32_3@toc@l(3)
1661 ; PC64LE-NEXT: bl powf
1663 ; PC64LE-NEXT: xscvdpspn 0, 29
1664 ; PC64LE-NEXT: addis 3, 2, .LCPI32_4@toc@ha
1665 ; PC64LE-NEXT: xscvdpspn 1, 1
1666 ; PC64LE-NEXT: addi 3, 3, .LCPI32_4@toc@l
1667 ; PC64LE-NEXT: lvx 4, 0, 3
1668 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
1669 ; PC64LE-NEXT: xscvdpspn 0, 30
1670 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
1671 ; PC64LE-NEXT: vmrglw 2, 2, 3
1672 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
1673 ; PC64LE-NEXT: vperm 2, 3, 2, 4
1674 ; PC64LE-NEXT: addi 1, 1, 64
1675 ; PC64LE-NEXT: ld 0, 16(1)
1676 ; PC64LE-NEXT: mtlr 0
1677 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
1678 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
1679 ; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
1682 ; PC64LE9-LABEL: constrained_vector_pow_v3f32:
1683 ; PC64LE9: # %bb.0: # %entry
1684 ; PC64LE9-NEXT: mflr 0
1685 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
1686 ; PC64LE9-NEXT: .cfi_offset lr, 16
1687 ; PC64LE9-NEXT: .cfi_offset f29, -24
1688 ; PC64LE9-NEXT: .cfi_offset f30, -16
1689 ; PC64LE9-NEXT: .cfi_offset f31, -8
1690 ; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
1691 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
1692 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
1693 ; PC64LE9-NEXT: std 0, 16(1)
1694 ; PC64LE9-NEXT: stdu 1, -64(1)
1695 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1696 ; PC64LE9-NEXT: lfs 1, .LCPI32_0@toc@l(3)
1697 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_1@toc@ha
1698 ; PC64LE9-NEXT: lfs 31, .LCPI32_1@toc@l(3)
1699 ; PC64LE9-NEXT: fmr 2, 31
1700 ; PC64LE9-NEXT: bl powf
1702 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_2@toc@ha
1703 ; PC64LE9-NEXT: fmr 30, 1
1704 ; PC64LE9-NEXT: lfs 1, .LCPI32_2@toc@l(3)
1705 ; PC64LE9-NEXT: fmr 2, 31
1706 ; PC64LE9-NEXT: bl powf
1708 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_3@toc@ha
1709 ; PC64LE9-NEXT: fmr 29, 1
1710 ; PC64LE9-NEXT: lfs 1, .LCPI32_3@toc@l(3)
1711 ; PC64LE9-NEXT: fmr 2, 31
1712 ; PC64LE9-NEXT: bl powf
1714 ; PC64LE9-NEXT: xscvdpspn 0, 1
1715 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
1716 ; PC64LE9-NEXT: xscvdpspn 0, 29
1717 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
1718 ; PC64LE9-NEXT: xscvdpspn 0, 30
1719 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_4@toc@ha
1720 ; PC64LE9-NEXT: addi 3, 3, .LCPI32_4@toc@l
1721 ; PC64LE9-NEXT: lxvx 36, 0, 3
1722 ; PC64LE9-NEXT: vmrglw 2, 3, 2
1723 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
1724 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
1725 ; PC64LE9-NEXT: addi 1, 1, 64
1726 ; PC64LE9-NEXT: ld 0, 16(1)
1727 ; PC64LE9-NEXT: mtlr 0
1728 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
1729 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
1730 ; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
1733 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32(
1734 <3 x float> <float 42.0, float 43.0, float 44.0>,
1735 <3 x float> <float 3.0, float 3.0, float 3.0>,
1736 metadata !"round.dynamic",
1737 metadata !"fpexcept.strict")
1738 ret <3 x float> %pow
1741 define <3 x double> @constrained_vector_pow_v3f64() {
1742 ; PC64LE-LABEL: constrained_vector_pow_v3f64:
1743 ; PC64LE: # %bb.0: # %entry
1744 ; PC64LE-NEXT: mflr 0
1745 ; PC64LE-NEXT: std 0, 16(1)
1746 ; PC64LE-NEXT: stdu 1, -96(1)
1747 ; PC64LE-NEXT: .cfi_def_cfa_offset 96
1748 ; PC64LE-NEXT: .cfi_offset lr, 16
1749 ; PC64LE-NEXT: .cfi_offset f31, -8
1750 ; PC64LE-NEXT: .cfi_offset v31, -32
1751 ; PC64LE-NEXT: addis 4, 2, .LCPI33_1@toc@ha
1752 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1753 ; PC64LE-NEXT: li 3, 64
1754 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1755 ; PC64LE-NEXT: addis 3, 2, .LCPI33_0@toc@ha
1756 ; PC64LE-NEXT: lfs 31, .LCPI33_1@toc@l(4)
1757 ; PC64LE-NEXT: lfs 1, .LCPI33_0@toc@l(3)
1758 ; PC64LE-NEXT: fmr 2, 31
1759 ; PC64LE-NEXT: bl pow
1761 ; PC64LE-NEXT: li 3, 48
1762 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1763 ; PC64LE-NEXT: fmr 2, 31
1764 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
1765 ; PC64LE-NEXT: addis 3, 2, .LCPI33_2@toc@ha
1766 ; PC64LE-NEXT: lfd 1, .LCPI33_2@toc@l(3)
1767 ; PC64LE-NEXT: bl pow
1769 ; PC64LE-NEXT: li 3, 48
1770 ; PC64LE-NEXT: fmr 2, 31
1771 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1772 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
1773 ; PC64LE-NEXT: addis 3, 2, .LCPI33_3@toc@ha
1774 ; PC64LE-NEXT: xxmrghd 63, 1, 0
1775 ; PC64LE-NEXT: lfd 1, .LCPI33_3@toc@l(3)
1776 ; PC64LE-NEXT: bl pow
1778 ; PC64LE-NEXT: li 3, 64
1779 ; PC64LE-NEXT: fmr 3, 1
1780 ; PC64LE-NEXT: xxlor 1, 63, 63
1781 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1782 ; PC64LE-NEXT: xxlor 2, 63, 63
1783 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1784 ; PC64LE-NEXT: addi 1, 1, 96
1785 ; PC64LE-NEXT: ld 0, 16(1)
1786 ; PC64LE-NEXT: mtlr 0
1789 ; PC64LE9-LABEL: constrained_vector_pow_v3f64:
1790 ; PC64LE9: # %bb.0: # %entry
1791 ; PC64LE9-NEXT: mflr 0
1792 ; PC64LE9-NEXT: std 0, 16(1)
1793 ; PC64LE9-NEXT: stdu 1, -80(1)
1794 ; PC64LE9-NEXT: .cfi_def_cfa_offset 80
1795 ; PC64LE9-NEXT: .cfi_offset lr, 16
1796 ; PC64LE9-NEXT: .cfi_offset f31, -8
1797 ; PC64LE9-NEXT: .cfi_offset v31, -32
1798 ; PC64LE9-NEXT: addis 3, 2, .LCPI33_0@toc@ha
1799 ; PC64LE9-NEXT: lfs 1, .LCPI33_0@toc@l(3)
1800 ; PC64LE9-NEXT: addis 3, 2, .LCPI33_1@toc@ha
1801 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1802 ; PC64LE9-NEXT: lfs 31, .LCPI33_1@toc@l(3)
1803 ; PC64LE9-NEXT: fmr 2, 31
1804 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1805 ; PC64LE9-NEXT: bl pow
1807 ; PC64LE9-NEXT: addis 3, 2, .LCPI33_2@toc@ha
1808 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1809 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
1810 ; PC64LE9-NEXT: lfd 1, .LCPI33_2@toc@l(3)
1811 ; PC64LE9-NEXT: fmr 2, 31
1812 ; PC64LE9-NEXT: bl pow
1814 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
1815 ; PC64LE9-NEXT: addis 3, 2, .LCPI33_3@toc@ha
1816 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1817 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
1818 ; PC64LE9-NEXT: lfd 1, .LCPI33_3@toc@l(3)
1819 ; PC64LE9-NEXT: fmr 2, 31
1820 ; PC64LE9-NEXT: bl pow
1822 ; PC64LE9-NEXT: fmr 3, 1
1823 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
1824 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1825 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1826 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1827 ; PC64LE9-NEXT: addi 1, 1, 80
1828 ; PC64LE9-NEXT: ld 0, 16(1)
1829 ; PC64LE9-NEXT: mtlr 0
1832 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
1833 <3 x double> <double 42.0, double 42.1, double 42.2>,
1834 <3 x double> <double 3.0, double 3.0, double 3.0>,
1835 metadata !"round.dynamic",
1836 metadata !"fpexcept.strict")
1837 ret <3 x double> %pow
1840 define <4 x double> @constrained_vector_pow_v4f64() {
1841 ; PC64LE-LABEL: constrained_vector_pow_v4f64:
1842 ; PC64LE: # %bb.0: # %entry
1843 ; PC64LE-NEXT: mflr 0
1844 ; PC64LE-NEXT: std 0, 16(1)
1845 ; PC64LE-NEXT: stdu 1, -96(1)
1846 ; PC64LE-NEXT: .cfi_def_cfa_offset 96
1847 ; PC64LE-NEXT: .cfi_offset lr, 16
1848 ; PC64LE-NEXT: .cfi_offset f31, -8
1849 ; PC64LE-NEXT: .cfi_offset v31, -32
1850 ; PC64LE-NEXT: addis 4, 2, .LCPI34_1@toc@ha
1851 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1852 ; PC64LE-NEXT: li 3, 64
1853 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1854 ; PC64LE-NEXT: addis 3, 2, .LCPI34_0@toc@ha
1855 ; PC64LE-NEXT: lfs 31, .LCPI34_1@toc@l(4)
1856 ; PC64LE-NEXT: lfd 1, .LCPI34_0@toc@l(3)
1857 ; PC64LE-NEXT: fmr 2, 31
1858 ; PC64LE-NEXT: bl pow
1860 ; PC64LE-NEXT: li 3, 48
1861 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1862 ; PC64LE-NEXT: fmr 2, 31
1863 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
1864 ; PC64LE-NEXT: addis 3, 2, .LCPI34_2@toc@ha
1865 ; PC64LE-NEXT: lfd 1, .LCPI34_2@toc@l(3)
1866 ; PC64LE-NEXT: bl pow
1868 ; PC64LE-NEXT: li 3, 48
1869 ; PC64LE-NEXT: fmr 2, 31
1870 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1871 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
1872 ; PC64LE-NEXT: addis 3, 2, .LCPI34_3@toc@ha
1873 ; PC64LE-NEXT: xxmrghd 63, 1, 0
1874 ; PC64LE-NEXT: lfd 1, .LCPI34_3@toc@l(3)
1875 ; PC64LE-NEXT: bl pow
1877 ; PC64LE-NEXT: li 3, 48
1878 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1879 ; PC64LE-NEXT: fmr 2, 31
1880 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
1881 ; PC64LE-NEXT: addis 3, 2, .LCPI34_4@toc@ha
1882 ; PC64LE-NEXT: lfd 1, .LCPI34_4@toc@l(3)
1883 ; PC64LE-NEXT: bl pow
1885 ; PC64LE-NEXT: li 3, 48
1886 ; PC64LE-NEXT: vmr 2, 31
1887 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1888 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1889 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
1890 ; PC64LE-NEXT: li 3, 64
1891 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1892 ; PC64LE-NEXT: xxmrghd 35, 1, 0
1893 ; PC64LE-NEXT: addi 1, 1, 96
1894 ; PC64LE-NEXT: ld 0, 16(1)
1895 ; PC64LE-NEXT: mtlr 0
1898 ; PC64LE9-LABEL: constrained_vector_pow_v4f64:
1899 ; PC64LE9: # %bb.0: # %entry
1900 ; PC64LE9-NEXT: mflr 0
1901 ; PC64LE9-NEXT: std 0, 16(1)
1902 ; PC64LE9-NEXT: stdu 1, -80(1)
1903 ; PC64LE9-NEXT: .cfi_def_cfa_offset 80
1904 ; PC64LE9-NEXT: .cfi_offset lr, 16
1905 ; PC64LE9-NEXT: .cfi_offset f31, -8
1906 ; PC64LE9-NEXT: .cfi_offset v31, -32
1907 ; PC64LE9-NEXT: addis 3, 2, .LCPI34_0@toc@ha
1908 ; PC64LE9-NEXT: lfd 1, .LCPI34_0@toc@l(3)
1909 ; PC64LE9-NEXT: addis 3, 2, .LCPI34_1@toc@ha
1910 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1911 ; PC64LE9-NEXT: lfs 31, .LCPI34_1@toc@l(3)
1912 ; PC64LE9-NEXT: fmr 2, 31
1913 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1914 ; PC64LE9-NEXT: bl pow
1916 ; PC64LE9-NEXT: addis 3, 2, .LCPI34_2@toc@ha
1917 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1918 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
1919 ; PC64LE9-NEXT: lfd 1, .LCPI34_2@toc@l(3)
1920 ; PC64LE9-NEXT: fmr 2, 31
1921 ; PC64LE9-NEXT: bl pow
1923 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
1924 ; PC64LE9-NEXT: addis 3, 2, .LCPI34_3@toc@ha
1925 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1926 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
1927 ; PC64LE9-NEXT: lfd 1, .LCPI34_3@toc@l(3)
1928 ; PC64LE9-NEXT: fmr 2, 31
1929 ; PC64LE9-NEXT: bl pow
1931 ; PC64LE9-NEXT: addis 3, 2, .LCPI34_4@toc@ha
1932 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1933 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
1934 ; PC64LE9-NEXT: lfd 1, .LCPI34_4@toc@l(3)
1935 ; PC64LE9-NEXT: fmr 2, 31
1936 ; PC64LE9-NEXT: bl pow
1938 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
1939 ; PC64LE9-NEXT: vmr 2, 31
1940 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1941 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1942 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1943 ; PC64LE9-NEXT: xxmrghd 35, 1, 0
1944 ; PC64LE9-NEXT: addi 1, 1, 80
1945 ; PC64LE9-NEXT: ld 0, 16(1)
1946 ; PC64LE9-NEXT: mtlr 0
1949 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64(
1950 <4 x double> <double 42.1, double 42.2,
1951 double 42.3, double 42.4>,
1952 <4 x double> <double 3.0, double 3.0,
1953 double 3.0, double 3.0>,
1954 metadata !"round.dynamic",
1955 metadata !"fpexcept.strict")
1956 ret <4 x double> %pow
1959 define <1 x float> @constrained_vector_powi_v1f32() {
1960 ; PC64LE-LABEL: constrained_vector_powi_v1f32:
1961 ; PC64LE: # %bb.0: # %entry
1962 ; PC64LE-NEXT: mflr 0
1963 ; PC64LE-NEXT: std 0, 16(1)
1964 ; PC64LE-NEXT: stdu 1, -32(1)
1965 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
1966 ; PC64LE-NEXT: .cfi_offset lr, 16
1967 ; PC64LE-NEXT: addis 3, 2, .LCPI35_0@toc@ha
1968 ; PC64LE-NEXT: li 4, 3
1969 ; PC64LE-NEXT: lfs 1, .LCPI35_0@toc@l(3)
1970 ; PC64LE-NEXT: bl __powisf2
1972 ; PC64LE-NEXT: xscvdpspn 0, 1
1973 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
1974 ; PC64LE-NEXT: addi 1, 1, 32
1975 ; PC64LE-NEXT: ld 0, 16(1)
1976 ; PC64LE-NEXT: mtlr 0
1979 ; PC64LE9-LABEL: constrained_vector_powi_v1f32:
1980 ; PC64LE9: # %bb.0: # %entry
1981 ; PC64LE9-NEXT: mflr 0
1982 ; PC64LE9-NEXT: std 0, 16(1)
1983 ; PC64LE9-NEXT: stdu 1, -32(1)
1984 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
1985 ; PC64LE9-NEXT: .cfi_offset lr, 16
1986 ; PC64LE9-NEXT: addis 3, 2, .LCPI35_0@toc@ha
1987 ; PC64LE9-NEXT: lfs 1, .LCPI35_0@toc@l(3)
1988 ; PC64LE9-NEXT: li 4, 3
1989 ; PC64LE9-NEXT: bl __powisf2
1991 ; PC64LE9-NEXT: xscvdpspn 0, 1
1992 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
1993 ; PC64LE9-NEXT: addi 1, 1, 32
1994 ; PC64LE9-NEXT: ld 0, 16(1)
1995 ; PC64LE9-NEXT: mtlr 0
1998 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
1999 <1 x float> <float 42.0>,
2001 metadata !"round.dynamic",
2002 metadata !"fpexcept.strict")
2003 ret <1 x float> %powi
2006 define <2 x double> @constrained_vector_powi_v2f64() {
2007 ; PC64LE-LABEL: constrained_vector_powi_v2f64:
2008 ; PC64LE: # %bb.0: # %entry
2009 ; PC64LE-NEXT: mflr 0
2010 ; PC64LE-NEXT: std 0, 16(1)
2011 ; PC64LE-NEXT: stdu 1, -64(1)
2012 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
2013 ; PC64LE-NEXT: .cfi_offset lr, 16
2014 ; PC64LE-NEXT: addis 3, 2, .LCPI36_0@toc@ha
2015 ; PC64LE-NEXT: li 4, 3
2016 ; PC64LE-NEXT: lfd 1, .LCPI36_0@toc@l(3)
2017 ; PC64LE-NEXT: bl __powidf2
2019 ; PC64LE-NEXT: li 3, 48
2020 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2021 ; PC64LE-NEXT: li 4, 3
2022 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2023 ; PC64LE-NEXT: addis 3, 2, .LCPI36_1@toc@ha
2024 ; PC64LE-NEXT: lfd 1, .LCPI36_1@toc@l(3)
2025 ; PC64LE-NEXT: bl __powidf2
2027 ; PC64LE-NEXT: li 3, 48
2028 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2029 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2030 ; PC64LE-NEXT: xxmrghd 34, 1, 0
2031 ; PC64LE-NEXT: addi 1, 1, 64
2032 ; PC64LE-NEXT: ld 0, 16(1)
2033 ; PC64LE-NEXT: mtlr 0
2036 ; PC64LE9-LABEL: constrained_vector_powi_v2f64:
2037 ; PC64LE9: # %bb.0: # %entry
2038 ; PC64LE9-NEXT: mflr 0
2039 ; PC64LE9-NEXT: std 0, 16(1)
2040 ; PC64LE9-NEXT: stdu 1, -48(1)
2041 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
2042 ; PC64LE9-NEXT: .cfi_offset lr, 16
2043 ; PC64LE9-NEXT: addis 3, 2, .LCPI36_0@toc@ha
2044 ; PC64LE9-NEXT: lfd 1, .LCPI36_0@toc@l(3)
2045 ; PC64LE9-NEXT: li 4, 3
2046 ; PC64LE9-NEXT: bl __powidf2
2048 ; PC64LE9-NEXT: addis 3, 2, .LCPI36_1@toc@ha
2049 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2050 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2051 ; PC64LE9-NEXT: lfd 1, .LCPI36_1@toc@l(3)
2052 ; PC64LE9-NEXT: li 4, 3
2053 ; PC64LE9-NEXT: bl __powidf2
2055 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2056 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2057 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
2058 ; PC64LE9-NEXT: addi 1, 1, 48
2059 ; PC64LE9-NEXT: ld 0, 16(1)
2060 ; PC64LE9-NEXT: mtlr 0
2063 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
2064 <2 x double> <double 42.1, double 42.2>,
2066 metadata !"round.dynamic",
2067 metadata !"fpexcept.strict")
2068 ret <2 x double> %powi
2071 define <3 x float> @constrained_vector_powi_v3f32() {
2074 ; PC64LE-LABEL: constrained_vector_powi_v3f32:
2075 ; PC64LE: # %bb.0: # %entry
2076 ; PC64LE-NEXT: mflr 0
2077 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
2078 ; PC64LE-NEXT: .cfi_offset lr, 16
2079 ; PC64LE-NEXT: .cfi_offset f30, -16
2080 ; PC64LE-NEXT: .cfi_offset f31, -8
2081 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
2082 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
2083 ; PC64LE-NEXT: std 0, 16(1)
2084 ; PC64LE-NEXT: stdu 1, -48(1)
2085 ; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha
2086 ; PC64LE-NEXT: li 4, 3
2087 ; PC64LE-NEXT: lfs 1, .LCPI37_0@toc@l(3)
2088 ; PC64LE-NEXT: bl __powisf2
2090 ; PC64LE-NEXT: addis 3, 2, .LCPI37_1@toc@ha
2091 ; PC64LE-NEXT: fmr 31, 1
2092 ; PC64LE-NEXT: li 4, 3
2093 ; PC64LE-NEXT: lfs 1, .LCPI37_1@toc@l(3)
2094 ; PC64LE-NEXT: bl __powisf2
2096 ; PC64LE-NEXT: addis 3, 2, .LCPI37_2@toc@ha
2097 ; PC64LE-NEXT: fmr 30, 1
2098 ; PC64LE-NEXT: li 4, 3
2099 ; PC64LE-NEXT: lfs 1, .LCPI37_2@toc@l(3)
2100 ; PC64LE-NEXT: bl __powisf2
2102 ; PC64LE-NEXT: xscvdpspn 0, 30
2103 ; PC64LE-NEXT: addis 3, 2, .LCPI37_3@toc@ha
2104 ; PC64LE-NEXT: xscvdpspn 1, 1
2105 ; PC64LE-NEXT: addi 3, 3, .LCPI37_3@toc@l
2106 ; PC64LE-NEXT: lvx 4, 0, 3
2107 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
2108 ; PC64LE-NEXT: xscvdpspn 0, 31
2109 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
2110 ; PC64LE-NEXT: vmrglw 2, 2, 3
2111 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
2112 ; PC64LE-NEXT: vperm 2, 3, 2, 4
2113 ; PC64LE-NEXT: addi 1, 1, 48
2114 ; PC64LE-NEXT: ld 0, 16(1)
2115 ; PC64LE-NEXT: mtlr 0
2116 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
2117 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
2120 ; PC64LE9-LABEL: constrained_vector_powi_v3f32:
2121 ; PC64LE9: # %bb.0: # %entry
2122 ; PC64LE9-NEXT: mflr 0
2123 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
2124 ; PC64LE9-NEXT: .cfi_offset lr, 16
2125 ; PC64LE9-NEXT: .cfi_offset f30, -16
2126 ; PC64LE9-NEXT: .cfi_offset f31, -8
2127 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
2128 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
2129 ; PC64LE9-NEXT: std 0, 16(1)
2130 ; PC64LE9-NEXT: stdu 1, -48(1)
2131 ; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha
2132 ; PC64LE9-NEXT: lfs 1, .LCPI37_0@toc@l(3)
2133 ; PC64LE9-NEXT: li 4, 3
2134 ; PC64LE9-NEXT: bl __powisf2
2136 ; PC64LE9-NEXT: addis 3, 2, .LCPI37_1@toc@ha
2137 ; PC64LE9-NEXT: fmr 31, 1
2138 ; PC64LE9-NEXT: lfs 1, .LCPI37_1@toc@l(3)
2139 ; PC64LE9-NEXT: li 4, 3
2140 ; PC64LE9-NEXT: bl __powisf2
2142 ; PC64LE9-NEXT: addis 3, 2, .LCPI37_2@toc@ha
2143 ; PC64LE9-NEXT: fmr 30, 1
2144 ; PC64LE9-NEXT: lfs 1, .LCPI37_2@toc@l(3)
2145 ; PC64LE9-NEXT: li 4, 3
2146 ; PC64LE9-NEXT: bl __powisf2
2148 ; PC64LE9-NEXT: xscvdpspn 0, 1
2149 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
2150 ; PC64LE9-NEXT: xscvdpspn 0, 30
2151 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
2152 ; PC64LE9-NEXT: xscvdpspn 0, 31
2153 ; PC64LE9-NEXT: addis 3, 2, .LCPI37_3@toc@ha
2154 ; PC64LE9-NEXT: addi 3, 3, .LCPI37_3@toc@l
2155 ; PC64LE9-NEXT: lxvx 36, 0, 3
2156 ; PC64LE9-NEXT: vmrglw 2, 3, 2
2157 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
2158 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
2159 ; PC64LE9-NEXT: addi 1, 1, 48
2160 ; PC64LE9-NEXT: ld 0, 16(1)
2161 ; PC64LE9-NEXT: mtlr 0
2162 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
2163 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
2166 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32(
2167 <3 x float> <float 42.0, float 43.0, float 44.0>,
2169 metadata !"round.dynamic",
2170 metadata !"fpexcept.strict")
2171 ret <3 x float> %powi
2174 define <3 x double> @constrained_vector_powi_v3f64() {
2175 ; PC64LE-LABEL: constrained_vector_powi_v3f64:
2176 ; PC64LE: # %bb.0: # %entry
2177 ; PC64LE-NEXT: mflr 0
2178 ; PC64LE-NEXT: std 0, 16(1)
2179 ; PC64LE-NEXT: stdu 1, -80(1)
2180 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
2181 ; PC64LE-NEXT: .cfi_offset lr, 16
2182 ; PC64LE-NEXT: .cfi_offset v31, -16
2183 ; PC64LE-NEXT: li 3, 64
2184 ; PC64LE-NEXT: li 4, 3
2185 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2186 ; PC64LE-NEXT: addis 3, 2, .LCPI38_0@toc@ha
2187 ; PC64LE-NEXT: lfd 1, .LCPI38_0@toc@l(3)
2188 ; PC64LE-NEXT: bl __powidf2
2190 ; PC64LE-NEXT: li 3, 48
2191 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2192 ; PC64LE-NEXT: li 4, 3
2193 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2194 ; PC64LE-NEXT: addis 3, 2, .LCPI38_1@toc@ha
2195 ; PC64LE-NEXT: lfs 1, .LCPI38_1@toc@l(3)
2196 ; PC64LE-NEXT: bl __powidf2
2198 ; PC64LE-NEXT: li 3, 48
2199 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2200 ; PC64LE-NEXT: li 4, 3
2201 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2202 ; PC64LE-NEXT: addis 3, 2, .LCPI38_2@toc@ha
2203 ; PC64LE-NEXT: xxmrghd 63, 0, 1
2204 ; PC64LE-NEXT: lfd 1, .LCPI38_2@toc@l(3)
2205 ; PC64LE-NEXT: bl __powidf2
2207 ; PC64LE-NEXT: li 3, 64
2208 ; PC64LE-NEXT: fmr 3, 1
2209 ; PC64LE-NEXT: xxlor 1, 63, 63
2210 ; PC64LE-NEXT: xxlor 2, 63, 63
2211 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2212 ; PC64LE-NEXT: addi 1, 1, 80
2213 ; PC64LE-NEXT: ld 0, 16(1)
2214 ; PC64LE-NEXT: mtlr 0
2217 ; PC64LE9-LABEL: constrained_vector_powi_v3f64:
2218 ; PC64LE9: # %bb.0: # %entry
2219 ; PC64LE9-NEXT: mflr 0
2220 ; PC64LE9-NEXT: std 0, 16(1)
2221 ; PC64LE9-NEXT: stdu 1, -64(1)
2222 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
2223 ; PC64LE9-NEXT: .cfi_offset lr, 16
2224 ; PC64LE9-NEXT: .cfi_offset v31, -16
2225 ; PC64LE9-NEXT: addis 3, 2, .LCPI38_0@toc@ha
2226 ; PC64LE9-NEXT: lfd 1, .LCPI38_0@toc@l(3)
2227 ; PC64LE9-NEXT: li 4, 3
2228 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2229 ; PC64LE9-NEXT: bl __powidf2
2231 ; PC64LE9-NEXT: addis 3, 2, .LCPI38_1@toc@ha
2232 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2233 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2234 ; PC64LE9-NEXT: lfs 1, .LCPI38_1@toc@l(3)
2235 ; PC64LE9-NEXT: li 4, 3
2236 ; PC64LE9-NEXT: bl __powidf2
2238 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2239 ; PC64LE9-NEXT: addis 3, 2, .LCPI38_2@toc@ha
2240 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2241 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
2242 ; PC64LE9-NEXT: lfd 1, .LCPI38_2@toc@l(3)
2243 ; PC64LE9-NEXT: li 4, 3
2244 ; PC64LE9-NEXT: bl __powidf2
2246 ; PC64LE9-NEXT: fmr 3, 1
2247 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2248 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2249 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2250 ; PC64LE9-NEXT: addi 1, 1, 64
2251 ; PC64LE9-NEXT: ld 0, 16(1)
2252 ; PC64LE9-NEXT: mtlr 0
2255 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
2256 <3 x double> <double 42.0, double 42.1, double 42.2>,
2258 metadata !"round.dynamic",
2259 metadata !"fpexcept.strict")
2260 ret <3 x double> %powi
2263 define <4 x double> @constrained_vector_powi_v4f64() {
2264 ; PC64LE-LABEL: constrained_vector_powi_v4f64:
2265 ; PC64LE: # %bb.0: # %entry
2266 ; PC64LE-NEXT: mflr 0
2267 ; PC64LE-NEXT: std 0, 16(1)
2268 ; PC64LE-NEXT: stdu 1, -80(1)
2269 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
2270 ; PC64LE-NEXT: .cfi_offset lr, 16
2271 ; PC64LE-NEXT: .cfi_offset v31, -16
2272 ; PC64LE-NEXT: li 3, 64
2273 ; PC64LE-NEXT: li 4, 3
2274 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2275 ; PC64LE-NEXT: addis 3, 2, .LCPI39_0@toc@ha
2276 ; PC64LE-NEXT: lfd 1, .LCPI39_0@toc@l(3)
2277 ; PC64LE-NEXT: bl __powidf2
2279 ; PC64LE-NEXT: li 3, 48
2280 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2281 ; PC64LE-NEXT: li 4, 3
2282 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2283 ; PC64LE-NEXT: addis 3, 2, .LCPI39_1@toc@ha
2284 ; PC64LE-NEXT: lfd 1, .LCPI39_1@toc@l(3)
2285 ; PC64LE-NEXT: bl __powidf2
2287 ; PC64LE-NEXT: li 3, 48
2288 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2289 ; PC64LE-NEXT: li 4, 3
2290 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2291 ; PC64LE-NEXT: addis 3, 2, .LCPI39_2@toc@ha
2292 ; PC64LE-NEXT: xxmrghd 63, 1, 0
2293 ; PC64LE-NEXT: lfd 1, .LCPI39_2@toc@l(3)
2294 ; PC64LE-NEXT: bl __powidf2
2296 ; PC64LE-NEXT: li 3, 48
2297 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2298 ; PC64LE-NEXT: li 4, 3
2299 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2300 ; PC64LE-NEXT: addis 3, 2, .LCPI39_3@toc@ha
2301 ; PC64LE-NEXT: lfd 1, .LCPI39_3@toc@l(3)
2302 ; PC64LE-NEXT: bl __powidf2
2304 ; PC64LE-NEXT: li 3, 48
2305 ; PC64LE-NEXT: vmr 2, 31
2306 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2307 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2308 ; PC64LE-NEXT: li 3, 64
2309 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2310 ; PC64LE-NEXT: xxmrghd 35, 1, 0
2311 ; PC64LE-NEXT: addi 1, 1, 80
2312 ; PC64LE-NEXT: ld 0, 16(1)
2313 ; PC64LE-NEXT: mtlr 0
2316 ; PC64LE9-LABEL: constrained_vector_powi_v4f64:
2317 ; PC64LE9: # %bb.0: # %entry
2318 ; PC64LE9-NEXT: mflr 0
2319 ; PC64LE9-NEXT: std 0, 16(1)
2320 ; PC64LE9-NEXT: stdu 1, -64(1)
2321 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
2322 ; PC64LE9-NEXT: .cfi_offset lr, 16
2323 ; PC64LE9-NEXT: .cfi_offset v31, -16
2324 ; PC64LE9-NEXT: addis 3, 2, .LCPI39_0@toc@ha
2325 ; PC64LE9-NEXT: lfd 1, .LCPI39_0@toc@l(3)
2326 ; PC64LE9-NEXT: li 4, 3
2327 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2328 ; PC64LE9-NEXT: bl __powidf2
2330 ; PC64LE9-NEXT: addis 3, 2, .LCPI39_1@toc@ha
2331 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2332 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2333 ; PC64LE9-NEXT: lfd 1, .LCPI39_1@toc@l(3)
2334 ; PC64LE9-NEXT: li 4, 3
2335 ; PC64LE9-NEXT: bl __powidf2
2337 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2338 ; PC64LE9-NEXT: addis 3, 2, .LCPI39_2@toc@ha
2339 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2340 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
2341 ; PC64LE9-NEXT: lfd 1, .LCPI39_2@toc@l(3)
2342 ; PC64LE9-NEXT: li 4, 3
2343 ; PC64LE9-NEXT: bl __powidf2
2345 ; PC64LE9-NEXT: addis 3, 2, .LCPI39_3@toc@ha
2346 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2347 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2348 ; PC64LE9-NEXT: lfd 1, .LCPI39_3@toc@l(3)
2349 ; PC64LE9-NEXT: li 4, 3
2350 ; PC64LE9-NEXT: bl __powidf2
2352 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2353 ; PC64LE9-NEXT: vmr 2, 31
2354 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2355 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2356 ; PC64LE9-NEXT: xxmrghd 35, 1, 0
2357 ; PC64LE9-NEXT: addi 1, 1, 64
2358 ; PC64LE9-NEXT: ld 0, 16(1)
2359 ; PC64LE9-NEXT: mtlr 0
2362 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64(
2363 <4 x double> <double 42.1, double 42.2,
2364 double 42.3, double 42.4>,
2366 metadata !"round.dynamic",
2367 metadata !"fpexcept.strict")
2368 ret <4 x double> %powi
2371 define <1 x float> @constrained_vector_sin_v1f32() {
2372 ; PC64LE-LABEL: constrained_vector_sin_v1f32:
2373 ; PC64LE: # %bb.0: # %entry
2374 ; PC64LE-NEXT: mflr 0
2375 ; PC64LE-NEXT: std 0, 16(1)
2376 ; PC64LE-NEXT: stdu 1, -32(1)
2377 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
2378 ; PC64LE-NEXT: .cfi_offset lr, 16
2379 ; PC64LE-NEXT: addis 3, 2, .LCPI40_0@toc@ha
2380 ; PC64LE-NEXT: lfs 1, .LCPI40_0@toc@l(3)
2381 ; PC64LE-NEXT: bl sinf
2383 ; PC64LE-NEXT: xscvdpspn 0, 1
2384 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
2385 ; PC64LE-NEXT: addi 1, 1, 32
2386 ; PC64LE-NEXT: ld 0, 16(1)
2387 ; PC64LE-NEXT: mtlr 0
2390 ; PC64LE9-LABEL: constrained_vector_sin_v1f32:
2391 ; PC64LE9: # %bb.0: # %entry
2392 ; PC64LE9-NEXT: mflr 0
2393 ; PC64LE9-NEXT: std 0, 16(1)
2394 ; PC64LE9-NEXT: stdu 1, -32(1)
2395 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
2396 ; PC64LE9-NEXT: .cfi_offset lr, 16
2397 ; PC64LE9-NEXT: addis 3, 2, .LCPI40_0@toc@ha
2398 ; PC64LE9-NEXT: lfs 1, .LCPI40_0@toc@l(3)
2399 ; PC64LE9-NEXT: bl sinf
2401 ; PC64LE9-NEXT: xscvdpspn 0, 1
2402 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
2403 ; PC64LE9-NEXT: addi 1, 1, 32
2404 ; PC64LE9-NEXT: ld 0, 16(1)
2405 ; PC64LE9-NEXT: mtlr 0
2408 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
2409 <1 x float> <float 42.0>,
2410 metadata !"round.dynamic",
2411 metadata !"fpexcept.strict")
2412 ret <1 x float> %sin
2415 define <2 x double> @constrained_vector_sin_v2f64() {
2416 ; PC64LE-LABEL: constrained_vector_sin_v2f64:
2417 ; PC64LE: # %bb.0: # %entry
2418 ; PC64LE-NEXT: mflr 0
2419 ; PC64LE-NEXT: std 0, 16(1)
2420 ; PC64LE-NEXT: stdu 1, -64(1)
2421 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
2422 ; PC64LE-NEXT: .cfi_offset lr, 16
2423 ; PC64LE-NEXT: addis 3, 2, .LCPI41_0@toc@ha
2424 ; PC64LE-NEXT: lfd 1, .LCPI41_0@toc@l(3)
2425 ; PC64LE-NEXT: bl sin
2427 ; PC64LE-NEXT: li 3, 48
2428 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2429 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2430 ; PC64LE-NEXT: addis 3, 2, .LCPI41_1@toc@ha
2431 ; PC64LE-NEXT: lfs 1, .LCPI41_1@toc@l(3)
2432 ; PC64LE-NEXT: bl sin
2434 ; PC64LE-NEXT: li 3, 48
2435 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2436 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2437 ; PC64LE-NEXT: xxmrghd 34, 0, 1
2438 ; PC64LE-NEXT: addi 1, 1, 64
2439 ; PC64LE-NEXT: ld 0, 16(1)
2440 ; PC64LE-NEXT: mtlr 0
2443 ; PC64LE9-LABEL: constrained_vector_sin_v2f64:
2444 ; PC64LE9: # %bb.0: # %entry
2445 ; PC64LE9-NEXT: mflr 0
2446 ; PC64LE9-NEXT: std 0, 16(1)
2447 ; PC64LE9-NEXT: stdu 1, -48(1)
2448 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
2449 ; PC64LE9-NEXT: .cfi_offset lr, 16
2450 ; PC64LE9-NEXT: addis 3, 2, .LCPI41_0@toc@ha
2451 ; PC64LE9-NEXT: lfd 1, .LCPI41_0@toc@l(3)
2452 ; PC64LE9-NEXT: bl sin
2454 ; PC64LE9-NEXT: addis 3, 2, .LCPI41_1@toc@ha
2455 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2456 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2457 ; PC64LE9-NEXT: lfs 1, .LCPI41_1@toc@l(3)
2458 ; PC64LE9-NEXT: bl sin
2460 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2461 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2462 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
2463 ; PC64LE9-NEXT: addi 1, 1, 48
2464 ; PC64LE9-NEXT: ld 0, 16(1)
2465 ; PC64LE9-NEXT: mtlr 0
2468 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
2469 <2 x double> <double 42.0, double 42.1>,
2470 metadata !"round.dynamic",
2471 metadata !"fpexcept.strict")
2472 ret <2 x double> %sin
2475 define <3 x float> @constrained_vector_sin_v3f32() {
2476 ; PC64LE-LABEL: constrained_vector_sin_v3f32:
2477 ; PC64LE: # %bb.0: # %entry
2478 ; PC64LE-NEXT: mflr 0
2479 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
2480 ; PC64LE-NEXT: .cfi_offset lr, 16
2481 ; PC64LE-NEXT: .cfi_offset f30, -16
2482 ; PC64LE-NEXT: .cfi_offset f31, -8
2483 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
2484 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
2485 ; PC64LE-NEXT: std 0, 16(1)
2486 ; PC64LE-NEXT: stdu 1, -48(1)
2487 ; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2488 ; PC64LE-NEXT: lfs 1, .LCPI42_0@toc@l(3)
2489 ; PC64LE-NEXT: bl sinf
2491 ; PC64LE-NEXT: addis 3, 2, .LCPI42_1@toc@ha
2492 ; PC64LE-NEXT: fmr 31, 1
2493 ; PC64LE-NEXT: lfs 1, .LCPI42_1@toc@l(3)
2494 ; PC64LE-NEXT: bl sinf
2496 ; PC64LE-NEXT: addis 3, 2, .LCPI42_2@toc@ha
2497 ; PC64LE-NEXT: fmr 30, 1
2498 ; PC64LE-NEXT: lfs 1, .LCPI42_2@toc@l(3)
2499 ; PC64LE-NEXT: bl sinf
2501 ; PC64LE-NEXT: xscvdpspn 0, 30
2502 ; PC64LE-NEXT: addis 3, 2, .LCPI42_3@toc@ha
2503 ; PC64LE-NEXT: xscvdpspn 1, 1
2504 ; PC64LE-NEXT: addi 3, 3, .LCPI42_3@toc@l
2505 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
2506 ; PC64LE-NEXT: xscvdpspn 0, 31
2507 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
2508 ; PC64LE-NEXT: vmrglw 2, 2, 3
2509 ; PC64LE-NEXT: lvx 3, 0, 3
2510 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
2511 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2512 ; PC64LE-NEXT: addi 1, 1, 48
2513 ; PC64LE-NEXT: ld 0, 16(1)
2514 ; PC64LE-NEXT: mtlr 0
2515 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
2516 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
2519 ; PC64LE9-LABEL: constrained_vector_sin_v3f32:
2520 ; PC64LE9: # %bb.0: # %entry
2521 ; PC64LE9-NEXT: mflr 0
2522 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
2523 ; PC64LE9-NEXT: .cfi_offset lr, 16
2524 ; PC64LE9-NEXT: .cfi_offset f30, -16
2525 ; PC64LE9-NEXT: .cfi_offset f31, -8
2526 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
2527 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
2528 ; PC64LE9-NEXT: std 0, 16(1)
2529 ; PC64LE9-NEXT: stdu 1, -48(1)
2530 ; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2531 ; PC64LE9-NEXT: lfs 1, .LCPI42_0@toc@l(3)
2532 ; PC64LE9-NEXT: bl sinf
2534 ; PC64LE9-NEXT: addis 3, 2, .LCPI42_1@toc@ha
2535 ; PC64LE9-NEXT: fmr 31, 1
2536 ; PC64LE9-NEXT: lfs 1, .LCPI42_1@toc@l(3)
2537 ; PC64LE9-NEXT: bl sinf
2539 ; PC64LE9-NEXT: addis 3, 2, .LCPI42_2@toc@ha
2540 ; PC64LE9-NEXT: fmr 30, 1
2541 ; PC64LE9-NEXT: lfs 1, .LCPI42_2@toc@l(3)
2542 ; PC64LE9-NEXT: bl sinf
2544 ; PC64LE9-NEXT: xscvdpspn 0, 1
2545 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
2546 ; PC64LE9-NEXT: xscvdpspn 0, 30
2547 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
2548 ; PC64LE9-NEXT: xscvdpspn 0, 31
2549 ; PC64LE9-NEXT: addis 3, 2, .LCPI42_3@toc@ha
2550 ; PC64LE9-NEXT: addi 3, 3, .LCPI42_3@toc@l
2551 ; PC64LE9-NEXT: vmrglw 2, 3, 2
2552 ; PC64LE9-NEXT: lxvx 35, 0, 3
2553 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
2554 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
2555 ; PC64LE9-NEXT: addi 1, 1, 48
2556 ; PC64LE9-NEXT: ld 0, 16(1)
2557 ; PC64LE9-NEXT: mtlr 0
2558 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
2559 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
2562 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
2563 <3 x float> <float 42.0, float 43.0, float 44.0>,
2564 metadata !"round.dynamic",
2565 metadata !"fpexcept.strict")
2566 ret <3 x float> %sin
2569 define <3 x double> @constrained_vector_sin_v3f64() {
2570 ; PC64LE-LABEL: constrained_vector_sin_v3f64:
2571 ; PC64LE: # %bb.0: # %entry
2572 ; PC64LE-NEXT: mflr 0
2573 ; PC64LE-NEXT: std 0, 16(1)
2574 ; PC64LE-NEXT: stdu 1, -80(1)
2575 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
2576 ; PC64LE-NEXT: .cfi_offset lr, 16
2577 ; PC64LE-NEXT: .cfi_offset v31, -16
2578 ; PC64LE-NEXT: li 3, 64
2579 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2580 ; PC64LE-NEXT: addis 3, 2, .LCPI43_0@toc@ha
2581 ; PC64LE-NEXT: lfd 1, .LCPI43_0@toc@l(3)
2582 ; PC64LE-NEXT: bl sin
2584 ; PC64LE-NEXT: li 3, 48
2585 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2586 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2587 ; PC64LE-NEXT: addis 3, 2, .LCPI43_1@toc@ha
2588 ; PC64LE-NEXT: lfs 1, .LCPI43_1@toc@l(3)
2589 ; PC64LE-NEXT: bl sin
2591 ; PC64LE-NEXT: li 3, 48
2592 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2593 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2594 ; PC64LE-NEXT: addis 3, 2, .LCPI43_2@toc@ha
2595 ; PC64LE-NEXT: xxmrghd 63, 0, 1
2596 ; PC64LE-NEXT: lfd 1, .LCPI43_2@toc@l(3)
2597 ; PC64LE-NEXT: bl sin
2599 ; PC64LE-NEXT: li 3, 64
2600 ; PC64LE-NEXT: fmr 3, 1
2601 ; PC64LE-NEXT: xxlor 1, 63, 63
2602 ; PC64LE-NEXT: xxlor 2, 63, 63
2603 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2604 ; PC64LE-NEXT: addi 1, 1, 80
2605 ; PC64LE-NEXT: ld 0, 16(1)
2606 ; PC64LE-NEXT: mtlr 0
2609 ; PC64LE9-LABEL: constrained_vector_sin_v3f64:
2610 ; PC64LE9: # %bb.0: # %entry
2611 ; PC64LE9-NEXT: mflr 0
2612 ; PC64LE9-NEXT: std 0, 16(1)
2613 ; PC64LE9-NEXT: stdu 1, -64(1)
2614 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
2615 ; PC64LE9-NEXT: .cfi_offset lr, 16
2616 ; PC64LE9-NEXT: .cfi_offset v31, -16
2617 ; PC64LE9-NEXT: addis 3, 2, .LCPI43_0@toc@ha
2618 ; PC64LE9-NEXT: lfd 1, .LCPI43_0@toc@l(3)
2619 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2620 ; PC64LE9-NEXT: bl sin
2622 ; PC64LE9-NEXT: addis 3, 2, .LCPI43_1@toc@ha
2623 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2624 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2625 ; PC64LE9-NEXT: lfs 1, .LCPI43_1@toc@l(3)
2626 ; PC64LE9-NEXT: bl sin
2628 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2629 ; PC64LE9-NEXT: addis 3, 2, .LCPI43_2@toc@ha
2630 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2631 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
2632 ; PC64LE9-NEXT: lfd 1, .LCPI43_2@toc@l(3)
2633 ; PC64LE9-NEXT: bl sin
2635 ; PC64LE9-NEXT: fmr 3, 1
2636 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2637 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2638 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2639 ; PC64LE9-NEXT: addi 1, 1, 64
2640 ; PC64LE9-NEXT: ld 0, 16(1)
2641 ; PC64LE9-NEXT: mtlr 0
2644 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
2645 <3 x double> <double 42.0, double 42.1, double 42.2>,
2646 metadata !"round.dynamic",
2647 metadata !"fpexcept.strict")
2648 ret <3 x double> %sin
2651 define <4 x double> @constrained_vector_sin_v4f64() {
2652 ; PC64LE-LABEL: constrained_vector_sin_v4f64:
2653 ; PC64LE: # %bb.0: # %entry
2654 ; PC64LE-NEXT: mflr 0
2655 ; PC64LE-NEXT: std 0, 16(1)
2656 ; PC64LE-NEXT: stdu 1, -80(1)
2657 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
2658 ; PC64LE-NEXT: .cfi_offset lr, 16
2659 ; PC64LE-NEXT: .cfi_offset v31, -16
2660 ; PC64LE-NEXT: li 3, 64
2661 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2662 ; PC64LE-NEXT: addis 3, 2, .LCPI44_0@toc@ha
2663 ; PC64LE-NEXT: lfd 1, .LCPI44_0@toc@l(3)
2664 ; PC64LE-NEXT: bl sin
2666 ; PC64LE-NEXT: li 3, 48
2667 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2668 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2669 ; PC64LE-NEXT: addis 3, 2, .LCPI44_1@toc@ha
2670 ; PC64LE-NEXT: lfd 1, .LCPI44_1@toc@l(3)
2671 ; PC64LE-NEXT: bl sin
2673 ; PC64LE-NEXT: li 3, 48
2674 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2675 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2676 ; PC64LE-NEXT: addis 3, 2, .LCPI44_2@toc@ha
2677 ; PC64LE-NEXT: xxmrghd 63, 1, 0
2678 ; PC64LE-NEXT: lfd 1, .LCPI44_2@toc@l(3)
2679 ; PC64LE-NEXT: bl sin
2681 ; PC64LE-NEXT: li 3, 48
2682 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2683 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2684 ; PC64LE-NEXT: addis 3, 2, .LCPI44_3@toc@ha
2685 ; PC64LE-NEXT: lfs 1, .LCPI44_3@toc@l(3)
2686 ; PC64LE-NEXT: bl sin
2688 ; PC64LE-NEXT: li 3, 48
2689 ; PC64LE-NEXT: vmr 3, 31
2690 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2691 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2692 ; PC64LE-NEXT: li 3, 64
2693 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2694 ; PC64LE-NEXT: xxmrghd 34, 0, 1
2695 ; PC64LE-NEXT: addi 1, 1, 80
2696 ; PC64LE-NEXT: ld 0, 16(1)
2697 ; PC64LE-NEXT: mtlr 0
2700 ; PC64LE9-LABEL: constrained_vector_sin_v4f64:
2701 ; PC64LE9: # %bb.0: # %entry
2702 ; PC64LE9-NEXT: mflr 0
2703 ; PC64LE9-NEXT: std 0, 16(1)
2704 ; PC64LE9-NEXT: stdu 1, -64(1)
2705 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
2706 ; PC64LE9-NEXT: .cfi_offset lr, 16
2707 ; PC64LE9-NEXT: .cfi_offset v31, -16
2708 ; PC64LE9-NEXT: addis 3, 2, .LCPI44_0@toc@ha
2709 ; PC64LE9-NEXT: lfd 1, .LCPI44_0@toc@l(3)
2710 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2711 ; PC64LE9-NEXT: bl sin
2713 ; PC64LE9-NEXT: addis 3, 2, .LCPI44_1@toc@ha
2714 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2715 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2716 ; PC64LE9-NEXT: lfd 1, .LCPI44_1@toc@l(3)
2717 ; PC64LE9-NEXT: bl sin
2719 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2720 ; PC64LE9-NEXT: addis 3, 2, .LCPI44_2@toc@ha
2721 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2722 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
2723 ; PC64LE9-NEXT: lfd 1, .LCPI44_2@toc@l(3)
2724 ; PC64LE9-NEXT: bl sin
2726 ; PC64LE9-NEXT: addis 3, 2, .LCPI44_3@toc@ha
2727 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2728 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2729 ; PC64LE9-NEXT: lfs 1, .LCPI44_3@toc@l(3)
2730 ; PC64LE9-NEXT: bl sin
2732 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2733 ; PC64LE9-NEXT: vmr 3, 31
2734 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2735 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2736 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
2737 ; PC64LE9-NEXT: addi 1, 1, 64
2738 ; PC64LE9-NEXT: ld 0, 16(1)
2739 ; PC64LE9-NEXT: mtlr 0
2742 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64(
2743 <4 x double> <double 42.0, double 42.1,
2744 double 42.2, double 42.3>,
2745 metadata !"round.dynamic",
2746 metadata !"fpexcept.strict")
2747 ret <4 x double> %sin
2750 define <1 x float> @constrained_vector_cos_v1f32() {
2751 ; PC64LE-LABEL: constrained_vector_cos_v1f32:
2752 ; PC64LE: # %bb.0: # %entry
2753 ; PC64LE-NEXT: mflr 0
2754 ; PC64LE-NEXT: std 0, 16(1)
2755 ; PC64LE-NEXT: stdu 1, -32(1)
2756 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
2757 ; PC64LE-NEXT: .cfi_offset lr, 16
2758 ; PC64LE-NEXT: addis 3, 2, .LCPI45_0@toc@ha
2759 ; PC64LE-NEXT: lfs 1, .LCPI45_0@toc@l(3)
2760 ; PC64LE-NEXT: bl cosf
2762 ; PC64LE-NEXT: xscvdpspn 0, 1
2763 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
2764 ; PC64LE-NEXT: addi 1, 1, 32
2765 ; PC64LE-NEXT: ld 0, 16(1)
2766 ; PC64LE-NEXT: mtlr 0
2769 ; PC64LE9-LABEL: constrained_vector_cos_v1f32:
2770 ; PC64LE9: # %bb.0: # %entry
2771 ; PC64LE9-NEXT: mflr 0
2772 ; PC64LE9-NEXT: std 0, 16(1)
2773 ; PC64LE9-NEXT: stdu 1, -32(1)
2774 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
2775 ; PC64LE9-NEXT: .cfi_offset lr, 16
2776 ; PC64LE9-NEXT: addis 3, 2, .LCPI45_0@toc@ha
2777 ; PC64LE9-NEXT: lfs 1, .LCPI45_0@toc@l(3)
2778 ; PC64LE9-NEXT: bl cosf
2780 ; PC64LE9-NEXT: xscvdpspn 0, 1
2781 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
2782 ; PC64LE9-NEXT: addi 1, 1, 32
2783 ; PC64LE9-NEXT: ld 0, 16(1)
2784 ; PC64LE9-NEXT: mtlr 0
2787 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
2788 <1 x float> <float 42.0>,
2789 metadata !"round.dynamic",
2790 metadata !"fpexcept.strict")
2791 ret <1 x float> %cos
2794 define <2 x double> @constrained_vector_cos_v2f64() {
2795 ; PC64LE-LABEL: constrained_vector_cos_v2f64:
2796 ; PC64LE: # %bb.0: # %entry
2797 ; PC64LE-NEXT: mflr 0
2798 ; PC64LE-NEXT: std 0, 16(1)
2799 ; PC64LE-NEXT: stdu 1, -64(1)
2800 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
2801 ; PC64LE-NEXT: .cfi_offset lr, 16
2802 ; PC64LE-NEXT: addis 3, 2, .LCPI46_0@toc@ha
2803 ; PC64LE-NEXT: lfd 1, .LCPI46_0@toc@l(3)
2804 ; PC64LE-NEXT: bl cos
2806 ; PC64LE-NEXT: li 3, 48
2807 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2808 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2809 ; PC64LE-NEXT: addis 3, 2, .LCPI46_1@toc@ha
2810 ; PC64LE-NEXT: lfs 1, .LCPI46_1@toc@l(3)
2811 ; PC64LE-NEXT: bl cos
2813 ; PC64LE-NEXT: li 3, 48
2814 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2815 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2816 ; PC64LE-NEXT: xxmrghd 34, 0, 1
2817 ; PC64LE-NEXT: addi 1, 1, 64
2818 ; PC64LE-NEXT: ld 0, 16(1)
2819 ; PC64LE-NEXT: mtlr 0
2822 ; PC64LE9-LABEL: constrained_vector_cos_v2f64:
2823 ; PC64LE9: # %bb.0: # %entry
2824 ; PC64LE9-NEXT: mflr 0
2825 ; PC64LE9-NEXT: std 0, 16(1)
2826 ; PC64LE9-NEXT: stdu 1, -48(1)
2827 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
2828 ; PC64LE9-NEXT: .cfi_offset lr, 16
2829 ; PC64LE9-NEXT: addis 3, 2, .LCPI46_0@toc@ha
2830 ; PC64LE9-NEXT: lfd 1, .LCPI46_0@toc@l(3)
2831 ; PC64LE9-NEXT: bl cos
2833 ; PC64LE9-NEXT: addis 3, 2, .LCPI46_1@toc@ha
2834 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2835 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
2836 ; PC64LE9-NEXT: lfs 1, .LCPI46_1@toc@l(3)
2837 ; PC64LE9-NEXT: bl cos
2839 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
2840 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2841 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
2842 ; PC64LE9-NEXT: addi 1, 1, 48
2843 ; PC64LE9-NEXT: ld 0, 16(1)
2844 ; PC64LE9-NEXT: mtlr 0
2847 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
2848 <2 x double> <double 42.0, double 42.1>,
2849 metadata !"round.dynamic",
2850 metadata !"fpexcept.strict")
2851 ret <2 x double> %cos
2854 define <3 x float> @constrained_vector_cos_v3f32() {
2855 ; PC64LE-LABEL: constrained_vector_cos_v3f32:
2856 ; PC64LE: # %bb.0: # %entry
2857 ; PC64LE-NEXT: mflr 0
2858 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
2859 ; PC64LE-NEXT: .cfi_offset lr, 16
2860 ; PC64LE-NEXT: .cfi_offset f30, -16
2861 ; PC64LE-NEXT: .cfi_offset f31, -8
2862 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
2863 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
2864 ; PC64LE-NEXT: std 0, 16(1)
2865 ; PC64LE-NEXT: stdu 1, -48(1)
2866 ; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2867 ; PC64LE-NEXT: lfs 1, .LCPI47_0@toc@l(3)
2868 ; PC64LE-NEXT: bl cosf
2870 ; PC64LE-NEXT: addis 3, 2, .LCPI47_1@toc@ha
2871 ; PC64LE-NEXT: fmr 31, 1
2872 ; PC64LE-NEXT: lfs 1, .LCPI47_1@toc@l(3)
2873 ; PC64LE-NEXT: bl cosf
2875 ; PC64LE-NEXT: addis 3, 2, .LCPI47_2@toc@ha
2876 ; PC64LE-NEXT: fmr 30, 1
2877 ; PC64LE-NEXT: lfs 1, .LCPI47_2@toc@l(3)
2878 ; PC64LE-NEXT: bl cosf
2880 ; PC64LE-NEXT: xscvdpspn 0, 30
2881 ; PC64LE-NEXT: addis 3, 2, .LCPI47_3@toc@ha
2882 ; PC64LE-NEXT: xscvdpspn 1, 1
2883 ; PC64LE-NEXT: addi 3, 3, .LCPI47_3@toc@l
2884 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
2885 ; PC64LE-NEXT: xscvdpspn 0, 31
2886 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
2887 ; PC64LE-NEXT: vmrglw 2, 2, 3
2888 ; PC64LE-NEXT: lvx 3, 0, 3
2889 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
2890 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2891 ; PC64LE-NEXT: addi 1, 1, 48
2892 ; PC64LE-NEXT: ld 0, 16(1)
2893 ; PC64LE-NEXT: mtlr 0
2894 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
2895 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
2898 ; PC64LE9-LABEL: constrained_vector_cos_v3f32:
2899 ; PC64LE9: # %bb.0: # %entry
2900 ; PC64LE9-NEXT: mflr 0
2901 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
2902 ; PC64LE9-NEXT: .cfi_offset lr, 16
2903 ; PC64LE9-NEXT: .cfi_offset f30, -16
2904 ; PC64LE9-NEXT: .cfi_offset f31, -8
2905 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
2906 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
2907 ; PC64LE9-NEXT: std 0, 16(1)
2908 ; PC64LE9-NEXT: stdu 1, -48(1)
2909 ; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2910 ; PC64LE9-NEXT: lfs 1, .LCPI47_0@toc@l(3)
2911 ; PC64LE9-NEXT: bl cosf
2913 ; PC64LE9-NEXT: addis 3, 2, .LCPI47_1@toc@ha
2914 ; PC64LE9-NEXT: fmr 31, 1
2915 ; PC64LE9-NEXT: lfs 1, .LCPI47_1@toc@l(3)
2916 ; PC64LE9-NEXT: bl cosf
2918 ; PC64LE9-NEXT: addis 3, 2, .LCPI47_2@toc@ha
2919 ; PC64LE9-NEXT: fmr 30, 1
2920 ; PC64LE9-NEXT: lfs 1, .LCPI47_2@toc@l(3)
2921 ; PC64LE9-NEXT: bl cosf
2923 ; PC64LE9-NEXT: xscvdpspn 0, 1
2924 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
2925 ; PC64LE9-NEXT: xscvdpspn 0, 30
2926 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
2927 ; PC64LE9-NEXT: xscvdpspn 0, 31
2928 ; PC64LE9-NEXT: addis 3, 2, .LCPI47_3@toc@ha
2929 ; PC64LE9-NEXT: addi 3, 3, .LCPI47_3@toc@l
2930 ; PC64LE9-NEXT: vmrglw 2, 3, 2
2931 ; PC64LE9-NEXT: lxvx 35, 0, 3
2932 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
2933 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
2934 ; PC64LE9-NEXT: addi 1, 1, 48
2935 ; PC64LE9-NEXT: ld 0, 16(1)
2936 ; PC64LE9-NEXT: mtlr 0
2937 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
2938 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
2941 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
2942 <3 x float> <float 42.0, float 43.0, float 44.0>,
2943 metadata !"round.dynamic",
2944 metadata !"fpexcept.strict")
2945 ret <3 x float> %cos
2948 define <3 x double> @constrained_vector_cos_v3f64() {
2949 ; PC64LE-LABEL: constrained_vector_cos_v3f64:
2950 ; PC64LE: # %bb.0: # %entry
2951 ; PC64LE-NEXT: mflr 0
2952 ; PC64LE-NEXT: std 0, 16(1)
2953 ; PC64LE-NEXT: stdu 1, -80(1)
2954 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
2955 ; PC64LE-NEXT: .cfi_offset lr, 16
2956 ; PC64LE-NEXT: .cfi_offset v31, -16
2957 ; PC64LE-NEXT: li 3, 64
2958 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2959 ; PC64LE-NEXT: addis 3, 2, .LCPI48_0@toc@ha
2960 ; PC64LE-NEXT: lfd 1, .LCPI48_0@toc@l(3)
2961 ; PC64LE-NEXT: bl cos
2963 ; PC64LE-NEXT: li 3, 48
2964 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2965 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
2966 ; PC64LE-NEXT: addis 3, 2, .LCPI48_1@toc@ha
2967 ; PC64LE-NEXT: lfs 1, .LCPI48_1@toc@l(3)
2968 ; PC64LE-NEXT: bl cos
2970 ; PC64LE-NEXT: li 3, 48
2971 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2972 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
2973 ; PC64LE-NEXT: addis 3, 2, .LCPI48_2@toc@ha
2974 ; PC64LE-NEXT: xxmrghd 63, 0, 1
2975 ; PC64LE-NEXT: lfd 1, .LCPI48_2@toc@l(3)
2976 ; PC64LE-NEXT: bl cos
2978 ; PC64LE-NEXT: li 3, 64
2979 ; PC64LE-NEXT: fmr 3, 1
2980 ; PC64LE-NEXT: xxlor 1, 63, 63
2981 ; PC64LE-NEXT: xxlor 2, 63, 63
2982 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2983 ; PC64LE-NEXT: addi 1, 1, 80
2984 ; PC64LE-NEXT: ld 0, 16(1)
2985 ; PC64LE-NEXT: mtlr 0
2988 ; PC64LE9-LABEL: constrained_vector_cos_v3f64:
2989 ; PC64LE9: # %bb.0: # %entry
2990 ; PC64LE9-NEXT: mflr 0
2991 ; PC64LE9-NEXT: std 0, 16(1)
2992 ; PC64LE9-NEXT: stdu 1, -64(1)
2993 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
2994 ; PC64LE9-NEXT: .cfi_offset lr, 16
2995 ; PC64LE9-NEXT: .cfi_offset v31, -16
2996 ; PC64LE9-NEXT: addis 3, 2, .LCPI48_0@toc@ha
2997 ; PC64LE9-NEXT: lfd 1, .LCPI48_0@toc@l(3)
2998 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2999 ; PC64LE9-NEXT: bl cos
3001 ; PC64LE9-NEXT: addis 3, 2, .LCPI48_1@toc@ha
3002 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3003 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3004 ; PC64LE9-NEXT: lfs 1, .LCPI48_1@toc@l(3)
3005 ; PC64LE9-NEXT: bl cos
3007 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3008 ; PC64LE9-NEXT: addis 3, 2, .LCPI48_2@toc@ha
3009 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3010 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
3011 ; PC64LE9-NEXT: lfd 1, .LCPI48_2@toc@l(3)
3012 ; PC64LE9-NEXT: bl cos
3014 ; PC64LE9-NEXT: fmr 3, 1
3015 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3016 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3017 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3018 ; PC64LE9-NEXT: addi 1, 1, 64
3019 ; PC64LE9-NEXT: ld 0, 16(1)
3020 ; PC64LE9-NEXT: mtlr 0
3023 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
3024 <3 x double> <double 42.0, double 42.1, double 42.2>,
3025 metadata !"round.dynamic",
3026 metadata !"fpexcept.strict")
3027 ret <3 x double> %cos
3030 define <4 x double> @constrained_vector_cos_v4f64() {
3031 ; PC64LE-LABEL: constrained_vector_cos_v4f64:
3032 ; PC64LE: # %bb.0: # %entry
3033 ; PC64LE-NEXT: mflr 0
3034 ; PC64LE-NEXT: std 0, 16(1)
3035 ; PC64LE-NEXT: stdu 1, -80(1)
3036 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
3037 ; PC64LE-NEXT: .cfi_offset lr, 16
3038 ; PC64LE-NEXT: .cfi_offset v31, -16
3039 ; PC64LE-NEXT: li 3, 64
3040 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3041 ; PC64LE-NEXT: addis 3, 2, .LCPI49_0@toc@ha
3042 ; PC64LE-NEXT: lfd 1, .LCPI49_0@toc@l(3)
3043 ; PC64LE-NEXT: bl cos
3045 ; PC64LE-NEXT: li 3, 48
3046 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3047 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3048 ; PC64LE-NEXT: addis 3, 2, .LCPI49_1@toc@ha
3049 ; PC64LE-NEXT: lfd 1, .LCPI49_1@toc@l(3)
3050 ; PC64LE-NEXT: bl cos
3052 ; PC64LE-NEXT: li 3, 48
3053 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3054 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3055 ; PC64LE-NEXT: addis 3, 2, .LCPI49_2@toc@ha
3056 ; PC64LE-NEXT: xxmrghd 63, 1, 0
3057 ; PC64LE-NEXT: lfd 1, .LCPI49_2@toc@l(3)
3058 ; PC64LE-NEXT: bl cos
3060 ; PC64LE-NEXT: li 3, 48
3061 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3062 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3063 ; PC64LE-NEXT: addis 3, 2, .LCPI49_3@toc@ha
3064 ; PC64LE-NEXT: lfs 1, .LCPI49_3@toc@l(3)
3065 ; PC64LE-NEXT: bl cos
3067 ; PC64LE-NEXT: li 3, 48
3068 ; PC64LE-NEXT: vmr 3, 31
3069 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3070 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3071 ; PC64LE-NEXT: li 3, 64
3072 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3073 ; PC64LE-NEXT: xxmrghd 34, 0, 1
3074 ; PC64LE-NEXT: addi 1, 1, 80
3075 ; PC64LE-NEXT: ld 0, 16(1)
3076 ; PC64LE-NEXT: mtlr 0
3079 ; PC64LE9-LABEL: constrained_vector_cos_v4f64:
3080 ; PC64LE9: # %bb.0: # %entry
3081 ; PC64LE9-NEXT: mflr 0
3082 ; PC64LE9-NEXT: std 0, 16(1)
3083 ; PC64LE9-NEXT: stdu 1, -64(1)
3084 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
3085 ; PC64LE9-NEXT: .cfi_offset lr, 16
3086 ; PC64LE9-NEXT: .cfi_offset v31, -16
3087 ; PC64LE9-NEXT: addis 3, 2, .LCPI49_0@toc@ha
3088 ; PC64LE9-NEXT: lfd 1, .LCPI49_0@toc@l(3)
3089 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3090 ; PC64LE9-NEXT: bl cos
3092 ; PC64LE9-NEXT: addis 3, 2, .LCPI49_1@toc@ha
3093 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3094 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3095 ; PC64LE9-NEXT: lfd 1, .LCPI49_1@toc@l(3)
3096 ; PC64LE9-NEXT: bl cos
3098 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3099 ; PC64LE9-NEXT: addis 3, 2, .LCPI49_2@toc@ha
3100 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3101 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
3102 ; PC64LE9-NEXT: lfd 1, .LCPI49_2@toc@l(3)
3103 ; PC64LE9-NEXT: bl cos
3105 ; PC64LE9-NEXT: addis 3, 2, .LCPI49_3@toc@ha
3106 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3107 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3108 ; PC64LE9-NEXT: lfs 1, .LCPI49_3@toc@l(3)
3109 ; PC64LE9-NEXT: bl cos
3111 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3112 ; PC64LE9-NEXT: vmr 3, 31
3113 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3114 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3115 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
3116 ; PC64LE9-NEXT: addi 1, 1, 64
3117 ; PC64LE9-NEXT: ld 0, 16(1)
3118 ; PC64LE9-NEXT: mtlr 0
3121 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64(
3122 <4 x double> <double 42.0, double 42.1,
3123 double 42.2, double 42.3>,
3124 metadata !"round.dynamic",
3125 metadata !"fpexcept.strict")
3126 ret <4 x double> %cos
3129 define <1 x float> @constrained_vector_exp_v1f32() {
3130 ; PC64LE-LABEL: constrained_vector_exp_v1f32:
3131 ; PC64LE: # %bb.0: # %entry
3132 ; PC64LE-NEXT: mflr 0
3133 ; PC64LE-NEXT: std 0, 16(1)
3134 ; PC64LE-NEXT: stdu 1, -32(1)
3135 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
3136 ; PC64LE-NEXT: .cfi_offset lr, 16
3137 ; PC64LE-NEXT: addis 3, 2, .LCPI50_0@toc@ha
3138 ; PC64LE-NEXT: lfs 1, .LCPI50_0@toc@l(3)
3139 ; PC64LE-NEXT: bl expf
3141 ; PC64LE-NEXT: xscvdpspn 0, 1
3142 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
3143 ; PC64LE-NEXT: addi 1, 1, 32
3144 ; PC64LE-NEXT: ld 0, 16(1)
3145 ; PC64LE-NEXT: mtlr 0
3148 ; PC64LE9-LABEL: constrained_vector_exp_v1f32:
3149 ; PC64LE9: # %bb.0: # %entry
3150 ; PC64LE9-NEXT: mflr 0
3151 ; PC64LE9-NEXT: std 0, 16(1)
3152 ; PC64LE9-NEXT: stdu 1, -32(1)
3153 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
3154 ; PC64LE9-NEXT: .cfi_offset lr, 16
3155 ; PC64LE9-NEXT: addis 3, 2, .LCPI50_0@toc@ha
3156 ; PC64LE9-NEXT: lfs 1, .LCPI50_0@toc@l(3)
3157 ; PC64LE9-NEXT: bl expf
3159 ; PC64LE9-NEXT: xscvdpspn 0, 1
3160 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
3161 ; PC64LE9-NEXT: addi 1, 1, 32
3162 ; PC64LE9-NEXT: ld 0, 16(1)
3163 ; PC64LE9-NEXT: mtlr 0
3166 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
3167 <1 x float> <float 42.0>,
3168 metadata !"round.dynamic",
3169 metadata !"fpexcept.strict")
3170 ret <1 x float> %exp
3173 define <2 x double> @constrained_vector_exp_v2f64() {
3174 ; PC64LE-LABEL: constrained_vector_exp_v2f64:
3175 ; PC64LE: # %bb.0: # %entry
3176 ; PC64LE-NEXT: mflr 0
3177 ; PC64LE-NEXT: std 0, 16(1)
3178 ; PC64LE-NEXT: stdu 1, -64(1)
3179 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
3180 ; PC64LE-NEXT: .cfi_offset lr, 16
3181 ; PC64LE-NEXT: addis 3, 2, .LCPI51_0@toc@ha
3182 ; PC64LE-NEXT: lfd 1, .LCPI51_0@toc@l(3)
3183 ; PC64LE-NEXT: bl exp
3185 ; PC64LE-NEXT: li 3, 48
3186 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3187 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3188 ; PC64LE-NEXT: addis 3, 2, .LCPI51_1@toc@ha
3189 ; PC64LE-NEXT: lfs 1, .LCPI51_1@toc@l(3)
3190 ; PC64LE-NEXT: bl exp
3192 ; PC64LE-NEXT: li 3, 48
3193 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3194 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3195 ; PC64LE-NEXT: xxmrghd 34, 0, 1
3196 ; PC64LE-NEXT: addi 1, 1, 64
3197 ; PC64LE-NEXT: ld 0, 16(1)
3198 ; PC64LE-NEXT: mtlr 0
3201 ; PC64LE9-LABEL: constrained_vector_exp_v2f64:
3202 ; PC64LE9: # %bb.0: # %entry
3203 ; PC64LE9-NEXT: mflr 0
3204 ; PC64LE9-NEXT: std 0, 16(1)
3205 ; PC64LE9-NEXT: stdu 1, -48(1)
3206 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
3207 ; PC64LE9-NEXT: .cfi_offset lr, 16
3208 ; PC64LE9-NEXT: addis 3, 2, .LCPI51_0@toc@ha
3209 ; PC64LE9-NEXT: lfd 1, .LCPI51_0@toc@l(3)
3210 ; PC64LE9-NEXT: bl exp
3212 ; PC64LE9-NEXT: addis 3, 2, .LCPI51_1@toc@ha
3213 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3214 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3215 ; PC64LE9-NEXT: lfs 1, .LCPI51_1@toc@l(3)
3216 ; PC64LE9-NEXT: bl exp
3218 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3219 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3220 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
3221 ; PC64LE9-NEXT: addi 1, 1, 48
3222 ; PC64LE9-NEXT: ld 0, 16(1)
3223 ; PC64LE9-NEXT: mtlr 0
3226 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
3227 <2 x double> <double 42.0, double 42.1>,
3228 metadata !"round.dynamic",
3229 metadata !"fpexcept.strict")
3230 ret <2 x double> %exp
3233 define <3 x float> @constrained_vector_exp_v3f32() {
3234 ; PC64LE-LABEL: constrained_vector_exp_v3f32:
3235 ; PC64LE: # %bb.0: # %entry
3236 ; PC64LE-NEXT: mflr 0
3237 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
3238 ; PC64LE-NEXT: .cfi_offset lr, 16
3239 ; PC64LE-NEXT: .cfi_offset f30, -16
3240 ; PC64LE-NEXT: .cfi_offset f31, -8
3241 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
3242 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
3243 ; PC64LE-NEXT: std 0, 16(1)
3244 ; PC64LE-NEXT: stdu 1, -48(1)
3245 ; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha
3246 ; PC64LE-NEXT: lfs 1, .LCPI52_0@toc@l(3)
3247 ; PC64LE-NEXT: bl expf
3249 ; PC64LE-NEXT: addis 3, 2, .LCPI52_1@toc@ha
3250 ; PC64LE-NEXT: fmr 31, 1
3251 ; PC64LE-NEXT: lfs 1, .LCPI52_1@toc@l(3)
3252 ; PC64LE-NEXT: bl expf
3254 ; PC64LE-NEXT: addis 3, 2, .LCPI52_2@toc@ha
3255 ; PC64LE-NEXT: fmr 30, 1
3256 ; PC64LE-NEXT: lfs 1, .LCPI52_2@toc@l(3)
3257 ; PC64LE-NEXT: bl expf
3259 ; PC64LE-NEXT: xscvdpspn 0, 30
3260 ; PC64LE-NEXT: addis 3, 2, .LCPI52_3@toc@ha
3261 ; PC64LE-NEXT: xscvdpspn 1, 1
3262 ; PC64LE-NEXT: addi 3, 3, .LCPI52_3@toc@l
3263 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
3264 ; PC64LE-NEXT: xscvdpspn 0, 31
3265 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
3266 ; PC64LE-NEXT: vmrglw 2, 2, 3
3267 ; PC64LE-NEXT: lvx 3, 0, 3
3268 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
3269 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3270 ; PC64LE-NEXT: addi 1, 1, 48
3271 ; PC64LE-NEXT: ld 0, 16(1)
3272 ; PC64LE-NEXT: mtlr 0
3273 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
3274 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
3277 ; PC64LE9-LABEL: constrained_vector_exp_v3f32:
3278 ; PC64LE9: # %bb.0: # %entry
3279 ; PC64LE9-NEXT: mflr 0
3280 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
3281 ; PC64LE9-NEXT: .cfi_offset lr, 16
3282 ; PC64LE9-NEXT: .cfi_offset f30, -16
3283 ; PC64LE9-NEXT: .cfi_offset f31, -8
3284 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
3285 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
3286 ; PC64LE9-NEXT: std 0, 16(1)
3287 ; PC64LE9-NEXT: stdu 1, -48(1)
3288 ; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha
3289 ; PC64LE9-NEXT: lfs 1, .LCPI52_0@toc@l(3)
3290 ; PC64LE9-NEXT: bl expf
3292 ; PC64LE9-NEXT: addis 3, 2, .LCPI52_1@toc@ha
3293 ; PC64LE9-NEXT: fmr 31, 1
3294 ; PC64LE9-NEXT: lfs 1, .LCPI52_1@toc@l(3)
3295 ; PC64LE9-NEXT: bl expf
3297 ; PC64LE9-NEXT: addis 3, 2, .LCPI52_2@toc@ha
3298 ; PC64LE9-NEXT: fmr 30, 1
3299 ; PC64LE9-NEXT: lfs 1, .LCPI52_2@toc@l(3)
3300 ; PC64LE9-NEXT: bl expf
3302 ; PC64LE9-NEXT: xscvdpspn 0, 1
3303 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
3304 ; PC64LE9-NEXT: xscvdpspn 0, 30
3305 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
3306 ; PC64LE9-NEXT: xscvdpspn 0, 31
3307 ; PC64LE9-NEXT: addis 3, 2, .LCPI52_3@toc@ha
3308 ; PC64LE9-NEXT: addi 3, 3, .LCPI52_3@toc@l
3309 ; PC64LE9-NEXT: vmrglw 2, 3, 2
3310 ; PC64LE9-NEXT: lxvx 35, 0, 3
3311 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
3312 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
3313 ; PC64LE9-NEXT: addi 1, 1, 48
3314 ; PC64LE9-NEXT: ld 0, 16(1)
3315 ; PC64LE9-NEXT: mtlr 0
3316 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
3317 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
3320 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
3321 <3 x float> <float 42.0, float 43.0, float 44.0>,
3322 metadata !"round.dynamic",
3323 metadata !"fpexcept.strict")
3324 ret <3 x float> %exp
3327 define <3 x double> @constrained_vector_exp_v3f64() {
3328 ; PC64LE-LABEL: constrained_vector_exp_v3f64:
3329 ; PC64LE: # %bb.0: # %entry
3330 ; PC64LE-NEXT: mflr 0
3331 ; PC64LE-NEXT: std 0, 16(1)
3332 ; PC64LE-NEXT: stdu 1, -80(1)
3333 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
3334 ; PC64LE-NEXT: .cfi_offset lr, 16
3335 ; PC64LE-NEXT: .cfi_offset v31, -16
3336 ; PC64LE-NEXT: li 3, 64
3337 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3338 ; PC64LE-NEXT: addis 3, 2, .LCPI53_0@toc@ha
3339 ; PC64LE-NEXT: lfd 1, .LCPI53_0@toc@l(3)
3340 ; PC64LE-NEXT: bl exp
3342 ; PC64LE-NEXT: li 3, 48
3343 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3344 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3345 ; PC64LE-NEXT: addis 3, 2, .LCPI53_1@toc@ha
3346 ; PC64LE-NEXT: lfs 1, .LCPI53_1@toc@l(3)
3347 ; PC64LE-NEXT: bl exp
3349 ; PC64LE-NEXT: li 3, 48
3350 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3351 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3352 ; PC64LE-NEXT: addis 3, 2, .LCPI53_2@toc@ha
3353 ; PC64LE-NEXT: xxmrghd 63, 0, 1
3354 ; PC64LE-NEXT: lfd 1, .LCPI53_2@toc@l(3)
3355 ; PC64LE-NEXT: bl exp
3357 ; PC64LE-NEXT: li 3, 64
3358 ; PC64LE-NEXT: fmr 3, 1
3359 ; PC64LE-NEXT: xxlor 1, 63, 63
3360 ; PC64LE-NEXT: xxlor 2, 63, 63
3361 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3362 ; PC64LE-NEXT: addi 1, 1, 80
3363 ; PC64LE-NEXT: ld 0, 16(1)
3364 ; PC64LE-NEXT: mtlr 0
3367 ; PC64LE9-LABEL: constrained_vector_exp_v3f64:
3368 ; PC64LE9: # %bb.0: # %entry
3369 ; PC64LE9-NEXT: mflr 0
3370 ; PC64LE9-NEXT: std 0, 16(1)
3371 ; PC64LE9-NEXT: stdu 1, -64(1)
3372 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
3373 ; PC64LE9-NEXT: .cfi_offset lr, 16
3374 ; PC64LE9-NEXT: .cfi_offset v31, -16
3375 ; PC64LE9-NEXT: addis 3, 2, .LCPI53_0@toc@ha
3376 ; PC64LE9-NEXT: lfd 1, .LCPI53_0@toc@l(3)
3377 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3378 ; PC64LE9-NEXT: bl exp
3380 ; PC64LE9-NEXT: addis 3, 2, .LCPI53_1@toc@ha
3381 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3382 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3383 ; PC64LE9-NEXT: lfs 1, .LCPI53_1@toc@l(3)
3384 ; PC64LE9-NEXT: bl exp
3386 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3387 ; PC64LE9-NEXT: addis 3, 2, .LCPI53_2@toc@ha
3388 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3389 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
3390 ; PC64LE9-NEXT: lfd 1, .LCPI53_2@toc@l(3)
3391 ; PC64LE9-NEXT: bl exp
3393 ; PC64LE9-NEXT: fmr 3, 1
3394 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3395 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3396 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3397 ; PC64LE9-NEXT: addi 1, 1, 64
3398 ; PC64LE9-NEXT: ld 0, 16(1)
3399 ; PC64LE9-NEXT: mtlr 0
3402 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
3403 <3 x double> <double 42.0, double 42.1, double 42.2>,
3404 metadata !"round.dynamic",
3405 metadata !"fpexcept.strict")
3406 ret <3 x double> %exp
3409 define <4 x double> @constrained_vector_exp_v4f64() {
3410 ; PC64LE-LABEL: constrained_vector_exp_v4f64:
3411 ; PC64LE: # %bb.0: # %entry
3412 ; PC64LE-NEXT: mflr 0
3413 ; PC64LE-NEXT: std 0, 16(1)
3414 ; PC64LE-NEXT: stdu 1, -80(1)
3415 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
3416 ; PC64LE-NEXT: .cfi_offset lr, 16
3417 ; PC64LE-NEXT: .cfi_offset v31, -16
3418 ; PC64LE-NEXT: li 3, 64
3419 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3420 ; PC64LE-NEXT: addis 3, 2, .LCPI54_0@toc@ha
3421 ; PC64LE-NEXT: lfd 1, .LCPI54_0@toc@l(3)
3422 ; PC64LE-NEXT: bl exp
3424 ; PC64LE-NEXT: li 3, 48
3425 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3426 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3427 ; PC64LE-NEXT: addis 3, 2, .LCPI54_1@toc@ha
3428 ; PC64LE-NEXT: lfd 1, .LCPI54_1@toc@l(3)
3429 ; PC64LE-NEXT: bl exp
3431 ; PC64LE-NEXT: li 3, 48
3432 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3433 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3434 ; PC64LE-NEXT: addis 3, 2, .LCPI54_2@toc@ha
3435 ; PC64LE-NEXT: xxmrghd 63, 1, 0
3436 ; PC64LE-NEXT: lfd 1, .LCPI54_2@toc@l(3)
3437 ; PC64LE-NEXT: bl exp
3439 ; PC64LE-NEXT: li 3, 48
3440 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3441 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3442 ; PC64LE-NEXT: addis 3, 2, .LCPI54_3@toc@ha
3443 ; PC64LE-NEXT: lfs 1, .LCPI54_3@toc@l(3)
3444 ; PC64LE-NEXT: bl exp
3446 ; PC64LE-NEXT: li 3, 48
3447 ; PC64LE-NEXT: vmr 3, 31
3448 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3449 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3450 ; PC64LE-NEXT: li 3, 64
3451 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3452 ; PC64LE-NEXT: xxmrghd 34, 0, 1
3453 ; PC64LE-NEXT: addi 1, 1, 80
3454 ; PC64LE-NEXT: ld 0, 16(1)
3455 ; PC64LE-NEXT: mtlr 0
3458 ; PC64LE9-LABEL: constrained_vector_exp_v4f64:
3459 ; PC64LE9: # %bb.0: # %entry
3460 ; PC64LE9-NEXT: mflr 0
3461 ; PC64LE9-NEXT: std 0, 16(1)
3462 ; PC64LE9-NEXT: stdu 1, -64(1)
3463 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
3464 ; PC64LE9-NEXT: .cfi_offset lr, 16
3465 ; PC64LE9-NEXT: .cfi_offset v31, -16
3466 ; PC64LE9-NEXT: addis 3, 2, .LCPI54_0@toc@ha
3467 ; PC64LE9-NEXT: lfd 1, .LCPI54_0@toc@l(3)
3468 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3469 ; PC64LE9-NEXT: bl exp
3471 ; PC64LE9-NEXT: addis 3, 2, .LCPI54_1@toc@ha
3472 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3473 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3474 ; PC64LE9-NEXT: lfd 1, .LCPI54_1@toc@l(3)
3475 ; PC64LE9-NEXT: bl exp
3477 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3478 ; PC64LE9-NEXT: addis 3, 2, .LCPI54_2@toc@ha
3479 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3480 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
3481 ; PC64LE9-NEXT: lfd 1, .LCPI54_2@toc@l(3)
3482 ; PC64LE9-NEXT: bl exp
3484 ; PC64LE9-NEXT: addis 3, 2, .LCPI54_3@toc@ha
3485 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3486 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3487 ; PC64LE9-NEXT: lfs 1, .LCPI54_3@toc@l(3)
3488 ; PC64LE9-NEXT: bl exp
3490 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3491 ; PC64LE9-NEXT: vmr 3, 31
3492 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3493 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3494 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
3495 ; PC64LE9-NEXT: addi 1, 1, 64
3496 ; PC64LE9-NEXT: ld 0, 16(1)
3497 ; PC64LE9-NEXT: mtlr 0
3500 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64(
3501 <4 x double> <double 42.0, double 42.1,
3502 double 42.2, double 42.3>,
3503 metadata !"round.dynamic",
3504 metadata !"fpexcept.strict")
3505 ret <4 x double> %exp
3508 define <1 x float> @constrained_vector_exp2_v1f32() {
3509 ; PC64LE-LABEL: constrained_vector_exp2_v1f32:
3510 ; PC64LE: # %bb.0: # %entry
3511 ; PC64LE-NEXT: mflr 0
3512 ; PC64LE-NEXT: std 0, 16(1)
3513 ; PC64LE-NEXT: stdu 1, -32(1)
3514 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
3515 ; PC64LE-NEXT: .cfi_offset lr, 16
3516 ; PC64LE-NEXT: addis 3, 2, .LCPI55_0@toc@ha
3517 ; PC64LE-NEXT: lfs 1, .LCPI55_0@toc@l(3)
3518 ; PC64LE-NEXT: bl exp2f
3520 ; PC64LE-NEXT: xscvdpspn 0, 1
3521 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
3522 ; PC64LE-NEXT: addi 1, 1, 32
3523 ; PC64LE-NEXT: ld 0, 16(1)
3524 ; PC64LE-NEXT: mtlr 0
3527 ; PC64LE9-LABEL: constrained_vector_exp2_v1f32:
3528 ; PC64LE9: # %bb.0: # %entry
3529 ; PC64LE9-NEXT: mflr 0
3530 ; PC64LE9-NEXT: std 0, 16(1)
3531 ; PC64LE9-NEXT: stdu 1, -32(1)
3532 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
3533 ; PC64LE9-NEXT: .cfi_offset lr, 16
3534 ; PC64LE9-NEXT: addis 3, 2, .LCPI55_0@toc@ha
3535 ; PC64LE9-NEXT: lfs 1, .LCPI55_0@toc@l(3)
3536 ; PC64LE9-NEXT: bl exp2f
3538 ; PC64LE9-NEXT: xscvdpspn 0, 1
3539 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
3540 ; PC64LE9-NEXT: addi 1, 1, 32
3541 ; PC64LE9-NEXT: ld 0, 16(1)
3542 ; PC64LE9-NEXT: mtlr 0
3545 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
3546 <1 x float> <float 42.0>,
3547 metadata !"round.dynamic",
3548 metadata !"fpexcept.strict")
3549 ret <1 x float> %exp2
3552 define <2 x double> @constrained_vector_exp2_v2f64() {
3553 ; PC64LE-LABEL: constrained_vector_exp2_v2f64:
3554 ; PC64LE: # %bb.0: # %entry
3555 ; PC64LE-NEXT: mflr 0
3556 ; PC64LE-NEXT: std 0, 16(1)
3557 ; PC64LE-NEXT: stdu 1, -64(1)
3558 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
3559 ; PC64LE-NEXT: .cfi_offset lr, 16
3560 ; PC64LE-NEXT: addis 3, 2, .LCPI56_0@toc@ha
3561 ; PC64LE-NEXT: lfd 1, .LCPI56_0@toc@l(3)
3562 ; PC64LE-NEXT: bl exp2
3564 ; PC64LE-NEXT: li 3, 48
3565 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3566 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3567 ; PC64LE-NEXT: addis 3, 2, .LCPI56_1@toc@ha
3568 ; PC64LE-NEXT: lfs 1, .LCPI56_1@toc@l(3)
3569 ; PC64LE-NEXT: bl exp2
3571 ; PC64LE-NEXT: li 3, 48
3572 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3573 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3574 ; PC64LE-NEXT: xxmrghd 34, 1, 0
3575 ; PC64LE-NEXT: addi 1, 1, 64
3576 ; PC64LE-NEXT: ld 0, 16(1)
3577 ; PC64LE-NEXT: mtlr 0
3580 ; PC64LE9-LABEL: constrained_vector_exp2_v2f64:
3581 ; PC64LE9: # %bb.0: # %entry
3582 ; PC64LE9-NEXT: mflr 0
3583 ; PC64LE9-NEXT: std 0, 16(1)
3584 ; PC64LE9-NEXT: stdu 1, -48(1)
3585 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
3586 ; PC64LE9-NEXT: .cfi_offset lr, 16
3587 ; PC64LE9-NEXT: addis 3, 2, .LCPI56_0@toc@ha
3588 ; PC64LE9-NEXT: lfd 1, .LCPI56_0@toc@l(3)
3589 ; PC64LE9-NEXT: bl exp2
3591 ; PC64LE9-NEXT: addis 3, 2, .LCPI56_1@toc@ha
3592 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3593 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3594 ; PC64LE9-NEXT: lfs 1, .LCPI56_1@toc@l(3)
3595 ; PC64LE9-NEXT: bl exp2
3597 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3598 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3599 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
3600 ; PC64LE9-NEXT: addi 1, 1, 48
3601 ; PC64LE9-NEXT: ld 0, 16(1)
3602 ; PC64LE9-NEXT: mtlr 0
3605 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
3606 <2 x double> <double 42.1, double 42.0>,
3607 metadata !"round.dynamic",
3608 metadata !"fpexcept.strict")
3609 ret <2 x double> %exp2
3612 define <3 x float> @constrained_vector_exp2_v3f32() {
3613 ; PC64LE-LABEL: constrained_vector_exp2_v3f32:
3614 ; PC64LE: # %bb.0: # %entry
3615 ; PC64LE-NEXT: mflr 0
3616 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
3617 ; PC64LE-NEXT: .cfi_offset lr, 16
3618 ; PC64LE-NEXT: .cfi_offset f30, -16
3619 ; PC64LE-NEXT: .cfi_offset f31, -8
3620 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
3621 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
3622 ; PC64LE-NEXT: std 0, 16(1)
3623 ; PC64LE-NEXT: stdu 1, -48(1)
3624 ; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3625 ; PC64LE-NEXT: lfs 1, .LCPI57_0@toc@l(3)
3626 ; PC64LE-NEXT: bl exp2f
3628 ; PC64LE-NEXT: addis 3, 2, .LCPI57_1@toc@ha
3629 ; PC64LE-NEXT: fmr 31, 1
3630 ; PC64LE-NEXT: lfs 1, .LCPI57_1@toc@l(3)
3631 ; PC64LE-NEXT: bl exp2f
3633 ; PC64LE-NEXT: addis 3, 2, .LCPI57_2@toc@ha
3634 ; PC64LE-NEXT: fmr 30, 1
3635 ; PC64LE-NEXT: lfs 1, .LCPI57_2@toc@l(3)
3636 ; PC64LE-NEXT: bl exp2f
3638 ; PC64LE-NEXT: xscvdpspn 0, 30
3639 ; PC64LE-NEXT: addis 3, 2, .LCPI57_3@toc@ha
3640 ; PC64LE-NEXT: xscvdpspn 1, 1
3641 ; PC64LE-NEXT: addi 3, 3, .LCPI57_3@toc@l
3642 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
3643 ; PC64LE-NEXT: xscvdpspn 0, 31
3644 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
3645 ; PC64LE-NEXT: vmrglw 2, 2, 3
3646 ; PC64LE-NEXT: lvx 3, 0, 3
3647 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
3648 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3649 ; PC64LE-NEXT: addi 1, 1, 48
3650 ; PC64LE-NEXT: ld 0, 16(1)
3651 ; PC64LE-NEXT: mtlr 0
3652 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
3653 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
3656 ; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
3657 ; PC64LE9: # %bb.0: # %entry
3658 ; PC64LE9-NEXT: mflr 0
3659 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
3660 ; PC64LE9-NEXT: .cfi_offset lr, 16
3661 ; PC64LE9-NEXT: .cfi_offset f30, -16
3662 ; PC64LE9-NEXT: .cfi_offset f31, -8
3663 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
3664 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
3665 ; PC64LE9-NEXT: std 0, 16(1)
3666 ; PC64LE9-NEXT: stdu 1, -48(1)
3667 ; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3668 ; PC64LE9-NEXT: lfs 1, .LCPI57_0@toc@l(3)
3669 ; PC64LE9-NEXT: bl exp2f
3671 ; PC64LE9-NEXT: addis 3, 2, .LCPI57_1@toc@ha
3672 ; PC64LE9-NEXT: fmr 31, 1
3673 ; PC64LE9-NEXT: lfs 1, .LCPI57_1@toc@l(3)
3674 ; PC64LE9-NEXT: bl exp2f
3676 ; PC64LE9-NEXT: addis 3, 2, .LCPI57_2@toc@ha
3677 ; PC64LE9-NEXT: fmr 30, 1
3678 ; PC64LE9-NEXT: lfs 1, .LCPI57_2@toc@l(3)
3679 ; PC64LE9-NEXT: bl exp2f
3681 ; PC64LE9-NEXT: xscvdpspn 0, 1
3682 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
3683 ; PC64LE9-NEXT: xscvdpspn 0, 30
3684 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
3685 ; PC64LE9-NEXT: xscvdpspn 0, 31
3686 ; PC64LE9-NEXT: addis 3, 2, .LCPI57_3@toc@ha
3687 ; PC64LE9-NEXT: addi 3, 3, .LCPI57_3@toc@l
3688 ; PC64LE9-NEXT: vmrglw 2, 3, 2
3689 ; PC64LE9-NEXT: lxvx 35, 0, 3
3690 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
3691 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
3692 ; PC64LE9-NEXT: addi 1, 1, 48
3693 ; PC64LE9-NEXT: ld 0, 16(1)
3694 ; PC64LE9-NEXT: mtlr 0
3695 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
3696 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
3699 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
3700 <3 x float> <float 42.0, float 43.0, float 44.0>,
3701 metadata !"round.dynamic",
3702 metadata !"fpexcept.strict")
3703 ret <3 x float> %exp2
3706 define <3 x double> @constrained_vector_exp2_v3f64() {
3707 ; PC64LE-LABEL: constrained_vector_exp2_v3f64:
3708 ; PC64LE: # %bb.0: # %entry
3709 ; PC64LE-NEXT: mflr 0
3710 ; PC64LE-NEXT: std 0, 16(1)
3711 ; PC64LE-NEXT: stdu 1, -80(1)
3712 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
3713 ; PC64LE-NEXT: .cfi_offset lr, 16
3714 ; PC64LE-NEXT: .cfi_offset v31, -16
3715 ; PC64LE-NEXT: li 3, 64
3716 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3717 ; PC64LE-NEXT: addis 3, 2, .LCPI58_0@toc@ha
3718 ; PC64LE-NEXT: lfd 1, .LCPI58_0@toc@l(3)
3719 ; PC64LE-NEXT: bl exp2
3721 ; PC64LE-NEXT: li 3, 48
3722 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3723 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3724 ; PC64LE-NEXT: addis 3, 2, .LCPI58_1@toc@ha
3725 ; PC64LE-NEXT: lfs 1, .LCPI58_1@toc@l(3)
3726 ; PC64LE-NEXT: bl exp2
3728 ; PC64LE-NEXT: li 3, 48
3729 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3730 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3731 ; PC64LE-NEXT: addis 3, 2, .LCPI58_2@toc@ha
3732 ; PC64LE-NEXT: xxmrghd 63, 0, 1
3733 ; PC64LE-NEXT: lfd 1, .LCPI58_2@toc@l(3)
3734 ; PC64LE-NEXT: bl exp2
3736 ; PC64LE-NEXT: li 3, 64
3737 ; PC64LE-NEXT: fmr 3, 1
3738 ; PC64LE-NEXT: xxlor 1, 63, 63
3739 ; PC64LE-NEXT: xxlor 2, 63, 63
3740 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3741 ; PC64LE-NEXT: addi 1, 1, 80
3742 ; PC64LE-NEXT: ld 0, 16(1)
3743 ; PC64LE-NEXT: mtlr 0
3746 ; PC64LE9-LABEL: constrained_vector_exp2_v3f64:
3747 ; PC64LE9: # %bb.0: # %entry
3748 ; PC64LE9-NEXT: mflr 0
3749 ; PC64LE9-NEXT: std 0, 16(1)
3750 ; PC64LE9-NEXT: stdu 1, -64(1)
3751 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
3752 ; PC64LE9-NEXT: .cfi_offset lr, 16
3753 ; PC64LE9-NEXT: .cfi_offset v31, -16
3754 ; PC64LE9-NEXT: addis 3, 2, .LCPI58_0@toc@ha
3755 ; PC64LE9-NEXT: lfd 1, .LCPI58_0@toc@l(3)
3756 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3757 ; PC64LE9-NEXT: bl exp2
3759 ; PC64LE9-NEXT: addis 3, 2, .LCPI58_1@toc@ha
3760 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3761 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3762 ; PC64LE9-NEXT: lfs 1, .LCPI58_1@toc@l(3)
3763 ; PC64LE9-NEXT: bl exp2
3765 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3766 ; PC64LE9-NEXT: addis 3, 2, .LCPI58_2@toc@ha
3767 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3768 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
3769 ; PC64LE9-NEXT: lfd 1, .LCPI58_2@toc@l(3)
3770 ; PC64LE9-NEXT: bl exp2
3772 ; PC64LE9-NEXT: fmr 3, 1
3773 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3774 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3775 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3776 ; PC64LE9-NEXT: addi 1, 1, 64
3777 ; PC64LE9-NEXT: ld 0, 16(1)
3778 ; PC64LE9-NEXT: mtlr 0
3781 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
3782 <3 x double> <double 42.0, double 42.1, double 42.2>,
3783 metadata !"round.dynamic",
3784 metadata !"fpexcept.strict")
3785 ret <3 x double> %exp2
3788 define <4 x double> @constrained_vector_exp2_v4f64() {
3789 ; PC64LE-LABEL: constrained_vector_exp2_v4f64:
3790 ; PC64LE: # %bb.0: # %entry
3791 ; PC64LE-NEXT: mflr 0
3792 ; PC64LE-NEXT: std 0, 16(1)
3793 ; PC64LE-NEXT: stdu 1, -80(1)
3794 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
3795 ; PC64LE-NEXT: .cfi_offset lr, 16
3796 ; PC64LE-NEXT: .cfi_offset v31, -16
3797 ; PC64LE-NEXT: li 3, 64
3798 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3799 ; PC64LE-NEXT: addis 3, 2, .LCPI59_0@toc@ha
3800 ; PC64LE-NEXT: lfd 1, .LCPI59_0@toc@l(3)
3801 ; PC64LE-NEXT: bl exp2
3803 ; PC64LE-NEXT: li 3, 48
3804 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3805 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3806 ; PC64LE-NEXT: addis 3, 2, .LCPI59_1@toc@ha
3807 ; PC64LE-NEXT: lfd 1, .LCPI59_1@toc@l(3)
3808 ; PC64LE-NEXT: bl exp2
3810 ; PC64LE-NEXT: li 3, 48
3811 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3812 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3813 ; PC64LE-NEXT: addis 3, 2, .LCPI59_2@toc@ha
3814 ; PC64LE-NEXT: xxmrghd 63, 1, 0
3815 ; PC64LE-NEXT: lfd 1, .LCPI59_2@toc@l(3)
3816 ; PC64LE-NEXT: bl exp2
3818 ; PC64LE-NEXT: li 3, 48
3819 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3820 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3821 ; PC64LE-NEXT: addis 3, 2, .LCPI59_3@toc@ha
3822 ; PC64LE-NEXT: lfd 1, .LCPI59_3@toc@l(3)
3823 ; PC64LE-NEXT: bl exp2
3825 ; PC64LE-NEXT: li 3, 48
3826 ; PC64LE-NEXT: vmr 2, 31
3827 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3828 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3829 ; PC64LE-NEXT: li 3, 64
3830 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3831 ; PC64LE-NEXT: xxmrghd 35, 1, 0
3832 ; PC64LE-NEXT: addi 1, 1, 80
3833 ; PC64LE-NEXT: ld 0, 16(1)
3834 ; PC64LE-NEXT: mtlr 0
3837 ; PC64LE9-LABEL: constrained_vector_exp2_v4f64:
3838 ; PC64LE9: # %bb.0: # %entry
3839 ; PC64LE9-NEXT: mflr 0
3840 ; PC64LE9-NEXT: std 0, 16(1)
3841 ; PC64LE9-NEXT: stdu 1, -64(1)
3842 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
3843 ; PC64LE9-NEXT: .cfi_offset lr, 16
3844 ; PC64LE9-NEXT: .cfi_offset v31, -16
3845 ; PC64LE9-NEXT: addis 3, 2, .LCPI59_0@toc@ha
3846 ; PC64LE9-NEXT: lfd 1, .LCPI59_0@toc@l(3)
3847 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3848 ; PC64LE9-NEXT: bl exp2
3850 ; PC64LE9-NEXT: addis 3, 2, .LCPI59_1@toc@ha
3851 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3852 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3853 ; PC64LE9-NEXT: lfd 1, .LCPI59_1@toc@l(3)
3854 ; PC64LE9-NEXT: bl exp2
3856 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3857 ; PC64LE9-NEXT: addis 3, 2, .LCPI59_2@toc@ha
3858 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3859 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
3860 ; PC64LE9-NEXT: lfd 1, .LCPI59_2@toc@l(3)
3861 ; PC64LE9-NEXT: bl exp2
3863 ; PC64LE9-NEXT: addis 3, 2, .LCPI59_3@toc@ha
3864 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3865 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3866 ; PC64LE9-NEXT: lfd 1, .LCPI59_3@toc@l(3)
3867 ; PC64LE9-NEXT: bl exp2
3869 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3870 ; PC64LE9-NEXT: vmr 2, 31
3871 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3872 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3873 ; PC64LE9-NEXT: xxmrghd 35, 1, 0
3874 ; PC64LE9-NEXT: addi 1, 1, 64
3875 ; PC64LE9-NEXT: ld 0, 16(1)
3876 ; PC64LE9-NEXT: mtlr 0
3879 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64(
3880 <4 x double> <double 42.1, double 42.2,
3881 double 42.3, double 42.4>,
3882 metadata !"round.dynamic",
3883 metadata !"fpexcept.strict")
3884 ret <4 x double> %exp2
3887 define <1 x float> @constrained_vector_log_v1f32() {
3888 ; PC64LE-LABEL: constrained_vector_log_v1f32:
3889 ; PC64LE: # %bb.0: # %entry
3890 ; PC64LE-NEXT: mflr 0
3891 ; PC64LE-NEXT: std 0, 16(1)
3892 ; PC64LE-NEXT: stdu 1, -32(1)
3893 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
3894 ; PC64LE-NEXT: .cfi_offset lr, 16
3895 ; PC64LE-NEXT: addis 3, 2, .LCPI60_0@toc@ha
3896 ; PC64LE-NEXT: lfs 1, .LCPI60_0@toc@l(3)
3897 ; PC64LE-NEXT: bl logf
3899 ; PC64LE-NEXT: xscvdpspn 0, 1
3900 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
3901 ; PC64LE-NEXT: addi 1, 1, 32
3902 ; PC64LE-NEXT: ld 0, 16(1)
3903 ; PC64LE-NEXT: mtlr 0
3906 ; PC64LE9-LABEL: constrained_vector_log_v1f32:
3907 ; PC64LE9: # %bb.0: # %entry
3908 ; PC64LE9-NEXT: mflr 0
3909 ; PC64LE9-NEXT: std 0, 16(1)
3910 ; PC64LE9-NEXT: stdu 1, -32(1)
3911 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
3912 ; PC64LE9-NEXT: .cfi_offset lr, 16
3913 ; PC64LE9-NEXT: addis 3, 2, .LCPI60_0@toc@ha
3914 ; PC64LE9-NEXT: lfs 1, .LCPI60_0@toc@l(3)
3915 ; PC64LE9-NEXT: bl logf
3917 ; PC64LE9-NEXT: xscvdpspn 0, 1
3918 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
3919 ; PC64LE9-NEXT: addi 1, 1, 32
3920 ; PC64LE9-NEXT: ld 0, 16(1)
3921 ; PC64LE9-NEXT: mtlr 0
3924 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
3925 <1 x float> <float 42.0>,
3926 metadata !"round.dynamic",
3927 metadata !"fpexcept.strict")
3928 ret <1 x float> %log
3931 define <2 x double> @constrained_vector_log_v2f64() {
3932 ; PC64LE-LABEL: constrained_vector_log_v2f64:
3933 ; PC64LE: # %bb.0: # %entry
3934 ; PC64LE-NEXT: mflr 0
3935 ; PC64LE-NEXT: std 0, 16(1)
3936 ; PC64LE-NEXT: stdu 1, -64(1)
3937 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
3938 ; PC64LE-NEXT: .cfi_offset lr, 16
3939 ; PC64LE-NEXT: addis 3, 2, .LCPI61_0@toc@ha
3940 ; PC64LE-NEXT: lfd 1, .LCPI61_0@toc@l(3)
3941 ; PC64LE-NEXT: bl log
3943 ; PC64LE-NEXT: li 3, 48
3944 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3945 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
3946 ; PC64LE-NEXT: addis 3, 2, .LCPI61_1@toc@ha
3947 ; PC64LE-NEXT: lfs 1, .LCPI61_1@toc@l(3)
3948 ; PC64LE-NEXT: bl log
3950 ; PC64LE-NEXT: li 3, 48
3951 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3952 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
3953 ; PC64LE-NEXT: xxmrghd 34, 0, 1
3954 ; PC64LE-NEXT: addi 1, 1, 64
3955 ; PC64LE-NEXT: ld 0, 16(1)
3956 ; PC64LE-NEXT: mtlr 0
3959 ; PC64LE9-LABEL: constrained_vector_log_v2f64:
3960 ; PC64LE9: # %bb.0: # %entry
3961 ; PC64LE9-NEXT: mflr 0
3962 ; PC64LE9-NEXT: std 0, 16(1)
3963 ; PC64LE9-NEXT: stdu 1, -48(1)
3964 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
3965 ; PC64LE9-NEXT: .cfi_offset lr, 16
3966 ; PC64LE9-NEXT: addis 3, 2, .LCPI61_0@toc@ha
3967 ; PC64LE9-NEXT: lfd 1, .LCPI61_0@toc@l(3)
3968 ; PC64LE9-NEXT: bl log
3970 ; PC64LE9-NEXT: addis 3, 2, .LCPI61_1@toc@ha
3971 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3972 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
3973 ; PC64LE9-NEXT: lfs 1, .LCPI61_1@toc@l(3)
3974 ; PC64LE9-NEXT: bl log
3976 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
3977 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3978 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
3979 ; PC64LE9-NEXT: addi 1, 1, 48
3980 ; PC64LE9-NEXT: ld 0, 16(1)
3981 ; PC64LE9-NEXT: mtlr 0
3984 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
3985 <2 x double> <double 42.0, double 42.1>,
3986 metadata !"round.dynamic",
3987 metadata !"fpexcept.strict")
3988 ret <2 x double> %log
3991 define <3 x float> @constrained_vector_log_v3f32() {
3992 ; PC64LE-LABEL: constrained_vector_log_v3f32:
3993 ; PC64LE: # %bb.0: # %entry
3994 ; PC64LE-NEXT: mflr 0
3995 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
3996 ; PC64LE-NEXT: .cfi_offset lr, 16
3997 ; PC64LE-NEXT: .cfi_offset f30, -16
3998 ; PC64LE-NEXT: .cfi_offset f31, -8
3999 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
4000 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
4001 ; PC64LE-NEXT: std 0, 16(1)
4002 ; PC64LE-NEXT: stdu 1, -48(1)
4003 ; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha
4004 ; PC64LE-NEXT: lfs 1, .LCPI62_0@toc@l(3)
4005 ; PC64LE-NEXT: bl logf
4007 ; PC64LE-NEXT: addis 3, 2, .LCPI62_1@toc@ha
4008 ; PC64LE-NEXT: fmr 31, 1
4009 ; PC64LE-NEXT: lfs 1, .LCPI62_1@toc@l(3)
4010 ; PC64LE-NEXT: bl logf
4012 ; PC64LE-NEXT: addis 3, 2, .LCPI62_2@toc@ha
4013 ; PC64LE-NEXT: fmr 30, 1
4014 ; PC64LE-NEXT: lfs 1, .LCPI62_2@toc@l(3)
4015 ; PC64LE-NEXT: bl logf
4017 ; PC64LE-NEXT: xscvdpspn 0, 30
4018 ; PC64LE-NEXT: addis 3, 2, .LCPI62_3@toc@ha
4019 ; PC64LE-NEXT: xscvdpspn 1, 1
4020 ; PC64LE-NEXT: addi 3, 3, .LCPI62_3@toc@l
4021 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
4022 ; PC64LE-NEXT: xscvdpspn 0, 31
4023 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
4024 ; PC64LE-NEXT: vmrglw 2, 2, 3
4025 ; PC64LE-NEXT: lvx 3, 0, 3
4026 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
4027 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4028 ; PC64LE-NEXT: addi 1, 1, 48
4029 ; PC64LE-NEXT: ld 0, 16(1)
4030 ; PC64LE-NEXT: mtlr 0
4031 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
4032 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
4035 ; PC64LE9-LABEL: constrained_vector_log_v3f32:
4036 ; PC64LE9: # %bb.0: # %entry
4037 ; PC64LE9-NEXT: mflr 0
4038 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
4039 ; PC64LE9-NEXT: .cfi_offset lr, 16
4040 ; PC64LE9-NEXT: .cfi_offset f30, -16
4041 ; PC64LE9-NEXT: .cfi_offset f31, -8
4042 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
4043 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
4044 ; PC64LE9-NEXT: std 0, 16(1)
4045 ; PC64LE9-NEXT: stdu 1, -48(1)
4046 ; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha
4047 ; PC64LE9-NEXT: lfs 1, .LCPI62_0@toc@l(3)
4048 ; PC64LE9-NEXT: bl logf
4050 ; PC64LE9-NEXT: addis 3, 2, .LCPI62_1@toc@ha
4051 ; PC64LE9-NEXT: fmr 31, 1
4052 ; PC64LE9-NEXT: lfs 1, .LCPI62_1@toc@l(3)
4053 ; PC64LE9-NEXT: bl logf
4055 ; PC64LE9-NEXT: addis 3, 2, .LCPI62_2@toc@ha
4056 ; PC64LE9-NEXT: fmr 30, 1
4057 ; PC64LE9-NEXT: lfs 1, .LCPI62_2@toc@l(3)
4058 ; PC64LE9-NEXT: bl logf
4060 ; PC64LE9-NEXT: xscvdpspn 0, 1
4061 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
4062 ; PC64LE9-NEXT: xscvdpspn 0, 30
4063 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
4064 ; PC64LE9-NEXT: xscvdpspn 0, 31
4065 ; PC64LE9-NEXT: addis 3, 2, .LCPI62_3@toc@ha
4066 ; PC64LE9-NEXT: addi 3, 3, .LCPI62_3@toc@l
4067 ; PC64LE9-NEXT: vmrglw 2, 3, 2
4068 ; PC64LE9-NEXT: lxvx 35, 0, 3
4069 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
4070 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
4071 ; PC64LE9-NEXT: addi 1, 1, 48
4072 ; PC64LE9-NEXT: ld 0, 16(1)
4073 ; PC64LE9-NEXT: mtlr 0
4074 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
4075 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
4078 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
4079 <3 x float> <float 42.0, float 43.0, float 44.0>,
4080 metadata !"round.dynamic",
4081 metadata !"fpexcept.strict")
4082 ret <3 x float> %log
4085 define <3 x double> @constrained_vector_log_v3f64() {
4086 ; PC64LE-LABEL: constrained_vector_log_v3f64:
4087 ; PC64LE: # %bb.0: # %entry
4088 ; PC64LE-NEXT: mflr 0
4089 ; PC64LE-NEXT: std 0, 16(1)
4090 ; PC64LE-NEXT: stdu 1, -80(1)
4091 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
4092 ; PC64LE-NEXT: .cfi_offset lr, 16
4093 ; PC64LE-NEXT: .cfi_offset v31, -16
4094 ; PC64LE-NEXT: li 3, 64
4095 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4096 ; PC64LE-NEXT: addis 3, 2, .LCPI63_0@toc@ha
4097 ; PC64LE-NEXT: lfd 1, .LCPI63_0@toc@l(3)
4098 ; PC64LE-NEXT: bl log
4100 ; PC64LE-NEXT: li 3, 48
4101 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4102 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4103 ; PC64LE-NEXT: addis 3, 2, .LCPI63_1@toc@ha
4104 ; PC64LE-NEXT: lfs 1, .LCPI63_1@toc@l(3)
4105 ; PC64LE-NEXT: bl log
4107 ; PC64LE-NEXT: li 3, 48
4108 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4109 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4110 ; PC64LE-NEXT: addis 3, 2, .LCPI63_2@toc@ha
4111 ; PC64LE-NEXT: xxmrghd 63, 0, 1
4112 ; PC64LE-NEXT: lfd 1, .LCPI63_2@toc@l(3)
4113 ; PC64LE-NEXT: bl log
4115 ; PC64LE-NEXT: li 3, 64
4116 ; PC64LE-NEXT: fmr 3, 1
4117 ; PC64LE-NEXT: xxlor 1, 63, 63
4118 ; PC64LE-NEXT: xxlor 2, 63, 63
4119 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4120 ; PC64LE-NEXT: addi 1, 1, 80
4121 ; PC64LE-NEXT: ld 0, 16(1)
4122 ; PC64LE-NEXT: mtlr 0
4125 ; PC64LE9-LABEL: constrained_vector_log_v3f64:
4126 ; PC64LE9: # %bb.0: # %entry
4127 ; PC64LE9-NEXT: mflr 0
4128 ; PC64LE9-NEXT: std 0, 16(1)
4129 ; PC64LE9-NEXT: stdu 1, -64(1)
4130 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
4131 ; PC64LE9-NEXT: .cfi_offset lr, 16
4132 ; PC64LE9-NEXT: .cfi_offset v31, -16
4133 ; PC64LE9-NEXT: addis 3, 2, .LCPI63_0@toc@ha
4134 ; PC64LE9-NEXT: lfd 1, .LCPI63_0@toc@l(3)
4135 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4136 ; PC64LE9-NEXT: bl log
4138 ; PC64LE9-NEXT: addis 3, 2, .LCPI63_1@toc@ha
4139 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4140 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4141 ; PC64LE9-NEXT: lfs 1, .LCPI63_1@toc@l(3)
4142 ; PC64LE9-NEXT: bl log
4144 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4145 ; PC64LE9-NEXT: addis 3, 2, .LCPI63_2@toc@ha
4146 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4147 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
4148 ; PC64LE9-NEXT: lfd 1, .LCPI63_2@toc@l(3)
4149 ; PC64LE9-NEXT: bl log
4151 ; PC64LE9-NEXT: fmr 3, 1
4152 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4153 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4154 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4155 ; PC64LE9-NEXT: addi 1, 1, 64
4156 ; PC64LE9-NEXT: ld 0, 16(1)
4157 ; PC64LE9-NEXT: mtlr 0
4160 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
4161 <3 x double> <double 42.0, double 42.1, double 42.2>,
4162 metadata !"round.dynamic",
4163 metadata !"fpexcept.strict")
4164 ret <3 x double> %log
4167 define <4 x double> @constrained_vector_log_v4f64() {
4168 ; PC64LE-LABEL: constrained_vector_log_v4f64:
4169 ; PC64LE: # %bb.0: # %entry
4170 ; PC64LE-NEXT: mflr 0
4171 ; PC64LE-NEXT: std 0, 16(1)
4172 ; PC64LE-NEXT: stdu 1, -80(1)
4173 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
4174 ; PC64LE-NEXT: .cfi_offset lr, 16
4175 ; PC64LE-NEXT: .cfi_offset v31, -16
4176 ; PC64LE-NEXT: li 3, 64
4177 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4178 ; PC64LE-NEXT: addis 3, 2, .LCPI64_0@toc@ha
4179 ; PC64LE-NEXT: lfd 1, .LCPI64_0@toc@l(3)
4180 ; PC64LE-NEXT: bl log
4182 ; PC64LE-NEXT: li 3, 48
4183 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4184 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4185 ; PC64LE-NEXT: addis 3, 2, .LCPI64_1@toc@ha
4186 ; PC64LE-NEXT: lfd 1, .LCPI64_1@toc@l(3)
4187 ; PC64LE-NEXT: bl log
4189 ; PC64LE-NEXT: li 3, 48
4190 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4191 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4192 ; PC64LE-NEXT: addis 3, 2, .LCPI64_2@toc@ha
4193 ; PC64LE-NEXT: xxmrghd 63, 1, 0
4194 ; PC64LE-NEXT: lfd 1, .LCPI64_2@toc@l(3)
4195 ; PC64LE-NEXT: bl log
4197 ; PC64LE-NEXT: li 3, 48
4198 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4199 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4200 ; PC64LE-NEXT: addis 3, 2, .LCPI64_3@toc@ha
4201 ; PC64LE-NEXT: lfs 1, .LCPI64_3@toc@l(3)
4202 ; PC64LE-NEXT: bl log
4204 ; PC64LE-NEXT: li 3, 48
4205 ; PC64LE-NEXT: vmr 3, 31
4206 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4207 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4208 ; PC64LE-NEXT: li 3, 64
4209 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4210 ; PC64LE-NEXT: xxmrghd 34, 0, 1
4211 ; PC64LE-NEXT: addi 1, 1, 80
4212 ; PC64LE-NEXT: ld 0, 16(1)
4213 ; PC64LE-NEXT: mtlr 0
4216 ; PC64LE9-LABEL: constrained_vector_log_v4f64:
4217 ; PC64LE9: # %bb.0: # %entry
4218 ; PC64LE9-NEXT: mflr 0
4219 ; PC64LE9-NEXT: std 0, 16(1)
4220 ; PC64LE9-NEXT: stdu 1, -64(1)
4221 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
4222 ; PC64LE9-NEXT: .cfi_offset lr, 16
4223 ; PC64LE9-NEXT: .cfi_offset v31, -16
4224 ; PC64LE9-NEXT: addis 3, 2, .LCPI64_0@toc@ha
4225 ; PC64LE9-NEXT: lfd 1, .LCPI64_0@toc@l(3)
4226 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4227 ; PC64LE9-NEXT: bl log
4229 ; PC64LE9-NEXT: addis 3, 2, .LCPI64_1@toc@ha
4230 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4231 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4232 ; PC64LE9-NEXT: lfd 1, .LCPI64_1@toc@l(3)
4233 ; PC64LE9-NEXT: bl log
4235 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4236 ; PC64LE9-NEXT: addis 3, 2, .LCPI64_2@toc@ha
4237 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4238 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
4239 ; PC64LE9-NEXT: lfd 1, .LCPI64_2@toc@l(3)
4240 ; PC64LE9-NEXT: bl log
4242 ; PC64LE9-NEXT: addis 3, 2, .LCPI64_3@toc@ha
4243 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4244 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4245 ; PC64LE9-NEXT: lfs 1, .LCPI64_3@toc@l(3)
4246 ; PC64LE9-NEXT: bl log
4248 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4249 ; PC64LE9-NEXT: vmr 3, 31
4250 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4251 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4252 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
4253 ; PC64LE9-NEXT: addi 1, 1, 64
4254 ; PC64LE9-NEXT: ld 0, 16(1)
4255 ; PC64LE9-NEXT: mtlr 0
4258 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64(
4259 <4 x double> <double 42.0, double 42.1,
4260 double 42.2, double 42.3>,
4261 metadata !"round.dynamic",
4262 metadata !"fpexcept.strict")
4263 ret <4 x double> %log
4266 define <1 x float> @constrained_vector_log10_v1f32() {
4267 ; PC64LE-LABEL: constrained_vector_log10_v1f32:
4268 ; PC64LE: # %bb.0: # %entry
4269 ; PC64LE-NEXT: mflr 0
4270 ; PC64LE-NEXT: std 0, 16(1)
4271 ; PC64LE-NEXT: stdu 1, -32(1)
4272 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
4273 ; PC64LE-NEXT: .cfi_offset lr, 16
4274 ; PC64LE-NEXT: addis 3, 2, .LCPI65_0@toc@ha
4275 ; PC64LE-NEXT: lfs 1, .LCPI65_0@toc@l(3)
4276 ; PC64LE-NEXT: bl log10f
4278 ; PC64LE-NEXT: xscvdpspn 0, 1
4279 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
4280 ; PC64LE-NEXT: addi 1, 1, 32
4281 ; PC64LE-NEXT: ld 0, 16(1)
4282 ; PC64LE-NEXT: mtlr 0
4285 ; PC64LE9-LABEL: constrained_vector_log10_v1f32:
4286 ; PC64LE9: # %bb.0: # %entry
4287 ; PC64LE9-NEXT: mflr 0
4288 ; PC64LE9-NEXT: std 0, 16(1)
4289 ; PC64LE9-NEXT: stdu 1, -32(1)
4290 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
4291 ; PC64LE9-NEXT: .cfi_offset lr, 16
4292 ; PC64LE9-NEXT: addis 3, 2, .LCPI65_0@toc@ha
4293 ; PC64LE9-NEXT: lfs 1, .LCPI65_0@toc@l(3)
4294 ; PC64LE9-NEXT: bl log10f
4296 ; PC64LE9-NEXT: xscvdpspn 0, 1
4297 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
4298 ; PC64LE9-NEXT: addi 1, 1, 32
4299 ; PC64LE9-NEXT: ld 0, 16(1)
4300 ; PC64LE9-NEXT: mtlr 0
4303 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
4304 <1 x float> <float 42.0>,
4305 metadata !"round.dynamic",
4306 metadata !"fpexcept.strict")
4307 ret <1 x float> %log10
4310 define <2 x double> @constrained_vector_log10_v2f64() {
4311 ; PC64LE-LABEL: constrained_vector_log10_v2f64:
4312 ; PC64LE: # %bb.0: # %entry
4313 ; PC64LE-NEXT: mflr 0
4314 ; PC64LE-NEXT: std 0, 16(1)
4315 ; PC64LE-NEXT: stdu 1, -64(1)
4316 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
4317 ; PC64LE-NEXT: .cfi_offset lr, 16
4318 ; PC64LE-NEXT: addis 3, 2, .LCPI66_0@toc@ha
4319 ; PC64LE-NEXT: lfd 1, .LCPI66_0@toc@l(3)
4320 ; PC64LE-NEXT: bl log10
4322 ; PC64LE-NEXT: li 3, 48
4323 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4324 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4325 ; PC64LE-NEXT: addis 3, 2, .LCPI66_1@toc@ha
4326 ; PC64LE-NEXT: lfs 1, .LCPI66_1@toc@l(3)
4327 ; PC64LE-NEXT: bl log10
4329 ; PC64LE-NEXT: li 3, 48
4330 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4331 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4332 ; PC64LE-NEXT: xxmrghd 34, 0, 1
4333 ; PC64LE-NEXT: addi 1, 1, 64
4334 ; PC64LE-NEXT: ld 0, 16(1)
4335 ; PC64LE-NEXT: mtlr 0
4338 ; PC64LE9-LABEL: constrained_vector_log10_v2f64:
4339 ; PC64LE9: # %bb.0: # %entry
4340 ; PC64LE9-NEXT: mflr 0
4341 ; PC64LE9-NEXT: std 0, 16(1)
4342 ; PC64LE9-NEXT: stdu 1, -48(1)
4343 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
4344 ; PC64LE9-NEXT: .cfi_offset lr, 16
4345 ; PC64LE9-NEXT: addis 3, 2, .LCPI66_0@toc@ha
4346 ; PC64LE9-NEXT: lfd 1, .LCPI66_0@toc@l(3)
4347 ; PC64LE9-NEXT: bl log10
4349 ; PC64LE9-NEXT: addis 3, 2, .LCPI66_1@toc@ha
4350 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4351 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4352 ; PC64LE9-NEXT: lfs 1, .LCPI66_1@toc@l(3)
4353 ; PC64LE9-NEXT: bl log10
4355 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4356 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4357 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
4358 ; PC64LE9-NEXT: addi 1, 1, 48
4359 ; PC64LE9-NEXT: ld 0, 16(1)
4360 ; PC64LE9-NEXT: mtlr 0
4363 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
4364 <2 x double> <double 42.0, double 42.1>,
4365 metadata !"round.dynamic",
4366 metadata !"fpexcept.strict")
4367 ret <2 x double> %log10
4370 define <3 x float> @constrained_vector_log10_v3f32() {
4371 ; PC64LE-LABEL: constrained_vector_log10_v3f32:
4372 ; PC64LE: # %bb.0: # %entry
4373 ; PC64LE-NEXT: mflr 0
4374 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
4375 ; PC64LE-NEXT: .cfi_offset lr, 16
4376 ; PC64LE-NEXT: .cfi_offset f30, -16
4377 ; PC64LE-NEXT: .cfi_offset f31, -8
4378 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
4379 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
4380 ; PC64LE-NEXT: std 0, 16(1)
4381 ; PC64LE-NEXT: stdu 1, -48(1)
4382 ; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha
4383 ; PC64LE-NEXT: lfs 1, .LCPI67_0@toc@l(3)
4384 ; PC64LE-NEXT: bl log10f
4386 ; PC64LE-NEXT: addis 3, 2, .LCPI67_1@toc@ha
4387 ; PC64LE-NEXT: fmr 31, 1
4388 ; PC64LE-NEXT: lfs 1, .LCPI67_1@toc@l(3)
4389 ; PC64LE-NEXT: bl log10f
4391 ; PC64LE-NEXT: addis 3, 2, .LCPI67_2@toc@ha
4392 ; PC64LE-NEXT: fmr 30, 1
4393 ; PC64LE-NEXT: lfs 1, .LCPI67_2@toc@l(3)
4394 ; PC64LE-NEXT: bl log10f
4396 ; PC64LE-NEXT: xscvdpspn 0, 30
4397 ; PC64LE-NEXT: addis 3, 2, .LCPI67_3@toc@ha
4398 ; PC64LE-NEXT: xscvdpspn 1, 1
4399 ; PC64LE-NEXT: addi 3, 3, .LCPI67_3@toc@l
4400 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
4401 ; PC64LE-NEXT: xscvdpspn 0, 31
4402 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
4403 ; PC64LE-NEXT: vmrglw 2, 2, 3
4404 ; PC64LE-NEXT: lvx 3, 0, 3
4405 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
4406 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4407 ; PC64LE-NEXT: addi 1, 1, 48
4408 ; PC64LE-NEXT: ld 0, 16(1)
4409 ; PC64LE-NEXT: mtlr 0
4410 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
4411 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
4414 ; PC64LE9-LABEL: constrained_vector_log10_v3f32:
4415 ; PC64LE9: # %bb.0: # %entry
4416 ; PC64LE9-NEXT: mflr 0
4417 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
4418 ; PC64LE9-NEXT: .cfi_offset lr, 16
4419 ; PC64LE9-NEXT: .cfi_offset f30, -16
4420 ; PC64LE9-NEXT: .cfi_offset f31, -8
4421 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
4422 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
4423 ; PC64LE9-NEXT: std 0, 16(1)
4424 ; PC64LE9-NEXT: stdu 1, -48(1)
4425 ; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha
4426 ; PC64LE9-NEXT: lfs 1, .LCPI67_0@toc@l(3)
4427 ; PC64LE9-NEXT: bl log10f
4429 ; PC64LE9-NEXT: addis 3, 2, .LCPI67_1@toc@ha
4430 ; PC64LE9-NEXT: fmr 31, 1
4431 ; PC64LE9-NEXT: lfs 1, .LCPI67_1@toc@l(3)
4432 ; PC64LE9-NEXT: bl log10f
4434 ; PC64LE9-NEXT: addis 3, 2, .LCPI67_2@toc@ha
4435 ; PC64LE9-NEXT: fmr 30, 1
4436 ; PC64LE9-NEXT: lfs 1, .LCPI67_2@toc@l(3)
4437 ; PC64LE9-NEXT: bl log10f
4439 ; PC64LE9-NEXT: xscvdpspn 0, 1
4440 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
4441 ; PC64LE9-NEXT: xscvdpspn 0, 30
4442 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
4443 ; PC64LE9-NEXT: xscvdpspn 0, 31
4444 ; PC64LE9-NEXT: addis 3, 2, .LCPI67_3@toc@ha
4445 ; PC64LE9-NEXT: addi 3, 3, .LCPI67_3@toc@l
4446 ; PC64LE9-NEXT: vmrglw 2, 3, 2
4447 ; PC64LE9-NEXT: lxvx 35, 0, 3
4448 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
4449 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
4450 ; PC64LE9-NEXT: addi 1, 1, 48
4451 ; PC64LE9-NEXT: ld 0, 16(1)
4452 ; PC64LE9-NEXT: mtlr 0
4453 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
4454 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
4457 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
4458 <3 x float> <float 42.0, float 43.0, float 44.0>,
4459 metadata !"round.dynamic",
4460 metadata !"fpexcept.strict")
4461 ret <3 x float> %log10
4464 define <3 x double> @constrained_vector_log10_v3f64() {
4465 ; PC64LE-LABEL: constrained_vector_log10_v3f64:
4466 ; PC64LE: # %bb.0: # %entry
4467 ; PC64LE-NEXT: mflr 0
4468 ; PC64LE-NEXT: std 0, 16(1)
4469 ; PC64LE-NEXT: stdu 1, -80(1)
4470 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
4471 ; PC64LE-NEXT: .cfi_offset lr, 16
4472 ; PC64LE-NEXT: .cfi_offset v31, -16
4473 ; PC64LE-NEXT: li 3, 64
4474 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4475 ; PC64LE-NEXT: addis 3, 2, .LCPI68_0@toc@ha
4476 ; PC64LE-NEXT: lfd 1, .LCPI68_0@toc@l(3)
4477 ; PC64LE-NEXT: bl log10
4479 ; PC64LE-NEXT: li 3, 48
4480 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4481 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4482 ; PC64LE-NEXT: addis 3, 2, .LCPI68_1@toc@ha
4483 ; PC64LE-NEXT: lfs 1, .LCPI68_1@toc@l(3)
4484 ; PC64LE-NEXT: bl log10
4486 ; PC64LE-NEXT: li 3, 48
4487 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4488 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4489 ; PC64LE-NEXT: addis 3, 2, .LCPI68_2@toc@ha
4490 ; PC64LE-NEXT: xxmrghd 63, 0, 1
4491 ; PC64LE-NEXT: lfd 1, .LCPI68_2@toc@l(3)
4492 ; PC64LE-NEXT: bl log10
4494 ; PC64LE-NEXT: li 3, 64
4495 ; PC64LE-NEXT: fmr 3, 1
4496 ; PC64LE-NEXT: xxlor 1, 63, 63
4497 ; PC64LE-NEXT: xxlor 2, 63, 63
4498 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4499 ; PC64LE-NEXT: addi 1, 1, 80
4500 ; PC64LE-NEXT: ld 0, 16(1)
4501 ; PC64LE-NEXT: mtlr 0
4504 ; PC64LE9-LABEL: constrained_vector_log10_v3f64:
4505 ; PC64LE9: # %bb.0: # %entry
4506 ; PC64LE9-NEXT: mflr 0
4507 ; PC64LE9-NEXT: std 0, 16(1)
4508 ; PC64LE9-NEXT: stdu 1, -64(1)
4509 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
4510 ; PC64LE9-NEXT: .cfi_offset lr, 16
4511 ; PC64LE9-NEXT: .cfi_offset v31, -16
4512 ; PC64LE9-NEXT: addis 3, 2, .LCPI68_0@toc@ha
4513 ; PC64LE9-NEXT: lfd 1, .LCPI68_0@toc@l(3)
4514 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4515 ; PC64LE9-NEXT: bl log10
4517 ; PC64LE9-NEXT: addis 3, 2, .LCPI68_1@toc@ha
4518 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4519 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4520 ; PC64LE9-NEXT: lfs 1, .LCPI68_1@toc@l(3)
4521 ; PC64LE9-NEXT: bl log10
4523 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4524 ; PC64LE9-NEXT: addis 3, 2, .LCPI68_2@toc@ha
4525 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4526 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
4527 ; PC64LE9-NEXT: lfd 1, .LCPI68_2@toc@l(3)
4528 ; PC64LE9-NEXT: bl log10
4530 ; PC64LE9-NEXT: fmr 3, 1
4531 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4532 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4533 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4534 ; PC64LE9-NEXT: addi 1, 1, 64
4535 ; PC64LE9-NEXT: ld 0, 16(1)
4536 ; PC64LE9-NEXT: mtlr 0
4539 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
4540 <3 x double> <double 42.0, double 42.1, double 42.2>,
4541 metadata !"round.dynamic",
4542 metadata !"fpexcept.strict")
4543 ret <3 x double> %log10
4546 define <4 x double> @constrained_vector_log10_v4f64() {
4547 ; PC64LE-LABEL: constrained_vector_log10_v4f64:
4548 ; PC64LE: # %bb.0: # %entry
4549 ; PC64LE-NEXT: mflr 0
4550 ; PC64LE-NEXT: std 0, 16(1)
4551 ; PC64LE-NEXT: stdu 1, -80(1)
4552 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
4553 ; PC64LE-NEXT: .cfi_offset lr, 16
4554 ; PC64LE-NEXT: .cfi_offset v31, -16
4555 ; PC64LE-NEXT: li 3, 64
4556 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4557 ; PC64LE-NEXT: addis 3, 2, .LCPI69_0@toc@ha
4558 ; PC64LE-NEXT: lfd 1, .LCPI69_0@toc@l(3)
4559 ; PC64LE-NEXT: bl log10
4561 ; PC64LE-NEXT: li 3, 48
4562 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4563 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4564 ; PC64LE-NEXT: addis 3, 2, .LCPI69_1@toc@ha
4565 ; PC64LE-NEXT: lfd 1, .LCPI69_1@toc@l(3)
4566 ; PC64LE-NEXT: bl log10
4568 ; PC64LE-NEXT: li 3, 48
4569 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4570 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4571 ; PC64LE-NEXT: addis 3, 2, .LCPI69_2@toc@ha
4572 ; PC64LE-NEXT: xxmrghd 63, 1, 0
4573 ; PC64LE-NEXT: lfd 1, .LCPI69_2@toc@l(3)
4574 ; PC64LE-NEXT: bl log10
4576 ; PC64LE-NEXT: li 3, 48
4577 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4578 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4579 ; PC64LE-NEXT: addis 3, 2, .LCPI69_3@toc@ha
4580 ; PC64LE-NEXT: lfs 1, .LCPI69_3@toc@l(3)
4581 ; PC64LE-NEXT: bl log10
4583 ; PC64LE-NEXT: li 3, 48
4584 ; PC64LE-NEXT: vmr 3, 31
4585 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4586 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4587 ; PC64LE-NEXT: li 3, 64
4588 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4589 ; PC64LE-NEXT: xxmrghd 34, 0, 1
4590 ; PC64LE-NEXT: addi 1, 1, 80
4591 ; PC64LE-NEXT: ld 0, 16(1)
4592 ; PC64LE-NEXT: mtlr 0
4595 ; PC64LE9-LABEL: constrained_vector_log10_v4f64:
4596 ; PC64LE9: # %bb.0: # %entry
4597 ; PC64LE9-NEXT: mflr 0
4598 ; PC64LE9-NEXT: std 0, 16(1)
4599 ; PC64LE9-NEXT: stdu 1, -64(1)
4600 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
4601 ; PC64LE9-NEXT: .cfi_offset lr, 16
4602 ; PC64LE9-NEXT: .cfi_offset v31, -16
4603 ; PC64LE9-NEXT: addis 3, 2, .LCPI69_0@toc@ha
4604 ; PC64LE9-NEXT: lfd 1, .LCPI69_0@toc@l(3)
4605 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4606 ; PC64LE9-NEXT: bl log10
4608 ; PC64LE9-NEXT: addis 3, 2, .LCPI69_1@toc@ha
4609 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4610 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4611 ; PC64LE9-NEXT: lfd 1, .LCPI69_1@toc@l(3)
4612 ; PC64LE9-NEXT: bl log10
4614 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4615 ; PC64LE9-NEXT: addis 3, 2, .LCPI69_2@toc@ha
4616 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4617 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
4618 ; PC64LE9-NEXT: lfd 1, .LCPI69_2@toc@l(3)
4619 ; PC64LE9-NEXT: bl log10
4621 ; PC64LE9-NEXT: addis 3, 2, .LCPI69_3@toc@ha
4622 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4623 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4624 ; PC64LE9-NEXT: lfs 1, .LCPI69_3@toc@l(3)
4625 ; PC64LE9-NEXT: bl log10
4627 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4628 ; PC64LE9-NEXT: vmr 3, 31
4629 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4630 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4631 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
4632 ; PC64LE9-NEXT: addi 1, 1, 64
4633 ; PC64LE9-NEXT: ld 0, 16(1)
4634 ; PC64LE9-NEXT: mtlr 0
4637 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64(
4638 <4 x double> <double 42.0, double 42.1,
4639 double 42.2, double 42.3>,
4640 metadata !"round.dynamic",
4641 metadata !"fpexcept.strict")
4642 ret <4 x double> %log10
4645 define <1 x float> @constrained_vector_log2_v1f32() {
4646 ; PC64LE-LABEL: constrained_vector_log2_v1f32:
4647 ; PC64LE: # %bb.0: # %entry
4648 ; PC64LE-NEXT: mflr 0
4649 ; PC64LE-NEXT: std 0, 16(1)
4650 ; PC64LE-NEXT: stdu 1, -32(1)
4651 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
4652 ; PC64LE-NEXT: .cfi_offset lr, 16
4653 ; PC64LE-NEXT: addis 3, 2, .LCPI70_0@toc@ha
4654 ; PC64LE-NEXT: lfs 1, .LCPI70_0@toc@l(3)
4655 ; PC64LE-NEXT: bl log2f
4657 ; PC64LE-NEXT: xscvdpspn 0, 1
4658 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
4659 ; PC64LE-NEXT: addi 1, 1, 32
4660 ; PC64LE-NEXT: ld 0, 16(1)
4661 ; PC64LE-NEXT: mtlr 0
4664 ; PC64LE9-LABEL: constrained_vector_log2_v1f32:
4665 ; PC64LE9: # %bb.0: # %entry
4666 ; PC64LE9-NEXT: mflr 0
4667 ; PC64LE9-NEXT: std 0, 16(1)
4668 ; PC64LE9-NEXT: stdu 1, -32(1)
4669 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
4670 ; PC64LE9-NEXT: .cfi_offset lr, 16
4671 ; PC64LE9-NEXT: addis 3, 2, .LCPI70_0@toc@ha
4672 ; PC64LE9-NEXT: lfs 1, .LCPI70_0@toc@l(3)
4673 ; PC64LE9-NEXT: bl log2f
4675 ; PC64LE9-NEXT: xscvdpspn 0, 1
4676 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
4677 ; PC64LE9-NEXT: addi 1, 1, 32
4678 ; PC64LE9-NEXT: ld 0, 16(1)
4679 ; PC64LE9-NEXT: mtlr 0
4682 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
4683 <1 x float> <float 42.0>,
4684 metadata !"round.dynamic",
4685 metadata !"fpexcept.strict")
4686 ret <1 x float> %log2
4689 define <2 x double> @constrained_vector_log2_v2f64() {
4690 ; PC64LE-LABEL: constrained_vector_log2_v2f64:
4691 ; PC64LE: # %bb.0: # %entry
4692 ; PC64LE-NEXT: mflr 0
4693 ; PC64LE-NEXT: std 0, 16(1)
4694 ; PC64LE-NEXT: stdu 1, -64(1)
4695 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
4696 ; PC64LE-NEXT: .cfi_offset lr, 16
4697 ; PC64LE-NEXT: addis 3, 2, .LCPI71_0@toc@ha
4698 ; PC64LE-NEXT: lfd 1, .LCPI71_0@toc@l(3)
4699 ; PC64LE-NEXT: bl log2
4701 ; PC64LE-NEXT: li 3, 48
4702 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4703 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4704 ; PC64LE-NEXT: addis 3, 2, .LCPI71_1@toc@ha
4705 ; PC64LE-NEXT: lfs 1, .LCPI71_1@toc@l(3)
4706 ; PC64LE-NEXT: bl log2
4708 ; PC64LE-NEXT: li 3, 48
4709 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4710 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4711 ; PC64LE-NEXT: xxmrghd 34, 0, 1
4712 ; PC64LE-NEXT: addi 1, 1, 64
4713 ; PC64LE-NEXT: ld 0, 16(1)
4714 ; PC64LE-NEXT: mtlr 0
4717 ; PC64LE9-LABEL: constrained_vector_log2_v2f64:
4718 ; PC64LE9: # %bb.0: # %entry
4719 ; PC64LE9-NEXT: mflr 0
4720 ; PC64LE9-NEXT: std 0, 16(1)
4721 ; PC64LE9-NEXT: stdu 1, -48(1)
4722 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
4723 ; PC64LE9-NEXT: .cfi_offset lr, 16
4724 ; PC64LE9-NEXT: addis 3, 2, .LCPI71_0@toc@ha
4725 ; PC64LE9-NEXT: lfd 1, .LCPI71_0@toc@l(3)
4726 ; PC64LE9-NEXT: bl log2
4728 ; PC64LE9-NEXT: addis 3, 2, .LCPI71_1@toc@ha
4729 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4730 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4731 ; PC64LE9-NEXT: lfs 1, .LCPI71_1@toc@l(3)
4732 ; PC64LE9-NEXT: bl log2
4734 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4735 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4736 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
4737 ; PC64LE9-NEXT: addi 1, 1, 48
4738 ; PC64LE9-NEXT: ld 0, 16(1)
4739 ; PC64LE9-NEXT: mtlr 0
4742 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
4743 <2 x double> <double 42.0, double 42.1>,
4744 metadata !"round.dynamic",
4745 metadata !"fpexcept.strict")
4746 ret <2 x double> %log2
4749 define <3 x float> @constrained_vector_log2_v3f32() {
4750 ; PC64LE-LABEL: constrained_vector_log2_v3f32:
4751 ; PC64LE: # %bb.0: # %entry
4752 ; PC64LE-NEXT: mflr 0
4753 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
4754 ; PC64LE-NEXT: .cfi_offset lr, 16
4755 ; PC64LE-NEXT: .cfi_offset f30, -16
4756 ; PC64LE-NEXT: .cfi_offset f31, -8
4757 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
4758 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
4759 ; PC64LE-NEXT: std 0, 16(1)
4760 ; PC64LE-NEXT: stdu 1, -48(1)
4761 ; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4762 ; PC64LE-NEXT: lfs 1, .LCPI72_0@toc@l(3)
4763 ; PC64LE-NEXT: bl log2f
4765 ; PC64LE-NEXT: addis 3, 2, .LCPI72_1@toc@ha
4766 ; PC64LE-NEXT: fmr 31, 1
4767 ; PC64LE-NEXT: lfs 1, .LCPI72_1@toc@l(3)
4768 ; PC64LE-NEXT: bl log2f
4770 ; PC64LE-NEXT: addis 3, 2, .LCPI72_2@toc@ha
4771 ; PC64LE-NEXT: fmr 30, 1
4772 ; PC64LE-NEXT: lfs 1, .LCPI72_2@toc@l(3)
4773 ; PC64LE-NEXT: bl log2f
4775 ; PC64LE-NEXT: xscvdpspn 0, 30
4776 ; PC64LE-NEXT: addis 3, 2, .LCPI72_3@toc@ha
4777 ; PC64LE-NEXT: xscvdpspn 1, 1
4778 ; PC64LE-NEXT: addi 3, 3, .LCPI72_3@toc@l
4779 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
4780 ; PC64LE-NEXT: xscvdpspn 0, 31
4781 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
4782 ; PC64LE-NEXT: vmrglw 2, 2, 3
4783 ; PC64LE-NEXT: lvx 3, 0, 3
4784 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
4785 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4786 ; PC64LE-NEXT: addi 1, 1, 48
4787 ; PC64LE-NEXT: ld 0, 16(1)
4788 ; PC64LE-NEXT: mtlr 0
4789 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
4790 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
4793 ; PC64LE9-LABEL: constrained_vector_log2_v3f32:
4794 ; PC64LE9: # %bb.0: # %entry
4795 ; PC64LE9-NEXT: mflr 0
4796 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
4797 ; PC64LE9-NEXT: .cfi_offset lr, 16
4798 ; PC64LE9-NEXT: .cfi_offset f30, -16
4799 ; PC64LE9-NEXT: .cfi_offset f31, -8
4800 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
4801 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
4802 ; PC64LE9-NEXT: std 0, 16(1)
4803 ; PC64LE9-NEXT: stdu 1, -48(1)
4804 ; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4805 ; PC64LE9-NEXT: lfs 1, .LCPI72_0@toc@l(3)
4806 ; PC64LE9-NEXT: bl log2f
4808 ; PC64LE9-NEXT: addis 3, 2, .LCPI72_1@toc@ha
4809 ; PC64LE9-NEXT: fmr 31, 1
4810 ; PC64LE9-NEXT: lfs 1, .LCPI72_1@toc@l(3)
4811 ; PC64LE9-NEXT: bl log2f
4813 ; PC64LE9-NEXT: addis 3, 2, .LCPI72_2@toc@ha
4814 ; PC64LE9-NEXT: fmr 30, 1
4815 ; PC64LE9-NEXT: lfs 1, .LCPI72_2@toc@l(3)
4816 ; PC64LE9-NEXT: bl log2f
4818 ; PC64LE9-NEXT: xscvdpspn 0, 1
4819 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
4820 ; PC64LE9-NEXT: xscvdpspn 0, 30
4821 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
4822 ; PC64LE9-NEXT: xscvdpspn 0, 31
4823 ; PC64LE9-NEXT: addis 3, 2, .LCPI72_3@toc@ha
4824 ; PC64LE9-NEXT: addi 3, 3, .LCPI72_3@toc@l
4825 ; PC64LE9-NEXT: vmrglw 2, 3, 2
4826 ; PC64LE9-NEXT: lxvx 35, 0, 3
4827 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
4828 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
4829 ; PC64LE9-NEXT: addi 1, 1, 48
4830 ; PC64LE9-NEXT: ld 0, 16(1)
4831 ; PC64LE9-NEXT: mtlr 0
4832 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
4833 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
4836 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
4837 <3 x float> <float 42.0, float 43.0, float 44.0>,
4838 metadata !"round.dynamic",
4839 metadata !"fpexcept.strict")
4840 ret <3 x float> %log2
4843 define <3 x double> @constrained_vector_log2_v3f64() {
4844 ; PC64LE-LABEL: constrained_vector_log2_v3f64:
4845 ; PC64LE: # %bb.0: # %entry
4846 ; PC64LE-NEXT: mflr 0
4847 ; PC64LE-NEXT: std 0, 16(1)
4848 ; PC64LE-NEXT: stdu 1, -80(1)
4849 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
4850 ; PC64LE-NEXT: .cfi_offset lr, 16
4851 ; PC64LE-NEXT: .cfi_offset v31, -16
4852 ; PC64LE-NEXT: li 3, 64
4853 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4854 ; PC64LE-NEXT: addis 3, 2, .LCPI73_0@toc@ha
4855 ; PC64LE-NEXT: lfd 1, .LCPI73_0@toc@l(3)
4856 ; PC64LE-NEXT: bl log2
4858 ; PC64LE-NEXT: li 3, 48
4859 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4860 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4861 ; PC64LE-NEXT: addis 3, 2, .LCPI73_1@toc@ha
4862 ; PC64LE-NEXT: lfs 1, .LCPI73_1@toc@l(3)
4863 ; PC64LE-NEXT: bl log2
4865 ; PC64LE-NEXT: li 3, 48
4866 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4867 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4868 ; PC64LE-NEXT: addis 3, 2, .LCPI73_2@toc@ha
4869 ; PC64LE-NEXT: xxmrghd 63, 0, 1
4870 ; PC64LE-NEXT: lfd 1, .LCPI73_2@toc@l(3)
4871 ; PC64LE-NEXT: bl log2
4873 ; PC64LE-NEXT: li 3, 64
4874 ; PC64LE-NEXT: fmr 3, 1
4875 ; PC64LE-NEXT: xxlor 1, 63, 63
4876 ; PC64LE-NEXT: xxlor 2, 63, 63
4877 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4878 ; PC64LE-NEXT: addi 1, 1, 80
4879 ; PC64LE-NEXT: ld 0, 16(1)
4880 ; PC64LE-NEXT: mtlr 0
4883 ; PC64LE9-LABEL: constrained_vector_log2_v3f64:
4884 ; PC64LE9: # %bb.0: # %entry
4885 ; PC64LE9-NEXT: mflr 0
4886 ; PC64LE9-NEXT: std 0, 16(1)
4887 ; PC64LE9-NEXT: stdu 1, -64(1)
4888 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
4889 ; PC64LE9-NEXT: .cfi_offset lr, 16
4890 ; PC64LE9-NEXT: .cfi_offset v31, -16
4891 ; PC64LE9-NEXT: addis 3, 2, .LCPI73_0@toc@ha
4892 ; PC64LE9-NEXT: lfd 1, .LCPI73_0@toc@l(3)
4893 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4894 ; PC64LE9-NEXT: bl log2
4896 ; PC64LE9-NEXT: addis 3, 2, .LCPI73_1@toc@ha
4897 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4898 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4899 ; PC64LE9-NEXT: lfs 1, .LCPI73_1@toc@l(3)
4900 ; PC64LE9-NEXT: bl log2
4902 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4903 ; PC64LE9-NEXT: addis 3, 2, .LCPI73_2@toc@ha
4904 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4905 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
4906 ; PC64LE9-NEXT: lfd 1, .LCPI73_2@toc@l(3)
4907 ; PC64LE9-NEXT: bl log2
4909 ; PC64LE9-NEXT: fmr 3, 1
4910 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4911 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4912 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4913 ; PC64LE9-NEXT: addi 1, 1, 64
4914 ; PC64LE9-NEXT: ld 0, 16(1)
4915 ; PC64LE9-NEXT: mtlr 0
4918 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
4919 <3 x double> <double 42.0, double 42.1, double 42.2>,
4920 metadata !"round.dynamic",
4921 metadata !"fpexcept.strict")
4922 ret <3 x double> %log2
4925 define <4 x double> @constrained_vector_log2_v4f64() {
4926 ; PC64LE-LABEL: constrained_vector_log2_v4f64:
4927 ; PC64LE: # %bb.0: # %entry
4928 ; PC64LE-NEXT: mflr 0
4929 ; PC64LE-NEXT: std 0, 16(1)
4930 ; PC64LE-NEXT: stdu 1, -80(1)
4931 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
4932 ; PC64LE-NEXT: .cfi_offset lr, 16
4933 ; PC64LE-NEXT: .cfi_offset v31, -16
4934 ; PC64LE-NEXT: li 3, 64
4935 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4936 ; PC64LE-NEXT: addis 3, 2, .LCPI74_0@toc@ha
4937 ; PC64LE-NEXT: lfd 1, .LCPI74_0@toc@l(3)
4938 ; PC64LE-NEXT: bl log2
4940 ; PC64LE-NEXT: li 3, 48
4941 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4942 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4943 ; PC64LE-NEXT: addis 3, 2, .LCPI74_1@toc@ha
4944 ; PC64LE-NEXT: lfd 1, .LCPI74_1@toc@l(3)
4945 ; PC64LE-NEXT: bl log2
4947 ; PC64LE-NEXT: li 3, 48
4948 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4949 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4950 ; PC64LE-NEXT: addis 3, 2, .LCPI74_2@toc@ha
4951 ; PC64LE-NEXT: xxmrghd 63, 1, 0
4952 ; PC64LE-NEXT: lfd 1, .LCPI74_2@toc@l(3)
4953 ; PC64LE-NEXT: bl log2
4955 ; PC64LE-NEXT: li 3, 48
4956 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4957 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
4958 ; PC64LE-NEXT: addis 3, 2, .LCPI74_3@toc@ha
4959 ; PC64LE-NEXT: lfs 1, .LCPI74_3@toc@l(3)
4960 ; PC64LE-NEXT: bl log2
4962 ; PC64LE-NEXT: li 3, 48
4963 ; PC64LE-NEXT: vmr 3, 31
4964 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4965 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
4966 ; PC64LE-NEXT: li 3, 64
4967 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4968 ; PC64LE-NEXT: xxmrghd 34, 0, 1
4969 ; PC64LE-NEXT: addi 1, 1, 80
4970 ; PC64LE-NEXT: ld 0, 16(1)
4971 ; PC64LE-NEXT: mtlr 0
4974 ; PC64LE9-LABEL: constrained_vector_log2_v4f64:
4975 ; PC64LE9: # %bb.0: # %entry
4976 ; PC64LE9-NEXT: mflr 0
4977 ; PC64LE9-NEXT: std 0, 16(1)
4978 ; PC64LE9-NEXT: stdu 1, -64(1)
4979 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
4980 ; PC64LE9-NEXT: .cfi_offset lr, 16
4981 ; PC64LE9-NEXT: .cfi_offset v31, -16
4982 ; PC64LE9-NEXT: addis 3, 2, .LCPI74_0@toc@ha
4983 ; PC64LE9-NEXT: lfd 1, .LCPI74_0@toc@l(3)
4984 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4985 ; PC64LE9-NEXT: bl log2
4987 ; PC64LE9-NEXT: addis 3, 2, .LCPI74_1@toc@ha
4988 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4989 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
4990 ; PC64LE9-NEXT: lfd 1, .LCPI74_1@toc@l(3)
4991 ; PC64LE9-NEXT: bl log2
4993 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
4994 ; PC64LE9-NEXT: addis 3, 2, .LCPI74_2@toc@ha
4995 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4996 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
4997 ; PC64LE9-NEXT: lfd 1, .LCPI74_2@toc@l(3)
4998 ; PC64LE9-NEXT: bl log2
5000 ; PC64LE9-NEXT: addis 3, 2, .LCPI74_3@toc@ha
5001 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5002 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
5003 ; PC64LE9-NEXT: lfs 1, .LCPI74_3@toc@l(3)
5004 ; PC64LE9-NEXT: bl log2
5006 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
5007 ; PC64LE9-NEXT: vmr 3, 31
5008 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5009 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5010 ; PC64LE9-NEXT: xxmrghd 34, 0, 1
5011 ; PC64LE9-NEXT: addi 1, 1, 64
5012 ; PC64LE9-NEXT: ld 0, 16(1)
5013 ; PC64LE9-NEXT: mtlr 0
5016 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64(
5017 <4 x double> <double 42.0, double 42.1,
5018 double 42.2, double 42.3>,
5019 metadata !"round.dynamic",
5020 metadata !"fpexcept.strict")
5021 ret <4 x double> %log2
5024 define <1 x float> @constrained_vector_rint_v1f32() {
5025 ; PC64LE-LABEL: constrained_vector_rint_v1f32:
5026 ; PC64LE: # %bb.0: # %entry
5027 ; PC64LE-NEXT: mflr 0
5028 ; PC64LE-NEXT: std 0, 16(1)
5029 ; PC64LE-NEXT: stdu 1, -32(1)
5030 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
5031 ; PC64LE-NEXT: .cfi_offset lr, 16
5032 ; PC64LE-NEXT: addis 3, 2, .LCPI75_0@toc@ha
5033 ; PC64LE-NEXT: lfs 1, .LCPI75_0@toc@l(3)
5034 ; PC64LE-NEXT: bl rintf
5036 ; PC64LE-NEXT: xscvdpspn 0, 1
5037 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
5038 ; PC64LE-NEXT: addi 1, 1, 32
5039 ; PC64LE-NEXT: ld 0, 16(1)
5040 ; PC64LE-NEXT: mtlr 0
5043 ; PC64LE9-LABEL: constrained_vector_rint_v1f32:
5044 ; PC64LE9: # %bb.0: # %entry
5045 ; PC64LE9-NEXT: mflr 0
5046 ; PC64LE9-NEXT: std 0, 16(1)
5047 ; PC64LE9-NEXT: stdu 1, -32(1)
5048 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
5049 ; PC64LE9-NEXT: .cfi_offset lr, 16
5050 ; PC64LE9-NEXT: addis 3, 2, .LCPI75_0@toc@ha
5051 ; PC64LE9-NEXT: lfs 1, .LCPI75_0@toc@l(3)
5052 ; PC64LE9-NEXT: bl rintf
5054 ; PC64LE9-NEXT: xscvdpspn 0, 1
5055 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
5056 ; PC64LE9-NEXT: addi 1, 1, 32
5057 ; PC64LE9-NEXT: ld 0, 16(1)
5058 ; PC64LE9-NEXT: mtlr 0
5061 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
5062 <1 x float> <float 42.0>,
5063 metadata !"round.dynamic",
5064 metadata !"fpexcept.strict")
5065 ret <1 x float> %rint
5068 define <2 x double> @constrained_vector_rint_v2f64() {
5069 ; PC64LE-LABEL: constrained_vector_rint_v2f64:
5070 ; PC64LE: # %bb.0: # %entry
5071 ; PC64LE-NEXT: mflr 0
5072 ; PC64LE-NEXT: std 0, 16(1)
5073 ; PC64LE-NEXT: stdu 1, -64(1)
5074 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
5075 ; PC64LE-NEXT: .cfi_offset lr, 16
5076 ; PC64LE-NEXT: addis 3, 2, .LCPI76_0@toc@ha
5077 ; PC64LE-NEXT: lfd 1, .LCPI76_0@toc@l(3)
5078 ; PC64LE-NEXT: bl rint
5080 ; PC64LE-NEXT: li 3, 48
5081 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5082 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
5083 ; PC64LE-NEXT: addis 3, 2, .LCPI76_1@toc@ha
5084 ; PC64LE-NEXT: lfs 1, .LCPI76_1@toc@l(3)
5085 ; PC64LE-NEXT: bl rint
5087 ; PC64LE-NEXT: li 3, 48
5088 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5089 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
5090 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5091 ; PC64LE-NEXT: addi 1, 1, 64
5092 ; PC64LE-NEXT: ld 0, 16(1)
5093 ; PC64LE-NEXT: mtlr 0
5096 ; PC64LE9-LABEL: constrained_vector_rint_v2f64:
5097 ; PC64LE9: # %bb.0: # %entry
5098 ; PC64LE9-NEXT: mflr 0
5099 ; PC64LE9-NEXT: std 0, 16(1)
5100 ; PC64LE9-NEXT: stdu 1, -48(1)
5101 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
5102 ; PC64LE9-NEXT: .cfi_offset lr, 16
5103 ; PC64LE9-NEXT: addis 3, 2, .LCPI76_0@toc@ha
5104 ; PC64LE9-NEXT: lfd 1, .LCPI76_0@toc@l(3)
5105 ; PC64LE9-NEXT: bl rint
5107 ; PC64LE9-NEXT: addis 3, 2, .LCPI76_1@toc@ha
5108 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5109 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
5110 ; PC64LE9-NEXT: lfs 1, .LCPI76_1@toc@l(3)
5111 ; PC64LE9-NEXT: bl rint
5113 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
5114 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5115 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
5116 ; PC64LE9-NEXT: addi 1, 1, 48
5117 ; PC64LE9-NEXT: ld 0, 16(1)
5118 ; PC64LE9-NEXT: mtlr 0
5121 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
5122 <2 x double> <double 42.1, double 42.0>,
5123 metadata !"round.dynamic",
5124 metadata !"fpexcept.strict")
5125 ret <2 x double> %rint
5128 define <3 x float> @constrained_vector_rint_v3f32() {
5129 ; PC64LE-LABEL: constrained_vector_rint_v3f32:
5130 ; PC64LE: # %bb.0: # %entry
5131 ; PC64LE-NEXT: mflr 0
5132 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
5133 ; PC64LE-NEXT: .cfi_offset lr, 16
5134 ; PC64LE-NEXT: .cfi_offset f30, -16
5135 ; PC64LE-NEXT: .cfi_offset f31, -8
5136 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
5137 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
5138 ; PC64LE-NEXT: std 0, 16(1)
5139 ; PC64LE-NEXT: stdu 1, -48(1)
5140 ; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha
5141 ; PC64LE-NEXT: lfs 1, .LCPI77_0@toc@l(3)
5142 ; PC64LE-NEXT: bl rintf
5144 ; PC64LE-NEXT: addis 3, 2, .LCPI77_1@toc@ha
5145 ; PC64LE-NEXT: fmr 31, 1
5146 ; PC64LE-NEXT: lfs 1, .LCPI77_1@toc@l(3)
5147 ; PC64LE-NEXT: bl rintf
5149 ; PC64LE-NEXT: addis 3, 2, .LCPI77_2@toc@ha
5150 ; PC64LE-NEXT: fmr 30, 1
5151 ; PC64LE-NEXT: lfs 1, .LCPI77_2@toc@l(3)
5152 ; PC64LE-NEXT: bl rintf
5154 ; PC64LE-NEXT: xscvdpspn 0, 30
5155 ; PC64LE-NEXT: addis 3, 2, .LCPI77_3@toc@ha
5156 ; PC64LE-NEXT: xscvdpspn 1, 1
5157 ; PC64LE-NEXT: addi 3, 3, .LCPI77_3@toc@l
5158 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
5159 ; PC64LE-NEXT: xscvdpspn 0, 31
5160 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
5161 ; PC64LE-NEXT: vmrglw 2, 2, 3
5162 ; PC64LE-NEXT: lvx 3, 0, 3
5163 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
5164 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5165 ; PC64LE-NEXT: addi 1, 1, 48
5166 ; PC64LE-NEXT: ld 0, 16(1)
5167 ; PC64LE-NEXT: mtlr 0
5168 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
5169 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
5172 ; PC64LE9-LABEL: constrained_vector_rint_v3f32:
5173 ; PC64LE9: # %bb.0: # %entry
5174 ; PC64LE9-NEXT: mflr 0
5175 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
5176 ; PC64LE9-NEXT: .cfi_offset lr, 16
5177 ; PC64LE9-NEXT: .cfi_offset f30, -16
5178 ; PC64LE9-NEXT: .cfi_offset f31, -8
5179 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
5180 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
5181 ; PC64LE9-NEXT: std 0, 16(1)
5182 ; PC64LE9-NEXT: stdu 1, -48(1)
5183 ; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha
5184 ; PC64LE9-NEXT: lfs 1, .LCPI77_0@toc@l(3)
5185 ; PC64LE9-NEXT: bl rintf
5187 ; PC64LE9-NEXT: addis 3, 2, .LCPI77_1@toc@ha
5188 ; PC64LE9-NEXT: fmr 31, 1
5189 ; PC64LE9-NEXT: lfs 1, .LCPI77_1@toc@l(3)
5190 ; PC64LE9-NEXT: bl rintf
5192 ; PC64LE9-NEXT: addis 3, 2, .LCPI77_2@toc@ha
5193 ; PC64LE9-NEXT: fmr 30, 1
5194 ; PC64LE9-NEXT: lfs 1, .LCPI77_2@toc@l(3)
5195 ; PC64LE9-NEXT: bl rintf
5197 ; PC64LE9-NEXT: xscvdpspn 0, 1
5198 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
5199 ; PC64LE9-NEXT: xscvdpspn 0, 30
5200 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
5201 ; PC64LE9-NEXT: xscvdpspn 0, 31
5202 ; PC64LE9-NEXT: addis 3, 2, .LCPI77_3@toc@ha
5203 ; PC64LE9-NEXT: addi 3, 3, .LCPI77_3@toc@l
5204 ; PC64LE9-NEXT: vmrglw 2, 3, 2
5205 ; PC64LE9-NEXT: lxvx 35, 0, 3
5206 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
5207 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
5208 ; PC64LE9-NEXT: addi 1, 1, 48
5209 ; PC64LE9-NEXT: ld 0, 16(1)
5210 ; PC64LE9-NEXT: mtlr 0
5211 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
5212 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
5215 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
5216 <3 x float> <float 42.0, float 43.0, float 44.0>,
5217 metadata !"round.dynamic",
5218 metadata !"fpexcept.strict")
5219 ret <3 x float> %rint
5222 define <3 x double> @constrained_vector_rint_v3f64() {
5223 ; PC64LE-LABEL: constrained_vector_rint_v3f64:
5224 ; PC64LE: # %bb.0: # %entry
5225 ; PC64LE-NEXT: mflr 0
5226 ; PC64LE-NEXT: std 0, 16(1)
5227 ; PC64LE-NEXT: stdu 1, -80(1)
5228 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
5229 ; PC64LE-NEXT: .cfi_offset lr, 16
5230 ; PC64LE-NEXT: .cfi_offset v31, -16
5231 ; PC64LE-NEXT: li 3, 64
5232 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5233 ; PC64LE-NEXT: addis 3, 2, .LCPI78_0@toc@ha
5234 ; PC64LE-NEXT: lfd 1, .LCPI78_0@toc@l(3)
5235 ; PC64LE-NEXT: bl rint
5237 ; PC64LE-NEXT: li 3, 48
5238 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5239 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
5240 ; PC64LE-NEXT: addis 3, 2, .LCPI78_1@toc@ha
5241 ; PC64LE-NEXT: lfs 1, .LCPI78_1@toc@l(3)
5242 ; PC64LE-NEXT: bl rint
5244 ; PC64LE-NEXT: li 3, 48
5245 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5246 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
5247 ; PC64LE-NEXT: addis 3, 2, .LCPI78_2@toc@ha
5248 ; PC64LE-NEXT: xxmrghd 63, 0, 1
5249 ; PC64LE-NEXT: lfd 1, .LCPI78_2@toc@l(3)
5250 ; PC64LE-NEXT: bl rint
5252 ; PC64LE-NEXT: li 3, 64
5253 ; PC64LE-NEXT: fmr 3, 1
5254 ; PC64LE-NEXT: xxlor 1, 63, 63
5255 ; PC64LE-NEXT: xxlor 2, 63, 63
5256 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5257 ; PC64LE-NEXT: addi 1, 1, 80
5258 ; PC64LE-NEXT: ld 0, 16(1)
5259 ; PC64LE-NEXT: mtlr 0
5262 ; PC64LE9-LABEL: constrained_vector_rint_v3f64:
5263 ; PC64LE9: # %bb.0: # %entry
5264 ; PC64LE9-NEXT: mflr 0
5265 ; PC64LE9-NEXT: std 0, 16(1)
5266 ; PC64LE9-NEXT: stdu 1, -64(1)
5267 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
5268 ; PC64LE9-NEXT: .cfi_offset lr, 16
5269 ; PC64LE9-NEXT: .cfi_offset v31, -16
5270 ; PC64LE9-NEXT: addis 3, 2, .LCPI78_0@toc@ha
5271 ; PC64LE9-NEXT: lfd 1, .LCPI78_0@toc@l(3)
5272 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
5273 ; PC64LE9-NEXT: bl rint
5275 ; PC64LE9-NEXT: addis 3, 2, .LCPI78_1@toc@ha
5276 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5277 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
5278 ; PC64LE9-NEXT: lfs 1, .LCPI78_1@toc@l(3)
5279 ; PC64LE9-NEXT: bl rint
5281 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
5282 ; PC64LE9-NEXT: addis 3, 2, .LCPI78_2@toc@ha
5283 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5284 ; PC64LE9-NEXT: xxmrghd 63, 0, 1
5285 ; PC64LE9-NEXT: lfd 1, .LCPI78_2@toc@l(3)
5286 ; PC64LE9-NEXT: bl rint
5288 ; PC64LE9-NEXT: fmr 3, 1
5289 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
5290 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
5291 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5292 ; PC64LE9-NEXT: addi 1, 1, 64
5293 ; PC64LE9-NEXT: ld 0, 16(1)
5294 ; PC64LE9-NEXT: mtlr 0
5297 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
5298 <3 x double> <double 42.0, double 42.1, double 42.2>,
5299 metadata !"round.dynamic",
5300 metadata !"fpexcept.strict")
5301 ret <3 x double> %rint
5304 define <4 x double> @constrained_vector_rint_v4f64() {
5305 ; PC64LE-LABEL: constrained_vector_rint_v4f64:
5306 ; PC64LE: # %bb.0: # %entry
5307 ; PC64LE-NEXT: mflr 0
5308 ; PC64LE-NEXT: std 0, 16(1)
5309 ; PC64LE-NEXT: stdu 1, -80(1)
5310 ; PC64LE-NEXT: .cfi_def_cfa_offset 80
5311 ; PC64LE-NEXT: .cfi_offset lr, 16
5312 ; PC64LE-NEXT: .cfi_offset v31, -16
5313 ; PC64LE-NEXT: li 3, 64
5314 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5315 ; PC64LE-NEXT: addis 3, 2, .LCPI79_0@toc@ha
5316 ; PC64LE-NEXT: lfd 1, .LCPI79_0@toc@l(3)
5317 ; PC64LE-NEXT: bl rint
5319 ; PC64LE-NEXT: li 3, 48
5320 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5321 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
5322 ; PC64LE-NEXT: addis 3, 2, .LCPI79_1@toc@ha
5323 ; PC64LE-NEXT: lfd 1, .LCPI79_1@toc@l(3)
5324 ; PC64LE-NEXT: bl rint
5326 ; PC64LE-NEXT: li 3, 48
5327 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5328 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
5329 ; PC64LE-NEXT: addis 3, 2, .LCPI79_2@toc@ha
5330 ; PC64LE-NEXT: xxmrghd 63, 1, 0
5331 ; PC64LE-NEXT: lfd 1, .LCPI79_2@toc@l(3)
5332 ; PC64LE-NEXT: bl rint
5334 ; PC64LE-NEXT: li 3, 48
5335 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5336 ; PC64LE-NEXT: stxvd2x 1, 1, 3 # 16-byte Folded Spill
5337 ; PC64LE-NEXT: addis 3, 2, .LCPI79_3@toc@ha
5338 ; PC64LE-NEXT: lfd 1, .LCPI79_3@toc@l(3)
5339 ; PC64LE-NEXT: bl rint
5341 ; PC64LE-NEXT: li 3, 48
5342 ; PC64LE-NEXT: vmr 2, 31
5343 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5344 ; PC64LE-NEXT: lxvd2x 0, 1, 3 # 16-byte Folded Reload
5345 ; PC64LE-NEXT: li 3, 64
5346 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5347 ; PC64LE-NEXT: xxmrghd 35, 1, 0
5348 ; PC64LE-NEXT: addi 1, 1, 80
5349 ; PC64LE-NEXT: ld 0, 16(1)
5350 ; PC64LE-NEXT: mtlr 0
5353 ; PC64LE9-LABEL: constrained_vector_rint_v4f64:
5354 ; PC64LE9: # %bb.0: # %entry
5355 ; PC64LE9-NEXT: mflr 0
5356 ; PC64LE9-NEXT: std 0, 16(1)
5357 ; PC64LE9-NEXT: stdu 1, -64(1)
5358 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
5359 ; PC64LE9-NEXT: .cfi_offset lr, 16
5360 ; PC64LE9-NEXT: .cfi_offset v31, -16
5361 ; PC64LE9-NEXT: addis 3, 2, .LCPI79_0@toc@ha
5362 ; PC64LE9-NEXT: lfd 1, .LCPI79_0@toc@l(3)
5363 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
5364 ; PC64LE9-NEXT: bl rint
5366 ; PC64LE9-NEXT: addis 3, 2, .LCPI79_1@toc@ha
5367 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5368 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
5369 ; PC64LE9-NEXT: lfd 1, .LCPI79_1@toc@l(3)
5370 ; PC64LE9-NEXT: bl rint
5372 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
5373 ; PC64LE9-NEXT: addis 3, 2, .LCPI79_2@toc@ha
5374 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5375 ; PC64LE9-NEXT: xxmrghd 63, 1, 0
5376 ; PC64LE9-NEXT: lfd 1, .LCPI79_2@toc@l(3)
5377 ; PC64LE9-NEXT: bl rint
5379 ; PC64LE9-NEXT: addis 3, 2, .LCPI79_3@toc@ha
5380 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5381 ; PC64LE9-NEXT: stxv 1, 32(1) # 16-byte Folded Spill
5382 ; PC64LE9-NEXT: lfd 1, .LCPI79_3@toc@l(3)
5383 ; PC64LE9-NEXT: bl rint
5385 ; PC64LE9-NEXT: lxv 0, 32(1) # 16-byte Folded Reload
5386 ; PC64LE9-NEXT: vmr 2, 31
5387 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5388 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5389 ; PC64LE9-NEXT: xxmrghd 35, 1, 0
5390 ; PC64LE9-NEXT: addi 1, 1, 64
5391 ; PC64LE9-NEXT: ld 0, 16(1)
5392 ; PC64LE9-NEXT: mtlr 0
5395 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
5396 <4 x double> <double 42.1, double 42.2,
5397 double 42.3, double 42.4>,
5398 metadata !"round.dynamic",
5399 metadata !"fpexcept.strict")
5400 ret <4 x double> %rint
5403 define <1 x float> @constrained_vector_nearbyint_v1f32() {
5404 ; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
5405 ; PC64LE: # %bb.0: # %entry
5406 ; PC64LE-NEXT: mflr 0
5407 ; PC64LE-NEXT: std 0, 16(1)
5408 ; PC64LE-NEXT: stdu 1, -32(1)
5409 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
5410 ; PC64LE-NEXT: .cfi_offset lr, 16
5411 ; PC64LE-NEXT: addis 3, 2, .LCPI80_0@toc@ha
5412 ; PC64LE-NEXT: lfs 1, .LCPI80_0@toc@l(3)
5413 ; PC64LE-NEXT: bl nearbyintf
5415 ; PC64LE-NEXT: xscvdpspn 0, 1
5416 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
5417 ; PC64LE-NEXT: addi 1, 1, 32
5418 ; PC64LE-NEXT: ld 0, 16(1)
5419 ; PC64LE-NEXT: mtlr 0
5422 ; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32:
5423 ; PC64LE9: # %bb.0: # %entry
5424 ; PC64LE9-NEXT: mflr 0
5425 ; PC64LE9-NEXT: std 0, 16(1)
5426 ; PC64LE9-NEXT: stdu 1, -32(1)
5427 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
5428 ; PC64LE9-NEXT: .cfi_offset lr, 16
5429 ; PC64LE9-NEXT: addis 3, 2, .LCPI80_0@toc@ha
5430 ; PC64LE9-NEXT: lfs 1, .LCPI80_0@toc@l(3)
5431 ; PC64LE9-NEXT: bl nearbyintf
5433 ; PC64LE9-NEXT: xscvdpspn 0, 1
5434 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
5435 ; PC64LE9-NEXT: addi 1, 1, 32
5436 ; PC64LE9-NEXT: ld 0, 16(1)
5437 ; PC64LE9-NEXT: mtlr 0
5440 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
5441 <1 x float> <float 42.0>,
5442 metadata !"round.dynamic",
5443 metadata !"fpexcept.strict")
5444 ret <1 x float> %nearby
5447 define <2 x double> @constrained_vector_nearbyint_v2f64() {
5448 ; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
5449 ; PC64LE: # %bb.0: # %entry
5450 ; PC64LE-NEXT: addis 3, 2, .LCPI81_0@toc@ha
5451 ; PC64LE-NEXT: addi 3, 3, .LCPI81_0@toc@l
5452 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5453 ; PC64LE-NEXT: xxswapd 0, 0
5454 ; PC64LE-NEXT: xvrdpic 34, 0
5457 ; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64:
5458 ; PC64LE9: # %bb.0: # %entry
5459 ; PC64LE9-NEXT: addis 3, 2, .LCPI81_0@toc@ha
5460 ; PC64LE9-NEXT: addi 3, 3, .LCPI81_0@toc@l
5461 ; PC64LE9-NEXT: lxvx 0, 0, 3
5462 ; PC64LE9-NEXT: xvrdpic 34, 0
5465 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
5466 <2 x double> <double 42.1, double 42.0>,
5467 metadata !"round.dynamic",
5468 metadata !"fpexcept.strict")
5469 ret <2 x double> %nearby
5472 define <3 x float> @constrained_vector_nearbyint_v3f32() {
5473 ; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
5474 ; PC64LE: # %bb.0: # %entry
5475 ; PC64LE-NEXT: mflr 0
5476 ; PC64LE-NEXT: .cfi_def_cfa_offset 48
5477 ; PC64LE-NEXT: .cfi_offset lr, 16
5478 ; PC64LE-NEXT: .cfi_offset f30, -16
5479 ; PC64LE-NEXT: .cfi_offset f31, -8
5480 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
5481 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
5482 ; PC64LE-NEXT: std 0, 16(1)
5483 ; PC64LE-NEXT: stdu 1, -48(1)
5484 ; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha
5485 ; PC64LE-NEXT: lfs 1, .LCPI82_0@toc@l(3)
5486 ; PC64LE-NEXT: bl nearbyintf
5488 ; PC64LE-NEXT: addis 3, 2, .LCPI82_1@toc@ha
5489 ; PC64LE-NEXT: fmr 31, 1
5490 ; PC64LE-NEXT: lfs 1, .LCPI82_1@toc@l(3)
5491 ; PC64LE-NEXT: bl nearbyintf
5493 ; PC64LE-NEXT: addis 3, 2, .LCPI82_2@toc@ha
5494 ; PC64LE-NEXT: fmr 30, 1
5495 ; PC64LE-NEXT: lfs 1, .LCPI82_2@toc@l(3)
5496 ; PC64LE-NEXT: bl nearbyintf
5498 ; PC64LE-NEXT: xscvdpspn 0, 30
5499 ; PC64LE-NEXT: addis 3, 2, .LCPI82_3@toc@ha
5500 ; PC64LE-NEXT: xscvdpspn 1, 1
5501 ; PC64LE-NEXT: addi 3, 3, .LCPI82_3@toc@l
5502 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
5503 ; PC64LE-NEXT: xscvdpspn 0, 31
5504 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
5505 ; PC64LE-NEXT: vmrglw 2, 2, 3
5506 ; PC64LE-NEXT: lvx 3, 0, 3
5507 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
5508 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5509 ; PC64LE-NEXT: addi 1, 1, 48
5510 ; PC64LE-NEXT: ld 0, 16(1)
5511 ; PC64LE-NEXT: mtlr 0
5512 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
5513 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
5516 ; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
5517 ; PC64LE9: # %bb.0: # %entry
5518 ; PC64LE9-NEXT: mflr 0
5519 ; PC64LE9-NEXT: .cfi_def_cfa_offset 48
5520 ; PC64LE9-NEXT: .cfi_offset lr, 16
5521 ; PC64LE9-NEXT: .cfi_offset f30, -16
5522 ; PC64LE9-NEXT: .cfi_offset f31, -8
5523 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
5524 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
5525 ; PC64LE9-NEXT: std 0, 16(1)
5526 ; PC64LE9-NEXT: stdu 1, -48(1)
5527 ; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha
5528 ; PC64LE9-NEXT: lfs 1, .LCPI82_0@toc@l(3)
5529 ; PC64LE9-NEXT: bl nearbyintf
5531 ; PC64LE9-NEXT: addis 3, 2, .LCPI82_1@toc@ha
5532 ; PC64LE9-NEXT: fmr 31, 1
5533 ; PC64LE9-NEXT: lfs 1, .LCPI82_1@toc@l(3)
5534 ; PC64LE9-NEXT: bl nearbyintf
5536 ; PC64LE9-NEXT: addis 3, 2, .LCPI82_2@toc@ha
5537 ; PC64LE9-NEXT: fmr 30, 1
5538 ; PC64LE9-NEXT: lfs 1, .LCPI82_2@toc@l(3)
5539 ; PC64LE9-NEXT: bl nearbyintf
5541 ; PC64LE9-NEXT: xscvdpspn 0, 1
5542 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
5543 ; PC64LE9-NEXT: xscvdpspn 0, 30
5544 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
5545 ; PC64LE9-NEXT: xscvdpspn 0, 31
5546 ; PC64LE9-NEXT: addis 3, 2, .LCPI82_3@toc@ha
5547 ; PC64LE9-NEXT: addi 3, 3, .LCPI82_3@toc@l
5548 ; PC64LE9-NEXT: vmrglw 2, 3, 2
5549 ; PC64LE9-NEXT: lxvx 35, 0, 3
5550 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
5551 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
5552 ; PC64LE9-NEXT: addi 1, 1, 48
5553 ; PC64LE9-NEXT: ld 0, 16(1)
5554 ; PC64LE9-NEXT: mtlr 0
5555 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
5556 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
5559 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
5560 <3 x float> <float 42.0, float 43.0, float 44.0>,
5561 metadata !"round.dynamic",
5562 metadata !"fpexcept.strict")
5563 ret <3 x float> %nearby
5566 define <3 x double> @constrained_vector_nearby_v3f64() {
5567 ; PC64LE-LABEL: constrained_vector_nearby_v3f64:
5568 ; PC64LE: # %bb.0: # %entry
5569 ; PC64LE-NEXT: mflr 0
5570 ; PC64LE-NEXT: std 0, 16(1)
5571 ; PC64LE-NEXT: stdu 1, -32(1)
5572 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
5573 ; PC64LE-NEXT: .cfi_offset lr, 16
5574 ; PC64LE-NEXT: addis 3, 2, .LCPI83_0@toc@ha
5575 ; PC64LE-NEXT: lfd 1, .LCPI83_0@toc@l(3)
5576 ; PC64LE-NEXT: bl nearbyint
5578 ; PC64LE-NEXT: addis 3, 2, .LCPI83_1@toc@ha
5579 ; PC64LE-NEXT: fmr 3, 1
5580 ; PC64LE-NEXT: addi 3, 3, .LCPI83_1@toc@l
5581 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5582 ; PC64LE-NEXT: xxswapd 0, 0
5583 ; PC64LE-NEXT: xvrdpic 2, 0
5584 ; PC64LE-NEXT: xxswapd 0, 2
5585 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
5586 ; PC64LE-NEXT: fmr 1, 0
5587 ; PC64LE-NEXT: addi 1, 1, 32
5588 ; PC64LE-NEXT: ld 0, 16(1)
5589 ; PC64LE-NEXT: mtlr 0
5592 ; PC64LE9-LABEL: constrained_vector_nearby_v3f64:
5593 ; PC64LE9: # %bb.0: # %entry
5594 ; PC64LE9-NEXT: mflr 0
5595 ; PC64LE9-NEXT: std 0, 16(1)
5596 ; PC64LE9-NEXT: stdu 1, -32(1)
5597 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
5598 ; PC64LE9-NEXT: .cfi_offset lr, 16
5599 ; PC64LE9-NEXT: addis 3, 2, .LCPI83_0@toc@ha
5600 ; PC64LE9-NEXT: lfd 1, .LCPI83_0@toc@l(3)
5601 ; PC64LE9-NEXT: bl nearbyint
5603 ; PC64LE9-NEXT: addis 3, 2, .LCPI83_1@toc@ha
5604 ; PC64LE9-NEXT: addi 3, 3, .LCPI83_1@toc@l
5605 ; PC64LE9-NEXT: lxvx 0, 0, 3
5606 ; PC64LE9-NEXT: xvrdpic 2, 0
5607 ; PC64LE9-NEXT: fmr 3, 1
5608 ; PC64LE9-NEXT: xxswapd 1, 2
5609 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5610 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
5611 ; PC64LE9-NEXT: addi 1, 1, 32
5612 ; PC64LE9-NEXT: ld 0, 16(1)
5613 ; PC64LE9-NEXT: mtlr 0
5616 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
5617 <3 x double> <double 42.0, double 42.1, double 42.2>,
5618 metadata !"round.dynamic",
5619 metadata !"fpexcept.strict")
5620 ret <3 x double> %nearby
5623 define <4 x double> @constrained_vector_nearbyint_v4f64() {
5624 ; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
5625 ; PC64LE: # %bb.0: # %entry
5626 ; PC64LE-NEXT: addis 3, 2, .LCPI84_0@toc@ha
5627 ; PC64LE-NEXT: addis 4, 2, .LCPI84_1@toc@ha
5628 ; PC64LE-NEXT: addi 3, 3, .LCPI84_0@toc@l
5629 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5630 ; PC64LE-NEXT: addi 3, 4, .LCPI84_1@toc@l
5631 ; PC64LE-NEXT: lxvd2x 1, 0, 3
5632 ; PC64LE-NEXT: xxswapd 0, 0
5633 ; PC64LE-NEXT: xxswapd 1, 1
5634 ; PC64LE-NEXT: xvrdpic 34, 0
5635 ; PC64LE-NEXT: xvrdpic 35, 1
5638 ; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64:
5639 ; PC64LE9: # %bb.0: # %entry
5640 ; PC64LE9-NEXT: addis 3, 2, .LCPI84_0@toc@ha
5641 ; PC64LE9-NEXT: addi 3, 3, .LCPI84_0@toc@l
5642 ; PC64LE9-NEXT: lxvx 0, 0, 3
5643 ; PC64LE9-NEXT: addis 3, 2, .LCPI84_1@toc@ha
5644 ; PC64LE9-NEXT: addi 3, 3, .LCPI84_1@toc@l
5645 ; PC64LE9-NEXT: xvrdpic 34, 0
5646 ; PC64LE9-NEXT: lxvx 0, 0, 3
5647 ; PC64LE9-NEXT: xvrdpic 35, 0
5650 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
5651 <4 x double> <double 42.1, double 42.2,
5652 double 42.3, double 42.4>,
5653 metadata !"round.dynamic",
5654 metadata !"fpexcept.strict")
5655 ret <4 x double> %nearby
5658 define <1 x float> @constrained_vector_maxnum_v1f32() {
5659 ; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
5660 ; PC64LE: # %bb.0: # %entry
5661 ; PC64LE-NEXT: mflr 0
5662 ; PC64LE-NEXT: std 0, 16(1)
5663 ; PC64LE-NEXT: stdu 1, -32(1)
5664 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
5665 ; PC64LE-NEXT: .cfi_offset lr, 16
5666 ; PC64LE-NEXT: addis 3, 2, .LCPI85_0@toc@ha
5667 ; PC64LE-NEXT: addis 4, 2, .LCPI85_1@toc@ha
5668 ; PC64LE-NEXT: lfs 1, .LCPI85_0@toc@l(3)
5669 ; PC64LE-NEXT: lfs 2, .LCPI85_1@toc@l(4)
5670 ; PC64LE-NEXT: bl fmaxf
5672 ; PC64LE-NEXT: xscvdpspn 0, 1
5673 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
5674 ; PC64LE-NEXT: addi 1, 1, 32
5675 ; PC64LE-NEXT: ld 0, 16(1)
5676 ; PC64LE-NEXT: mtlr 0
5679 ; PC64LE9-LABEL: constrained_vector_maxnum_v1f32:
5680 ; PC64LE9: # %bb.0: # %entry
5681 ; PC64LE9-NEXT: mflr 0
5682 ; PC64LE9-NEXT: std 0, 16(1)
5683 ; PC64LE9-NEXT: stdu 1, -32(1)
5684 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
5685 ; PC64LE9-NEXT: .cfi_offset lr, 16
5686 ; PC64LE9-NEXT: addis 3, 2, .LCPI85_0@toc@ha
5687 ; PC64LE9-NEXT: lfs 1, .LCPI85_0@toc@l(3)
5688 ; PC64LE9-NEXT: addis 3, 2, .LCPI85_1@toc@ha
5689 ; PC64LE9-NEXT: lfs 2, .LCPI85_1@toc@l(3)
5690 ; PC64LE9-NEXT: bl fmaxf
5692 ; PC64LE9-NEXT: xscvdpspn 0, 1
5693 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
5694 ; PC64LE9-NEXT: addi 1, 1, 32
5695 ; PC64LE9-NEXT: ld 0, 16(1)
5696 ; PC64LE9-NEXT: mtlr 0
5699 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
5700 <1 x float> <float 42.0>, <1 x float> <float 41.0>,
5701 metadata !"round.dynamic",
5702 metadata !"fpexcept.strict")
5703 ret <1 x float> %max
5706 define <2 x double> @constrained_vector_maxnum_v2f64() {
5707 ; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
5708 ; PC64LE: # %bb.0: # %entry
5709 ; PC64LE-NEXT: addis 3, 2, .LCPI86_0@toc@ha
5710 ; PC64LE-NEXT: addis 4, 2, .LCPI86_1@toc@ha
5711 ; PC64LE-NEXT: addi 3, 3, .LCPI86_0@toc@l
5712 ; PC64LE-NEXT: addi 4, 4, .LCPI86_1@toc@l
5713 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5714 ; PC64LE-NEXT: lxvd2x 1, 0, 4
5715 ; PC64LE-NEXT: xxswapd 0, 0
5716 ; PC64LE-NEXT: xxswapd 1, 1
5717 ; PC64LE-NEXT: xvmaxdp 34, 1, 0
5720 ; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
5721 ; PC64LE9: # %bb.0: # %entry
5722 ; PC64LE9-NEXT: addis 3, 2, .LCPI86_0@toc@ha
5723 ; PC64LE9-NEXT: addi 3, 3, .LCPI86_0@toc@l
5724 ; PC64LE9-NEXT: lxvx 0, 0, 3
5725 ; PC64LE9-NEXT: addis 3, 2, .LCPI86_1@toc@ha
5726 ; PC64LE9-NEXT: addi 3, 3, .LCPI86_1@toc@l
5727 ; PC64LE9-NEXT: lxvx 1, 0, 3
5728 ; PC64LE9-NEXT: xvmaxdp 34, 1, 0
5731 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(
5732 <2 x double> <double 43.0, double 42.0>,
5733 <2 x double> <double 41.0, double 40.0>,
5734 metadata !"round.dynamic",
5735 metadata !"fpexcept.strict")
5736 ret <2 x double> %max
5739 define <3 x float> @constrained_vector_maxnum_v3f32() {
5740 ; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
5741 ; PC64LE: # %bb.0: # %entry
5742 ; PC64LE-NEXT: mflr 0
5743 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
5744 ; PC64LE-NEXT: .cfi_offset lr, 16
5745 ; PC64LE-NEXT: .cfi_offset f29, -24
5746 ; PC64LE-NEXT: .cfi_offset f30, -16
5747 ; PC64LE-NEXT: .cfi_offset f31, -8
5748 ; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
5749 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
5750 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
5751 ; PC64LE-NEXT: std 0, 16(1)
5752 ; PC64LE-NEXT: stdu 1, -64(1)
5753 ; PC64LE-NEXT: addis 4, 2, .LCPI87_1@toc@ha
5754 ; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha
5755 ; PC64LE-NEXT: lfs 31, .LCPI87_1@toc@l(4)
5756 ; PC64LE-NEXT: lfs 1, .LCPI87_0@toc@l(3)
5757 ; PC64LE-NEXT: fmr 2, 31
5758 ; PC64LE-NEXT: bl fmaxf
5760 ; PC64LE-NEXT: addis 3, 2, .LCPI87_2@toc@ha
5761 ; PC64LE-NEXT: addis 4, 2, .LCPI87_3@toc@ha
5762 ; PC64LE-NEXT: fmr 30, 1
5763 ; PC64LE-NEXT: lfs 1, .LCPI87_2@toc@l(3)
5764 ; PC64LE-NEXT: lfs 2, .LCPI87_3@toc@l(4)
5765 ; PC64LE-NEXT: bl fmaxf
5767 ; PC64LE-NEXT: fmr 29, 1
5768 ; PC64LE-NEXT: addis 3, 2, .LCPI87_4@toc@ha
5769 ; PC64LE-NEXT: fmr 1, 31
5770 ; PC64LE-NEXT: lfs 2, .LCPI87_4@toc@l(3)
5771 ; PC64LE-NEXT: bl fmaxf
5773 ; PC64LE-NEXT: xscvdpspn 0, 29
5774 ; PC64LE-NEXT: addis 3, 2, .LCPI87_5@toc@ha
5775 ; PC64LE-NEXT: xscvdpspn 1, 1
5776 ; PC64LE-NEXT: addi 3, 3, .LCPI87_5@toc@l
5777 ; PC64LE-NEXT: lvx 4, 0, 3
5778 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
5779 ; PC64LE-NEXT: xscvdpspn 0, 30
5780 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
5781 ; PC64LE-NEXT: vmrglw 2, 2, 3
5782 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
5783 ; PC64LE-NEXT: vperm 2, 3, 2, 4
5784 ; PC64LE-NEXT: addi 1, 1, 64
5785 ; PC64LE-NEXT: ld 0, 16(1)
5786 ; PC64LE-NEXT: mtlr 0
5787 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
5788 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
5789 ; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
5792 ; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
5793 ; PC64LE9: # %bb.0: # %entry
5794 ; PC64LE9-NEXT: mflr 0
5795 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
5796 ; PC64LE9-NEXT: .cfi_offset lr, 16
5797 ; PC64LE9-NEXT: .cfi_offset f29, -24
5798 ; PC64LE9-NEXT: .cfi_offset f30, -16
5799 ; PC64LE9-NEXT: .cfi_offset f31, -8
5800 ; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
5801 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
5802 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
5803 ; PC64LE9-NEXT: std 0, 16(1)
5804 ; PC64LE9-NEXT: stdu 1, -64(1)
5805 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha
5806 ; PC64LE9-NEXT: lfs 1, .LCPI87_0@toc@l(3)
5807 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_1@toc@ha
5808 ; PC64LE9-NEXT: lfs 31, .LCPI87_1@toc@l(3)
5809 ; PC64LE9-NEXT: fmr 2, 31
5810 ; PC64LE9-NEXT: bl fmaxf
5812 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_2@toc@ha
5813 ; PC64LE9-NEXT: fmr 30, 1
5814 ; PC64LE9-NEXT: lfs 1, .LCPI87_2@toc@l(3)
5815 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_3@toc@ha
5816 ; PC64LE9-NEXT: lfs 2, .LCPI87_3@toc@l(3)
5817 ; PC64LE9-NEXT: bl fmaxf
5819 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_4@toc@ha
5820 ; PC64LE9-NEXT: lfs 2, .LCPI87_4@toc@l(3)
5821 ; PC64LE9-NEXT: fmr 29, 1
5822 ; PC64LE9-NEXT: fmr 1, 31
5823 ; PC64LE9-NEXT: bl fmaxf
5825 ; PC64LE9-NEXT: xscvdpspn 0, 1
5826 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
5827 ; PC64LE9-NEXT: xscvdpspn 0, 29
5828 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
5829 ; PC64LE9-NEXT: xscvdpspn 0, 30
5830 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_5@toc@ha
5831 ; PC64LE9-NEXT: addi 3, 3, .LCPI87_5@toc@l
5832 ; PC64LE9-NEXT: lxvx 36, 0, 3
5833 ; PC64LE9-NEXT: vmrglw 2, 3, 2
5834 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
5835 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
5836 ; PC64LE9-NEXT: addi 1, 1, 64
5837 ; PC64LE9-NEXT: ld 0, 16(1)
5838 ; PC64LE9-NEXT: mtlr 0
5839 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
5840 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
5841 ; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
5844 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32(
5845 <3 x float> <float 43.0, float 44.0, float 45.0>,
5846 <3 x float> <float 41.0, float 42.0, float 43.0>,
5847 metadata !"round.dynamic",
5848 metadata !"fpexcept.strict")
5849 ret <3 x float> %max
5852 define <3 x double> @constrained_vector_max_v3f64() {
5853 ; PC64LE-LABEL: constrained_vector_max_v3f64:
5854 ; PC64LE: # %bb.0: # %entry
5855 ; PC64LE-NEXT: mflr 0
5856 ; PC64LE-NEXT: std 0, 16(1)
5857 ; PC64LE-NEXT: stdu 1, -32(1)
5858 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
5859 ; PC64LE-NEXT: .cfi_offset lr, 16
5860 ; PC64LE-NEXT: addis 3, 2, .LCPI88_0@toc@ha
5861 ; PC64LE-NEXT: addis 4, 2, .LCPI88_1@toc@ha
5862 ; PC64LE-NEXT: lfs 1, .LCPI88_0@toc@l(3)
5863 ; PC64LE-NEXT: lfs 2, .LCPI88_1@toc@l(4)
5864 ; PC64LE-NEXT: bl fmax
5866 ; PC64LE-NEXT: addis 3, 2, .LCPI88_2@toc@ha
5867 ; PC64LE-NEXT: addis 4, 2, .LCPI88_3@toc@ha
5868 ; PC64LE-NEXT: fmr 3, 1
5869 ; PC64LE-NEXT: addi 3, 3, .LCPI88_2@toc@l
5870 ; PC64LE-NEXT: addi 4, 4, .LCPI88_3@toc@l
5871 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5872 ; PC64LE-NEXT: lxvd2x 2, 0, 4
5873 ; PC64LE-NEXT: xxswapd 0, 0
5874 ; PC64LE-NEXT: xxswapd 2, 2
5875 ; PC64LE-NEXT: xvmaxdp 2, 2, 0
5876 ; PC64LE-NEXT: xxswapd 0, 2
5877 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
5878 ; PC64LE-NEXT: fmr 1, 0
5879 ; PC64LE-NEXT: addi 1, 1, 32
5880 ; PC64LE-NEXT: ld 0, 16(1)
5881 ; PC64LE-NEXT: mtlr 0
5884 ; PC64LE9-LABEL: constrained_vector_max_v3f64:
5885 ; PC64LE9: # %bb.0: # %entry
5886 ; PC64LE9-NEXT: mflr 0
5887 ; PC64LE9-NEXT: std 0, 16(1)
5888 ; PC64LE9-NEXT: stdu 1, -32(1)
5889 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
5890 ; PC64LE9-NEXT: .cfi_offset lr, 16
5891 ; PC64LE9-NEXT: addis 3, 2, .LCPI88_0@toc@ha
5892 ; PC64LE9-NEXT: lfs 1, .LCPI88_0@toc@l(3)
5893 ; PC64LE9-NEXT: addis 3, 2, .LCPI88_1@toc@ha
5894 ; PC64LE9-NEXT: lfs 2, .LCPI88_1@toc@l(3)
5895 ; PC64LE9-NEXT: bl fmax
5897 ; PC64LE9-NEXT: addis 3, 2, .LCPI88_2@toc@ha
5898 ; PC64LE9-NEXT: addi 3, 3, .LCPI88_2@toc@l
5899 ; PC64LE9-NEXT: lxvx 0, 0, 3
5900 ; PC64LE9-NEXT: addis 3, 2, .LCPI88_3@toc@ha
5901 ; PC64LE9-NEXT: addi 3, 3, .LCPI88_3@toc@l
5902 ; PC64LE9-NEXT: fmr 3, 1
5903 ; PC64LE9-NEXT: lxvx 1, 0, 3
5904 ; PC64LE9-NEXT: xvmaxdp 2, 1, 0
5905 ; PC64LE9-NEXT: xxswapd 1, 2
5906 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5907 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
5908 ; PC64LE9-NEXT: addi 1, 1, 32
5909 ; PC64LE9-NEXT: ld 0, 16(1)
5910 ; PC64LE9-NEXT: mtlr 0
5913 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
5914 <3 x double> <double 43.0, double 44.0, double 45.0>,
5915 <3 x double> <double 40.0, double 41.0, double 42.0>,
5916 metadata !"round.dynamic",
5917 metadata !"fpexcept.strict")
5918 ret <3 x double> %max
5921 define <4 x double> @constrained_vector_maxnum_v4f64() {
5922 ; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
5923 ; PC64LE: # %bb.0: # %entry
5924 ; PC64LE-NEXT: addis 3, 2, .LCPI89_0@toc@ha
5925 ; PC64LE-NEXT: addis 4, 2, .LCPI89_1@toc@ha
5926 ; PC64LE-NEXT: addis 5, 2, .LCPI89_2@toc@ha
5927 ; PC64LE-NEXT: addis 6, 2, .LCPI89_3@toc@ha
5928 ; PC64LE-NEXT: addi 3, 3, .LCPI89_0@toc@l
5929 ; PC64LE-NEXT: addi 4, 4, .LCPI89_1@toc@l
5930 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5931 ; PC64LE-NEXT: lxvd2x 1, 0, 4
5932 ; PC64LE-NEXT: addi 3, 5, .LCPI89_2@toc@l
5933 ; PC64LE-NEXT: addi 4, 6, .LCPI89_3@toc@l
5934 ; PC64LE-NEXT: lxvd2x 2, 0, 3
5935 ; PC64LE-NEXT: lxvd2x 3, 0, 4
5936 ; PC64LE-NEXT: xxswapd 0, 0
5937 ; PC64LE-NEXT: xxswapd 1, 1
5938 ; PC64LE-NEXT: xxswapd 2, 2
5939 ; PC64LE-NEXT: xxswapd 3, 3
5940 ; PC64LE-NEXT: xvmaxdp 34, 1, 0
5941 ; PC64LE-NEXT: xvmaxdp 35, 3, 2
5944 ; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
5945 ; PC64LE9: # %bb.0: # %entry
5946 ; PC64LE9-NEXT: addis 3, 2, .LCPI89_0@toc@ha
5947 ; PC64LE9-NEXT: addi 3, 3, .LCPI89_0@toc@l
5948 ; PC64LE9-NEXT: lxvx 0, 0, 3
5949 ; PC64LE9-NEXT: addis 3, 2, .LCPI89_1@toc@ha
5950 ; PC64LE9-NEXT: addi 3, 3, .LCPI89_1@toc@l
5951 ; PC64LE9-NEXT: lxvx 1, 0, 3
5952 ; PC64LE9-NEXT: addis 3, 2, .LCPI89_2@toc@ha
5953 ; PC64LE9-NEXT: addi 3, 3, .LCPI89_2@toc@l
5954 ; PC64LE9-NEXT: xvmaxdp 34, 1, 0
5955 ; PC64LE9-NEXT: lxvx 0, 0, 3
5956 ; PC64LE9-NEXT: addis 3, 2, .LCPI89_3@toc@ha
5957 ; PC64LE9-NEXT: addi 3, 3, .LCPI89_3@toc@l
5958 ; PC64LE9-NEXT: lxvx 1, 0, 3
5959 ; PC64LE9-NEXT: xvmaxdp 35, 1, 0
5962 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64(
5963 <4 x double> <double 44.0, double 45.0,
5964 double 46.0, double 47.0>,
5965 <4 x double> <double 40.0, double 41.0,
5966 double 42.0, double 43.0>,
5967 metadata !"round.dynamic",
5968 metadata !"fpexcept.strict")
5969 ret <4 x double> %max
5972 define <1 x float> @constrained_vector_minnum_v1f32() {
5973 ; PC64LE-LABEL: constrained_vector_minnum_v1f32:
5974 ; PC64LE: # %bb.0: # %entry
5975 ; PC64LE-NEXT: mflr 0
5976 ; PC64LE-NEXT: std 0, 16(1)
5977 ; PC64LE-NEXT: stdu 1, -32(1)
5978 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
5979 ; PC64LE-NEXT: .cfi_offset lr, 16
5980 ; PC64LE-NEXT: addis 3, 2, .LCPI90_0@toc@ha
5981 ; PC64LE-NEXT: addis 4, 2, .LCPI90_1@toc@ha
5982 ; PC64LE-NEXT: lfs 1, .LCPI90_0@toc@l(3)
5983 ; PC64LE-NEXT: lfs 2, .LCPI90_1@toc@l(4)
5984 ; PC64LE-NEXT: bl fminf
5986 ; PC64LE-NEXT: xscvdpspn 0, 1
5987 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
5988 ; PC64LE-NEXT: addi 1, 1, 32
5989 ; PC64LE-NEXT: ld 0, 16(1)
5990 ; PC64LE-NEXT: mtlr 0
5993 ; PC64LE9-LABEL: constrained_vector_minnum_v1f32:
5994 ; PC64LE9: # %bb.0: # %entry
5995 ; PC64LE9-NEXT: mflr 0
5996 ; PC64LE9-NEXT: std 0, 16(1)
5997 ; PC64LE9-NEXT: stdu 1, -32(1)
5998 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
5999 ; PC64LE9-NEXT: .cfi_offset lr, 16
6000 ; PC64LE9-NEXT: addis 3, 2, .LCPI90_0@toc@ha
6001 ; PC64LE9-NEXT: lfs 1, .LCPI90_0@toc@l(3)
6002 ; PC64LE9-NEXT: addis 3, 2, .LCPI90_1@toc@ha
6003 ; PC64LE9-NEXT: lfs 2, .LCPI90_1@toc@l(3)
6004 ; PC64LE9-NEXT: bl fminf
6006 ; PC64LE9-NEXT: xscvdpspn 0, 1
6007 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6008 ; PC64LE9-NEXT: addi 1, 1, 32
6009 ; PC64LE9-NEXT: ld 0, 16(1)
6010 ; PC64LE9-NEXT: mtlr 0
6013 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
6014 <1 x float> <float 42.0>, <1 x float> <float 41.0>,
6015 metadata !"round.dynamic",
6016 metadata !"fpexcept.strict")
6017 ret <1 x float> %min
6020 define <2 x double> @constrained_vector_minnum_v2f64() {
6021 ; PC64LE-LABEL: constrained_vector_minnum_v2f64:
6022 ; PC64LE: # %bb.0: # %entry
6023 ; PC64LE-NEXT: addis 3, 2, .LCPI91_0@toc@ha
6024 ; PC64LE-NEXT: addis 4, 2, .LCPI91_1@toc@ha
6025 ; PC64LE-NEXT: addi 3, 3, .LCPI91_0@toc@l
6026 ; PC64LE-NEXT: addi 4, 4, .LCPI91_1@toc@l
6027 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6028 ; PC64LE-NEXT: lxvd2x 1, 0, 4
6029 ; PC64LE-NEXT: xxswapd 0, 0
6030 ; PC64LE-NEXT: xxswapd 1, 1
6031 ; PC64LE-NEXT: xvmindp 34, 1, 0
6034 ; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
6035 ; PC64LE9: # %bb.0: # %entry
6036 ; PC64LE9-NEXT: addis 3, 2, .LCPI91_0@toc@ha
6037 ; PC64LE9-NEXT: addi 3, 3, .LCPI91_0@toc@l
6038 ; PC64LE9-NEXT: lxvx 0, 0, 3
6039 ; PC64LE9-NEXT: addis 3, 2, .LCPI91_1@toc@ha
6040 ; PC64LE9-NEXT: addi 3, 3, .LCPI91_1@toc@l
6041 ; PC64LE9-NEXT: lxvx 1, 0, 3
6042 ; PC64LE9-NEXT: xvmindp 34, 1, 0
6045 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(
6046 <2 x double> <double 43.0, double 42.0>,
6047 <2 x double> <double 41.0, double 40.0>,
6048 metadata !"round.dynamic",
6049 metadata !"fpexcept.strict")
6050 ret <2 x double> %min
6053 define <3 x float> @constrained_vector_minnum_v3f32() {
6054 ; PC64LE-LABEL: constrained_vector_minnum_v3f32:
6055 ; PC64LE: # %bb.0: # %entry
6056 ; PC64LE-NEXT: mflr 0
6057 ; PC64LE-NEXT: .cfi_def_cfa_offset 64
6058 ; PC64LE-NEXT: .cfi_offset lr, 16
6059 ; PC64LE-NEXT: .cfi_offset f29, -24
6060 ; PC64LE-NEXT: .cfi_offset f30, -16
6061 ; PC64LE-NEXT: .cfi_offset f31, -8
6062 ; PC64LE-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
6063 ; PC64LE-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
6064 ; PC64LE-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
6065 ; PC64LE-NEXT: std 0, 16(1)
6066 ; PC64LE-NEXT: stdu 1, -64(1)
6067 ; PC64LE-NEXT: addis 4, 2, .LCPI92_1@toc@ha
6068 ; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha
6069 ; PC64LE-NEXT: lfs 31, .LCPI92_1@toc@l(4)
6070 ; PC64LE-NEXT: lfs 1, .LCPI92_0@toc@l(3)
6071 ; PC64LE-NEXT: fmr 2, 31
6072 ; PC64LE-NEXT: bl fminf
6074 ; PC64LE-NEXT: addis 3, 2, .LCPI92_2@toc@ha
6075 ; PC64LE-NEXT: addis 4, 2, .LCPI92_3@toc@ha
6076 ; PC64LE-NEXT: fmr 30, 1
6077 ; PC64LE-NEXT: lfs 1, .LCPI92_2@toc@l(3)
6078 ; PC64LE-NEXT: lfs 2, .LCPI92_3@toc@l(4)
6079 ; PC64LE-NEXT: bl fminf
6081 ; PC64LE-NEXT: fmr 29, 1
6082 ; PC64LE-NEXT: addis 3, 2, .LCPI92_4@toc@ha
6083 ; PC64LE-NEXT: fmr 1, 31
6084 ; PC64LE-NEXT: lfs 2, .LCPI92_4@toc@l(3)
6085 ; PC64LE-NEXT: bl fminf
6087 ; PC64LE-NEXT: xscvdpspn 0, 29
6088 ; PC64LE-NEXT: addis 3, 2, .LCPI92_5@toc@ha
6089 ; PC64LE-NEXT: xscvdpspn 1, 1
6090 ; PC64LE-NEXT: addi 3, 3, .LCPI92_5@toc@l
6091 ; PC64LE-NEXT: lvx 4, 0, 3
6092 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6093 ; PC64LE-NEXT: xscvdpspn 0, 30
6094 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
6095 ; PC64LE-NEXT: vmrglw 2, 2, 3
6096 ; PC64LE-NEXT: xxsldwi 35, 0, 0, 1
6097 ; PC64LE-NEXT: vperm 2, 3, 2, 4
6098 ; PC64LE-NEXT: addi 1, 1, 64
6099 ; PC64LE-NEXT: ld 0, 16(1)
6100 ; PC64LE-NEXT: mtlr 0
6101 ; PC64LE-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
6102 ; PC64LE-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
6103 ; PC64LE-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
6106 ; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
6107 ; PC64LE9: # %bb.0: # %entry
6108 ; PC64LE9-NEXT: mflr 0
6109 ; PC64LE9-NEXT: .cfi_def_cfa_offset 64
6110 ; PC64LE9-NEXT: .cfi_offset lr, 16
6111 ; PC64LE9-NEXT: .cfi_offset f29, -24
6112 ; PC64LE9-NEXT: .cfi_offset f30, -16
6113 ; PC64LE9-NEXT: .cfi_offset f31, -8
6114 ; PC64LE9-NEXT: stfd 29, -24(1) # 8-byte Folded Spill
6115 ; PC64LE9-NEXT: stfd 30, -16(1) # 8-byte Folded Spill
6116 ; PC64LE9-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
6117 ; PC64LE9-NEXT: std 0, 16(1)
6118 ; PC64LE9-NEXT: stdu 1, -64(1)
6119 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha
6120 ; PC64LE9-NEXT: lfs 1, .LCPI92_0@toc@l(3)
6121 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_1@toc@ha
6122 ; PC64LE9-NEXT: lfs 31, .LCPI92_1@toc@l(3)
6123 ; PC64LE9-NEXT: fmr 2, 31
6124 ; PC64LE9-NEXT: bl fminf
6126 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_2@toc@ha
6127 ; PC64LE9-NEXT: fmr 30, 1
6128 ; PC64LE9-NEXT: lfs 1, .LCPI92_2@toc@l(3)
6129 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_3@toc@ha
6130 ; PC64LE9-NEXT: lfs 2, .LCPI92_3@toc@l(3)
6131 ; PC64LE9-NEXT: bl fminf
6133 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_4@toc@ha
6134 ; PC64LE9-NEXT: lfs 2, .LCPI92_4@toc@l(3)
6135 ; PC64LE9-NEXT: fmr 29, 1
6136 ; PC64LE9-NEXT: fmr 1, 31
6137 ; PC64LE9-NEXT: bl fminf
6139 ; PC64LE9-NEXT: xscvdpspn 0, 1
6140 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6141 ; PC64LE9-NEXT: xscvdpspn 0, 29
6142 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
6143 ; PC64LE9-NEXT: xscvdpspn 0, 30
6144 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_5@toc@ha
6145 ; PC64LE9-NEXT: addi 3, 3, .LCPI92_5@toc@l
6146 ; PC64LE9-NEXT: lxvx 36, 0, 3
6147 ; PC64LE9-NEXT: vmrglw 2, 3, 2
6148 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
6149 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
6150 ; PC64LE9-NEXT: addi 1, 1, 64
6151 ; PC64LE9-NEXT: ld 0, 16(1)
6152 ; PC64LE9-NEXT: mtlr 0
6153 ; PC64LE9-NEXT: lfd 31, -8(1) # 8-byte Folded Reload
6154 ; PC64LE9-NEXT: lfd 30, -16(1) # 8-byte Folded Reload
6155 ; PC64LE9-NEXT: lfd 29, -24(1) # 8-byte Folded Reload
6158 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32(
6159 <3 x float> <float 43.0, float 44.0, float 45.0>,
6160 <3 x float> <float 41.0, float 42.0, float 43.0>,
6161 metadata !"round.dynamic",
6162 metadata !"fpexcept.strict")
6163 ret <3 x float> %min
6166 define <3 x double> @constrained_vector_min_v3f64() {
6167 ; PC64LE-LABEL: constrained_vector_min_v3f64:
6168 ; PC64LE: # %bb.0: # %entry
6169 ; PC64LE-NEXT: mflr 0
6170 ; PC64LE-NEXT: std 0, 16(1)
6171 ; PC64LE-NEXT: stdu 1, -32(1)
6172 ; PC64LE-NEXT: .cfi_def_cfa_offset 32
6173 ; PC64LE-NEXT: .cfi_offset lr, 16
6174 ; PC64LE-NEXT: addis 3, 2, .LCPI93_0@toc@ha
6175 ; PC64LE-NEXT: addis 4, 2, .LCPI93_1@toc@ha
6176 ; PC64LE-NEXT: lfs 1, .LCPI93_0@toc@l(3)
6177 ; PC64LE-NEXT: lfs 2, .LCPI93_1@toc@l(4)
6178 ; PC64LE-NEXT: bl fmin
6180 ; PC64LE-NEXT: addis 3, 2, .LCPI93_2@toc@ha
6181 ; PC64LE-NEXT: addis 4, 2, .LCPI93_3@toc@ha
6182 ; PC64LE-NEXT: fmr 3, 1
6183 ; PC64LE-NEXT: addi 3, 3, .LCPI93_2@toc@l
6184 ; PC64LE-NEXT: addi 4, 4, .LCPI93_3@toc@l
6185 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6186 ; PC64LE-NEXT: lxvd2x 2, 0, 4
6187 ; PC64LE-NEXT: xxswapd 0, 0
6188 ; PC64LE-NEXT: xxswapd 2, 2
6189 ; PC64LE-NEXT: xvmindp 2, 2, 0
6190 ; PC64LE-NEXT: xxswapd 0, 2
6191 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6192 ; PC64LE-NEXT: fmr 1, 0
6193 ; PC64LE-NEXT: addi 1, 1, 32
6194 ; PC64LE-NEXT: ld 0, 16(1)
6195 ; PC64LE-NEXT: mtlr 0
6198 ; PC64LE9-LABEL: constrained_vector_min_v3f64:
6199 ; PC64LE9: # %bb.0: # %entry
6200 ; PC64LE9-NEXT: mflr 0
6201 ; PC64LE9-NEXT: std 0, 16(1)
6202 ; PC64LE9-NEXT: stdu 1, -32(1)
6203 ; PC64LE9-NEXT: .cfi_def_cfa_offset 32
6204 ; PC64LE9-NEXT: .cfi_offset lr, 16
6205 ; PC64LE9-NEXT: addis 3, 2, .LCPI93_0@toc@ha
6206 ; PC64LE9-NEXT: lfs 1, .LCPI93_0@toc@l(3)
6207 ; PC64LE9-NEXT: addis 3, 2, .LCPI93_1@toc@ha
6208 ; PC64LE9-NEXT: lfs 2, .LCPI93_1@toc@l(3)
6209 ; PC64LE9-NEXT: bl fmin
6211 ; PC64LE9-NEXT: addis 3, 2, .LCPI93_2@toc@ha
6212 ; PC64LE9-NEXT: addi 3, 3, .LCPI93_2@toc@l
6213 ; PC64LE9-NEXT: lxvx 0, 0, 3
6214 ; PC64LE9-NEXT: addis 3, 2, .LCPI93_3@toc@ha
6215 ; PC64LE9-NEXT: addi 3, 3, .LCPI93_3@toc@l
6216 ; PC64LE9-NEXT: fmr 3, 1
6217 ; PC64LE9-NEXT: lxvx 1, 0, 3
6218 ; PC64LE9-NEXT: xvmindp 2, 1, 0
6219 ; PC64LE9-NEXT: xxswapd 1, 2
6220 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6221 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6222 ; PC64LE9-NEXT: addi 1, 1, 32
6223 ; PC64LE9-NEXT: ld 0, 16(1)
6224 ; PC64LE9-NEXT: mtlr 0
6227 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
6228 <3 x double> <double 43.0, double 44.0, double 45.0>,
6229 <3 x double> <double 40.0, double 41.0, double 42.0>,
6230 metadata !"round.dynamic",
6231 metadata !"fpexcept.strict")
6232 ret <3 x double> %min
6235 define <4 x double> @constrained_vector_minnum_v4f64() {
6236 ; PC64LE-LABEL: constrained_vector_minnum_v4f64:
6237 ; PC64LE: # %bb.0: # %entry
6238 ; PC64LE-NEXT: addis 3, 2, .LCPI94_0@toc@ha
6239 ; PC64LE-NEXT: addis 4, 2, .LCPI94_1@toc@ha
6240 ; PC64LE-NEXT: addis 5, 2, .LCPI94_2@toc@ha
6241 ; PC64LE-NEXT: addis 6, 2, .LCPI94_3@toc@ha
6242 ; PC64LE-NEXT: addi 3, 3, .LCPI94_0@toc@l
6243 ; PC64LE-NEXT: addi 4, 4, .LCPI94_1@toc@l
6244 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6245 ; PC64LE-NEXT: lxvd2x 1, 0, 4
6246 ; PC64LE-NEXT: addi 3, 5, .LCPI94_2@toc@l
6247 ; PC64LE-NEXT: addi 4, 6, .LCPI94_3@toc@l
6248 ; PC64LE-NEXT: lxvd2x 2, 0, 3
6249 ; PC64LE-NEXT: lxvd2x 3, 0, 4
6250 ; PC64LE-NEXT: xxswapd 0, 0
6251 ; PC64LE-NEXT: xxswapd 1, 1
6252 ; PC64LE-NEXT: xxswapd 2, 2
6253 ; PC64LE-NEXT: xxswapd 3, 3
6254 ; PC64LE-NEXT: xvmindp 34, 1, 0
6255 ; PC64LE-NEXT: xvmindp 35, 3, 2
6258 ; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
6259 ; PC64LE9: # %bb.0: # %entry
6260 ; PC64LE9-NEXT: addis 3, 2, .LCPI94_0@toc@ha
6261 ; PC64LE9-NEXT: addi 3, 3, .LCPI94_0@toc@l
6262 ; PC64LE9-NEXT: lxvx 0, 0, 3
6263 ; PC64LE9-NEXT: addis 3, 2, .LCPI94_1@toc@ha
6264 ; PC64LE9-NEXT: addi 3, 3, .LCPI94_1@toc@l
6265 ; PC64LE9-NEXT: lxvx 1, 0, 3
6266 ; PC64LE9-NEXT: addis 3, 2, .LCPI94_2@toc@ha
6267 ; PC64LE9-NEXT: addi 3, 3, .LCPI94_2@toc@l
6268 ; PC64LE9-NEXT: xvmindp 34, 1, 0
6269 ; PC64LE9-NEXT: lxvx 0, 0, 3
6270 ; PC64LE9-NEXT: addis 3, 2, .LCPI94_3@toc@ha
6271 ; PC64LE9-NEXT: addi 3, 3, .LCPI94_3@toc@l
6272 ; PC64LE9-NEXT: lxvx 1, 0, 3
6273 ; PC64LE9-NEXT: xvmindp 35, 1, 0
6276 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64(
6277 <4 x double> <double 44.0, double 45.0,
6278 double 46.0, double 47.0>,
6279 <4 x double> <double 40.0, double 41.0,
6280 double 42.0, double 43.0>,
6281 metadata !"round.dynamic",
6282 metadata !"fpexcept.strict")
6283 ret <4 x double> %min
6286 define <1 x float> @constrained_vector_fptrunc_v1f64() {
6287 ; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
6288 ; PC64LE: # %bb.0: # %entry
6289 ; PC64LE-NEXT: addis 3, 2, .LCPI95_0@toc@ha
6290 ; PC64LE-NEXT: lfd 0, .LCPI95_0@toc@l(3)
6291 ; PC64LE-NEXT: frsp 0, 0
6292 ; PC64LE-NEXT: xscvdpspn 0, 0
6293 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6296 ; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
6297 ; PC64LE9: # %bb.0: # %entry
6298 ; PC64LE9-NEXT: addis 3, 2, .LCPI95_0@toc@ha
6299 ; PC64LE9-NEXT: lfd 0, .LCPI95_0@toc@l(3)
6300 ; PC64LE9-NEXT: frsp 0, 0
6301 ; PC64LE9-NEXT: xscvdpspn 0, 0
6302 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6305 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
6306 <1 x double><double 42.1>,
6307 metadata !"round.dynamic",
6308 metadata !"fpexcept.strict")
6309 ret <1 x float> %result
6312 define <2 x float> @constrained_vector_fptrunc_v2f64() {
6313 ; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
6314 ; PC64LE: # %bb.0: # %entry
6315 ; PC64LE-NEXT: addis 3, 2, .LCPI96_0@toc@ha
6316 ; PC64LE-NEXT: addis 4, 2, .LCPI96_1@toc@ha
6317 ; PC64LE-NEXT: lfd 0, .LCPI96_0@toc@l(3)
6318 ; PC64LE-NEXT: lfd 1, .LCPI96_1@toc@l(4)
6319 ; PC64LE-NEXT: frsp 0, 0
6320 ; PC64LE-NEXT: frsp 1, 1
6321 ; PC64LE-NEXT: xscvdpspn 0, 0
6322 ; PC64LE-NEXT: xscvdpspn 1, 1
6323 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6324 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
6325 ; PC64LE-NEXT: vmrglw 2, 3, 2
6328 ; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
6329 ; PC64LE9: # %bb.0: # %entry
6330 ; PC64LE9-NEXT: addis 3, 2, .LCPI96_0@toc@ha
6331 ; PC64LE9-NEXT: lfd 0, .LCPI96_0@toc@l(3)
6332 ; PC64LE9-NEXT: addis 3, 2, .LCPI96_1@toc@ha
6333 ; PC64LE9-NEXT: frsp 0, 0
6334 ; PC64LE9-NEXT: xscvdpspn 0, 0
6335 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6336 ; PC64LE9-NEXT: lfd 0, .LCPI96_1@toc@l(3)
6337 ; PC64LE9-NEXT: frsp 0, 0
6338 ; PC64LE9-NEXT: xscvdpspn 0, 0
6339 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
6340 ; PC64LE9-NEXT: vmrglw 2, 3, 2
6343 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
6344 <2 x double><double 42.1, double 42.2>,
6345 metadata !"round.dynamic",
6346 metadata !"fpexcept.strict")
6347 ret <2 x float> %result
6350 define <3 x float> @constrained_vector_fptrunc_v3f64() {
6351 ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
6352 ; PC64LE: # %bb.0: # %entry
6353 ; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha
6354 ; PC64LE-NEXT: addis 4, 2, .LCPI97_1@toc@ha
6355 ; PC64LE-NEXT: lfd 0, .LCPI97_0@toc@l(3)
6356 ; PC64LE-NEXT: lfd 1, .LCPI97_1@toc@l(4)
6357 ; PC64LE-NEXT: addis 3, 2, .LCPI97_3@toc@ha
6358 ; PC64LE-NEXT: frsp 0, 0
6359 ; PC64LE-NEXT: lfd 2, .LCPI97_3@toc@l(3)
6360 ; PC64LE-NEXT: addis 3, 2, .LCPI97_2@toc@ha
6361 ; PC64LE-NEXT: frsp 1, 1
6362 ; PC64LE-NEXT: addi 3, 3, .LCPI97_2@toc@l
6363 ; PC64LE-NEXT: frsp 2, 2
6364 ; PC64LE-NEXT: xscvdpspn 0, 0
6365 ; PC64LE-NEXT: xscvdpspn 1, 1
6366 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6367 ; PC64LE-NEXT: xscvdpspn 0, 2
6368 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
6369 ; PC64LE-NEXT: vmrglw 2, 3, 2
6370 ; PC64LE-NEXT: lvx 3, 0, 3
6371 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
6372 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6375 ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
6376 ; PC64LE9: # %bb.0: # %entry
6377 ; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha
6378 ; PC64LE9-NEXT: lfd 0, .LCPI97_0@toc@l(3)
6379 ; PC64LE9-NEXT: addis 3, 2, .LCPI97_1@toc@ha
6380 ; PC64LE9-NEXT: frsp 0, 0
6381 ; PC64LE9-NEXT: xscvdpspn 0, 0
6382 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6383 ; PC64LE9-NEXT: lfd 0, .LCPI97_1@toc@l(3)
6384 ; PC64LE9-NEXT: addis 3, 2, .LCPI97_2@toc@ha
6385 ; PC64LE9-NEXT: addi 3, 3, .LCPI97_2@toc@l
6386 ; PC64LE9-NEXT: frsp 0, 0
6387 ; PC64LE9-NEXT: xscvdpspn 0, 0
6388 ; PC64LE9-NEXT: xxsldwi 35, 0, 0, 1
6389 ; PC64LE9-NEXT: vmrglw 2, 3, 2
6390 ; PC64LE9-NEXT: lxvx 35, 0, 3
6391 ; PC64LE9-NEXT: addis 3, 2, .LCPI97_3@toc@ha
6392 ; PC64LE9-NEXT: lfd 0, .LCPI97_3@toc@l(3)
6393 ; PC64LE9-NEXT: frsp 0, 0
6394 ; PC64LE9-NEXT: xscvdpspn 0, 0
6395 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
6396 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6399 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
6400 <3 x double><double 42.1, double 42.2,
6402 metadata !"round.dynamic",
6403 metadata !"fpexcept.strict")
6404 ret <3 x float> %result
6407 define <4 x float> @constrained_vector_fptrunc_v4f64() {
6408 ; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
6409 ; PC64LE: # %bb.0: # %entry
6410 ; PC64LE-NEXT: addis 3, 2, .LCPI98_0@toc@ha
6411 ; PC64LE-NEXT: addis 4, 2, .LCPI98_1@toc@ha
6412 ; PC64LE-NEXT: addis 5, 2, .LCPI98_2@toc@ha
6413 ; PC64LE-NEXT: addis 6, 2, .LCPI98_3@toc@ha
6414 ; PC64LE-NEXT: lfd 0, .LCPI98_0@toc@l(3)
6415 ; PC64LE-NEXT: lfd 1, .LCPI98_1@toc@l(4)
6416 ; PC64LE-NEXT: lfd 2, .LCPI98_2@toc@l(5)
6417 ; PC64LE-NEXT: lfd 3, .LCPI98_3@toc@l(6)
6418 ; PC64LE-NEXT: xxmrghd 0, 1, 0
6419 ; PC64LE-NEXT: xxmrghd 1, 3, 2
6420 ; PC64LE-NEXT: xvcvdpsp 34, 0
6421 ; PC64LE-NEXT: xvcvdpsp 35, 1
6422 ; PC64LE-NEXT: vmrgew 2, 3, 2
6425 ; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
6426 ; PC64LE9: # %bb.0: # %entry
6427 ; PC64LE9-NEXT: addis 3, 2, .LCPI98_0@toc@ha
6428 ; PC64LE9-NEXT: lfd 0, .LCPI98_0@toc@l(3)
6429 ; PC64LE9-NEXT: addis 3, 2, .LCPI98_1@toc@ha
6430 ; PC64LE9-NEXT: lfd 1, .LCPI98_1@toc@l(3)
6431 ; PC64LE9-NEXT: addis 3, 2, .LCPI98_2@toc@ha
6432 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
6433 ; PC64LE9-NEXT: xvcvdpsp 34, 0
6434 ; PC64LE9-NEXT: lfd 0, .LCPI98_2@toc@l(3)
6435 ; PC64LE9-NEXT: addis 3, 2, .LCPI98_3@toc@ha
6436 ; PC64LE9-NEXT: lfd 1, .LCPI98_3@toc@l(3)
6437 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
6438 ; PC64LE9-NEXT: xvcvdpsp 35, 0
6439 ; PC64LE9-NEXT: vmrgew 2, 3, 2
6442 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(
6443 <4 x double><double 42.1, double 42.2,
6444 double 42.3, double 42.4>,
6445 metadata !"round.dynamic",
6446 metadata !"fpexcept.strict")
6447 ret <4 x float> %result
6450 define <1 x double> @constrained_vector_fpext_v1f32() {
6451 ; PC64LE-LABEL: constrained_vector_fpext_v1f32:
6452 ; PC64LE: # %bb.0: # %entry
6453 ; PC64LE-NEXT: addis 3, 2, .LCPI99_0@toc@ha
6454 ; PC64LE-NEXT: lfs 0, .LCPI99_0@toc@l(3)
6455 ; PC64LE-NEXT: xxspltd 34, 0, 0
6458 ; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
6459 ; PC64LE9: # %bb.0: # %entry
6460 ; PC64LE9-NEXT: addis 3, 2, .LCPI99_0@toc@ha
6461 ; PC64LE9-NEXT: lfs 0, .LCPI99_0@toc@l(3)
6462 ; PC64LE9-NEXT: xxspltd 34, 0, 0
6465 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
6466 <1 x float><float 42.0>,
6467 metadata !"fpexcept.strict")
6468 ret <1 x double> %result
6471 define <2 x double> @constrained_vector_fpext_v2f32() {
6472 ; PC64LE-LABEL: constrained_vector_fpext_v2f32:
6473 ; PC64LE: # %bb.0: # %entry
6474 ; PC64LE-NEXT: addis 3, 2, .LCPI100_0@toc@ha
6475 ; PC64LE-NEXT: addis 4, 2, .LCPI100_1@toc@ha
6476 ; PC64LE-NEXT: lfs 0, .LCPI100_0@toc@l(3)
6477 ; PC64LE-NEXT: lfs 1, .LCPI100_1@toc@l(4)
6478 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6481 ; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
6482 ; PC64LE9: # %bb.0: # %entry
6483 ; PC64LE9-NEXT: addis 3, 2, .LCPI100_0@toc@ha
6484 ; PC64LE9-NEXT: lfs 0, .LCPI100_0@toc@l(3)
6485 ; PC64LE9-NEXT: addis 3, 2, .LCPI100_1@toc@ha
6486 ; PC64LE9-NEXT: lfs 1, .LCPI100_1@toc@l(3)
6487 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
6490 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
6491 <2 x float><float 42.0, float 43.0>,
6492 metadata !"fpexcept.strict")
6493 ret <2 x double> %result
6496 define <3 x double> @constrained_vector_fpext_v3f32() {
6497 ; PC64LE-LABEL: constrained_vector_fpext_v3f32:
6498 ; PC64LE: # %bb.0: # %entry
6499 ; PC64LE-NEXT: addis 3, 2, .LCPI101_0@toc@ha
6500 ; PC64LE-NEXT: addis 4, 2, .LCPI101_1@toc@ha
6501 ; PC64LE-NEXT: addis 5, 2, .LCPI101_2@toc@ha
6502 ; PC64LE-NEXT: lfs 1, .LCPI101_0@toc@l(3)
6503 ; PC64LE-NEXT: lfs 2, .LCPI101_1@toc@l(4)
6504 ; PC64LE-NEXT: lfs 3, .LCPI101_2@toc@l(5)
6507 ; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
6508 ; PC64LE9: # %bb.0: # %entry
6509 ; PC64LE9-NEXT: addis 3, 2, .LCPI101_0@toc@ha
6510 ; PC64LE9-NEXT: lfs 1, .LCPI101_0@toc@l(3)
6511 ; PC64LE9-NEXT: addis 3, 2, .LCPI101_1@toc@ha
6512 ; PC64LE9-NEXT: lfs 2, .LCPI101_1@toc@l(3)
6513 ; PC64LE9-NEXT: addis 3, 2, .LCPI101_2@toc@ha
6514 ; PC64LE9-NEXT: lfs 3, .LCPI101_2@toc@l(3)
6517 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
6518 <3 x float><float 42.0, float 43.0,
6520 metadata !"fpexcept.strict")
6521 ret <3 x double> %result
6524 define <4 x double> @constrained_vector_fpext_v4f32() {
6525 ; PC64LE-LABEL: constrained_vector_fpext_v4f32:
6526 ; PC64LE: # %bb.0: # %entry
6527 ; PC64LE-NEXT: addis 3, 2, .LCPI102_0@toc@ha
6528 ; PC64LE-NEXT: addis 4, 2, .LCPI102_1@toc@ha
6529 ; PC64LE-NEXT: addis 5, 2, .LCPI102_2@toc@ha
6530 ; PC64LE-NEXT: addis 6, 2, .LCPI102_3@toc@ha
6531 ; PC64LE-NEXT: lfs 0, .LCPI102_0@toc@l(3)
6532 ; PC64LE-NEXT: lfs 1, .LCPI102_1@toc@l(4)
6533 ; PC64LE-NEXT: lfs 2, .LCPI102_2@toc@l(5)
6534 ; PC64LE-NEXT: lfs 3, .LCPI102_3@toc@l(6)
6535 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6536 ; PC64LE-NEXT: xxmrghd 35, 3, 2
6539 ; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
6540 ; PC64LE9: # %bb.0: # %entry
6541 ; PC64LE9-NEXT: addis 3, 2, .LCPI102_0@toc@ha
6542 ; PC64LE9-NEXT: lfs 0, .LCPI102_0@toc@l(3)
6543 ; PC64LE9-NEXT: addis 3, 2, .LCPI102_1@toc@ha
6544 ; PC64LE9-NEXT: lfs 1, .LCPI102_1@toc@l(3)
6545 ; PC64LE9-NEXT: addis 3, 2, .LCPI102_2@toc@ha
6546 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
6547 ; PC64LE9-NEXT: lfs 0, .LCPI102_2@toc@l(3)
6548 ; PC64LE9-NEXT: addis 3, 2, .LCPI102_3@toc@ha
6549 ; PC64LE9-NEXT: lfs 1, .LCPI102_3@toc@l(3)
6550 ; PC64LE9-NEXT: xxmrghd 35, 1, 0
6553 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(
6554 <4 x float><float 42.0, float 43.0,
6555 float 44.0, float 45.0>,
6556 metadata !"fpexcept.strict")
6557 ret <4 x double> %result
6560 define <1 x float> @constrained_vector_ceil_v1f32() {
6561 ; PC64LE-LABEL: constrained_vector_ceil_v1f32:
6562 ; PC64LE: # %bb.0: # %entry
6563 ; PC64LE-NEXT: addis 3, 2, .LCPI103_0@toc@ha
6564 ; PC64LE-NEXT: lfs 0, .LCPI103_0@toc@l(3)
6565 ; PC64LE-NEXT: frip 0, 0
6566 ; PC64LE-NEXT: xscvdpspn 0, 0
6567 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6570 ; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
6571 ; PC64LE9: # %bb.0: # %entry
6572 ; PC64LE9-NEXT: addis 3, 2, .LCPI103_0@toc@ha
6573 ; PC64LE9-NEXT: lfs 0, .LCPI103_0@toc@l(3)
6574 ; PC64LE9-NEXT: frip 0, 0
6575 ; PC64LE9-NEXT: xscvdpspn 0, 0
6576 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6579 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
6580 <1 x float> <float 1.5>,
6581 metadata !"round.dynamic",
6582 metadata !"fpexcept.strict")
6583 ret <1 x float> %ceil
6586 define <2 x double> @constrained_vector_ceil_v2f64() {
6587 ; PC64LE-LABEL: constrained_vector_ceil_v2f64:
6588 ; PC64LE: # %bb.0: # %entry
6589 ; PC64LE-NEXT: addis 3, 2, .LCPI104_0@toc@ha
6590 ; PC64LE-NEXT: addi 3, 3, .LCPI104_0@toc@l
6591 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6592 ; PC64LE-NEXT: xxswapd 0, 0
6593 ; PC64LE-NEXT: xvrdpip 34, 0
6596 ; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
6597 ; PC64LE9: # %bb.0: # %entry
6598 ; PC64LE9-NEXT: addis 3, 2, .LCPI104_0@toc@ha
6599 ; PC64LE9-NEXT: addi 3, 3, .LCPI104_0@toc@l
6600 ; PC64LE9-NEXT: lxvx 0, 0, 3
6601 ; PC64LE9-NEXT: xvrdpip 34, 0
6604 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
6605 <2 x double> <double 1.1, double 1.9>,
6606 metadata !"round.dynamic",
6607 metadata !"fpexcept.strict")
6608 ret <2 x double> %ceil
6611 define <3 x float> @constrained_vector_ceil_v3f32() {
6612 ; PC64LE-LABEL: constrained_vector_ceil_v3f32:
6613 ; PC64LE: # %bb.0: # %entry
6614 ; PC64LE-NEXT: addis 3, 2, .LCPI105_2@toc@ha
6615 ; PC64LE-NEXT: addis 4, 2, .LCPI105_1@toc@ha
6616 ; PC64LE-NEXT: lfs 0, .LCPI105_2@toc@l(3)
6617 ; PC64LE-NEXT: lfs 1, .LCPI105_1@toc@l(4)
6618 ; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha
6619 ; PC64LE-NEXT: frip 0, 0
6620 ; PC64LE-NEXT: lfs 2, .LCPI105_0@toc@l(3)
6621 ; PC64LE-NEXT: addis 3, 2, .LCPI105_3@toc@ha
6622 ; PC64LE-NEXT: frip 1, 1
6623 ; PC64LE-NEXT: addi 3, 3, .LCPI105_3@toc@l
6624 ; PC64LE-NEXT: frip 2, 2
6625 ; PC64LE-NEXT: xscvdpspn 0, 0
6626 ; PC64LE-NEXT: xscvdpspn 1, 1
6627 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6628 ; PC64LE-NEXT: xscvdpspn 0, 2
6629 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
6630 ; PC64LE-NEXT: vmrglw 2, 3, 2
6631 ; PC64LE-NEXT: lvx 3, 0, 3
6632 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
6633 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6636 ; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
6637 ; PC64LE9: # %bb.0: # %entry
6638 ; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha
6639 ; PC64LE9-NEXT: lfs 0, .LCPI105_0@toc@l(3)
6640 ; PC64LE9-NEXT: addis 3, 2, .LCPI105_1@toc@ha
6641 ; PC64LE9-NEXT: lfs 1, .LCPI105_1@toc@l(3)
6642 ; PC64LE9-NEXT: addis 3, 2, .LCPI105_2@toc@ha
6643 ; PC64LE9-NEXT: frip 0, 0
6644 ; PC64LE9-NEXT: lfs 2, .LCPI105_2@toc@l(3)
6645 ; PC64LE9-NEXT: addis 3, 2, .LCPI105_3@toc@ha
6646 ; PC64LE9-NEXT: addi 3, 3, .LCPI105_3@toc@l
6647 ; PC64LE9-NEXT: frip 1, 1
6648 ; PC64LE9-NEXT: frip 2, 2
6649 ; PC64LE9-NEXT: xscvdpspn 0, 0
6650 ; PC64LE9-NEXT: xscvdpspn 1, 1
6651 ; PC64LE9-NEXT: xscvdpspn 2, 2
6652 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
6653 ; PC64LE9-NEXT: xxsldwi 35, 1, 1, 1
6654 ; PC64LE9-NEXT: xxsldwi 34, 2, 2, 1
6655 ; PC64LE9-NEXT: vmrglw 2, 3, 2
6656 ; PC64LE9-NEXT: lxvx 35, 0, 3
6657 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6660 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
6661 <3 x float> <float 1.5, float 2.5, float 3.5>,
6662 metadata !"round.dynamic",
6663 metadata !"fpexcept.strict")
6664 ret <3 x float> %ceil
6667 define <3 x double> @constrained_vector_ceil_v3f64() {
6668 ; PC64LE-LABEL: constrained_vector_ceil_v3f64:
6669 ; PC64LE: # %bb.0: # %entry
6670 ; PC64LE-NEXT: addis 3, 2, .LCPI106_1@toc@ha
6671 ; PC64LE-NEXT: addi 3, 3, .LCPI106_1@toc@l
6672 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6673 ; PC64LE-NEXT: addis 3, 2, .LCPI106_0@toc@ha
6674 ; PC64LE-NEXT: lfs 1, .LCPI106_0@toc@l(3)
6675 ; PC64LE-NEXT: xxswapd 0, 0
6676 ; PC64LE-NEXT: xsrdpip 3, 1
6677 ; PC64LE-NEXT: xvrdpip 2, 0
6678 ; PC64LE-NEXT: xxswapd 1, 2
6679 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6680 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6683 ; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
6684 ; PC64LE9: # %bb.0: # %entry
6685 ; PC64LE9-NEXT: addis 3, 2, .LCPI106_0@toc@ha
6686 ; PC64LE9-NEXT: lfs 0, .LCPI106_0@toc@l(3)
6687 ; PC64LE9-NEXT: addis 3, 2, .LCPI106_1@toc@ha
6688 ; PC64LE9-NEXT: addi 3, 3, .LCPI106_1@toc@l
6689 ; PC64LE9-NEXT: xsrdpip 3, 0
6690 ; PC64LE9-NEXT: lxvx 0, 0, 3
6691 ; PC64LE9-NEXT: xvrdpip 2, 0
6692 ; PC64LE9-NEXT: xxswapd 1, 2
6693 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6694 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6697 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
6698 <3 x double> <double 1.1, double 1.9, double 1.5>,
6699 metadata !"round.dynamic",
6700 metadata !"fpexcept.strict")
6701 ret <3 x double> %ceil
6704 define <1 x float> @constrained_vector_floor_v1f32() {
6705 ; PC64LE-LABEL: constrained_vector_floor_v1f32:
6706 ; PC64LE: # %bb.0: # %entry
6707 ; PC64LE-NEXT: addis 3, 2, .LCPI107_0@toc@ha
6708 ; PC64LE-NEXT: lfs 0, .LCPI107_0@toc@l(3)
6709 ; PC64LE-NEXT: frim 0, 0
6710 ; PC64LE-NEXT: xscvdpspn 0, 0
6711 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6714 ; PC64LE9-LABEL: constrained_vector_floor_v1f32:
6715 ; PC64LE9: # %bb.0: # %entry
6716 ; PC64LE9-NEXT: addis 3, 2, .LCPI107_0@toc@ha
6717 ; PC64LE9-NEXT: lfs 0, .LCPI107_0@toc@l(3)
6718 ; PC64LE9-NEXT: frim 0, 0
6719 ; PC64LE9-NEXT: xscvdpspn 0, 0
6720 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6723 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
6724 <1 x float> <float 1.5>,
6725 metadata !"round.dynamic",
6726 metadata !"fpexcept.strict")
6727 ret <1 x float> %floor
6731 define <2 x double> @constrained_vector_floor_v2f64() {
6732 ; PC64LE-LABEL: constrained_vector_floor_v2f64:
6733 ; PC64LE: # %bb.0: # %entry
6734 ; PC64LE-NEXT: addis 3, 2, .LCPI108_0@toc@ha
6735 ; PC64LE-NEXT: addi 3, 3, .LCPI108_0@toc@l
6736 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6737 ; PC64LE-NEXT: xxswapd 0, 0
6738 ; PC64LE-NEXT: xvrdpim 34, 0
6741 ; PC64LE9-LABEL: constrained_vector_floor_v2f64:
6742 ; PC64LE9: # %bb.0: # %entry
6743 ; PC64LE9-NEXT: addis 3, 2, .LCPI108_0@toc@ha
6744 ; PC64LE9-NEXT: addi 3, 3, .LCPI108_0@toc@l
6745 ; PC64LE9-NEXT: lxvx 0, 0, 3
6746 ; PC64LE9-NEXT: xvrdpim 34, 0
6749 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
6750 <2 x double> <double 1.1, double 1.9>,
6751 metadata !"round.dynamic",
6752 metadata !"fpexcept.strict")
6753 ret <2 x double> %floor
6756 define <3 x float> @constrained_vector_floor_v3f32() {
6757 ; PC64LE-LABEL: constrained_vector_floor_v3f32:
6758 ; PC64LE: # %bb.0: # %entry
6759 ; PC64LE-NEXT: addis 3, 2, .LCPI109_2@toc@ha
6760 ; PC64LE-NEXT: addis 4, 2, .LCPI109_1@toc@ha
6761 ; PC64LE-NEXT: lfs 0, .LCPI109_2@toc@l(3)
6762 ; PC64LE-NEXT: lfs 1, .LCPI109_1@toc@l(4)
6763 ; PC64LE-NEXT: addis 3, 2, .LCPI109_0@toc@ha
6764 ; PC64LE-NEXT: frim 0, 0
6765 ; PC64LE-NEXT: lfs 2, .LCPI109_0@toc@l(3)
6766 ; PC64LE-NEXT: addis 3, 2, .LCPI109_3@toc@ha
6767 ; PC64LE-NEXT: frim 1, 1
6768 ; PC64LE-NEXT: addi 3, 3, .LCPI109_3@toc@l
6769 ; PC64LE-NEXT: frim 2, 2
6770 ; PC64LE-NEXT: xscvdpspn 0, 0
6771 ; PC64LE-NEXT: xscvdpspn 1, 1
6772 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6773 ; PC64LE-NEXT: xscvdpspn 0, 2
6774 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
6775 ; PC64LE-NEXT: vmrglw 2, 3, 2
6776 ; PC64LE-NEXT: lvx 3, 0, 3
6777 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
6778 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6781 ; PC64LE9-LABEL: constrained_vector_floor_v3f32:
6782 ; PC64LE9: # %bb.0: # %entry
6783 ; PC64LE9-NEXT: addis 3, 2, .LCPI109_0@toc@ha
6784 ; PC64LE9-NEXT: lfs 0, .LCPI109_0@toc@l(3)
6785 ; PC64LE9-NEXT: addis 3, 2, .LCPI109_1@toc@ha
6786 ; PC64LE9-NEXT: lfs 1, .LCPI109_1@toc@l(3)
6787 ; PC64LE9-NEXT: addis 3, 2, .LCPI109_2@toc@ha
6788 ; PC64LE9-NEXT: frim 0, 0
6789 ; PC64LE9-NEXT: lfs 2, .LCPI109_2@toc@l(3)
6790 ; PC64LE9-NEXT: addis 3, 2, .LCPI109_3@toc@ha
6791 ; PC64LE9-NEXT: addi 3, 3, .LCPI109_3@toc@l
6792 ; PC64LE9-NEXT: frim 1, 1
6793 ; PC64LE9-NEXT: frim 2, 2
6794 ; PC64LE9-NEXT: xscvdpspn 0, 0
6795 ; PC64LE9-NEXT: xscvdpspn 1, 1
6796 ; PC64LE9-NEXT: xscvdpspn 2, 2
6797 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
6798 ; PC64LE9-NEXT: xxsldwi 35, 1, 1, 1
6799 ; PC64LE9-NEXT: xxsldwi 34, 2, 2, 1
6800 ; PC64LE9-NEXT: vmrglw 2, 3, 2
6801 ; PC64LE9-NEXT: lxvx 35, 0, 3
6802 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6805 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
6806 <3 x float> <float 1.5, float 2.5, float 3.5>,
6807 metadata !"round.dynamic",
6808 metadata !"fpexcept.strict")
6809 ret <3 x float> %floor
6812 define <3 x double> @constrained_vector_floor_v3f64() {
6813 ; PC64LE-LABEL: constrained_vector_floor_v3f64:
6814 ; PC64LE: # %bb.0: # %entry
6815 ; PC64LE-NEXT: addis 3, 2, .LCPI110_1@toc@ha
6816 ; PC64LE-NEXT: addi 3, 3, .LCPI110_1@toc@l
6817 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6818 ; PC64LE-NEXT: addis 3, 2, .LCPI110_0@toc@ha
6819 ; PC64LE-NEXT: lfs 1, .LCPI110_0@toc@l(3)
6820 ; PC64LE-NEXT: xxswapd 0, 0
6821 ; PC64LE-NEXT: xsrdpim 3, 1
6822 ; PC64LE-NEXT: xvrdpim 2, 0
6823 ; PC64LE-NEXT: xxswapd 1, 2
6824 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6825 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6828 ; PC64LE9-LABEL: constrained_vector_floor_v3f64:
6829 ; PC64LE9: # %bb.0: # %entry
6830 ; PC64LE9-NEXT: addis 3, 2, .LCPI110_0@toc@ha
6831 ; PC64LE9-NEXT: lfs 0, .LCPI110_0@toc@l(3)
6832 ; PC64LE9-NEXT: addis 3, 2, .LCPI110_1@toc@ha
6833 ; PC64LE9-NEXT: addi 3, 3, .LCPI110_1@toc@l
6834 ; PC64LE9-NEXT: xsrdpim 3, 0
6835 ; PC64LE9-NEXT: lxvx 0, 0, 3
6836 ; PC64LE9-NEXT: xvrdpim 2, 0
6837 ; PC64LE9-NEXT: xxswapd 1, 2
6838 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6839 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6842 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
6843 <3 x double> <double 1.1, double 1.9, double 1.5>,
6844 metadata !"round.dynamic",
6845 metadata !"fpexcept.strict")
6846 ret <3 x double> %floor
6849 define <1 x float> @constrained_vector_round_v1f32() {
6850 ; PC64LE-LABEL: constrained_vector_round_v1f32:
6851 ; PC64LE: # %bb.0: # %entry
6852 ; PC64LE-NEXT: addis 3, 2, .LCPI111_0@toc@ha
6853 ; PC64LE-NEXT: lfs 0, .LCPI111_0@toc@l(3)
6854 ; PC64LE-NEXT: frin 0, 0
6855 ; PC64LE-NEXT: xscvdpspn 0, 0
6856 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6859 ; PC64LE9-LABEL: constrained_vector_round_v1f32:
6860 ; PC64LE9: # %bb.0: # %entry
6861 ; PC64LE9-NEXT: addis 3, 2, .LCPI111_0@toc@ha
6862 ; PC64LE9-NEXT: lfs 0, .LCPI111_0@toc@l(3)
6863 ; PC64LE9-NEXT: frin 0, 0
6864 ; PC64LE9-NEXT: xscvdpspn 0, 0
6865 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
6868 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
6869 <1 x float> <float 1.5>,
6870 metadata !"round.dynamic",
6871 metadata !"fpexcept.strict")
6872 ret <1 x float> %round
6875 define <2 x double> @constrained_vector_round_v2f64() {
6876 ; PC64LE-LABEL: constrained_vector_round_v2f64:
6877 ; PC64LE: # %bb.0: # %entry
6878 ; PC64LE-NEXT: addis 3, 2, .LCPI112_0@toc@ha
6879 ; PC64LE-NEXT: addi 3, 3, .LCPI112_0@toc@l
6880 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6881 ; PC64LE-NEXT: xxswapd 0, 0
6882 ; PC64LE-NEXT: xvrdpi 34, 0
6885 ; PC64LE9-LABEL: constrained_vector_round_v2f64:
6886 ; PC64LE9: # %bb.0: # %entry
6887 ; PC64LE9-NEXT: addis 3, 2, .LCPI112_0@toc@ha
6888 ; PC64LE9-NEXT: addi 3, 3, .LCPI112_0@toc@l
6889 ; PC64LE9-NEXT: lxvx 0, 0, 3
6890 ; PC64LE9-NEXT: xvrdpi 34, 0
6893 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
6894 <2 x double> <double 1.1, double 1.9>,
6895 metadata !"round.dynamic",
6896 metadata !"fpexcept.strict")
6897 ret <2 x double> %round
6900 define <3 x float> @constrained_vector_round_v3f32() {
6901 ; PC64LE-LABEL: constrained_vector_round_v3f32:
6902 ; PC64LE: # %bb.0: # %entry
6903 ; PC64LE-NEXT: addis 3, 2, .LCPI113_2@toc@ha
6904 ; PC64LE-NEXT: addis 4, 2, .LCPI113_1@toc@ha
6905 ; PC64LE-NEXT: lfs 0, .LCPI113_2@toc@l(3)
6906 ; PC64LE-NEXT: lfs 1, .LCPI113_1@toc@l(4)
6907 ; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha
6908 ; PC64LE-NEXT: frin 0, 0
6909 ; PC64LE-NEXT: lfs 2, .LCPI113_0@toc@l(3)
6910 ; PC64LE-NEXT: addis 3, 2, .LCPI113_3@toc@ha
6911 ; PC64LE-NEXT: frin 1, 1
6912 ; PC64LE-NEXT: addi 3, 3, .LCPI113_3@toc@l
6913 ; PC64LE-NEXT: frin 2, 2
6914 ; PC64LE-NEXT: xscvdpspn 0, 0
6915 ; PC64LE-NEXT: xscvdpspn 1, 1
6916 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
6917 ; PC64LE-NEXT: xscvdpspn 0, 2
6918 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
6919 ; PC64LE-NEXT: vmrglw 2, 3, 2
6920 ; PC64LE-NEXT: lvx 3, 0, 3
6921 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
6922 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6925 ; PC64LE9-LABEL: constrained_vector_round_v3f32:
6926 ; PC64LE9: # %bb.0: # %entry
6927 ; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha
6928 ; PC64LE9-NEXT: lfs 0, .LCPI113_0@toc@l(3)
6929 ; PC64LE9-NEXT: addis 3, 2, .LCPI113_1@toc@ha
6930 ; PC64LE9-NEXT: lfs 1, .LCPI113_1@toc@l(3)
6931 ; PC64LE9-NEXT: addis 3, 2, .LCPI113_2@toc@ha
6932 ; PC64LE9-NEXT: frin 0, 0
6933 ; PC64LE9-NEXT: lfs 2, .LCPI113_2@toc@l(3)
6934 ; PC64LE9-NEXT: addis 3, 2, .LCPI113_3@toc@ha
6935 ; PC64LE9-NEXT: addi 3, 3, .LCPI113_3@toc@l
6936 ; PC64LE9-NEXT: frin 1, 1
6937 ; PC64LE9-NEXT: frin 2, 2
6938 ; PC64LE9-NEXT: xscvdpspn 0, 0
6939 ; PC64LE9-NEXT: xscvdpspn 1, 1
6940 ; PC64LE9-NEXT: xscvdpspn 2, 2
6941 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
6942 ; PC64LE9-NEXT: xxsldwi 35, 1, 1, 1
6943 ; PC64LE9-NEXT: xxsldwi 34, 2, 2, 1
6944 ; PC64LE9-NEXT: vmrglw 2, 3, 2
6945 ; PC64LE9-NEXT: lxvx 35, 0, 3
6946 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6949 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
6950 <3 x float> <float 1.5, float 2.5, float 3.5>,
6951 metadata !"round.dynamic",
6952 metadata !"fpexcept.strict")
6953 ret <3 x float> %round
6957 define <3 x double> @constrained_vector_round_v3f64() {
6958 ; PC64LE-LABEL: constrained_vector_round_v3f64:
6959 ; PC64LE: # %bb.0: # %entry
6960 ; PC64LE-NEXT: addis 3, 2, .LCPI114_1@toc@ha
6961 ; PC64LE-NEXT: addi 3, 3, .LCPI114_1@toc@l
6962 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6963 ; PC64LE-NEXT: addis 3, 2, .LCPI114_0@toc@ha
6964 ; PC64LE-NEXT: lfs 1, .LCPI114_0@toc@l(3)
6965 ; PC64LE-NEXT: xxswapd 0, 0
6966 ; PC64LE-NEXT: xsrdpi 3, 1
6967 ; PC64LE-NEXT: xvrdpi 2, 0
6968 ; PC64LE-NEXT: xxswapd 1, 2
6969 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6970 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6973 ; PC64LE9-LABEL: constrained_vector_round_v3f64:
6974 ; PC64LE9: # %bb.0: # %entry
6975 ; PC64LE9-NEXT: addis 3, 2, .LCPI114_0@toc@ha
6976 ; PC64LE9-NEXT: lfs 0, .LCPI114_0@toc@l(3)
6977 ; PC64LE9-NEXT: addis 3, 2, .LCPI114_1@toc@ha
6978 ; PC64LE9-NEXT: addi 3, 3, .LCPI114_1@toc@l
6979 ; PC64LE9-NEXT: xsrdpi 3, 0
6980 ; PC64LE9-NEXT: lxvx 0, 0, 3
6981 ; PC64LE9-NEXT: xvrdpi 2, 0
6982 ; PC64LE9-NEXT: xxswapd 1, 2
6983 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6984 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6987 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
6988 <3 x double> <double 1.1, double 1.9, double 1.5>,
6989 metadata !"round.dynamic",
6990 metadata !"fpexcept.strict")
6991 ret <3 x double> %round
6994 define <1 x float> @constrained_vector_trunc_v1f32() {
6995 ; PC64LE-LABEL: constrained_vector_trunc_v1f32:
6996 ; PC64LE: # %bb.0: # %entry
6997 ; PC64LE-NEXT: addis 3, 2, .LCPI115_0@toc@ha
6998 ; PC64LE-NEXT: lfs 0, .LCPI115_0@toc@l(3)
6999 ; PC64LE-NEXT: friz 0, 0
7000 ; PC64LE-NEXT: xscvdpspn 0, 0
7001 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
7004 ; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
7005 ; PC64LE9: # %bb.0: # %entry
7006 ; PC64LE9-NEXT: addis 3, 2, .LCPI115_0@toc@ha
7007 ; PC64LE9-NEXT: lfs 0, .LCPI115_0@toc@l(3)
7008 ; PC64LE9-NEXT: friz 0, 0
7009 ; PC64LE9-NEXT: xscvdpspn 0, 0
7010 ; PC64LE9-NEXT: xxsldwi 34, 0, 0, 1
7013 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
7014 <1 x float> <float 1.5>,
7015 metadata !"round.dynamic",
7016 metadata !"fpexcept.strict")
7017 ret <1 x float> %trunc
7020 define <2 x double> @constrained_vector_trunc_v2f64() {
7021 ; PC64LE-LABEL: constrained_vector_trunc_v2f64:
7022 ; PC64LE: # %bb.0: # %entry
7023 ; PC64LE-NEXT: addis 3, 2, .LCPI116_0@toc@ha
7024 ; PC64LE-NEXT: addi 3, 3, .LCPI116_0@toc@l
7025 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7026 ; PC64LE-NEXT: xxswapd 0, 0
7027 ; PC64LE-NEXT: xvrdpiz 34, 0
7030 ; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
7031 ; PC64LE9: # %bb.0: # %entry
7032 ; PC64LE9-NEXT: addis 3, 2, .LCPI116_0@toc@ha
7033 ; PC64LE9-NEXT: addi 3, 3, .LCPI116_0@toc@l
7034 ; PC64LE9-NEXT: lxvx 0, 0, 3
7035 ; PC64LE9-NEXT: xvrdpiz 34, 0
7038 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
7039 <2 x double> <double 1.1, double 1.9>,
7040 metadata !"round.dynamic",
7041 metadata !"fpexcept.strict")
7042 ret <2 x double> %trunc
7045 define <3 x float> @constrained_vector_trunc_v3f32() {
7046 ; PC64LE-LABEL: constrained_vector_trunc_v3f32:
7047 ; PC64LE: # %bb.0: # %entry
7048 ; PC64LE-NEXT: addis 3, 2, .LCPI117_2@toc@ha
7049 ; PC64LE-NEXT: addis 4, 2, .LCPI117_1@toc@ha
7050 ; PC64LE-NEXT: lfs 0, .LCPI117_2@toc@l(3)
7051 ; PC64LE-NEXT: lfs 1, .LCPI117_1@toc@l(4)
7052 ; PC64LE-NEXT: addis 3, 2, .LCPI117_0@toc@ha
7053 ; PC64LE-NEXT: friz 0, 0
7054 ; PC64LE-NEXT: lfs 2, .LCPI117_0@toc@l(3)
7055 ; PC64LE-NEXT: addis 3, 2, .LCPI117_3@toc@ha
7056 ; PC64LE-NEXT: friz 1, 1
7057 ; PC64LE-NEXT: addi 3, 3, .LCPI117_3@toc@l
7058 ; PC64LE-NEXT: friz 2, 2
7059 ; PC64LE-NEXT: xscvdpspn 0, 0
7060 ; PC64LE-NEXT: xscvdpspn 1, 1
7061 ; PC64LE-NEXT: xxsldwi 34, 0, 0, 1
7062 ; PC64LE-NEXT: xscvdpspn 0, 2
7063 ; PC64LE-NEXT: xxsldwi 35, 1, 1, 1
7064 ; PC64LE-NEXT: vmrglw 2, 3, 2
7065 ; PC64LE-NEXT: lvx 3, 0, 3
7066 ; PC64LE-NEXT: xxsldwi 36, 0, 0, 1
7067 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7070 ; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
7071 ; PC64LE9: # %bb.0: # %entry
7072 ; PC64LE9-NEXT: addis 3, 2, .LCPI117_0@toc@ha
7073 ; PC64LE9-NEXT: lfs 0, .LCPI117_0@toc@l(3)
7074 ; PC64LE9-NEXT: addis 3, 2, .LCPI117_1@toc@ha
7075 ; PC64LE9-NEXT: lfs 1, .LCPI117_1@toc@l(3)
7076 ; PC64LE9-NEXT: addis 3, 2, .LCPI117_2@toc@ha
7077 ; PC64LE9-NEXT: friz 0, 0
7078 ; PC64LE9-NEXT: lfs 2, .LCPI117_2@toc@l(3)
7079 ; PC64LE9-NEXT: addis 3, 2, .LCPI117_3@toc@ha
7080 ; PC64LE9-NEXT: addi 3, 3, .LCPI117_3@toc@l
7081 ; PC64LE9-NEXT: friz 1, 1
7082 ; PC64LE9-NEXT: friz 2, 2
7083 ; PC64LE9-NEXT: xscvdpspn 0, 0
7084 ; PC64LE9-NEXT: xscvdpspn 1, 1
7085 ; PC64LE9-NEXT: xscvdpspn 2, 2
7086 ; PC64LE9-NEXT: xxsldwi 36, 0, 0, 1
7087 ; PC64LE9-NEXT: xxsldwi 35, 1, 1, 1
7088 ; PC64LE9-NEXT: xxsldwi 34, 2, 2, 1
7089 ; PC64LE9-NEXT: vmrglw 2, 3, 2
7090 ; PC64LE9-NEXT: lxvx 35, 0, 3
7091 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
7094 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
7095 <3 x float> <float 1.5, float 2.5, float 3.5>,
7096 metadata !"round.dynamic",
7097 metadata !"fpexcept.strict")
7098 ret <3 x float> %trunc
7101 define <3 x double> @constrained_vector_trunc_v3f64() {
7102 ; PC64LE-LABEL: constrained_vector_trunc_v3f64:
7103 ; PC64LE: # %bb.0: # %entry
7104 ; PC64LE-NEXT: addis 3, 2, .LCPI118_1@toc@ha
7105 ; PC64LE-NEXT: addi 3, 3, .LCPI118_1@toc@l
7106 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7107 ; PC64LE-NEXT: addis 3, 2, .LCPI118_0@toc@ha
7108 ; PC64LE-NEXT: lfs 1, .LCPI118_0@toc@l(3)
7109 ; PC64LE-NEXT: xxswapd 0, 0
7110 ; PC64LE-NEXT: xsrdpiz 3, 1
7111 ; PC64LE-NEXT: xvrdpiz 2, 0
7112 ; PC64LE-NEXT: xxswapd 1, 2
7113 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7114 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7117 ; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
7118 ; PC64LE9: # %bb.0: # %entry
7119 ; PC64LE9-NEXT: addis 3, 2, .LCPI118_0@toc@ha
7120 ; PC64LE9-NEXT: lfs 0, .LCPI118_0@toc@l(3)
7121 ; PC64LE9-NEXT: addis 3, 2, .LCPI118_1@toc@ha
7122 ; PC64LE9-NEXT: addi 3, 3, .LCPI118_1@toc@l
7123 ; PC64LE9-NEXT: xsrdpiz 3, 0
7124 ; PC64LE9-NEXT: lxvx 0, 0, 3
7125 ; PC64LE9-NEXT: xvrdpiz 2, 0
7126 ; PC64LE9-NEXT: xxswapd 1, 2
7127 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7128 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7131 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
7132 <3 x double> <double 1.1, double 1.9, double 1.5>,
7133 metadata !"round.dynamic",
7134 metadata !"fpexcept.strict")
7135 ret <3 x double> %trunc
7139 ; Single width declarations
7140 declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7141 declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7142 declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7143 declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7144 declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7145 declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
7146 declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7147 declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
7148 declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
7149 declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
7150 declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
7151 declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
7152 declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
7153 declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
7154 declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
7155 declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
7156 declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
7157 declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7158 declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7159 declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
7160 declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
7161 declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata, metadata)
7162 declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata, metadata)
7163 declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata, metadata)
7164 declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata, metadata)
7166 ; Scalar width declarations
7167 declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7168 declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7169 declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7170 declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7171 declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7172 declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
7173 declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7174 declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
7175 declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
7176 declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
7177 declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
7178 declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
7179 declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
7180 declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
7181 declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
7182 declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
7183 declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
7184 declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7185 declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7186 declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
7187 declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
7188 declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata, metadata)
7189 declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata, metadata)
7190 declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata, metadata)
7191 declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata, metadata)
7193 ; Illegal width declarations
7194 declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7195 declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7196 declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7197 declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7198 declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7199 declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7200 declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7201 declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7202 declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7203 declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7204 declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
7205 declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
7206 declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7207 declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7208 declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
7209 declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
7210 declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
7211 declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
7212 declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
7213 declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
7214 declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
7215 declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
7216 declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
7217 declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
7218 declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
7219 declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
7220 declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
7221 declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
7222 declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
7223 declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
7224 declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
7225 declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
7226 declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
7227 declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
7228 declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7229 declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7230 declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7231 declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7232 declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
7233 declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
7234 declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata, metadata)
7235 declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata, metadata)
7236 declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata, metadata)
7237 declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata, metadata)
7238 declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata, metadata)
7239 declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata, metadata)
7240 declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata, metadata)
7241 declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata, metadata)
7243 ; Double width declarations
7244 declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7245 declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7246 declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7247 declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7248 declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7249 declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
7250 declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7251 declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
7252 declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
7253 declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
7254 declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
7255 declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
7256 declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
7257 declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
7258 declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
7259 declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
7260 declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
7261 declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7262 declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7263 declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
7264 declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
7265 declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata, metadata)
7266 declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata, metadata)
7267 declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata, metadata)
7268 declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata, metadata)