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(<1 x float> %x, <1 x float> %y) #0 {
6 ; PC64LE-LABEL: constrained_vector_fdiv_v1f32:
7 ; PC64LE: # %bb.0: # %entry
8 ; PC64LE-NEXT: xsdivsp 1, 1, 2
11 ; PC64LE9-LABEL: constrained_vector_fdiv_v1f32:
12 ; PC64LE9: # %bb.0: # %entry
13 ; PC64LE9-NEXT: xsdivsp 1, 1, 2
16 %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32(
19 metadata !"round.dynamic",
20 metadata !"fpexcept.strict") #1
24 define <2 x double> @constrained_vector_fdiv_v2f64(<2 x double> %x, <2 x double> %y) #0 {
25 ; PC64LE-LABEL: constrained_vector_fdiv_v2f64:
26 ; PC64LE: # %bb.0: # %entry
27 ; PC64LE-NEXT: xvdivdp 34, 34, 35
30 ; PC64LE9-LABEL: constrained_vector_fdiv_v2f64:
31 ; PC64LE9: # %bb.0: # %entry
32 ; PC64LE9-NEXT: xvdivdp 34, 34, 35
35 %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64(
38 metadata !"round.dynamic",
39 metadata !"fpexcept.strict") #1
43 define <3 x float> @constrained_vector_fdiv_v3f32(<3 x float> %x, <3 x float> %y) #0 {
44 ; PC64LE-LABEL: constrained_vector_fdiv_v3f32:
45 ; PC64LE: # %bb.0: # %entry
46 ; PC64LE-NEXT: xxswapd 0, 35
47 ; PC64LE-NEXT: xxswapd 1, 34
48 ; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha
49 ; PC64LE-NEXT: xscvspdpn 0, 0
50 ; PC64LE-NEXT: xscvspdpn 1, 1
51 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
52 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
53 ; PC64LE-NEXT: addi 3, 3, .LCPI2_0@toc@l
54 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
55 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
56 ; PC64LE-NEXT: xsdivsp 0, 1, 0
57 ; PC64LE-NEXT: xscvspdpn 1, 2
58 ; PC64LE-NEXT: xscvspdpn 2, 3
59 ; PC64LE-NEXT: xsdivsp 1, 2, 1
60 ; PC64LE-NEXT: xscvdpspn 0, 0
61 ; PC64LE-NEXT: xscvdpspn 1, 1
62 ; PC64LE-NEXT: xxmrghw 34, 0, 1
63 ; PC64LE-NEXT: lxvd2x 0, 0, 3
64 ; PC64LE-NEXT: xscvspdpn 1, 5
65 ; PC64LE-NEXT: xxswapd 35, 0
66 ; PC64LE-NEXT: xscvspdpn 0, 4
67 ; PC64LE-NEXT: xsdivsp 0, 1, 0
68 ; PC64LE-NEXT: xscvdpspn 36, 0
69 ; PC64LE-NEXT: vperm 2, 4, 2, 3
72 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
73 ; PC64LE9: # %bb.0: # %entry
74 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
75 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
76 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha
77 ; PC64LE9-NEXT: addi 3, 3, .LCPI2_0@toc@l
78 ; PC64LE9-NEXT: xxswapd 2, 34
79 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
80 ; PC64LE9-NEXT: xscvspdpn 0, 0
81 ; PC64LE9-NEXT: xscvspdpn 1, 1
82 ; PC64LE9-NEXT: xscvspdpn 2, 2
83 ; PC64LE9-NEXT: xscvspdpn 3, 3
84 ; PC64LE9-NEXT: xsdivsp 0, 1, 0
85 ; PC64LE9-NEXT: xxswapd 1, 35
86 ; PC64LE9-NEXT: xscvspdpn 1, 1
87 ; PC64LE9-NEXT: xsdivsp 1, 2, 1
88 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
89 ; PC64LE9-NEXT: xscvspdpn 2, 2
90 ; PC64LE9-NEXT: xsdivsp 2, 3, 2
91 ; PC64LE9-NEXT: xscvdpspn 34, 0
92 ; PC64LE9-NEXT: lxv 0, 0(3)
93 ; PC64LE9-NEXT: xscvdpspn 1, 1
94 ; PC64LE9-NEXT: xscvdpspn 2, 2
95 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
96 ; PC64LE9-NEXT: xxperm 34, 35, 0
99 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32(
102 metadata !"round.dynamic",
103 metadata !"fpexcept.strict") #1
107 define <3 x double> @constrained_vector_fdiv_v3f64(<3 x double> %x, <3 x double> %y) #0 {
108 ; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
109 ; PC64LE: # %bb.0: # %entry
110 ; PC64LE-NEXT: xxmrghd 0, 5, 4
111 ; PC64LE-NEXT: xxmrghd 1, 2, 1
112 ; PC64LE-NEXT: xsdivdp 3, 3, 6
113 ; PC64LE-NEXT: xvdivdp 2, 1, 0
114 ; PC64LE-NEXT: xxswapd 1, 2
117 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
118 ; PC64LE9: # %bb.0: # %entry
119 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
120 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
121 ; PC64LE9-NEXT: xsdivdp 3, 3, 6
122 ; PC64LE9-NEXT: xvdivdp 2, 1, 0
123 ; PC64LE9-NEXT: xxswapd 1, 2
126 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64(
129 metadata !"round.dynamic",
130 metadata !"fpexcept.strict") #1
131 ret <3 x double> %div
134 define <4 x double> @constrained_vector_fdiv_v4f64(<4 x double> %x, <4 x double> %y) #0 {
135 ; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
136 ; PC64LE: # %bb.0: # %entry
137 ; PC64LE-NEXT: xvdivdp 35, 35, 37
138 ; PC64LE-NEXT: xvdivdp 34, 34, 36
141 ; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
142 ; PC64LE9: # %bb.0: # %entry
143 ; PC64LE9-NEXT: xvdivdp 35, 35, 37
144 ; PC64LE9-NEXT: xvdivdp 34, 34, 36
147 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64(
150 metadata !"round.dynamic",
151 metadata !"fpexcept.strict") #1
152 ret <4 x double> %div
155 define <1 x float> @constrained_vector_frem_v1f32(<1 x float> %x, <1 x float> %y) #0 {
156 ; PC64LE-LABEL: constrained_vector_frem_v1f32:
157 ; PC64LE: # %bb.0: # %entry
158 ; PC64LE-NEXT: mflr 0
159 ; PC64LE-NEXT: stdu 1, -32(1)
160 ; PC64LE-NEXT: std 0, 48(1)
161 ; PC64LE-NEXT: bl fmodf
163 ; PC64LE-NEXT: addi 1, 1, 32
164 ; PC64LE-NEXT: ld 0, 16(1)
165 ; PC64LE-NEXT: mtlr 0
168 ; PC64LE9-LABEL: constrained_vector_frem_v1f32:
169 ; PC64LE9: # %bb.0: # %entry
170 ; PC64LE9-NEXT: mflr 0
171 ; PC64LE9-NEXT: stdu 1, -32(1)
172 ; PC64LE9-NEXT: std 0, 48(1)
173 ; PC64LE9-NEXT: bl fmodf
175 ; PC64LE9-NEXT: addi 1, 1, 32
176 ; PC64LE9-NEXT: ld 0, 16(1)
177 ; PC64LE9-NEXT: mtlr 0
180 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32(
183 metadata !"round.dynamic",
184 metadata !"fpexcept.strict") #1
188 define <2 x double> @constrained_vector_frem_v2f64(<2 x double> %x, <2 x double> %y) #0 {
189 ; PC64LE-LABEL: constrained_vector_frem_v2f64:
190 ; PC64LE: # %bb.0: # %entry
191 ; PC64LE-NEXT: mflr 0
192 ; PC64LE-NEXT: stdu 1, -96(1)
193 ; PC64LE-NEXT: li 3, 48
194 ; PC64LE-NEXT: std 0, 112(1)
195 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
196 ; PC64LE-NEXT: li 3, 64
197 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
198 ; PC64LE-NEXT: li 3, 80
199 ; PC64LE-NEXT: vmr 30, 2
200 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
201 ; PC64LE-NEXT: vmr 31, 3
202 ; PC64LE-NEXT: xxlor 1, 62, 62
203 ; PC64LE-NEXT: xxlor 2, 63, 63
204 ; PC64LE-NEXT: bl fmod
206 ; PC64LE-NEXT: xxlor 61, 1, 1
207 ; PC64LE-NEXT: xxswapd 1, 62
208 ; PC64LE-NEXT: xxswapd 2, 63
209 ; PC64LE-NEXT: bl fmod
211 ; PC64LE-NEXT: li 3, 80
212 ; PC64LE-NEXT: xxmrghd 34, 61, 1
213 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
214 ; PC64LE-NEXT: li 3, 64
215 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
216 ; PC64LE-NEXT: li 3, 48
217 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
218 ; PC64LE-NEXT: addi 1, 1, 96
219 ; PC64LE-NEXT: ld 0, 16(1)
220 ; PC64LE-NEXT: mtlr 0
223 ; PC64LE9-LABEL: constrained_vector_frem_v2f64:
224 ; PC64LE9: # %bb.0: # %entry
225 ; PC64LE9-NEXT: mflr 0
226 ; PC64LE9-NEXT: stdu 1, -80(1)
227 ; PC64LE9-NEXT: std 0, 96(1)
228 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
229 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
230 ; PC64LE9-NEXT: vmr 31, 3
231 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
232 ; PC64LE9-NEXT: vmr 30, 2
233 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
234 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
235 ; PC64LE9-NEXT: bl fmod
237 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
238 ; PC64LE9-NEXT: xxswapd 1, 62
239 ; PC64LE9-NEXT: xxswapd 2, 63
240 ; PC64LE9-NEXT: bl fmod
242 ; PC64LE9-NEXT: xxmrghd 34, 61, 1
243 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
244 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
245 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
246 ; PC64LE9-NEXT: addi 1, 1, 80
247 ; PC64LE9-NEXT: ld 0, 16(1)
248 ; PC64LE9-NEXT: mtlr 0
251 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64(
254 metadata !"round.dynamic",
255 metadata !"fpexcept.strict") #1
256 ret <2 x double> %rem
259 define <3 x float> @constrained_vector_frem_v3f32(<3 x float> %x, <3 x float> %y) #0 {
260 ; PC64LE-LABEL: constrained_vector_frem_v3f32:
261 ; PC64LE: # %bb.0: # %entry
262 ; PC64LE-NEXT: mflr 0
263 ; PC64LE-NEXT: stdu 1, -96(1)
264 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
265 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
266 ; PC64LE-NEXT: li 3, 48
267 ; PC64LE-NEXT: std 0, 112(1)
268 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
269 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
270 ; PC64LE-NEXT: xscvspdpn 1, 0
271 ; PC64LE-NEXT: xscvspdpn 2, 2
272 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
273 ; PC64LE-NEXT: li 3, 64
274 ; PC64LE-NEXT: vmr 30, 2
275 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
276 ; PC64LE-NEXT: vmr 31, 3
277 ; PC64LE-NEXT: bl fmodf
279 ; PC64LE-NEXT: xxswapd 0, 62
280 ; PC64LE-NEXT: xxswapd 2, 63
281 ; PC64LE-NEXT: fmr 31, 1
282 ; PC64LE-NEXT: xscvspdpn 1, 0
283 ; PC64LE-NEXT: xscvspdpn 2, 2
284 ; PC64LE-NEXT: bl fmodf
286 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
287 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
288 ; PC64LE-NEXT: fmr 30, 1
289 ; PC64LE-NEXT: xscvspdpn 1, 0
290 ; PC64LE-NEXT: xscvspdpn 2, 2
291 ; PC64LE-NEXT: bl fmodf
293 ; PC64LE-NEXT: xscvdpspn 0, 1
294 ; PC64LE-NEXT: xscvdpspn 1, 30
295 ; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha
296 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
297 ; PC64LE-NEXT: xscvdpspn 36, 31
298 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
299 ; PC64LE-NEXT: addi 3, 3, .LCPI7_0@toc@l
300 ; PC64LE-NEXT: xxmrghw 34, 1, 0
301 ; PC64LE-NEXT: lxvd2x 0, 0, 3
302 ; PC64LE-NEXT: li 3, 64
303 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
304 ; PC64LE-NEXT: li 3, 48
305 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
306 ; PC64LE-NEXT: xxswapd 35, 0
307 ; PC64LE-NEXT: vperm 2, 4, 2, 3
308 ; PC64LE-NEXT: addi 1, 1, 96
309 ; PC64LE-NEXT: ld 0, 16(1)
310 ; PC64LE-NEXT: mtlr 0
313 ; PC64LE9-LABEL: constrained_vector_frem_v3f32:
314 ; PC64LE9: # %bb.0: # %entry
315 ; PC64LE9-NEXT: mflr 0
316 ; PC64LE9-NEXT: stdu 1, -80(1)
317 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
318 ; PC64LE9-NEXT: std 0, 96(1)
319 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
320 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
321 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
322 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
323 ; PC64LE9-NEXT: xscvspdpn 1, 0
324 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
325 ; PC64LE9-NEXT: vmr 31, 3
326 ; PC64LE9-NEXT: vmr 30, 2
327 ; PC64LE9-NEXT: xscvspdpn 2, 0
328 ; PC64LE9-NEXT: bl fmodf
330 ; PC64LE9-NEXT: xxswapd 0, 62
331 ; PC64LE9-NEXT: fmr 31, 1
332 ; PC64LE9-NEXT: xscvspdpn 1, 0
333 ; PC64LE9-NEXT: xxswapd 0, 63
334 ; PC64LE9-NEXT: xscvspdpn 2, 0
335 ; PC64LE9-NEXT: bl fmodf
337 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
338 ; PC64LE9-NEXT: fmr 30, 1
339 ; PC64LE9-NEXT: xscvspdpn 1, 0
340 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
341 ; PC64LE9-NEXT: xscvspdpn 2, 0
342 ; PC64LE9-NEXT: bl fmodf
344 ; PC64LE9-NEXT: xscvdpspn 0, 1
345 ; PC64LE9-NEXT: xscvdpspn 1, 30
346 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha
347 ; PC64LE9-NEXT: xscvdpspn 34, 31
348 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
349 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
350 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
351 ; PC64LE9-NEXT: addi 3, 3, .LCPI7_0@toc@l
352 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
353 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
354 ; PC64LE9-NEXT: lxv 0, 0(3)
355 ; PC64LE9-NEXT: xxperm 34, 35, 0
356 ; PC64LE9-NEXT: addi 1, 1, 80
357 ; PC64LE9-NEXT: ld 0, 16(1)
358 ; PC64LE9-NEXT: mtlr 0
361 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32(
364 metadata !"round.dynamic",
365 metadata !"fpexcept.strict") #1
369 define <3 x double> @constrained_vector_frem_v3f64(<3 x double> %x, <3 x double> %y) #0 {
370 ; PC64LE-LABEL: constrained_vector_frem_v3f64:
371 ; PC64LE: # %bb.0: # %entry
372 ; PC64LE-NEXT: mflr 0
373 ; PC64LE-NEXT: stdu 1, -96(1)
374 ; PC64LE-NEXT: std 0, 112(1)
375 ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill
376 ; PC64LE-NEXT: fmr 28, 2
377 ; PC64LE-NEXT: fmr 2, 4
378 ; PC64LE-NEXT: li 3, 48
379 ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill
380 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
381 ; PC64LE-NEXT: fmr 30, 5
382 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
383 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
384 ; PC64LE-NEXT: fmr 31, 6
385 ; PC64LE-NEXT: fmr 29, 3
386 ; PC64LE-NEXT: bl fmod
388 ; PC64LE-NEXT: xxlor 63, 1, 1
389 ; PC64LE-NEXT: fmr 1, 28
390 ; PC64LE-NEXT: fmr 2, 30
391 ; PC64LE-NEXT: bl fmod
393 ; PC64LE-NEXT: xxmrghd 63, 1, 63
394 ; PC64LE-NEXT: fmr 1, 29
395 ; PC64LE-NEXT: fmr 2, 31
396 ; PC64LE-NEXT: bl fmod
398 ; PC64LE-NEXT: li 3, 48
399 ; PC64LE-NEXT: fmr 3, 1
400 ; PC64LE-NEXT: xxswapd 1, 63
401 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
402 ; PC64LE-NEXT: xxlor 2, 63, 63
403 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
404 ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload
405 ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload
406 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
407 ; PC64LE-NEXT: addi 1, 1, 96
408 ; PC64LE-NEXT: ld 0, 16(1)
409 ; PC64LE-NEXT: mtlr 0
412 ; PC64LE9-LABEL: constrained_vector_frem_v3f64:
413 ; PC64LE9: # %bb.0: # %entry
414 ; PC64LE9-NEXT: mflr 0
415 ; PC64LE9-NEXT: stdu 1, -80(1)
416 ; PC64LE9-NEXT: std 0, 96(1)
417 ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill
418 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
419 ; PC64LE9-NEXT: fmr 28, 2
420 ; PC64LE9-NEXT: fmr 2, 4
421 ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill
422 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
423 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
424 ; PC64LE9-NEXT: fmr 31, 6
425 ; PC64LE9-NEXT: fmr 30, 5
426 ; PC64LE9-NEXT: fmr 29, 3
427 ; PC64LE9-NEXT: bl fmod
429 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
430 ; PC64LE9-NEXT: fmr 1, 28
431 ; PC64LE9-NEXT: fmr 2, 30
432 ; PC64LE9-NEXT: bl fmod
434 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
435 ; PC64LE9-NEXT: fmr 1, 29
436 ; PC64LE9-NEXT: fmr 2, 31
437 ; PC64LE9-NEXT: bl fmod
439 ; PC64LE9-NEXT: fmr 3, 1
440 ; PC64LE9-NEXT: xxswapd 1, 63
441 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
442 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
443 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
444 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
445 ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload
446 ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload
447 ; PC64LE9-NEXT: addi 1, 1, 80
448 ; PC64LE9-NEXT: ld 0, 16(1)
449 ; PC64LE9-NEXT: mtlr 0
452 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64(
455 metadata !"round.dynamic",
456 metadata !"fpexcept.strict") #1
457 ret <3 x double> %rem
460 define <4 x double> @constrained_vector_frem_v4f64(<4 x double> %x, <4 x double> %y) #0 {
461 ; PC64LE-LABEL: constrained_vector_frem_v4f64:
463 ; PC64LE-NEXT: mflr 0
464 ; PC64LE-NEXT: stdu 1, -128(1)
465 ; PC64LE-NEXT: li 3, 48
466 ; PC64LE-NEXT: std 0, 144(1)
467 ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill
468 ; PC64LE-NEXT: li 3, 64
469 ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill
470 ; PC64LE-NEXT: li 3, 80
471 ; PC64LE-NEXT: vmr 28, 2
472 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
473 ; PC64LE-NEXT: li 3, 96
474 ; PC64LE-NEXT: xxlor 1, 60, 60
475 ; PC64LE-NEXT: vmr 29, 3
476 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
477 ; PC64LE-NEXT: vmr 30, 4
478 ; PC64LE-NEXT: li 3, 112
479 ; PC64LE-NEXT: xxlor 2, 62, 62
480 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
481 ; PC64LE-NEXT: vmr 31, 5
482 ; PC64LE-NEXT: bl fmod
484 ; PC64LE-NEXT: xxlor 59, 1, 1
485 ; PC64LE-NEXT: xxswapd 1, 60
486 ; PC64LE-NEXT: xxswapd 2, 62
487 ; PC64LE-NEXT: bl fmod
489 ; PC64LE-NEXT: xxmrghd 62, 59, 1
490 ; PC64LE-NEXT: xxlor 1, 61, 61
491 ; PC64LE-NEXT: xxlor 2, 63, 63
492 ; PC64LE-NEXT: bl fmod
494 ; PC64LE-NEXT: xxlor 60, 1, 1
495 ; PC64LE-NEXT: xxswapd 1, 61
496 ; PC64LE-NEXT: xxswapd 2, 63
497 ; PC64LE-NEXT: bl fmod
499 ; PC64LE-NEXT: li 3, 112
500 ; PC64LE-NEXT: vmr 2, 30
501 ; PC64LE-NEXT: xxmrghd 35, 60, 1
502 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
503 ; PC64LE-NEXT: li 3, 96
504 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
505 ; PC64LE-NEXT: li 3, 80
506 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
507 ; PC64LE-NEXT: li 3, 64
508 ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload
509 ; PC64LE-NEXT: li 3, 48
510 ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload
511 ; PC64LE-NEXT: addi 1, 1, 128
512 ; PC64LE-NEXT: ld 0, 16(1)
513 ; PC64LE-NEXT: mtlr 0
516 ; PC64LE9-LABEL: constrained_vector_frem_v4f64:
518 ; PC64LE9-NEXT: mflr 0
519 ; PC64LE9-NEXT: stdu 1, -112(1)
520 ; PC64LE9-NEXT: std 0, 128(1)
521 ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill
522 ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill
523 ; PC64LE9-NEXT: vmr 30, 4
524 ; PC64LE9-NEXT: xscpsgndp 2, 62, 62
525 ; PC64LE9-NEXT: vmr 28, 2
526 ; PC64LE9-NEXT: xscpsgndp 1, 60, 60
527 ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill
528 ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill
529 ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill
530 ; PC64LE9-NEXT: vmr 31, 5
531 ; PC64LE9-NEXT: vmr 29, 3
532 ; PC64LE9-NEXT: bl fmod
534 ; PC64LE9-NEXT: xscpsgndp 59, 1, 1
535 ; PC64LE9-NEXT: xxswapd 1, 60
536 ; PC64LE9-NEXT: xxswapd 2, 62
537 ; PC64LE9-NEXT: bl fmod
539 ; PC64LE9-NEXT: xxmrghd 62, 59, 1
540 ; PC64LE9-NEXT: xscpsgndp 1, 61, 61
541 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
542 ; PC64LE9-NEXT: bl fmod
544 ; PC64LE9-NEXT: xscpsgndp 60, 1, 1
545 ; PC64LE9-NEXT: xxswapd 1, 61
546 ; PC64LE9-NEXT: xxswapd 2, 63
547 ; PC64LE9-NEXT: bl fmod
549 ; PC64LE9-NEXT: xxmrghd 35, 60, 1
550 ; PC64LE9-NEXT: vmr 2, 30
551 ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload
552 ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload
553 ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload
554 ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload
555 ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload
556 ; PC64LE9-NEXT: addi 1, 1, 112
557 ; PC64LE9-NEXT: ld 0, 16(1)
558 ; PC64LE9-NEXT: mtlr 0
560 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64(
563 metadata !"round.dynamic",
564 metadata !"fpexcept.strict") #1
565 ret <4 x double> %rem
568 define <1 x float> @constrained_vector_fmul_v1f32(<1 x float> %x, <1 x float> %y) #0 {
569 ; PC64LE-LABEL: constrained_vector_fmul_v1f32:
570 ; PC64LE: # %bb.0: # %entry
571 ; PC64LE-NEXT: xsmulsp 1, 1, 2
574 ; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
575 ; PC64LE9: # %bb.0: # %entry
576 ; PC64LE9-NEXT: xsmulsp 1, 1, 2
579 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
582 metadata !"round.dynamic",
583 metadata !"fpexcept.strict") #1
587 define <2 x double> @constrained_vector_fmul_v2f64(<2 x double> %x, <2 x double> %y) #0 {
588 ; PC64LE-LABEL: constrained_vector_fmul_v2f64:
589 ; PC64LE: # %bb.0: # %entry
590 ; PC64LE-NEXT: xvmuldp 34, 34, 35
593 ; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
594 ; PC64LE9: # %bb.0: # %entry
595 ; PC64LE9-NEXT: xvmuldp 34, 34, 35
598 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(
601 metadata !"round.dynamic",
602 metadata !"fpexcept.strict") #1
603 ret <2 x double> %mul
606 define <3 x float> @constrained_vector_fmul_v3f32(<3 x float> %x, <3 x float> %y) #0 {
607 ; PC64LE-LABEL: constrained_vector_fmul_v3f32:
608 ; PC64LE: # %bb.0: # %entry
609 ; PC64LE-NEXT: xxswapd 0, 35
610 ; PC64LE-NEXT: xxswapd 1, 34
611 ; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha
612 ; PC64LE-NEXT: xscvspdpn 0, 0
613 ; PC64LE-NEXT: xscvspdpn 1, 1
614 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
615 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
616 ; PC64LE-NEXT: addi 3, 3, .LCPI12_0@toc@l
617 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
618 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
619 ; PC64LE-NEXT: xsmulsp 0, 1, 0
620 ; PC64LE-NEXT: xscvspdpn 1, 2
621 ; PC64LE-NEXT: xscvspdpn 2, 3
622 ; PC64LE-NEXT: xsmulsp 1, 2, 1
623 ; PC64LE-NEXT: xscvdpspn 0, 0
624 ; PC64LE-NEXT: xscvdpspn 1, 1
625 ; PC64LE-NEXT: xxmrghw 34, 0, 1
626 ; PC64LE-NEXT: lxvd2x 0, 0, 3
627 ; PC64LE-NEXT: xscvspdpn 1, 5
628 ; PC64LE-NEXT: xxswapd 35, 0
629 ; PC64LE-NEXT: xscvspdpn 0, 4
630 ; PC64LE-NEXT: xsmulsp 0, 1, 0
631 ; PC64LE-NEXT: xscvdpspn 36, 0
632 ; PC64LE-NEXT: vperm 2, 4, 2, 3
635 ; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
636 ; PC64LE9: # %bb.0: # %entry
637 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
638 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
639 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha
640 ; PC64LE9-NEXT: addi 3, 3, .LCPI12_0@toc@l
641 ; PC64LE9-NEXT: xxswapd 2, 34
642 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
643 ; PC64LE9-NEXT: xscvspdpn 0, 0
644 ; PC64LE9-NEXT: xscvspdpn 1, 1
645 ; PC64LE9-NEXT: xscvspdpn 2, 2
646 ; PC64LE9-NEXT: xscvspdpn 3, 3
647 ; PC64LE9-NEXT: xsmulsp 0, 1, 0
648 ; PC64LE9-NEXT: xxswapd 1, 35
649 ; PC64LE9-NEXT: xscvspdpn 1, 1
650 ; PC64LE9-NEXT: xsmulsp 1, 2, 1
651 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
652 ; PC64LE9-NEXT: xscvdpspn 34, 0
653 ; PC64LE9-NEXT: lxv 0, 0(3)
654 ; PC64LE9-NEXT: xscvspdpn 2, 2
655 ; PC64LE9-NEXT: xsmulsp 2, 3, 2
656 ; PC64LE9-NEXT: xscvdpspn 1, 1
657 ; PC64LE9-NEXT: xscvdpspn 2, 2
658 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
659 ; PC64LE9-NEXT: xxperm 34, 35, 0
662 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32(
665 metadata !"round.dynamic",
666 metadata !"fpexcept.strict") #1
670 define <3 x double> @constrained_vector_fmul_v3f64(<3 x double> %x, <3 x double> %y) #0 {
671 ; PC64LE-LABEL: constrained_vector_fmul_v3f64:
672 ; PC64LE: # %bb.0: # %entry
673 ; PC64LE-NEXT: xxmrghd 0, 5, 4
674 ; PC64LE-NEXT: xxmrghd 1, 2, 1
675 ; PC64LE-NEXT: xsmuldp 3, 3, 6
676 ; PC64LE-NEXT: xvmuldp 2, 1, 0
677 ; PC64LE-NEXT: xxswapd 1, 2
680 ; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
681 ; PC64LE9: # %bb.0: # %entry
682 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
683 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
684 ; PC64LE9-NEXT: xsmuldp 3, 3, 6
685 ; PC64LE9-NEXT: xvmuldp 2, 1, 0
686 ; PC64LE9-NEXT: xxswapd 1, 2
689 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
692 metadata !"round.dynamic",
693 metadata !"fpexcept.strict") #1
694 ret <3 x double> %mul
697 define <4 x double> @constrained_vector_fmul_v4f64(<4 x double> %x, <4 x double> %y) #0 {
698 ; PC64LE-LABEL: constrained_vector_fmul_v4f64:
699 ; PC64LE: # %bb.0: # %entry
700 ; PC64LE-NEXT: xvmuldp 35, 35, 37
701 ; PC64LE-NEXT: xvmuldp 34, 34, 36
704 ; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
705 ; PC64LE9: # %bb.0: # %entry
706 ; PC64LE9-NEXT: xvmuldp 35, 35, 37
707 ; PC64LE9-NEXT: xvmuldp 34, 34, 36
710 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(
713 metadata !"round.dynamic",
714 metadata !"fpexcept.strict") #1
715 ret <4 x double> %mul
718 define <1 x float> @constrained_vector_fadd_v1f32(<1 x float> %x, <1 x float> %y) #0 {
719 ; PC64LE-LABEL: constrained_vector_fadd_v1f32:
720 ; PC64LE: # %bb.0: # %entry
721 ; PC64LE-NEXT: xsaddsp 1, 1, 2
724 ; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
725 ; PC64LE9: # %bb.0: # %entry
726 ; PC64LE9-NEXT: xsaddsp 1, 1, 2
729 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
732 metadata !"round.dynamic",
733 metadata !"fpexcept.strict") #1
737 define <2 x double> @constrained_vector_fadd_v2f64(<2 x double> %x, <2 x double> %y) #0 {
738 ; PC64LE-LABEL: constrained_vector_fadd_v2f64:
739 ; PC64LE: # %bb.0: # %entry
740 ; PC64LE-NEXT: xvadddp 34, 34, 35
743 ; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
744 ; PC64LE9: # %bb.0: # %entry
745 ; PC64LE9-NEXT: xvadddp 34, 34, 35
748 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(
751 metadata !"round.dynamic",
752 metadata !"fpexcept.strict") #1
753 ret <2 x double> %add
756 define <3 x float> @constrained_vector_fadd_v3f32(<3 x float> %x, <3 x float> %y) #0 {
757 ; PC64LE-LABEL: constrained_vector_fadd_v3f32:
758 ; PC64LE: # %bb.0: # %entry
759 ; PC64LE-NEXT: xxswapd 0, 35
760 ; PC64LE-NEXT: xxswapd 1, 34
761 ; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha
762 ; PC64LE-NEXT: xscvspdpn 0, 0
763 ; PC64LE-NEXT: xscvspdpn 1, 1
764 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
765 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
766 ; PC64LE-NEXT: addi 3, 3, .LCPI17_0@toc@l
767 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
768 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
769 ; PC64LE-NEXT: xsaddsp 0, 1, 0
770 ; PC64LE-NEXT: xscvspdpn 1, 2
771 ; PC64LE-NEXT: xscvspdpn 2, 3
772 ; PC64LE-NEXT: xsaddsp 1, 2, 1
773 ; PC64LE-NEXT: xscvdpspn 0, 0
774 ; PC64LE-NEXT: xscvdpspn 1, 1
775 ; PC64LE-NEXT: xxmrghw 34, 0, 1
776 ; PC64LE-NEXT: lxvd2x 0, 0, 3
777 ; PC64LE-NEXT: xscvspdpn 1, 5
778 ; PC64LE-NEXT: xxswapd 35, 0
779 ; PC64LE-NEXT: xscvspdpn 0, 4
780 ; PC64LE-NEXT: xsaddsp 0, 1, 0
781 ; PC64LE-NEXT: xscvdpspn 36, 0
782 ; PC64LE-NEXT: vperm 2, 4, 2, 3
785 ; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
786 ; PC64LE9: # %bb.0: # %entry
787 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
788 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
789 ; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha
790 ; PC64LE9-NEXT: addi 3, 3, .LCPI17_0@toc@l
791 ; PC64LE9-NEXT: xxswapd 2, 34
792 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
793 ; PC64LE9-NEXT: xscvspdpn 0, 0
794 ; PC64LE9-NEXT: xscvspdpn 1, 1
795 ; PC64LE9-NEXT: xscvspdpn 2, 2
796 ; PC64LE9-NEXT: xscvspdpn 3, 3
797 ; PC64LE9-NEXT: xsaddsp 0, 1, 0
798 ; PC64LE9-NEXT: xxswapd 1, 35
799 ; PC64LE9-NEXT: xscvspdpn 1, 1
800 ; PC64LE9-NEXT: xsaddsp 1, 2, 1
801 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
802 ; PC64LE9-NEXT: xscvdpspn 34, 0
803 ; PC64LE9-NEXT: lxv 0, 0(3)
804 ; PC64LE9-NEXT: xscvspdpn 2, 2
805 ; PC64LE9-NEXT: xsaddsp 2, 3, 2
806 ; PC64LE9-NEXT: xscvdpspn 1, 1
807 ; PC64LE9-NEXT: xscvdpspn 2, 2
808 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
809 ; PC64LE9-NEXT: xxperm 34, 35, 0
812 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32(
815 metadata !"round.dynamic",
816 metadata !"fpexcept.strict") #1
820 define <3 x double> @constrained_vector_fadd_v3f64(<3 x double> %x, <3 x double> %y) #0 {
821 ; PC64LE-LABEL: constrained_vector_fadd_v3f64:
822 ; PC64LE: # %bb.0: # %entry
823 ; PC64LE-NEXT: xxmrghd 0, 5, 4
824 ; PC64LE-NEXT: xxmrghd 1, 2, 1
825 ; PC64LE-NEXT: xsadddp 3, 3, 6
826 ; PC64LE-NEXT: xvadddp 2, 1, 0
827 ; PC64LE-NEXT: xxswapd 1, 2
830 ; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
831 ; PC64LE9: # %bb.0: # %entry
832 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
833 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
834 ; PC64LE9-NEXT: xsadddp 3, 3, 6
835 ; PC64LE9-NEXT: xvadddp 2, 1, 0
836 ; PC64LE9-NEXT: xxswapd 1, 2
839 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
842 metadata !"round.dynamic",
843 metadata !"fpexcept.strict") #1
844 ret <3 x double> %add
847 define <4 x double> @constrained_vector_fadd_v4f64(<4 x double> %x, <4 x double> %y) #0 {
848 ; PC64LE-LABEL: constrained_vector_fadd_v4f64:
849 ; PC64LE: # %bb.0: # %entry
850 ; PC64LE-NEXT: xvadddp 35, 35, 37
851 ; PC64LE-NEXT: xvadddp 34, 34, 36
854 ; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
855 ; PC64LE9: # %bb.0: # %entry
856 ; PC64LE9-NEXT: xvadddp 35, 35, 37
857 ; PC64LE9-NEXT: xvadddp 34, 34, 36
860 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64(
863 metadata !"round.dynamic",
864 metadata !"fpexcept.strict") #1
865 ret <4 x double> %add
868 define <1 x float> @constrained_vector_fsub_v1f32(<1 x float> %x, <1 x float> %y) #0 {
869 ; PC64LE-LABEL: constrained_vector_fsub_v1f32:
870 ; PC64LE: # %bb.0: # %entry
871 ; PC64LE-NEXT: xssubsp 1, 1, 2
874 ; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
875 ; PC64LE9: # %bb.0: # %entry
876 ; PC64LE9-NEXT: xssubsp 1, 1, 2
879 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
882 metadata !"round.dynamic",
883 metadata !"fpexcept.strict") #1
887 define <2 x double> @constrained_vector_fsub_v2f64(<2 x double> %x, <2 x double> %y) #0 {
888 ; PC64LE-LABEL: constrained_vector_fsub_v2f64:
889 ; PC64LE: # %bb.0: # %entry
890 ; PC64LE-NEXT: xvsubdp 34, 34, 35
893 ; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
894 ; PC64LE9: # %bb.0: # %entry
895 ; PC64LE9-NEXT: xvsubdp 34, 34, 35
898 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(
901 metadata !"round.dynamic",
902 metadata !"fpexcept.strict") #1
903 ret <2 x double> %sub
906 define <3 x float> @constrained_vector_fsub_v3f32(<3 x float> %x, <3 x float> %y) #0 {
907 ; PC64LE-LABEL: constrained_vector_fsub_v3f32:
908 ; PC64LE: # %bb.0: # %entry
909 ; PC64LE-NEXT: xxswapd 0, 35
910 ; PC64LE-NEXT: xxswapd 1, 34
911 ; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha
912 ; PC64LE-NEXT: xscvspdpn 0, 0
913 ; PC64LE-NEXT: xscvspdpn 1, 1
914 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
915 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
916 ; PC64LE-NEXT: addi 3, 3, .LCPI22_0@toc@l
917 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
918 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
919 ; PC64LE-NEXT: xssubsp 0, 1, 0
920 ; PC64LE-NEXT: xscvspdpn 1, 2
921 ; PC64LE-NEXT: xscvspdpn 2, 3
922 ; PC64LE-NEXT: xssubsp 1, 2, 1
923 ; PC64LE-NEXT: xscvdpspn 0, 0
924 ; PC64LE-NEXT: xscvdpspn 1, 1
925 ; PC64LE-NEXT: xxmrghw 34, 0, 1
926 ; PC64LE-NEXT: lxvd2x 0, 0, 3
927 ; PC64LE-NEXT: xscvspdpn 1, 5
928 ; PC64LE-NEXT: xxswapd 35, 0
929 ; PC64LE-NEXT: xscvspdpn 0, 4
930 ; PC64LE-NEXT: xssubsp 0, 1, 0
931 ; PC64LE-NEXT: xscvdpspn 36, 0
932 ; PC64LE-NEXT: vperm 2, 4, 2, 3
935 ; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
936 ; PC64LE9: # %bb.0: # %entry
937 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
938 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
939 ; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha
940 ; PC64LE9-NEXT: addi 3, 3, .LCPI22_0@toc@l
941 ; PC64LE9-NEXT: xxswapd 2, 34
942 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
943 ; PC64LE9-NEXT: xscvspdpn 0, 0
944 ; PC64LE9-NEXT: xscvspdpn 1, 1
945 ; PC64LE9-NEXT: xscvspdpn 2, 2
946 ; PC64LE9-NEXT: xscvspdpn 3, 3
947 ; PC64LE9-NEXT: xssubsp 0, 1, 0
948 ; PC64LE9-NEXT: xxswapd 1, 35
949 ; PC64LE9-NEXT: xscvspdpn 1, 1
950 ; PC64LE9-NEXT: xssubsp 1, 2, 1
951 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
952 ; PC64LE9-NEXT: xscvdpspn 34, 0
953 ; PC64LE9-NEXT: lxv 0, 0(3)
954 ; PC64LE9-NEXT: xscvspdpn 2, 2
955 ; PC64LE9-NEXT: xssubsp 2, 3, 2
956 ; PC64LE9-NEXT: xscvdpspn 1, 1
957 ; PC64LE9-NEXT: xscvdpspn 2, 2
958 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
959 ; PC64LE9-NEXT: xxperm 34, 35, 0
962 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(
965 metadata !"round.dynamic",
966 metadata !"fpexcept.strict") #1
970 define <3 x double> @constrained_vector_fsub_v3f64(<3 x double> %x, <3 x double> %y) #0 {
971 ; PC64LE-LABEL: constrained_vector_fsub_v3f64:
972 ; PC64LE: # %bb.0: # %entry
973 ; PC64LE-NEXT: xxmrghd 0, 5, 4
974 ; PC64LE-NEXT: xxmrghd 1, 2, 1
975 ; PC64LE-NEXT: xssubdp 3, 3, 6
976 ; PC64LE-NEXT: xvsubdp 2, 1, 0
977 ; PC64LE-NEXT: xxswapd 1, 2
980 ; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
981 ; PC64LE9: # %bb.0: # %entry
982 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
983 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
984 ; PC64LE9-NEXT: xssubdp 3, 3, 6
985 ; PC64LE9-NEXT: xvsubdp 2, 1, 0
986 ; PC64LE9-NEXT: xxswapd 1, 2
989 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
992 metadata !"round.dynamic",
993 metadata !"fpexcept.strict") #1
994 ret <3 x double> %sub
997 define <4 x double> @constrained_vector_fsub_v4f64(<4 x double> %x, <4 x double> %y) #0 {
998 ; PC64LE-LABEL: constrained_vector_fsub_v4f64:
999 ; PC64LE: # %bb.0: # %entry
1000 ; PC64LE-NEXT: xvsubdp 35, 35, 37
1001 ; PC64LE-NEXT: xvsubdp 34, 34, 36
1004 ; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
1005 ; PC64LE9: # %bb.0: # %entry
1006 ; PC64LE9-NEXT: xvsubdp 35, 35, 37
1007 ; PC64LE9-NEXT: xvsubdp 34, 34, 36
1010 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(
1013 metadata !"round.dynamic",
1014 metadata !"fpexcept.strict") #1
1015 ret <4 x double> %sub
1018 define <1 x float> @constrained_vector_sqrt_v1f32(<1 x float> %x) #0 {
1019 ; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
1020 ; PC64LE: # %bb.0: # %entry
1021 ; PC64LE-NEXT: xssqrtsp 1, 1
1024 ; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
1025 ; PC64LE9: # %bb.0: # %entry
1026 ; PC64LE9-NEXT: xssqrtsp 1, 1
1029 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
1031 metadata !"round.dynamic",
1032 metadata !"fpexcept.strict") #1
1033 ret <1 x float> %sqrt
1036 define <2 x double> @constrained_vector_sqrt_v2f64(<2 x double> %x) #0 {
1037 ; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
1038 ; PC64LE: # %bb.0: # %entry
1039 ; PC64LE-NEXT: xvsqrtdp 34, 34
1042 ; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
1043 ; PC64LE9: # %bb.0: # %entry
1044 ; PC64LE9-NEXT: xvsqrtdp 34, 34
1047 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
1049 metadata !"round.dynamic",
1050 metadata !"fpexcept.strict") #1
1051 ret <2 x double> %sqrt
1054 define <3 x float> @constrained_vector_sqrt_v3f32(<3 x float> %x) #0 {
1055 ; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
1056 ; PC64LE: # %bb.0: # %entry
1057 ; PC64LE-NEXT: xxswapd 0, 34
1058 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
1059 ; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1060 ; PC64LE-NEXT: xscvspdpn 0, 0
1061 ; PC64LE-NEXT: xscvspdpn 1, 1
1062 ; PC64LE-NEXT: addi 3, 3, .LCPI27_0@toc@l
1063 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
1064 ; PC64LE-NEXT: xssqrtsp 0, 0
1065 ; PC64LE-NEXT: xssqrtsp 1, 1
1066 ; PC64LE-NEXT: xscvdpspn 1, 1
1067 ; PC64LE-NEXT: xscvdpspn 0, 0
1068 ; PC64LE-NEXT: xxmrghw 34, 0, 1
1069 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1070 ; PC64LE-NEXT: xxswapd 35, 0
1071 ; PC64LE-NEXT: xscvspdpn 0, 2
1072 ; PC64LE-NEXT: xssqrtsp 0, 0
1073 ; PC64LE-NEXT: xscvdpspn 36, 0
1074 ; PC64LE-NEXT: vperm 2, 4, 2, 3
1077 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
1078 ; PC64LE9: # %bb.0: # %entry
1079 ; PC64LE9-NEXT: xxswapd 1, 34
1080 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
1081 ; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1082 ; PC64LE9-NEXT: addi 3, 3, .LCPI27_0@toc@l
1083 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1084 ; PC64LE9-NEXT: xscvspdpn 1, 1
1085 ; PC64LE9-NEXT: xscvspdpn 2, 2
1086 ; PC64LE9-NEXT: xscvspdpn 0, 0
1087 ; PC64LE9-NEXT: xssqrtsp 1, 1
1088 ; PC64LE9-NEXT: xssqrtsp 2, 2
1089 ; PC64LE9-NEXT: xssqrtsp 0, 0
1090 ; PC64LE9-NEXT: xscvdpspn 2, 2
1091 ; PC64LE9-NEXT: xscvdpspn 1, 1
1092 ; PC64LE9-NEXT: xscvdpspn 34, 0
1093 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
1094 ; PC64LE9-NEXT: lxv 1, 0(3)
1095 ; PC64LE9-NEXT: xxperm 34, 35, 1
1098 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
1100 metadata !"round.dynamic",
1101 metadata !"fpexcept.strict") #1
1102 ret <3 x float> %sqrt
1105 define <3 x double> @constrained_vector_sqrt_v3f64(<3 x double> %x) #0 {
1106 ; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
1107 ; PC64LE: # %bb.0: # %entry
1108 ; PC64LE-NEXT: xxmrghd 0, 2, 1
1109 ; PC64LE-NEXT: xssqrtdp 3, 3
1110 ; PC64LE-NEXT: xvsqrtdp 2, 0
1111 ; PC64LE-NEXT: xxswapd 1, 2
1114 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
1115 ; PC64LE9: # %bb.0: # %entry
1116 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
1117 ; PC64LE9-NEXT: xssqrtdp 3, 3
1118 ; PC64LE9-NEXT: xvsqrtdp 2, 0
1119 ; PC64LE9-NEXT: xxswapd 1, 2
1122 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
1124 metadata !"round.dynamic",
1125 metadata !"fpexcept.strict") #1
1126 ret <3 x double> %sqrt
1129 define <4 x double> @constrained_vector_sqrt_v4f64(<4 x double> %x) #0 {
1130 ; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
1131 ; PC64LE: # %bb.0: # %entry
1132 ; PC64LE-NEXT: xvsqrtdp 35, 35
1133 ; PC64LE-NEXT: xvsqrtdp 34, 34
1136 ; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
1137 ; PC64LE9: # %bb.0: # %entry
1138 ; PC64LE9-NEXT: xvsqrtdp 35, 35
1139 ; PC64LE9-NEXT: xvsqrtdp 34, 34
1142 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(
1144 metadata !"round.dynamic",
1145 metadata !"fpexcept.strict") #1
1146 ret <4 x double> %sqrt
1149 define <1 x float> @constrained_vector_pow_v1f32(<1 x float> %x, <1 x float> %y) #0 {
1150 ; PC64LE-LABEL: constrained_vector_pow_v1f32:
1151 ; PC64LE: # %bb.0: # %entry
1152 ; PC64LE-NEXT: mflr 0
1153 ; PC64LE-NEXT: stdu 1, -32(1)
1154 ; PC64LE-NEXT: std 0, 48(1)
1155 ; PC64LE-NEXT: bl powf
1157 ; PC64LE-NEXT: addi 1, 1, 32
1158 ; PC64LE-NEXT: ld 0, 16(1)
1159 ; PC64LE-NEXT: mtlr 0
1162 ; PC64LE9-LABEL: constrained_vector_pow_v1f32:
1163 ; PC64LE9: # %bb.0: # %entry
1164 ; PC64LE9-NEXT: mflr 0
1165 ; PC64LE9-NEXT: stdu 1, -32(1)
1166 ; PC64LE9-NEXT: std 0, 48(1)
1167 ; PC64LE9-NEXT: bl powf
1169 ; PC64LE9-NEXT: addi 1, 1, 32
1170 ; PC64LE9-NEXT: ld 0, 16(1)
1171 ; PC64LE9-NEXT: mtlr 0
1174 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
1177 metadata !"round.dynamic",
1178 metadata !"fpexcept.strict") #1
1179 ret <1 x float> %pow
1182 define <2 x double> @constrained_vector_pow_v2f64(<2 x double> %x, <2 x double> %y) #0 {
1183 ; PC64LE-LABEL: constrained_vector_pow_v2f64:
1184 ; PC64LE: # %bb.0: # %entry
1185 ; PC64LE-NEXT: mflr 0
1186 ; PC64LE-NEXT: stdu 1, -96(1)
1187 ; PC64LE-NEXT: li 3, 48
1188 ; PC64LE-NEXT: std 0, 112(1)
1189 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1190 ; PC64LE-NEXT: li 3, 64
1191 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1192 ; PC64LE-NEXT: li 3, 80
1193 ; PC64LE-NEXT: vmr 30, 2
1194 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1195 ; PC64LE-NEXT: vmr 31, 3
1196 ; PC64LE-NEXT: xxlor 1, 62, 62
1197 ; PC64LE-NEXT: xxlor 2, 63, 63
1198 ; PC64LE-NEXT: bl pow
1200 ; PC64LE-NEXT: xxlor 61, 1, 1
1201 ; PC64LE-NEXT: xxswapd 1, 62
1202 ; PC64LE-NEXT: xxswapd 2, 63
1203 ; PC64LE-NEXT: bl pow
1205 ; PC64LE-NEXT: li 3, 80
1206 ; PC64LE-NEXT: xxmrghd 34, 61, 1
1207 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1208 ; PC64LE-NEXT: li 3, 64
1209 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1210 ; PC64LE-NEXT: li 3, 48
1211 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
1212 ; PC64LE-NEXT: addi 1, 1, 96
1213 ; PC64LE-NEXT: ld 0, 16(1)
1214 ; PC64LE-NEXT: mtlr 0
1217 ; PC64LE9-LABEL: constrained_vector_pow_v2f64:
1218 ; PC64LE9: # %bb.0: # %entry
1219 ; PC64LE9-NEXT: mflr 0
1220 ; PC64LE9-NEXT: stdu 1, -80(1)
1221 ; PC64LE9-NEXT: std 0, 96(1)
1222 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
1223 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
1224 ; PC64LE9-NEXT: vmr 31, 3
1225 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1226 ; PC64LE9-NEXT: vmr 30, 2
1227 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
1228 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
1229 ; PC64LE9-NEXT: bl pow
1231 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
1232 ; PC64LE9-NEXT: xxswapd 1, 62
1233 ; PC64LE9-NEXT: xxswapd 2, 63
1234 ; PC64LE9-NEXT: bl pow
1236 ; PC64LE9-NEXT: xxmrghd 34, 61, 1
1237 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
1238 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
1239 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
1240 ; PC64LE9-NEXT: addi 1, 1, 80
1241 ; PC64LE9-NEXT: ld 0, 16(1)
1242 ; PC64LE9-NEXT: mtlr 0
1245 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64(
1248 metadata !"round.dynamic",
1249 metadata !"fpexcept.strict") #1
1250 ret <2 x double> %pow
1253 define <3 x float> @constrained_vector_pow_v3f32(<3 x float> %x, <3 x float> %y) #0 {
1254 ; PC64LE-LABEL: constrained_vector_pow_v3f32:
1255 ; PC64LE: # %bb.0: # %entry
1256 ; PC64LE-NEXT: mflr 0
1257 ; PC64LE-NEXT: stdu 1, -96(1)
1258 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
1259 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
1260 ; PC64LE-NEXT: li 3, 48
1261 ; PC64LE-NEXT: std 0, 112(1)
1262 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1263 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1264 ; PC64LE-NEXT: xscvspdpn 1, 0
1265 ; PC64LE-NEXT: xscvspdpn 2, 2
1266 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1267 ; PC64LE-NEXT: li 3, 64
1268 ; PC64LE-NEXT: vmr 30, 2
1269 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1270 ; PC64LE-NEXT: vmr 31, 3
1271 ; PC64LE-NEXT: bl powf
1273 ; PC64LE-NEXT: xxswapd 0, 62
1274 ; PC64LE-NEXT: xxswapd 2, 63
1275 ; PC64LE-NEXT: fmr 31, 1
1276 ; PC64LE-NEXT: xscvspdpn 1, 0
1277 ; PC64LE-NEXT: xscvspdpn 2, 2
1278 ; PC64LE-NEXT: bl powf
1280 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
1281 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
1282 ; PC64LE-NEXT: fmr 30, 1
1283 ; PC64LE-NEXT: xscvspdpn 1, 0
1284 ; PC64LE-NEXT: xscvspdpn 2, 2
1285 ; PC64LE-NEXT: bl powf
1287 ; PC64LE-NEXT: xscvdpspn 0, 1
1288 ; PC64LE-NEXT: xscvdpspn 1, 30
1289 ; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1290 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1291 ; PC64LE-NEXT: xscvdpspn 36, 31
1292 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1293 ; PC64LE-NEXT: addi 3, 3, .LCPI32_0@toc@l
1294 ; PC64LE-NEXT: xxmrghw 34, 1, 0
1295 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1296 ; PC64LE-NEXT: li 3, 64
1297 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1298 ; PC64LE-NEXT: li 3, 48
1299 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1300 ; PC64LE-NEXT: xxswapd 35, 0
1301 ; PC64LE-NEXT: vperm 2, 4, 2, 3
1302 ; PC64LE-NEXT: addi 1, 1, 96
1303 ; PC64LE-NEXT: ld 0, 16(1)
1304 ; PC64LE-NEXT: mtlr 0
1307 ; PC64LE9-LABEL: constrained_vector_pow_v3f32:
1308 ; PC64LE9: # %bb.0: # %entry
1309 ; PC64LE9-NEXT: mflr 0
1310 ; PC64LE9-NEXT: stdu 1, -80(1)
1311 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1312 ; PC64LE9-NEXT: std 0, 96(1)
1313 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1314 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
1315 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1316 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1317 ; PC64LE9-NEXT: xscvspdpn 1, 0
1318 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
1319 ; PC64LE9-NEXT: vmr 31, 3
1320 ; PC64LE9-NEXT: vmr 30, 2
1321 ; PC64LE9-NEXT: xscvspdpn 2, 0
1322 ; PC64LE9-NEXT: bl powf
1324 ; PC64LE9-NEXT: xxswapd 0, 62
1325 ; PC64LE9-NEXT: fmr 31, 1
1326 ; PC64LE9-NEXT: xscvspdpn 1, 0
1327 ; PC64LE9-NEXT: xxswapd 0, 63
1328 ; PC64LE9-NEXT: xscvspdpn 2, 0
1329 ; PC64LE9-NEXT: bl powf
1331 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
1332 ; PC64LE9-NEXT: fmr 30, 1
1333 ; PC64LE9-NEXT: xscvspdpn 1, 0
1334 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
1335 ; PC64LE9-NEXT: xscvspdpn 2, 0
1336 ; PC64LE9-NEXT: bl powf
1338 ; PC64LE9-NEXT: xscvdpspn 0, 1
1339 ; PC64LE9-NEXT: xscvdpspn 1, 30
1340 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1341 ; PC64LE9-NEXT: xscvdpspn 34, 31
1342 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1343 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
1344 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1345 ; PC64LE9-NEXT: addi 3, 3, .LCPI32_0@toc@l
1346 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1347 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
1348 ; PC64LE9-NEXT: lxv 0, 0(3)
1349 ; PC64LE9-NEXT: xxperm 34, 35, 0
1350 ; PC64LE9-NEXT: addi 1, 1, 80
1351 ; PC64LE9-NEXT: ld 0, 16(1)
1352 ; PC64LE9-NEXT: mtlr 0
1355 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32(
1358 metadata !"round.dynamic",
1359 metadata !"fpexcept.strict") #1
1360 ret <3 x float> %pow
1363 define <3 x double> @constrained_vector_pow_v3f64(<3 x double> %x, <3 x double> %y) #0 {
1364 ; PC64LE-LABEL: constrained_vector_pow_v3f64:
1365 ; PC64LE: # %bb.0: # %entry
1366 ; PC64LE-NEXT: mflr 0
1367 ; PC64LE-NEXT: stdu 1, -96(1)
1368 ; PC64LE-NEXT: std 0, 112(1)
1369 ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill
1370 ; PC64LE-NEXT: fmr 28, 2
1371 ; PC64LE-NEXT: fmr 2, 4
1372 ; PC64LE-NEXT: li 3, 48
1373 ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill
1374 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1375 ; PC64LE-NEXT: fmr 30, 5
1376 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1377 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1378 ; PC64LE-NEXT: fmr 31, 6
1379 ; PC64LE-NEXT: fmr 29, 3
1380 ; PC64LE-NEXT: bl pow
1382 ; PC64LE-NEXT: xxlor 63, 1, 1
1383 ; PC64LE-NEXT: fmr 1, 28
1384 ; PC64LE-NEXT: fmr 2, 30
1385 ; PC64LE-NEXT: bl pow
1387 ; PC64LE-NEXT: xxmrghd 63, 1, 63
1388 ; PC64LE-NEXT: fmr 1, 29
1389 ; PC64LE-NEXT: fmr 2, 31
1390 ; PC64LE-NEXT: bl pow
1392 ; PC64LE-NEXT: li 3, 48
1393 ; PC64LE-NEXT: fmr 3, 1
1394 ; PC64LE-NEXT: xxswapd 1, 63
1395 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1396 ; PC64LE-NEXT: xxlor 2, 63, 63
1397 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1398 ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload
1399 ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload
1400 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1401 ; PC64LE-NEXT: addi 1, 1, 96
1402 ; PC64LE-NEXT: ld 0, 16(1)
1403 ; PC64LE-NEXT: mtlr 0
1406 ; PC64LE9-LABEL: constrained_vector_pow_v3f64:
1407 ; PC64LE9: # %bb.0: # %entry
1408 ; PC64LE9-NEXT: mflr 0
1409 ; PC64LE9-NEXT: stdu 1, -80(1)
1410 ; PC64LE9-NEXT: std 0, 96(1)
1411 ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill
1412 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1413 ; PC64LE9-NEXT: fmr 28, 2
1414 ; PC64LE9-NEXT: fmr 2, 4
1415 ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill
1416 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1417 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1418 ; PC64LE9-NEXT: fmr 31, 6
1419 ; PC64LE9-NEXT: fmr 30, 5
1420 ; PC64LE9-NEXT: fmr 29, 3
1421 ; PC64LE9-NEXT: bl pow
1423 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
1424 ; PC64LE9-NEXT: fmr 1, 28
1425 ; PC64LE9-NEXT: fmr 2, 30
1426 ; PC64LE9-NEXT: bl pow
1428 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
1429 ; PC64LE9-NEXT: fmr 1, 29
1430 ; PC64LE9-NEXT: fmr 2, 31
1431 ; PC64LE9-NEXT: bl pow
1433 ; PC64LE9-NEXT: fmr 3, 1
1434 ; PC64LE9-NEXT: xxswapd 1, 63
1435 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1436 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1437 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1438 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1439 ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload
1440 ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload
1441 ; PC64LE9-NEXT: addi 1, 1, 80
1442 ; PC64LE9-NEXT: ld 0, 16(1)
1443 ; PC64LE9-NEXT: mtlr 0
1446 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
1449 metadata !"round.dynamic",
1450 metadata !"fpexcept.strict") #1
1451 ret <3 x double> %pow
1454 define <4 x double> @constrained_vector_pow_v4f64(<4 x double> %x, <4 x double> %y) #0 {
1455 ; PC64LE-LABEL: constrained_vector_pow_v4f64:
1456 ; PC64LE: # %bb.0: # %entry
1457 ; PC64LE-NEXT: mflr 0
1458 ; PC64LE-NEXT: stdu 1, -128(1)
1459 ; PC64LE-NEXT: li 3, 48
1460 ; PC64LE-NEXT: std 0, 144(1)
1461 ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill
1462 ; PC64LE-NEXT: li 3, 64
1463 ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill
1464 ; PC64LE-NEXT: li 3, 80
1465 ; PC64LE-NEXT: vmr 28, 2
1466 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1467 ; PC64LE-NEXT: li 3, 96
1468 ; PC64LE-NEXT: xxlor 1, 60, 60
1469 ; PC64LE-NEXT: vmr 29, 3
1470 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1471 ; PC64LE-NEXT: vmr 30, 4
1472 ; PC64LE-NEXT: li 3, 112
1473 ; PC64LE-NEXT: xxlor 2, 62, 62
1474 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1475 ; PC64LE-NEXT: vmr 31, 5
1476 ; PC64LE-NEXT: bl pow
1478 ; PC64LE-NEXT: xxlor 59, 1, 1
1479 ; PC64LE-NEXT: xxswapd 1, 60
1480 ; PC64LE-NEXT: xxswapd 2, 62
1481 ; PC64LE-NEXT: bl pow
1483 ; PC64LE-NEXT: xxmrghd 62, 59, 1
1484 ; PC64LE-NEXT: xxlor 1, 61, 61
1485 ; PC64LE-NEXT: xxlor 2, 63, 63
1486 ; PC64LE-NEXT: bl pow
1488 ; PC64LE-NEXT: xxlor 60, 1, 1
1489 ; PC64LE-NEXT: xxswapd 1, 61
1490 ; PC64LE-NEXT: xxswapd 2, 63
1491 ; PC64LE-NEXT: bl pow
1493 ; PC64LE-NEXT: li 3, 112
1494 ; PC64LE-NEXT: vmr 2, 30
1495 ; PC64LE-NEXT: xxmrghd 35, 60, 1
1496 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1497 ; PC64LE-NEXT: li 3, 96
1498 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1499 ; PC64LE-NEXT: li 3, 80
1500 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
1501 ; PC64LE-NEXT: li 3, 64
1502 ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload
1503 ; PC64LE-NEXT: li 3, 48
1504 ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload
1505 ; PC64LE-NEXT: addi 1, 1, 128
1506 ; PC64LE-NEXT: ld 0, 16(1)
1507 ; PC64LE-NEXT: mtlr 0
1510 ; PC64LE9-LABEL: constrained_vector_pow_v4f64:
1511 ; PC64LE9: # %bb.0: # %entry
1512 ; PC64LE9-NEXT: mflr 0
1513 ; PC64LE9-NEXT: stdu 1, -112(1)
1514 ; PC64LE9-NEXT: std 0, 128(1)
1515 ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill
1516 ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill
1517 ; PC64LE9-NEXT: vmr 30, 4
1518 ; PC64LE9-NEXT: xscpsgndp 2, 62, 62
1519 ; PC64LE9-NEXT: vmr 28, 2
1520 ; PC64LE9-NEXT: xscpsgndp 1, 60, 60
1521 ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill
1522 ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill
1523 ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill
1524 ; PC64LE9-NEXT: vmr 31, 5
1525 ; PC64LE9-NEXT: vmr 29, 3
1526 ; PC64LE9-NEXT: bl pow
1528 ; PC64LE9-NEXT: xscpsgndp 59, 1, 1
1529 ; PC64LE9-NEXT: xxswapd 1, 60
1530 ; PC64LE9-NEXT: xxswapd 2, 62
1531 ; PC64LE9-NEXT: bl pow
1533 ; PC64LE9-NEXT: xxmrghd 62, 59, 1
1534 ; PC64LE9-NEXT: xscpsgndp 1, 61, 61
1535 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1536 ; PC64LE9-NEXT: bl pow
1538 ; PC64LE9-NEXT: xscpsgndp 60, 1, 1
1539 ; PC64LE9-NEXT: xxswapd 1, 61
1540 ; PC64LE9-NEXT: xxswapd 2, 63
1541 ; PC64LE9-NEXT: bl pow
1543 ; PC64LE9-NEXT: xxmrghd 35, 60, 1
1544 ; PC64LE9-NEXT: vmr 2, 30
1545 ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload
1546 ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload
1547 ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload
1548 ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload
1549 ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload
1550 ; PC64LE9-NEXT: addi 1, 1, 112
1551 ; PC64LE9-NEXT: ld 0, 16(1)
1552 ; PC64LE9-NEXT: mtlr 0
1555 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64(
1558 metadata !"round.dynamic",
1559 metadata !"fpexcept.strict") #1
1560 ret <4 x double> %pow
1563 define <1 x float> @constrained_vector_powi_v1f32(<1 x float> %x, i32 %y) #0 {
1564 ; PC64LE-LABEL: constrained_vector_powi_v1f32:
1565 ; PC64LE: # %bb.0: # %entry
1566 ; PC64LE-NEXT: mflr 0
1567 ; PC64LE-NEXT: stdu 1, -32(1)
1568 ; PC64LE-NEXT: clrldi 4, 4, 32
1569 ; PC64LE-NEXT: std 0, 48(1)
1570 ; PC64LE-NEXT: bl __powisf2
1572 ; PC64LE-NEXT: addi 1, 1, 32
1573 ; PC64LE-NEXT: ld 0, 16(1)
1574 ; PC64LE-NEXT: mtlr 0
1577 ; PC64LE9-LABEL: constrained_vector_powi_v1f32:
1578 ; PC64LE9: # %bb.0: # %entry
1579 ; PC64LE9-NEXT: mflr 0
1580 ; PC64LE9-NEXT: stdu 1, -32(1)
1581 ; PC64LE9-NEXT: clrldi 4, 4, 32
1582 ; PC64LE9-NEXT: std 0, 48(1)
1583 ; PC64LE9-NEXT: bl __powisf2
1585 ; PC64LE9-NEXT: addi 1, 1, 32
1586 ; PC64LE9-NEXT: ld 0, 16(1)
1587 ; PC64LE9-NEXT: mtlr 0
1590 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
1593 metadata !"round.dynamic",
1594 metadata !"fpexcept.strict") #1
1595 ret <1 x float> %powi
1598 define <2 x double> @constrained_vector_powi_v2f64(<2 x double> %x, i32 %y) #0 {
1599 ; PC64LE-LABEL: constrained_vector_powi_v2f64:
1600 ; PC64LE: # %bb.0: # %entry
1601 ; PC64LE-NEXT: mflr 0
1602 ; PC64LE-NEXT: stdu 1, -96(1)
1603 ; PC64LE-NEXT: li 3, 48
1604 ; PC64LE-NEXT: std 0, 112(1)
1605 ; PC64LE-NEXT: std 30, 80(1) # 8-byte Folded Spill
1606 ; PC64LE-NEXT: clrldi 30, 5, 32
1607 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1608 ; PC64LE-NEXT: li 3, 64
1609 ; PC64LE-NEXT: mr 4, 30
1610 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1611 ; PC64LE-NEXT: vmr 31, 2
1612 ; PC64LE-NEXT: xxlor 1, 63, 63
1613 ; PC64LE-NEXT: bl __powidf2
1615 ; PC64LE-NEXT: xxlor 62, 1, 1
1616 ; PC64LE-NEXT: xxswapd 1, 63
1617 ; PC64LE-NEXT: mr 4, 30
1618 ; PC64LE-NEXT: bl __powidf2
1620 ; PC64LE-NEXT: li 3, 64
1621 ; PC64LE-NEXT: xxmrghd 34, 62, 1
1622 ; PC64LE-NEXT: ld 30, 80(1) # 8-byte Folded Reload
1623 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1624 ; PC64LE-NEXT: li 3, 48
1625 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1626 ; PC64LE-NEXT: addi 1, 1, 96
1627 ; PC64LE-NEXT: ld 0, 16(1)
1628 ; PC64LE-NEXT: mtlr 0
1631 ; PC64LE9-LABEL: constrained_vector_powi_v2f64:
1632 ; PC64LE9: # %bb.0: # %entry
1633 ; PC64LE9-NEXT: mflr 0
1634 ; PC64LE9-NEXT: stdu 1, -80(1)
1635 ; PC64LE9-NEXT: std 0, 96(1)
1636 ; PC64LE9-NEXT: std 30, 64(1) # 8-byte Folded Spill
1637 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1638 ; PC64LE9-NEXT: vmr 31, 2
1639 ; PC64LE9-NEXT: clrldi 30, 5, 32
1640 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
1641 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
1642 ; PC64LE9-NEXT: mr 4, 30
1643 ; PC64LE9-NEXT: bl __powidf2
1645 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
1646 ; PC64LE9-NEXT: xxswapd 1, 63
1647 ; PC64LE9-NEXT: mr 4, 30
1648 ; PC64LE9-NEXT: bl __powidf2
1650 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
1651 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1652 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
1653 ; PC64LE9-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1654 ; PC64LE9-NEXT: addi 1, 1, 80
1655 ; PC64LE9-NEXT: ld 0, 16(1)
1656 ; PC64LE9-NEXT: mtlr 0
1659 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
1662 metadata !"round.dynamic",
1663 metadata !"fpexcept.strict") #1
1664 ret <2 x double> %powi
1667 define <3 x float> @constrained_vector_powi_v3f32(<3 x float> %x, i32 %y) #0 {
1670 ; PC64LE-LABEL: constrained_vector_powi_v3f32:
1671 ; PC64LE: # %bb.0: # %entry
1672 ; PC64LE-NEXT: mflr 0
1673 ; PC64LE-NEXT: stdu 1, -96(1)
1674 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
1675 ; PC64LE-NEXT: std 0, 112(1)
1676 ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill
1677 ; PC64LE-NEXT: clrldi 30, 5, 32
1678 ; PC64LE-NEXT: li 3, 48
1679 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1680 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1681 ; PC64LE-NEXT: xscvspdpn 1, 0
1682 ; PC64LE-NEXT: mr 4, 30
1683 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1684 ; PC64LE-NEXT: vmr 31, 2
1685 ; PC64LE-NEXT: bl __powisf2
1687 ; PC64LE-NEXT: xxswapd 0, 63
1688 ; PC64LE-NEXT: fmr 31, 1
1689 ; PC64LE-NEXT: mr 4, 30
1690 ; PC64LE-NEXT: xscvspdpn 1, 0
1691 ; PC64LE-NEXT: bl __powisf2
1693 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
1694 ; PC64LE-NEXT: fmr 30, 1
1695 ; PC64LE-NEXT: mr 4, 30
1696 ; PC64LE-NEXT: xscvspdpn 1, 0
1697 ; PC64LE-NEXT: bl __powisf2
1699 ; PC64LE-NEXT: xscvdpspn 0, 1
1700 ; PC64LE-NEXT: xscvdpspn 1, 30
1701 ; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha
1702 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1703 ; PC64LE-NEXT: xscvdpspn 36, 31
1704 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1705 ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1706 ; PC64LE-NEXT: addi 3, 3, .LCPI37_0@toc@l
1707 ; PC64LE-NEXT: xxmrghw 34, 1, 0
1708 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1709 ; PC64LE-NEXT: li 3, 48
1710 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1711 ; PC64LE-NEXT: xxswapd 35, 0
1712 ; PC64LE-NEXT: vperm 2, 4, 2, 3
1713 ; PC64LE-NEXT: addi 1, 1, 96
1714 ; PC64LE-NEXT: ld 0, 16(1)
1715 ; PC64LE-NEXT: mtlr 0
1718 ; PC64LE9-LABEL: constrained_vector_powi_v3f32:
1719 ; PC64LE9: # %bb.0: # %entry
1720 ; PC64LE9-NEXT: mflr 0
1721 ; PC64LE9-NEXT: stdu 1, -80(1)
1722 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1723 ; PC64LE9-NEXT: std 0, 96(1)
1724 ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill
1725 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1726 ; PC64LE9-NEXT: clrldi 30, 5, 32
1727 ; PC64LE9-NEXT: vmr 31, 2
1728 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1729 ; PC64LE9-NEXT: mr 4, 30
1730 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1731 ; PC64LE9-NEXT: xscvspdpn 1, 0
1732 ; PC64LE9-NEXT: bl __powisf2
1734 ; PC64LE9-NEXT: xxswapd 0, 63
1735 ; PC64LE9-NEXT: fmr 31, 1
1736 ; PC64LE9-NEXT: mr 4, 30
1737 ; PC64LE9-NEXT: xscvspdpn 1, 0
1738 ; PC64LE9-NEXT: bl __powisf2
1740 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
1741 ; PC64LE9-NEXT: fmr 30, 1
1742 ; PC64LE9-NEXT: mr 4, 30
1743 ; PC64LE9-NEXT: xscvspdpn 1, 0
1744 ; PC64LE9-NEXT: bl __powisf2
1746 ; PC64LE9-NEXT: xscvdpspn 0, 1
1747 ; PC64LE9-NEXT: xscvdpspn 1, 30
1748 ; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha
1749 ; PC64LE9-NEXT: xscvdpspn 34, 31
1750 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1751 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1752 ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload
1753 ; PC64LE9-NEXT: addi 3, 3, .LCPI37_0@toc@l
1754 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1755 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
1756 ; PC64LE9-NEXT: lxv 0, 0(3)
1757 ; PC64LE9-NEXT: xxperm 34, 35, 0
1758 ; PC64LE9-NEXT: addi 1, 1, 80
1759 ; PC64LE9-NEXT: ld 0, 16(1)
1760 ; PC64LE9-NEXT: mtlr 0
1763 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32(
1766 metadata !"round.dynamic",
1767 metadata !"fpexcept.strict") #1
1768 ret <3 x float> %powi
1771 define <3 x double> @constrained_vector_powi_v3f64(<3 x double> %x, i32 %y) #0 {
1772 ; PC64LE-LABEL: constrained_vector_powi_v3f64:
1773 ; PC64LE: # %bb.0: # %entry
1774 ; PC64LE-NEXT: mflr 0
1775 ; PC64LE-NEXT: stdu 1, -96(1)
1776 ; PC64LE-NEXT: std 0, 112(1)
1777 ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill
1778 ; PC64LE-NEXT: clrldi 30, 6, 32
1779 ; PC64LE-NEXT: li 3, 48
1780 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1781 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1782 ; PC64LE-NEXT: fmr 31, 3
1783 ; PC64LE-NEXT: fmr 30, 2
1784 ; PC64LE-NEXT: mr 4, 30
1785 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1786 ; PC64LE-NEXT: bl __powidf2
1788 ; PC64LE-NEXT: xxlor 63, 1, 1
1789 ; PC64LE-NEXT: fmr 1, 30
1790 ; PC64LE-NEXT: mr 4, 30
1791 ; PC64LE-NEXT: bl __powidf2
1793 ; PC64LE-NEXT: xxmrghd 63, 1, 63
1794 ; PC64LE-NEXT: fmr 1, 31
1795 ; PC64LE-NEXT: mr 4, 30
1796 ; PC64LE-NEXT: bl __powidf2
1798 ; PC64LE-NEXT: li 3, 48
1799 ; PC64LE-NEXT: fmr 3, 1
1800 ; PC64LE-NEXT: xxswapd 1, 63
1801 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1802 ; PC64LE-NEXT: xxlor 2, 63, 63
1803 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1804 ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1805 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1806 ; PC64LE-NEXT: addi 1, 1, 96
1807 ; PC64LE-NEXT: ld 0, 16(1)
1808 ; PC64LE-NEXT: mtlr 0
1811 ; PC64LE9-LABEL: constrained_vector_powi_v3f64:
1812 ; PC64LE9: # %bb.0: # %entry
1813 ; PC64LE9-NEXT: mflr 0
1814 ; PC64LE9-NEXT: stdu 1, -80(1)
1815 ; PC64LE9-NEXT: std 0, 96(1)
1816 ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill
1817 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1818 ; PC64LE9-NEXT: clrldi 30, 6, 32
1819 ; PC64LE9-NEXT: mr 4, 30
1820 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1821 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1822 ; PC64LE9-NEXT: fmr 31, 3
1823 ; PC64LE9-NEXT: fmr 30, 2
1824 ; PC64LE9-NEXT: bl __powidf2
1826 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
1827 ; PC64LE9-NEXT: fmr 1, 30
1828 ; PC64LE9-NEXT: mr 4, 30
1829 ; PC64LE9-NEXT: bl __powidf2
1831 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
1832 ; PC64LE9-NEXT: fmr 1, 31
1833 ; PC64LE9-NEXT: mr 4, 30
1834 ; PC64LE9-NEXT: bl __powidf2
1836 ; PC64LE9-NEXT: fmr 3, 1
1837 ; PC64LE9-NEXT: xxswapd 1, 63
1838 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1839 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1840 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1841 ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload
1842 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1843 ; PC64LE9-NEXT: addi 1, 1, 80
1844 ; PC64LE9-NEXT: ld 0, 16(1)
1845 ; PC64LE9-NEXT: mtlr 0
1848 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
1851 metadata !"round.dynamic",
1852 metadata !"fpexcept.strict") #1
1853 ret <3 x double> %powi
1856 define <4 x double> @constrained_vector_powi_v4f64(<4 x double> %x, i32 %y) #0 {
1857 ; PC64LE-LABEL: constrained_vector_powi_v4f64:
1858 ; PC64LE: # %bb.0: # %entry
1859 ; PC64LE-NEXT: mflr 0
1860 ; PC64LE-NEXT: stdu 1, -112(1)
1861 ; PC64LE-NEXT: li 3, 48
1862 ; PC64LE-NEXT: std 0, 128(1)
1863 ; PC64LE-NEXT: std 30, 96(1) # 8-byte Folded Spill
1864 ; PC64LE-NEXT: clrldi 30, 7, 32
1865 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1866 ; PC64LE-NEXT: li 3, 64
1867 ; PC64LE-NEXT: mr 4, 30
1868 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1869 ; PC64LE-NEXT: vmr 30, 2
1870 ; PC64LE-NEXT: li 3, 80
1871 ; PC64LE-NEXT: xxlor 1, 62, 62
1872 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1873 ; PC64LE-NEXT: vmr 31, 3
1874 ; PC64LE-NEXT: bl __powidf2
1876 ; PC64LE-NEXT: xxlor 61, 1, 1
1877 ; PC64LE-NEXT: xxswapd 1, 62
1878 ; PC64LE-NEXT: mr 4, 30
1879 ; PC64LE-NEXT: bl __powidf2
1881 ; PC64LE-NEXT: xxmrghd 62, 61, 1
1882 ; PC64LE-NEXT: xxlor 1, 63, 63
1883 ; PC64LE-NEXT: mr 4, 30
1884 ; PC64LE-NEXT: bl __powidf2
1886 ; PC64LE-NEXT: xxlor 61, 1, 1
1887 ; PC64LE-NEXT: xxswapd 1, 63
1888 ; PC64LE-NEXT: mr 4, 30
1889 ; PC64LE-NEXT: bl __powidf2
1891 ; PC64LE-NEXT: li 3, 80
1892 ; PC64LE-NEXT: vmr 2, 30
1893 ; PC64LE-NEXT: xxmrghd 35, 61, 1
1894 ; PC64LE-NEXT: ld 30, 96(1) # 8-byte Folded Reload
1895 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1896 ; PC64LE-NEXT: li 3, 64
1897 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1898 ; PC64LE-NEXT: li 3, 48
1899 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
1900 ; PC64LE-NEXT: addi 1, 1, 112
1901 ; PC64LE-NEXT: ld 0, 16(1)
1902 ; PC64LE-NEXT: mtlr 0
1905 ; PC64LE9-LABEL: constrained_vector_powi_v4f64:
1906 ; PC64LE9: # %bb.0: # %entry
1907 ; PC64LE9-NEXT: mflr 0
1908 ; PC64LE9-NEXT: stdu 1, -96(1)
1909 ; PC64LE9-NEXT: std 0, 112(1)
1910 ; PC64LE9-NEXT: std 30, 80(1) # 8-byte Folded Spill
1911 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
1912 ; PC64LE9-NEXT: vmr 30, 2
1913 ; PC64LE9-NEXT: clrldi 30, 7, 32
1914 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
1915 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
1916 ; PC64LE9-NEXT: mr 4, 30
1917 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
1918 ; PC64LE9-NEXT: vmr 31, 3
1919 ; PC64LE9-NEXT: bl __powidf2
1921 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
1922 ; PC64LE9-NEXT: xxswapd 1, 62
1923 ; PC64LE9-NEXT: mr 4, 30
1924 ; PC64LE9-NEXT: bl __powidf2
1926 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
1927 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
1928 ; PC64LE9-NEXT: mr 4, 30
1929 ; PC64LE9-NEXT: bl __powidf2
1931 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
1932 ; PC64LE9-NEXT: xxswapd 1, 63
1933 ; PC64LE9-NEXT: mr 4, 30
1934 ; PC64LE9-NEXT: bl __powidf2
1936 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
1937 ; PC64LE9-NEXT: vmr 2, 30
1938 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
1939 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
1940 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
1941 ; PC64LE9-NEXT: ld 30, 80(1) # 8-byte Folded Reload
1942 ; PC64LE9-NEXT: addi 1, 1, 96
1943 ; PC64LE9-NEXT: ld 0, 16(1)
1944 ; PC64LE9-NEXT: mtlr 0
1947 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64(
1950 metadata !"round.dynamic",
1951 metadata !"fpexcept.strict") #1
1952 ret <4 x double> %powi
1955 define <1 x float> @constrained_vector_sin_v1f32(<1 x float> %x) #0 {
1956 ; PC64LE-LABEL: constrained_vector_sin_v1f32:
1957 ; PC64LE: # %bb.0: # %entry
1958 ; PC64LE-NEXT: mflr 0
1959 ; PC64LE-NEXT: stdu 1, -32(1)
1960 ; PC64LE-NEXT: std 0, 48(1)
1961 ; PC64LE-NEXT: bl sinf
1963 ; PC64LE-NEXT: addi 1, 1, 32
1964 ; PC64LE-NEXT: ld 0, 16(1)
1965 ; PC64LE-NEXT: mtlr 0
1968 ; PC64LE9-LABEL: constrained_vector_sin_v1f32:
1969 ; PC64LE9: # %bb.0: # %entry
1970 ; PC64LE9-NEXT: mflr 0
1971 ; PC64LE9-NEXT: stdu 1, -32(1)
1972 ; PC64LE9-NEXT: std 0, 48(1)
1973 ; PC64LE9-NEXT: bl sinf
1975 ; PC64LE9-NEXT: addi 1, 1, 32
1976 ; PC64LE9-NEXT: ld 0, 16(1)
1977 ; PC64LE9-NEXT: mtlr 0
1980 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
1982 metadata !"round.dynamic",
1983 metadata !"fpexcept.strict") #1
1984 ret <1 x float> %sin
1987 define <2 x double> @constrained_vector_sin_v2f64(<2 x double> %x) #0 {
1988 ; PC64LE-LABEL: constrained_vector_sin_v2f64:
1989 ; PC64LE: # %bb.0: # %entry
1990 ; PC64LE-NEXT: mflr 0
1991 ; PC64LE-NEXT: stdu 1, -80(1)
1992 ; PC64LE-NEXT: li 3, 48
1993 ; PC64LE-NEXT: std 0, 96(1)
1994 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1995 ; PC64LE-NEXT: li 3, 64
1996 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1997 ; PC64LE-NEXT: vmr 31, 2
1998 ; PC64LE-NEXT: xxlor 1, 63, 63
1999 ; PC64LE-NEXT: bl sin
2001 ; PC64LE-NEXT: xxlor 62, 1, 1
2002 ; PC64LE-NEXT: xxswapd 1, 63
2003 ; PC64LE-NEXT: bl sin
2005 ; PC64LE-NEXT: li 3, 64
2006 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2007 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2008 ; PC64LE-NEXT: li 3, 48
2009 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2010 ; PC64LE-NEXT: addi 1, 1, 80
2011 ; PC64LE-NEXT: ld 0, 16(1)
2012 ; PC64LE-NEXT: mtlr 0
2015 ; PC64LE9-LABEL: constrained_vector_sin_v2f64:
2016 ; PC64LE9: # %bb.0: # %entry
2017 ; PC64LE9-NEXT: mflr 0
2018 ; PC64LE9-NEXT: stdu 1, -64(1)
2019 ; PC64LE9-NEXT: std 0, 80(1)
2020 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2021 ; PC64LE9-NEXT: vmr 31, 2
2022 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2023 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2024 ; PC64LE9-NEXT: bl sin
2026 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2027 ; PC64LE9-NEXT: xxswapd 1, 63
2028 ; PC64LE9-NEXT: bl sin
2030 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2031 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2032 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2033 ; PC64LE9-NEXT: addi 1, 1, 64
2034 ; PC64LE9-NEXT: ld 0, 16(1)
2035 ; PC64LE9-NEXT: mtlr 0
2038 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
2040 metadata !"round.dynamic",
2041 metadata !"fpexcept.strict") #1
2042 ret <2 x double> %sin
2045 define <3 x float> @constrained_vector_sin_v3f32(<3 x float> %x) #0 {
2046 ; PC64LE-LABEL: constrained_vector_sin_v3f32:
2047 ; PC64LE: # %bb.0: # %entry
2048 ; PC64LE-NEXT: mflr 0
2049 ; PC64LE-NEXT: stdu 1, -80(1)
2050 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2051 ; PC64LE-NEXT: li 3, 48
2052 ; PC64LE-NEXT: std 0, 96(1)
2053 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2054 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2055 ; PC64LE-NEXT: xscvspdpn 1, 0
2056 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2057 ; PC64LE-NEXT: vmr 31, 2
2058 ; PC64LE-NEXT: bl sinf
2060 ; PC64LE-NEXT: xxswapd 0, 63
2061 ; PC64LE-NEXT: fmr 31, 1
2062 ; PC64LE-NEXT: xscvspdpn 1, 0
2063 ; PC64LE-NEXT: bl sinf
2065 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2066 ; PC64LE-NEXT: fmr 30, 1
2067 ; PC64LE-NEXT: xscvspdpn 1, 0
2068 ; PC64LE-NEXT: bl sinf
2070 ; PC64LE-NEXT: xscvdpspn 0, 1
2071 ; PC64LE-NEXT: xscvdpspn 1, 30
2072 ; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2073 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2074 ; PC64LE-NEXT: xscvdpspn 36, 31
2075 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2076 ; PC64LE-NEXT: addi 3, 3, .LCPI42_0@toc@l
2077 ; PC64LE-NEXT: xxmrghw 34, 1, 0
2078 ; PC64LE-NEXT: lxvd2x 0, 0, 3
2079 ; PC64LE-NEXT: li 3, 48
2080 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2081 ; PC64LE-NEXT: xxswapd 35, 0
2082 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2083 ; PC64LE-NEXT: addi 1, 1, 80
2084 ; PC64LE-NEXT: ld 0, 16(1)
2085 ; PC64LE-NEXT: mtlr 0
2088 ; PC64LE9-LABEL: constrained_vector_sin_v3f32:
2089 ; PC64LE9: # %bb.0: # %entry
2090 ; PC64LE9-NEXT: mflr 0
2091 ; PC64LE9-NEXT: stdu 1, -64(1)
2092 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2093 ; PC64LE9-NEXT: std 0, 80(1)
2094 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2095 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2096 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2097 ; PC64LE9-NEXT: vmr 31, 2
2098 ; PC64LE9-NEXT: xscvspdpn 1, 0
2099 ; PC64LE9-NEXT: bl sinf
2101 ; PC64LE9-NEXT: xxswapd 0, 63
2102 ; PC64LE9-NEXT: fmr 31, 1
2103 ; PC64LE9-NEXT: xscvspdpn 1, 0
2104 ; PC64LE9-NEXT: bl sinf
2106 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2107 ; PC64LE9-NEXT: fmr 30, 1
2108 ; PC64LE9-NEXT: xscvspdpn 1, 0
2109 ; PC64LE9-NEXT: bl sinf
2111 ; PC64LE9-NEXT: xscvdpspn 0, 1
2112 ; PC64LE9-NEXT: xscvdpspn 1, 30
2113 ; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2114 ; PC64LE9-NEXT: xscvdpspn 34, 31
2115 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2116 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2117 ; PC64LE9-NEXT: addi 3, 3, .LCPI42_0@toc@l
2118 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2119 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
2120 ; PC64LE9-NEXT: lxv 0, 0(3)
2121 ; PC64LE9-NEXT: xxperm 34, 35, 0
2122 ; PC64LE9-NEXT: addi 1, 1, 64
2123 ; PC64LE9-NEXT: ld 0, 16(1)
2124 ; PC64LE9-NEXT: mtlr 0
2127 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
2129 metadata !"round.dynamic",
2130 metadata !"fpexcept.strict") #1
2131 ret <3 x float> %sin
2134 define <3 x double> @constrained_vector_sin_v3f64(<3 x double> %x) #0 {
2135 ; PC64LE-LABEL: constrained_vector_sin_v3f64:
2136 ; PC64LE: # %bb.0: # %entry
2137 ; PC64LE-NEXT: mflr 0
2138 ; PC64LE-NEXT: stdu 1, -80(1)
2139 ; PC64LE-NEXT: li 3, 48
2140 ; PC64LE-NEXT: std 0, 96(1)
2141 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2142 ; PC64LE-NEXT: fmr 30, 2
2143 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2144 ; PC64LE-NEXT: fmr 31, 3
2145 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2146 ; PC64LE-NEXT: bl sin
2148 ; PC64LE-NEXT: xxlor 63, 1, 1
2149 ; PC64LE-NEXT: fmr 1, 30
2150 ; PC64LE-NEXT: bl sin
2152 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2153 ; PC64LE-NEXT: fmr 1, 31
2154 ; PC64LE-NEXT: bl sin
2156 ; PC64LE-NEXT: li 3, 48
2157 ; PC64LE-NEXT: fmr 3, 1
2158 ; PC64LE-NEXT: xxswapd 1, 63
2159 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2160 ; PC64LE-NEXT: xxlor 2, 63, 63
2161 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2162 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2163 ; PC64LE-NEXT: addi 1, 1, 80
2164 ; PC64LE-NEXT: ld 0, 16(1)
2165 ; PC64LE-NEXT: mtlr 0
2168 ; PC64LE9-LABEL: constrained_vector_sin_v3f64:
2169 ; PC64LE9: # %bb.0: # %entry
2170 ; PC64LE9-NEXT: mflr 0
2171 ; PC64LE9-NEXT: stdu 1, -64(1)
2172 ; PC64LE9-NEXT: std 0, 80(1)
2173 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2174 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2175 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2176 ; PC64LE9-NEXT: fmr 31, 3
2177 ; PC64LE9-NEXT: fmr 30, 2
2178 ; PC64LE9-NEXT: bl sin
2180 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2181 ; PC64LE9-NEXT: fmr 1, 30
2182 ; PC64LE9-NEXT: bl sin
2184 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2185 ; PC64LE9-NEXT: fmr 1, 31
2186 ; PC64LE9-NEXT: bl sin
2188 ; PC64LE9-NEXT: fmr 3, 1
2189 ; PC64LE9-NEXT: xxswapd 1, 63
2190 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2191 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2192 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2193 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2194 ; PC64LE9-NEXT: addi 1, 1, 64
2195 ; PC64LE9-NEXT: ld 0, 16(1)
2196 ; PC64LE9-NEXT: mtlr 0
2199 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
2201 metadata !"round.dynamic",
2202 metadata !"fpexcept.strict") #1
2203 ret <3 x double> %sin
2206 define <4 x double> @constrained_vector_sin_v4f64(<4 x double> %x) #0 {
2207 ; PC64LE-LABEL: constrained_vector_sin_v4f64:
2208 ; PC64LE: # %bb.0: # %entry
2209 ; PC64LE-NEXT: mflr 0
2210 ; PC64LE-NEXT: stdu 1, -96(1)
2211 ; PC64LE-NEXT: li 3, 48
2212 ; PC64LE-NEXT: std 0, 112(1)
2213 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
2214 ; PC64LE-NEXT: li 3, 64
2215 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2216 ; PC64LE-NEXT: vmr 30, 2
2217 ; PC64LE-NEXT: li 3, 80
2218 ; PC64LE-NEXT: xxlor 1, 62, 62
2219 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2220 ; PC64LE-NEXT: vmr 31, 3
2221 ; PC64LE-NEXT: bl sin
2223 ; PC64LE-NEXT: xxlor 61, 1, 1
2224 ; PC64LE-NEXT: xxswapd 1, 62
2225 ; PC64LE-NEXT: bl sin
2227 ; PC64LE-NEXT: xxmrghd 62, 61, 1
2228 ; PC64LE-NEXT: xxlor 1, 63, 63
2229 ; PC64LE-NEXT: bl sin
2231 ; PC64LE-NEXT: xxlor 61, 1, 1
2232 ; PC64LE-NEXT: xxswapd 1, 63
2233 ; PC64LE-NEXT: bl sin
2235 ; PC64LE-NEXT: li 3, 80
2236 ; PC64LE-NEXT: vmr 2, 30
2237 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2238 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2239 ; PC64LE-NEXT: li 3, 64
2240 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2241 ; PC64LE-NEXT: li 3, 48
2242 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2243 ; PC64LE-NEXT: addi 1, 1, 96
2244 ; PC64LE-NEXT: ld 0, 16(1)
2245 ; PC64LE-NEXT: mtlr 0
2248 ; PC64LE9-LABEL: constrained_vector_sin_v4f64:
2249 ; PC64LE9: # %bb.0: # %entry
2250 ; PC64LE9-NEXT: mflr 0
2251 ; PC64LE9-NEXT: stdu 1, -80(1)
2252 ; PC64LE9-NEXT: std 0, 96(1)
2253 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2254 ; PC64LE9-NEXT: vmr 30, 2
2255 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2256 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2257 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2258 ; PC64LE9-NEXT: vmr 31, 3
2259 ; PC64LE9-NEXT: bl sin
2261 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2262 ; PC64LE9-NEXT: xxswapd 1, 62
2263 ; PC64LE9-NEXT: bl sin
2265 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2266 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2267 ; PC64LE9-NEXT: bl sin
2269 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2270 ; PC64LE9-NEXT: xxswapd 1, 63
2271 ; PC64LE9-NEXT: bl sin
2273 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2274 ; PC64LE9-NEXT: vmr 2, 30
2275 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2276 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2277 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2278 ; PC64LE9-NEXT: addi 1, 1, 80
2279 ; PC64LE9-NEXT: ld 0, 16(1)
2280 ; PC64LE9-NEXT: mtlr 0
2283 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64(
2285 metadata !"round.dynamic",
2286 metadata !"fpexcept.strict") #1
2287 ret <4 x double> %sin
2290 define <1 x float> @constrained_vector_cos_v1f32(<1 x float> %x) #0 {
2291 ; PC64LE-LABEL: constrained_vector_cos_v1f32:
2292 ; PC64LE: # %bb.0: # %entry
2293 ; PC64LE-NEXT: mflr 0
2294 ; PC64LE-NEXT: stdu 1, -32(1)
2295 ; PC64LE-NEXT: std 0, 48(1)
2296 ; PC64LE-NEXT: bl cosf
2298 ; PC64LE-NEXT: addi 1, 1, 32
2299 ; PC64LE-NEXT: ld 0, 16(1)
2300 ; PC64LE-NEXT: mtlr 0
2303 ; PC64LE9-LABEL: constrained_vector_cos_v1f32:
2304 ; PC64LE9: # %bb.0: # %entry
2305 ; PC64LE9-NEXT: mflr 0
2306 ; PC64LE9-NEXT: stdu 1, -32(1)
2307 ; PC64LE9-NEXT: std 0, 48(1)
2308 ; PC64LE9-NEXT: bl cosf
2310 ; PC64LE9-NEXT: addi 1, 1, 32
2311 ; PC64LE9-NEXT: ld 0, 16(1)
2312 ; PC64LE9-NEXT: mtlr 0
2315 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
2317 metadata !"round.dynamic",
2318 metadata !"fpexcept.strict") #1
2319 ret <1 x float> %cos
2322 define <2 x double> @constrained_vector_cos_v2f64(<2 x double> %x) #0 {
2323 ; PC64LE-LABEL: constrained_vector_cos_v2f64:
2324 ; PC64LE: # %bb.0: # %entry
2325 ; PC64LE-NEXT: mflr 0
2326 ; PC64LE-NEXT: stdu 1, -80(1)
2327 ; PC64LE-NEXT: li 3, 48
2328 ; PC64LE-NEXT: std 0, 96(1)
2329 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2330 ; PC64LE-NEXT: li 3, 64
2331 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2332 ; PC64LE-NEXT: vmr 31, 2
2333 ; PC64LE-NEXT: xxlor 1, 63, 63
2334 ; PC64LE-NEXT: bl cos
2336 ; PC64LE-NEXT: xxlor 62, 1, 1
2337 ; PC64LE-NEXT: xxswapd 1, 63
2338 ; PC64LE-NEXT: bl cos
2340 ; PC64LE-NEXT: li 3, 64
2341 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2342 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2343 ; PC64LE-NEXT: li 3, 48
2344 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2345 ; PC64LE-NEXT: addi 1, 1, 80
2346 ; PC64LE-NEXT: ld 0, 16(1)
2347 ; PC64LE-NEXT: mtlr 0
2350 ; PC64LE9-LABEL: constrained_vector_cos_v2f64:
2351 ; PC64LE9: # %bb.0: # %entry
2352 ; PC64LE9-NEXT: mflr 0
2353 ; PC64LE9-NEXT: stdu 1, -64(1)
2354 ; PC64LE9-NEXT: std 0, 80(1)
2355 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2356 ; PC64LE9-NEXT: vmr 31, 2
2357 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2358 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2359 ; PC64LE9-NEXT: bl cos
2361 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2362 ; PC64LE9-NEXT: xxswapd 1, 63
2363 ; PC64LE9-NEXT: bl cos
2365 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2366 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2367 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2368 ; PC64LE9-NEXT: addi 1, 1, 64
2369 ; PC64LE9-NEXT: ld 0, 16(1)
2370 ; PC64LE9-NEXT: mtlr 0
2373 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
2375 metadata !"round.dynamic",
2376 metadata !"fpexcept.strict") #1
2377 ret <2 x double> %cos
2380 define <3 x float> @constrained_vector_cos_v3f32(<3 x float> %x) #0 {
2381 ; PC64LE-LABEL: constrained_vector_cos_v3f32:
2382 ; PC64LE: # %bb.0: # %entry
2383 ; PC64LE-NEXT: mflr 0
2384 ; PC64LE-NEXT: stdu 1, -80(1)
2385 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2386 ; PC64LE-NEXT: li 3, 48
2387 ; PC64LE-NEXT: std 0, 96(1)
2388 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2389 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2390 ; PC64LE-NEXT: xscvspdpn 1, 0
2391 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2392 ; PC64LE-NEXT: vmr 31, 2
2393 ; PC64LE-NEXT: bl cosf
2395 ; PC64LE-NEXT: xxswapd 0, 63
2396 ; PC64LE-NEXT: fmr 31, 1
2397 ; PC64LE-NEXT: xscvspdpn 1, 0
2398 ; PC64LE-NEXT: bl cosf
2400 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2401 ; PC64LE-NEXT: fmr 30, 1
2402 ; PC64LE-NEXT: xscvspdpn 1, 0
2403 ; PC64LE-NEXT: bl cosf
2405 ; PC64LE-NEXT: xscvdpspn 0, 1
2406 ; PC64LE-NEXT: xscvdpspn 1, 30
2407 ; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2408 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2409 ; PC64LE-NEXT: xscvdpspn 36, 31
2410 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2411 ; PC64LE-NEXT: addi 3, 3, .LCPI47_0@toc@l
2412 ; PC64LE-NEXT: xxmrghw 34, 1, 0
2413 ; PC64LE-NEXT: lxvd2x 0, 0, 3
2414 ; PC64LE-NEXT: li 3, 48
2415 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2416 ; PC64LE-NEXT: xxswapd 35, 0
2417 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2418 ; PC64LE-NEXT: addi 1, 1, 80
2419 ; PC64LE-NEXT: ld 0, 16(1)
2420 ; PC64LE-NEXT: mtlr 0
2423 ; PC64LE9-LABEL: constrained_vector_cos_v3f32:
2424 ; PC64LE9: # %bb.0: # %entry
2425 ; PC64LE9-NEXT: mflr 0
2426 ; PC64LE9-NEXT: stdu 1, -64(1)
2427 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2428 ; PC64LE9-NEXT: std 0, 80(1)
2429 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2430 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2431 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2432 ; PC64LE9-NEXT: vmr 31, 2
2433 ; PC64LE9-NEXT: xscvspdpn 1, 0
2434 ; PC64LE9-NEXT: bl cosf
2436 ; PC64LE9-NEXT: xxswapd 0, 63
2437 ; PC64LE9-NEXT: fmr 31, 1
2438 ; PC64LE9-NEXT: xscvspdpn 1, 0
2439 ; PC64LE9-NEXT: bl cosf
2441 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2442 ; PC64LE9-NEXT: fmr 30, 1
2443 ; PC64LE9-NEXT: xscvspdpn 1, 0
2444 ; PC64LE9-NEXT: bl cosf
2446 ; PC64LE9-NEXT: xscvdpspn 0, 1
2447 ; PC64LE9-NEXT: xscvdpspn 1, 30
2448 ; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2449 ; PC64LE9-NEXT: xscvdpspn 34, 31
2450 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2451 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2452 ; PC64LE9-NEXT: addi 3, 3, .LCPI47_0@toc@l
2453 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2454 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
2455 ; PC64LE9-NEXT: lxv 0, 0(3)
2456 ; PC64LE9-NEXT: xxperm 34, 35, 0
2457 ; PC64LE9-NEXT: addi 1, 1, 64
2458 ; PC64LE9-NEXT: ld 0, 16(1)
2459 ; PC64LE9-NEXT: mtlr 0
2462 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
2464 metadata !"round.dynamic",
2465 metadata !"fpexcept.strict") #1
2466 ret <3 x float> %cos
2469 define <3 x double> @constrained_vector_cos_v3f64(<3 x double> %x) #0 {
2470 ; PC64LE-LABEL: constrained_vector_cos_v3f64:
2471 ; PC64LE: # %bb.0: # %entry
2472 ; PC64LE-NEXT: mflr 0
2473 ; PC64LE-NEXT: stdu 1, -80(1)
2474 ; PC64LE-NEXT: li 3, 48
2475 ; PC64LE-NEXT: std 0, 96(1)
2476 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2477 ; PC64LE-NEXT: fmr 30, 2
2478 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2479 ; PC64LE-NEXT: fmr 31, 3
2480 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2481 ; PC64LE-NEXT: bl cos
2483 ; PC64LE-NEXT: xxlor 63, 1, 1
2484 ; PC64LE-NEXT: fmr 1, 30
2485 ; PC64LE-NEXT: bl cos
2487 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2488 ; PC64LE-NEXT: fmr 1, 31
2489 ; PC64LE-NEXT: bl cos
2491 ; PC64LE-NEXT: li 3, 48
2492 ; PC64LE-NEXT: fmr 3, 1
2493 ; PC64LE-NEXT: xxswapd 1, 63
2494 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2495 ; PC64LE-NEXT: xxlor 2, 63, 63
2496 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2497 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2498 ; PC64LE-NEXT: addi 1, 1, 80
2499 ; PC64LE-NEXT: ld 0, 16(1)
2500 ; PC64LE-NEXT: mtlr 0
2503 ; PC64LE9-LABEL: constrained_vector_cos_v3f64:
2504 ; PC64LE9: # %bb.0: # %entry
2505 ; PC64LE9-NEXT: mflr 0
2506 ; PC64LE9-NEXT: stdu 1, -64(1)
2507 ; PC64LE9-NEXT: std 0, 80(1)
2508 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2509 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2510 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2511 ; PC64LE9-NEXT: fmr 31, 3
2512 ; PC64LE9-NEXT: fmr 30, 2
2513 ; PC64LE9-NEXT: bl cos
2515 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2516 ; PC64LE9-NEXT: fmr 1, 30
2517 ; PC64LE9-NEXT: bl cos
2519 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2520 ; PC64LE9-NEXT: fmr 1, 31
2521 ; PC64LE9-NEXT: bl cos
2523 ; PC64LE9-NEXT: fmr 3, 1
2524 ; PC64LE9-NEXT: xxswapd 1, 63
2525 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2526 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2527 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2528 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2529 ; PC64LE9-NEXT: addi 1, 1, 64
2530 ; PC64LE9-NEXT: ld 0, 16(1)
2531 ; PC64LE9-NEXT: mtlr 0
2534 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
2536 metadata !"round.dynamic",
2537 metadata !"fpexcept.strict") #1
2538 ret <3 x double> %cos
2541 define <4 x double> @constrained_vector_cos_v4f64(<4 x double> %x) #0 {
2542 ; PC64LE-LABEL: constrained_vector_cos_v4f64:
2543 ; PC64LE: # %bb.0: # %entry
2544 ; PC64LE-NEXT: mflr 0
2545 ; PC64LE-NEXT: stdu 1, -96(1)
2546 ; PC64LE-NEXT: li 3, 48
2547 ; PC64LE-NEXT: std 0, 112(1)
2548 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
2549 ; PC64LE-NEXT: li 3, 64
2550 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2551 ; PC64LE-NEXT: vmr 30, 2
2552 ; PC64LE-NEXT: li 3, 80
2553 ; PC64LE-NEXT: xxlor 1, 62, 62
2554 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2555 ; PC64LE-NEXT: vmr 31, 3
2556 ; PC64LE-NEXT: bl cos
2558 ; PC64LE-NEXT: xxlor 61, 1, 1
2559 ; PC64LE-NEXT: xxswapd 1, 62
2560 ; PC64LE-NEXT: bl cos
2562 ; PC64LE-NEXT: xxmrghd 62, 61, 1
2563 ; PC64LE-NEXT: xxlor 1, 63, 63
2564 ; PC64LE-NEXT: bl cos
2566 ; PC64LE-NEXT: xxlor 61, 1, 1
2567 ; PC64LE-NEXT: xxswapd 1, 63
2568 ; PC64LE-NEXT: bl cos
2570 ; PC64LE-NEXT: li 3, 80
2571 ; PC64LE-NEXT: vmr 2, 30
2572 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2573 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2574 ; PC64LE-NEXT: li 3, 64
2575 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2576 ; PC64LE-NEXT: li 3, 48
2577 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2578 ; PC64LE-NEXT: addi 1, 1, 96
2579 ; PC64LE-NEXT: ld 0, 16(1)
2580 ; PC64LE-NEXT: mtlr 0
2583 ; PC64LE9-LABEL: constrained_vector_cos_v4f64:
2584 ; PC64LE9: # %bb.0: # %entry
2585 ; PC64LE9-NEXT: mflr 0
2586 ; PC64LE9-NEXT: stdu 1, -80(1)
2587 ; PC64LE9-NEXT: std 0, 96(1)
2588 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2589 ; PC64LE9-NEXT: vmr 30, 2
2590 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2591 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2592 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2593 ; PC64LE9-NEXT: vmr 31, 3
2594 ; PC64LE9-NEXT: bl cos
2596 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2597 ; PC64LE9-NEXT: xxswapd 1, 62
2598 ; PC64LE9-NEXT: bl cos
2600 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2601 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2602 ; PC64LE9-NEXT: bl cos
2604 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2605 ; PC64LE9-NEXT: xxswapd 1, 63
2606 ; PC64LE9-NEXT: bl cos
2608 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2609 ; PC64LE9-NEXT: vmr 2, 30
2610 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2611 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2612 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2613 ; PC64LE9-NEXT: addi 1, 1, 80
2614 ; PC64LE9-NEXT: ld 0, 16(1)
2615 ; PC64LE9-NEXT: mtlr 0
2618 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64(
2620 metadata !"round.dynamic",
2621 metadata !"fpexcept.strict") #1
2622 ret <4 x double> %cos
2625 define <1 x float> @constrained_vector_exp_v1f32(<1 x float> %x) #0 {
2626 ; PC64LE-LABEL: constrained_vector_exp_v1f32:
2627 ; PC64LE: # %bb.0: # %entry
2628 ; PC64LE-NEXT: mflr 0
2629 ; PC64LE-NEXT: stdu 1, -32(1)
2630 ; PC64LE-NEXT: std 0, 48(1)
2631 ; PC64LE-NEXT: bl expf
2633 ; PC64LE-NEXT: addi 1, 1, 32
2634 ; PC64LE-NEXT: ld 0, 16(1)
2635 ; PC64LE-NEXT: mtlr 0
2638 ; PC64LE9-LABEL: constrained_vector_exp_v1f32:
2639 ; PC64LE9: # %bb.0: # %entry
2640 ; PC64LE9-NEXT: mflr 0
2641 ; PC64LE9-NEXT: stdu 1, -32(1)
2642 ; PC64LE9-NEXT: std 0, 48(1)
2643 ; PC64LE9-NEXT: bl expf
2645 ; PC64LE9-NEXT: addi 1, 1, 32
2646 ; PC64LE9-NEXT: ld 0, 16(1)
2647 ; PC64LE9-NEXT: mtlr 0
2650 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
2652 metadata !"round.dynamic",
2653 metadata !"fpexcept.strict") #1
2654 ret <1 x float> %exp
2657 define <2 x double> @constrained_vector_exp_v2f64(<2 x double> %x) #0 {
2658 ; PC64LE-LABEL: constrained_vector_exp_v2f64:
2659 ; PC64LE: # %bb.0: # %entry
2660 ; PC64LE-NEXT: mflr 0
2661 ; PC64LE-NEXT: stdu 1, -80(1)
2662 ; PC64LE-NEXT: li 3, 48
2663 ; PC64LE-NEXT: std 0, 96(1)
2664 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2665 ; PC64LE-NEXT: li 3, 64
2666 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2667 ; PC64LE-NEXT: vmr 31, 2
2668 ; PC64LE-NEXT: xxlor 1, 63, 63
2669 ; PC64LE-NEXT: bl exp
2671 ; PC64LE-NEXT: xxlor 62, 1, 1
2672 ; PC64LE-NEXT: xxswapd 1, 63
2673 ; PC64LE-NEXT: bl exp
2675 ; PC64LE-NEXT: li 3, 64
2676 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2677 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2678 ; PC64LE-NEXT: li 3, 48
2679 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2680 ; PC64LE-NEXT: addi 1, 1, 80
2681 ; PC64LE-NEXT: ld 0, 16(1)
2682 ; PC64LE-NEXT: mtlr 0
2685 ; PC64LE9-LABEL: constrained_vector_exp_v2f64:
2686 ; PC64LE9: # %bb.0: # %entry
2687 ; PC64LE9-NEXT: mflr 0
2688 ; PC64LE9-NEXT: stdu 1, -64(1)
2689 ; PC64LE9-NEXT: std 0, 80(1)
2690 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2691 ; PC64LE9-NEXT: vmr 31, 2
2692 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2693 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2694 ; PC64LE9-NEXT: bl exp
2696 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2697 ; PC64LE9-NEXT: xxswapd 1, 63
2698 ; PC64LE9-NEXT: bl exp
2700 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2701 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2702 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2703 ; PC64LE9-NEXT: addi 1, 1, 64
2704 ; PC64LE9-NEXT: ld 0, 16(1)
2705 ; PC64LE9-NEXT: mtlr 0
2708 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
2710 metadata !"round.dynamic",
2711 metadata !"fpexcept.strict") #1
2712 ret <2 x double> %exp
2715 define <3 x float> @constrained_vector_exp_v3f32(<3 x float> %x) #0 {
2716 ; PC64LE-LABEL: constrained_vector_exp_v3f32:
2717 ; PC64LE: # %bb.0: # %entry
2718 ; PC64LE-NEXT: mflr 0
2719 ; PC64LE-NEXT: stdu 1, -80(1)
2720 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2721 ; PC64LE-NEXT: li 3, 48
2722 ; PC64LE-NEXT: std 0, 96(1)
2723 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2724 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2725 ; PC64LE-NEXT: xscvspdpn 1, 0
2726 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2727 ; PC64LE-NEXT: vmr 31, 2
2728 ; PC64LE-NEXT: bl expf
2730 ; PC64LE-NEXT: xxswapd 0, 63
2731 ; PC64LE-NEXT: fmr 31, 1
2732 ; PC64LE-NEXT: xscvspdpn 1, 0
2733 ; PC64LE-NEXT: bl expf
2735 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2736 ; PC64LE-NEXT: fmr 30, 1
2737 ; PC64LE-NEXT: xscvspdpn 1, 0
2738 ; PC64LE-NEXT: bl expf
2740 ; PC64LE-NEXT: xscvdpspn 0, 1
2741 ; PC64LE-NEXT: xscvdpspn 1, 30
2742 ; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha
2743 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2744 ; PC64LE-NEXT: xscvdpspn 36, 31
2745 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2746 ; PC64LE-NEXT: addi 3, 3, .LCPI52_0@toc@l
2747 ; PC64LE-NEXT: xxmrghw 34, 1, 0
2748 ; PC64LE-NEXT: lxvd2x 0, 0, 3
2749 ; PC64LE-NEXT: li 3, 48
2750 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2751 ; PC64LE-NEXT: xxswapd 35, 0
2752 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2753 ; PC64LE-NEXT: addi 1, 1, 80
2754 ; PC64LE-NEXT: ld 0, 16(1)
2755 ; PC64LE-NEXT: mtlr 0
2758 ; PC64LE9-LABEL: constrained_vector_exp_v3f32:
2759 ; PC64LE9: # %bb.0: # %entry
2760 ; PC64LE9-NEXT: mflr 0
2761 ; PC64LE9-NEXT: stdu 1, -64(1)
2762 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2763 ; PC64LE9-NEXT: std 0, 80(1)
2764 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2765 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2766 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2767 ; PC64LE9-NEXT: vmr 31, 2
2768 ; PC64LE9-NEXT: xscvspdpn 1, 0
2769 ; PC64LE9-NEXT: bl expf
2771 ; PC64LE9-NEXT: xxswapd 0, 63
2772 ; PC64LE9-NEXT: fmr 31, 1
2773 ; PC64LE9-NEXT: xscvspdpn 1, 0
2774 ; PC64LE9-NEXT: bl expf
2776 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2777 ; PC64LE9-NEXT: fmr 30, 1
2778 ; PC64LE9-NEXT: xscvspdpn 1, 0
2779 ; PC64LE9-NEXT: bl expf
2781 ; PC64LE9-NEXT: xscvdpspn 0, 1
2782 ; PC64LE9-NEXT: xscvdpspn 1, 30
2783 ; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha
2784 ; PC64LE9-NEXT: xscvdpspn 34, 31
2785 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2786 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2787 ; PC64LE9-NEXT: addi 3, 3, .LCPI52_0@toc@l
2788 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2789 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
2790 ; PC64LE9-NEXT: lxv 0, 0(3)
2791 ; PC64LE9-NEXT: xxperm 34, 35, 0
2792 ; PC64LE9-NEXT: addi 1, 1, 64
2793 ; PC64LE9-NEXT: ld 0, 16(1)
2794 ; PC64LE9-NEXT: mtlr 0
2797 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
2799 metadata !"round.dynamic",
2800 metadata !"fpexcept.strict") #1
2801 ret <3 x float> %exp
2804 define <3 x double> @constrained_vector_exp_v3f64(<3 x double> %x) #0 {
2805 ; PC64LE-LABEL: constrained_vector_exp_v3f64:
2806 ; PC64LE: # %bb.0: # %entry
2807 ; PC64LE-NEXT: mflr 0
2808 ; PC64LE-NEXT: stdu 1, -80(1)
2809 ; PC64LE-NEXT: li 3, 48
2810 ; PC64LE-NEXT: std 0, 96(1)
2811 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2812 ; PC64LE-NEXT: fmr 30, 2
2813 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2814 ; PC64LE-NEXT: fmr 31, 3
2815 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2816 ; PC64LE-NEXT: bl exp
2818 ; PC64LE-NEXT: xxlor 63, 1, 1
2819 ; PC64LE-NEXT: fmr 1, 30
2820 ; PC64LE-NEXT: bl exp
2822 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2823 ; PC64LE-NEXT: fmr 1, 31
2824 ; PC64LE-NEXT: bl exp
2826 ; PC64LE-NEXT: li 3, 48
2827 ; PC64LE-NEXT: fmr 3, 1
2828 ; PC64LE-NEXT: xxswapd 1, 63
2829 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2830 ; PC64LE-NEXT: xxlor 2, 63, 63
2831 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2832 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2833 ; PC64LE-NEXT: addi 1, 1, 80
2834 ; PC64LE-NEXT: ld 0, 16(1)
2835 ; PC64LE-NEXT: mtlr 0
2838 ; PC64LE9-LABEL: constrained_vector_exp_v3f64:
2839 ; PC64LE9: # %bb.0: # %entry
2840 ; PC64LE9-NEXT: mflr 0
2841 ; PC64LE9-NEXT: stdu 1, -64(1)
2842 ; PC64LE9-NEXT: std 0, 80(1)
2843 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2844 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2845 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2846 ; PC64LE9-NEXT: fmr 31, 3
2847 ; PC64LE9-NEXT: fmr 30, 2
2848 ; PC64LE9-NEXT: bl exp
2850 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2851 ; PC64LE9-NEXT: fmr 1, 30
2852 ; PC64LE9-NEXT: bl exp
2854 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2855 ; PC64LE9-NEXT: fmr 1, 31
2856 ; PC64LE9-NEXT: bl exp
2858 ; PC64LE9-NEXT: fmr 3, 1
2859 ; PC64LE9-NEXT: xxswapd 1, 63
2860 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2861 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2862 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2863 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2864 ; PC64LE9-NEXT: addi 1, 1, 64
2865 ; PC64LE9-NEXT: ld 0, 16(1)
2866 ; PC64LE9-NEXT: mtlr 0
2869 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
2871 metadata !"round.dynamic",
2872 metadata !"fpexcept.strict") #1
2873 ret <3 x double> %exp
2876 define <4 x double> @constrained_vector_exp_v4f64(<4 x double> %x) #0 {
2877 ; PC64LE-LABEL: constrained_vector_exp_v4f64:
2878 ; PC64LE: # %bb.0: # %entry
2879 ; PC64LE-NEXT: mflr 0
2880 ; PC64LE-NEXT: stdu 1, -96(1)
2881 ; PC64LE-NEXT: li 3, 48
2882 ; PC64LE-NEXT: std 0, 112(1)
2883 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
2884 ; PC64LE-NEXT: li 3, 64
2885 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2886 ; PC64LE-NEXT: vmr 30, 2
2887 ; PC64LE-NEXT: li 3, 80
2888 ; PC64LE-NEXT: xxlor 1, 62, 62
2889 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2890 ; PC64LE-NEXT: vmr 31, 3
2891 ; PC64LE-NEXT: bl exp
2893 ; PC64LE-NEXT: xxlor 61, 1, 1
2894 ; PC64LE-NEXT: xxswapd 1, 62
2895 ; PC64LE-NEXT: bl exp
2897 ; PC64LE-NEXT: xxmrghd 62, 61, 1
2898 ; PC64LE-NEXT: xxlor 1, 63, 63
2899 ; PC64LE-NEXT: bl exp
2901 ; PC64LE-NEXT: xxlor 61, 1, 1
2902 ; PC64LE-NEXT: xxswapd 1, 63
2903 ; PC64LE-NEXT: bl exp
2905 ; PC64LE-NEXT: li 3, 80
2906 ; PC64LE-NEXT: vmr 2, 30
2907 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2908 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2909 ; PC64LE-NEXT: li 3, 64
2910 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2911 ; PC64LE-NEXT: li 3, 48
2912 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2913 ; PC64LE-NEXT: addi 1, 1, 96
2914 ; PC64LE-NEXT: ld 0, 16(1)
2915 ; PC64LE-NEXT: mtlr 0
2918 ; PC64LE9-LABEL: constrained_vector_exp_v4f64:
2919 ; PC64LE9: # %bb.0: # %entry
2920 ; PC64LE9-NEXT: mflr 0
2921 ; PC64LE9-NEXT: stdu 1, -80(1)
2922 ; PC64LE9-NEXT: std 0, 96(1)
2923 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2924 ; PC64LE9-NEXT: vmr 30, 2
2925 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2926 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2927 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2928 ; PC64LE9-NEXT: vmr 31, 3
2929 ; PC64LE9-NEXT: bl exp
2931 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2932 ; PC64LE9-NEXT: xxswapd 1, 62
2933 ; PC64LE9-NEXT: bl exp
2935 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2936 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2937 ; PC64LE9-NEXT: bl exp
2939 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2940 ; PC64LE9-NEXT: xxswapd 1, 63
2941 ; PC64LE9-NEXT: bl exp
2943 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2944 ; PC64LE9-NEXT: vmr 2, 30
2945 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2946 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2947 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2948 ; PC64LE9-NEXT: addi 1, 1, 80
2949 ; PC64LE9-NEXT: ld 0, 16(1)
2950 ; PC64LE9-NEXT: mtlr 0
2953 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64(
2955 metadata !"round.dynamic",
2956 metadata !"fpexcept.strict") #1
2957 ret <4 x double> %exp
2960 define <1 x float> @constrained_vector_exp2_v1f32(<1 x float> %x) #0 {
2961 ; PC64LE-LABEL: constrained_vector_exp2_v1f32:
2962 ; PC64LE: # %bb.0: # %entry
2963 ; PC64LE-NEXT: mflr 0
2964 ; PC64LE-NEXT: stdu 1, -32(1)
2965 ; PC64LE-NEXT: std 0, 48(1)
2966 ; PC64LE-NEXT: bl exp2f
2968 ; PC64LE-NEXT: addi 1, 1, 32
2969 ; PC64LE-NEXT: ld 0, 16(1)
2970 ; PC64LE-NEXT: mtlr 0
2973 ; PC64LE9-LABEL: constrained_vector_exp2_v1f32:
2974 ; PC64LE9: # %bb.0: # %entry
2975 ; PC64LE9-NEXT: mflr 0
2976 ; PC64LE9-NEXT: stdu 1, -32(1)
2977 ; PC64LE9-NEXT: std 0, 48(1)
2978 ; PC64LE9-NEXT: bl exp2f
2980 ; PC64LE9-NEXT: addi 1, 1, 32
2981 ; PC64LE9-NEXT: ld 0, 16(1)
2982 ; PC64LE9-NEXT: mtlr 0
2985 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
2987 metadata !"round.dynamic",
2988 metadata !"fpexcept.strict") #1
2989 ret <1 x float> %exp2
2992 define <2 x double> @constrained_vector_exp2_v2f64(<2 x double> %x) #0 {
2993 ; PC64LE-LABEL: constrained_vector_exp2_v2f64:
2994 ; PC64LE: # %bb.0: # %entry
2995 ; PC64LE-NEXT: mflr 0
2996 ; PC64LE-NEXT: stdu 1, -80(1)
2997 ; PC64LE-NEXT: li 3, 48
2998 ; PC64LE-NEXT: std 0, 96(1)
2999 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3000 ; PC64LE-NEXT: li 3, 64
3001 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3002 ; PC64LE-NEXT: vmr 31, 2
3003 ; PC64LE-NEXT: xxlor 1, 63, 63
3004 ; PC64LE-NEXT: bl exp2
3006 ; PC64LE-NEXT: xxlor 62, 1, 1
3007 ; PC64LE-NEXT: xxswapd 1, 63
3008 ; PC64LE-NEXT: bl exp2
3010 ; PC64LE-NEXT: li 3, 64
3011 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3012 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3013 ; PC64LE-NEXT: li 3, 48
3014 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3015 ; PC64LE-NEXT: addi 1, 1, 80
3016 ; PC64LE-NEXT: ld 0, 16(1)
3017 ; PC64LE-NEXT: mtlr 0
3020 ; PC64LE9-LABEL: constrained_vector_exp2_v2f64:
3021 ; PC64LE9: # %bb.0: # %entry
3022 ; PC64LE9-NEXT: mflr 0
3023 ; PC64LE9-NEXT: stdu 1, -64(1)
3024 ; PC64LE9-NEXT: std 0, 80(1)
3025 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3026 ; PC64LE9-NEXT: vmr 31, 2
3027 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3028 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3029 ; PC64LE9-NEXT: bl exp2
3031 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3032 ; PC64LE9-NEXT: xxswapd 1, 63
3033 ; PC64LE9-NEXT: bl exp2
3035 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3036 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3037 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3038 ; PC64LE9-NEXT: addi 1, 1, 64
3039 ; PC64LE9-NEXT: ld 0, 16(1)
3040 ; PC64LE9-NEXT: mtlr 0
3043 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
3045 metadata !"round.dynamic",
3046 metadata !"fpexcept.strict") #1
3047 ret <2 x double> %exp2
3050 define <3 x float> @constrained_vector_exp2_v3f32(<3 x float> %x) #0 {
3051 ; PC64LE-LABEL: constrained_vector_exp2_v3f32:
3052 ; PC64LE: # %bb.0: # %entry
3053 ; PC64LE-NEXT: mflr 0
3054 ; PC64LE-NEXT: stdu 1, -80(1)
3055 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3056 ; PC64LE-NEXT: li 3, 48
3057 ; PC64LE-NEXT: std 0, 96(1)
3058 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3059 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3060 ; PC64LE-NEXT: xscvspdpn 1, 0
3061 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3062 ; PC64LE-NEXT: vmr 31, 2
3063 ; PC64LE-NEXT: bl exp2f
3065 ; PC64LE-NEXT: xxswapd 0, 63
3066 ; PC64LE-NEXT: fmr 31, 1
3067 ; PC64LE-NEXT: xscvspdpn 1, 0
3068 ; PC64LE-NEXT: bl exp2f
3070 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3071 ; PC64LE-NEXT: fmr 30, 1
3072 ; PC64LE-NEXT: xscvspdpn 1, 0
3073 ; PC64LE-NEXT: bl exp2f
3075 ; PC64LE-NEXT: xscvdpspn 0, 1
3076 ; PC64LE-NEXT: xscvdpspn 1, 30
3077 ; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3078 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3079 ; PC64LE-NEXT: xscvdpspn 36, 31
3080 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3081 ; PC64LE-NEXT: addi 3, 3, .LCPI57_0@toc@l
3082 ; PC64LE-NEXT: xxmrghw 34, 1, 0
3083 ; PC64LE-NEXT: lxvd2x 0, 0, 3
3084 ; PC64LE-NEXT: li 3, 48
3085 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3086 ; PC64LE-NEXT: xxswapd 35, 0
3087 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3088 ; PC64LE-NEXT: addi 1, 1, 80
3089 ; PC64LE-NEXT: ld 0, 16(1)
3090 ; PC64LE-NEXT: mtlr 0
3093 ; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
3094 ; PC64LE9: # %bb.0: # %entry
3095 ; PC64LE9-NEXT: mflr 0
3096 ; PC64LE9-NEXT: stdu 1, -64(1)
3097 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3098 ; PC64LE9-NEXT: std 0, 80(1)
3099 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3100 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3101 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3102 ; PC64LE9-NEXT: vmr 31, 2
3103 ; PC64LE9-NEXT: xscvspdpn 1, 0
3104 ; PC64LE9-NEXT: bl exp2f
3106 ; PC64LE9-NEXT: xxswapd 0, 63
3107 ; PC64LE9-NEXT: fmr 31, 1
3108 ; PC64LE9-NEXT: xscvspdpn 1, 0
3109 ; PC64LE9-NEXT: bl exp2f
3111 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3112 ; PC64LE9-NEXT: fmr 30, 1
3113 ; PC64LE9-NEXT: xscvspdpn 1, 0
3114 ; PC64LE9-NEXT: bl exp2f
3116 ; PC64LE9-NEXT: xscvdpspn 0, 1
3117 ; PC64LE9-NEXT: xscvdpspn 1, 30
3118 ; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3119 ; PC64LE9-NEXT: xscvdpspn 34, 31
3120 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3121 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3122 ; PC64LE9-NEXT: addi 3, 3, .LCPI57_0@toc@l
3123 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3124 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
3125 ; PC64LE9-NEXT: lxv 0, 0(3)
3126 ; PC64LE9-NEXT: xxperm 34, 35, 0
3127 ; PC64LE9-NEXT: addi 1, 1, 64
3128 ; PC64LE9-NEXT: ld 0, 16(1)
3129 ; PC64LE9-NEXT: mtlr 0
3132 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
3134 metadata !"round.dynamic",
3135 metadata !"fpexcept.strict") #1
3136 ret <3 x float> %exp2
3139 define <3 x double> @constrained_vector_exp2_v3f64(<3 x double> %x) #0 {
3140 ; PC64LE-LABEL: constrained_vector_exp2_v3f64:
3141 ; PC64LE: # %bb.0: # %entry
3142 ; PC64LE-NEXT: mflr 0
3143 ; PC64LE-NEXT: stdu 1, -80(1)
3144 ; PC64LE-NEXT: li 3, 48
3145 ; PC64LE-NEXT: std 0, 96(1)
3146 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3147 ; PC64LE-NEXT: fmr 30, 2
3148 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3149 ; PC64LE-NEXT: fmr 31, 3
3150 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3151 ; PC64LE-NEXT: bl exp2
3153 ; PC64LE-NEXT: xxlor 63, 1, 1
3154 ; PC64LE-NEXT: fmr 1, 30
3155 ; PC64LE-NEXT: bl exp2
3157 ; PC64LE-NEXT: xxmrghd 63, 1, 63
3158 ; PC64LE-NEXT: fmr 1, 31
3159 ; PC64LE-NEXT: bl exp2
3161 ; PC64LE-NEXT: li 3, 48
3162 ; PC64LE-NEXT: fmr 3, 1
3163 ; PC64LE-NEXT: xxswapd 1, 63
3164 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3165 ; PC64LE-NEXT: xxlor 2, 63, 63
3166 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3167 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3168 ; PC64LE-NEXT: addi 1, 1, 80
3169 ; PC64LE-NEXT: ld 0, 16(1)
3170 ; PC64LE-NEXT: mtlr 0
3173 ; PC64LE9-LABEL: constrained_vector_exp2_v3f64:
3174 ; PC64LE9: # %bb.0: # %entry
3175 ; PC64LE9-NEXT: mflr 0
3176 ; PC64LE9-NEXT: stdu 1, -64(1)
3177 ; PC64LE9-NEXT: std 0, 80(1)
3178 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3179 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3180 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3181 ; PC64LE9-NEXT: fmr 31, 3
3182 ; PC64LE9-NEXT: fmr 30, 2
3183 ; PC64LE9-NEXT: bl exp2
3185 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3186 ; PC64LE9-NEXT: fmr 1, 30
3187 ; PC64LE9-NEXT: bl exp2
3189 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3190 ; PC64LE9-NEXT: fmr 1, 31
3191 ; PC64LE9-NEXT: bl exp2
3193 ; PC64LE9-NEXT: fmr 3, 1
3194 ; PC64LE9-NEXT: xxswapd 1, 63
3195 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3196 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3197 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3198 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3199 ; PC64LE9-NEXT: addi 1, 1, 64
3200 ; PC64LE9-NEXT: ld 0, 16(1)
3201 ; PC64LE9-NEXT: mtlr 0
3204 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
3206 metadata !"round.dynamic",
3207 metadata !"fpexcept.strict") #1
3208 ret <3 x double> %exp2
3211 define <4 x double> @constrained_vector_exp2_v4f64(<4 x double> %x) #0 {
3212 ; PC64LE-LABEL: constrained_vector_exp2_v4f64:
3213 ; PC64LE: # %bb.0: # %entry
3214 ; PC64LE-NEXT: mflr 0
3215 ; PC64LE-NEXT: stdu 1, -96(1)
3216 ; PC64LE-NEXT: li 3, 48
3217 ; PC64LE-NEXT: std 0, 112(1)
3218 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3219 ; PC64LE-NEXT: li 3, 64
3220 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3221 ; PC64LE-NEXT: vmr 30, 2
3222 ; PC64LE-NEXT: li 3, 80
3223 ; PC64LE-NEXT: xxlor 1, 62, 62
3224 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3225 ; PC64LE-NEXT: vmr 31, 3
3226 ; PC64LE-NEXT: bl exp2
3228 ; PC64LE-NEXT: xxlor 61, 1, 1
3229 ; PC64LE-NEXT: xxswapd 1, 62
3230 ; PC64LE-NEXT: bl exp2
3232 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3233 ; PC64LE-NEXT: xxlor 1, 63, 63
3234 ; PC64LE-NEXT: bl exp2
3236 ; PC64LE-NEXT: xxlor 61, 1, 1
3237 ; PC64LE-NEXT: xxswapd 1, 63
3238 ; PC64LE-NEXT: bl exp2
3240 ; PC64LE-NEXT: li 3, 80
3241 ; PC64LE-NEXT: vmr 2, 30
3242 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3243 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3244 ; PC64LE-NEXT: li 3, 64
3245 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3246 ; PC64LE-NEXT: li 3, 48
3247 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3248 ; PC64LE-NEXT: addi 1, 1, 96
3249 ; PC64LE-NEXT: ld 0, 16(1)
3250 ; PC64LE-NEXT: mtlr 0
3253 ; PC64LE9-LABEL: constrained_vector_exp2_v4f64:
3254 ; PC64LE9: # %bb.0: # %entry
3255 ; PC64LE9-NEXT: mflr 0
3256 ; PC64LE9-NEXT: stdu 1, -80(1)
3257 ; PC64LE9-NEXT: std 0, 96(1)
3258 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3259 ; PC64LE9-NEXT: vmr 30, 2
3260 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3261 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3262 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3263 ; PC64LE9-NEXT: vmr 31, 3
3264 ; PC64LE9-NEXT: bl exp2
3266 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3267 ; PC64LE9-NEXT: xxswapd 1, 62
3268 ; PC64LE9-NEXT: bl exp2
3270 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3271 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3272 ; PC64LE9-NEXT: bl exp2
3274 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3275 ; PC64LE9-NEXT: xxswapd 1, 63
3276 ; PC64LE9-NEXT: bl exp2
3278 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3279 ; PC64LE9-NEXT: vmr 2, 30
3280 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3281 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3282 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3283 ; PC64LE9-NEXT: addi 1, 1, 80
3284 ; PC64LE9-NEXT: ld 0, 16(1)
3285 ; PC64LE9-NEXT: mtlr 0
3288 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64(
3290 metadata !"round.dynamic",
3291 metadata !"fpexcept.strict") #1
3292 ret <4 x double> %exp2
3295 define <1 x float> @constrained_vector_log_v1f32(<1 x float> %x) #0 {
3296 ; PC64LE-LABEL: constrained_vector_log_v1f32:
3297 ; PC64LE: # %bb.0: # %entry
3298 ; PC64LE-NEXT: mflr 0
3299 ; PC64LE-NEXT: stdu 1, -32(1)
3300 ; PC64LE-NEXT: std 0, 48(1)
3301 ; PC64LE-NEXT: bl logf
3303 ; PC64LE-NEXT: addi 1, 1, 32
3304 ; PC64LE-NEXT: ld 0, 16(1)
3305 ; PC64LE-NEXT: mtlr 0
3308 ; PC64LE9-LABEL: constrained_vector_log_v1f32:
3309 ; PC64LE9: # %bb.0: # %entry
3310 ; PC64LE9-NEXT: mflr 0
3311 ; PC64LE9-NEXT: stdu 1, -32(1)
3312 ; PC64LE9-NEXT: std 0, 48(1)
3313 ; PC64LE9-NEXT: bl logf
3315 ; PC64LE9-NEXT: addi 1, 1, 32
3316 ; PC64LE9-NEXT: ld 0, 16(1)
3317 ; PC64LE9-NEXT: mtlr 0
3320 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
3322 metadata !"round.dynamic",
3323 metadata !"fpexcept.strict") #1
3324 ret <1 x float> %log
3327 define <2 x double> @constrained_vector_log_v2f64(<2 x double> %x) #0 {
3328 ; PC64LE-LABEL: constrained_vector_log_v2f64:
3329 ; PC64LE: # %bb.0: # %entry
3330 ; PC64LE-NEXT: mflr 0
3331 ; PC64LE-NEXT: stdu 1, -80(1)
3332 ; PC64LE-NEXT: li 3, 48
3333 ; PC64LE-NEXT: std 0, 96(1)
3334 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3335 ; PC64LE-NEXT: li 3, 64
3336 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3337 ; PC64LE-NEXT: vmr 31, 2
3338 ; PC64LE-NEXT: xxlor 1, 63, 63
3339 ; PC64LE-NEXT: bl log
3341 ; PC64LE-NEXT: xxlor 62, 1, 1
3342 ; PC64LE-NEXT: xxswapd 1, 63
3343 ; PC64LE-NEXT: bl log
3345 ; PC64LE-NEXT: li 3, 64
3346 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3347 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3348 ; PC64LE-NEXT: li 3, 48
3349 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3350 ; PC64LE-NEXT: addi 1, 1, 80
3351 ; PC64LE-NEXT: ld 0, 16(1)
3352 ; PC64LE-NEXT: mtlr 0
3355 ; PC64LE9-LABEL: constrained_vector_log_v2f64:
3356 ; PC64LE9: # %bb.0: # %entry
3357 ; PC64LE9-NEXT: mflr 0
3358 ; PC64LE9-NEXT: stdu 1, -64(1)
3359 ; PC64LE9-NEXT: std 0, 80(1)
3360 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3361 ; PC64LE9-NEXT: vmr 31, 2
3362 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3363 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3364 ; PC64LE9-NEXT: bl log
3366 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3367 ; PC64LE9-NEXT: xxswapd 1, 63
3368 ; PC64LE9-NEXT: bl log
3370 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3371 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3372 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3373 ; PC64LE9-NEXT: addi 1, 1, 64
3374 ; PC64LE9-NEXT: ld 0, 16(1)
3375 ; PC64LE9-NEXT: mtlr 0
3378 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
3380 metadata !"round.dynamic",
3381 metadata !"fpexcept.strict") #1
3382 ret <2 x double> %log
3385 define <3 x float> @constrained_vector_log_v3f32(<3 x float> %x) #0 {
3386 ; PC64LE-LABEL: constrained_vector_log_v3f32:
3387 ; PC64LE: # %bb.0: # %entry
3388 ; PC64LE-NEXT: mflr 0
3389 ; PC64LE-NEXT: stdu 1, -80(1)
3390 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3391 ; PC64LE-NEXT: li 3, 48
3392 ; PC64LE-NEXT: std 0, 96(1)
3393 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3394 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3395 ; PC64LE-NEXT: xscvspdpn 1, 0
3396 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3397 ; PC64LE-NEXT: vmr 31, 2
3398 ; PC64LE-NEXT: bl logf
3400 ; PC64LE-NEXT: xxswapd 0, 63
3401 ; PC64LE-NEXT: fmr 31, 1
3402 ; PC64LE-NEXT: xscvspdpn 1, 0
3403 ; PC64LE-NEXT: bl logf
3405 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3406 ; PC64LE-NEXT: fmr 30, 1
3407 ; PC64LE-NEXT: xscvspdpn 1, 0
3408 ; PC64LE-NEXT: bl logf
3410 ; PC64LE-NEXT: xscvdpspn 0, 1
3411 ; PC64LE-NEXT: xscvdpspn 1, 30
3412 ; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha
3413 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3414 ; PC64LE-NEXT: xscvdpspn 36, 31
3415 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3416 ; PC64LE-NEXT: addi 3, 3, .LCPI62_0@toc@l
3417 ; PC64LE-NEXT: xxmrghw 34, 1, 0
3418 ; PC64LE-NEXT: lxvd2x 0, 0, 3
3419 ; PC64LE-NEXT: li 3, 48
3420 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3421 ; PC64LE-NEXT: xxswapd 35, 0
3422 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3423 ; PC64LE-NEXT: addi 1, 1, 80
3424 ; PC64LE-NEXT: ld 0, 16(1)
3425 ; PC64LE-NEXT: mtlr 0
3428 ; PC64LE9-LABEL: constrained_vector_log_v3f32:
3429 ; PC64LE9: # %bb.0: # %entry
3430 ; PC64LE9-NEXT: mflr 0
3431 ; PC64LE9-NEXT: stdu 1, -64(1)
3432 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3433 ; PC64LE9-NEXT: std 0, 80(1)
3434 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3435 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3436 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3437 ; PC64LE9-NEXT: vmr 31, 2
3438 ; PC64LE9-NEXT: xscvspdpn 1, 0
3439 ; PC64LE9-NEXT: bl logf
3441 ; PC64LE9-NEXT: xxswapd 0, 63
3442 ; PC64LE9-NEXT: fmr 31, 1
3443 ; PC64LE9-NEXT: xscvspdpn 1, 0
3444 ; PC64LE9-NEXT: bl logf
3446 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3447 ; PC64LE9-NEXT: fmr 30, 1
3448 ; PC64LE9-NEXT: xscvspdpn 1, 0
3449 ; PC64LE9-NEXT: bl logf
3451 ; PC64LE9-NEXT: xscvdpspn 0, 1
3452 ; PC64LE9-NEXT: xscvdpspn 1, 30
3453 ; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha
3454 ; PC64LE9-NEXT: xscvdpspn 34, 31
3455 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3456 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3457 ; PC64LE9-NEXT: addi 3, 3, .LCPI62_0@toc@l
3458 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3459 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
3460 ; PC64LE9-NEXT: lxv 0, 0(3)
3461 ; PC64LE9-NEXT: xxperm 34, 35, 0
3462 ; PC64LE9-NEXT: addi 1, 1, 64
3463 ; PC64LE9-NEXT: ld 0, 16(1)
3464 ; PC64LE9-NEXT: mtlr 0
3467 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
3469 metadata !"round.dynamic",
3470 metadata !"fpexcept.strict") #1
3471 ret <3 x float> %log
3474 define <3 x double> @constrained_vector_log_v3f64(<3 x double> %x) #0 {
3475 ; PC64LE-LABEL: constrained_vector_log_v3f64:
3476 ; PC64LE: # %bb.0: # %entry
3477 ; PC64LE-NEXT: mflr 0
3478 ; PC64LE-NEXT: stdu 1, -80(1)
3479 ; PC64LE-NEXT: li 3, 48
3480 ; PC64LE-NEXT: std 0, 96(1)
3481 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3482 ; PC64LE-NEXT: fmr 30, 2
3483 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3484 ; PC64LE-NEXT: fmr 31, 3
3485 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3486 ; PC64LE-NEXT: bl log
3488 ; PC64LE-NEXT: xxlor 63, 1, 1
3489 ; PC64LE-NEXT: fmr 1, 30
3490 ; PC64LE-NEXT: bl log
3492 ; PC64LE-NEXT: xxmrghd 63, 1, 63
3493 ; PC64LE-NEXT: fmr 1, 31
3494 ; PC64LE-NEXT: bl log
3496 ; PC64LE-NEXT: li 3, 48
3497 ; PC64LE-NEXT: fmr 3, 1
3498 ; PC64LE-NEXT: xxswapd 1, 63
3499 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3500 ; PC64LE-NEXT: xxlor 2, 63, 63
3501 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3502 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3503 ; PC64LE-NEXT: addi 1, 1, 80
3504 ; PC64LE-NEXT: ld 0, 16(1)
3505 ; PC64LE-NEXT: mtlr 0
3508 ; PC64LE9-LABEL: constrained_vector_log_v3f64:
3509 ; PC64LE9: # %bb.0: # %entry
3510 ; PC64LE9-NEXT: mflr 0
3511 ; PC64LE9-NEXT: stdu 1, -64(1)
3512 ; PC64LE9-NEXT: std 0, 80(1)
3513 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3514 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3515 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3516 ; PC64LE9-NEXT: fmr 31, 3
3517 ; PC64LE9-NEXT: fmr 30, 2
3518 ; PC64LE9-NEXT: bl log
3520 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3521 ; PC64LE9-NEXT: fmr 1, 30
3522 ; PC64LE9-NEXT: bl log
3524 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3525 ; PC64LE9-NEXT: fmr 1, 31
3526 ; PC64LE9-NEXT: bl log
3528 ; PC64LE9-NEXT: fmr 3, 1
3529 ; PC64LE9-NEXT: xxswapd 1, 63
3530 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3531 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3532 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3533 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3534 ; PC64LE9-NEXT: addi 1, 1, 64
3535 ; PC64LE9-NEXT: ld 0, 16(1)
3536 ; PC64LE9-NEXT: mtlr 0
3539 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
3541 metadata !"round.dynamic",
3542 metadata !"fpexcept.strict") #1
3543 ret <3 x double> %log
3546 define <4 x double> @constrained_vector_log_v4f64(<4 x double> %x) #0 {
3547 ; PC64LE-LABEL: constrained_vector_log_v4f64:
3548 ; PC64LE: # %bb.0: # %entry
3549 ; PC64LE-NEXT: mflr 0
3550 ; PC64LE-NEXT: stdu 1, -96(1)
3551 ; PC64LE-NEXT: li 3, 48
3552 ; PC64LE-NEXT: std 0, 112(1)
3553 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3554 ; PC64LE-NEXT: li 3, 64
3555 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3556 ; PC64LE-NEXT: vmr 30, 2
3557 ; PC64LE-NEXT: li 3, 80
3558 ; PC64LE-NEXT: xxlor 1, 62, 62
3559 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3560 ; PC64LE-NEXT: vmr 31, 3
3561 ; PC64LE-NEXT: bl log
3563 ; PC64LE-NEXT: xxlor 61, 1, 1
3564 ; PC64LE-NEXT: xxswapd 1, 62
3565 ; PC64LE-NEXT: bl log
3567 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3568 ; PC64LE-NEXT: xxlor 1, 63, 63
3569 ; PC64LE-NEXT: bl log
3571 ; PC64LE-NEXT: xxlor 61, 1, 1
3572 ; PC64LE-NEXT: xxswapd 1, 63
3573 ; PC64LE-NEXT: bl log
3575 ; PC64LE-NEXT: li 3, 80
3576 ; PC64LE-NEXT: vmr 2, 30
3577 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3578 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3579 ; PC64LE-NEXT: li 3, 64
3580 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3581 ; PC64LE-NEXT: li 3, 48
3582 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3583 ; PC64LE-NEXT: addi 1, 1, 96
3584 ; PC64LE-NEXT: ld 0, 16(1)
3585 ; PC64LE-NEXT: mtlr 0
3588 ; PC64LE9-LABEL: constrained_vector_log_v4f64:
3589 ; PC64LE9: # %bb.0: # %entry
3590 ; PC64LE9-NEXT: mflr 0
3591 ; PC64LE9-NEXT: stdu 1, -80(1)
3592 ; PC64LE9-NEXT: std 0, 96(1)
3593 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3594 ; PC64LE9-NEXT: vmr 30, 2
3595 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3596 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3597 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3598 ; PC64LE9-NEXT: vmr 31, 3
3599 ; PC64LE9-NEXT: bl log
3601 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3602 ; PC64LE9-NEXT: xxswapd 1, 62
3603 ; PC64LE9-NEXT: bl log
3605 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3606 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3607 ; PC64LE9-NEXT: bl log
3609 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3610 ; PC64LE9-NEXT: xxswapd 1, 63
3611 ; PC64LE9-NEXT: bl log
3613 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3614 ; PC64LE9-NEXT: vmr 2, 30
3615 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3616 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3617 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3618 ; PC64LE9-NEXT: addi 1, 1, 80
3619 ; PC64LE9-NEXT: ld 0, 16(1)
3620 ; PC64LE9-NEXT: mtlr 0
3623 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64(
3625 metadata !"round.dynamic",
3626 metadata !"fpexcept.strict") #1
3627 ret <4 x double> %log
3630 define <1 x float> @constrained_vector_log10_v1f32(<1 x float> %x) #0 {
3631 ; PC64LE-LABEL: constrained_vector_log10_v1f32:
3632 ; PC64LE: # %bb.0: # %entry
3633 ; PC64LE-NEXT: mflr 0
3634 ; PC64LE-NEXT: stdu 1, -32(1)
3635 ; PC64LE-NEXT: std 0, 48(1)
3636 ; PC64LE-NEXT: bl log10f
3638 ; PC64LE-NEXT: addi 1, 1, 32
3639 ; PC64LE-NEXT: ld 0, 16(1)
3640 ; PC64LE-NEXT: mtlr 0
3643 ; PC64LE9-LABEL: constrained_vector_log10_v1f32:
3644 ; PC64LE9: # %bb.0: # %entry
3645 ; PC64LE9-NEXT: mflr 0
3646 ; PC64LE9-NEXT: stdu 1, -32(1)
3647 ; PC64LE9-NEXT: std 0, 48(1)
3648 ; PC64LE9-NEXT: bl log10f
3650 ; PC64LE9-NEXT: addi 1, 1, 32
3651 ; PC64LE9-NEXT: ld 0, 16(1)
3652 ; PC64LE9-NEXT: mtlr 0
3655 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
3657 metadata !"round.dynamic",
3658 metadata !"fpexcept.strict") #1
3659 ret <1 x float> %log10
3662 define <2 x double> @constrained_vector_log10_v2f64(<2 x double> %x) #0 {
3663 ; PC64LE-LABEL: constrained_vector_log10_v2f64:
3664 ; PC64LE: # %bb.0: # %entry
3665 ; PC64LE-NEXT: mflr 0
3666 ; PC64LE-NEXT: stdu 1, -80(1)
3667 ; PC64LE-NEXT: li 3, 48
3668 ; PC64LE-NEXT: std 0, 96(1)
3669 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3670 ; PC64LE-NEXT: li 3, 64
3671 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3672 ; PC64LE-NEXT: vmr 31, 2
3673 ; PC64LE-NEXT: xxlor 1, 63, 63
3674 ; PC64LE-NEXT: bl log10
3676 ; PC64LE-NEXT: xxlor 62, 1, 1
3677 ; PC64LE-NEXT: xxswapd 1, 63
3678 ; PC64LE-NEXT: bl log10
3680 ; PC64LE-NEXT: li 3, 64
3681 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3682 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3683 ; PC64LE-NEXT: li 3, 48
3684 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3685 ; PC64LE-NEXT: addi 1, 1, 80
3686 ; PC64LE-NEXT: ld 0, 16(1)
3687 ; PC64LE-NEXT: mtlr 0
3690 ; PC64LE9-LABEL: constrained_vector_log10_v2f64:
3691 ; PC64LE9: # %bb.0: # %entry
3692 ; PC64LE9-NEXT: mflr 0
3693 ; PC64LE9-NEXT: stdu 1, -64(1)
3694 ; PC64LE9-NEXT: std 0, 80(1)
3695 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3696 ; PC64LE9-NEXT: vmr 31, 2
3697 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3698 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3699 ; PC64LE9-NEXT: bl log10
3701 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3702 ; PC64LE9-NEXT: xxswapd 1, 63
3703 ; PC64LE9-NEXT: bl log10
3705 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3706 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3707 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3708 ; PC64LE9-NEXT: addi 1, 1, 64
3709 ; PC64LE9-NEXT: ld 0, 16(1)
3710 ; PC64LE9-NEXT: mtlr 0
3713 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
3715 metadata !"round.dynamic",
3716 metadata !"fpexcept.strict") #1
3717 ret <2 x double> %log10
3720 define <3 x float> @constrained_vector_log10_v3f32(<3 x float> %x) #0 {
3721 ; PC64LE-LABEL: constrained_vector_log10_v3f32:
3722 ; PC64LE: # %bb.0: # %entry
3723 ; PC64LE-NEXT: mflr 0
3724 ; PC64LE-NEXT: stdu 1, -80(1)
3725 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3726 ; PC64LE-NEXT: li 3, 48
3727 ; PC64LE-NEXT: std 0, 96(1)
3728 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3729 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3730 ; PC64LE-NEXT: xscvspdpn 1, 0
3731 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3732 ; PC64LE-NEXT: vmr 31, 2
3733 ; PC64LE-NEXT: bl log10f
3735 ; PC64LE-NEXT: xxswapd 0, 63
3736 ; PC64LE-NEXT: fmr 31, 1
3737 ; PC64LE-NEXT: xscvspdpn 1, 0
3738 ; PC64LE-NEXT: bl log10f
3740 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3741 ; PC64LE-NEXT: fmr 30, 1
3742 ; PC64LE-NEXT: xscvspdpn 1, 0
3743 ; PC64LE-NEXT: bl log10f
3745 ; PC64LE-NEXT: xscvdpspn 0, 1
3746 ; PC64LE-NEXT: xscvdpspn 1, 30
3747 ; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha
3748 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3749 ; PC64LE-NEXT: xscvdpspn 36, 31
3750 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3751 ; PC64LE-NEXT: addi 3, 3, .LCPI67_0@toc@l
3752 ; PC64LE-NEXT: xxmrghw 34, 1, 0
3753 ; PC64LE-NEXT: lxvd2x 0, 0, 3
3754 ; PC64LE-NEXT: li 3, 48
3755 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3756 ; PC64LE-NEXT: xxswapd 35, 0
3757 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3758 ; PC64LE-NEXT: addi 1, 1, 80
3759 ; PC64LE-NEXT: ld 0, 16(1)
3760 ; PC64LE-NEXT: mtlr 0
3763 ; PC64LE9-LABEL: constrained_vector_log10_v3f32:
3764 ; PC64LE9: # %bb.0: # %entry
3765 ; PC64LE9-NEXT: mflr 0
3766 ; PC64LE9-NEXT: stdu 1, -64(1)
3767 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3768 ; PC64LE9-NEXT: std 0, 80(1)
3769 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3770 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3771 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3772 ; PC64LE9-NEXT: vmr 31, 2
3773 ; PC64LE9-NEXT: xscvspdpn 1, 0
3774 ; PC64LE9-NEXT: bl log10f
3776 ; PC64LE9-NEXT: xxswapd 0, 63
3777 ; PC64LE9-NEXT: fmr 31, 1
3778 ; PC64LE9-NEXT: xscvspdpn 1, 0
3779 ; PC64LE9-NEXT: bl log10f
3781 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3782 ; PC64LE9-NEXT: fmr 30, 1
3783 ; PC64LE9-NEXT: xscvspdpn 1, 0
3784 ; PC64LE9-NEXT: bl log10f
3786 ; PC64LE9-NEXT: xscvdpspn 0, 1
3787 ; PC64LE9-NEXT: xscvdpspn 1, 30
3788 ; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha
3789 ; PC64LE9-NEXT: xscvdpspn 34, 31
3790 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3791 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3792 ; PC64LE9-NEXT: addi 3, 3, .LCPI67_0@toc@l
3793 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3794 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
3795 ; PC64LE9-NEXT: lxv 0, 0(3)
3796 ; PC64LE9-NEXT: xxperm 34, 35, 0
3797 ; PC64LE9-NEXT: addi 1, 1, 64
3798 ; PC64LE9-NEXT: ld 0, 16(1)
3799 ; PC64LE9-NEXT: mtlr 0
3802 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
3804 metadata !"round.dynamic",
3805 metadata !"fpexcept.strict") #1
3806 ret <3 x float> %log10
3809 define <3 x double> @constrained_vector_log10_v3f64(<3 x double> %x) #0 {
3810 ; PC64LE-LABEL: constrained_vector_log10_v3f64:
3811 ; PC64LE: # %bb.0: # %entry
3812 ; PC64LE-NEXT: mflr 0
3813 ; PC64LE-NEXT: stdu 1, -80(1)
3814 ; PC64LE-NEXT: li 3, 48
3815 ; PC64LE-NEXT: std 0, 96(1)
3816 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3817 ; PC64LE-NEXT: fmr 30, 2
3818 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3819 ; PC64LE-NEXT: fmr 31, 3
3820 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3821 ; PC64LE-NEXT: bl log10
3823 ; PC64LE-NEXT: xxlor 63, 1, 1
3824 ; PC64LE-NEXT: fmr 1, 30
3825 ; PC64LE-NEXT: bl log10
3827 ; PC64LE-NEXT: xxmrghd 63, 1, 63
3828 ; PC64LE-NEXT: fmr 1, 31
3829 ; PC64LE-NEXT: bl log10
3831 ; PC64LE-NEXT: li 3, 48
3832 ; PC64LE-NEXT: fmr 3, 1
3833 ; PC64LE-NEXT: xxswapd 1, 63
3834 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3835 ; PC64LE-NEXT: xxlor 2, 63, 63
3836 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3837 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3838 ; PC64LE-NEXT: addi 1, 1, 80
3839 ; PC64LE-NEXT: ld 0, 16(1)
3840 ; PC64LE-NEXT: mtlr 0
3843 ; PC64LE9-LABEL: constrained_vector_log10_v3f64:
3844 ; PC64LE9: # %bb.0: # %entry
3845 ; PC64LE9-NEXT: mflr 0
3846 ; PC64LE9-NEXT: stdu 1, -64(1)
3847 ; PC64LE9-NEXT: std 0, 80(1)
3848 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3849 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3850 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3851 ; PC64LE9-NEXT: fmr 31, 3
3852 ; PC64LE9-NEXT: fmr 30, 2
3853 ; PC64LE9-NEXT: bl log10
3855 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3856 ; PC64LE9-NEXT: fmr 1, 30
3857 ; PC64LE9-NEXT: bl log10
3859 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3860 ; PC64LE9-NEXT: fmr 1, 31
3861 ; PC64LE9-NEXT: bl log10
3863 ; PC64LE9-NEXT: fmr 3, 1
3864 ; PC64LE9-NEXT: xxswapd 1, 63
3865 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3866 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3867 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3868 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3869 ; PC64LE9-NEXT: addi 1, 1, 64
3870 ; PC64LE9-NEXT: ld 0, 16(1)
3871 ; PC64LE9-NEXT: mtlr 0
3874 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
3876 metadata !"round.dynamic",
3877 metadata !"fpexcept.strict") #1
3878 ret <3 x double> %log10
3881 define <4 x double> @constrained_vector_log10_v4f64(<4 x double> %x) #0 {
3882 ; PC64LE-LABEL: constrained_vector_log10_v4f64:
3883 ; PC64LE: # %bb.0: # %entry
3884 ; PC64LE-NEXT: mflr 0
3885 ; PC64LE-NEXT: stdu 1, -96(1)
3886 ; PC64LE-NEXT: li 3, 48
3887 ; PC64LE-NEXT: std 0, 112(1)
3888 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3889 ; PC64LE-NEXT: li 3, 64
3890 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3891 ; PC64LE-NEXT: vmr 30, 2
3892 ; PC64LE-NEXT: li 3, 80
3893 ; PC64LE-NEXT: xxlor 1, 62, 62
3894 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3895 ; PC64LE-NEXT: vmr 31, 3
3896 ; PC64LE-NEXT: bl log10
3898 ; PC64LE-NEXT: xxlor 61, 1, 1
3899 ; PC64LE-NEXT: xxswapd 1, 62
3900 ; PC64LE-NEXT: bl log10
3902 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3903 ; PC64LE-NEXT: xxlor 1, 63, 63
3904 ; PC64LE-NEXT: bl log10
3906 ; PC64LE-NEXT: xxlor 61, 1, 1
3907 ; PC64LE-NEXT: xxswapd 1, 63
3908 ; PC64LE-NEXT: bl log10
3910 ; PC64LE-NEXT: li 3, 80
3911 ; PC64LE-NEXT: vmr 2, 30
3912 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3913 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3914 ; PC64LE-NEXT: li 3, 64
3915 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3916 ; PC64LE-NEXT: li 3, 48
3917 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3918 ; PC64LE-NEXT: addi 1, 1, 96
3919 ; PC64LE-NEXT: ld 0, 16(1)
3920 ; PC64LE-NEXT: mtlr 0
3923 ; PC64LE9-LABEL: constrained_vector_log10_v4f64:
3924 ; PC64LE9: # %bb.0: # %entry
3925 ; PC64LE9-NEXT: mflr 0
3926 ; PC64LE9-NEXT: stdu 1, -80(1)
3927 ; PC64LE9-NEXT: std 0, 96(1)
3928 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3929 ; PC64LE9-NEXT: vmr 30, 2
3930 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3931 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3932 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3933 ; PC64LE9-NEXT: vmr 31, 3
3934 ; PC64LE9-NEXT: bl log10
3936 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3937 ; PC64LE9-NEXT: xxswapd 1, 62
3938 ; PC64LE9-NEXT: bl log10
3940 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3941 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3942 ; PC64LE9-NEXT: bl log10
3944 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3945 ; PC64LE9-NEXT: xxswapd 1, 63
3946 ; PC64LE9-NEXT: bl log10
3948 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3949 ; PC64LE9-NEXT: vmr 2, 30
3950 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3951 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3952 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3953 ; PC64LE9-NEXT: addi 1, 1, 80
3954 ; PC64LE9-NEXT: ld 0, 16(1)
3955 ; PC64LE9-NEXT: mtlr 0
3958 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64(
3960 metadata !"round.dynamic",
3961 metadata !"fpexcept.strict") #1
3962 ret <4 x double> %log10
3965 define <1 x float> @constrained_vector_log2_v1f32(<1 x float> %x) #0 {
3966 ; PC64LE-LABEL: constrained_vector_log2_v1f32:
3967 ; PC64LE: # %bb.0: # %entry
3968 ; PC64LE-NEXT: mflr 0
3969 ; PC64LE-NEXT: stdu 1, -32(1)
3970 ; PC64LE-NEXT: std 0, 48(1)
3971 ; PC64LE-NEXT: bl log2f
3973 ; PC64LE-NEXT: addi 1, 1, 32
3974 ; PC64LE-NEXT: ld 0, 16(1)
3975 ; PC64LE-NEXT: mtlr 0
3978 ; PC64LE9-LABEL: constrained_vector_log2_v1f32:
3979 ; PC64LE9: # %bb.0: # %entry
3980 ; PC64LE9-NEXT: mflr 0
3981 ; PC64LE9-NEXT: stdu 1, -32(1)
3982 ; PC64LE9-NEXT: std 0, 48(1)
3983 ; PC64LE9-NEXT: bl log2f
3985 ; PC64LE9-NEXT: addi 1, 1, 32
3986 ; PC64LE9-NEXT: ld 0, 16(1)
3987 ; PC64LE9-NEXT: mtlr 0
3990 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
3992 metadata !"round.dynamic",
3993 metadata !"fpexcept.strict") #1
3994 ret <1 x float> %log2
3997 define <2 x double> @constrained_vector_log2_v2f64(<2 x double> %x) #0 {
3998 ; PC64LE-LABEL: constrained_vector_log2_v2f64:
3999 ; PC64LE: # %bb.0: # %entry
4000 ; PC64LE-NEXT: mflr 0
4001 ; PC64LE-NEXT: stdu 1, -80(1)
4002 ; PC64LE-NEXT: li 3, 48
4003 ; PC64LE-NEXT: std 0, 96(1)
4004 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4005 ; PC64LE-NEXT: li 3, 64
4006 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4007 ; PC64LE-NEXT: vmr 31, 2
4008 ; PC64LE-NEXT: xxlor 1, 63, 63
4009 ; PC64LE-NEXT: bl log2
4011 ; PC64LE-NEXT: xxlor 62, 1, 1
4012 ; PC64LE-NEXT: xxswapd 1, 63
4013 ; PC64LE-NEXT: bl log2
4015 ; PC64LE-NEXT: li 3, 64
4016 ; PC64LE-NEXT: xxmrghd 34, 62, 1
4017 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4018 ; PC64LE-NEXT: li 3, 48
4019 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4020 ; PC64LE-NEXT: addi 1, 1, 80
4021 ; PC64LE-NEXT: ld 0, 16(1)
4022 ; PC64LE-NEXT: mtlr 0
4025 ; PC64LE9-LABEL: constrained_vector_log2_v2f64:
4026 ; PC64LE9: # %bb.0: # %entry
4027 ; PC64LE9-NEXT: mflr 0
4028 ; PC64LE9-NEXT: stdu 1, -64(1)
4029 ; PC64LE9-NEXT: std 0, 80(1)
4030 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4031 ; PC64LE9-NEXT: vmr 31, 2
4032 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4033 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
4034 ; PC64LE9-NEXT: bl log2
4036 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
4037 ; PC64LE9-NEXT: xxswapd 1, 63
4038 ; PC64LE9-NEXT: bl log2
4040 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
4041 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4042 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
4043 ; PC64LE9-NEXT: addi 1, 1, 64
4044 ; PC64LE9-NEXT: ld 0, 16(1)
4045 ; PC64LE9-NEXT: mtlr 0
4048 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
4050 metadata !"round.dynamic",
4051 metadata !"fpexcept.strict") #1
4052 ret <2 x double> %log2
4055 define <3 x float> @constrained_vector_log2_v3f32(<3 x float> %x) #0 {
4056 ; PC64LE-LABEL: constrained_vector_log2_v3f32:
4057 ; PC64LE: # %bb.0: # %entry
4058 ; PC64LE-NEXT: mflr 0
4059 ; PC64LE-NEXT: stdu 1, -80(1)
4060 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
4061 ; PC64LE-NEXT: li 3, 48
4062 ; PC64LE-NEXT: std 0, 96(1)
4063 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4064 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4065 ; PC64LE-NEXT: xscvspdpn 1, 0
4066 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4067 ; PC64LE-NEXT: vmr 31, 2
4068 ; PC64LE-NEXT: bl log2f
4070 ; PC64LE-NEXT: xxswapd 0, 63
4071 ; PC64LE-NEXT: fmr 31, 1
4072 ; PC64LE-NEXT: xscvspdpn 1, 0
4073 ; PC64LE-NEXT: bl log2f
4075 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
4076 ; PC64LE-NEXT: fmr 30, 1
4077 ; PC64LE-NEXT: xscvspdpn 1, 0
4078 ; PC64LE-NEXT: bl log2f
4080 ; PC64LE-NEXT: xscvdpspn 0, 1
4081 ; PC64LE-NEXT: xscvdpspn 1, 30
4082 ; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4083 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4084 ; PC64LE-NEXT: xscvdpspn 36, 31
4085 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4086 ; PC64LE-NEXT: addi 3, 3, .LCPI72_0@toc@l
4087 ; PC64LE-NEXT: xxmrghw 34, 1, 0
4088 ; PC64LE-NEXT: lxvd2x 0, 0, 3
4089 ; PC64LE-NEXT: li 3, 48
4090 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4091 ; PC64LE-NEXT: xxswapd 35, 0
4092 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4093 ; PC64LE-NEXT: addi 1, 1, 80
4094 ; PC64LE-NEXT: ld 0, 16(1)
4095 ; PC64LE-NEXT: mtlr 0
4098 ; PC64LE9-LABEL: constrained_vector_log2_v3f32:
4099 ; PC64LE9: # %bb.0: # %entry
4100 ; PC64LE9-NEXT: mflr 0
4101 ; PC64LE9-NEXT: stdu 1, -64(1)
4102 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4103 ; PC64LE9-NEXT: std 0, 80(1)
4104 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4105 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4106 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4107 ; PC64LE9-NEXT: vmr 31, 2
4108 ; PC64LE9-NEXT: xscvspdpn 1, 0
4109 ; PC64LE9-NEXT: bl log2f
4111 ; PC64LE9-NEXT: xxswapd 0, 63
4112 ; PC64LE9-NEXT: fmr 31, 1
4113 ; PC64LE9-NEXT: xscvspdpn 1, 0
4114 ; PC64LE9-NEXT: bl log2f
4116 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
4117 ; PC64LE9-NEXT: fmr 30, 1
4118 ; PC64LE9-NEXT: xscvspdpn 1, 0
4119 ; PC64LE9-NEXT: bl log2f
4121 ; PC64LE9-NEXT: xscvdpspn 0, 1
4122 ; PC64LE9-NEXT: xscvdpspn 1, 30
4123 ; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4124 ; PC64LE9-NEXT: xscvdpspn 34, 31
4125 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4126 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4127 ; PC64LE9-NEXT: addi 3, 3, .LCPI72_0@toc@l
4128 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4129 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
4130 ; PC64LE9-NEXT: lxv 0, 0(3)
4131 ; PC64LE9-NEXT: xxperm 34, 35, 0
4132 ; PC64LE9-NEXT: addi 1, 1, 64
4133 ; PC64LE9-NEXT: ld 0, 16(1)
4134 ; PC64LE9-NEXT: mtlr 0
4137 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
4139 metadata !"round.dynamic",
4140 metadata !"fpexcept.strict") #1
4141 ret <3 x float> %log2
4144 define <3 x double> @constrained_vector_log2_v3f64(<3 x double> %x) #0 {
4145 ; PC64LE-LABEL: constrained_vector_log2_v3f64:
4146 ; PC64LE: # %bb.0: # %entry
4147 ; PC64LE-NEXT: mflr 0
4148 ; PC64LE-NEXT: stdu 1, -80(1)
4149 ; PC64LE-NEXT: li 3, 48
4150 ; PC64LE-NEXT: std 0, 96(1)
4151 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4152 ; PC64LE-NEXT: fmr 30, 2
4153 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4154 ; PC64LE-NEXT: fmr 31, 3
4155 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4156 ; PC64LE-NEXT: bl log2
4158 ; PC64LE-NEXT: xxlor 63, 1, 1
4159 ; PC64LE-NEXT: fmr 1, 30
4160 ; PC64LE-NEXT: bl log2
4162 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4163 ; PC64LE-NEXT: fmr 1, 31
4164 ; PC64LE-NEXT: bl log2
4166 ; PC64LE-NEXT: li 3, 48
4167 ; PC64LE-NEXT: fmr 3, 1
4168 ; PC64LE-NEXT: xxswapd 1, 63
4169 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4170 ; PC64LE-NEXT: xxlor 2, 63, 63
4171 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4172 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4173 ; PC64LE-NEXT: addi 1, 1, 80
4174 ; PC64LE-NEXT: ld 0, 16(1)
4175 ; PC64LE-NEXT: mtlr 0
4178 ; PC64LE9-LABEL: constrained_vector_log2_v3f64:
4179 ; PC64LE9: # %bb.0: # %entry
4180 ; PC64LE9-NEXT: mflr 0
4181 ; PC64LE9-NEXT: stdu 1, -64(1)
4182 ; PC64LE9-NEXT: std 0, 80(1)
4183 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4184 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4185 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4186 ; PC64LE9-NEXT: fmr 31, 3
4187 ; PC64LE9-NEXT: fmr 30, 2
4188 ; PC64LE9-NEXT: bl log2
4190 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4191 ; PC64LE9-NEXT: fmr 1, 30
4192 ; PC64LE9-NEXT: bl log2
4194 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4195 ; PC64LE9-NEXT: fmr 1, 31
4196 ; PC64LE9-NEXT: bl log2
4198 ; PC64LE9-NEXT: fmr 3, 1
4199 ; PC64LE9-NEXT: xxswapd 1, 63
4200 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4201 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4202 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4203 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4204 ; PC64LE9-NEXT: addi 1, 1, 64
4205 ; PC64LE9-NEXT: ld 0, 16(1)
4206 ; PC64LE9-NEXT: mtlr 0
4209 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
4211 metadata !"round.dynamic",
4212 metadata !"fpexcept.strict") #1
4213 ret <3 x double> %log2
4216 define <4 x double> @constrained_vector_log2_v4f64(<4 x double> %x) #0 {
4217 ; PC64LE-LABEL: constrained_vector_log2_v4f64:
4218 ; PC64LE: # %bb.0: # %entry
4219 ; PC64LE-NEXT: mflr 0
4220 ; PC64LE-NEXT: stdu 1, -96(1)
4221 ; PC64LE-NEXT: li 3, 48
4222 ; PC64LE-NEXT: std 0, 112(1)
4223 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4224 ; PC64LE-NEXT: li 3, 64
4225 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4226 ; PC64LE-NEXT: vmr 30, 2
4227 ; PC64LE-NEXT: li 3, 80
4228 ; PC64LE-NEXT: xxlor 1, 62, 62
4229 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4230 ; PC64LE-NEXT: vmr 31, 3
4231 ; PC64LE-NEXT: bl log2
4233 ; PC64LE-NEXT: xxlor 61, 1, 1
4234 ; PC64LE-NEXT: xxswapd 1, 62
4235 ; PC64LE-NEXT: bl log2
4237 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4238 ; PC64LE-NEXT: xxlor 1, 63, 63
4239 ; PC64LE-NEXT: bl log2
4241 ; PC64LE-NEXT: xxlor 61, 1, 1
4242 ; PC64LE-NEXT: xxswapd 1, 63
4243 ; PC64LE-NEXT: bl log2
4245 ; PC64LE-NEXT: li 3, 80
4246 ; PC64LE-NEXT: vmr 2, 30
4247 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4248 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4249 ; PC64LE-NEXT: li 3, 64
4250 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4251 ; PC64LE-NEXT: li 3, 48
4252 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4253 ; PC64LE-NEXT: addi 1, 1, 96
4254 ; PC64LE-NEXT: ld 0, 16(1)
4255 ; PC64LE-NEXT: mtlr 0
4258 ; PC64LE9-LABEL: constrained_vector_log2_v4f64:
4259 ; PC64LE9: # %bb.0: # %entry
4260 ; PC64LE9-NEXT: mflr 0
4261 ; PC64LE9-NEXT: stdu 1, -80(1)
4262 ; PC64LE9-NEXT: std 0, 96(1)
4263 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4264 ; PC64LE9-NEXT: vmr 30, 2
4265 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4266 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4267 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4268 ; PC64LE9-NEXT: vmr 31, 3
4269 ; PC64LE9-NEXT: bl log2
4271 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4272 ; PC64LE9-NEXT: xxswapd 1, 62
4273 ; PC64LE9-NEXT: bl log2
4275 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4276 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4277 ; PC64LE9-NEXT: bl log2
4279 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4280 ; PC64LE9-NEXT: xxswapd 1, 63
4281 ; PC64LE9-NEXT: bl log2
4283 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
4284 ; PC64LE9-NEXT: vmr 2, 30
4285 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
4286 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
4287 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
4288 ; PC64LE9-NEXT: addi 1, 1, 80
4289 ; PC64LE9-NEXT: ld 0, 16(1)
4290 ; PC64LE9-NEXT: mtlr 0
4293 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64(
4295 metadata !"round.dynamic",
4296 metadata !"fpexcept.strict") #1
4297 ret <4 x double> %log2
4300 define <1 x float> @constrained_vector_rint_v1f32(<1 x float> %x) #0 {
4301 ; PC64LE-LABEL: constrained_vector_rint_v1f32:
4302 ; PC64LE: # %bb.0: # %entry
4303 ; PC64LE-NEXT: xsrdpic 1, 1
4306 ; PC64LE9-LABEL: constrained_vector_rint_v1f32:
4307 ; PC64LE9: # %bb.0: # %entry
4308 ; PC64LE9-NEXT: xsrdpic 1, 1
4311 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
4313 metadata !"round.dynamic",
4314 metadata !"fpexcept.strict") #1
4315 ret <1 x float> %rint
4318 define <2 x double> @constrained_vector_rint_v2f64(<2 x double> %x) #0 {
4319 ; PC64LE-LABEL: constrained_vector_rint_v2f64:
4320 ; PC64LE: # %bb.0: # %entry
4321 ; PC64LE-NEXT: xvrdpic 34, 34
4324 ; PC64LE9-LABEL: constrained_vector_rint_v2f64:
4325 ; PC64LE9: # %bb.0: # %entry
4326 ; PC64LE9-NEXT: xvrdpic 34, 34
4329 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
4331 metadata !"round.dynamic",
4332 metadata !"fpexcept.strict") #1
4333 ret <2 x double> %rint
4336 define <3 x float> @constrained_vector_rint_v3f32(<3 x float> %x) #0 {
4337 ; PC64LE-LABEL: constrained_vector_rint_v3f32:
4338 ; PC64LE: # %bb.0: # %entry
4339 ; PC64LE-NEXT: xxswapd 0, 34
4340 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
4341 ; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha
4342 ; PC64LE-NEXT: xscvspdpn 0, 0
4343 ; PC64LE-NEXT: xscvspdpn 1, 1
4344 ; PC64LE-NEXT: addi 3, 3, .LCPI77_0@toc@l
4345 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
4346 ; PC64LE-NEXT: xsrdpic 0, 0
4347 ; PC64LE-NEXT: xsrdpic 1, 1
4348 ; PC64LE-NEXT: xscvdpspn 1, 1
4349 ; PC64LE-NEXT: xscvdpspn 0, 0
4350 ; PC64LE-NEXT: xxmrghw 34, 0, 1
4351 ; PC64LE-NEXT: lxvd2x 0, 0, 3
4352 ; PC64LE-NEXT: xxswapd 35, 0
4353 ; PC64LE-NEXT: xscvspdpn 0, 2
4354 ; PC64LE-NEXT: xsrdpic 0, 0
4355 ; PC64LE-NEXT: xscvdpspn 36, 0
4356 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4359 ; PC64LE9-LABEL: constrained_vector_rint_v3f32:
4360 ; PC64LE9: # %bb.0: # %entry
4361 ; PC64LE9-NEXT: xxswapd 1, 34
4362 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
4363 ; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha
4364 ; PC64LE9-NEXT: addi 3, 3, .LCPI77_0@toc@l
4365 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4366 ; PC64LE9-NEXT: xscvspdpn 1, 1
4367 ; PC64LE9-NEXT: xscvspdpn 2, 2
4368 ; PC64LE9-NEXT: xscvspdpn 0, 0
4369 ; PC64LE9-NEXT: xsrdpic 1, 1
4370 ; PC64LE9-NEXT: xsrdpic 2, 2
4371 ; PC64LE9-NEXT: xsrdpic 0, 0
4372 ; PC64LE9-NEXT: xscvdpspn 2, 2
4373 ; PC64LE9-NEXT: xscvdpspn 1, 1
4374 ; PC64LE9-NEXT: xscvdpspn 34, 0
4375 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
4376 ; PC64LE9-NEXT: lxv 1, 0(3)
4377 ; PC64LE9-NEXT: xxperm 34, 35, 1
4380 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
4382 metadata !"round.dynamic",
4383 metadata !"fpexcept.strict") #1
4384 ret <3 x float> %rint
4387 define <3 x double> @constrained_vector_rint_v3f64(<3 x double> %x) #0 {
4388 ; PC64LE-LABEL: constrained_vector_rint_v3f64:
4389 ; PC64LE: # %bb.0: # %entry
4390 ; PC64LE-NEXT: xxmrghd 0, 2, 1
4391 ; PC64LE-NEXT: xsrdpic 3, 3
4392 ; PC64LE-NEXT: xvrdpic 2, 0
4393 ; PC64LE-NEXT: xxswapd 1, 2
4396 ; PC64LE9-LABEL: constrained_vector_rint_v3f64:
4397 ; PC64LE9: # %bb.0: # %entry
4398 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
4399 ; PC64LE9-NEXT: xsrdpic 3, 3
4400 ; PC64LE9-NEXT: xvrdpic 2, 0
4401 ; PC64LE9-NEXT: xxswapd 1, 2
4404 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
4406 metadata !"round.dynamic",
4407 metadata !"fpexcept.strict") #1
4408 ret <3 x double> %rint
4411 define <4 x double> @constrained_vector_rint_v4f64(<4 x double> %x) #0 {
4412 ; PC64LE-LABEL: constrained_vector_rint_v4f64:
4413 ; PC64LE: # %bb.0: # %entry
4414 ; PC64LE-NEXT: xvrdpic 35, 35
4415 ; PC64LE-NEXT: xvrdpic 34, 34
4418 ; PC64LE9-LABEL: constrained_vector_rint_v4f64:
4419 ; PC64LE9: # %bb.0: # %entry
4420 ; PC64LE9-NEXT: xvrdpic 35, 35
4421 ; PC64LE9-NEXT: xvrdpic 34, 34
4424 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
4426 metadata !"round.dynamic",
4427 metadata !"fpexcept.strict") #1
4428 ret <4 x double> %rint
4431 define <1 x float> @constrained_vector_nearbyint_v1f32(<1 x float> %x) #0 {
4432 ; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
4433 ; PC64LE: # %bb.0: # %entry
4434 ; PC64LE-NEXT: mflr 0
4435 ; PC64LE-NEXT: stdu 1, -32(1)
4436 ; PC64LE-NEXT: std 0, 48(1)
4437 ; PC64LE-NEXT: bl nearbyintf
4439 ; PC64LE-NEXT: addi 1, 1, 32
4440 ; PC64LE-NEXT: ld 0, 16(1)
4441 ; PC64LE-NEXT: mtlr 0
4444 ; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32:
4445 ; PC64LE9: # %bb.0: # %entry
4446 ; PC64LE9-NEXT: mflr 0
4447 ; PC64LE9-NEXT: stdu 1, -32(1)
4448 ; PC64LE9-NEXT: std 0, 48(1)
4449 ; PC64LE9-NEXT: bl nearbyintf
4451 ; PC64LE9-NEXT: addi 1, 1, 32
4452 ; PC64LE9-NEXT: ld 0, 16(1)
4453 ; PC64LE9-NEXT: mtlr 0
4456 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
4458 metadata !"round.dynamic",
4459 metadata !"fpexcept.strict") #1
4460 ret <1 x float> %nearby
4463 define <2 x double> @constrained_vector_nearbyint_v2f64(<2 x double> %x) #0 {
4464 ; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
4465 ; PC64LE: # %bb.0: # %entry
4466 ; PC64LE-NEXT: mflr 0
4467 ; PC64LE-NEXT: stdu 1, -80(1)
4468 ; PC64LE-NEXT: li 3, 48
4469 ; PC64LE-NEXT: std 0, 96(1)
4470 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4471 ; PC64LE-NEXT: li 3, 64
4472 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4473 ; PC64LE-NEXT: vmr 31, 2
4474 ; PC64LE-NEXT: xxlor 1, 63, 63
4475 ; PC64LE-NEXT: bl nearbyint
4477 ; PC64LE-NEXT: xxlor 62, 1, 1
4478 ; PC64LE-NEXT: xxswapd 1, 63
4479 ; PC64LE-NEXT: bl nearbyint
4481 ; PC64LE-NEXT: li 3, 64
4482 ; PC64LE-NEXT: xxmrghd 34, 62, 1
4483 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4484 ; PC64LE-NEXT: li 3, 48
4485 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4486 ; PC64LE-NEXT: addi 1, 1, 80
4487 ; PC64LE-NEXT: ld 0, 16(1)
4488 ; PC64LE-NEXT: mtlr 0
4491 ; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64:
4492 ; PC64LE9: # %bb.0: # %entry
4493 ; PC64LE9-NEXT: mflr 0
4494 ; PC64LE9-NEXT: stdu 1, -64(1)
4495 ; PC64LE9-NEXT: std 0, 80(1)
4496 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4497 ; PC64LE9-NEXT: vmr 31, 2
4498 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4499 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
4500 ; PC64LE9-NEXT: bl nearbyint
4502 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
4503 ; PC64LE9-NEXT: xxswapd 1, 63
4504 ; PC64LE9-NEXT: bl nearbyint
4506 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
4507 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4508 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
4509 ; PC64LE9-NEXT: addi 1, 1, 64
4510 ; PC64LE9-NEXT: ld 0, 16(1)
4511 ; PC64LE9-NEXT: mtlr 0
4514 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
4516 metadata !"round.dynamic",
4517 metadata !"fpexcept.strict") #1
4518 ret <2 x double> %nearby
4521 define <3 x float> @constrained_vector_nearbyint_v3f32(<3 x float> %x) #0 {
4522 ; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
4523 ; PC64LE: # %bb.0: # %entry
4524 ; PC64LE-NEXT: mflr 0
4525 ; PC64LE-NEXT: stdu 1, -80(1)
4526 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
4527 ; PC64LE-NEXT: li 3, 48
4528 ; PC64LE-NEXT: std 0, 96(1)
4529 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4530 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4531 ; PC64LE-NEXT: xscvspdpn 1, 0
4532 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4533 ; PC64LE-NEXT: vmr 31, 2
4534 ; PC64LE-NEXT: bl nearbyintf
4536 ; PC64LE-NEXT: xxswapd 0, 63
4537 ; PC64LE-NEXT: fmr 31, 1
4538 ; PC64LE-NEXT: xscvspdpn 1, 0
4539 ; PC64LE-NEXT: bl nearbyintf
4541 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
4542 ; PC64LE-NEXT: fmr 30, 1
4543 ; PC64LE-NEXT: xscvspdpn 1, 0
4544 ; PC64LE-NEXT: bl nearbyintf
4546 ; PC64LE-NEXT: xscvdpspn 0, 1
4547 ; PC64LE-NEXT: xscvdpspn 1, 30
4548 ; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha
4549 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4550 ; PC64LE-NEXT: xscvdpspn 36, 31
4551 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4552 ; PC64LE-NEXT: addi 3, 3, .LCPI82_0@toc@l
4553 ; PC64LE-NEXT: xxmrghw 34, 1, 0
4554 ; PC64LE-NEXT: lxvd2x 0, 0, 3
4555 ; PC64LE-NEXT: li 3, 48
4556 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4557 ; PC64LE-NEXT: xxswapd 35, 0
4558 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4559 ; PC64LE-NEXT: addi 1, 1, 80
4560 ; PC64LE-NEXT: ld 0, 16(1)
4561 ; PC64LE-NEXT: mtlr 0
4564 ; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
4565 ; PC64LE9: # %bb.0: # %entry
4566 ; PC64LE9-NEXT: mflr 0
4567 ; PC64LE9-NEXT: stdu 1, -64(1)
4568 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4569 ; PC64LE9-NEXT: std 0, 80(1)
4570 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4571 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4572 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4573 ; PC64LE9-NEXT: vmr 31, 2
4574 ; PC64LE9-NEXT: xscvspdpn 1, 0
4575 ; PC64LE9-NEXT: bl nearbyintf
4577 ; PC64LE9-NEXT: xxswapd 0, 63
4578 ; PC64LE9-NEXT: fmr 31, 1
4579 ; PC64LE9-NEXT: xscvspdpn 1, 0
4580 ; PC64LE9-NEXT: bl nearbyintf
4582 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
4583 ; PC64LE9-NEXT: fmr 30, 1
4584 ; PC64LE9-NEXT: xscvspdpn 1, 0
4585 ; PC64LE9-NEXT: bl nearbyintf
4587 ; PC64LE9-NEXT: xscvdpspn 0, 1
4588 ; PC64LE9-NEXT: xscvdpspn 1, 30
4589 ; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha
4590 ; PC64LE9-NEXT: xscvdpspn 34, 31
4591 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4592 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4593 ; PC64LE9-NEXT: addi 3, 3, .LCPI82_0@toc@l
4594 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4595 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
4596 ; PC64LE9-NEXT: lxv 0, 0(3)
4597 ; PC64LE9-NEXT: xxperm 34, 35, 0
4598 ; PC64LE9-NEXT: addi 1, 1, 64
4599 ; PC64LE9-NEXT: ld 0, 16(1)
4600 ; PC64LE9-NEXT: mtlr 0
4603 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
4605 metadata !"round.dynamic",
4606 metadata !"fpexcept.strict") #1
4607 ret <3 x float> %nearby
4610 define <3 x double> @constrained_vector_nearby_v3f64(<3 x double> %x) #0 {
4611 ; PC64LE-LABEL: constrained_vector_nearby_v3f64:
4612 ; PC64LE: # %bb.0: # %entry
4613 ; PC64LE-NEXT: mflr 0
4614 ; PC64LE-NEXT: stdu 1, -80(1)
4615 ; PC64LE-NEXT: li 3, 48
4616 ; PC64LE-NEXT: std 0, 96(1)
4617 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4618 ; PC64LE-NEXT: fmr 30, 2
4619 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4620 ; PC64LE-NEXT: fmr 31, 3
4621 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4622 ; PC64LE-NEXT: bl nearbyint
4624 ; PC64LE-NEXT: xxlor 63, 1, 1
4625 ; PC64LE-NEXT: fmr 1, 30
4626 ; PC64LE-NEXT: bl nearbyint
4628 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4629 ; PC64LE-NEXT: fmr 1, 31
4630 ; PC64LE-NEXT: bl nearbyint
4632 ; PC64LE-NEXT: li 3, 48
4633 ; PC64LE-NEXT: fmr 3, 1
4634 ; PC64LE-NEXT: xxswapd 1, 63
4635 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4636 ; PC64LE-NEXT: xxlor 2, 63, 63
4637 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4638 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4639 ; PC64LE-NEXT: addi 1, 1, 80
4640 ; PC64LE-NEXT: ld 0, 16(1)
4641 ; PC64LE-NEXT: mtlr 0
4644 ; PC64LE9-LABEL: constrained_vector_nearby_v3f64:
4645 ; PC64LE9: # %bb.0: # %entry
4646 ; PC64LE9-NEXT: mflr 0
4647 ; PC64LE9-NEXT: stdu 1, -64(1)
4648 ; PC64LE9-NEXT: std 0, 80(1)
4649 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4650 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4651 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4652 ; PC64LE9-NEXT: fmr 31, 3
4653 ; PC64LE9-NEXT: fmr 30, 2
4654 ; PC64LE9-NEXT: bl nearbyint
4656 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4657 ; PC64LE9-NEXT: fmr 1, 30
4658 ; PC64LE9-NEXT: bl nearbyint
4660 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4661 ; PC64LE9-NEXT: fmr 1, 31
4662 ; PC64LE9-NEXT: bl nearbyint
4664 ; PC64LE9-NEXT: fmr 3, 1
4665 ; PC64LE9-NEXT: xxswapd 1, 63
4666 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4667 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4668 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4669 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4670 ; PC64LE9-NEXT: addi 1, 1, 64
4671 ; PC64LE9-NEXT: ld 0, 16(1)
4672 ; PC64LE9-NEXT: mtlr 0
4675 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
4677 metadata !"round.dynamic",
4678 metadata !"fpexcept.strict") #1
4679 ret <3 x double> %nearby
4682 define <4 x double> @constrained_vector_nearbyint_v4f64(<4 x double> %x) #0 {
4683 ; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
4684 ; PC64LE: # %bb.0: # %entry
4685 ; PC64LE-NEXT: mflr 0
4686 ; PC64LE-NEXT: stdu 1, -96(1)
4687 ; PC64LE-NEXT: li 3, 48
4688 ; PC64LE-NEXT: std 0, 112(1)
4689 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4690 ; PC64LE-NEXT: li 3, 64
4691 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4692 ; PC64LE-NEXT: vmr 30, 2
4693 ; PC64LE-NEXT: li 3, 80
4694 ; PC64LE-NEXT: xxlor 1, 62, 62
4695 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4696 ; PC64LE-NEXT: vmr 31, 3
4697 ; PC64LE-NEXT: bl nearbyint
4699 ; PC64LE-NEXT: xxlor 61, 1, 1
4700 ; PC64LE-NEXT: xxswapd 1, 62
4701 ; PC64LE-NEXT: bl nearbyint
4703 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4704 ; PC64LE-NEXT: xxlor 1, 63, 63
4705 ; PC64LE-NEXT: bl nearbyint
4707 ; PC64LE-NEXT: xxlor 61, 1, 1
4708 ; PC64LE-NEXT: xxswapd 1, 63
4709 ; PC64LE-NEXT: bl nearbyint
4711 ; PC64LE-NEXT: li 3, 80
4712 ; PC64LE-NEXT: vmr 2, 30
4713 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4714 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4715 ; PC64LE-NEXT: li 3, 64
4716 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4717 ; PC64LE-NEXT: li 3, 48
4718 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4719 ; PC64LE-NEXT: addi 1, 1, 96
4720 ; PC64LE-NEXT: ld 0, 16(1)
4721 ; PC64LE-NEXT: mtlr 0
4724 ; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64:
4725 ; PC64LE9: # %bb.0: # %entry
4726 ; PC64LE9-NEXT: mflr 0
4727 ; PC64LE9-NEXT: stdu 1, -80(1)
4728 ; PC64LE9-NEXT: std 0, 96(1)
4729 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4730 ; PC64LE9-NEXT: vmr 30, 2
4731 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4732 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4733 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4734 ; PC64LE9-NEXT: vmr 31, 3
4735 ; PC64LE9-NEXT: bl nearbyint
4737 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4738 ; PC64LE9-NEXT: xxswapd 1, 62
4739 ; PC64LE9-NEXT: bl nearbyint
4741 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4742 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4743 ; PC64LE9-NEXT: bl nearbyint
4745 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4746 ; PC64LE9-NEXT: xxswapd 1, 63
4747 ; PC64LE9-NEXT: bl nearbyint
4749 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
4750 ; PC64LE9-NEXT: vmr 2, 30
4751 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
4752 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
4753 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
4754 ; PC64LE9-NEXT: addi 1, 1, 80
4755 ; PC64LE9-NEXT: ld 0, 16(1)
4756 ; PC64LE9-NEXT: mtlr 0
4759 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
4761 metadata !"round.dynamic",
4762 metadata !"fpexcept.strict") #1
4763 ret <4 x double> %nearby
4766 define <1 x float> @constrained_vector_maxnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
4767 ; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
4768 ; PC64LE: # %bb.0: # %entry
4769 ; PC64LE-NEXT: mflr 0
4770 ; PC64LE-NEXT: stdu 1, -32(1)
4771 ; PC64LE-NEXT: std 0, 48(1)
4772 ; PC64LE-NEXT: bl fmaxf
4774 ; PC64LE-NEXT: addi 1, 1, 32
4775 ; PC64LE-NEXT: ld 0, 16(1)
4776 ; PC64LE-NEXT: mtlr 0
4779 ; PC64LE9-LABEL: constrained_vector_maxnum_v1f32:
4780 ; PC64LE9: # %bb.0: # %entry
4781 ; PC64LE9-NEXT: mflr 0
4782 ; PC64LE9-NEXT: stdu 1, -32(1)
4783 ; PC64LE9-NEXT: std 0, 48(1)
4784 ; PC64LE9-NEXT: bl fmaxf
4786 ; PC64LE9-NEXT: addi 1, 1, 32
4787 ; PC64LE9-NEXT: ld 0, 16(1)
4788 ; PC64LE9-NEXT: mtlr 0
4791 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
4792 <1 x float> %x, <1 x float> %y,
4793 metadata !"fpexcept.strict") #1
4794 ret <1 x float> %max
4797 define <2 x double> @constrained_vector_maxnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
4798 ; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
4799 ; PC64LE: # %bb.0: # %entry
4800 ; PC64LE-NEXT: xvmaxdp 34, 34, 35
4803 ; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
4804 ; PC64LE9: # %bb.0: # %entry
4805 ; PC64LE9-NEXT: xvmaxdp 34, 34, 35
4808 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(
4811 metadata !"fpexcept.strict") #1
4812 ret <2 x double> %max
4815 define <3 x float> @constrained_vector_maxnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
4816 ; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
4817 ; PC64LE: # %bb.0: # %entry
4818 ; PC64LE-NEXT: mflr 0
4819 ; PC64LE-NEXT: stdu 1, -96(1)
4820 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
4821 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
4822 ; PC64LE-NEXT: li 3, 48
4823 ; PC64LE-NEXT: std 0, 112(1)
4824 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
4825 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
4826 ; PC64LE-NEXT: xscvspdpn 1, 0
4827 ; PC64LE-NEXT: xscvspdpn 2, 2
4828 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4829 ; PC64LE-NEXT: li 3, 64
4830 ; PC64LE-NEXT: vmr 30, 2
4831 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4832 ; PC64LE-NEXT: vmr 31, 3
4833 ; PC64LE-NEXT: bl fmaxf
4835 ; PC64LE-NEXT: xxswapd 0, 62
4836 ; PC64LE-NEXT: xxswapd 2, 63
4837 ; PC64LE-NEXT: fmr 31, 1
4838 ; PC64LE-NEXT: xscvspdpn 1, 0
4839 ; PC64LE-NEXT: xscvspdpn 2, 2
4840 ; PC64LE-NEXT: bl fmaxf
4842 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
4843 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
4844 ; PC64LE-NEXT: fmr 30, 1
4845 ; PC64LE-NEXT: xscvspdpn 1, 0
4846 ; PC64LE-NEXT: xscvspdpn 2, 2
4847 ; PC64LE-NEXT: bl fmaxf
4849 ; PC64LE-NEXT: xscvdpspn 0, 1
4850 ; PC64LE-NEXT: xscvdpspn 1, 30
4851 ; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha
4852 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
4853 ; PC64LE-NEXT: xscvdpspn 36, 31
4854 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
4855 ; PC64LE-NEXT: addi 3, 3, .LCPI87_0@toc@l
4856 ; PC64LE-NEXT: xxmrghw 34, 1, 0
4857 ; PC64LE-NEXT: lxvd2x 0, 0, 3
4858 ; PC64LE-NEXT: li 3, 64
4859 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4860 ; PC64LE-NEXT: li 3, 48
4861 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4862 ; PC64LE-NEXT: xxswapd 35, 0
4863 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4864 ; PC64LE-NEXT: addi 1, 1, 96
4865 ; PC64LE-NEXT: ld 0, 16(1)
4866 ; PC64LE-NEXT: mtlr 0
4869 ; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
4870 ; PC64LE9: # %bb.0: # %entry
4871 ; PC64LE9-NEXT: mflr 0
4872 ; PC64LE9-NEXT: stdu 1, -80(1)
4873 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4874 ; PC64LE9-NEXT: std 0, 96(1)
4875 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4876 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
4877 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4878 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4879 ; PC64LE9-NEXT: xscvspdpn 1, 0
4880 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
4881 ; PC64LE9-NEXT: vmr 31, 3
4882 ; PC64LE9-NEXT: vmr 30, 2
4883 ; PC64LE9-NEXT: xscvspdpn 2, 0
4884 ; PC64LE9-NEXT: bl fmaxf
4886 ; PC64LE9-NEXT: xxswapd 0, 62
4887 ; PC64LE9-NEXT: fmr 31, 1
4888 ; PC64LE9-NEXT: xscvspdpn 1, 0
4889 ; PC64LE9-NEXT: xxswapd 0, 63
4890 ; PC64LE9-NEXT: xscvspdpn 2, 0
4891 ; PC64LE9-NEXT: bl fmaxf
4893 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
4894 ; PC64LE9-NEXT: fmr 30, 1
4895 ; PC64LE9-NEXT: xscvspdpn 1, 0
4896 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
4897 ; PC64LE9-NEXT: xscvspdpn 2, 0
4898 ; PC64LE9-NEXT: bl fmaxf
4900 ; PC64LE9-NEXT: xscvdpspn 0, 1
4901 ; PC64LE9-NEXT: xscvdpspn 1, 30
4902 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha
4903 ; PC64LE9-NEXT: xscvdpspn 34, 31
4904 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4905 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
4906 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4907 ; PC64LE9-NEXT: addi 3, 3, .LCPI87_0@toc@l
4908 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4909 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
4910 ; PC64LE9-NEXT: lxv 0, 0(3)
4911 ; PC64LE9-NEXT: xxperm 34, 35, 0
4912 ; PC64LE9-NEXT: addi 1, 1, 80
4913 ; PC64LE9-NEXT: ld 0, 16(1)
4914 ; PC64LE9-NEXT: mtlr 0
4917 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32(
4920 metadata !"fpexcept.strict") #1
4921 ret <3 x float> %max
4924 define <3 x double> @constrained_vector_max_v3f64(<3 x double> %x, <3 x double> %y) #0 {
4925 ; PC64LE-LABEL: constrained_vector_max_v3f64:
4926 ; PC64LE: # %bb.0: # %entry
4927 ; PC64LE-NEXT: mflr 0
4928 ; PC64LE-NEXT: stdu 1, -64(1)
4929 ; PC64LE-NEXT: li 3, 48
4930 ; PC64LE-NEXT: xxmrghd 0, 5, 4
4931 ; PC64LE-NEXT: xxmrghd 1, 2, 1
4932 ; PC64LE-NEXT: std 0, 80(1)
4933 ; PC64LE-NEXT: fmr 2, 6
4934 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4935 ; PC64LE-NEXT: xvmaxdp 63, 1, 0
4936 ; PC64LE-NEXT: fmr 1, 3
4937 ; PC64LE-NEXT: bl fmax
4939 ; PC64LE-NEXT: li 3, 48
4940 ; PC64LE-NEXT: fmr 3, 1
4941 ; PC64LE-NEXT: xxswapd 1, 63
4942 ; PC64LE-NEXT: xxlor 2, 63, 63
4943 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4944 ; PC64LE-NEXT: addi 1, 1, 64
4945 ; PC64LE-NEXT: ld 0, 16(1)
4946 ; PC64LE-NEXT: mtlr 0
4949 ; PC64LE9-LABEL: constrained_vector_max_v3f64:
4950 ; PC64LE9: # %bb.0: # %entry
4951 ; PC64LE9-NEXT: mflr 0
4952 ; PC64LE9-NEXT: stdu 1, -48(1)
4953 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
4954 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
4955 ; PC64LE9-NEXT: std 0, 64(1)
4956 ; PC64LE9-NEXT: fmr 2, 6
4957 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4958 ; PC64LE9-NEXT: xvmaxdp 63, 1, 0
4959 ; PC64LE9-NEXT: fmr 1, 3
4960 ; PC64LE9-NEXT: bl fmax
4962 ; PC64LE9-NEXT: fmr 3, 1
4963 ; PC64LE9-NEXT: xxswapd 1, 63
4964 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4965 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4966 ; PC64LE9-NEXT: addi 1, 1, 48
4967 ; PC64LE9-NEXT: ld 0, 16(1)
4968 ; PC64LE9-NEXT: mtlr 0
4971 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
4974 metadata !"fpexcept.strict") #1
4975 ret <3 x double> %max
4978 define <4 x double> @constrained_vector_maxnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
4979 ; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
4980 ; PC64LE: # %bb.0: # %entry
4981 ; PC64LE-NEXT: xvmaxdp 34, 34, 36
4982 ; PC64LE-NEXT: xvmaxdp 35, 35, 37
4985 ; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
4986 ; PC64LE9: # %bb.0: # %entry
4987 ; PC64LE9-NEXT: xvmaxdp 34, 34, 36
4988 ; PC64LE9-NEXT: xvmaxdp 35, 35, 37
4991 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64(
4994 metadata !"fpexcept.strict") #1
4995 ret <4 x double> %max
4998 define <1 x float> @constrained_vector_minnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
4999 ; PC64LE-LABEL: constrained_vector_minnum_v1f32:
5000 ; PC64LE: # %bb.0: # %entry
5001 ; PC64LE-NEXT: mflr 0
5002 ; PC64LE-NEXT: stdu 1, -32(1)
5003 ; PC64LE-NEXT: std 0, 48(1)
5004 ; PC64LE-NEXT: bl fminf
5006 ; PC64LE-NEXT: addi 1, 1, 32
5007 ; PC64LE-NEXT: ld 0, 16(1)
5008 ; PC64LE-NEXT: mtlr 0
5011 ; PC64LE9-LABEL: constrained_vector_minnum_v1f32:
5012 ; PC64LE9: # %bb.0: # %entry
5013 ; PC64LE9-NEXT: mflr 0
5014 ; PC64LE9-NEXT: stdu 1, -32(1)
5015 ; PC64LE9-NEXT: std 0, 48(1)
5016 ; PC64LE9-NEXT: bl fminf
5018 ; PC64LE9-NEXT: addi 1, 1, 32
5019 ; PC64LE9-NEXT: ld 0, 16(1)
5020 ; PC64LE9-NEXT: mtlr 0
5023 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
5024 <1 x float> %x, <1 x float> %y,
5025 metadata !"fpexcept.strict") #1
5026 ret <1 x float> %min
5029 define <2 x double> @constrained_vector_minnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
5030 ; PC64LE-LABEL: constrained_vector_minnum_v2f64:
5031 ; PC64LE: # %bb.0: # %entry
5032 ; PC64LE-NEXT: xvmindp 34, 34, 35
5035 ; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
5036 ; PC64LE9: # %bb.0: # %entry
5037 ; PC64LE9-NEXT: xvmindp 34, 34, 35
5040 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(
5043 metadata !"fpexcept.strict") #1
5044 ret <2 x double> %min
5047 define <3 x float> @constrained_vector_minnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
5048 ; PC64LE-LABEL: constrained_vector_minnum_v3f32:
5049 ; PC64LE: # %bb.0: # %entry
5050 ; PC64LE-NEXT: mflr 0
5051 ; PC64LE-NEXT: stdu 1, -96(1)
5052 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
5053 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
5054 ; PC64LE-NEXT: li 3, 48
5055 ; PC64LE-NEXT: std 0, 112(1)
5056 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
5057 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
5058 ; PC64LE-NEXT: xscvspdpn 1, 0
5059 ; PC64LE-NEXT: xscvspdpn 2, 2
5060 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
5061 ; PC64LE-NEXT: li 3, 64
5062 ; PC64LE-NEXT: vmr 30, 2
5063 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5064 ; PC64LE-NEXT: vmr 31, 3
5065 ; PC64LE-NEXT: bl fminf
5067 ; PC64LE-NEXT: xxswapd 0, 62
5068 ; PC64LE-NEXT: xxswapd 2, 63
5069 ; PC64LE-NEXT: fmr 31, 1
5070 ; PC64LE-NEXT: xscvspdpn 1, 0
5071 ; PC64LE-NEXT: xscvspdpn 2, 2
5072 ; PC64LE-NEXT: bl fminf
5074 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
5075 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
5076 ; PC64LE-NEXT: fmr 30, 1
5077 ; PC64LE-NEXT: xscvspdpn 1, 0
5078 ; PC64LE-NEXT: xscvspdpn 2, 2
5079 ; PC64LE-NEXT: bl fminf
5081 ; PC64LE-NEXT: xscvdpspn 0, 1
5082 ; PC64LE-NEXT: xscvdpspn 1, 30
5083 ; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha
5084 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
5085 ; PC64LE-NEXT: xscvdpspn 36, 31
5086 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
5087 ; PC64LE-NEXT: addi 3, 3, .LCPI92_0@toc@l
5088 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5089 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5090 ; PC64LE-NEXT: li 3, 64
5091 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5092 ; PC64LE-NEXT: li 3, 48
5093 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
5094 ; PC64LE-NEXT: xxswapd 35, 0
5095 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5096 ; PC64LE-NEXT: addi 1, 1, 96
5097 ; PC64LE-NEXT: ld 0, 16(1)
5098 ; PC64LE-NEXT: mtlr 0
5101 ; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
5102 ; PC64LE9: # %bb.0: # %entry
5103 ; PC64LE9-NEXT: mflr 0
5104 ; PC64LE9-NEXT: stdu 1, -80(1)
5105 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5106 ; PC64LE9-NEXT: std 0, 96(1)
5107 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
5108 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
5109 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
5110 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
5111 ; PC64LE9-NEXT: xscvspdpn 1, 0
5112 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
5113 ; PC64LE9-NEXT: vmr 31, 3
5114 ; PC64LE9-NEXT: vmr 30, 2
5115 ; PC64LE9-NEXT: xscvspdpn 2, 0
5116 ; PC64LE9-NEXT: bl fminf
5118 ; PC64LE9-NEXT: xxswapd 0, 62
5119 ; PC64LE9-NEXT: fmr 31, 1
5120 ; PC64LE9-NEXT: xscvspdpn 1, 0
5121 ; PC64LE9-NEXT: xxswapd 0, 63
5122 ; PC64LE9-NEXT: xscvspdpn 2, 0
5123 ; PC64LE9-NEXT: bl fminf
5125 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
5126 ; PC64LE9-NEXT: fmr 30, 1
5127 ; PC64LE9-NEXT: xscvspdpn 1, 0
5128 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
5129 ; PC64LE9-NEXT: xscvspdpn 2, 0
5130 ; PC64LE9-NEXT: bl fminf
5132 ; PC64LE9-NEXT: xscvdpspn 0, 1
5133 ; PC64LE9-NEXT: xscvdpspn 1, 30
5134 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha
5135 ; PC64LE9-NEXT: xscvdpspn 34, 31
5136 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5137 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
5138 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
5139 ; PC64LE9-NEXT: addi 3, 3, .LCPI92_0@toc@l
5140 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
5141 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5142 ; PC64LE9-NEXT: lxv 0, 0(3)
5143 ; PC64LE9-NEXT: xxperm 34, 35, 0
5144 ; PC64LE9-NEXT: addi 1, 1, 80
5145 ; PC64LE9-NEXT: ld 0, 16(1)
5146 ; PC64LE9-NEXT: mtlr 0
5149 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32(
5152 metadata !"fpexcept.strict") #1
5153 ret <3 x float> %min
5156 define <3 x double> @constrained_vector_min_v3f64(<3 x double> %x, <3 x double> %y) #0 {
5157 ; PC64LE-LABEL: constrained_vector_min_v3f64:
5158 ; PC64LE: # %bb.0: # %entry
5159 ; PC64LE-NEXT: mflr 0
5160 ; PC64LE-NEXT: stdu 1, -64(1)
5161 ; PC64LE-NEXT: li 3, 48
5162 ; PC64LE-NEXT: xxmrghd 0, 5, 4
5163 ; PC64LE-NEXT: xxmrghd 1, 2, 1
5164 ; PC64LE-NEXT: std 0, 80(1)
5165 ; PC64LE-NEXT: fmr 2, 6
5166 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5167 ; PC64LE-NEXT: xvmindp 63, 1, 0
5168 ; PC64LE-NEXT: fmr 1, 3
5169 ; PC64LE-NEXT: bl fmin
5171 ; PC64LE-NEXT: li 3, 48
5172 ; PC64LE-NEXT: fmr 3, 1
5173 ; PC64LE-NEXT: xxswapd 1, 63
5174 ; PC64LE-NEXT: xxlor 2, 63, 63
5175 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5176 ; PC64LE-NEXT: addi 1, 1, 64
5177 ; PC64LE-NEXT: ld 0, 16(1)
5178 ; PC64LE-NEXT: mtlr 0
5181 ; PC64LE9-LABEL: constrained_vector_min_v3f64:
5182 ; PC64LE9: # %bb.0: # %entry
5183 ; PC64LE9-NEXT: mflr 0
5184 ; PC64LE9-NEXT: stdu 1, -48(1)
5185 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
5186 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
5187 ; PC64LE9-NEXT: std 0, 64(1)
5188 ; PC64LE9-NEXT: fmr 2, 6
5189 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
5190 ; PC64LE9-NEXT: xvmindp 63, 1, 0
5191 ; PC64LE9-NEXT: fmr 1, 3
5192 ; PC64LE9-NEXT: bl fmin
5194 ; PC64LE9-NEXT: fmr 3, 1
5195 ; PC64LE9-NEXT: xxswapd 1, 63
5196 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
5197 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
5198 ; PC64LE9-NEXT: addi 1, 1, 48
5199 ; PC64LE9-NEXT: ld 0, 16(1)
5200 ; PC64LE9-NEXT: mtlr 0
5203 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
5206 metadata !"fpexcept.strict") #1
5207 ret <3 x double> %min
5210 define <4 x double> @constrained_vector_minnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
5211 ; PC64LE-LABEL: constrained_vector_minnum_v4f64:
5212 ; PC64LE: # %bb.0: # %entry
5213 ; PC64LE-NEXT: xvmindp 34, 34, 36
5214 ; PC64LE-NEXT: xvmindp 35, 35, 37
5217 ; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
5218 ; PC64LE9: # %bb.0: # %entry
5219 ; PC64LE9-NEXT: xvmindp 34, 34, 36
5220 ; PC64LE9-NEXT: xvmindp 35, 35, 37
5223 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64(
5226 metadata !"fpexcept.strict") #1
5227 ret <4 x double> %min
5230 define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32(<1 x float> %x) #0 {
5231 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5232 ; PC64LE: # %bb.0: # %entry
5233 ; PC64LE-NEXT: xscvdpsxws 0, 1
5234 ; PC64LE-NEXT: mffprwz 3, 0
5237 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5238 ; PC64LE9: # %bb.0: # %entry
5239 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5240 ; PC64LE9-NEXT: mffprwz 3, 0
5243 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(
5245 metadata !"fpexcept.strict") #0
5246 ret <1 x i32> %result
5249 define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32(<2 x float> %x) #0 {
5250 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5251 ; PC64LE: # %bb.0: # %entry
5252 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5253 ; PC64LE-NEXT: xxswapd 1, 34
5254 ; PC64LE-NEXT: xscvspdpn 0, 0
5255 ; PC64LE-NEXT: xscvspdpn 1, 1
5256 ; PC64LE-NEXT: xscvdpsxws 0, 0
5257 ; PC64LE-NEXT: xscvdpsxws 1, 1
5258 ; PC64LE-NEXT: mffprwz 3, 0
5259 ; PC64LE-NEXT: mtfprwz 0, 3
5260 ; PC64LE-NEXT: mffprwz 3, 1
5261 ; PC64LE-NEXT: mtfprwz 1, 3
5262 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5265 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5266 ; PC64LE9: # %bb.0: # %entry
5267 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5268 ; PC64LE9-NEXT: xxswapd 1, 34
5269 ; PC64LE9-NEXT: xscvspdpn 0, 0
5270 ; PC64LE9-NEXT: xscvspdpn 1, 1
5271 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5272 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5273 ; PC64LE9-NEXT: mffprwz 3, 0
5274 ; PC64LE9-NEXT: mtfprwz 0, 3
5275 ; PC64LE9-NEXT: mffprwz 3, 1
5276 ; PC64LE9-NEXT: mtfprwz 1, 3
5277 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
5280 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(
5282 metadata !"fpexcept.strict") #0
5283 ret <2 x i32> %result
5286 define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 {
5287 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5288 ; PC64LE: # %bb.0: # %entry
5289 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5290 ; PC64LE-NEXT: xxswapd 1, 34
5291 ; PC64LE-NEXT: xscvspdpn 0, 0
5292 ; PC64LE-NEXT: xscvspdpn 1, 1
5293 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5294 ; PC64LE-NEXT: xscvdpsxws 0, 0
5295 ; PC64LE-NEXT: xscvdpsxws 1, 1
5296 ; PC64LE-NEXT: mffprwz 3, 0
5297 ; PC64LE-NEXT: mtfprwz 0, 3
5298 ; PC64LE-NEXT: mffprwz 3, 1
5299 ; PC64LE-NEXT: mtfprwz 1, 3
5300 ; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha
5301 ; PC64LE-NEXT: addi 3, 3, .LCPI97_0@toc@l
5302 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5303 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5304 ; PC64LE-NEXT: xxswapd 35, 0
5305 ; PC64LE-NEXT: xscvspdpn 0, 2
5306 ; PC64LE-NEXT: xscvdpsxws 0, 0
5307 ; PC64LE-NEXT: mffprwz 3, 0
5308 ; PC64LE-NEXT: mtvsrwz 36, 3
5309 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5312 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5313 ; PC64LE9: # %bb.0: # %entry
5314 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5315 ; PC64LE9-NEXT: xxswapd 1, 34
5316 ; PC64LE9-NEXT: xscvspdpn 0, 0
5317 ; PC64LE9-NEXT: xscvspdpn 1, 1
5318 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5319 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5320 ; PC64LE9-NEXT: mffprwz 3, 0
5321 ; PC64LE9-NEXT: mtfprwz 0, 3
5322 ; PC64LE9-NEXT: mffprwz 3, 1
5323 ; PC64LE9-NEXT: mtfprwz 1, 3
5324 ; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha
5325 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5326 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
5327 ; PC64LE9-NEXT: addi 3, 3, .LCPI97_0@toc@l
5328 ; PC64LE9-NEXT: lxv 0, 0(3)
5329 ; PC64LE9-NEXT: xscvspdpn 1, 1
5330 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5331 ; PC64LE9-NEXT: mffprwz 3, 1
5332 ; PC64LE9-NEXT: mtvsrwz 34, 3
5333 ; PC64LE9-NEXT: xxperm 34, 35, 0
5336 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(
5338 metadata !"fpexcept.strict") #0
5339 ret <3 x i32> %result
5342 define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32(<4 x float> %x) #0 {
5343 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5344 ; PC64LE: # %bb.0: # %entry
5345 ; PC64LE-NEXT: xvcvspsxws 34, 34
5348 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5349 ; PC64LE9: # %bb.0: # %entry
5350 ; PC64LE9-NEXT: xvcvspsxws 34, 34
5353 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(
5355 metadata !"fpexcept.strict") #0
5356 ret <4 x i32> %result
5359 define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32(<1 x float> %x) #0 {
5360 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5361 ; PC64LE: # %bb.0: # %entry
5362 ; PC64LE-NEXT: xscvdpsxds 0, 1
5363 ; PC64LE-NEXT: mffprd 3, 0
5366 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5367 ; PC64LE9: # %bb.0: # %entry
5368 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5369 ; PC64LE9-NEXT: mffprd 3, 0
5372 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(
5374 metadata !"fpexcept.strict") #0
5375 ret <1 x i64> %result
5378 define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32(<2 x float> %x) #0 {
5379 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5380 ; PC64LE: # %bb.0: # %entry
5381 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5382 ; PC64LE-NEXT: xxswapd 1, 34
5383 ; PC64LE-NEXT: xscvspdpn 0, 0
5384 ; PC64LE-NEXT: xscvspdpn 1, 1
5385 ; PC64LE-NEXT: xscvdpsxds 0, 0
5386 ; PC64LE-NEXT: xscvdpsxds 1, 1
5387 ; PC64LE-NEXT: mffprd 3, 0
5388 ; PC64LE-NEXT: mtfprd 0, 3
5389 ; PC64LE-NEXT: mffprd 3, 1
5390 ; PC64LE-NEXT: mtfprd 1, 3
5391 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5394 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5395 ; PC64LE9: # %bb.0: # %entry
5396 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5397 ; PC64LE9-NEXT: xscvspdpn 0, 0
5398 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5399 ; PC64LE9-NEXT: mffprd 3, 0
5400 ; PC64LE9-NEXT: xxswapd 0, 34
5401 ; PC64LE9-NEXT: xscvspdpn 0, 0
5402 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5403 ; PC64LE9-NEXT: mffprd 4, 0
5404 ; PC64LE9-NEXT: mtvsrdd 34, 4, 3
5407 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(
5409 metadata !"fpexcept.strict") #0
5410 ret <2 x i64> %result
5413 define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32(<3 x float> %x) #0 {
5414 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5415 ; PC64LE: # %bb.0: # %entry
5416 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5417 ; PC64LE-NEXT: xxswapd 1, 34
5418 ; PC64LE-NEXT: xscvspdpn 0, 0
5419 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5420 ; PC64LE-NEXT: xscvdpsxds 0, 0
5421 ; PC64LE-NEXT: mffprd 3, 0
5422 ; PC64LE-NEXT: xscvspdpn 0, 1
5423 ; PC64LE-NEXT: xscvdpsxds 0, 0
5424 ; PC64LE-NEXT: mffprd 4, 0
5425 ; PC64LE-NEXT: xscvspdpn 0, 2
5426 ; PC64LE-NEXT: xscvdpsxds 0, 0
5427 ; PC64LE-NEXT: mffprd 5, 0
5430 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5431 ; PC64LE9: # %bb.0: # %entry
5432 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5433 ; PC64LE9-NEXT: xscvspdpn 0, 0
5434 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5435 ; PC64LE9-NEXT: mffprd 3, 0
5436 ; PC64LE9-NEXT: xxswapd 0, 34
5437 ; PC64LE9-NEXT: xscvspdpn 0, 0
5438 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5439 ; PC64LE9-NEXT: mffprd 4, 0
5440 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5441 ; PC64LE9-NEXT: xscvspdpn 0, 0
5442 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5443 ; PC64LE9-NEXT: mffprd 5, 0
5446 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(
5448 metadata !"fpexcept.strict") #0
5449 ret <3 x i64> %result
5452 define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32(<4 x float> %x) #0 {
5453 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5454 ; PC64LE: # %bb.0: # %entry
5455 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5456 ; PC64LE-NEXT: xxswapd 1, 34
5457 ; PC64LE-NEXT: xscvspdpn 0, 0
5458 ; PC64LE-NEXT: xscvspdpn 1, 1
5459 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5460 ; PC64LE-NEXT: xscvdpsxds 0, 0
5461 ; PC64LE-NEXT: xscvdpsxds 1, 1
5462 ; PC64LE-NEXT: mffprd 3, 0
5463 ; PC64LE-NEXT: mtfprd 0, 3
5464 ; PC64LE-NEXT: mffprd 3, 1
5465 ; PC64LE-NEXT: mtfprd 1, 3
5466 ; PC64LE-NEXT: xxmrghd 36, 1, 0
5467 ; PC64LE-NEXT: xscvspdpn 0, 34
5468 ; PC64LE-NEXT: xscvspdpn 1, 2
5469 ; PC64LE-NEXT: vmr 2, 4
5470 ; PC64LE-NEXT: xscvdpsxds 0, 0
5471 ; PC64LE-NEXT: xscvdpsxds 1, 1
5472 ; PC64LE-NEXT: mffprd 3, 0
5473 ; PC64LE-NEXT: mtfprd 0, 3
5474 ; PC64LE-NEXT: mffprd 3, 1
5475 ; PC64LE-NEXT: mtfprd 1, 3
5476 ; PC64LE-NEXT: xxmrghd 35, 0, 1
5479 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5480 ; PC64LE9: # %bb.0: # %entry
5481 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5482 ; PC64LE9-NEXT: xscvspdpn 0, 0
5483 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5484 ; PC64LE9-NEXT: mffprd 3, 0
5485 ; PC64LE9-NEXT: xxswapd 0, 34
5486 ; PC64LE9-NEXT: xscvspdpn 0, 0
5487 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5488 ; PC64LE9-NEXT: mffprd 4, 0
5489 ; PC64LE9-NEXT: xscvspdpn 0, 34
5490 ; PC64LE9-NEXT: mtvsrdd 36, 4, 3
5491 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5492 ; PC64LE9-NEXT: mffprd 3, 0
5493 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5494 ; PC64LE9-NEXT: vmr 2, 4
5495 ; PC64LE9-NEXT: xscvspdpn 0, 0
5496 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5497 ; PC64LE9-NEXT: mffprd 4, 0
5498 ; PC64LE9-NEXT: mtvsrdd 35, 3, 4
5501 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(
5503 metadata !"fpexcept.strict") #0
5504 ret <4 x i64> %result
5507 define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64(<1 x double> %x) #0 {
5508 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5509 ; PC64LE: # %bb.0: # %entry
5510 ; PC64LE-NEXT: xscvdpsxws 0, 1
5511 ; PC64LE-NEXT: mffprwz 3, 0
5514 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5515 ; PC64LE9: # %bb.0: # %entry
5516 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5517 ; PC64LE9-NEXT: mffprwz 3, 0
5520 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(
5522 metadata !"fpexcept.strict") #0
5523 ret <1 x i32> %result
5527 define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64(<2 x double> %x) #0 {
5528 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5529 ; PC64LE: # %bb.0: # %entry
5530 ; PC64LE-NEXT: xscvdpsxws 1, 34
5531 ; PC64LE-NEXT: xxswapd 0, 34
5532 ; PC64LE-NEXT: xscvdpsxws 0, 0
5533 ; PC64LE-NEXT: mffprwz 3, 1
5534 ; PC64LE-NEXT: mtfprwz 1, 3
5535 ; PC64LE-NEXT: mffprwz 3, 0
5536 ; PC64LE-NEXT: mtfprwz 0, 3
5537 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5540 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5541 ; PC64LE9: # %bb.0: # %entry
5542 ; PC64LE9-NEXT: xxswapd 1, 34
5543 ; PC64LE9-NEXT: xscvdpsxws 0, 34
5544 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5545 ; PC64LE9-NEXT: mffprwz 3, 0
5546 ; PC64LE9-NEXT: mtfprwz 0, 3
5547 ; PC64LE9-NEXT: mffprwz 3, 1
5548 ; PC64LE9-NEXT: mtfprwz 1, 3
5549 ; PC64LE9-NEXT: xxmrghw 34, 0, 1
5552 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(
5554 metadata !"fpexcept.strict") #0
5555 ret <2 x i32> %result
5558 define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 {
5559 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5560 ; PC64LE: # %bb.0: # %entry
5561 ; PC64LE-NEXT: xscvdpsxws 0, 1
5562 ; PC64LE-NEXT: xscvdpsxws 1, 2
5563 ; PC64LE-NEXT: mffprwz 3, 0
5564 ; PC64LE-NEXT: mtfprwz 0, 3
5565 ; PC64LE-NEXT: mffprwz 3, 1
5566 ; PC64LE-NEXT: mtfprwz 1, 3
5567 ; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha
5568 ; PC64LE-NEXT: addi 3, 3, .LCPI105_0@toc@l
5569 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5570 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5571 ; PC64LE-NEXT: xxswapd 35, 0
5572 ; PC64LE-NEXT: xscvdpsxws 0, 3
5573 ; PC64LE-NEXT: mffprwz 3, 0
5574 ; PC64LE-NEXT: mtvsrwz 36, 3
5575 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5578 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5579 ; PC64LE9: # %bb.0: # %entry
5580 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5581 ; PC64LE9-NEXT: xscvdpsxws 1, 2
5582 ; PC64LE9-NEXT: mffprwz 3, 0
5583 ; PC64LE9-NEXT: mtfprwz 0, 3
5584 ; PC64LE9-NEXT: mffprwz 3, 1
5585 ; PC64LE9-NEXT: mtfprwz 1, 3
5586 ; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha
5587 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5588 ; PC64LE9-NEXT: xscvdpsxws 1, 3
5589 ; PC64LE9-NEXT: addi 3, 3, .LCPI105_0@toc@l
5590 ; PC64LE9-NEXT: lxv 0, 0(3)
5591 ; PC64LE9-NEXT: mffprwz 3, 1
5592 ; PC64LE9-NEXT: mtvsrwz 34, 3
5593 ; PC64LE9-NEXT: xxperm 34, 35, 0
5596 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(
5598 metadata !"fpexcept.strict") #0
5599 ret <3 x i32> %result
5602 define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64(<4 x double> %x) #0 {
5603 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5604 ; PC64LE: # %bb.0: # %entry
5605 ; PC64LE-NEXT: xxswapd 0, 34
5606 ; PC64LE-NEXT: xscvdpsxws 2, 34
5607 ; PC64LE-NEXT: xxswapd 1, 35
5608 ; PC64LE-NEXT: xscvdpsxws 0, 0
5609 ; PC64LE-NEXT: xscvdpsxws 1, 1
5610 ; PC64LE-NEXT: mffprwz 3, 2
5611 ; PC64LE-NEXT: xscvdpsxws 2, 35
5612 ; PC64LE-NEXT: mffprwz 4, 0
5613 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
5614 ; PC64LE-NEXT: mffprwz 3, 2
5615 ; PC64LE-NEXT: mtfprd 0, 4
5616 ; PC64LE-NEXT: mffprwz 4, 1
5617 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
5618 ; PC64LE-NEXT: mtfprd 1, 4
5619 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5622 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5623 ; PC64LE9: # %bb.0: # %entry
5624 ; PC64LE9-NEXT: xscvdpsxws 0, 34
5625 ; PC64LE9-NEXT: mffprwz 3, 0
5626 ; PC64LE9-NEXT: xxswapd 0, 34
5627 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5628 ; PC64LE9-NEXT: mffprwz 4, 0
5629 ; PC64LE9-NEXT: xscvdpsxws 0, 35
5630 ; PC64LE9-NEXT: rldimi 4, 3, 32, 0
5631 ; PC64LE9-NEXT: mffprwz 3, 0
5632 ; PC64LE9-NEXT: xxswapd 0, 35
5633 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5634 ; PC64LE9-NEXT: mffprwz 5, 0
5635 ; PC64LE9-NEXT: rldimi 5, 3, 32, 0
5636 ; PC64LE9-NEXT: mtvsrdd 34, 5, 4
5639 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(
5641 metadata !"fpexcept.strict") #0
5642 ret <4 x i32> %result
5645 define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64(<1 x double> %x) #0 {
5646 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64:
5647 ; PC64LE: # %bb.0: # %entry
5648 ; PC64LE-NEXT: xscvdpsxds 0, 1
5649 ; PC64LE-NEXT: mffprd 3, 0
5652 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64:
5653 ; PC64LE9: # %bb.0: # %entry
5654 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5655 ; PC64LE9-NEXT: mffprd 3, 0
5658 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(
5660 metadata !"fpexcept.strict") #0
5661 ret <1 x i64> %result
5664 define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64(<2 x double> %x) #0 {
5665 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64:
5666 ; PC64LE: # %bb.0: # %entry
5667 ; PC64LE-NEXT: xvcvdpsxds 34, 34
5670 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64:
5671 ; PC64LE9: # %bb.0: # %entry
5672 ; PC64LE9-NEXT: xvcvdpsxds 34, 34
5675 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(
5677 metadata !"fpexcept.strict") #0
5678 ret <2 x i64> %result
5681 define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64(<3 x double> %x) #0 {
5682 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64:
5683 ; PC64LE: # %bb.0: # %entry
5684 ; PC64LE-NEXT: xscvdpsxds 0, 1
5685 ; PC64LE-NEXT: mffprd 3, 0
5686 ; PC64LE-NEXT: xscvdpsxds 0, 2
5687 ; PC64LE-NEXT: mffprd 4, 0
5688 ; PC64LE-NEXT: xscvdpsxds 0, 3
5689 ; PC64LE-NEXT: mffprd 5, 0
5692 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64:
5693 ; PC64LE9: # %bb.0: # %entry
5694 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5695 ; PC64LE9-NEXT: mffprd 3, 0
5696 ; PC64LE9-NEXT: xscvdpsxds 0, 2
5697 ; PC64LE9-NEXT: mffprd 4, 0
5698 ; PC64LE9-NEXT: xscvdpsxds 0, 3
5699 ; PC64LE9-NEXT: mffprd 5, 0
5702 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(
5704 metadata !"fpexcept.strict") #0
5705 ret <3 x i64> %result
5708 define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64(<4 x double> %x) #0 {
5709 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64:
5710 ; PC64LE: # %bb.0: # %entry
5711 ; PC64LE-NEXT: xvcvdpsxds 35, 35
5712 ; PC64LE-NEXT: xvcvdpsxds 34, 34
5715 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64:
5716 ; PC64LE9: # %bb.0: # %entry
5717 ; PC64LE9-NEXT: xvcvdpsxds 35, 35
5718 ; PC64LE9-NEXT: xvcvdpsxds 34, 34
5721 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(
5723 metadata !"fpexcept.strict") #0
5724 ret <4 x i64> %result
5727 define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32(<1 x float> %x) #0 {
5728 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32:
5729 ; PC64LE: # %bb.0: # %entry
5730 ; PC64LE-NEXT: xscvdpuxws 0, 1
5731 ; PC64LE-NEXT: mffprwz 3, 0
5734 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32:
5735 ; PC64LE9: # %bb.0: # %entry
5736 ; PC64LE9-NEXT: xscvdpuxws 0, 1
5737 ; PC64LE9-NEXT: mffprwz 3, 0
5740 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(
5742 metadata !"fpexcept.strict") #0
5743 ret <1 x i32> %result
5746 define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32(<2 x float> %x) #0 {
5747 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32:
5748 ; PC64LE: # %bb.0: # %entry
5749 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5750 ; PC64LE-NEXT: xxswapd 1, 34
5751 ; PC64LE-NEXT: xscvspdpn 0, 0
5752 ; PC64LE-NEXT: xscvspdpn 1, 1
5753 ; PC64LE-NEXT: xscvdpuxws 0, 0
5754 ; PC64LE-NEXT: xscvdpuxws 1, 1
5755 ; PC64LE-NEXT: mffprwz 3, 0
5756 ; PC64LE-NEXT: mtfprwz 0, 3
5757 ; PC64LE-NEXT: mffprwz 3, 1
5758 ; PC64LE-NEXT: mtfprwz 1, 3
5759 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5762 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32:
5763 ; PC64LE9: # %bb.0: # %entry
5764 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5765 ; PC64LE9-NEXT: xxswapd 1, 34
5766 ; PC64LE9-NEXT: xscvspdpn 0, 0
5767 ; PC64LE9-NEXT: xscvspdpn 1, 1
5768 ; PC64LE9-NEXT: xscvdpuxws 0, 0
5769 ; PC64LE9-NEXT: xscvdpuxws 1, 1
5770 ; PC64LE9-NEXT: mffprwz 3, 0
5771 ; PC64LE9-NEXT: mtfprwz 0, 3
5772 ; PC64LE9-NEXT: mffprwz 3, 1
5773 ; PC64LE9-NEXT: mtfprwz 1, 3
5774 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
5777 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(
5779 metadata !"fpexcept.strict") #0
5780 ret <2 x i32> %result
5783 define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 {
5784 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32:
5785 ; PC64LE: # %bb.0: # %entry
5786 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5787 ; PC64LE-NEXT: xxswapd 1, 34
5788 ; PC64LE-NEXT: xscvspdpn 0, 0
5789 ; PC64LE-NEXT: xscvspdpn 1, 1
5790 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5791 ; PC64LE-NEXT: xscvdpuxws 0, 0
5792 ; PC64LE-NEXT: xscvdpuxws 1, 1
5793 ; PC64LE-NEXT: mffprwz 3, 0
5794 ; PC64LE-NEXT: mtfprwz 0, 3
5795 ; PC64LE-NEXT: mffprwz 3, 1
5796 ; PC64LE-NEXT: mtfprwz 1, 3
5797 ; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha
5798 ; PC64LE-NEXT: addi 3, 3, .LCPI113_0@toc@l
5799 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5800 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5801 ; PC64LE-NEXT: xxswapd 35, 0
5802 ; PC64LE-NEXT: xscvspdpn 0, 2
5803 ; PC64LE-NEXT: xscvdpuxws 0, 0
5804 ; PC64LE-NEXT: mffprwz 3, 0
5805 ; PC64LE-NEXT: mtvsrwz 36, 3
5806 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5809 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32:
5810 ; PC64LE9: # %bb.0: # %entry
5811 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5812 ; PC64LE9-NEXT: xxswapd 1, 34
5813 ; PC64LE9-NEXT: xscvspdpn 0, 0
5814 ; PC64LE9-NEXT: xscvspdpn 1, 1
5815 ; PC64LE9-NEXT: xscvdpuxws 0, 0
5816 ; PC64LE9-NEXT: xscvdpuxws 1, 1
5817 ; PC64LE9-NEXT: mffprwz 3, 0
5818 ; PC64LE9-NEXT: mtfprwz 0, 3
5819 ; PC64LE9-NEXT: mffprwz 3, 1
5820 ; PC64LE9-NEXT: mtfprwz 1, 3
5821 ; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha
5822 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5823 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
5824 ; PC64LE9-NEXT: addi 3, 3, .LCPI113_0@toc@l
5825 ; PC64LE9-NEXT: lxv 0, 0(3)
5826 ; PC64LE9-NEXT: xscvspdpn 1, 1
5827 ; PC64LE9-NEXT: xscvdpuxws 1, 1
5828 ; PC64LE9-NEXT: mffprwz 3, 1
5829 ; PC64LE9-NEXT: mtvsrwz 34, 3
5830 ; PC64LE9-NEXT: xxperm 34, 35, 0
5833 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(
5835 metadata !"fpexcept.strict") #0
5836 ret <3 x i32> %result
5839 define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32(<4 x float> %x) #0 {
5840 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32:
5841 ; PC64LE: # %bb.0: # %entry
5842 ; PC64LE-NEXT: xvcvspuxws 34, 34
5845 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32:
5846 ; PC64LE9: # %bb.0: # %entry
5847 ; PC64LE9-NEXT: xvcvspuxws 34, 34
5850 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(
5852 metadata !"fpexcept.strict") #0
5853 ret <4 x i32> %result
5856 define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32(<1 x float> %x) #0 {
5857 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32:
5858 ; PC64LE: # %bb.0: # %entry
5859 ; PC64LE-NEXT: xscvdpuxds 0, 1
5860 ; PC64LE-NEXT: mffprd 3, 0
5863 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32:
5864 ; PC64LE9: # %bb.0: # %entry
5865 ; PC64LE9-NEXT: xscvdpuxds 0, 1
5866 ; PC64LE9-NEXT: mffprd 3, 0
5869 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(
5871 metadata !"fpexcept.strict") #0
5872 ret <1 x i64> %result
5875 define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32(<2 x float> %x) #0 {
5876 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32:
5877 ; PC64LE: # %bb.0: # %entry
5878 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5879 ; PC64LE-NEXT: xxswapd 1, 34
5880 ; PC64LE-NEXT: xscvspdpn 0, 0
5881 ; PC64LE-NEXT: xscvspdpn 1, 1
5882 ; PC64LE-NEXT: xscvdpuxds 0, 0
5883 ; PC64LE-NEXT: xscvdpuxds 1, 1
5884 ; PC64LE-NEXT: mffprd 3, 0
5885 ; PC64LE-NEXT: mtfprd 0, 3
5886 ; PC64LE-NEXT: mffprd 3, 1
5887 ; PC64LE-NEXT: mtfprd 1, 3
5888 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5891 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32:
5892 ; PC64LE9: # %bb.0: # %entry
5893 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5894 ; PC64LE9-NEXT: xscvspdpn 0, 0
5895 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5896 ; PC64LE9-NEXT: mffprd 3, 0
5897 ; PC64LE9-NEXT: xxswapd 0, 34
5898 ; PC64LE9-NEXT: xscvspdpn 0, 0
5899 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5900 ; PC64LE9-NEXT: mffprd 4, 0
5901 ; PC64LE9-NEXT: mtvsrdd 34, 4, 3
5904 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(
5906 metadata !"fpexcept.strict") #0
5907 ret <2 x i64> %result
5910 define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32(<3 x float> %x) #0 {
5911 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32:
5912 ; PC64LE: # %bb.0: # %entry
5913 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5914 ; PC64LE-NEXT: xxswapd 1, 34
5915 ; PC64LE-NEXT: xscvspdpn 0, 0
5916 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5917 ; PC64LE-NEXT: xscvdpuxds 0, 0
5918 ; PC64LE-NEXT: mffprd 3, 0
5919 ; PC64LE-NEXT: xscvspdpn 0, 1
5920 ; PC64LE-NEXT: xscvdpuxds 0, 0
5921 ; PC64LE-NEXT: mffprd 4, 0
5922 ; PC64LE-NEXT: xscvspdpn 0, 2
5923 ; PC64LE-NEXT: xscvdpuxds 0, 0
5924 ; PC64LE-NEXT: mffprd 5, 0
5927 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32:
5928 ; PC64LE9: # %bb.0: # %entry
5929 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5930 ; PC64LE9-NEXT: xscvspdpn 0, 0
5931 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5932 ; PC64LE9-NEXT: mffprd 3, 0
5933 ; PC64LE9-NEXT: xxswapd 0, 34
5934 ; PC64LE9-NEXT: xscvspdpn 0, 0
5935 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5936 ; PC64LE9-NEXT: mffprd 4, 0
5937 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5938 ; PC64LE9-NEXT: xscvspdpn 0, 0
5939 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5940 ; PC64LE9-NEXT: mffprd 5, 0
5943 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(
5945 metadata !"fpexcept.strict") #0
5946 ret <3 x i64> %result
5949 define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32(<4 x float> %x) #0 {
5950 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32:
5951 ; PC64LE: # %bb.0: # %entry
5952 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5953 ; PC64LE-NEXT: xxswapd 1, 34
5954 ; PC64LE-NEXT: xscvspdpn 0, 0
5955 ; PC64LE-NEXT: xscvspdpn 1, 1
5956 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5957 ; PC64LE-NEXT: xscvdpuxds 0, 0
5958 ; PC64LE-NEXT: xscvdpuxds 1, 1
5959 ; PC64LE-NEXT: mffprd 3, 0
5960 ; PC64LE-NEXT: mtfprd 0, 3
5961 ; PC64LE-NEXT: mffprd 3, 1
5962 ; PC64LE-NEXT: mtfprd 1, 3
5963 ; PC64LE-NEXT: xxmrghd 36, 1, 0
5964 ; PC64LE-NEXT: xscvspdpn 0, 34
5965 ; PC64LE-NEXT: xscvspdpn 1, 2
5966 ; PC64LE-NEXT: vmr 2, 4
5967 ; PC64LE-NEXT: xscvdpuxds 0, 0
5968 ; PC64LE-NEXT: xscvdpuxds 1, 1
5969 ; PC64LE-NEXT: mffprd 3, 0
5970 ; PC64LE-NEXT: mtfprd 0, 3
5971 ; PC64LE-NEXT: mffprd 3, 1
5972 ; PC64LE-NEXT: mtfprd 1, 3
5973 ; PC64LE-NEXT: xxmrghd 35, 0, 1
5976 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32:
5977 ; PC64LE9: # %bb.0: # %entry
5978 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5979 ; PC64LE9-NEXT: xscvspdpn 0, 0
5980 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5981 ; PC64LE9-NEXT: mffprd 3, 0
5982 ; PC64LE9-NEXT: xxswapd 0, 34
5983 ; PC64LE9-NEXT: xscvspdpn 0, 0
5984 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5985 ; PC64LE9-NEXT: mffprd 4, 0
5986 ; PC64LE9-NEXT: xscvspdpn 0, 34
5987 ; PC64LE9-NEXT: mtvsrdd 36, 4, 3
5988 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5989 ; PC64LE9-NEXT: mffprd 3, 0
5990 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5991 ; PC64LE9-NEXT: vmr 2, 4
5992 ; PC64LE9-NEXT: xscvspdpn 0, 0
5993 ; PC64LE9-NEXT: xscvdpuxds 0, 0
5994 ; PC64LE9-NEXT: mffprd 4, 0
5995 ; PC64LE9-NEXT: mtvsrdd 35, 3, 4
5998 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(
6000 metadata !"fpexcept.strict") #0
6001 ret <4 x i64> %result
6004 define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64(<1 x double> %x) #0 {
6005 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6006 ; PC64LE: # %bb.0: # %entry
6007 ; PC64LE-NEXT: xscvdpuxws 0, 1
6008 ; PC64LE-NEXT: mffprwz 3, 0
6011 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6012 ; PC64LE9: # %bb.0: # %entry
6013 ; PC64LE9-NEXT: xscvdpuxws 0, 1
6014 ; PC64LE9-NEXT: mffprwz 3, 0
6017 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(
6019 metadata !"fpexcept.strict") #0
6020 ret <1 x i32> %result
6023 define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64(<2 x double> %x) #0 {
6024 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6025 ; PC64LE: # %bb.0: # %entry
6026 ; PC64LE-NEXT: xscvdpuxws 1, 34
6027 ; PC64LE-NEXT: xxswapd 0, 34
6028 ; PC64LE-NEXT: xscvdpuxws 0, 0
6029 ; PC64LE-NEXT: mffprwz 3, 1
6030 ; PC64LE-NEXT: mtfprwz 1, 3
6031 ; PC64LE-NEXT: mffprwz 3, 0
6032 ; PC64LE-NEXT: mtfprwz 0, 3
6033 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6036 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6037 ; PC64LE9: # %bb.0: # %entry
6038 ; PC64LE9-NEXT: xxswapd 1, 34
6039 ; PC64LE9-NEXT: xscvdpuxws 0, 34
6040 ; PC64LE9-NEXT: xscvdpuxws 1, 1
6041 ; PC64LE9-NEXT: mffprwz 3, 0
6042 ; PC64LE9-NEXT: mtfprwz 0, 3
6043 ; PC64LE9-NEXT: mffprwz 3, 1
6044 ; PC64LE9-NEXT: mtfprwz 1, 3
6045 ; PC64LE9-NEXT: xxmrghw 34, 0, 1
6048 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(
6050 metadata !"fpexcept.strict") #0
6051 ret <2 x i32> %result
6054 define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 {
6055 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6056 ; PC64LE: # %bb.0: # %entry
6057 ; PC64LE-NEXT: xscvdpuxws 0, 1
6058 ; PC64LE-NEXT: xscvdpuxws 1, 2
6059 ; PC64LE-NEXT: mffprwz 3, 0
6060 ; PC64LE-NEXT: mtfprwz 0, 3
6061 ; PC64LE-NEXT: mffprwz 3, 1
6062 ; PC64LE-NEXT: mtfprwz 1, 3
6063 ; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha
6064 ; PC64LE-NEXT: addi 3, 3, .LCPI121_0@toc@l
6065 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6066 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6067 ; PC64LE-NEXT: xxswapd 35, 0
6068 ; PC64LE-NEXT: xscvdpuxws 0, 3
6069 ; PC64LE-NEXT: mffprwz 3, 0
6070 ; PC64LE-NEXT: mtvsrwz 36, 3
6071 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6074 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6075 ; PC64LE9: # %bb.0: # %entry
6076 ; PC64LE9-NEXT: xscvdpuxws 0, 1
6077 ; PC64LE9-NEXT: xscvdpuxws 1, 2
6078 ; PC64LE9-NEXT: mffprwz 3, 0
6079 ; PC64LE9-NEXT: mtfprwz 0, 3
6080 ; PC64LE9-NEXT: mffprwz 3, 1
6081 ; PC64LE9-NEXT: mtfprwz 1, 3
6082 ; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha
6083 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
6084 ; PC64LE9-NEXT: xscvdpuxws 1, 3
6085 ; PC64LE9-NEXT: addi 3, 3, .LCPI121_0@toc@l
6086 ; PC64LE9-NEXT: lxv 0, 0(3)
6087 ; PC64LE9-NEXT: mffprwz 3, 1
6088 ; PC64LE9-NEXT: mtvsrwz 34, 3
6089 ; PC64LE9-NEXT: xxperm 34, 35, 0
6092 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(
6094 metadata !"fpexcept.strict") #0
6095 ret <3 x i32> %result
6098 define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64(<4 x double> %x) #0 {
6099 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6100 ; PC64LE: # %bb.0: # %entry
6101 ; PC64LE-NEXT: xxswapd 0, 34
6102 ; PC64LE-NEXT: xscvdpuxws 2, 34
6103 ; PC64LE-NEXT: xxswapd 1, 35
6104 ; PC64LE-NEXT: xscvdpuxws 0, 0
6105 ; PC64LE-NEXT: xscvdpuxws 1, 1
6106 ; PC64LE-NEXT: mffprwz 3, 2
6107 ; PC64LE-NEXT: xscvdpuxws 2, 35
6108 ; PC64LE-NEXT: mffprwz 4, 0
6109 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
6110 ; PC64LE-NEXT: mffprwz 3, 2
6111 ; PC64LE-NEXT: mtfprd 0, 4
6112 ; PC64LE-NEXT: mffprwz 4, 1
6113 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
6114 ; PC64LE-NEXT: mtfprd 1, 4
6115 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6118 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6119 ; PC64LE9: # %bb.0: # %entry
6120 ; PC64LE9-NEXT: xscvdpuxws 0, 34
6121 ; PC64LE9-NEXT: mffprwz 3, 0
6122 ; PC64LE9-NEXT: xxswapd 0, 34
6123 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6124 ; PC64LE9-NEXT: mffprwz 4, 0
6125 ; PC64LE9-NEXT: xscvdpuxws 0, 35
6126 ; PC64LE9-NEXT: rldimi 4, 3, 32, 0
6127 ; PC64LE9-NEXT: mffprwz 3, 0
6128 ; PC64LE9-NEXT: xxswapd 0, 35
6129 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6130 ; PC64LE9-NEXT: mffprwz 5, 0
6131 ; PC64LE9-NEXT: rldimi 5, 3, 32, 0
6132 ; PC64LE9-NEXT: mtvsrdd 34, 5, 4
6135 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(
6137 metadata !"fpexcept.strict") #0
6138 ret <4 x i32> %result
6141 define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64(<1 x double> %x) #0 {
6142 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6143 ; PC64LE: # %bb.0: # %entry
6144 ; PC64LE-NEXT: xscvdpuxds 0, 1
6145 ; PC64LE-NEXT: mffprd 3, 0
6148 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6149 ; PC64LE9: # %bb.0: # %entry
6150 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6151 ; PC64LE9-NEXT: mffprd 3, 0
6154 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(
6156 metadata !"fpexcept.strict") #0
6157 ret <1 x i64> %result
6160 define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64(<2 x double> %x) #0 {
6161 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6162 ; PC64LE: # %bb.0: # %entry
6163 ; PC64LE-NEXT: xvcvdpuxds 34, 34
6166 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6167 ; PC64LE9: # %bb.0: # %entry
6168 ; PC64LE9-NEXT: xvcvdpuxds 34, 34
6171 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(
6173 metadata !"fpexcept.strict") #0
6174 ret <2 x i64> %result
6177 define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64(<3 x double> %x) #0 {
6178 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6179 ; PC64LE: # %bb.0: # %entry
6180 ; PC64LE-NEXT: xscvdpuxds 0, 1
6181 ; PC64LE-NEXT: mffprd 3, 0
6182 ; PC64LE-NEXT: xscvdpuxds 0, 2
6183 ; PC64LE-NEXT: mffprd 4, 0
6184 ; PC64LE-NEXT: xscvdpuxds 0, 3
6185 ; PC64LE-NEXT: mffprd 5, 0
6188 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6189 ; PC64LE9: # %bb.0: # %entry
6190 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6191 ; PC64LE9-NEXT: mffprd 3, 0
6192 ; PC64LE9-NEXT: xscvdpuxds 0, 2
6193 ; PC64LE9-NEXT: mffprd 4, 0
6194 ; PC64LE9-NEXT: xscvdpuxds 0, 3
6195 ; PC64LE9-NEXT: mffprd 5, 0
6198 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(
6200 metadata !"fpexcept.strict") #0
6201 ret <3 x i64> %result
6204 define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64(<4 x double> %x) #0 {
6205 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6206 ; PC64LE: # %bb.0: # %entry
6207 ; PC64LE-NEXT: xvcvdpuxds 35, 35
6208 ; PC64LE-NEXT: xvcvdpuxds 34, 34
6211 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6212 ; PC64LE9: # %bb.0: # %entry
6213 ; PC64LE9-NEXT: xvcvdpuxds 35, 35
6214 ; PC64LE9-NEXT: xvcvdpuxds 34, 34
6217 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(
6219 metadata !"fpexcept.strict") #0
6220 ret <4 x i64> %result
6223 define <1 x float> @constrained_vector_fptrunc_v1f64(<1 x double> %x) #0 {
6224 ; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
6225 ; PC64LE: # %bb.0: # %entry
6226 ; PC64LE-NEXT: xsrsp 1, 1
6229 ; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
6230 ; PC64LE9: # %bb.0: # %entry
6231 ; PC64LE9-NEXT: xsrsp 1, 1
6234 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
6236 metadata !"round.dynamic",
6237 metadata !"fpexcept.strict") #1
6238 ret <1 x float> %result
6241 define <2 x float> @constrained_vector_fptrunc_v2f64(<2 x double> %x) #0 {
6242 ; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
6243 ; PC64LE: # %bb.0: # %entry
6244 ; PC64LE-NEXT: xxswapd 0, 34
6245 ; PC64LE-NEXT: xsrsp 1, 34
6246 ; PC64LE-NEXT: xsrsp 0, 0
6247 ; PC64LE-NEXT: xscvdpspn 1, 1
6248 ; PC64LE-NEXT: xscvdpspn 0, 0
6249 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6252 ; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
6253 ; PC64LE9: # %bb.0: # %entry
6254 ; PC64LE9-NEXT: xxswapd 1, 34
6255 ; PC64LE9-NEXT: xsrsp 0, 34
6256 ; PC64LE9-NEXT: xsrsp 1, 1
6257 ; PC64LE9-NEXT: xscvdpspn 0, 0
6258 ; PC64LE9-NEXT: xscvdpspn 1, 1
6259 ; PC64LE9-NEXT: xxmrghw 34, 0, 1
6262 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
6264 metadata !"round.dynamic",
6265 metadata !"fpexcept.strict") #1
6266 ret <2 x float> %result
6269 define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 {
6270 ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
6271 ; PC64LE: # %bb.0: # %entry
6272 ; PC64LE-NEXT: xsrsp 0, 1
6273 ; PC64LE-NEXT: xsrsp 1, 2
6274 ; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha
6275 ; PC64LE-NEXT: addi 3, 3, .LCPI129_0@toc@l
6276 ; PC64LE-NEXT: xscvdpspn 0, 0
6277 ; PC64LE-NEXT: xscvdpspn 1, 1
6278 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6279 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6280 ; PC64LE-NEXT: xxswapd 35, 0
6281 ; PC64LE-NEXT: xsrsp 0, 3
6282 ; PC64LE-NEXT: xscvdpspn 36, 0
6283 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6286 ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
6287 ; PC64LE9: # %bb.0: # %entry
6288 ; PC64LE9-NEXT: xsrsp 0, 1
6289 ; PC64LE9-NEXT: xsrsp 1, 2
6290 ; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha
6291 ; PC64LE9-NEXT: addi 3, 3, .LCPI129_0@toc@l
6292 ; PC64LE9-NEXT: xscvdpspn 0, 0
6293 ; PC64LE9-NEXT: xscvdpspn 1, 1
6294 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
6295 ; PC64LE9-NEXT: xsrsp 1, 3
6296 ; PC64LE9-NEXT: lxv 0, 0(3)
6297 ; PC64LE9-NEXT: xscvdpspn 34, 1
6298 ; PC64LE9-NEXT: xxperm 34, 35, 0
6301 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
6303 metadata !"round.dynamic",
6304 metadata !"fpexcept.strict") #1
6305 ret <3 x float> %result
6308 define <4 x float> @constrained_vector_fptrunc_v4f64(<4 x double> %x) #0 {
6309 ; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
6310 ; PC64LE: # %bb.0: # %entry
6311 ; PC64LE-NEXT: xxmrgld 0, 35, 34
6312 ; PC64LE-NEXT: xxmrghd 1, 35, 34
6313 ; PC64LE-NEXT: xvcvdpsp 34, 0
6314 ; PC64LE-NEXT: xvcvdpsp 35, 1
6315 ; PC64LE-NEXT: vmrgew 2, 3, 2
6318 ; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
6319 ; PC64LE9: # %bb.0: # %entry
6320 ; PC64LE9-NEXT: xxmrgld 0, 35, 34
6321 ; PC64LE9-NEXT: xvcvdpsp 36, 0
6322 ; PC64LE9-NEXT: xxmrghd 0, 35, 34
6323 ; PC64LE9-NEXT: xvcvdpsp 34, 0
6324 ; PC64LE9-NEXT: vmrgew 2, 2, 4
6327 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(
6329 metadata !"round.dynamic",
6330 metadata !"fpexcept.strict") #1
6331 ret <4 x float> %result
6334 define <1 x double> @constrained_vector_fpext_v1f32(<1 x float> %x) #0 {
6335 ; PC64LE-LABEL: constrained_vector_fpext_v1f32:
6336 ; PC64LE: # %bb.0: # %entry
6339 ; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
6340 ; PC64LE9: # %bb.0: # %entry
6343 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
6345 metadata !"fpexcept.strict") #1
6346 ret <1 x double> %result
6349 define <2 x double> @constrained_vector_fpext_v2f32(<2 x float> %x) #0 {
6350 ; PC64LE-LABEL: constrained_vector_fpext_v2f32:
6351 ; PC64LE: # %bb.0: # %entry
6352 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6353 ; PC64LE-NEXT: xxswapd 1, 34
6354 ; PC64LE-NEXT: xscvspdpn 0, 0
6355 ; PC64LE-NEXT: xscvspdpn 1, 1
6356 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6359 ; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
6360 ; PC64LE9: # %bb.0: # %entry
6361 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6362 ; PC64LE9-NEXT: xxswapd 1, 34
6363 ; PC64LE9-NEXT: xscvspdpn 0, 0
6364 ; PC64LE9-NEXT: xscvspdpn 1, 1
6365 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
6368 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
6370 metadata !"fpexcept.strict") #1
6371 ret <2 x double> %result
6374 define <3 x double> @constrained_vector_fpext_v3f32(<3 x float> %x) #0 {
6375 ; PC64LE-LABEL: constrained_vector_fpext_v3f32:
6376 ; PC64LE: # %bb.0: # %entry
6377 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
6378 ; PC64LE-NEXT: xxswapd 1, 34
6379 ; PC64LE-NEXT: xscvspdpn 3, 0
6380 ; PC64LE-NEXT: xxsldwi 4, 34, 34, 3
6381 ; PC64LE-NEXT: xscvspdpn 2, 1
6382 ; PC64LE-NEXT: xscvspdpn 1, 4
6385 ; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
6386 ; PC64LE9: # %bb.0: # %entry
6387 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6388 ; PC64LE9-NEXT: xscvspdpn 3, 0
6389 ; PC64LE9-NEXT: xxswapd 0, 34
6390 ; PC64LE9-NEXT: xscvspdpn 2, 0
6391 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6392 ; PC64LE9-NEXT: xscvspdpn 1, 0
6395 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
6397 metadata !"fpexcept.strict") #1
6398 ret <3 x double> %result
6401 define <4 x double> @constrained_vector_fpext_v4f32(<4 x float> %x) #0 {
6402 ; PC64LE-LABEL: constrained_vector_fpext_v4f32:
6403 ; PC64LE: # %bb.0: # %entry
6404 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6405 ; PC64LE-NEXT: xxswapd 1, 34
6406 ; PC64LE-NEXT: xscvspdpn 0, 0
6407 ; PC64LE-NEXT: xscvspdpn 1, 1
6408 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6409 ; PC64LE-NEXT: xscvspdpn 2, 2
6410 ; PC64LE-NEXT: xxmrghd 0, 1, 0
6411 ; PC64LE-NEXT: xscvspdpn 1, 34
6412 ; PC64LE-NEXT: xxlor 34, 0, 0
6413 ; PC64LE-NEXT: xxmrghd 35, 1, 2
6416 ; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
6417 ; PC64LE9: # %bb.0: # %entry
6418 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6419 ; PC64LE9-NEXT: xxswapd 1, 34
6420 ; PC64LE9-NEXT: xscvspdpn 0, 0
6421 ; PC64LE9-NEXT: xscvspdpn 1, 1
6422 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 1
6423 ; PC64LE9-NEXT: xscvspdpn 2, 2
6424 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
6425 ; PC64LE9-NEXT: xscvspdpn 1, 34
6426 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
6427 ; PC64LE9-NEXT: xxlor 34, 0, 0
6430 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(
6432 metadata !"fpexcept.strict") #1
6433 ret <4 x double> %result
6436 define <1 x float> @constrained_vector_ceil_v1f32(<1 x float> %x) #0 {
6437 ; PC64LE-LABEL: constrained_vector_ceil_v1f32:
6438 ; PC64LE: # %bb.0: # %entry
6439 ; PC64LE-NEXT: xsrdpip 1, 1
6442 ; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
6443 ; PC64LE9: # %bb.0: # %entry
6444 ; PC64LE9-NEXT: xsrdpip 1, 1
6447 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
6449 metadata !"fpexcept.strict") #1
6450 ret <1 x float> %ceil
6453 define <2 x double> @constrained_vector_ceil_v2f64(<2 x double> %x) #0 {
6454 ; PC64LE-LABEL: constrained_vector_ceil_v2f64:
6455 ; PC64LE: # %bb.0: # %entry
6456 ; PC64LE-NEXT: xvrdpip 34, 34
6459 ; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
6460 ; PC64LE9: # %bb.0: # %entry
6461 ; PC64LE9-NEXT: xvrdpip 34, 34
6464 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
6466 metadata !"fpexcept.strict") #1
6467 ret <2 x double> %ceil
6470 define <3 x float> @constrained_vector_ceil_v3f32(<3 x float> %x) #0 {
6471 ; PC64LE-LABEL: constrained_vector_ceil_v3f32:
6472 ; PC64LE: # %bb.0: # %entry
6473 ; PC64LE-NEXT: xxswapd 0, 34
6474 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
6475 ; PC64LE-NEXT: addis 3, 2, .LCPI137_0@toc@ha
6476 ; PC64LE-NEXT: xscvspdpn 0, 0
6477 ; PC64LE-NEXT: xscvspdpn 1, 1
6478 ; PC64LE-NEXT: addi 3, 3, .LCPI137_0@toc@l
6479 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6480 ; PC64LE-NEXT: xsrdpip 0, 0
6481 ; PC64LE-NEXT: xsrdpip 1, 1
6482 ; PC64LE-NEXT: xscvdpspn 1, 1
6483 ; PC64LE-NEXT: xscvdpspn 0, 0
6484 ; PC64LE-NEXT: xxmrghw 34, 0, 1
6485 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6486 ; PC64LE-NEXT: xxswapd 35, 0
6487 ; PC64LE-NEXT: xscvspdpn 0, 2
6488 ; PC64LE-NEXT: xsrdpip 0, 0
6489 ; PC64LE-NEXT: xscvdpspn 36, 0
6490 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6493 ; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
6494 ; PC64LE9: # %bb.0: # %entry
6495 ; PC64LE9-NEXT: xxswapd 1, 34
6496 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6497 ; PC64LE9-NEXT: addis 3, 2, .LCPI137_0@toc@ha
6498 ; PC64LE9-NEXT: addi 3, 3, .LCPI137_0@toc@l
6499 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6500 ; PC64LE9-NEXT: xscvspdpn 1, 1
6501 ; PC64LE9-NEXT: xscvspdpn 2, 2
6502 ; PC64LE9-NEXT: xscvspdpn 0, 0
6503 ; PC64LE9-NEXT: xsrdpip 1, 1
6504 ; PC64LE9-NEXT: xsrdpip 2, 2
6505 ; PC64LE9-NEXT: xsrdpip 0, 0
6506 ; PC64LE9-NEXT: xscvdpspn 2, 2
6507 ; PC64LE9-NEXT: xscvdpspn 1, 1
6508 ; PC64LE9-NEXT: xscvdpspn 34, 0
6509 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
6510 ; PC64LE9-NEXT: lxv 1, 0(3)
6511 ; PC64LE9-NEXT: xxperm 34, 35, 1
6514 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
6516 metadata !"fpexcept.strict") #1
6517 ret <3 x float> %ceil
6520 define <3 x double> @constrained_vector_ceil_v3f64(<3 x double> %x) #0 {
6521 ; PC64LE-LABEL: constrained_vector_ceil_v3f64:
6522 ; PC64LE: # %bb.0: # %entry
6523 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6524 ; PC64LE-NEXT: xsrdpip 3, 3
6525 ; PC64LE-NEXT: xvrdpip 2, 0
6526 ; PC64LE-NEXT: xxswapd 1, 2
6529 ; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
6530 ; PC64LE9: # %bb.0: # %entry
6531 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6532 ; PC64LE9-NEXT: xsrdpip 3, 3
6533 ; PC64LE9-NEXT: xvrdpip 2, 0
6534 ; PC64LE9-NEXT: xxswapd 1, 2
6537 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
6539 metadata !"fpexcept.strict") #1
6540 ret <3 x double> %ceil
6543 define <1 x float> @constrained_vector_floor_v1f32(<1 x float> %x) #0 {
6544 ; PC64LE-LABEL: constrained_vector_floor_v1f32:
6545 ; PC64LE: # %bb.0: # %entry
6546 ; PC64LE-NEXT: xsrdpim 1, 1
6549 ; PC64LE9-LABEL: constrained_vector_floor_v1f32:
6550 ; PC64LE9: # %bb.0: # %entry
6551 ; PC64LE9-NEXT: xsrdpim 1, 1
6554 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
6556 metadata !"fpexcept.strict") #1
6557 ret <1 x float> %floor
6561 define <2 x double> @constrained_vector_floor_v2f64(<2 x double> %x) #0 {
6562 ; PC64LE-LABEL: constrained_vector_floor_v2f64:
6563 ; PC64LE: # %bb.0: # %entry
6564 ; PC64LE-NEXT: xvrdpim 34, 34
6567 ; PC64LE9-LABEL: constrained_vector_floor_v2f64:
6568 ; PC64LE9: # %bb.0: # %entry
6569 ; PC64LE9-NEXT: xvrdpim 34, 34
6572 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
6574 metadata !"fpexcept.strict") #1
6575 ret <2 x double> %floor
6578 define <3 x float> @constrained_vector_floor_v3f32(<3 x float> %x) #0 {
6579 ; PC64LE-LABEL: constrained_vector_floor_v3f32:
6580 ; PC64LE: # %bb.0: # %entry
6581 ; PC64LE-NEXT: xxswapd 0, 34
6582 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
6583 ; PC64LE-NEXT: addis 3, 2, .LCPI141_0@toc@ha
6584 ; PC64LE-NEXT: xscvspdpn 0, 0
6585 ; PC64LE-NEXT: xscvspdpn 1, 1
6586 ; PC64LE-NEXT: addi 3, 3, .LCPI141_0@toc@l
6587 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6588 ; PC64LE-NEXT: xsrdpim 0, 0
6589 ; PC64LE-NEXT: xsrdpim 1, 1
6590 ; PC64LE-NEXT: xscvdpspn 1, 1
6591 ; PC64LE-NEXT: xscvdpspn 0, 0
6592 ; PC64LE-NEXT: xxmrghw 34, 0, 1
6593 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6594 ; PC64LE-NEXT: xxswapd 35, 0
6595 ; PC64LE-NEXT: xscvspdpn 0, 2
6596 ; PC64LE-NEXT: xsrdpim 0, 0
6597 ; PC64LE-NEXT: xscvdpspn 36, 0
6598 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6601 ; PC64LE9-LABEL: constrained_vector_floor_v3f32:
6602 ; PC64LE9: # %bb.0: # %entry
6603 ; PC64LE9-NEXT: xxswapd 1, 34
6604 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6605 ; PC64LE9-NEXT: addis 3, 2, .LCPI141_0@toc@ha
6606 ; PC64LE9-NEXT: addi 3, 3, .LCPI141_0@toc@l
6607 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6608 ; PC64LE9-NEXT: xscvspdpn 1, 1
6609 ; PC64LE9-NEXT: xscvspdpn 2, 2
6610 ; PC64LE9-NEXT: xscvspdpn 0, 0
6611 ; PC64LE9-NEXT: xsrdpim 1, 1
6612 ; PC64LE9-NEXT: xsrdpim 2, 2
6613 ; PC64LE9-NEXT: xsrdpim 0, 0
6614 ; PC64LE9-NEXT: xscvdpspn 2, 2
6615 ; PC64LE9-NEXT: xscvdpspn 1, 1
6616 ; PC64LE9-NEXT: xscvdpspn 34, 0
6617 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
6618 ; PC64LE9-NEXT: lxv 1, 0(3)
6619 ; PC64LE9-NEXT: xxperm 34, 35, 1
6622 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
6624 metadata !"fpexcept.strict") #1
6625 ret <3 x float> %floor
6628 define <3 x double> @constrained_vector_floor_v3f64(<3 x double> %x) #0 {
6629 ; PC64LE-LABEL: constrained_vector_floor_v3f64:
6630 ; PC64LE: # %bb.0: # %entry
6631 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6632 ; PC64LE-NEXT: xsrdpim 3, 3
6633 ; PC64LE-NEXT: xvrdpim 2, 0
6634 ; PC64LE-NEXT: xxswapd 1, 2
6637 ; PC64LE9-LABEL: constrained_vector_floor_v3f64:
6638 ; PC64LE9: # %bb.0: # %entry
6639 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6640 ; PC64LE9-NEXT: xsrdpim 3, 3
6641 ; PC64LE9-NEXT: xvrdpim 2, 0
6642 ; PC64LE9-NEXT: xxswapd 1, 2
6645 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
6647 metadata !"fpexcept.strict") #1
6648 ret <3 x double> %floor
6651 define <1 x float> @constrained_vector_round_v1f32(<1 x float> %x) #0 {
6652 ; PC64LE-LABEL: constrained_vector_round_v1f32:
6653 ; PC64LE: # %bb.0: # %entry
6654 ; PC64LE-NEXT: xsrdpi 1, 1
6657 ; PC64LE9-LABEL: constrained_vector_round_v1f32:
6658 ; PC64LE9: # %bb.0: # %entry
6659 ; PC64LE9-NEXT: xsrdpi 1, 1
6662 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
6664 metadata !"fpexcept.strict") #1
6665 ret <1 x float> %round
6668 define <2 x double> @constrained_vector_round_v2f64(<2 x double> %x) #0 {
6669 ; PC64LE-LABEL: constrained_vector_round_v2f64:
6670 ; PC64LE: # %bb.0: # %entry
6671 ; PC64LE-NEXT: xvrdpi 34, 34
6674 ; PC64LE9-LABEL: constrained_vector_round_v2f64:
6675 ; PC64LE9: # %bb.0: # %entry
6676 ; PC64LE9-NEXT: xvrdpi 34, 34
6679 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
6681 metadata !"fpexcept.strict") #1
6682 ret <2 x double> %round
6685 define <3 x float> @constrained_vector_round_v3f32(<3 x float> %x) #0 {
6686 ; PC64LE-LABEL: constrained_vector_round_v3f32:
6687 ; PC64LE: # %bb.0: # %entry
6688 ; PC64LE-NEXT: xxswapd 0, 34
6689 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
6690 ; PC64LE-NEXT: addis 3, 2, .LCPI145_0@toc@ha
6691 ; PC64LE-NEXT: xscvspdpn 0, 0
6692 ; PC64LE-NEXT: xscvspdpn 1, 1
6693 ; PC64LE-NEXT: addi 3, 3, .LCPI145_0@toc@l
6694 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6695 ; PC64LE-NEXT: xsrdpi 0, 0
6696 ; PC64LE-NEXT: xsrdpi 1, 1
6697 ; PC64LE-NEXT: xscvdpspn 1, 1
6698 ; PC64LE-NEXT: xscvdpspn 0, 0
6699 ; PC64LE-NEXT: xxmrghw 34, 0, 1
6700 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6701 ; PC64LE-NEXT: xxswapd 35, 0
6702 ; PC64LE-NEXT: xscvspdpn 0, 2
6703 ; PC64LE-NEXT: xsrdpi 0, 0
6704 ; PC64LE-NEXT: xscvdpspn 36, 0
6705 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6708 ; PC64LE9-LABEL: constrained_vector_round_v3f32:
6709 ; PC64LE9: # %bb.0: # %entry
6710 ; PC64LE9-NEXT: xxswapd 1, 34
6711 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6712 ; PC64LE9-NEXT: addis 3, 2, .LCPI145_0@toc@ha
6713 ; PC64LE9-NEXT: addi 3, 3, .LCPI145_0@toc@l
6714 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6715 ; PC64LE9-NEXT: xscvspdpn 1, 1
6716 ; PC64LE9-NEXT: xscvspdpn 2, 2
6717 ; PC64LE9-NEXT: xscvspdpn 0, 0
6718 ; PC64LE9-NEXT: xsrdpi 1, 1
6719 ; PC64LE9-NEXT: xsrdpi 2, 2
6720 ; PC64LE9-NEXT: xsrdpi 0, 0
6721 ; PC64LE9-NEXT: xscvdpspn 2, 2
6722 ; PC64LE9-NEXT: xscvdpspn 1, 1
6723 ; PC64LE9-NEXT: xscvdpspn 34, 0
6724 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
6725 ; PC64LE9-NEXT: lxv 1, 0(3)
6726 ; PC64LE9-NEXT: xxperm 34, 35, 1
6729 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
6731 metadata !"fpexcept.strict") #1
6732 ret <3 x float> %round
6736 define <3 x double> @constrained_vector_round_v3f64(<3 x double> %x) #0 {
6737 ; PC64LE-LABEL: constrained_vector_round_v3f64:
6738 ; PC64LE: # %bb.0: # %entry
6739 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6740 ; PC64LE-NEXT: xsrdpi 3, 3
6741 ; PC64LE-NEXT: xvrdpi 2, 0
6742 ; PC64LE-NEXT: xxswapd 1, 2
6745 ; PC64LE9-LABEL: constrained_vector_round_v3f64:
6746 ; PC64LE9: # %bb.0: # %entry
6747 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6748 ; PC64LE9-NEXT: xsrdpi 3, 3
6749 ; PC64LE9-NEXT: xvrdpi 2, 0
6750 ; PC64LE9-NEXT: xxswapd 1, 2
6753 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
6755 metadata !"fpexcept.strict") #1
6756 ret <3 x double> %round
6759 define <1 x float> @constrained_vector_trunc_v1f32(<1 x float> %x) #0 {
6760 ; PC64LE-LABEL: constrained_vector_trunc_v1f32:
6761 ; PC64LE: # %bb.0: # %entry
6762 ; PC64LE-NEXT: xsrdpiz 1, 1
6765 ; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
6766 ; PC64LE9: # %bb.0: # %entry
6767 ; PC64LE9-NEXT: xsrdpiz 1, 1
6770 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
6772 metadata !"fpexcept.strict") #1
6773 ret <1 x float> %trunc
6776 define <2 x double> @constrained_vector_trunc_v2f64(<2 x double> %x) #0 {
6777 ; PC64LE-LABEL: constrained_vector_trunc_v2f64:
6778 ; PC64LE: # %bb.0: # %entry
6779 ; PC64LE-NEXT: xvrdpiz 34, 34
6782 ; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
6783 ; PC64LE9: # %bb.0: # %entry
6784 ; PC64LE9-NEXT: xvrdpiz 34, 34
6787 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
6789 metadata !"fpexcept.strict") #1
6790 ret <2 x double> %trunc
6793 define <3 x float> @constrained_vector_trunc_v3f32(<3 x float> %x) #0 {
6794 ; PC64LE-LABEL: constrained_vector_trunc_v3f32:
6795 ; PC64LE: # %bb.0: # %entry
6796 ; PC64LE-NEXT: xxswapd 0, 34
6797 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
6798 ; PC64LE-NEXT: addis 3, 2, .LCPI149_0@toc@ha
6799 ; PC64LE-NEXT: xscvspdpn 0, 0
6800 ; PC64LE-NEXT: xscvspdpn 1, 1
6801 ; PC64LE-NEXT: addi 3, 3, .LCPI149_0@toc@l
6802 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6803 ; PC64LE-NEXT: xsrdpiz 0, 0
6804 ; PC64LE-NEXT: xsrdpiz 1, 1
6805 ; PC64LE-NEXT: xscvdpspn 1, 1
6806 ; PC64LE-NEXT: xscvdpspn 0, 0
6807 ; PC64LE-NEXT: xxmrghw 34, 0, 1
6808 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6809 ; PC64LE-NEXT: xxswapd 35, 0
6810 ; PC64LE-NEXT: xscvspdpn 0, 2
6811 ; PC64LE-NEXT: xsrdpiz 0, 0
6812 ; PC64LE-NEXT: xscvdpspn 36, 0
6813 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6816 ; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
6817 ; PC64LE9: # %bb.0: # %entry
6818 ; PC64LE9-NEXT: xxswapd 1, 34
6819 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6820 ; PC64LE9-NEXT: addis 3, 2, .LCPI149_0@toc@ha
6821 ; PC64LE9-NEXT: addi 3, 3, .LCPI149_0@toc@l
6822 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6823 ; PC64LE9-NEXT: xscvspdpn 1, 1
6824 ; PC64LE9-NEXT: xscvspdpn 2, 2
6825 ; PC64LE9-NEXT: xscvspdpn 0, 0
6826 ; PC64LE9-NEXT: xsrdpiz 1, 1
6827 ; PC64LE9-NEXT: xsrdpiz 2, 2
6828 ; PC64LE9-NEXT: xsrdpiz 0, 0
6829 ; PC64LE9-NEXT: xscvdpspn 2, 2
6830 ; PC64LE9-NEXT: xscvdpspn 1, 1
6831 ; PC64LE9-NEXT: xscvdpspn 34, 0
6832 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
6833 ; PC64LE9-NEXT: lxv 1, 0(3)
6834 ; PC64LE9-NEXT: xxperm 34, 35, 1
6837 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
6839 metadata !"fpexcept.strict") #1
6840 ret <3 x float> %trunc
6843 define <3 x double> @constrained_vector_trunc_v3f64(<3 x double> %x) #0 {
6844 ; PC64LE-LABEL: constrained_vector_trunc_v3f64:
6845 ; PC64LE: # %bb.0: # %entry
6846 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6847 ; PC64LE-NEXT: xsrdpiz 3, 3
6848 ; PC64LE-NEXT: xvrdpiz 2, 0
6849 ; PC64LE-NEXT: xxswapd 1, 2
6852 ; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
6853 ; PC64LE9: # %bb.0: # %entry
6854 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6855 ; PC64LE9-NEXT: xsrdpiz 3, 3
6856 ; PC64LE9-NEXT: xvrdpiz 2, 0
6857 ; PC64LE9-NEXT: xxswapd 1, 2
6860 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
6862 metadata !"fpexcept.strict") #1
6863 ret <3 x double> %trunc
6866 define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 {
6867 ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32:
6868 ; PC64LE: # %bb.0: # %entry
6869 ; PC64LE-NEXT: mtfprwa 0, 3
6870 ; PC64LE-NEXT: xscvsxddp 1, 0
6873 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32:
6874 ; PC64LE9: # %bb.0: # %entry
6875 ; PC64LE9-NEXT: mtfprwa 0, 3
6876 ; PC64LE9-NEXT: xscvsxddp 1, 0
6879 %result = call <1 x double>
6880 @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x,
6881 metadata !"round.dynamic",
6882 metadata !"fpexcept.strict") #0
6883 ret <1 x double> %result
6886 define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 {
6887 ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32:
6888 ; PC64LE: # %bb.0: # %entry
6889 ; PC64LE-NEXT: mtfprwa 0, 3
6890 ; PC64LE-NEXT: xscvsxdsp 1, 0
6893 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32:
6894 ; PC64LE9: # %bb.0: # %entry
6895 ; PC64LE9-NEXT: mtfprwa 0, 3
6896 ; PC64LE9-NEXT: xscvsxdsp 1, 0
6899 %result = call <1 x float>
6900 @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x,
6901 metadata !"round.dynamic",
6902 metadata !"fpexcept.strict") #0
6903 ret <1 x float> %result
6906 define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 {
6907 ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64:
6908 ; PC64LE: # %bb.0: # %entry
6909 ; PC64LE-NEXT: mtfprd 0, 3
6910 ; PC64LE-NEXT: xscvsxddp 1, 0
6913 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64:
6914 ; PC64LE9: # %bb.0: # %entry
6915 ; PC64LE9-NEXT: mtfprd 0, 3
6916 ; PC64LE9-NEXT: xscvsxddp 1, 0
6919 %result = call <1 x double>
6920 @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x,
6921 metadata !"round.dynamic",
6922 metadata !"fpexcept.strict") #0
6923 ret <1 x double> %result
6926 define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 {
6927 ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64:
6928 ; PC64LE: # %bb.0: # %entry
6929 ; PC64LE-NEXT: mtfprd 0, 3
6930 ; PC64LE-NEXT: xscvsxdsp 1, 0
6933 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64:
6934 ; PC64LE9: # %bb.0: # %entry
6935 ; PC64LE9-NEXT: mtfprd 0, 3
6936 ; PC64LE9-NEXT: xscvsxdsp 1, 0
6939 %result = call <1 x float>
6940 @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x,
6941 metadata !"round.dynamic",
6942 metadata !"fpexcept.strict") #0
6943 ret <1 x float> %result
6946 define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 {
6947 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16:
6948 ; PC64LE: # %bb.0: # %entry
6949 ; PC64LE-NEXT: addis 3, 2, .LCPI155_0@toc@ha
6950 ; PC64LE-NEXT: addi 3, 3, .LCPI155_0@toc@l
6951 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6952 ; PC64LE-NEXT: addis 3, 2, .LCPI155_1@toc@ha
6953 ; PC64LE-NEXT: addi 3, 3, .LCPI155_1@toc@l
6954 ; PC64LE-NEXT: xxswapd 35, 0
6955 ; PC64LE-NEXT: vperm 2, 2, 2, 3
6956 ; PC64LE-NEXT: lxvd2x 35, 0, 3
6957 ; PC64LE-NEXT: vsld 2, 2, 3
6958 ; PC64LE-NEXT: vsrad 2, 2, 3
6959 ; PC64LE-NEXT: xvcvsxddp 34, 34
6962 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16:
6963 ; PC64LE9: # %bb.0: # %entry
6964 ; PC64LE9-NEXT: addis 3, 2, .LCPI155_0@toc@ha
6965 ; PC64LE9-NEXT: addi 3, 3, .LCPI155_0@toc@l
6966 ; PC64LE9-NEXT: lxv 0, 0(3)
6967 ; PC64LE9-NEXT: xxperm 34, 34, 0
6968 ; PC64LE9-NEXT: vextsh2d 2, 2
6969 ; PC64LE9-NEXT: xvcvsxddp 34, 34
6972 %result = call <2 x double>
6973 @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x,
6974 metadata !"round.dynamic",
6975 metadata !"fpexcept.strict") #0
6976 ret <2 x double> %result
6979 define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 {
6980 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32:
6981 ; PC64LE: # %bb.0: # %entry
6982 ; PC64LE-NEXT: xxswapd 0, 34
6983 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
6984 ; PC64LE-NEXT: mffprwz 3, 0
6985 ; PC64LE-NEXT: mtfprwa 0, 3
6986 ; PC64LE-NEXT: mffprwz 3, 1
6987 ; PC64LE-NEXT: mtfprwa 1, 3
6988 ; PC64LE-NEXT: xscvsxddp 0, 0
6989 ; PC64LE-NEXT: xscvsxddp 1, 1
6990 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6993 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32:
6994 ; PC64LE9: # %bb.0: # %entry
6995 ; PC64LE9-NEXT: li 3, 0
6996 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
6997 ; PC64LE9-NEXT: mtfprwa 0, 3
6998 ; PC64LE9-NEXT: li 3, 4
6999 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7000 ; PC64LE9-NEXT: xscvsxddp 0, 0
7001 ; PC64LE9-NEXT: mtfprwa 1, 3
7002 ; PC64LE9-NEXT: xscvsxddp 1, 1
7003 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
7006 %result = call <2 x double>
7007 @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x,
7008 metadata !"round.dynamic",
7009 metadata !"fpexcept.strict") #0
7010 ret <2 x double> %result
7013 define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7014 ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7015 ; PC64LE: # %bb.0: # %entry
7016 ; PC64LE-NEXT: xxswapd 0, 34
7017 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7018 ; PC64LE-NEXT: mffprwz 3, 0
7019 ; PC64LE-NEXT: mtfprwa 0, 3
7020 ; PC64LE-NEXT: mffprwz 3, 1
7021 ; PC64LE-NEXT: mtfprwa 1, 3
7022 ; PC64LE-NEXT: xscvsxdsp 0, 0
7023 ; PC64LE-NEXT: xscvsxdsp 1, 1
7024 ; PC64LE-NEXT: xscvdpspn 0, 0
7025 ; PC64LE-NEXT: xscvdpspn 1, 1
7026 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7029 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7030 ; PC64LE9: # %bb.0: # %entry
7031 ; PC64LE9-NEXT: li 3, 0
7032 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7033 ; PC64LE9-NEXT: mtfprwa 0, 3
7034 ; PC64LE9-NEXT: li 3, 4
7035 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7036 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7037 ; PC64LE9-NEXT: mtfprwa 1, 3
7038 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7039 ; PC64LE9-NEXT: xscvdpspn 0, 0
7040 ; PC64LE9-NEXT: xscvdpspn 1, 1
7041 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7044 %result = call <2 x float>
7045 @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x,
7046 metadata !"round.dynamic",
7047 metadata !"fpexcept.strict") #0
7048 ret <2 x float> %result
7051 define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7052 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7053 ; PC64LE: # %bb.0: # %entry
7054 ; PC64LE-NEXT: xvcvsxddp 34, 34
7057 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7058 ; PC64LE9: # %bb.0: # %entry
7059 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7062 %result = call <2 x double>
7063 @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x,
7064 metadata !"round.dynamic",
7065 metadata !"fpexcept.strict") #0
7066 ret <2 x double> %result
7069 define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7070 ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7071 ; PC64LE: # %bb.0: # %entry
7072 ; PC64LE-NEXT: mfvsrd 3, 34
7073 ; PC64LE-NEXT: xxswapd 0, 34
7074 ; PC64LE-NEXT: mtfprd 1, 3
7075 ; PC64LE-NEXT: mffprd 3, 0
7076 ; PC64LE-NEXT: mtfprd 0, 3
7077 ; PC64LE-NEXT: xscvsxdsp 1, 1
7078 ; PC64LE-NEXT: xscvsxdsp 0, 0
7079 ; PC64LE-NEXT: xscvdpspn 1, 1
7080 ; PC64LE-NEXT: xscvdpspn 0, 0
7081 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7084 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7085 ; PC64LE9: # %bb.0: # %entry
7086 ; PC64LE9-NEXT: mfvsrld 3, 34
7087 ; PC64LE9-NEXT: mtfprd 0, 3
7088 ; PC64LE9-NEXT: mfvsrd 3, 34
7089 ; PC64LE9-NEXT: mtfprd 1, 3
7090 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7091 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7092 ; PC64LE9-NEXT: xscvdpspn 0, 0
7093 ; PC64LE9-NEXT: xscvdpspn 1, 1
7094 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7097 %result = call <2 x float>
7098 @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x,
7099 metadata !"round.dynamic",
7100 metadata !"fpexcept.strict") #0
7101 ret <2 x float> %result
7104 define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 {
7105 ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7106 ; PC64LE: # %bb.0: # %entry
7107 ; PC64LE-NEXT: xxswapd 0, 34
7108 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
7109 ; PC64LE-NEXT: mffprwz 3, 0
7110 ; PC64LE-NEXT: mtfprwa 0, 3
7111 ; PC64LE-NEXT: mffprwz 3, 2
7112 ; PC64LE-NEXT: xscvsxddp 1, 0
7113 ; PC64LE-NEXT: mtfprwa 0, 3
7114 ; PC64LE-NEXT: mfvsrwz 3, 34
7115 ; PC64LE-NEXT: xscvsxddp 2, 0
7116 ; PC64LE-NEXT: mtfprwa 0, 3
7117 ; PC64LE-NEXT: xscvsxddp 3, 0
7120 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7121 ; PC64LE9: # %bb.0: # %entry
7122 ; PC64LE9-NEXT: li 3, 0
7123 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7124 ; PC64LE9-NEXT: mtfprwa 0, 3
7125 ; PC64LE9-NEXT: li 3, 4
7126 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7127 ; PC64LE9-NEXT: xscvsxddp 1, 0
7128 ; PC64LE9-NEXT: mtfprwa 0, 3
7129 ; PC64LE9-NEXT: mfvsrwz 3, 34
7130 ; PC64LE9-NEXT: xscvsxddp 2, 0
7131 ; PC64LE9-NEXT: mtfprwa 0, 3
7132 ; PC64LE9-NEXT: xscvsxddp 3, 0
7135 %result = call <3 x double>
7136 @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x,
7137 metadata !"round.dynamic",
7138 metadata !"fpexcept.strict") #0
7139 ret <3 x double> %result
7142 define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 {
7143 ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7144 ; PC64LE: # %bb.0: # %entry
7145 ; PC64LE-NEXT: xxswapd 0, 34
7146 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7147 ; PC64LE-NEXT: mffprwz 3, 0
7148 ; PC64LE-NEXT: mtfprwa 0, 3
7149 ; PC64LE-NEXT: mffprwz 3, 1
7150 ; PC64LE-NEXT: mtfprwa 1, 3
7151 ; PC64LE-NEXT: xscvsxdsp 0, 0
7152 ; PC64LE-NEXT: addis 3, 2, .LCPI161_0@toc@ha
7153 ; PC64LE-NEXT: addi 3, 3, .LCPI161_0@toc@l
7154 ; PC64LE-NEXT: xscvsxdsp 1, 1
7155 ; PC64LE-NEXT: xscvdpspn 0, 0
7156 ; PC64LE-NEXT: xscvdpspn 1, 1
7157 ; PC64LE-NEXT: xxmrghw 35, 1, 0
7158 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7159 ; PC64LE-NEXT: mfvsrwz 3, 34
7160 ; PC64LE-NEXT: xxswapd 36, 0
7161 ; PC64LE-NEXT: mtfprwa 0, 3
7162 ; PC64LE-NEXT: xscvsxdsp 0, 0
7163 ; PC64LE-NEXT: xscvdpspn 34, 0
7164 ; PC64LE-NEXT: vperm 2, 2, 3, 4
7167 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7168 ; PC64LE9: # %bb.0: # %entry
7169 ; PC64LE9-NEXT: li 3, 0
7170 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7171 ; PC64LE9-NEXT: mtfprwa 0, 3
7172 ; PC64LE9-NEXT: li 3, 4
7173 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7174 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7175 ; PC64LE9-NEXT: mtfprwa 1, 3
7176 ; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha
7177 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7178 ; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l
7179 ; PC64LE9-NEXT: xscvdpspn 0, 0
7180 ; PC64LE9-NEXT: xscvdpspn 1, 1
7181 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
7182 ; PC64LE9-NEXT: lxv 0, 0(3)
7183 ; PC64LE9-NEXT: mfvsrwz 3, 34
7184 ; PC64LE9-NEXT: mtfprwa 1, 3
7185 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7186 ; PC64LE9-NEXT: xscvdpspn 34, 1
7187 ; PC64LE9-NEXT: xxperm 34, 35, 0
7190 %result = call <3 x float>
7191 @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x,
7192 metadata !"round.dynamic",
7193 metadata !"fpexcept.strict") #0
7194 ret <3 x float> %result
7197 define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 {
7198 ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7199 ; PC64LE: # %bb.0: # %entry
7200 ; PC64LE-NEXT: mtfprd 0, 3
7201 ; PC64LE-NEXT: xscvsxddp 1, 0
7202 ; PC64LE-NEXT: mtfprd 0, 4
7203 ; PC64LE-NEXT: xscvsxddp 2, 0
7204 ; PC64LE-NEXT: mtfprd 0, 5
7205 ; PC64LE-NEXT: xscvsxddp 3, 0
7208 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7209 ; PC64LE9: # %bb.0: # %entry
7210 ; PC64LE9-NEXT: mtfprd 0, 3
7211 ; PC64LE9-NEXT: xscvsxddp 1, 0
7212 ; PC64LE9-NEXT: mtfprd 0, 4
7213 ; PC64LE9-NEXT: xscvsxddp 2, 0
7214 ; PC64LE9-NEXT: mtfprd 0, 5
7215 ; PC64LE9-NEXT: xscvsxddp 3, 0
7218 %result = call <3 x double>
7219 @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x,
7220 metadata !"round.dynamic",
7221 metadata !"fpexcept.strict") #0
7222 ret <3 x double> %result
7225 define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 {
7226 ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7227 ; PC64LE: # %bb.0: # %entry
7228 ; PC64LE-NEXT: mtfprd 0, 3
7229 ; PC64LE-NEXT: mtfprd 1, 4
7230 ; PC64LE-NEXT: addis 3, 2, .LCPI163_0@toc@ha
7231 ; PC64LE-NEXT: addi 3, 3, .LCPI163_0@toc@l
7232 ; PC64LE-NEXT: xscvsxdsp 0, 0
7233 ; PC64LE-NEXT: xscvsxdsp 1, 1
7234 ; PC64LE-NEXT: xscvdpspn 0, 0
7235 ; PC64LE-NEXT: xscvdpspn 1, 1
7236 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7237 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7238 ; PC64LE-NEXT: xxswapd 35, 0
7239 ; PC64LE-NEXT: mtfprd 0, 5
7240 ; PC64LE-NEXT: xscvsxdsp 0, 0
7241 ; PC64LE-NEXT: xscvdpspn 36, 0
7242 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7245 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7246 ; PC64LE9: # %bb.0: # %entry
7247 ; PC64LE9-NEXT: mtfprd 0, 3
7248 ; PC64LE9-NEXT: mtfprd 1, 4
7249 ; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha
7250 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7251 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7252 ; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l
7253 ; PC64LE9-NEXT: xscvdpspn 0, 0
7254 ; PC64LE9-NEXT: xscvdpspn 1, 1
7255 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
7256 ; PC64LE9-NEXT: mtfprd 1, 5
7257 ; PC64LE9-NEXT: lxv 0, 0(3)
7258 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7259 ; PC64LE9-NEXT: xscvdpspn 34, 1
7260 ; PC64LE9-NEXT: xxperm 34, 35, 0
7263 %result = call <3 x float>
7264 @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x,
7265 metadata !"round.dynamic",
7266 metadata !"fpexcept.strict") #0
7267 ret <3 x float> %result
7270 define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 {
7271 ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7272 ; PC64LE: # %bb.0: # %entry
7273 ; PC64LE-NEXT: xxswapd 0, 34
7274 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7275 ; PC64LE-NEXT: mffprwz 3, 0
7276 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 3
7277 ; PC64LE-NEXT: mtfprwa 0, 3
7278 ; PC64LE-NEXT: mffprwz 3, 1
7279 ; PC64LE-NEXT: mtfprwa 1, 3
7280 ; PC64LE-NEXT: xscvsxddp 0, 0
7281 ; PC64LE-NEXT: mfvsrwz 3, 34
7282 ; PC64LE-NEXT: xscvsxddp 1, 1
7283 ; PC64LE-NEXT: xxmrghd 0, 1, 0
7284 ; PC64LE-NEXT: mtfprwa 1, 3
7285 ; PC64LE-NEXT: mffprwz 3, 2
7286 ; PC64LE-NEXT: xxlor 34, 0, 0
7287 ; PC64LE-NEXT: mtfprwa 2, 3
7288 ; PC64LE-NEXT: xscvsxddp 1, 1
7289 ; PC64LE-NEXT: xscvsxddp 2, 2
7290 ; PC64LE-NEXT: xxmrghd 35, 2, 1
7293 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7294 ; PC64LE9: # %bb.0: # %entry
7295 ; PC64LE9-NEXT: li 3, 0
7296 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7297 ; PC64LE9-NEXT: mtfprwa 0, 3
7298 ; PC64LE9-NEXT: li 3, 4
7299 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7300 ; PC64LE9-NEXT: xscvsxddp 0, 0
7301 ; PC64LE9-NEXT: mtfprwa 1, 3
7302 ; PC64LE9-NEXT: li 3, 12
7303 ; PC64LE9-NEXT: xscvsxddp 1, 1
7304 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7305 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7306 ; PC64LE9-NEXT: mtfprwa 1, 3
7307 ; PC64LE9-NEXT: mfvsrwz 3, 34
7308 ; PC64LE9-NEXT: mtfprwa 2, 3
7309 ; PC64LE9-NEXT: xscvsxddp 1, 1
7310 ; PC64LE9-NEXT: xscvsxddp 2, 2
7311 ; PC64LE9-NEXT: xxlor 34, 0, 0
7312 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
7315 %result = call <4 x double>
7316 @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x,
7317 metadata !"round.dynamic",
7318 metadata !"fpexcept.strict") #0
7319 ret <4 x double> %result
7322 define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 {
7323 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7324 ; PC64LE: # %bb.0: # %entry
7325 ; PC64LE-NEXT: vspltisw 3, 8
7326 ; PC64LE-NEXT: vmrglh 2, 2, 2
7327 ; PC64LE-NEXT: vadduwm 3, 3, 3
7328 ; PC64LE-NEXT: vslw 2, 2, 3
7329 ; PC64LE-NEXT: vsraw 2, 2, 3
7330 ; PC64LE-NEXT: xvcvsxwsp 34, 34
7333 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7334 ; PC64LE9: # %bb.0: # %entry
7335 ; PC64LE9-NEXT: vmrglh 2, 2, 2
7336 ; PC64LE9-NEXT: vextsh2w 2, 2
7337 ; PC64LE9-NEXT: xvcvsxwsp 34, 34
7340 %result = call <4 x float>
7341 @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x,
7342 metadata !"round.dynamic",
7343 metadata !"fpexcept.strict") #0
7344 ret <4 x float> %result
7347 define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 {
7348 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7349 ; PC64LE: # %bb.0: # %entry
7350 ; PC64LE-NEXT: xvcvsxwsp 34, 34
7353 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7354 ; PC64LE9: # %bb.0: # %entry
7355 ; PC64LE9-NEXT: xvcvsxwsp 34, 34
7358 %result = call <4 x float>
7359 @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x,
7360 metadata !"round.dynamic",
7361 metadata !"fpexcept.strict") #0
7362 ret <4 x float> %result
7365 define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 {
7366 ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64:
7367 ; PC64LE: # %bb.0: # %entry
7368 ; PC64LE-NEXT: xvcvsxddp 35, 35
7369 ; PC64LE-NEXT: xvcvsxddp 34, 34
7372 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64:
7373 ; PC64LE9: # %bb.0: # %entry
7374 ; PC64LE9-NEXT: xvcvsxddp 35, 35
7375 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7378 %result = call <4 x double>
7379 @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x,
7380 metadata !"round.dynamic",
7381 metadata !"fpexcept.strict") #0
7382 ret <4 x double> %result
7385 define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 {
7386 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64:
7387 ; PC64LE: # %bb.0: # %entry
7388 ; PC64LE-NEXT: mfvsrd 3, 34
7389 ; PC64LE-NEXT: xxswapd 0, 34
7390 ; PC64LE-NEXT: xxswapd 1, 35
7391 ; PC64LE-NEXT: mtfprd 2, 3
7392 ; PC64LE-NEXT: mfvsrd 3, 35
7393 ; PC64LE-NEXT: mtfprd 3, 3
7394 ; PC64LE-NEXT: mffprd 3, 0
7395 ; PC64LE-NEXT: xscvsxdsp 2, 2
7396 ; PC64LE-NEXT: mtfprd 0, 3
7397 ; PC64LE-NEXT: mffprd 3, 1
7398 ; PC64LE-NEXT: xscvsxdsp 3, 3
7399 ; PC64LE-NEXT: mtfprd 1, 3
7400 ; PC64LE-NEXT: xscvsxdsp 0, 0
7401 ; PC64LE-NEXT: xscvsxdsp 1, 1
7402 ; PC64LE-NEXT: xxmrghd 2, 3, 2
7403 ; PC64LE-NEXT: xvcvdpsp 34, 2
7404 ; PC64LE-NEXT: xxmrghd 0, 1, 0
7405 ; PC64LE-NEXT: xvcvdpsp 35, 0
7406 ; PC64LE-NEXT: vmrgew 2, 2, 3
7409 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64:
7410 ; PC64LE9: # %bb.0: # %entry
7411 ; PC64LE9-NEXT: mfvsrld 3, 34
7412 ; PC64LE9-NEXT: mtfprd 0, 3
7413 ; PC64LE9-NEXT: mfvsrld 3, 35
7414 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7415 ; PC64LE9-NEXT: mtfprd 1, 3
7416 ; PC64LE9-NEXT: mfvsrd 3, 34
7417 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7418 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7419 ; PC64LE9-NEXT: xvcvdpsp 36, 0
7420 ; PC64LE9-NEXT: mtfprd 0, 3
7421 ; PC64LE9-NEXT: mfvsrd 3, 35
7422 ; PC64LE9-NEXT: mtfprd 1, 3
7423 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7424 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7425 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7426 ; PC64LE9-NEXT: xvcvdpsp 34, 0
7427 ; PC64LE9-NEXT: vmrgew 2, 2, 4
7430 %result = call <4 x float>
7431 @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x,
7432 metadata !"round.dynamic",
7433 metadata !"fpexcept.strict") #0
7434 ret <4 x float> %result
7437 define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 {
7438 ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32:
7439 ; PC64LE: # %bb.0: # %entry
7440 ; PC64LE-NEXT: mtfprwz 0, 3
7441 ; PC64LE-NEXT: xscvuxddp 1, 0
7444 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32:
7445 ; PC64LE9: # %bb.0: # %entry
7446 ; PC64LE9-NEXT: mtfprwz 0, 3
7447 ; PC64LE9-NEXT: xscvuxddp 1, 0
7450 %result = call <1 x double>
7451 @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x,
7452 metadata !"round.dynamic",
7453 metadata !"fpexcept.strict") #0
7454 ret <1 x double> %result
7457 define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 {
7458 ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32:
7459 ; PC64LE: # %bb.0: # %entry
7460 ; PC64LE-NEXT: mtfprwz 0, 3
7461 ; PC64LE-NEXT: xscvuxdsp 1, 0
7464 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32:
7465 ; PC64LE9: # %bb.0: # %entry
7466 ; PC64LE9-NEXT: mtfprwz 0, 3
7467 ; PC64LE9-NEXT: xscvuxdsp 1, 0
7470 %result = call <1 x float>
7471 @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x,
7472 metadata !"round.dynamic",
7473 metadata !"fpexcept.strict") #0
7474 ret <1 x float> %result
7477 define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 {
7478 ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64:
7479 ; PC64LE: # %bb.0: # %entry
7480 ; PC64LE-NEXT: mtfprd 0, 3
7481 ; PC64LE-NEXT: xscvuxddp 1, 0
7484 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64:
7485 ; PC64LE9: # %bb.0: # %entry
7486 ; PC64LE9-NEXT: mtfprd 0, 3
7487 ; PC64LE9-NEXT: xscvuxddp 1, 0
7490 %result = call <1 x double>
7491 @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x,
7492 metadata !"round.dynamic",
7493 metadata !"fpexcept.strict") #0
7494 ret <1 x double> %result
7497 define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 {
7498 ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64:
7499 ; PC64LE: # %bb.0: # %entry
7500 ; PC64LE-NEXT: mtfprd 0, 3
7501 ; PC64LE-NEXT: xscvuxdsp 1, 0
7504 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64:
7505 ; PC64LE9: # %bb.0: # %entry
7506 ; PC64LE9-NEXT: mtfprd 0, 3
7507 ; PC64LE9-NEXT: xscvuxdsp 1, 0
7510 %result = call <1 x float>
7511 @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x,
7512 metadata !"round.dynamic",
7513 metadata !"fpexcept.strict") #0
7514 ret <1 x float> %result
7517 define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 {
7518 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16:
7519 ; PC64LE: # %bb.0: # %entry
7520 ; PC64LE-NEXT: addis 3, 2, .LCPI173_0@toc@ha
7521 ; PC64LE-NEXT: xxlxor 36, 36, 36
7522 ; PC64LE-NEXT: addi 3, 3, .LCPI173_0@toc@l
7523 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7524 ; PC64LE-NEXT: xxswapd 35, 0
7525 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7526 ; PC64LE-NEXT: xvcvuxddp 34, 34
7529 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16:
7530 ; PC64LE9: # %bb.0: # %entry
7531 ; PC64LE9-NEXT: addis 3, 2, .LCPI173_0@toc@ha
7532 ; PC64LE9-NEXT: xxlxor 1, 1, 1
7533 ; PC64LE9-NEXT: addi 3, 3, .LCPI173_0@toc@l
7534 ; PC64LE9-NEXT: lxv 0, 0(3)
7535 ; PC64LE9-NEXT: xxperm 34, 1, 0
7536 ; PC64LE9-NEXT: xvcvuxddp 34, 34
7539 %result = call <2 x double>
7540 @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x,
7541 metadata !"round.dynamic",
7542 metadata !"fpexcept.strict") #0
7543 ret <2 x double> %result
7546 define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 {
7547 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32:
7548 ; PC64LE: # %bb.0: # %entry
7549 ; PC64LE-NEXT: xxswapd 0, 34
7550 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7551 ; PC64LE-NEXT: mffprwz 3, 0
7552 ; PC64LE-NEXT: mtfprwz 0, 3
7553 ; PC64LE-NEXT: mffprwz 3, 1
7554 ; PC64LE-NEXT: mtfprwz 1, 3
7555 ; PC64LE-NEXT: xscvuxddp 0, 0
7556 ; PC64LE-NEXT: xscvuxddp 1, 1
7557 ; PC64LE-NEXT: xxmrghd 34, 1, 0
7560 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32:
7561 ; PC64LE9: # %bb.0: # %entry
7562 ; PC64LE9-NEXT: li 3, 0
7563 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7564 ; PC64LE9-NEXT: mtfprwz 0, 3
7565 ; PC64LE9-NEXT: li 3, 4
7566 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7567 ; PC64LE9-NEXT: xscvuxddp 0, 0
7568 ; PC64LE9-NEXT: mtfprwz 1, 3
7569 ; PC64LE9-NEXT: xscvuxddp 1, 1
7570 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
7573 %result = call <2 x double>
7574 @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x,
7575 metadata !"round.dynamic",
7576 metadata !"fpexcept.strict") #0
7577 ret <2 x double> %result
7580 define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7581 ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32:
7582 ; PC64LE: # %bb.0: # %entry
7583 ; PC64LE-NEXT: xxswapd 0, 34
7584 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7585 ; PC64LE-NEXT: mffprwz 3, 0
7586 ; PC64LE-NEXT: mtfprwz 0, 3
7587 ; PC64LE-NEXT: mffprwz 3, 1
7588 ; PC64LE-NEXT: mtfprwz 1, 3
7589 ; PC64LE-NEXT: xscvuxdsp 0, 0
7590 ; PC64LE-NEXT: xscvuxdsp 1, 1
7591 ; PC64LE-NEXT: xscvdpspn 0, 0
7592 ; PC64LE-NEXT: xscvdpspn 1, 1
7593 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7596 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32:
7597 ; PC64LE9: # %bb.0: # %entry
7598 ; PC64LE9-NEXT: li 3, 0
7599 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7600 ; PC64LE9-NEXT: mtfprwz 0, 3
7601 ; PC64LE9-NEXT: li 3, 4
7602 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7603 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7604 ; PC64LE9-NEXT: mtfprwz 1, 3
7605 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7606 ; PC64LE9-NEXT: xscvdpspn 0, 0
7607 ; PC64LE9-NEXT: xscvdpspn 1, 1
7608 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7611 %result = call <2 x float>
7612 @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x,
7613 metadata !"round.dynamic",
7614 metadata !"fpexcept.strict") #0
7615 ret <2 x float> %result
7618 define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7619 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64:
7620 ; PC64LE: # %bb.0: # %entry
7621 ; PC64LE-NEXT: xvcvuxddp 34, 34
7624 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64:
7625 ; PC64LE9: # %bb.0: # %entry
7626 ; PC64LE9-NEXT: xvcvuxddp 34, 34
7629 %result = call <2 x double>
7630 @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x,
7631 metadata !"round.dynamic",
7632 metadata !"fpexcept.strict") #0
7633 ret <2 x double> %result
7636 define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7637 ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64:
7638 ; PC64LE: # %bb.0: # %entry
7639 ; PC64LE-NEXT: mfvsrd 3, 34
7640 ; PC64LE-NEXT: xxswapd 0, 34
7641 ; PC64LE-NEXT: mtfprd 1, 3
7642 ; PC64LE-NEXT: mffprd 3, 0
7643 ; PC64LE-NEXT: mtfprd 0, 3
7644 ; PC64LE-NEXT: xscvuxdsp 1, 1
7645 ; PC64LE-NEXT: xscvuxdsp 0, 0
7646 ; PC64LE-NEXT: xscvdpspn 1, 1
7647 ; PC64LE-NEXT: xscvdpspn 0, 0
7648 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7651 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64:
7652 ; PC64LE9: # %bb.0: # %entry
7653 ; PC64LE9-NEXT: mfvsrld 3, 34
7654 ; PC64LE9-NEXT: mtfprd 0, 3
7655 ; PC64LE9-NEXT: mfvsrd 3, 34
7656 ; PC64LE9-NEXT: mtfprd 1, 3
7657 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7658 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7659 ; PC64LE9-NEXT: xscvdpspn 0, 0
7660 ; PC64LE9-NEXT: xscvdpspn 1, 1
7661 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7664 %result = call <2 x float>
7665 @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x,
7666 metadata !"round.dynamic",
7667 metadata !"fpexcept.strict") #0
7668 ret <2 x float> %result
7671 define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 {
7672 ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32:
7673 ; PC64LE: # %bb.0: # %entry
7674 ; PC64LE-NEXT: xxswapd 0, 34
7675 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
7676 ; PC64LE-NEXT: mffprwz 3, 0
7677 ; PC64LE-NEXT: mtfprwz 0, 3
7678 ; PC64LE-NEXT: mffprwz 3, 2
7679 ; PC64LE-NEXT: xscvuxddp 1, 0
7680 ; PC64LE-NEXT: mtfprwz 0, 3
7681 ; PC64LE-NEXT: mfvsrwz 3, 34
7682 ; PC64LE-NEXT: xscvuxddp 2, 0
7683 ; PC64LE-NEXT: mtfprwz 0, 3
7684 ; PC64LE-NEXT: xscvuxddp 3, 0
7687 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32:
7688 ; PC64LE9: # %bb.0: # %entry
7689 ; PC64LE9-NEXT: li 3, 0
7690 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7691 ; PC64LE9-NEXT: mtfprwz 0, 3
7692 ; PC64LE9-NEXT: li 3, 4
7693 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7694 ; PC64LE9-NEXT: xscvuxddp 1, 0
7695 ; PC64LE9-NEXT: mtfprwz 0, 3
7696 ; PC64LE9-NEXT: mfvsrwz 3, 34
7697 ; PC64LE9-NEXT: xscvuxddp 2, 0
7698 ; PC64LE9-NEXT: mtfprwz 0, 3
7699 ; PC64LE9-NEXT: xscvuxddp 3, 0
7702 %result = call <3 x double>
7703 @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x,
7704 metadata !"round.dynamic",
7705 metadata !"fpexcept.strict") #0
7706 ret <3 x double> %result
7709 define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 {
7710 ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32:
7711 ; PC64LE: # %bb.0: # %entry
7712 ; PC64LE-NEXT: xxswapd 0, 34
7713 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7714 ; PC64LE-NEXT: mffprwz 3, 0
7715 ; PC64LE-NEXT: mtfprwz 0, 3
7716 ; PC64LE-NEXT: mffprwz 3, 1
7717 ; PC64LE-NEXT: mtfprwz 1, 3
7718 ; PC64LE-NEXT: xscvuxdsp 0, 0
7719 ; PC64LE-NEXT: addis 3, 2, .LCPI179_0@toc@ha
7720 ; PC64LE-NEXT: addi 3, 3, .LCPI179_0@toc@l
7721 ; PC64LE-NEXT: xscvuxdsp 1, 1
7722 ; PC64LE-NEXT: xscvdpspn 0, 0
7723 ; PC64LE-NEXT: xscvdpspn 1, 1
7724 ; PC64LE-NEXT: xxmrghw 35, 1, 0
7725 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7726 ; PC64LE-NEXT: mfvsrwz 3, 34
7727 ; PC64LE-NEXT: xxswapd 36, 0
7728 ; PC64LE-NEXT: mtfprwz 0, 3
7729 ; PC64LE-NEXT: xscvuxdsp 0, 0
7730 ; PC64LE-NEXT: xscvdpspn 34, 0
7731 ; PC64LE-NEXT: vperm 2, 2, 3, 4
7734 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32:
7735 ; PC64LE9: # %bb.0: # %entry
7736 ; PC64LE9-NEXT: li 3, 0
7737 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7738 ; PC64LE9-NEXT: mtfprwz 0, 3
7739 ; PC64LE9-NEXT: li 3, 4
7740 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7741 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7742 ; PC64LE9-NEXT: mtfprwz 1, 3
7743 ; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha
7744 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7745 ; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l
7746 ; PC64LE9-NEXT: xscvdpspn 0, 0
7747 ; PC64LE9-NEXT: xscvdpspn 1, 1
7748 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
7749 ; PC64LE9-NEXT: lxv 0, 0(3)
7750 ; PC64LE9-NEXT: mfvsrwz 3, 34
7751 ; PC64LE9-NEXT: mtfprwz 1, 3
7752 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7753 ; PC64LE9-NEXT: xscvdpspn 34, 1
7754 ; PC64LE9-NEXT: xxperm 34, 35, 0
7757 %result = call <3 x float>
7758 @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x,
7759 metadata !"round.dynamic",
7760 metadata !"fpexcept.strict") #0
7761 ret <3 x float> %result
7764 define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 {
7765 ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64:
7766 ; PC64LE: # %bb.0: # %entry
7767 ; PC64LE-NEXT: mtfprd 0, 3
7768 ; PC64LE-NEXT: xscvuxddp 1, 0
7769 ; PC64LE-NEXT: mtfprd 0, 4
7770 ; PC64LE-NEXT: xscvuxddp 2, 0
7771 ; PC64LE-NEXT: mtfprd 0, 5
7772 ; PC64LE-NEXT: xscvuxddp 3, 0
7775 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64:
7776 ; PC64LE9: # %bb.0: # %entry
7777 ; PC64LE9-NEXT: mtfprd 0, 3
7778 ; PC64LE9-NEXT: xscvuxddp 1, 0
7779 ; PC64LE9-NEXT: mtfprd 0, 4
7780 ; PC64LE9-NEXT: xscvuxddp 2, 0
7781 ; PC64LE9-NEXT: mtfprd 0, 5
7782 ; PC64LE9-NEXT: xscvuxddp 3, 0
7785 %result = call <3 x double>
7786 @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x,
7787 metadata !"round.dynamic",
7788 metadata !"fpexcept.strict") #0
7789 ret <3 x double> %result
7792 define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 {
7793 ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64:
7794 ; PC64LE: # %bb.0: # %entry
7795 ; PC64LE-NEXT: mtfprd 0, 3
7796 ; PC64LE-NEXT: mtfprd 1, 4
7797 ; PC64LE-NEXT: addis 3, 2, .LCPI181_0@toc@ha
7798 ; PC64LE-NEXT: addi 3, 3, .LCPI181_0@toc@l
7799 ; PC64LE-NEXT: xscvuxdsp 0, 0
7800 ; PC64LE-NEXT: xscvuxdsp 1, 1
7801 ; PC64LE-NEXT: xscvdpspn 0, 0
7802 ; PC64LE-NEXT: xscvdpspn 1, 1
7803 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7804 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7805 ; PC64LE-NEXT: xxswapd 35, 0
7806 ; PC64LE-NEXT: mtfprd 0, 5
7807 ; PC64LE-NEXT: xscvuxdsp 0, 0
7808 ; PC64LE-NEXT: xscvdpspn 36, 0
7809 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7812 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64:
7813 ; PC64LE9: # %bb.0: # %entry
7814 ; PC64LE9-NEXT: mtfprd 0, 3
7815 ; PC64LE9-NEXT: mtfprd 1, 4
7816 ; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha
7817 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7818 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7819 ; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l
7820 ; PC64LE9-NEXT: xscvdpspn 0, 0
7821 ; PC64LE9-NEXT: xscvdpspn 1, 1
7822 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
7823 ; PC64LE9-NEXT: mtfprd 1, 5
7824 ; PC64LE9-NEXT: lxv 0, 0(3)
7825 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7826 ; PC64LE9-NEXT: xscvdpspn 34, 1
7827 ; PC64LE9-NEXT: xxperm 34, 35, 0
7830 %result = call <3 x float>
7831 @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x,
7832 metadata !"round.dynamic",
7833 metadata !"fpexcept.strict") #0
7834 ret <3 x float> %result
7837 define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 {
7838 ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32:
7839 ; PC64LE: # %bb.0: # %entry
7840 ; PC64LE-NEXT: xxswapd 0, 34
7841 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7842 ; PC64LE-NEXT: mffprwz 3, 0
7843 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 3
7844 ; PC64LE-NEXT: mtfprwz 0, 3
7845 ; PC64LE-NEXT: mffprwz 3, 1
7846 ; PC64LE-NEXT: mtfprwz 1, 3
7847 ; PC64LE-NEXT: xscvuxddp 0, 0
7848 ; PC64LE-NEXT: mfvsrwz 3, 34
7849 ; PC64LE-NEXT: xscvuxddp 1, 1
7850 ; PC64LE-NEXT: xxmrghd 0, 1, 0
7851 ; PC64LE-NEXT: mtfprwz 1, 3
7852 ; PC64LE-NEXT: mffprwz 3, 2
7853 ; PC64LE-NEXT: xxlor 34, 0, 0
7854 ; PC64LE-NEXT: mtfprwz 2, 3
7855 ; PC64LE-NEXT: xscvuxddp 1, 1
7856 ; PC64LE-NEXT: xscvuxddp 2, 2
7857 ; PC64LE-NEXT: xxmrghd 35, 2, 1
7860 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32:
7861 ; PC64LE9: # %bb.0: # %entry
7862 ; PC64LE9-NEXT: li 3, 0
7863 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7864 ; PC64LE9-NEXT: mtfprwz 0, 3
7865 ; PC64LE9-NEXT: li 3, 4
7866 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7867 ; PC64LE9-NEXT: xscvuxddp 0, 0
7868 ; PC64LE9-NEXT: mtfprwz 1, 3
7869 ; PC64LE9-NEXT: li 3, 12
7870 ; PC64LE9-NEXT: xscvuxddp 1, 1
7871 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7872 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7873 ; PC64LE9-NEXT: mtfprwz 1, 3
7874 ; PC64LE9-NEXT: mfvsrwz 3, 34
7875 ; PC64LE9-NEXT: mtfprwz 2, 3
7876 ; PC64LE9-NEXT: xscvuxddp 1, 1
7877 ; PC64LE9-NEXT: xscvuxddp 2, 2
7878 ; PC64LE9-NEXT: xxlor 34, 0, 0
7879 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
7882 %result = call <4 x double>
7883 @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x,
7884 metadata !"round.dynamic",
7885 metadata !"fpexcept.strict") #0
7886 ret <4 x double> %result
7889 define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 {
7890 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16:
7891 ; PC64LE: # %bb.0: # %entry
7892 ; PC64LE-NEXT: xxlxor 35, 35, 35
7893 ; PC64LE-NEXT: vmrglh 2, 3, 2
7894 ; PC64LE-NEXT: xvcvuxwsp 34, 34
7897 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16:
7898 ; PC64LE9: # %bb.0: # %entry
7899 ; PC64LE9-NEXT: xxlxor 35, 35, 35
7900 ; PC64LE9-NEXT: vmrglh 2, 3, 2
7901 ; PC64LE9-NEXT: xvcvuxwsp 34, 34
7904 %result = call <4 x float>
7905 @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x,
7906 metadata !"round.dynamic",
7907 metadata !"fpexcept.strict") #0
7908 ret <4 x float> %result
7911 define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 {
7912 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32:
7913 ; PC64LE: # %bb.0: # %entry
7914 ; PC64LE-NEXT: xvcvuxwsp 34, 34
7917 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32:
7918 ; PC64LE9: # %bb.0: # %entry
7919 ; PC64LE9-NEXT: xvcvuxwsp 34, 34
7922 %result = call <4 x float>
7923 @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x,
7924 metadata !"round.dynamic",
7925 metadata !"fpexcept.strict") #0
7926 ret <4 x float> %result
7929 define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 {
7930 ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64:
7931 ; PC64LE: # %bb.0: # %entry
7932 ; PC64LE-NEXT: xvcvuxddp 35, 35
7933 ; PC64LE-NEXT: xvcvuxddp 34, 34
7936 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64:
7937 ; PC64LE9: # %bb.0: # %entry
7938 ; PC64LE9-NEXT: xvcvuxddp 35, 35
7939 ; PC64LE9-NEXT: xvcvuxddp 34, 34
7942 %result = call <4 x double>
7943 @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x,
7944 metadata !"round.dynamic",
7945 metadata !"fpexcept.strict") #0
7946 ret <4 x double> %result
7949 define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 {
7950 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64:
7951 ; PC64LE: # %bb.0: # %entry
7952 ; PC64LE-NEXT: mfvsrd 3, 34
7953 ; PC64LE-NEXT: xxswapd 0, 34
7954 ; PC64LE-NEXT: xxswapd 1, 35
7955 ; PC64LE-NEXT: mtfprd 2, 3
7956 ; PC64LE-NEXT: mfvsrd 3, 35
7957 ; PC64LE-NEXT: mtfprd 3, 3
7958 ; PC64LE-NEXT: mffprd 3, 0
7959 ; PC64LE-NEXT: xscvuxdsp 2, 2
7960 ; PC64LE-NEXT: mtfprd 0, 3
7961 ; PC64LE-NEXT: mffprd 3, 1
7962 ; PC64LE-NEXT: xscvuxdsp 3, 3
7963 ; PC64LE-NEXT: mtfprd 1, 3
7964 ; PC64LE-NEXT: xscvuxdsp 0, 0
7965 ; PC64LE-NEXT: xscvuxdsp 1, 1
7966 ; PC64LE-NEXT: xxmrghd 2, 3, 2
7967 ; PC64LE-NEXT: xvcvdpsp 34, 2
7968 ; PC64LE-NEXT: xxmrghd 0, 1, 0
7969 ; PC64LE-NEXT: xvcvdpsp 35, 0
7970 ; PC64LE-NEXT: vmrgew 2, 2, 3
7973 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64:
7974 ; PC64LE9: # %bb.0: # %entry
7975 ; PC64LE9-NEXT: mfvsrld 3, 34
7976 ; PC64LE9-NEXT: mtfprd 0, 3
7977 ; PC64LE9-NEXT: mfvsrld 3, 35
7978 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7979 ; PC64LE9-NEXT: mtfprd 1, 3
7980 ; PC64LE9-NEXT: mfvsrd 3, 34
7981 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7982 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7983 ; PC64LE9-NEXT: xvcvdpsp 36, 0
7984 ; PC64LE9-NEXT: mtfprd 0, 3
7985 ; PC64LE9-NEXT: mfvsrd 3, 35
7986 ; PC64LE9-NEXT: mtfprd 1, 3
7987 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7988 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7989 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7990 ; PC64LE9-NEXT: xvcvdpsp 34, 0
7991 ; PC64LE9-NEXT: vmrgew 2, 2, 4
7994 %result = call <4 x float>
7995 @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x,
7996 metadata !"round.dynamic",
7997 metadata !"fpexcept.strict") #0
7998 ret <4 x float> %result
8001 define <1 x float> @constrained_vector_tan_v1f32(<1 x float> %x) #0 {
8002 ; PC64LE-LABEL: constrained_vector_tan_v1f32:
8003 ; PC64LE: # %bb.0: # %entry
8004 ; PC64LE-NEXT: mflr 0
8005 ; PC64LE-NEXT: stdu 1, -32(1)
8006 ; PC64LE-NEXT: std 0, 48(1)
8007 ; PC64LE-NEXT: bl tanf
8009 ; PC64LE-NEXT: addi 1, 1, 32
8010 ; PC64LE-NEXT: ld 0, 16(1)
8011 ; PC64LE-NEXT: mtlr 0
8014 ; PC64LE9-LABEL: constrained_vector_tan_v1f32:
8015 ; PC64LE9: # %bb.0: # %entry
8016 ; PC64LE9-NEXT: mflr 0
8017 ; PC64LE9-NEXT: stdu 1, -32(1)
8018 ; PC64LE9-NEXT: std 0, 48(1)
8019 ; PC64LE9-NEXT: bl tanf
8021 ; PC64LE9-NEXT: addi 1, 1, 32
8022 ; PC64LE9-NEXT: ld 0, 16(1)
8023 ; PC64LE9-NEXT: mtlr 0
8026 %tan = call <1 x float> @llvm.experimental.constrained.tan.v1f32(
8028 metadata !"round.dynamic",
8029 metadata !"fpexcept.strict") #1
8030 ret <1 x float> %tan
8033 define <2 x double> @constrained_vector_tan_v2f64(<2 x double> %x) #0 {
8034 ; PC64LE-LABEL: constrained_vector_tan_v2f64:
8035 ; PC64LE: # %bb.0: # %entry
8036 ; PC64LE-NEXT: mflr 0
8037 ; PC64LE-NEXT: stdu 1, -80(1)
8038 ; PC64LE-NEXT: li 3, 48
8039 ; PC64LE-NEXT: std 0, 96(1)
8040 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
8041 ; PC64LE-NEXT: li 3, 64
8042 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
8043 ; PC64LE-NEXT: vmr 31, 2
8044 ; PC64LE-NEXT: xxlor 1, 63, 63
8045 ; PC64LE-NEXT: bl tan
8047 ; PC64LE-NEXT: xxlor 62, 1, 1
8048 ; PC64LE-NEXT: xxswapd 1, 63
8049 ; PC64LE-NEXT: bl tan
8051 ; PC64LE-NEXT: li 3, 64
8052 ; PC64LE-NEXT: xxmrghd 34, 62, 1
8053 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
8054 ; PC64LE-NEXT: li 3, 48
8055 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
8056 ; PC64LE-NEXT: addi 1, 1, 80
8057 ; PC64LE-NEXT: ld 0, 16(1)
8058 ; PC64LE-NEXT: mtlr 0
8061 ; PC64LE9-LABEL: constrained_vector_tan_v2f64:
8062 ; PC64LE9: # %bb.0: # %entry
8063 ; PC64LE9-NEXT: mflr 0
8064 ; PC64LE9-NEXT: stdu 1, -64(1)
8065 ; PC64LE9-NEXT: std 0, 80(1)
8066 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
8067 ; PC64LE9-NEXT: vmr 31, 2
8068 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
8069 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
8070 ; PC64LE9-NEXT: bl tan
8072 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
8073 ; PC64LE9-NEXT: xxswapd 1, 63
8074 ; PC64LE9-NEXT: bl tan
8076 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
8077 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
8078 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
8079 ; PC64LE9-NEXT: addi 1, 1, 64
8080 ; PC64LE9-NEXT: ld 0, 16(1)
8081 ; PC64LE9-NEXT: mtlr 0
8084 %tan = call <2 x double> @llvm.experimental.constrained.tan.v2f64(
8086 metadata !"round.dynamic",
8087 metadata !"fpexcept.strict") #1
8088 ret <2 x double> %tan
8091 define <3 x float> @constrained_vector_tan_v3f32(<3 x float> %x) #0 {
8092 ; PC64LE-LABEL: constrained_vector_tan_v3f32:
8093 ; PC64LE: # %bb.0: # %entry
8094 ; PC64LE-NEXT: mflr 0
8095 ; PC64LE-NEXT: stdu 1, -80(1)
8096 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
8097 ; PC64LE-NEXT: li 3, 48
8098 ; PC64LE-NEXT: std 0, 96(1)
8099 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
8100 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
8101 ; PC64LE-NEXT: xscvspdpn 1, 0
8102 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
8103 ; PC64LE-NEXT: vmr 31, 2
8104 ; PC64LE-NEXT: bl tanf
8106 ; PC64LE-NEXT: xxswapd 0, 63
8107 ; PC64LE-NEXT: fmr 31, 1
8108 ; PC64LE-NEXT: xscvspdpn 1, 0
8109 ; PC64LE-NEXT: bl tanf
8111 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
8112 ; PC64LE-NEXT: fmr 30, 1
8113 ; PC64LE-NEXT: xscvspdpn 1, 0
8114 ; PC64LE-NEXT: bl tanf
8116 ; PC64LE-NEXT: xscvdpspn 0, 1
8117 ; PC64LE-NEXT: xscvdpspn 1, 30
8118 ; PC64LE-NEXT: addis 3, 2, .LCPI189_0@toc@ha
8119 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
8120 ; PC64LE-NEXT: xscvdpspn 36, 31
8121 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
8122 ; PC64LE-NEXT: addi 3, 3, .LCPI189_0@toc@l
8123 ; PC64LE-NEXT: xxmrghw 34, 1, 0
8124 ; PC64LE-NEXT: lxvd2x 0, 0, 3
8125 ; PC64LE-NEXT: li 3, 48
8126 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
8127 ; PC64LE-NEXT: xxswapd 35, 0
8128 ; PC64LE-NEXT: vperm 2, 4, 2, 3
8129 ; PC64LE-NEXT: addi 1, 1, 80
8130 ; PC64LE-NEXT: ld 0, 16(1)
8131 ; PC64LE-NEXT: mtlr 0
8134 ; PC64LE9-LABEL: constrained_vector_tan_v3f32:
8135 ; PC64LE9: # %bb.0: # %entry
8136 ; PC64LE9-NEXT: mflr 0
8137 ; PC64LE9-NEXT: stdu 1, -64(1)
8138 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
8139 ; PC64LE9-NEXT: std 0, 80(1)
8140 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
8141 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
8142 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
8143 ; PC64LE9-NEXT: vmr 31, 2
8144 ; PC64LE9-NEXT: xscvspdpn 1, 0
8145 ; PC64LE9-NEXT: bl tanf
8147 ; PC64LE9-NEXT: xxswapd 0, 63
8148 ; PC64LE9-NEXT: fmr 31, 1
8149 ; PC64LE9-NEXT: xscvspdpn 1, 0
8150 ; PC64LE9-NEXT: bl tanf
8152 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
8153 ; PC64LE9-NEXT: fmr 30, 1
8154 ; PC64LE9-NEXT: xscvspdpn 1, 0
8155 ; PC64LE9-NEXT: bl tanf
8157 ; PC64LE9-NEXT: xscvdpspn 0, 1
8158 ; PC64LE9-NEXT: xscvdpspn 1, 30
8159 ; PC64LE9-NEXT: addis 3, 2, .LCPI189_0@toc@ha
8160 ; PC64LE9-NEXT: xscvdpspn 34, 31
8161 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
8162 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
8163 ; PC64LE9-NEXT: addi 3, 3, .LCPI189_0@toc@l
8164 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
8165 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
8166 ; PC64LE9-NEXT: lxv 0, 0(3)
8167 ; PC64LE9-NEXT: xxperm 34, 35, 0
8168 ; PC64LE9-NEXT: addi 1, 1, 64
8169 ; PC64LE9-NEXT: ld 0, 16(1)
8170 ; PC64LE9-NEXT: mtlr 0
8173 %tan = call <3 x float> @llvm.experimental.constrained.tan.v3f32(
8175 metadata !"round.dynamic",
8176 metadata !"fpexcept.strict") #1
8177 ret <3 x float> %tan
8180 define <3 x double> @constrained_vector_tan_v3f64(<3 x double> %x) #0 {
8181 ; PC64LE-LABEL: constrained_vector_tan_v3f64:
8182 ; PC64LE: # %bb.0: # %entry
8183 ; PC64LE-NEXT: mflr 0
8184 ; PC64LE-NEXT: stdu 1, -80(1)
8185 ; PC64LE-NEXT: li 3, 48
8186 ; PC64LE-NEXT: std 0, 96(1)
8187 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
8188 ; PC64LE-NEXT: fmr 30, 2
8189 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
8190 ; PC64LE-NEXT: fmr 31, 3
8191 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
8192 ; PC64LE-NEXT: bl tan
8194 ; PC64LE-NEXT: xxlor 63, 1, 1
8195 ; PC64LE-NEXT: fmr 1, 30
8196 ; PC64LE-NEXT: bl tan
8198 ; PC64LE-NEXT: xxmrghd 63, 1, 63
8199 ; PC64LE-NEXT: fmr 1, 31
8200 ; PC64LE-NEXT: bl tan
8202 ; PC64LE-NEXT: li 3, 48
8203 ; PC64LE-NEXT: fmr 3, 1
8204 ; PC64LE-NEXT: xxswapd 1, 63
8205 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
8206 ; PC64LE-NEXT: xxlor 2, 63, 63
8207 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
8208 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
8209 ; PC64LE-NEXT: addi 1, 1, 80
8210 ; PC64LE-NEXT: ld 0, 16(1)
8211 ; PC64LE-NEXT: mtlr 0
8214 ; PC64LE9-LABEL: constrained_vector_tan_v3f64:
8215 ; PC64LE9: # %bb.0: # %entry
8216 ; PC64LE9-NEXT: mflr 0
8217 ; PC64LE9-NEXT: stdu 1, -64(1)
8218 ; PC64LE9-NEXT: std 0, 80(1)
8219 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
8220 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
8221 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
8222 ; PC64LE9-NEXT: fmr 31, 3
8223 ; PC64LE9-NEXT: fmr 30, 2
8224 ; PC64LE9-NEXT: bl tan
8226 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
8227 ; PC64LE9-NEXT: fmr 1, 30
8228 ; PC64LE9-NEXT: bl tan
8230 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
8231 ; PC64LE9-NEXT: fmr 1, 31
8232 ; PC64LE9-NEXT: bl tan
8234 ; PC64LE9-NEXT: fmr 3, 1
8235 ; PC64LE9-NEXT: xxswapd 1, 63
8236 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
8237 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
8238 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
8239 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
8240 ; PC64LE9-NEXT: addi 1, 1, 64
8241 ; PC64LE9-NEXT: ld 0, 16(1)
8242 ; PC64LE9-NEXT: mtlr 0
8245 %tan = call <3 x double> @llvm.experimental.constrained.tan.v3f64(
8247 metadata !"round.dynamic",
8248 metadata !"fpexcept.strict") #1
8249 ret <3 x double> %tan
8252 define <4 x double> @constrained_vector_tan_v4f64(<4 x double> %x) #0 {
8253 ; PC64LE-LABEL: constrained_vector_tan_v4f64:
8254 ; PC64LE: # %bb.0: # %entry
8255 ; PC64LE-NEXT: mflr 0
8256 ; PC64LE-NEXT: stdu 1, -96(1)
8257 ; PC64LE-NEXT: li 3, 48
8258 ; PC64LE-NEXT: std 0, 112(1)
8259 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
8260 ; PC64LE-NEXT: li 3, 64
8261 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
8262 ; PC64LE-NEXT: vmr 30, 2
8263 ; PC64LE-NEXT: li 3, 80
8264 ; PC64LE-NEXT: xxlor 1, 62, 62
8265 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
8266 ; PC64LE-NEXT: vmr 31, 3
8267 ; PC64LE-NEXT: bl tan
8269 ; PC64LE-NEXT: xxlor 61, 1, 1
8270 ; PC64LE-NEXT: xxswapd 1, 62
8271 ; PC64LE-NEXT: bl tan
8273 ; PC64LE-NEXT: xxmrghd 62, 61, 1
8274 ; PC64LE-NEXT: xxlor 1, 63, 63
8275 ; PC64LE-NEXT: bl tan
8277 ; PC64LE-NEXT: xxlor 61, 1, 1
8278 ; PC64LE-NEXT: xxswapd 1, 63
8279 ; PC64LE-NEXT: bl tan
8281 ; PC64LE-NEXT: li 3, 80
8282 ; PC64LE-NEXT: vmr 2, 30
8283 ; PC64LE-NEXT: xxmrghd 35, 61, 1
8284 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
8285 ; PC64LE-NEXT: li 3, 64
8286 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
8287 ; PC64LE-NEXT: li 3, 48
8288 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
8289 ; PC64LE-NEXT: addi 1, 1, 96
8290 ; PC64LE-NEXT: ld 0, 16(1)
8291 ; PC64LE-NEXT: mtlr 0
8294 ; PC64LE9-LABEL: constrained_vector_tan_v4f64:
8295 ; PC64LE9: # %bb.0: # %entry
8296 ; PC64LE9-NEXT: mflr 0
8297 ; PC64LE9-NEXT: stdu 1, -80(1)
8298 ; PC64LE9-NEXT: std 0, 96(1)
8299 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
8300 ; PC64LE9-NEXT: vmr 30, 2
8301 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
8302 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
8303 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
8304 ; PC64LE9-NEXT: vmr 31, 3
8305 ; PC64LE9-NEXT: bl tan
8307 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
8308 ; PC64LE9-NEXT: xxswapd 1, 62
8309 ; PC64LE9-NEXT: bl tan
8311 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
8312 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
8313 ; PC64LE9-NEXT: bl tan
8315 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
8316 ; PC64LE9-NEXT: xxswapd 1, 63
8317 ; PC64LE9-NEXT: bl tan
8319 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
8320 ; PC64LE9-NEXT: vmr 2, 30
8321 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
8322 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
8323 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
8324 ; PC64LE9-NEXT: addi 1, 1, 80
8325 ; PC64LE9-NEXT: ld 0, 16(1)
8326 ; PC64LE9-NEXT: mtlr 0
8329 %tan = call <4 x double> @llvm.experimental.constrained.tan.v4f64(
8331 metadata !"round.dynamic",
8332 metadata !"fpexcept.strict") #1
8333 ret <4 x double> %tan
8336 attributes #0 = { nounwind strictfp noimplicitfloat }
8337 attributes #1 = { strictfp }
8339 ; Single width declarations
8340 declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8341 declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8342 declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8343 declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8344 declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8345 declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
8346 declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8347 declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
8348 declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
8349 declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
8350 declare <2 x double> @llvm.experimental.constrained.tan.v2f64(<2 x double>, metadata, metadata)
8351 declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
8352 declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
8353 declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
8354 declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
8355 declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
8356 declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
8357 declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
8358 declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata)
8359 declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata)
8360 declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata)
8361 declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata)
8362 declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata)
8363 declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata)
8364 declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata)
8365 declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata)
8366 declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata)
8367 declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata)
8368 declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
8369 declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
8370 declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)
8371 declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)
8372 declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)
8373 declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
8374 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8375 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8376 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8377 declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8378 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8379 declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8380 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8381 declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8382 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8383 declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8385 ; Scalar width declarations
8386 declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8387 declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8388 declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8389 declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8390 declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8391 declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
8392 declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8393 declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
8394 declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
8395 declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
8396 declare <1 x float> @llvm.experimental.constrained.tan.v1f32(<1 x float>, metadata, metadata)
8397 declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
8398 declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
8399 declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
8400 declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
8401 declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
8402 declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
8403 declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
8404 declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata)
8405 declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata)
8406 declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata)
8407 declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata)
8408 declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata)
8409 declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata)
8410 declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata)
8411 declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata)
8412 declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata)
8413 declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata)
8414 declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
8415 declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
8416 declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata)
8417 declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata)
8418 declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata)
8419 declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata)
8420 declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8421 declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8422 declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8423 declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8424 declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8425 declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8426 declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8427 declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8429 ; Illegal width declarations
8430 declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8431 declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8432 declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8433 declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8434 declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8435 declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8436 declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8437 declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8438 declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8439 declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8440 declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
8441 declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
8442 declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8443 declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8444 declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
8445 declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
8446 declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
8447 declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
8448 declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
8449 declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
8450 declare <3 x float> @llvm.experimental.constrained.tan.v3f32(<3 x float>, metadata, metadata)
8451 declare <3 x double> @llvm.experimental.constrained.tan.v3f64(<3 x double>, metadata, metadata)
8452 declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
8453 declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
8454 declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
8455 declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
8456 declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
8457 declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
8458 declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
8459 declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
8460 declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
8461 declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
8462 declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
8463 declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
8464 declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
8465 declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
8466 declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata)
8467 declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata)
8468 declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata)
8469 declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata)
8470 declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata)
8471 declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata)
8472 declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata)
8473 declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata)
8474 declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata)
8475 declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata)
8476 declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata)
8477 declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata)
8478 declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
8479 declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
8480 declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata)
8481 declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata)
8482 declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata)
8483 declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata)
8484 declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata)
8485 declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata)
8486 declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata)
8487 declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata)
8488 declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8489 declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8490 declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8491 declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8492 declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8493 declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8494 declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8495 declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8497 ; Double width declarations
8498 declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8499 declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8500 declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8501 declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8502 declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8503 declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
8504 declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8505 declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
8506 declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
8507 declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
8508 declare <4 x double> @llvm.experimental.constrained.tan.v4f64(<4 x double>, metadata, metadata)
8509 declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
8510 declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
8511 declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
8512 declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
8513 declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
8514 declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
8515 declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
8516 declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata)
8517 declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata)
8518 declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)
8519 declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata)
8520 declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata)
8521 declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata)
8522 declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)
8523 declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata)
8524 declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata)
8525 declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata)
8526 declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
8527 declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
8528 declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata)
8529 declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata)
8530 declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata)
8531 declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata)
8532 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8533 declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8534 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8535 declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8536 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)
8537 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8538 declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8539 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8540 declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8541 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)