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: xxsldwi 1, 35, 35, 3
48 ; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha
49 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 3
50 ; PC64LE-NEXT: xxswapd 3, 34
51 ; PC64LE-NEXT: addi 3, 3, .LCPI2_0@toc@l
52 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
53 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
54 ; PC64LE-NEXT: lvx 4, 0, 3
55 ; PC64LE-NEXT: xscvspdpn 0, 0
56 ; PC64LE-NEXT: xscvspdpn 1, 1
57 ; PC64LE-NEXT: xscvspdpn 2, 2
58 ; PC64LE-NEXT: xscvspdpn 3, 3
59 ; PC64LE-NEXT: xsdivsp 1, 2, 1
60 ; PC64LE-NEXT: xscvspdpn 2, 4
61 ; PC64LE-NEXT: xsdivsp 0, 3, 0
62 ; PC64LE-NEXT: xscvspdpn 3, 5
63 ; PC64LE-NEXT: xsdivsp 2, 3, 2
64 ; PC64LE-NEXT: xscvdpspn 34, 1
65 ; PC64LE-NEXT: xscvdpspn 35, 0
66 ; PC64LE-NEXT: vmrghw 2, 3, 2
67 ; PC64LE-NEXT: xscvdpspn 35, 2
68 ; PC64LE-NEXT: vperm 2, 3, 2, 4
71 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
72 ; PC64LE9: # %bb.0: # %entry
73 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
74 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
75 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha
76 ; PC64LE9-NEXT: addi 3, 3, .LCPI2_0@toc@l
77 ; PC64LE9-NEXT: xxswapd 2, 34
78 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
79 ; PC64LE9-NEXT: xscvspdpn 0, 0
80 ; PC64LE9-NEXT: xscvspdpn 1, 1
81 ; PC64LE9-NEXT: xscvspdpn 2, 2
82 ; PC64LE9-NEXT: xscvspdpn 3, 3
83 ; PC64LE9-NEXT: lxv 36, 0(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 35, 1
92 ; PC64LE9-NEXT: xscvdpspn 34, 2
93 ; PC64LE9-NEXT: vmrghw 2, 3, 2
94 ; PC64LE9-NEXT: xscvdpspn 35, 0
95 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
98 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32(
101 metadata !"round.dynamic",
102 metadata !"fpexcept.strict") #1
106 define <3 x double> @constrained_vector_fdiv_v3f64(<3 x double> %x, <3 x double> %y) #0 {
107 ; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
108 ; PC64LE: # %bb.0: # %entry
109 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
110 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
111 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
112 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
113 ; PC64LE-NEXT: xxmrghd 0, 5, 4
114 ; PC64LE-NEXT: xsdivdp 3, 3, 6
115 ; PC64LE-NEXT: xxmrghd 1, 2, 1
116 ; PC64LE-NEXT: xvdivdp 2, 1, 0
117 ; PC64LE-NEXT: xxswapd 1, 2
118 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
119 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
122 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
123 ; PC64LE9: # %bb.0: # %entry
124 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
125 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
126 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
127 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
128 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
129 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
130 ; PC64LE9-NEXT: xsdivdp 3, 3, 6
131 ; PC64LE9-NEXT: xvdivdp 2, 1, 0
132 ; PC64LE9-NEXT: xxswapd 1, 2
133 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
134 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
137 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64(
140 metadata !"round.dynamic",
141 metadata !"fpexcept.strict") #1
142 ret <3 x double> %div
145 define <4 x double> @constrained_vector_fdiv_v4f64(<4 x double> %x, <4 x double> %y) #0 {
146 ; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
147 ; PC64LE: # %bb.0: # %entry
148 ; PC64LE-NEXT: xvdivdp 35, 35, 37
149 ; PC64LE-NEXT: xvdivdp 34, 34, 36
152 ; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
153 ; PC64LE9: # %bb.0: # %entry
154 ; PC64LE9-NEXT: xvdivdp 35, 35, 37
155 ; PC64LE9-NEXT: xvdivdp 34, 34, 36
158 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64(
161 metadata !"round.dynamic",
162 metadata !"fpexcept.strict") #1
163 ret <4 x double> %div
166 define <1 x float> @constrained_vector_frem_v1f32(<1 x float> %x, <1 x float> %y) #0 {
167 ; PC64LE-LABEL: constrained_vector_frem_v1f32:
168 ; PC64LE: # %bb.0: # %entry
169 ; PC64LE-NEXT: mflr 0
170 ; PC64LE-NEXT: std 0, 16(1)
171 ; PC64LE-NEXT: stdu 1, -32(1)
172 ; PC64LE-NEXT: bl fmodf
174 ; PC64LE-NEXT: addi 1, 1, 32
175 ; PC64LE-NEXT: ld 0, 16(1)
176 ; PC64LE-NEXT: mtlr 0
179 ; PC64LE9-LABEL: constrained_vector_frem_v1f32:
180 ; PC64LE9: # %bb.0: # %entry
181 ; PC64LE9-NEXT: mflr 0
182 ; PC64LE9-NEXT: std 0, 16(1)
183 ; PC64LE9-NEXT: stdu 1, -32(1)
184 ; PC64LE9-NEXT: bl fmodf
186 ; PC64LE9-NEXT: addi 1, 1, 32
187 ; PC64LE9-NEXT: ld 0, 16(1)
188 ; PC64LE9-NEXT: mtlr 0
191 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32(
194 metadata !"round.dynamic",
195 metadata !"fpexcept.strict") #1
199 define <2 x double> @constrained_vector_frem_v2f64(<2 x double> %x, <2 x double> %y) #0 {
200 ; PC64LE-LABEL: constrained_vector_frem_v2f64:
201 ; PC64LE: # %bb.0: # %entry
202 ; PC64LE-NEXT: mflr 0
203 ; PC64LE-NEXT: std 0, 16(1)
204 ; PC64LE-NEXT: stdu 1, -96(1)
205 ; PC64LE-NEXT: li 3, 48
206 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
207 ; PC64LE-NEXT: li 3, 64
208 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
209 ; PC64LE-NEXT: li 3, 80
210 ; PC64LE-NEXT: vmr 30, 2
211 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
212 ; PC64LE-NEXT: vmr 31, 3
213 ; PC64LE-NEXT: xxlor 1, 62, 62
214 ; PC64LE-NEXT: xxlor 2, 63, 63
215 ; PC64LE-NEXT: bl fmod
217 ; PC64LE-NEXT: xxlor 61, 1, 1
218 ; PC64LE-NEXT: xxswapd 1, 62
219 ; PC64LE-NEXT: xxswapd 2, 63
220 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
221 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
222 ; PC64LE-NEXT: bl fmod
224 ; PC64LE-NEXT: li 3, 80
225 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
226 ; PC64LE-NEXT: xxmrghd 34, 61, 1
227 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
228 ; PC64LE-NEXT: li 3, 64
229 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
230 ; PC64LE-NEXT: li 3, 48
231 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
232 ; PC64LE-NEXT: addi 1, 1, 96
233 ; PC64LE-NEXT: ld 0, 16(1)
234 ; PC64LE-NEXT: mtlr 0
237 ; PC64LE9-LABEL: constrained_vector_frem_v2f64:
238 ; PC64LE9: # %bb.0: # %entry
239 ; PC64LE9-NEXT: mflr 0
240 ; PC64LE9-NEXT: std 0, 16(1)
241 ; PC64LE9-NEXT: stdu 1, -80(1)
242 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
243 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
244 ; PC64LE9-NEXT: vmr 31, 3
245 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
246 ; PC64LE9-NEXT: vmr 30, 2
247 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
248 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
249 ; PC64LE9-NEXT: bl fmod
251 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
252 ; PC64LE9-NEXT: xxswapd 1, 62
253 ; PC64LE9-NEXT: xxswapd 2, 63
254 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
255 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
256 ; PC64LE9-NEXT: bl fmod
258 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
259 ; PC64LE9-NEXT: xxmrghd 34, 61, 1
260 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
261 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
262 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
263 ; PC64LE9-NEXT: addi 1, 1, 80
264 ; PC64LE9-NEXT: ld 0, 16(1)
265 ; PC64LE9-NEXT: mtlr 0
268 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64(
271 metadata !"round.dynamic",
272 metadata !"fpexcept.strict") #1
273 ret <2 x double> %rem
276 define <3 x float> @constrained_vector_frem_v3f32(<3 x float> %x, <3 x float> %y) #0 {
277 ; PC64LE-LABEL: constrained_vector_frem_v3f32:
278 ; PC64LE: # %bb.0: # %entry
279 ; PC64LE-NEXT: mflr 0
280 ; PC64LE-NEXT: std 0, 16(1)
281 ; PC64LE-NEXT: stdu 1, -96(1)
282 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
283 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
284 ; PC64LE-NEXT: li 3, 48
285 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
286 ; PC64LE-NEXT: li 3, 64
287 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
288 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
289 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
290 ; PC64LE-NEXT: xscvspdpn 1, 0
291 ; PC64LE-NEXT: xscvspdpn 2, 2
292 ; PC64LE-NEXT: vmr 31, 3
293 ; PC64LE-NEXT: vmr 30, 2
294 ; PC64LE-NEXT: bl fmodf
296 ; PC64LE-NEXT: xxswapd 0, 62
297 ; PC64LE-NEXT: xxswapd 2, 63
298 ; PC64LE-NEXT: fmr 31, 1
299 ; PC64LE-NEXT: xscvspdpn 1, 0
300 ; PC64LE-NEXT: xscvspdpn 2, 2
301 ; PC64LE-NEXT: bl fmodf
303 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
304 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
305 ; PC64LE-NEXT: fmr 30, 1
306 ; PC64LE-NEXT: xscvspdpn 1, 0
307 ; PC64LE-NEXT: xscvspdpn 2, 2
308 ; PC64LE-NEXT: bl fmodf
310 ; PC64LE-NEXT: xscvdpspn 34, 30
311 ; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha
312 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
313 ; PC64LE-NEXT: xscvdpspn 35, 1
314 ; PC64LE-NEXT: addi 3, 3, .LCPI7_0@toc@l
315 ; PC64LE-NEXT: lvx 4, 0, 3
316 ; PC64LE-NEXT: li 3, 64
317 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
318 ; PC64LE-NEXT: li 3, 48
319 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
320 ; PC64LE-NEXT: vmrghw 2, 2, 3
321 ; PC64LE-NEXT: xscvdpspn 35, 31
322 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
323 ; PC64LE-NEXT: vperm 2, 3, 2, 4
324 ; PC64LE-NEXT: addi 1, 1, 96
325 ; PC64LE-NEXT: ld 0, 16(1)
326 ; PC64LE-NEXT: mtlr 0
329 ; PC64LE9-LABEL: constrained_vector_frem_v3f32:
330 ; PC64LE9: # %bb.0: # %entry
331 ; PC64LE9-NEXT: mflr 0
332 ; PC64LE9-NEXT: std 0, 16(1)
333 ; PC64LE9-NEXT: stdu 1, -80(1)
334 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
335 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
336 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
337 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
338 ; PC64LE9-NEXT: xscvspdpn 1, 0
339 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
340 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
341 ; PC64LE9-NEXT: xscvspdpn 2, 0
342 ; PC64LE9-NEXT: vmr 31, 3
343 ; PC64LE9-NEXT: vmr 30, 2
344 ; PC64LE9-NEXT: bl fmodf
346 ; PC64LE9-NEXT: xxswapd 0, 62
347 ; PC64LE9-NEXT: fmr 31, 1
348 ; PC64LE9-NEXT: xscvspdpn 1, 0
349 ; PC64LE9-NEXT: xxswapd 0, 63
350 ; PC64LE9-NEXT: xscvspdpn 2, 0
351 ; PC64LE9-NEXT: bl fmodf
353 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
354 ; PC64LE9-NEXT: fmr 30, 1
355 ; PC64LE9-NEXT: xscvspdpn 1, 0
356 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
357 ; PC64LE9-NEXT: xscvspdpn 2, 0
358 ; PC64LE9-NEXT: bl fmodf
360 ; PC64LE9-NEXT: xscvdpspn 34, 1
361 ; PC64LE9-NEXT: xscvdpspn 35, 30
362 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha
363 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
364 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
365 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
366 ; PC64LE9-NEXT: addi 3, 3, .LCPI7_0@toc@l
367 ; PC64LE9-NEXT: lxv 36, 0(3)
368 ; PC64LE9-NEXT: vmrghw 2, 3, 2
369 ; PC64LE9-NEXT: xscvdpspn 35, 31
370 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
371 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
372 ; PC64LE9-NEXT: addi 1, 1, 80
373 ; PC64LE9-NEXT: ld 0, 16(1)
374 ; PC64LE9-NEXT: mtlr 0
377 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32(
380 metadata !"round.dynamic",
381 metadata !"fpexcept.strict") #1
385 define <3 x double> @constrained_vector_frem_v3f64(<3 x double> %x, <3 x double> %y) #0 {
386 ; PC64LE-LABEL: constrained_vector_frem_v3f64:
387 ; PC64LE: # %bb.0: # %entry
388 ; PC64LE-NEXT: mflr 0
389 ; PC64LE-NEXT: std 0, 16(1)
390 ; PC64LE-NEXT: stdu 1, -96(1)
391 ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill
392 ; PC64LE-NEXT: fmr 28, 2
393 ; PC64LE-NEXT: li 3, 48
394 ; PC64LE-NEXT: fmr 2, 4
395 ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill
396 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
397 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
398 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
399 ; PC64LE-NEXT: fmr 31, 6
400 ; PC64LE-NEXT: fmr 30, 5
401 ; PC64LE-NEXT: fmr 29, 3
402 ; PC64LE-NEXT: bl fmod
404 ; PC64LE-NEXT: xxlor 63, 1, 1
405 ; PC64LE-NEXT: fmr 1, 28
406 ; PC64LE-NEXT: fmr 2, 30
407 ; PC64LE-NEXT: bl fmod
409 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
410 ; PC64LE-NEXT: xxmrghd 63, 1, 63
411 ; PC64LE-NEXT: fmr 2, 31
412 ; PC64LE-NEXT: fmr 1, 29
413 ; PC64LE-NEXT: bl fmod
415 ; PC64LE-NEXT: xxswapd 0, 63
416 ; PC64LE-NEXT: li 3, 48
417 ; PC64LE-NEXT: xxlor 2, 63, 63
418 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
419 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
420 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
421 ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload
422 ; PC64LE-NEXT: fmr 3, 1
423 ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload
424 ; PC64LE-NEXT: fmr 1, 0
425 ; PC64LE-NEXT: addi 1, 1, 96
426 ; PC64LE-NEXT: ld 0, 16(1)
427 ; PC64LE-NEXT: mtlr 0
430 ; PC64LE9-LABEL: constrained_vector_frem_v3f64:
431 ; PC64LE9: # %bb.0: # %entry
432 ; PC64LE9-NEXT: mflr 0
433 ; PC64LE9-NEXT: std 0, 16(1)
434 ; PC64LE9-NEXT: stdu 1, -80(1)
435 ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill
436 ; PC64LE9-NEXT: fmr 28, 2
437 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
438 ; PC64LE9-NEXT: fmr 2, 4
439 ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill
440 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
441 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
442 ; PC64LE9-NEXT: fmr 31, 6
443 ; PC64LE9-NEXT: fmr 30, 5
444 ; PC64LE9-NEXT: fmr 29, 3
445 ; PC64LE9-NEXT: bl fmod
447 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
448 ; PC64LE9-NEXT: fmr 1, 28
449 ; PC64LE9-NEXT: fmr 2, 30
450 ; PC64LE9-NEXT: bl fmod
452 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
453 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
454 ; PC64LE9-NEXT: fmr 1, 29
455 ; PC64LE9-NEXT: fmr 2, 31
456 ; PC64LE9-NEXT: bl fmod
458 ; PC64LE9-NEXT: fmr 3, 1
459 ; PC64LE9-NEXT: xxswapd 1, 63
460 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
461 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
462 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
463 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
464 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
465 ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload
466 ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload
467 ; PC64LE9-NEXT: addi 1, 1, 80
468 ; PC64LE9-NEXT: ld 0, 16(1)
469 ; PC64LE9-NEXT: mtlr 0
472 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64(
475 metadata !"round.dynamic",
476 metadata !"fpexcept.strict") #1
477 ret <3 x double> %rem
480 define <4 x double> @constrained_vector_frem_v4f64(<4 x double> %x, <4 x double> %y) #0 {
481 ; PC64LE-LABEL: constrained_vector_frem_v4f64:
483 ; PC64LE-NEXT: mflr 0
484 ; PC64LE-NEXT: std 0, 16(1)
485 ; PC64LE-NEXT: stdu 1, -128(1)
486 ; PC64LE-NEXT: li 3, 48
487 ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill
488 ; PC64LE-NEXT: li 3, 64
489 ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill
490 ; PC64LE-NEXT: li 3, 80
491 ; PC64LE-NEXT: vmr 28, 2
492 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
493 ; PC64LE-NEXT: li 3, 96
494 ; PC64LE-NEXT: vmr 29, 3
495 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
496 ; PC64LE-NEXT: vmr 30, 4
497 ; PC64LE-NEXT: li 3, 112
498 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
499 ; PC64LE-NEXT: vmr 31, 5
500 ; PC64LE-NEXT: xxlor 1, 60, 60
501 ; PC64LE-NEXT: xxlor 2, 62, 62
502 ; PC64LE-NEXT: bl fmod
504 ; PC64LE-NEXT: xxlor 59, 1, 1
505 ; PC64LE-NEXT: xxswapd 1, 60
506 ; PC64LE-NEXT: xxswapd 2, 62
507 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
508 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
509 ; PC64LE-NEXT: bl fmod
511 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
512 ; PC64LE-NEXT: xxmrghd 62, 59, 1
513 ; PC64LE-NEXT: xxlor 2, 63, 63
514 ; PC64LE-NEXT: xxlor 1, 61, 61
515 ; PC64LE-NEXT: bl fmod
517 ; PC64LE-NEXT: xxlor 60, 1, 1
518 ; PC64LE-NEXT: xxswapd 1, 61
519 ; PC64LE-NEXT: xxswapd 2, 63
520 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
521 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
522 ; PC64LE-NEXT: bl fmod
524 ; PC64LE-NEXT: li 3, 112
525 ; PC64LE-NEXT: vmr 2, 30
526 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
527 ; PC64LE-NEXT: xxmrghd 35, 60, 1
528 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
529 ; PC64LE-NEXT: li 3, 96
530 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
531 ; PC64LE-NEXT: li 3, 80
532 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
533 ; PC64LE-NEXT: li 3, 64
534 ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload
535 ; PC64LE-NEXT: li 3, 48
536 ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload
537 ; PC64LE-NEXT: addi 1, 1, 128
538 ; PC64LE-NEXT: ld 0, 16(1)
539 ; PC64LE-NEXT: mtlr 0
542 ; PC64LE9-LABEL: constrained_vector_frem_v4f64:
544 ; PC64LE9-NEXT: mflr 0
545 ; PC64LE9-NEXT: std 0, 16(1)
546 ; PC64LE9-NEXT: stdu 1, -112(1)
547 ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill
548 ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill
549 ; PC64LE9-NEXT: vmr 30, 4
550 ; PC64LE9-NEXT: xscpsgndp 2, 62, 62
551 ; PC64LE9-NEXT: vmr 28, 2
552 ; PC64LE9-NEXT: xscpsgndp 1, 60, 60
553 ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill
554 ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill
555 ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill
556 ; PC64LE9-NEXT: vmr 31, 5
557 ; PC64LE9-NEXT: vmr 29, 3
558 ; PC64LE9-NEXT: bl fmod
560 ; PC64LE9-NEXT: xscpsgndp 59, 1, 1
561 ; PC64LE9-NEXT: xxswapd 1, 60
562 ; PC64LE9-NEXT: xxswapd 2, 62
563 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
564 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
565 ; PC64LE9-NEXT: bl fmod
567 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
568 ; PC64LE9-NEXT: xxmrghd 62, 59, 1
569 ; PC64LE9-NEXT: xscpsgndp 1, 61, 61
570 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
571 ; PC64LE9-NEXT: bl fmod
573 ; PC64LE9-NEXT: xscpsgndp 60, 1, 1
574 ; PC64LE9-NEXT: xxswapd 1, 61
575 ; PC64LE9-NEXT: xxswapd 2, 63
576 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
577 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
578 ; PC64LE9-NEXT: bl fmod
580 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
581 ; PC64LE9-NEXT: xxmrghd 35, 60, 1
582 ; PC64LE9-NEXT: vmr 2, 30
583 ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload
584 ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload
585 ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload
586 ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload
587 ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload
588 ; PC64LE9-NEXT: addi 1, 1, 112
589 ; PC64LE9-NEXT: ld 0, 16(1)
590 ; PC64LE9-NEXT: mtlr 0
592 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64(
595 metadata !"round.dynamic",
596 metadata !"fpexcept.strict") #1
597 ret <4 x double> %rem
600 define <1 x float> @constrained_vector_fmul_v1f32(<1 x float> %x, <1 x float> %y) #0 {
601 ; PC64LE-LABEL: constrained_vector_fmul_v1f32:
602 ; PC64LE: # %bb.0: # %entry
603 ; PC64LE-NEXT: xsmulsp 1, 1, 2
606 ; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
607 ; PC64LE9: # %bb.0: # %entry
608 ; PC64LE9-NEXT: xsmulsp 1, 1, 2
611 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
614 metadata !"round.dynamic",
615 metadata !"fpexcept.strict") #1
619 define <2 x double> @constrained_vector_fmul_v2f64(<2 x double> %x, <2 x double> %y) #0 {
620 ; PC64LE-LABEL: constrained_vector_fmul_v2f64:
621 ; PC64LE: # %bb.0: # %entry
622 ; PC64LE-NEXT: xvmuldp 34, 34, 35
625 ; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
626 ; PC64LE9: # %bb.0: # %entry
627 ; PC64LE9-NEXT: xvmuldp 34, 34, 35
630 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(
633 metadata !"round.dynamic",
634 metadata !"fpexcept.strict") #1
635 ret <2 x double> %mul
638 define <3 x float> @constrained_vector_fmul_v3f32(<3 x float> %x, <3 x float> %y) #0 {
639 ; PC64LE-LABEL: constrained_vector_fmul_v3f32:
640 ; PC64LE: # %bb.0: # %entry
641 ; PC64LE-NEXT: xxsldwi 0, 35, 35, 3
642 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
643 ; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha
644 ; PC64LE-NEXT: xxswapd 2, 35
645 ; PC64LE-NEXT: xxswapd 3, 34
646 ; PC64LE-NEXT: addi 3, 3, .LCPI12_0@toc@l
647 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
648 ; PC64LE-NEXT: lvx 4, 0, 3
649 ; PC64LE-NEXT: xscvspdpn 0, 0
650 ; PC64LE-NEXT: xscvspdpn 1, 1
651 ; PC64LE-NEXT: xscvspdpn 2, 2
652 ; PC64LE-NEXT: xscvspdpn 3, 3
653 ; PC64LE-NEXT: xscvspdpn 4, 4
654 ; PC64LE-NEXT: xsmulsp 0, 1, 0
655 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
656 ; PC64LE-NEXT: xsmulsp 2, 3, 2
657 ; PC64LE-NEXT: xscvspdpn 1, 1
658 ; PC64LE-NEXT: xscvdpspn 34, 0
659 ; PC64LE-NEXT: xscvdpspn 35, 2
660 ; PC64LE-NEXT: xsmulsp 0, 1, 4
661 ; PC64LE-NEXT: vmrghw 2, 3, 2
662 ; PC64LE-NEXT: xscvdpspn 35, 0
663 ; PC64LE-NEXT: vperm 2, 3, 2, 4
666 ; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
667 ; PC64LE9: # %bb.0: # %entry
668 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
669 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
670 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha
671 ; PC64LE9-NEXT: addi 3, 3, .LCPI12_0@toc@l
672 ; PC64LE9-NEXT: xxswapd 2, 34
673 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
674 ; PC64LE9-NEXT: xscvspdpn 0, 0
675 ; PC64LE9-NEXT: xscvspdpn 1, 1
676 ; PC64LE9-NEXT: xscvspdpn 2, 2
677 ; PC64LE9-NEXT: xscvspdpn 3, 3
678 ; PC64LE9-NEXT: lxv 36, 0(3)
679 ; PC64LE9-NEXT: xsmulsp 0, 1, 0
680 ; PC64LE9-NEXT: xxswapd 1, 35
681 ; PC64LE9-NEXT: xscvspdpn 1, 1
682 ; PC64LE9-NEXT: xsmulsp 1, 2, 1
683 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
684 ; PC64LE9-NEXT: xscvspdpn 2, 2
685 ; PC64LE9-NEXT: xsmulsp 2, 3, 2
686 ; PC64LE9-NEXT: xscvdpspn 35, 1
687 ; PC64LE9-NEXT: xscvdpspn 34, 2
688 ; PC64LE9-NEXT: vmrghw 2, 3, 2
689 ; PC64LE9-NEXT: xscvdpspn 35, 0
690 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
693 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32(
696 metadata !"round.dynamic",
697 metadata !"fpexcept.strict") #1
701 define <3 x double> @constrained_vector_fmul_v3f64(<3 x double> %x, <3 x double> %y) #0 {
702 ; PC64LE-LABEL: constrained_vector_fmul_v3f64:
703 ; PC64LE: # %bb.0: # %entry
704 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
705 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
706 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
707 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
708 ; PC64LE-NEXT: xxmrghd 0, 5, 4
709 ; PC64LE-NEXT: xsmuldp 3, 3, 6
710 ; PC64LE-NEXT: xxmrghd 1, 2, 1
711 ; PC64LE-NEXT: xvmuldp 2, 1, 0
712 ; PC64LE-NEXT: xxswapd 1, 2
713 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
714 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
717 ; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
718 ; PC64LE9: # %bb.0: # %entry
719 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
720 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
721 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
722 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
723 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
724 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
725 ; PC64LE9-NEXT: xsmuldp 3, 3, 6
726 ; PC64LE9-NEXT: xvmuldp 2, 1, 0
727 ; PC64LE9-NEXT: xxswapd 1, 2
728 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
729 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
732 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
735 metadata !"round.dynamic",
736 metadata !"fpexcept.strict") #1
737 ret <3 x double> %mul
740 define <4 x double> @constrained_vector_fmul_v4f64(<4 x double> %x, <4 x double> %y) #0 {
741 ; PC64LE-LABEL: constrained_vector_fmul_v4f64:
742 ; PC64LE: # %bb.0: # %entry
743 ; PC64LE-NEXT: xvmuldp 35, 35, 37
744 ; PC64LE-NEXT: xvmuldp 34, 34, 36
747 ; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
748 ; PC64LE9: # %bb.0: # %entry
749 ; PC64LE9-NEXT: xvmuldp 35, 35, 37
750 ; PC64LE9-NEXT: xvmuldp 34, 34, 36
753 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(
756 metadata !"round.dynamic",
757 metadata !"fpexcept.strict") #1
758 ret <4 x double> %mul
761 define <1 x float> @constrained_vector_fadd_v1f32(<1 x float> %x, <1 x float> %y) #0 {
762 ; PC64LE-LABEL: constrained_vector_fadd_v1f32:
763 ; PC64LE: # %bb.0: # %entry
764 ; PC64LE-NEXT: xsaddsp 1, 1, 2
767 ; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
768 ; PC64LE9: # %bb.0: # %entry
769 ; PC64LE9-NEXT: xsaddsp 1, 1, 2
772 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
775 metadata !"round.dynamic",
776 metadata !"fpexcept.strict") #1
780 define <2 x double> @constrained_vector_fadd_v2f64(<2 x double> %x, <2 x double> %y) #0 {
781 ; PC64LE-LABEL: constrained_vector_fadd_v2f64:
782 ; PC64LE: # %bb.0: # %entry
783 ; PC64LE-NEXT: xvadddp 34, 34, 35
786 ; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
787 ; PC64LE9: # %bb.0: # %entry
788 ; PC64LE9-NEXT: xvadddp 34, 34, 35
791 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(
794 metadata !"round.dynamic",
795 metadata !"fpexcept.strict") #1
796 ret <2 x double> %add
799 define <3 x float> @constrained_vector_fadd_v3f32(<3 x float> %x, <3 x float> %y) #0 {
800 ; PC64LE-LABEL: constrained_vector_fadd_v3f32:
801 ; PC64LE: # %bb.0: # %entry
802 ; PC64LE-NEXT: xxsldwi 0, 35, 35, 3
803 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
804 ; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha
805 ; PC64LE-NEXT: xxswapd 2, 35
806 ; PC64LE-NEXT: xxswapd 3, 34
807 ; PC64LE-NEXT: addi 3, 3, .LCPI17_0@toc@l
808 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
809 ; PC64LE-NEXT: lvx 4, 0, 3
810 ; PC64LE-NEXT: xscvspdpn 0, 0
811 ; PC64LE-NEXT: xscvspdpn 1, 1
812 ; PC64LE-NEXT: xscvspdpn 2, 2
813 ; PC64LE-NEXT: xscvspdpn 3, 3
814 ; PC64LE-NEXT: xscvspdpn 4, 4
815 ; PC64LE-NEXT: xsaddsp 0, 1, 0
816 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
817 ; PC64LE-NEXT: xsaddsp 2, 3, 2
818 ; PC64LE-NEXT: xscvspdpn 1, 1
819 ; PC64LE-NEXT: xscvdpspn 34, 0
820 ; PC64LE-NEXT: xscvdpspn 35, 2
821 ; PC64LE-NEXT: xsaddsp 0, 1, 4
822 ; PC64LE-NEXT: vmrghw 2, 3, 2
823 ; PC64LE-NEXT: xscvdpspn 35, 0
824 ; PC64LE-NEXT: vperm 2, 3, 2, 4
827 ; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
828 ; PC64LE9: # %bb.0: # %entry
829 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
830 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
831 ; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha
832 ; PC64LE9-NEXT: addi 3, 3, .LCPI17_0@toc@l
833 ; PC64LE9-NEXT: xxswapd 2, 34
834 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
835 ; PC64LE9-NEXT: xscvspdpn 0, 0
836 ; PC64LE9-NEXT: xscvspdpn 1, 1
837 ; PC64LE9-NEXT: xscvspdpn 2, 2
838 ; PC64LE9-NEXT: xscvspdpn 3, 3
839 ; PC64LE9-NEXT: lxv 36, 0(3)
840 ; PC64LE9-NEXT: xsaddsp 0, 1, 0
841 ; PC64LE9-NEXT: xxswapd 1, 35
842 ; PC64LE9-NEXT: xscvspdpn 1, 1
843 ; PC64LE9-NEXT: xsaddsp 1, 2, 1
844 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
845 ; PC64LE9-NEXT: xscvspdpn 2, 2
846 ; PC64LE9-NEXT: xsaddsp 2, 3, 2
847 ; PC64LE9-NEXT: xscvdpspn 35, 1
848 ; PC64LE9-NEXT: xscvdpspn 34, 2
849 ; PC64LE9-NEXT: vmrghw 2, 3, 2
850 ; PC64LE9-NEXT: xscvdpspn 35, 0
851 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
854 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32(
857 metadata !"round.dynamic",
858 metadata !"fpexcept.strict") #1
862 define <3 x double> @constrained_vector_fadd_v3f64(<3 x double> %x, <3 x double> %y) #0 {
863 ; PC64LE-LABEL: constrained_vector_fadd_v3f64:
864 ; PC64LE: # %bb.0: # %entry
865 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
866 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
867 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
868 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
869 ; PC64LE-NEXT: xxmrghd 0, 5, 4
870 ; PC64LE-NEXT: xsadddp 3, 3, 6
871 ; PC64LE-NEXT: xxmrghd 1, 2, 1
872 ; PC64LE-NEXT: xvadddp 2, 1, 0
873 ; PC64LE-NEXT: xxswapd 1, 2
874 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
875 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
878 ; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
879 ; PC64LE9: # %bb.0: # %entry
880 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
881 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
882 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
883 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
884 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
885 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
886 ; PC64LE9-NEXT: xsadddp 3, 3, 6
887 ; PC64LE9-NEXT: xvadddp 2, 1, 0
888 ; PC64LE9-NEXT: xxswapd 1, 2
889 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
890 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
893 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
896 metadata !"round.dynamic",
897 metadata !"fpexcept.strict") #1
898 ret <3 x double> %add
901 define <4 x double> @constrained_vector_fadd_v4f64(<4 x double> %x, <4 x double> %y) #0 {
902 ; PC64LE-LABEL: constrained_vector_fadd_v4f64:
903 ; PC64LE: # %bb.0: # %entry
904 ; PC64LE-NEXT: xvadddp 35, 35, 37
905 ; PC64LE-NEXT: xvadddp 34, 34, 36
908 ; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
909 ; PC64LE9: # %bb.0: # %entry
910 ; PC64LE9-NEXT: xvadddp 35, 35, 37
911 ; PC64LE9-NEXT: xvadddp 34, 34, 36
914 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64(
917 metadata !"round.dynamic",
918 metadata !"fpexcept.strict") #1
919 ret <4 x double> %add
922 define <1 x float> @constrained_vector_fsub_v1f32(<1 x float> %x, <1 x float> %y) #0 {
923 ; PC64LE-LABEL: constrained_vector_fsub_v1f32:
924 ; PC64LE: # %bb.0: # %entry
925 ; PC64LE-NEXT: xssubsp 1, 1, 2
928 ; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
929 ; PC64LE9: # %bb.0: # %entry
930 ; PC64LE9-NEXT: xssubsp 1, 1, 2
933 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
936 metadata !"round.dynamic",
937 metadata !"fpexcept.strict") #1
941 define <2 x double> @constrained_vector_fsub_v2f64(<2 x double> %x, <2 x double> %y) #0 {
942 ; PC64LE-LABEL: constrained_vector_fsub_v2f64:
943 ; PC64LE: # %bb.0: # %entry
944 ; PC64LE-NEXT: xvsubdp 34, 34, 35
947 ; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
948 ; PC64LE9: # %bb.0: # %entry
949 ; PC64LE9-NEXT: xvsubdp 34, 34, 35
952 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(
955 metadata !"round.dynamic",
956 metadata !"fpexcept.strict") #1
957 ret <2 x double> %sub
960 define <3 x float> @constrained_vector_fsub_v3f32(<3 x float> %x, <3 x float> %y) #0 {
961 ; PC64LE-LABEL: constrained_vector_fsub_v3f32:
962 ; PC64LE: # %bb.0: # %entry
963 ; PC64LE-NEXT: xxsldwi 0, 35, 35, 3
964 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
965 ; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha
966 ; PC64LE-NEXT: xxswapd 2, 35
967 ; PC64LE-NEXT: xxswapd 3, 34
968 ; PC64LE-NEXT: addi 3, 3, .LCPI22_0@toc@l
969 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
970 ; PC64LE-NEXT: lvx 4, 0, 3
971 ; PC64LE-NEXT: xscvspdpn 0, 0
972 ; PC64LE-NEXT: xscvspdpn 1, 1
973 ; PC64LE-NEXT: xscvspdpn 2, 2
974 ; PC64LE-NEXT: xscvspdpn 3, 3
975 ; PC64LE-NEXT: xscvspdpn 4, 4
976 ; PC64LE-NEXT: xssubsp 0, 1, 0
977 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
978 ; PC64LE-NEXT: xssubsp 2, 3, 2
979 ; PC64LE-NEXT: xscvspdpn 1, 1
980 ; PC64LE-NEXT: xscvdpspn 34, 0
981 ; PC64LE-NEXT: xscvdpspn 35, 2
982 ; PC64LE-NEXT: xssubsp 0, 1, 4
983 ; PC64LE-NEXT: vmrghw 2, 3, 2
984 ; PC64LE-NEXT: xscvdpspn 35, 0
985 ; PC64LE-NEXT: vperm 2, 3, 2, 4
988 ; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
989 ; PC64LE9: # %bb.0: # %entry
990 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
991 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
992 ; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha
993 ; PC64LE9-NEXT: addi 3, 3, .LCPI22_0@toc@l
994 ; PC64LE9-NEXT: xxswapd 2, 34
995 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
996 ; PC64LE9-NEXT: xscvspdpn 0, 0
997 ; PC64LE9-NEXT: xscvspdpn 1, 1
998 ; PC64LE9-NEXT: xscvspdpn 2, 2
999 ; PC64LE9-NEXT: xscvspdpn 3, 3
1000 ; PC64LE9-NEXT: lxv 36, 0(3)
1001 ; PC64LE9-NEXT: xssubsp 0, 1, 0
1002 ; PC64LE9-NEXT: xxswapd 1, 35
1003 ; PC64LE9-NEXT: xscvspdpn 1, 1
1004 ; PC64LE9-NEXT: xssubsp 1, 2, 1
1005 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
1006 ; PC64LE9-NEXT: xscvspdpn 2, 2
1007 ; PC64LE9-NEXT: xssubsp 2, 3, 2
1008 ; PC64LE9-NEXT: xscvdpspn 35, 1
1009 ; PC64LE9-NEXT: xscvdpspn 34, 2
1010 ; PC64LE9-NEXT: vmrghw 2, 3, 2
1011 ; PC64LE9-NEXT: xscvdpspn 35, 0
1012 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
1015 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(
1018 metadata !"round.dynamic",
1019 metadata !"fpexcept.strict") #1
1020 ret <3 x float> %sub
1023 define <3 x double> @constrained_vector_fsub_v3f64(<3 x double> %x, <3 x double> %y) #0 {
1024 ; PC64LE-LABEL: constrained_vector_fsub_v3f64:
1025 ; PC64LE: # %bb.0: # %entry
1026 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1027 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
1028 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
1029 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
1030 ; PC64LE-NEXT: xxmrghd 0, 5, 4
1031 ; PC64LE-NEXT: xssubdp 3, 3, 6
1032 ; PC64LE-NEXT: xxmrghd 1, 2, 1
1033 ; PC64LE-NEXT: xvsubdp 2, 1, 0
1034 ; PC64LE-NEXT: xxswapd 1, 2
1035 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1036 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1039 ; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
1040 ; PC64LE9: # %bb.0: # %entry
1041 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
1042 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
1043 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
1044 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1045 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
1046 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
1047 ; PC64LE9-NEXT: xssubdp 3, 3, 6
1048 ; PC64LE9-NEXT: xvsubdp 2, 1, 0
1049 ; PC64LE9-NEXT: xxswapd 1, 2
1050 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1051 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1054 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
1057 metadata !"round.dynamic",
1058 metadata !"fpexcept.strict") #1
1059 ret <3 x double> %sub
1062 define <4 x double> @constrained_vector_fsub_v4f64(<4 x double> %x, <4 x double> %y) #0 {
1063 ; PC64LE-LABEL: constrained_vector_fsub_v4f64:
1064 ; PC64LE: # %bb.0: # %entry
1065 ; PC64LE-NEXT: xvsubdp 35, 35, 37
1066 ; PC64LE-NEXT: xvsubdp 34, 34, 36
1069 ; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
1070 ; PC64LE9: # %bb.0: # %entry
1071 ; PC64LE9-NEXT: xvsubdp 35, 35, 37
1072 ; PC64LE9-NEXT: xvsubdp 34, 34, 36
1075 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(
1078 metadata !"round.dynamic",
1079 metadata !"fpexcept.strict") #1
1080 ret <4 x double> %sub
1083 define <1 x float> @constrained_vector_sqrt_v1f32(<1 x float> %x) #0 {
1084 ; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
1085 ; PC64LE: # %bb.0: # %entry
1086 ; PC64LE-NEXT: xssqrtsp 1, 1
1089 ; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
1090 ; PC64LE9: # %bb.0: # %entry
1091 ; PC64LE9-NEXT: xssqrtsp 1, 1
1094 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
1096 metadata !"round.dynamic",
1097 metadata !"fpexcept.strict") #1
1098 ret <1 x float> %sqrt
1101 define <2 x double> @constrained_vector_sqrt_v2f64(<2 x double> %x) #0 {
1102 ; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
1103 ; PC64LE: # %bb.0: # %entry
1104 ; PC64LE-NEXT: xvsqrtdp 34, 34
1107 ; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
1108 ; PC64LE9: # %bb.0: # %entry
1109 ; PC64LE9-NEXT: xvsqrtdp 34, 34
1112 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
1114 metadata !"round.dynamic",
1115 metadata !"fpexcept.strict") #1
1116 ret <2 x double> %sqrt
1119 define <3 x float> @constrained_vector_sqrt_v3f32(<3 x float> %x) #0 {
1120 ; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
1121 ; PC64LE: # %bb.0: # %entry
1122 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
1123 ; PC64LE-NEXT: xxswapd 1, 34
1124 ; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1125 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
1126 ; PC64LE-NEXT: addi 3, 3, .LCPI27_0@toc@l
1127 ; PC64LE-NEXT: lvx 4, 0, 3
1128 ; PC64LE-NEXT: xscvspdpn 0, 0
1129 ; PC64LE-NEXT: xscvspdpn 1, 1
1130 ; PC64LE-NEXT: xscvspdpn 2, 2
1131 ; PC64LE-NEXT: xssqrtsp 0, 0
1132 ; PC64LE-NEXT: xssqrtsp 1, 1
1133 ; PC64LE-NEXT: xssqrtsp 2, 2
1134 ; PC64LE-NEXT: xscvdpspn 34, 0
1135 ; PC64LE-NEXT: xscvdpspn 35, 1
1136 ; PC64LE-NEXT: vmrghw 2, 3, 2
1137 ; PC64LE-NEXT: xscvdpspn 35, 2
1138 ; PC64LE-NEXT: vperm 2, 3, 2, 4
1141 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
1142 ; PC64LE9: # %bb.0: # %entry
1143 ; PC64LE9-NEXT: xxswapd 1, 34
1144 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
1145 ; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1146 ; PC64LE9-NEXT: addi 3, 3, .LCPI27_0@toc@l
1147 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1148 ; PC64LE9-NEXT: xscvspdpn 1, 1
1149 ; PC64LE9-NEXT: xscvspdpn 2, 2
1150 ; PC64LE9-NEXT: xscvspdpn 0, 0
1151 ; PC64LE9-NEXT: xssqrtsp 1, 1
1152 ; PC64LE9-NEXT: xssqrtsp 2, 2
1153 ; PC64LE9-NEXT: xssqrtsp 0, 0
1154 ; PC64LE9-NEXT: xscvdpspn 34, 2
1155 ; PC64LE9-NEXT: xscvdpspn 35, 1
1156 ; PC64LE9-NEXT: xscvdpspn 36, 0
1157 ; PC64LE9-NEXT: vmrghw 2, 3, 2
1158 ; PC64LE9-NEXT: lxv 35, 0(3)
1159 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
1162 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
1164 metadata !"round.dynamic",
1165 metadata !"fpexcept.strict") #1
1166 ret <3 x float> %sqrt
1169 define <3 x double> @constrained_vector_sqrt_v3f64(<3 x double> %x) #0 {
1170 ; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
1171 ; PC64LE: # %bb.0: # %entry
1172 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
1173 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1174 ; PC64LE-NEXT: xxmrghd 0, 2, 1
1175 ; PC64LE-NEXT: xssqrtdp 3, 3
1176 ; PC64LE-NEXT: xvsqrtdp 2, 0
1177 ; PC64LE-NEXT: xxswapd 1, 2
1178 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1179 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1182 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
1183 ; PC64LE9: # %bb.0: # %entry
1184 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
1185 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1186 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
1187 ; PC64LE9-NEXT: xssqrtdp 3, 3
1188 ; PC64LE9-NEXT: xvsqrtdp 2, 0
1189 ; PC64LE9-NEXT: xxswapd 1, 2
1190 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1191 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1194 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
1196 metadata !"round.dynamic",
1197 metadata !"fpexcept.strict") #1
1198 ret <3 x double> %sqrt
1201 define <4 x double> @constrained_vector_sqrt_v4f64(<4 x double> %x) #0 {
1202 ; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
1203 ; PC64LE: # %bb.0: # %entry
1204 ; PC64LE-NEXT: xvsqrtdp 35, 35
1205 ; PC64LE-NEXT: xvsqrtdp 34, 34
1208 ; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
1209 ; PC64LE9: # %bb.0: # %entry
1210 ; PC64LE9-NEXT: xvsqrtdp 35, 35
1211 ; PC64LE9-NEXT: xvsqrtdp 34, 34
1214 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(
1216 metadata !"round.dynamic",
1217 metadata !"fpexcept.strict") #1
1218 ret <4 x double> %sqrt
1221 define <1 x float> @constrained_vector_pow_v1f32(<1 x float> %x, <1 x float> %y) #0 {
1222 ; PC64LE-LABEL: constrained_vector_pow_v1f32:
1223 ; PC64LE: # %bb.0: # %entry
1224 ; PC64LE-NEXT: mflr 0
1225 ; PC64LE-NEXT: std 0, 16(1)
1226 ; PC64LE-NEXT: stdu 1, -32(1)
1227 ; PC64LE-NEXT: bl powf
1229 ; PC64LE-NEXT: addi 1, 1, 32
1230 ; PC64LE-NEXT: ld 0, 16(1)
1231 ; PC64LE-NEXT: mtlr 0
1234 ; PC64LE9-LABEL: constrained_vector_pow_v1f32:
1235 ; PC64LE9: # %bb.0: # %entry
1236 ; PC64LE9-NEXT: mflr 0
1237 ; PC64LE9-NEXT: std 0, 16(1)
1238 ; PC64LE9-NEXT: stdu 1, -32(1)
1239 ; PC64LE9-NEXT: bl powf
1241 ; PC64LE9-NEXT: addi 1, 1, 32
1242 ; PC64LE9-NEXT: ld 0, 16(1)
1243 ; PC64LE9-NEXT: mtlr 0
1246 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
1249 metadata !"round.dynamic",
1250 metadata !"fpexcept.strict") #1
1251 ret <1 x float> %pow
1254 define <2 x double> @constrained_vector_pow_v2f64(<2 x double> %x, <2 x double> %y) #0 {
1255 ; PC64LE-LABEL: constrained_vector_pow_v2f64:
1256 ; PC64LE: # %bb.0: # %entry
1257 ; PC64LE-NEXT: mflr 0
1258 ; PC64LE-NEXT: std 0, 16(1)
1259 ; PC64LE-NEXT: stdu 1, -96(1)
1260 ; PC64LE-NEXT: li 3, 48
1261 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1262 ; PC64LE-NEXT: li 3, 64
1263 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1264 ; PC64LE-NEXT: li 3, 80
1265 ; PC64LE-NEXT: vmr 30, 2
1266 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1267 ; PC64LE-NEXT: vmr 31, 3
1268 ; PC64LE-NEXT: xxlor 1, 62, 62
1269 ; PC64LE-NEXT: xxlor 2, 63, 63
1270 ; PC64LE-NEXT: bl pow
1272 ; PC64LE-NEXT: xxlor 61, 1, 1
1273 ; PC64LE-NEXT: xxswapd 1, 62
1274 ; PC64LE-NEXT: xxswapd 2, 63
1275 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1276 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1277 ; PC64LE-NEXT: bl pow
1279 ; PC64LE-NEXT: li 3, 80
1280 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1281 ; PC64LE-NEXT: xxmrghd 34, 61, 1
1282 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1283 ; PC64LE-NEXT: li 3, 64
1284 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1285 ; PC64LE-NEXT: li 3, 48
1286 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
1287 ; PC64LE-NEXT: addi 1, 1, 96
1288 ; PC64LE-NEXT: ld 0, 16(1)
1289 ; PC64LE-NEXT: mtlr 0
1292 ; PC64LE9-LABEL: constrained_vector_pow_v2f64:
1293 ; PC64LE9: # %bb.0: # %entry
1294 ; PC64LE9-NEXT: mflr 0
1295 ; PC64LE9-NEXT: std 0, 16(1)
1296 ; PC64LE9-NEXT: stdu 1, -80(1)
1297 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
1298 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
1299 ; PC64LE9-NEXT: vmr 31, 3
1300 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1301 ; PC64LE9-NEXT: vmr 30, 2
1302 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
1303 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
1304 ; PC64LE9-NEXT: bl pow
1306 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
1307 ; PC64LE9-NEXT: xxswapd 1, 62
1308 ; PC64LE9-NEXT: xxswapd 2, 63
1309 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1310 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1311 ; PC64LE9-NEXT: bl pow
1313 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1314 ; PC64LE9-NEXT: xxmrghd 34, 61, 1
1315 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
1316 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
1317 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
1318 ; PC64LE9-NEXT: addi 1, 1, 80
1319 ; PC64LE9-NEXT: ld 0, 16(1)
1320 ; PC64LE9-NEXT: mtlr 0
1323 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64(
1326 metadata !"round.dynamic",
1327 metadata !"fpexcept.strict") #1
1328 ret <2 x double> %pow
1331 define <3 x float> @constrained_vector_pow_v3f32(<3 x float> %x, <3 x float> %y) #0 {
1332 ; PC64LE-LABEL: constrained_vector_pow_v3f32:
1333 ; PC64LE: # %bb.0: # %entry
1334 ; PC64LE-NEXT: mflr 0
1335 ; PC64LE-NEXT: std 0, 16(1)
1336 ; PC64LE-NEXT: stdu 1, -96(1)
1337 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
1338 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
1339 ; PC64LE-NEXT: li 3, 48
1340 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1341 ; PC64LE-NEXT: li 3, 64
1342 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1343 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1344 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1345 ; PC64LE-NEXT: xscvspdpn 1, 0
1346 ; PC64LE-NEXT: xscvspdpn 2, 2
1347 ; PC64LE-NEXT: vmr 31, 3
1348 ; PC64LE-NEXT: vmr 30, 2
1349 ; PC64LE-NEXT: bl powf
1351 ; PC64LE-NEXT: xxswapd 0, 62
1352 ; PC64LE-NEXT: xxswapd 2, 63
1353 ; PC64LE-NEXT: fmr 31, 1
1354 ; PC64LE-NEXT: xscvspdpn 1, 0
1355 ; PC64LE-NEXT: xscvspdpn 2, 2
1356 ; PC64LE-NEXT: bl powf
1358 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
1359 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
1360 ; PC64LE-NEXT: fmr 30, 1
1361 ; PC64LE-NEXT: xscvspdpn 1, 0
1362 ; PC64LE-NEXT: xscvspdpn 2, 2
1363 ; PC64LE-NEXT: bl powf
1365 ; PC64LE-NEXT: xscvdpspn 34, 30
1366 ; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1367 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1368 ; PC64LE-NEXT: xscvdpspn 35, 1
1369 ; PC64LE-NEXT: addi 3, 3, .LCPI32_0@toc@l
1370 ; PC64LE-NEXT: lvx 4, 0, 3
1371 ; PC64LE-NEXT: li 3, 64
1372 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1373 ; PC64LE-NEXT: li 3, 48
1374 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1375 ; PC64LE-NEXT: vmrghw 2, 2, 3
1376 ; PC64LE-NEXT: xscvdpspn 35, 31
1377 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1378 ; PC64LE-NEXT: vperm 2, 3, 2, 4
1379 ; PC64LE-NEXT: addi 1, 1, 96
1380 ; PC64LE-NEXT: ld 0, 16(1)
1381 ; PC64LE-NEXT: mtlr 0
1384 ; PC64LE9-LABEL: constrained_vector_pow_v3f32:
1385 ; PC64LE9: # %bb.0: # %entry
1386 ; PC64LE9-NEXT: mflr 0
1387 ; PC64LE9-NEXT: std 0, 16(1)
1388 ; PC64LE9-NEXT: stdu 1, -80(1)
1389 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1390 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1391 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1392 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
1393 ; PC64LE9-NEXT: xscvspdpn 1, 0
1394 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
1395 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1396 ; PC64LE9-NEXT: xscvspdpn 2, 0
1397 ; PC64LE9-NEXT: vmr 31, 3
1398 ; PC64LE9-NEXT: vmr 30, 2
1399 ; PC64LE9-NEXT: bl powf
1401 ; PC64LE9-NEXT: xxswapd 0, 62
1402 ; PC64LE9-NEXT: fmr 31, 1
1403 ; PC64LE9-NEXT: xscvspdpn 1, 0
1404 ; PC64LE9-NEXT: xxswapd 0, 63
1405 ; PC64LE9-NEXT: xscvspdpn 2, 0
1406 ; PC64LE9-NEXT: bl powf
1408 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
1409 ; PC64LE9-NEXT: fmr 30, 1
1410 ; PC64LE9-NEXT: xscvspdpn 1, 0
1411 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
1412 ; PC64LE9-NEXT: xscvspdpn 2, 0
1413 ; PC64LE9-NEXT: bl powf
1415 ; PC64LE9-NEXT: xscvdpspn 34, 1
1416 ; PC64LE9-NEXT: xscvdpspn 35, 30
1417 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1418 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1419 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
1420 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1421 ; PC64LE9-NEXT: addi 3, 3, .LCPI32_0@toc@l
1422 ; PC64LE9-NEXT: lxv 36, 0(3)
1423 ; PC64LE9-NEXT: vmrghw 2, 3, 2
1424 ; PC64LE9-NEXT: xscvdpspn 35, 31
1425 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1426 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
1427 ; PC64LE9-NEXT: addi 1, 1, 80
1428 ; PC64LE9-NEXT: ld 0, 16(1)
1429 ; PC64LE9-NEXT: mtlr 0
1432 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32(
1435 metadata !"round.dynamic",
1436 metadata !"fpexcept.strict") #1
1437 ret <3 x float> %pow
1440 define <3 x double> @constrained_vector_pow_v3f64(<3 x double> %x, <3 x double> %y) #0 {
1441 ; PC64LE-LABEL: constrained_vector_pow_v3f64:
1442 ; PC64LE: # %bb.0: # %entry
1443 ; PC64LE-NEXT: mflr 0
1444 ; PC64LE-NEXT: std 0, 16(1)
1445 ; PC64LE-NEXT: stdu 1, -96(1)
1446 ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill
1447 ; PC64LE-NEXT: fmr 28, 2
1448 ; PC64LE-NEXT: li 3, 48
1449 ; PC64LE-NEXT: fmr 2, 4
1450 ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill
1451 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1452 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1453 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1454 ; PC64LE-NEXT: fmr 31, 6
1455 ; PC64LE-NEXT: fmr 30, 5
1456 ; PC64LE-NEXT: fmr 29, 3
1457 ; PC64LE-NEXT: bl pow
1459 ; PC64LE-NEXT: xxlor 63, 1, 1
1460 ; PC64LE-NEXT: fmr 1, 28
1461 ; PC64LE-NEXT: fmr 2, 30
1462 ; PC64LE-NEXT: bl pow
1464 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1465 ; PC64LE-NEXT: xxmrghd 63, 1, 63
1466 ; PC64LE-NEXT: fmr 2, 31
1467 ; PC64LE-NEXT: fmr 1, 29
1468 ; PC64LE-NEXT: bl pow
1470 ; PC64LE-NEXT: xxswapd 0, 63
1471 ; PC64LE-NEXT: li 3, 48
1472 ; PC64LE-NEXT: xxlor 2, 63, 63
1473 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1474 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1475 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1476 ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload
1477 ; PC64LE-NEXT: fmr 3, 1
1478 ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload
1479 ; PC64LE-NEXT: fmr 1, 0
1480 ; PC64LE-NEXT: addi 1, 1, 96
1481 ; PC64LE-NEXT: ld 0, 16(1)
1482 ; PC64LE-NEXT: mtlr 0
1485 ; PC64LE9-LABEL: constrained_vector_pow_v3f64:
1486 ; PC64LE9: # %bb.0: # %entry
1487 ; PC64LE9-NEXT: mflr 0
1488 ; PC64LE9-NEXT: std 0, 16(1)
1489 ; PC64LE9-NEXT: stdu 1, -80(1)
1490 ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill
1491 ; PC64LE9-NEXT: fmr 28, 2
1492 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1493 ; PC64LE9-NEXT: fmr 2, 4
1494 ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill
1495 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1496 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1497 ; PC64LE9-NEXT: fmr 31, 6
1498 ; PC64LE9-NEXT: fmr 30, 5
1499 ; PC64LE9-NEXT: fmr 29, 3
1500 ; PC64LE9-NEXT: bl pow
1502 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
1503 ; PC64LE9-NEXT: fmr 1, 28
1504 ; PC64LE9-NEXT: fmr 2, 30
1505 ; PC64LE9-NEXT: bl pow
1507 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1508 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
1509 ; PC64LE9-NEXT: fmr 1, 29
1510 ; PC64LE9-NEXT: fmr 2, 31
1511 ; PC64LE9-NEXT: bl pow
1513 ; PC64LE9-NEXT: fmr 3, 1
1514 ; PC64LE9-NEXT: xxswapd 1, 63
1515 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1516 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1517 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1518 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1519 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1520 ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload
1521 ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload
1522 ; PC64LE9-NEXT: addi 1, 1, 80
1523 ; PC64LE9-NEXT: ld 0, 16(1)
1524 ; PC64LE9-NEXT: mtlr 0
1527 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
1530 metadata !"round.dynamic",
1531 metadata !"fpexcept.strict") #1
1532 ret <3 x double> %pow
1535 define <4 x double> @constrained_vector_pow_v4f64(<4 x double> %x, <4 x double> %y) #0 {
1536 ; PC64LE-LABEL: constrained_vector_pow_v4f64:
1537 ; PC64LE: # %bb.0: # %entry
1538 ; PC64LE-NEXT: mflr 0
1539 ; PC64LE-NEXT: std 0, 16(1)
1540 ; PC64LE-NEXT: stdu 1, -128(1)
1541 ; PC64LE-NEXT: li 3, 48
1542 ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill
1543 ; PC64LE-NEXT: li 3, 64
1544 ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill
1545 ; PC64LE-NEXT: li 3, 80
1546 ; PC64LE-NEXT: vmr 28, 2
1547 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1548 ; PC64LE-NEXT: li 3, 96
1549 ; PC64LE-NEXT: vmr 29, 3
1550 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1551 ; PC64LE-NEXT: vmr 30, 4
1552 ; PC64LE-NEXT: li 3, 112
1553 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1554 ; PC64LE-NEXT: vmr 31, 5
1555 ; PC64LE-NEXT: xxlor 1, 60, 60
1556 ; PC64LE-NEXT: xxlor 2, 62, 62
1557 ; PC64LE-NEXT: bl pow
1559 ; PC64LE-NEXT: xxlor 59, 1, 1
1560 ; PC64LE-NEXT: xxswapd 1, 60
1561 ; PC64LE-NEXT: xxswapd 2, 62
1562 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1563 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1564 ; PC64LE-NEXT: bl pow
1566 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1567 ; PC64LE-NEXT: xxmrghd 62, 59, 1
1568 ; PC64LE-NEXT: xxlor 2, 63, 63
1569 ; PC64LE-NEXT: xxlor 1, 61, 61
1570 ; PC64LE-NEXT: bl pow
1572 ; PC64LE-NEXT: xxlor 60, 1, 1
1573 ; PC64LE-NEXT: xxswapd 1, 61
1574 ; PC64LE-NEXT: xxswapd 2, 63
1575 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1576 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1577 ; PC64LE-NEXT: bl pow
1579 ; PC64LE-NEXT: li 3, 112
1580 ; PC64LE-NEXT: vmr 2, 30
1581 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1582 ; PC64LE-NEXT: xxmrghd 35, 60, 1
1583 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1584 ; PC64LE-NEXT: li 3, 96
1585 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1586 ; PC64LE-NEXT: li 3, 80
1587 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
1588 ; PC64LE-NEXT: li 3, 64
1589 ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload
1590 ; PC64LE-NEXT: li 3, 48
1591 ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload
1592 ; PC64LE-NEXT: addi 1, 1, 128
1593 ; PC64LE-NEXT: ld 0, 16(1)
1594 ; PC64LE-NEXT: mtlr 0
1597 ; PC64LE9-LABEL: constrained_vector_pow_v4f64:
1598 ; PC64LE9: # %bb.0: # %entry
1599 ; PC64LE9-NEXT: mflr 0
1600 ; PC64LE9-NEXT: std 0, 16(1)
1601 ; PC64LE9-NEXT: stdu 1, -112(1)
1602 ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill
1603 ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill
1604 ; PC64LE9-NEXT: vmr 30, 4
1605 ; PC64LE9-NEXT: xscpsgndp 2, 62, 62
1606 ; PC64LE9-NEXT: vmr 28, 2
1607 ; PC64LE9-NEXT: xscpsgndp 1, 60, 60
1608 ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill
1609 ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill
1610 ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill
1611 ; PC64LE9-NEXT: vmr 31, 5
1612 ; PC64LE9-NEXT: vmr 29, 3
1613 ; PC64LE9-NEXT: bl pow
1615 ; PC64LE9-NEXT: xscpsgndp 59, 1, 1
1616 ; PC64LE9-NEXT: xxswapd 1, 60
1617 ; PC64LE9-NEXT: xxswapd 2, 62
1618 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1619 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1620 ; PC64LE9-NEXT: bl pow
1622 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1623 ; PC64LE9-NEXT: xxmrghd 62, 59, 1
1624 ; PC64LE9-NEXT: xscpsgndp 1, 61, 61
1625 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1626 ; PC64LE9-NEXT: bl pow
1628 ; PC64LE9-NEXT: xscpsgndp 60, 1, 1
1629 ; PC64LE9-NEXT: xxswapd 1, 61
1630 ; PC64LE9-NEXT: xxswapd 2, 63
1631 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1632 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1633 ; PC64LE9-NEXT: bl pow
1635 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1636 ; PC64LE9-NEXT: xxmrghd 35, 60, 1
1637 ; PC64LE9-NEXT: vmr 2, 30
1638 ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload
1639 ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload
1640 ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload
1641 ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload
1642 ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload
1643 ; PC64LE9-NEXT: addi 1, 1, 112
1644 ; PC64LE9-NEXT: ld 0, 16(1)
1645 ; PC64LE9-NEXT: mtlr 0
1648 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64(
1651 metadata !"round.dynamic",
1652 metadata !"fpexcept.strict") #1
1653 ret <4 x double> %pow
1656 define <1 x float> @constrained_vector_powi_v1f32(<1 x float> %x, i32 %y) #0 {
1657 ; PC64LE-LABEL: constrained_vector_powi_v1f32:
1658 ; PC64LE: # %bb.0: # %entry
1659 ; PC64LE-NEXT: mflr 0
1660 ; PC64LE-NEXT: std 0, 16(1)
1661 ; PC64LE-NEXT: stdu 1, -32(1)
1662 ; PC64LE-NEXT: clrldi 4, 4, 32
1663 ; PC64LE-NEXT: bl __powisf2
1665 ; PC64LE-NEXT: addi 1, 1, 32
1666 ; PC64LE-NEXT: ld 0, 16(1)
1667 ; PC64LE-NEXT: mtlr 0
1670 ; PC64LE9-LABEL: constrained_vector_powi_v1f32:
1671 ; PC64LE9: # %bb.0: # %entry
1672 ; PC64LE9-NEXT: mflr 0
1673 ; PC64LE9-NEXT: std 0, 16(1)
1674 ; PC64LE9-NEXT: stdu 1, -32(1)
1675 ; PC64LE9-NEXT: clrldi 4, 4, 32
1676 ; PC64LE9-NEXT: bl __powisf2
1678 ; PC64LE9-NEXT: addi 1, 1, 32
1679 ; PC64LE9-NEXT: ld 0, 16(1)
1680 ; PC64LE9-NEXT: mtlr 0
1683 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
1686 metadata !"round.dynamic",
1687 metadata !"fpexcept.strict") #1
1688 ret <1 x float> %powi
1691 define <2 x double> @constrained_vector_powi_v2f64(<2 x double> %x, i32 %y) #0 {
1692 ; PC64LE-LABEL: constrained_vector_powi_v2f64:
1693 ; PC64LE: # %bb.0: # %entry
1694 ; PC64LE-NEXT: mflr 0
1695 ; PC64LE-NEXT: std 0, 16(1)
1696 ; PC64LE-NEXT: stdu 1, -96(1)
1697 ; PC64LE-NEXT: li 3, 48
1698 ; PC64LE-NEXT: std 30, 80(1) # 8-byte Folded Spill
1699 ; PC64LE-NEXT: clrldi 30, 5, 32
1700 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1701 ; PC64LE-NEXT: li 3, 64
1702 ; PC64LE-NEXT: mr 4, 30
1703 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1704 ; PC64LE-NEXT: vmr 31, 2
1705 ; PC64LE-NEXT: xxlor 1, 63, 63
1706 ; PC64LE-NEXT: bl __powidf2
1708 ; PC64LE-NEXT: xxlor 62, 1, 1
1709 ; PC64LE-NEXT: xxswapd 1, 63
1710 ; PC64LE-NEXT: mr 4, 30
1711 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1712 ; PC64LE-NEXT: bl __powidf2
1714 ; PC64LE-NEXT: li 3, 64
1715 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1716 ; PC64LE-NEXT: xxmrghd 34, 62, 1
1717 ; PC64LE-NEXT: ld 30, 80(1) # 8-byte Folded Reload
1718 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1719 ; PC64LE-NEXT: li 3, 48
1720 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1721 ; PC64LE-NEXT: addi 1, 1, 96
1722 ; PC64LE-NEXT: ld 0, 16(1)
1723 ; PC64LE-NEXT: mtlr 0
1726 ; PC64LE9-LABEL: constrained_vector_powi_v2f64:
1727 ; PC64LE9: # %bb.0: # %entry
1728 ; PC64LE9-NEXT: mflr 0
1729 ; PC64LE9-NEXT: std 0, 16(1)
1730 ; PC64LE9-NEXT: stdu 1, -80(1)
1731 ; PC64LE9-NEXT: std 30, 64(1) # 8-byte Folded Spill
1732 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1733 ; PC64LE9-NEXT: vmr 31, 2
1734 ; PC64LE9-NEXT: clrldi 30, 5, 32
1735 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
1736 ; PC64LE9-NEXT: mr 4, 30
1737 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
1738 ; PC64LE9-NEXT: bl __powidf2
1740 ; PC64LE9-NEXT: mr 4, 30
1741 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
1742 ; PC64LE9-NEXT: xxswapd 1, 63
1743 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1744 ; PC64LE9-NEXT: bl __powidf2
1746 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1747 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
1748 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1749 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
1750 ; PC64LE9-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1751 ; PC64LE9-NEXT: addi 1, 1, 80
1752 ; PC64LE9-NEXT: ld 0, 16(1)
1753 ; PC64LE9-NEXT: mtlr 0
1756 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
1759 metadata !"round.dynamic",
1760 metadata !"fpexcept.strict") #1
1761 ret <2 x double> %powi
1764 define <3 x float> @constrained_vector_powi_v3f32(<3 x float> %x, i32 %y) #0 {
1767 ; PC64LE-LABEL: constrained_vector_powi_v3f32:
1768 ; PC64LE: # %bb.0: # %entry
1769 ; PC64LE-NEXT: mflr 0
1770 ; PC64LE-NEXT: std 0, 16(1)
1771 ; PC64LE-NEXT: stdu 1, -96(1)
1772 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
1773 ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill
1774 ; PC64LE-NEXT: clrldi 30, 5, 32
1775 ; PC64LE-NEXT: li 3, 48
1776 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1777 ; PC64LE-NEXT: mr 4, 30
1778 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1779 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1780 ; PC64LE-NEXT: vmr 31, 2
1781 ; PC64LE-NEXT: xscvspdpn 1, 0
1782 ; PC64LE-NEXT: bl __powisf2
1784 ; PC64LE-NEXT: xxswapd 0, 63
1785 ; PC64LE-NEXT: fmr 31, 1
1786 ; PC64LE-NEXT: mr 4, 30
1787 ; PC64LE-NEXT: xscvspdpn 1, 0
1788 ; PC64LE-NEXT: bl __powisf2
1790 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
1791 ; PC64LE-NEXT: fmr 30, 1
1792 ; PC64LE-NEXT: mr 4, 30
1793 ; PC64LE-NEXT: xscvspdpn 1, 0
1794 ; PC64LE-NEXT: bl __powisf2
1796 ; PC64LE-NEXT: xscvdpspn 34, 30
1797 ; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha
1798 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1799 ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1800 ; PC64LE-NEXT: xscvdpspn 35, 1
1801 ; PC64LE-NEXT: addi 3, 3, .LCPI37_0@toc@l
1802 ; PC64LE-NEXT: lvx 4, 0, 3
1803 ; PC64LE-NEXT: li 3, 48
1804 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1805 ; PC64LE-NEXT: vmrghw 2, 2, 3
1806 ; PC64LE-NEXT: xscvdpspn 35, 31
1807 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1808 ; PC64LE-NEXT: vperm 2, 3, 2, 4
1809 ; PC64LE-NEXT: addi 1, 1, 96
1810 ; PC64LE-NEXT: ld 0, 16(1)
1811 ; PC64LE-NEXT: mtlr 0
1814 ; PC64LE9-LABEL: constrained_vector_powi_v3f32:
1815 ; PC64LE9: # %bb.0: # %entry
1816 ; PC64LE9-NEXT: mflr 0
1817 ; PC64LE9-NEXT: std 0, 16(1)
1818 ; PC64LE9-NEXT: stdu 1, -80(1)
1819 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1820 ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill
1821 ; PC64LE9-NEXT: clrldi 30, 5, 32
1822 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1823 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1824 ; PC64LE9-NEXT: vmr 31, 2
1825 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1826 ; PC64LE9-NEXT: mr 4, 30
1827 ; PC64LE9-NEXT: xscvspdpn 1, 0
1828 ; PC64LE9-NEXT: bl __powisf2
1830 ; PC64LE9-NEXT: xxswapd 0, 63
1831 ; PC64LE9-NEXT: fmr 31, 1
1832 ; PC64LE9-NEXT: mr 4, 30
1833 ; PC64LE9-NEXT: xscvspdpn 1, 0
1834 ; PC64LE9-NEXT: bl __powisf2
1836 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
1837 ; PC64LE9-NEXT: fmr 30, 1
1838 ; PC64LE9-NEXT: mr 4, 30
1839 ; PC64LE9-NEXT: xscvspdpn 1, 0
1840 ; PC64LE9-NEXT: bl __powisf2
1842 ; PC64LE9-NEXT: xscvdpspn 34, 1
1843 ; PC64LE9-NEXT: xscvdpspn 35, 30
1844 ; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha
1845 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1846 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1847 ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload
1848 ; PC64LE9-NEXT: addi 3, 3, .LCPI37_0@toc@l
1849 ; PC64LE9-NEXT: lxv 36, 0(3)
1850 ; PC64LE9-NEXT: vmrghw 2, 3, 2
1851 ; PC64LE9-NEXT: xscvdpspn 35, 31
1852 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1853 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
1854 ; PC64LE9-NEXT: addi 1, 1, 80
1855 ; PC64LE9-NEXT: ld 0, 16(1)
1856 ; PC64LE9-NEXT: mtlr 0
1859 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32(
1862 metadata !"round.dynamic",
1863 metadata !"fpexcept.strict") #1
1864 ret <3 x float> %powi
1867 define <3 x double> @constrained_vector_powi_v3f64(<3 x double> %x, i32 %y) #0 {
1868 ; PC64LE-LABEL: constrained_vector_powi_v3f64:
1869 ; PC64LE: # %bb.0: # %entry
1870 ; PC64LE-NEXT: mflr 0
1871 ; PC64LE-NEXT: std 0, 16(1)
1872 ; PC64LE-NEXT: stdu 1, -96(1)
1873 ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill
1874 ; PC64LE-NEXT: clrldi 30, 6, 32
1875 ; PC64LE-NEXT: li 3, 48
1876 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1877 ; PC64LE-NEXT: fmr 30, 2
1878 ; PC64LE-NEXT: mr 4, 30
1879 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1880 ; PC64LE-NEXT: fmr 31, 3
1881 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1882 ; PC64LE-NEXT: bl __powidf2
1884 ; PC64LE-NEXT: xxlor 63, 1, 1
1885 ; PC64LE-NEXT: fmr 1, 30
1886 ; PC64LE-NEXT: mr 4, 30
1887 ; PC64LE-NEXT: bl __powidf2
1889 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1890 ; PC64LE-NEXT: xxmrghd 63, 1, 63
1891 ; PC64LE-NEXT: mr 4, 30
1892 ; PC64LE-NEXT: fmr 1, 31
1893 ; PC64LE-NEXT: bl __powidf2
1895 ; PC64LE-NEXT: xxswapd 0, 63
1896 ; PC64LE-NEXT: li 3, 48
1897 ; PC64LE-NEXT: xxlor 2, 63, 63
1898 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1899 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1900 ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1901 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1902 ; PC64LE-NEXT: fmr 3, 1
1903 ; PC64LE-NEXT: fmr 1, 0
1904 ; PC64LE-NEXT: addi 1, 1, 96
1905 ; PC64LE-NEXT: ld 0, 16(1)
1906 ; PC64LE-NEXT: mtlr 0
1909 ; PC64LE9-LABEL: constrained_vector_powi_v3f64:
1910 ; PC64LE9: # %bb.0: # %entry
1911 ; PC64LE9-NEXT: mflr 0
1912 ; PC64LE9-NEXT: std 0, 16(1)
1913 ; PC64LE9-NEXT: stdu 1, -80(1)
1914 ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill
1915 ; PC64LE9-NEXT: clrldi 30, 6, 32
1916 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1917 ; PC64LE9-NEXT: mr 4, 30
1918 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1919 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1920 ; PC64LE9-NEXT: fmr 31, 3
1921 ; PC64LE9-NEXT: fmr 30, 2
1922 ; PC64LE9-NEXT: bl __powidf2
1924 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
1925 ; PC64LE9-NEXT: fmr 1, 30
1926 ; PC64LE9-NEXT: mr 4, 30
1927 ; PC64LE9-NEXT: bl __powidf2
1929 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1930 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
1931 ; PC64LE9-NEXT: fmr 1, 31
1932 ; PC64LE9-NEXT: mr 4, 30
1933 ; PC64LE9-NEXT: bl __powidf2
1935 ; PC64LE9-NEXT: fmr 3, 1
1936 ; PC64LE9-NEXT: xxswapd 1, 63
1937 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1938 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1939 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1940 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1941 ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload
1942 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1943 ; PC64LE9-NEXT: addi 1, 1, 80
1944 ; PC64LE9-NEXT: ld 0, 16(1)
1945 ; PC64LE9-NEXT: mtlr 0
1948 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
1951 metadata !"round.dynamic",
1952 metadata !"fpexcept.strict") #1
1953 ret <3 x double> %powi
1956 define <4 x double> @constrained_vector_powi_v4f64(<4 x double> %x, i32 %y) #0 {
1957 ; PC64LE-LABEL: constrained_vector_powi_v4f64:
1958 ; PC64LE: # %bb.0: # %entry
1959 ; PC64LE-NEXT: mflr 0
1960 ; PC64LE-NEXT: std 0, 16(1)
1961 ; PC64LE-NEXT: stdu 1, -112(1)
1962 ; PC64LE-NEXT: li 3, 48
1963 ; PC64LE-NEXT: std 30, 96(1) # 8-byte Folded Spill
1964 ; PC64LE-NEXT: clrldi 30, 7, 32
1965 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1966 ; PC64LE-NEXT: li 3, 64
1967 ; PC64LE-NEXT: mr 4, 30
1968 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1969 ; PC64LE-NEXT: vmr 30, 2
1970 ; PC64LE-NEXT: li 3, 80
1971 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1972 ; PC64LE-NEXT: vmr 31, 3
1973 ; PC64LE-NEXT: xxlor 1, 62, 62
1974 ; PC64LE-NEXT: bl __powidf2
1976 ; PC64LE-NEXT: xxlor 61, 1, 1
1977 ; PC64LE-NEXT: xxswapd 1, 62
1978 ; PC64LE-NEXT: mr 4, 30
1979 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1980 ; PC64LE-NEXT: bl __powidf2
1982 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1983 ; PC64LE-NEXT: xxmrghd 62, 61, 1
1984 ; PC64LE-NEXT: mr 4, 30
1985 ; PC64LE-NEXT: xxlor 1, 63, 63
1986 ; PC64LE-NEXT: bl __powidf2
1988 ; PC64LE-NEXT: xxlor 61, 1, 1
1989 ; PC64LE-NEXT: xxswapd 1, 63
1990 ; PC64LE-NEXT: mr 4, 30
1991 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1992 ; PC64LE-NEXT: bl __powidf2
1994 ; PC64LE-NEXT: li 3, 80
1995 ; PC64LE-NEXT: vmr 2, 30
1996 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1997 ; PC64LE-NEXT: xxmrghd 35, 61, 1
1998 ; PC64LE-NEXT: ld 30, 96(1) # 8-byte Folded Reload
1999 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2000 ; PC64LE-NEXT: li 3, 64
2001 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2002 ; PC64LE-NEXT: li 3, 48
2003 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2004 ; PC64LE-NEXT: addi 1, 1, 112
2005 ; PC64LE-NEXT: ld 0, 16(1)
2006 ; PC64LE-NEXT: mtlr 0
2009 ; PC64LE9-LABEL: constrained_vector_powi_v4f64:
2010 ; PC64LE9: # %bb.0: # %entry
2011 ; PC64LE9-NEXT: mflr 0
2012 ; PC64LE9-NEXT: std 0, 16(1)
2013 ; PC64LE9-NEXT: stdu 1, -96(1)
2014 ; PC64LE9-NEXT: std 30, 80(1) # 8-byte Folded Spill
2015 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2016 ; PC64LE9-NEXT: vmr 30, 2
2017 ; PC64LE9-NEXT: clrldi 30, 7, 32
2018 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2019 ; PC64LE9-NEXT: mr 4, 30
2020 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2021 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2022 ; PC64LE9-NEXT: vmr 31, 3
2023 ; PC64LE9-NEXT: bl __powidf2
2025 ; PC64LE9-NEXT: mr 4, 30
2026 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2027 ; PC64LE9-NEXT: xxswapd 1, 62
2028 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2029 ; PC64LE9-NEXT: bl __powidf2
2031 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2032 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2033 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2034 ; PC64LE9-NEXT: mr 4, 30
2035 ; PC64LE9-NEXT: bl __powidf2
2037 ; PC64LE9-NEXT: mr 4, 30
2038 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2039 ; PC64LE9-NEXT: xxswapd 1, 63
2040 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2041 ; PC64LE9-NEXT: bl __powidf2
2043 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2044 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2045 ; PC64LE9-NEXT: vmr 2, 30
2046 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2047 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2048 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2049 ; PC64LE9-NEXT: ld 30, 80(1) # 8-byte Folded Reload
2050 ; PC64LE9-NEXT: addi 1, 1, 96
2051 ; PC64LE9-NEXT: ld 0, 16(1)
2052 ; PC64LE9-NEXT: mtlr 0
2055 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64(
2058 metadata !"round.dynamic",
2059 metadata !"fpexcept.strict") #1
2060 ret <4 x double> %powi
2063 define <1 x float> @constrained_vector_sin_v1f32(<1 x float> %x) #0 {
2064 ; PC64LE-LABEL: constrained_vector_sin_v1f32:
2065 ; PC64LE: # %bb.0: # %entry
2066 ; PC64LE-NEXT: mflr 0
2067 ; PC64LE-NEXT: std 0, 16(1)
2068 ; PC64LE-NEXT: stdu 1, -32(1)
2069 ; PC64LE-NEXT: bl sinf
2071 ; PC64LE-NEXT: addi 1, 1, 32
2072 ; PC64LE-NEXT: ld 0, 16(1)
2073 ; PC64LE-NEXT: mtlr 0
2076 ; PC64LE9-LABEL: constrained_vector_sin_v1f32:
2077 ; PC64LE9: # %bb.0: # %entry
2078 ; PC64LE9-NEXT: mflr 0
2079 ; PC64LE9-NEXT: std 0, 16(1)
2080 ; PC64LE9-NEXT: stdu 1, -32(1)
2081 ; PC64LE9-NEXT: bl sinf
2083 ; PC64LE9-NEXT: addi 1, 1, 32
2084 ; PC64LE9-NEXT: ld 0, 16(1)
2085 ; PC64LE9-NEXT: mtlr 0
2088 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
2090 metadata !"round.dynamic",
2091 metadata !"fpexcept.strict") #1
2092 ret <1 x float> %sin
2095 define <2 x double> @constrained_vector_sin_v2f64(<2 x double> %x) #0 {
2096 ; PC64LE-LABEL: constrained_vector_sin_v2f64:
2097 ; PC64LE: # %bb.0: # %entry
2098 ; PC64LE-NEXT: mflr 0
2099 ; PC64LE-NEXT: std 0, 16(1)
2100 ; PC64LE-NEXT: stdu 1, -80(1)
2101 ; PC64LE-NEXT: li 3, 48
2102 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2103 ; PC64LE-NEXT: li 3, 64
2104 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2105 ; PC64LE-NEXT: vmr 31, 2
2106 ; PC64LE-NEXT: xxlor 1, 63, 63
2107 ; PC64LE-NEXT: bl sin
2109 ; PC64LE-NEXT: xxlor 62, 1, 1
2110 ; PC64LE-NEXT: xxswapd 1, 63
2111 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2112 ; PC64LE-NEXT: bl sin
2114 ; PC64LE-NEXT: li 3, 64
2115 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2116 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2117 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2118 ; PC64LE-NEXT: li 3, 48
2119 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2120 ; PC64LE-NEXT: addi 1, 1, 80
2121 ; PC64LE-NEXT: ld 0, 16(1)
2122 ; PC64LE-NEXT: mtlr 0
2125 ; PC64LE9-LABEL: constrained_vector_sin_v2f64:
2126 ; PC64LE9: # %bb.0: # %entry
2127 ; PC64LE9-NEXT: mflr 0
2128 ; PC64LE9-NEXT: std 0, 16(1)
2129 ; PC64LE9-NEXT: stdu 1, -64(1)
2130 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2131 ; PC64LE9-NEXT: vmr 31, 2
2132 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2133 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2134 ; PC64LE9-NEXT: bl sin
2136 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2137 ; PC64LE9-NEXT: xxswapd 1, 63
2138 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2139 ; PC64LE9-NEXT: bl sin
2141 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2142 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2143 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2144 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2145 ; PC64LE9-NEXT: addi 1, 1, 64
2146 ; PC64LE9-NEXT: ld 0, 16(1)
2147 ; PC64LE9-NEXT: mtlr 0
2150 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
2152 metadata !"round.dynamic",
2153 metadata !"fpexcept.strict") #1
2154 ret <2 x double> %sin
2157 define <3 x float> @constrained_vector_sin_v3f32(<3 x float> %x) #0 {
2158 ; PC64LE-LABEL: constrained_vector_sin_v3f32:
2159 ; PC64LE: # %bb.0: # %entry
2160 ; PC64LE-NEXT: mflr 0
2161 ; PC64LE-NEXT: std 0, 16(1)
2162 ; PC64LE-NEXT: stdu 1, -80(1)
2163 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2164 ; PC64LE-NEXT: li 3, 48
2165 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2166 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2167 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2168 ; PC64LE-NEXT: vmr 31, 2
2169 ; PC64LE-NEXT: xscvspdpn 1, 0
2170 ; PC64LE-NEXT: bl sinf
2172 ; PC64LE-NEXT: xxswapd 0, 63
2173 ; PC64LE-NEXT: fmr 31, 1
2174 ; PC64LE-NEXT: xscvspdpn 1, 0
2175 ; PC64LE-NEXT: bl sinf
2177 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2178 ; PC64LE-NEXT: fmr 30, 1
2179 ; PC64LE-NEXT: xscvspdpn 1, 0
2180 ; PC64LE-NEXT: bl sinf
2182 ; PC64LE-NEXT: xscvdpspn 34, 30
2183 ; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2184 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2185 ; PC64LE-NEXT: xscvdpspn 35, 1
2186 ; PC64LE-NEXT: addi 3, 3, .LCPI42_0@toc@l
2187 ; PC64LE-NEXT: lvx 4, 0, 3
2188 ; PC64LE-NEXT: li 3, 48
2189 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2190 ; PC64LE-NEXT: vmrghw 2, 2, 3
2191 ; PC64LE-NEXT: xscvdpspn 35, 31
2192 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2193 ; PC64LE-NEXT: vperm 2, 3, 2, 4
2194 ; PC64LE-NEXT: addi 1, 1, 80
2195 ; PC64LE-NEXT: ld 0, 16(1)
2196 ; PC64LE-NEXT: mtlr 0
2199 ; PC64LE9-LABEL: constrained_vector_sin_v3f32:
2200 ; PC64LE9: # %bb.0: # %entry
2201 ; PC64LE9-NEXT: mflr 0
2202 ; PC64LE9-NEXT: std 0, 16(1)
2203 ; PC64LE9-NEXT: stdu 1, -64(1)
2204 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2205 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2206 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2207 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2208 ; PC64LE9-NEXT: xscvspdpn 1, 0
2209 ; PC64LE9-NEXT: vmr 31, 2
2210 ; PC64LE9-NEXT: bl sinf
2212 ; PC64LE9-NEXT: xxswapd 0, 63
2213 ; PC64LE9-NEXT: fmr 31, 1
2214 ; PC64LE9-NEXT: xscvspdpn 1, 0
2215 ; PC64LE9-NEXT: bl sinf
2217 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2218 ; PC64LE9-NEXT: fmr 30, 1
2219 ; PC64LE9-NEXT: xscvspdpn 1, 0
2220 ; PC64LE9-NEXT: bl sinf
2222 ; PC64LE9-NEXT: xscvdpspn 34, 1
2223 ; PC64LE9-NEXT: xscvdpspn 35, 30
2224 ; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2225 ; PC64LE9-NEXT: xscvdpspn 36, 31
2226 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2227 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2228 ; PC64LE9-NEXT: addi 3, 3, .LCPI42_0@toc@l
2229 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2230 ; PC64LE9-NEXT: vmrghw 2, 3, 2
2231 ; PC64LE9-NEXT: lxv 35, 0(3)
2232 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
2233 ; PC64LE9-NEXT: addi 1, 1, 64
2234 ; PC64LE9-NEXT: ld 0, 16(1)
2235 ; PC64LE9-NEXT: mtlr 0
2238 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
2240 metadata !"round.dynamic",
2241 metadata !"fpexcept.strict") #1
2242 ret <3 x float> %sin
2245 define <3 x double> @constrained_vector_sin_v3f64(<3 x double> %x) #0 {
2246 ; PC64LE-LABEL: constrained_vector_sin_v3f64:
2247 ; PC64LE: # %bb.0: # %entry
2248 ; PC64LE-NEXT: mflr 0
2249 ; PC64LE-NEXT: std 0, 16(1)
2250 ; PC64LE-NEXT: stdu 1, -80(1)
2251 ; PC64LE-NEXT: li 3, 48
2252 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2253 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2254 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2255 ; PC64LE-NEXT: fmr 31, 3
2256 ; PC64LE-NEXT: fmr 30, 2
2257 ; PC64LE-NEXT: bl sin
2259 ; PC64LE-NEXT: xxlor 63, 1, 1
2260 ; PC64LE-NEXT: fmr 1, 30
2261 ; PC64LE-NEXT: bl sin
2263 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2264 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2265 ; PC64LE-NEXT: fmr 1, 31
2266 ; PC64LE-NEXT: bl sin
2268 ; PC64LE-NEXT: xxswapd 0, 63
2269 ; PC64LE-NEXT: li 3, 48
2270 ; PC64LE-NEXT: xxlor 2, 63, 63
2271 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2272 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2273 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2274 ; PC64LE-NEXT: fmr 3, 1
2275 ; PC64LE-NEXT: fmr 1, 0
2276 ; PC64LE-NEXT: addi 1, 1, 80
2277 ; PC64LE-NEXT: ld 0, 16(1)
2278 ; PC64LE-NEXT: mtlr 0
2281 ; PC64LE9-LABEL: constrained_vector_sin_v3f64:
2282 ; PC64LE9: # %bb.0: # %entry
2283 ; PC64LE9-NEXT: mflr 0
2284 ; PC64LE9-NEXT: std 0, 16(1)
2285 ; PC64LE9-NEXT: stdu 1, -64(1)
2286 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2287 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2288 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2289 ; PC64LE9-NEXT: fmr 31, 3
2290 ; PC64LE9-NEXT: fmr 30, 2
2291 ; PC64LE9-NEXT: bl sin
2293 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2294 ; PC64LE9-NEXT: fmr 1, 30
2295 ; PC64LE9-NEXT: bl sin
2297 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2298 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2299 ; PC64LE9-NEXT: fmr 1, 31
2300 ; PC64LE9-NEXT: bl sin
2302 ; PC64LE9-NEXT: fmr 3, 1
2303 ; PC64LE9-NEXT: xxswapd 1, 63
2304 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2305 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2306 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2307 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2308 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2309 ; PC64LE9-NEXT: addi 1, 1, 64
2310 ; PC64LE9-NEXT: ld 0, 16(1)
2311 ; PC64LE9-NEXT: mtlr 0
2314 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
2316 metadata !"round.dynamic",
2317 metadata !"fpexcept.strict") #1
2318 ret <3 x double> %sin
2321 define <4 x double> @constrained_vector_sin_v4f64(<4 x double> %x) #0 {
2322 ; PC64LE-LABEL: constrained_vector_sin_v4f64:
2323 ; PC64LE: # %bb.0: # %entry
2324 ; PC64LE-NEXT: mflr 0
2325 ; PC64LE-NEXT: std 0, 16(1)
2326 ; PC64LE-NEXT: stdu 1, -96(1)
2327 ; PC64LE-NEXT: li 3, 48
2328 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
2329 ; PC64LE-NEXT: li 3, 64
2330 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2331 ; PC64LE-NEXT: vmr 30, 2
2332 ; PC64LE-NEXT: li 3, 80
2333 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2334 ; PC64LE-NEXT: vmr 31, 3
2335 ; PC64LE-NEXT: xxlor 1, 62, 62
2336 ; PC64LE-NEXT: bl sin
2338 ; PC64LE-NEXT: xxlor 61, 1, 1
2339 ; PC64LE-NEXT: xxswapd 1, 62
2340 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2341 ; PC64LE-NEXT: bl sin
2343 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2344 ; PC64LE-NEXT: xxmrghd 62, 61, 1
2345 ; PC64LE-NEXT: xxlor 1, 63, 63
2346 ; PC64LE-NEXT: bl sin
2348 ; PC64LE-NEXT: xxlor 61, 1, 1
2349 ; PC64LE-NEXT: xxswapd 1, 63
2350 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2351 ; PC64LE-NEXT: bl sin
2353 ; PC64LE-NEXT: li 3, 80
2354 ; PC64LE-NEXT: vmr 2, 30
2355 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2356 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2357 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2358 ; PC64LE-NEXT: li 3, 64
2359 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2360 ; PC64LE-NEXT: li 3, 48
2361 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2362 ; PC64LE-NEXT: addi 1, 1, 96
2363 ; PC64LE-NEXT: ld 0, 16(1)
2364 ; PC64LE-NEXT: mtlr 0
2367 ; PC64LE9-LABEL: constrained_vector_sin_v4f64:
2368 ; PC64LE9: # %bb.0: # %entry
2369 ; PC64LE9-NEXT: mflr 0
2370 ; PC64LE9-NEXT: std 0, 16(1)
2371 ; PC64LE9-NEXT: stdu 1, -80(1)
2372 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2373 ; PC64LE9-NEXT: vmr 30, 2
2374 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2375 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2376 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2377 ; PC64LE9-NEXT: vmr 31, 3
2378 ; PC64LE9-NEXT: bl sin
2380 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2381 ; PC64LE9-NEXT: xxswapd 1, 62
2382 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2383 ; PC64LE9-NEXT: bl sin
2385 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2386 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2387 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2388 ; PC64LE9-NEXT: bl sin
2390 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2391 ; PC64LE9-NEXT: xxswapd 1, 63
2392 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2393 ; PC64LE9-NEXT: bl sin
2395 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2396 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2397 ; PC64LE9-NEXT: vmr 2, 30
2398 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2399 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2400 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2401 ; PC64LE9-NEXT: addi 1, 1, 80
2402 ; PC64LE9-NEXT: ld 0, 16(1)
2403 ; PC64LE9-NEXT: mtlr 0
2406 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64(
2408 metadata !"round.dynamic",
2409 metadata !"fpexcept.strict") #1
2410 ret <4 x double> %sin
2413 define <1 x float> @constrained_vector_cos_v1f32(<1 x float> %x) #0 {
2414 ; PC64LE-LABEL: constrained_vector_cos_v1f32:
2415 ; PC64LE: # %bb.0: # %entry
2416 ; PC64LE-NEXT: mflr 0
2417 ; PC64LE-NEXT: std 0, 16(1)
2418 ; PC64LE-NEXT: stdu 1, -32(1)
2419 ; PC64LE-NEXT: bl cosf
2421 ; PC64LE-NEXT: addi 1, 1, 32
2422 ; PC64LE-NEXT: ld 0, 16(1)
2423 ; PC64LE-NEXT: mtlr 0
2426 ; PC64LE9-LABEL: constrained_vector_cos_v1f32:
2427 ; PC64LE9: # %bb.0: # %entry
2428 ; PC64LE9-NEXT: mflr 0
2429 ; PC64LE9-NEXT: std 0, 16(1)
2430 ; PC64LE9-NEXT: stdu 1, -32(1)
2431 ; PC64LE9-NEXT: bl cosf
2433 ; PC64LE9-NEXT: addi 1, 1, 32
2434 ; PC64LE9-NEXT: ld 0, 16(1)
2435 ; PC64LE9-NEXT: mtlr 0
2438 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
2440 metadata !"round.dynamic",
2441 metadata !"fpexcept.strict") #1
2442 ret <1 x float> %cos
2445 define <2 x double> @constrained_vector_cos_v2f64(<2 x double> %x) #0 {
2446 ; PC64LE-LABEL: constrained_vector_cos_v2f64:
2447 ; PC64LE: # %bb.0: # %entry
2448 ; PC64LE-NEXT: mflr 0
2449 ; PC64LE-NEXT: std 0, 16(1)
2450 ; PC64LE-NEXT: stdu 1, -80(1)
2451 ; PC64LE-NEXT: li 3, 48
2452 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2453 ; PC64LE-NEXT: li 3, 64
2454 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2455 ; PC64LE-NEXT: vmr 31, 2
2456 ; PC64LE-NEXT: xxlor 1, 63, 63
2457 ; PC64LE-NEXT: bl cos
2459 ; PC64LE-NEXT: xxlor 62, 1, 1
2460 ; PC64LE-NEXT: xxswapd 1, 63
2461 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2462 ; PC64LE-NEXT: bl cos
2464 ; PC64LE-NEXT: li 3, 64
2465 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2466 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2467 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2468 ; PC64LE-NEXT: li 3, 48
2469 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2470 ; PC64LE-NEXT: addi 1, 1, 80
2471 ; PC64LE-NEXT: ld 0, 16(1)
2472 ; PC64LE-NEXT: mtlr 0
2475 ; PC64LE9-LABEL: constrained_vector_cos_v2f64:
2476 ; PC64LE9: # %bb.0: # %entry
2477 ; PC64LE9-NEXT: mflr 0
2478 ; PC64LE9-NEXT: std 0, 16(1)
2479 ; PC64LE9-NEXT: stdu 1, -64(1)
2480 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2481 ; PC64LE9-NEXT: vmr 31, 2
2482 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2483 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2484 ; PC64LE9-NEXT: bl cos
2486 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2487 ; PC64LE9-NEXT: xxswapd 1, 63
2488 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2489 ; PC64LE9-NEXT: bl cos
2491 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2492 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2493 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2494 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2495 ; PC64LE9-NEXT: addi 1, 1, 64
2496 ; PC64LE9-NEXT: ld 0, 16(1)
2497 ; PC64LE9-NEXT: mtlr 0
2500 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
2502 metadata !"round.dynamic",
2503 metadata !"fpexcept.strict") #1
2504 ret <2 x double> %cos
2507 define <3 x float> @constrained_vector_cos_v3f32(<3 x float> %x) #0 {
2508 ; PC64LE-LABEL: constrained_vector_cos_v3f32:
2509 ; PC64LE: # %bb.0: # %entry
2510 ; PC64LE-NEXT: mflr 0
2511 ; PC64LE-NEXT: std 0, 16(1)
2512 ; PC64LE-NEXT: stdu 1, -80(1)
2513 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2514 ; PC64LE-NEXT: li 3, 48
2515 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2516 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2517 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2518 ; PC64LE-NEXT: vmr 31, 2
2519 ; PC64LE-NEXT: xscvspdpn 1, 0
2520 ; PC64LE-NEXT: bl cosf
2522 ; PC64LE-NEXT: xxswapd 0, 63
2523 ; PC64LE-NEXT: fmr 31, 1
2524 ; PC64LE-NEXT: xscvspdpn 1, 0
2525 ; PC64LE-NEXT: bl cosf
2527 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2528 ; PC64LE-NEXT: fmr 30, 1
2529 ; PC64LE-NEXT: xscvspdpn 1, 0
2530 ; PC64LE-NEXT: bl cosf
2532 ; PC64LE-NEXT: xscvdpspn 34, 30
2533 ; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2534 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2535 ; PC64LE-NEXT: xscvdpspn 35, 1
2536 ; PC64LE-NEXT: addi 3, 3, .LCPI47_0@toc@l
2537 ; PC64LE-NEXT: lvx 4, 0, 3
2538 ; PC64LE-NEXT: li 3, 48
2539 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2540 ; PC64LE-NEXT: vmrghw 2, 2, 3
2541 ; PC64LE-NEXT: xscvdpspn 35, 31
2542 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2543 ; PC64LE-NEXT: vperm 2, 3, 2, 4
2544 ; PC64LE-NEXT: addi 1, 1, 80
2545 ; PC64LE-NEXT: ld 0, 16(1)
2546 ; PC64LE-NEXT: mtlr 0
2549 ; PC64LE9-LABEL: constrained_vector_cos_v3f32:
2550 ; PC64LE9: # %bb.0: # %entry
2551 ; PC64LE9-NEXT: mflr 0
2552 ; PC64LE9-NEXT: std 0, 16(1)
2553 ; PC64LE9-NEXT: stdu 1, -64(1)
2554 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2555 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2556 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2557 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2558 ; PC64LE9-NEXT: xscvspdpn 1, 0
2559 ; PC64LE9-NEXT: vmr 31, 2
2560 ; PC64LE9-NEXT: bl cosf
2562 ; PC64LE9-NEXT: xxswapd 0, 63
2563 ; PC64LE9-NEXT: fmr 31, 1
2564 ; PC64LE9-NEXT: xscvspdpn 1, 0
2565 ; PC64LE9-NEXT: bl cosf
2567 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2568 ; PC64LE9-NEXT: fmr 30, 1
2569 ; PC64LE9-NEXT: xscvspdpn 1, 0
2570 ; PC64LE9-NEXT: bl cosf
2572 ; PC64LE9-NEXT: xscvdpspn 34, 1
2573 ; PC64LE9-NEXT: xscvdpspn 35, 30
2574 ; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2575 ; PC64LE9-NEXT: xscvdpspn 36, 31
2576 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2577 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2578 ; PC64LE9-NEXT: addi 3, 3, .LCPI47_0@toc@l
2579 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2580 ; PC64LE9-NEXT: vmrghw 2, 3, 2
2581 ; PC64LE9-NEXT: lxv 35, 0(3)
2582 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
2583 ; PC64LE9-NEXT: addi 1, 1, 64
2584 ; PC64LE9-NEXT: ld 0, 16(1)
2585 ; PC64LE9-NEXT: mtlr 0
2588 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
2590 metadata !"round.dynamic",
2591 metadata !"fpexcept.strict") #1
2592 ret <3 x float> %cos
2595 define <3 x double> @constrained_vector_cos_v3f64(<3 x double> %x) #0 {
2596 ; PC64LE-LABEL: constrained_vector_cos_v3f64:
2597 ; PC64LE: # %bb.0: # %entry
2598 ; PC64LE-NEXT: mflr 0
2599 ; PC64LE-NEXT: std 0, 16(1)
2600 ; PC64LE-NEXT: stdu 1, -80(1)
2601 ; PC64LE-NEXT: li 3, 48
2602 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2603 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2604 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2605 ; PC64LE-NEXT: fmr 31, 3
2606 ; PC64LE-NEXT: fmr 30, 2
2607 ; PC64LE-NEXT: bl cos
2609 ; PC64LE-NEXT: xxlor 63, 1, 1
2610 ; PC64LE-NEXT: fmr 1, 30
2611 ; PC64LE-NEXT: bl cos
2613 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2614 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2615 ; PC64LE-NEXT: fmr 1, 31
2616 ; PC64LE-NEXT: bl cos
2618 ; PC64LE-NEXT: xxswapd 0, 63
2619 ; PC64LE-NEXT: li 3, 48
2620 ; PC64LE-NEXT: xxlor 2, 63, 63
2621 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2622 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2623 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2624 ; PC64LE-NEXT: fmr 3, 1
2625 ; PC64LE-NEXT: fmr 1, 0
2626 ; PC64LE-NEXT: addi 1, 1, 80
2627 ; PC64LE-NEXT: ld 0, 16(1)
2628 ; PC64LE-NEXT: mtlr 0
2631 ; PC64LE9-LABEL: constrained_vector_cos_v3f64:
2632 ; PC64LE9: # %bb.0: # %entry
2633 ; PC64LE9-NEXT: mflr 0
2634 ; PC64LE9-NEXT: std 0, 16(1)
2635 ; PC64LE9-NEXT: stdu 1, -64(1)
2636 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2637 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2638 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2639 ; PC64LE9-NEXT: fmr 31, 3
2640 ; PC64LE9-NEXT: fmr 30, 2
2641 ; PC64LE9-NEXT: bl cos
2643 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2644 ; PC64LE9-NEXT: fmr 1, 30
2645 ; PC64LE9-NEXT: bl cos
2647 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2648 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2649 ; PC64LE9-NEXT: fmr 1, 31
2650 ; PC64LE9-NEXT: bl cos
2652 ; PC64LE9-NEXT: fmr 3, 1
2653 ; PC64LE9-NEXT: xxswapd 1, 63
2654 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2655 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2656 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2657 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2658 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2659 ; PC64LE9-NEXT: addi 1, 1, 64
2660 ; PC64LE9-NEXT: ld 0, 16(1)
2661 ; PC64LE9-NEXT: mtlr 0
2664 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
2666 metadata !"round.dynamic",
2667 metadata !"fpexcept.strict") #1
2668 ret <3 x double> %cos
2671 define <4 x double> @constrained_vector_cos_v4f64(<4 x double> %x) #0 {
2672 ; PC64LE-LABEL: constrained_vector_cos_v4f64:
2673 ; PC64LE: # %bb.0: # %entry
2674 ; PC64LE-NEXT: mflr 0
2675 ; PC64LE-NEXT: std 0, 16(1)
2676 ; PC64LE-NEXT: stdu 1, -96(1)
2677 ; PC64LE-NEXT: li 3, 48
2678 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
2679 ; PC64LE-NEXT: li 3, 64
2680 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2681 ; PC64LE-NEXT: vmr 30, 2
2682 ; PC64LE-NEXT: li 3, 80
2683 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2684 ; PC64LE-NEXT: vmr 31, 3
2685 ; PC64LE-NEXT: xxlor 1, 62, 62
2686 ; PC64LE-NEXT: bl cos
2688 ; PC64LE-NEXT: xxlor 61, 1, 1
2689 ; PC64LE-NEXT: xxswapd 1, 62
2690 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2691 ; PC64LE-NEXT: bl cos
2693 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2694 ; PC64LE-NEXT: xxmrghd 62, 61, 1
2695 ; PC64LE-NEXT: xxlor 1, 63, 63
2696 ; PC64LE-NEXT: bl cos
2698 ; PC64LE-NEXT: xxlor 61, 1, 1
2699 ; PC64LE-NEXT: xxswapd 1, 63
2700 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2701 ; PC64LE-NEXT: bl cos
2703 ; PC64LE-NEXT: li 3, 80
2704 ; PC64LE-NEXT: vmr 2, 30
2705 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2706 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2707 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2708 ; PC64LE-NEXT: li 3, 64
2709 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2710 ; PC64LE-NEXT: li 3, 48
2711 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2712 ; PC64LE-NEXT: addi 1, 1, 96
2713 ; PC64LE-NEXT: ld 0, 16(1)
2714 ; PC64LE-NEXT: mtlr 0
2717 ; PC64LE9-LABEL: constrained_vector_cos_v4f64:
2718 ; PC64LE9: # %bb.0: # %entry
2719 ; PC64LE9-NEXT: mflr 0
2720 ; PC64LE9-NEXT: std 0, 16(1)
2721 ; PC64LE9-NEXT: stdu 1, -80(1)
2722 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2723 ; PC64LE9-NEXT: vmr 30, 2
2724 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2725 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2726 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2727 ; PC64LE9-NEXT: vmr 31, 3
2728 ; PC64LE9-NEXT: bl cos
2730 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2731 ; PC64LE9-NEXT: xxswapd 1, 62
2732 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2733 ; PC64LE9-NEXT: bl cos
2735 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2736 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2737 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2738 ; PC64LE9-NEXT: bl cos
2740 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2741 ; PC64LE9-NEXT: xxswapd 1, 63
2742 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2743 ; PC64LE9-NEXT: bl cos
2745 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2746 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2747 ; PC64LE9-NEXT: vmr 2, 30
2748 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2749 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2750 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2751 ; PC64LE9-NEXT: addi 1, 1, 80
2752 ; PC64LE9-NEXT: ld 0, 16(1)
2753 ; PC64LE9-NEXT: mtlr 0
2756 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64(
2758 metadata !"round.dynamic",
2759 metadata !"fpexcept.strict") #1
2760 ret <4 x double> %cos
2763 define <1 x float> @constrained_vector_exp_v1f32(<1 x float> %x) #0 {
2764 ; PC64LE-LABEL: constrained_vector_exp_v1f32:
2765 ; PC64LE: # %bb.0: # %entry
2766 ; PC64LE-NEXT: mflr 0
2767 ; PC64LE-NEXT: std 0, 16(1)
2768 ; PC64LE-NEXT: stdu 1, -32(1)
2769 ; PC64LE-NEXT: bl expf
2771 ; PC64LE-NEXT: addi 1, 1, 32
2772 ; PC64LE-NEXT: ld 0, 16(1)
2773 ; PC64LE-NEXT: mtlr 0
2776 ; PC64LE9-LABEL: constrained_vector_exp_v1f32:
2777 ; PC64LE9: # %bb.0: # %entry
2778 ; PC64LE9-NEXT: mflr 0
2779 ; PC64LE9-NEXT: std 0, 16(1)
2780 ; PC64LE9-NEXT: stdu 1, -32(1)
2781 ; PC64LE9-NEXT: bl expf
2783 ; PC64LE9-NEXT: addi 1, 1, 32
2784 ; PC64LE9-NEXT: ld 0, 16(1)
2785 ; PC64LE9-NEXT: mtlr 0
2788 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
2790 metadata !"round.dynamic",
2791 metadata !"fpexcept.strict") #1
2792 ret <1 x float> %exp
2795 define <2 x double> @constrained_vector_exp_v2f64(<2 x double> %x) #0 {
2796 ; PC64LE-LABEL: constrained_vector_exp_v2f64:
2797 ; PC64LE: # %bb.0: # %entry
2798 ; PC64LE-NEXT: mflr 0
2799 ; PC64LE-NEXT: std 0, 16(1)
2800 ; PC64LE-NEXT: stdu 1, -80(1)
2801 ; PC64LE-NEXT: li 3, 48
2802 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2803 ; PC64LE-NEXT: li 3, 64
2804 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2805 ; PC64LE-NEXT: vmr 31, 2
2806 ; PC64LE-NEXT: xxlor 1, 63, 63
2807 ; PC64LE-NEXT: bl exp
2809 ; PC64LE-NEXT: xxlor 62, 1, 1
2810 ; PC64LE-NEXT: xxswapd 1, 63
2811 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2812 ; PC64LE-NEXT: bl exp
2814 ; PC64LE-NEXT: li 3, 64
2815 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2816 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2817 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2818 ; PC64LE-NEXT: li 3, 48
2819 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2820 ; PC64LE-NEXT: addi 1, 1, 80
2821 ; PC64LE-NEXT: ld 0, 16(1)
2822 ; PC64LE-NEXT: mtlr 0
2825 ; PC64LE9-LABEL: constrained_vector_exp_v2f64:
2826 ; PC64LE9: # %bb.0: # %entry
2827 ; PC64LE9-NEXT: mflr 0
2828 ; PC64LE9-NEXT: std 0, 16(1)
2829 ; PC64LE9-NEXT: stdu 1, -64(1)
2830 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2831 ; PC64LE9-NEXT: vmr 31, 2
2832 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2833 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2834 ; PC64LE9-NEXT: bl exp
2836 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2837 ; PC64LE9-NEXT: xxswapd 1, 63
2838 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2839 ; PC64LE9-NEXT: bl exp
2841 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2842 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2843 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2844 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2845 ; PC64LE9-NEXT: addi 1, 1, 64
2846 ; PC64LE9-NEXT: ld 0, 16(1)
2847 ; PC64LE9-NEXT: mtlr 0
2850 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
2852 metadata !"round.dynamic",
2853 metadata !"fpexcept.strict") #1
2854 ret <2 x double> %exp
2857 define <3 x float> @constrained_vector_exp_v3f32(<3 x float> %x) #0 {
2858 ; PC64LE-LABEL: constrained_vector_exp_v3f32:
2859 ; PC64LE: # %bb.0: # %entry
2860 ; PC64LE-NEXT: mflr 0
2861 ; PC64LE-NEXT: std 0, 16(1)
2862 ; PC64LE-NEXT: stdu 1, -80(1)
2863 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2864 ; PC64LE-NEXT: li 3, 48
2865 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2866 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2867 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2868 ; PC64LE-NEXT: vmr 31, 2
2869 ; PC64LE-NEXT: xscvspdpn 1, 0
2870 ; PC64LE-NEXT: bl expf
2872 ; PC64LE-NEXT: xxswapd 0, 63
2873 ; PC64LE-NEXT: fmr 31, 1
2874 ; PC64LE-NEXT: xscvspdpn 1, 0
2875 ; PC64LE-NEXT: bl expf
2877 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2878 ; PC64LE-NEXT: fmr 30, 1
2879 ; PC64LE-NEXT: xscvspdpn 1, 0
2880 ; PC64LE-NEXT: bl expf
2882 ; PC64LE-NEXT: xscvdpspn 34, 30
2883 ; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha
2884 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2885 ; PC64LE-NEXT: xscvdpspn 35, 1
2886 ; PC64LE-NEXT: addi 3, 3, .LCPI52_0@toc@l
2887 ; PC64LE-NEXT: lvx 4, 0, 3
2888 ; PC64LE-NEXT: li 3, 48
2889 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2890 ; PC64LE-NEXT: vmrghw 2, 2, 3
2891 ; PC64LE-NEXT: xscvdpspn 35, 31
2892 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2893 ; PC64LE-NEXT: vperm 2, 3, 2, 4
2894 ; PC64LE-NEXT: addi 1, 1, 80
2895 ; PC64LE-NEXT: ld 0, 16(1)
2896 ; PC64LE-NEXT: mtlr 0
2899 ; PC64LE9-LABEL: constrained_vector_exp_v3f32:
2900 ; PC64LE9: # %bb.0: # %entry
2901 ; PC64LE9-NEXT: mflr 0
2902 ; PC64LE9-NEXT: std 0, 16(1)
2903 ; PC64LE9-NEXT: stdu 1, -64(1)
2904 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2905 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2906 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2907 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2908 ; PC64LE9-NEXT: xscvspdpn 1, 0
2909 ; PC64LE9-NEXT: vmr 31, 2
2910 ; PC64LE9-NEXT: bl expf
2912 ; PC64LE9-NEXT: xxswapd 0, 63
2913 ; PC64LE9-NEXT: fmr 31, 1
2914 ; PC64LE9-NEXT: xscvspdpn 1, 0
2915 ; PC64LE9-NEXT: bl expf
2917 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2918 ; PC64LE9-NEXT: fmr 30, 1
2919 ; PC64LE9-NEXT: xscvspdpn 1, 0
2920 ; PC64LE9-NEXT: bl expf
2922 ; PC64LE9-NEXT: xscvdpspn 34, 1
2923 ; PC64LE9-NEXT: xscvdpspn 35, 30
2924 ; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha
2925 ; PC64LE9-NEXT: xscvdpspn 36, 31
2926 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2927 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2928 ; PC64LE9-NEXT: addi 3, 3, .LCPI52_0@toc@l
2929 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2930 ; PC64LE9-NEXT: vmrghw 2, 3, 2
2931 ; PC64LE9-NEXT: lxv 35, 0(3)
2932 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
2933 ; PC64LE9-NEXT: addi 1, 1, 64
2934 ; PC64LE9-NEXT: ld 0, 16(1)
2935 ; PC64LE9-NEXT: mtlr 0
2938 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
2940 metadata !"round.dynamic",
2941 metadata !"fpexcept.strict") #1
2942 ret <3 x float> %exp
2945 define <3 x double> @constrained_vector_exp_v3f64(<3 x double> %x) #0 {
2946 ; PC64LE-LABEL: constrained_vector_exp_v3f64:
2947 ; PC64LE: # %bb.0: # %entry
2948 ; PC64LE-NEXT: mflr 0
2949 ; PC64LE-NEXT: std 0, 16(1)
2950 ; PC64LE-NEXT: stdu 1, -80(1)
2951 ; PC64LE-NEXT: li 3, 48
2952 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2953 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2954 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2955 ; PC64LE-NEXT: fmr 31, 3
2956 ; PC64LE-NEXT: fmr 30, 2
2957 ; PC64LE-NEXT: bl exp
2959 ; PC64LE-NEXT: xxlor 63, 1, 1
2960 ; PC64LE-NEXT: fmr 1, 30
2961 ; PC64LE-NEXT: bl exp
2963 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2964 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2965 ; PC64LE-NEXT: fmr 1, 31
2966 ; PC64LE-NEXT: bl exp
2968 ; PC64LE-NEXT: xxswapd 0, 63
2969 ; PC64LE-NEXT: li 3, 48
2970 ; PC64LE-NEXT: xxlor 2, 63, 63
2971 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2972 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2973 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2974 ; PC64LE-NEXT: fmr 3, 1
2975 ; PC64LE-NEXT: fmr 1, 0
2976 ; PC64LE-NEXT: addi 1, 1, 80
2977 ; PC64LE-NEXT: ld 0, 16(1)
2978 ; PC64LE-NEXT: mtlr 0
2981 ; PC64LE9-LABEL: constrained_vector_exp_v3f64:
2982 ; PC64LE9: # %bb.0: # %entry
2983 ; PC64LE9-NEXT: mflr 0
2984 ; PC64LE9-NEXT: std 0, 16(1)
2985 ; PC64LE9-NEXT: stdu 1, -64(1)
2986 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2987 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2988 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2989 ; PC64LE9-NEXT: fmr 31, 3
2990 ; PC64LE9-NEXT: fmr 30, 2
2991 ; PC64LE9-NEXT: bl exp
2993 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2994 ; PC64LE9-NEXT: fmr 1, 30
2995 ; PC64LE9-NEXT: bl exp
2997 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2998 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2999 ; PC64LE9-NEXT: fmr 1, 31
3000 ; PC64LE9-NEXT: bl exp
3002 ; PC64LE9-NEXT: fmr 3, 1
3003 ; PC64LE9-NEXT: xxswapd 1, 63
3004 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3005 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3006 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3007 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3008 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3009 ; PC64LE9-NEXT: addi 1, 1, 64
3010 ; PC64LE9-NEXT: ld 0, 16(1)
3011 ; PC64LE9-NEXT: mtlr 0
3014 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
3016 metadata !"round.dynamic",
3017 metadata !"fpexcept.strict") #1
3018 ret <3 x double> %exp
3021 define <4 x double> @constrained_vector_exp_v4f64(<4 x double> %x) #0 {
3022 ; PC64LE-LABEL: constrained_vector_exp_v4f64:
3023 ; PC64LE: # %bb.0: # %entry
3024 ; PC64LE-NEXT: mflr 0
3025 ; PC64LE-NEXT: std 0, 16(1)
3026 ; PC64LE-NEXT: stdu 1, -96(1)
3027 ; PC64LE-NEXT: li 3, 48
3028 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3029 ; PC64LE-NEXT: li 3, 64
3030 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3031 ; PC64LE-NEXT: vmr 30, 2
3032 ; PC64LE-NEXT: li 3, 80
3033 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3034 ; PC64LE-NEXT: vmr 31, 3
3035 ; PC64LE-NEXT: xxlor 1, 62, 62
3036 ; PC64LE-NEXT: bl exp
3038 ; PC64LE-NEXT: xxlor 61, 1, 1
3039 ; PC64LE-NEXT: xxswapd 1, 62
3040 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3041 ; PC64LE-NEXT: bl exp
3043 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3044 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3045 ; PC64LE-NEXT: xxlor 1, 63, 63
3046 ; PC64LE-NEXT: bl exp
3048 ; PC64LE-NEXT: xxlor 61, 1, 1
3049 ; PC64LE-NEXT: xxswapd 1, 63
3050 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3051 ; PC64LE-NEXT: bl exp
3053 ; PC64LE-NEXT: li 3, 80
3054 ; PC64LE-NEXT: vmr 2, 30
3055 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3056 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3057 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3058 ; PC64LE-NEXT: li 3, 64
3059 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3060 ; PC64LE-NEXT: li 3, 48
3061 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3062 ; PC64LE-NEXT: addi 1, 1, 96
3063 ; PC64LE-NEXT: ld 0, 16(1)
3064 ; PC64LE-NEXT: mtlr 0
3067 ; PC64LE9-LABEL: constrained_vector_exp_v4f64:
3068 ; PC64LE9: # %bb.0: # %entry
3069 ; PC64LE9-NEXT: mflr 0
3070 ; PC64LE9-NEXT: std 0, 16(1)
3071 ; PC64LE9-NEXT: stdu 1, -80(1)
3072 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3073 ; PC64LE9-NEXT: vmr 30, 2
3074 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3075 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3076 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3077 ; PC64LE9-NEXT: vmr 31, 3
3078 ; PC64LE9-NEXT: bl exp
3080 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3081 ; PC64LE9-NEXT: xxswapd 1, 62
3082 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3083 ; PC64LE9-NEXT: bl exp
3085 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3086 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3087 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3088 ; PC64LE9-NEXT: bl exp
3090 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3091 ; PC64LE9-NEXT: xxswapd 1, 63
3092 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3093 ; PC64LE9-NEXT: bl exp
3095 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3096 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3097 ; PC64LE9-NEXT: vmr 2, 30
3098 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3099 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3100 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3101 ; PC64LE9-NEXT: addi 1, 1, 80
3102 ; PC64LE9-NEXT: ld 0, 16(1)
3103 ; PC64LE9-NEXT: mtlr 0
3106 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64(
3108 metadata !"round.dynamic",
3109 metadata !"fpexcept.strict") #1
3110 ret <4 x double> %exp
3113 define <1 x float> @constrained_vector_exp2_v1f32(<1 x float> %x) #0 {
3114 ; PC64LE-LABEL: constrained_vector_exp2_v1f32:
3115 ; PC64LE: # %bb.0: # %entry
3116 ; PC64LE-NEXT: mflr 0
3117 ; PC64LE-NEXT: std 0, 16(1)
3118 ; PC64LE-NEXT: stdu 1, -32(1)
3119 ; PC64LE-NEXT: bl exp2f
3121 ; PC64LE-NEXT: addi 1, 1, 32
3122 ; PC64LE-NEXT: ld 0, 16(1)
3123 ; PC64LE-NEXT: mtlr 0
3126 ; PC64LE9-LABEL: constrained_vector_exp2_v1f32:
3127 ; PC64LE9: # %bb.0: # %entry
3128 ; PC64LE9-NEXT: mflr 0
3129 ; PC64LE9-NEXT: std 0, 16(1)
3130 ; PC64LE9-NEXT: stdu 1, -32(1)
3131 ; PC64LE9-NEXT: bl exp2f
3133 ; PC64LE9-NEXT: addi 1, 1, 32
3134 ; PC64LE9-NEXT: ld 0, 16(1)
3135 ; PC64LE9-NEXT: mtlr 0
3138 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
3140 metadata !"round.dynamic",
3141 metadata !"fpexcept.strict") #1
3142 ret <1 x float> %exp2
3145 define <2 x double> @constrained_vector_exp2_v2f64(<2 x double> %x) #0 {
3146 ; PC64LE-LABEL: constrained_vector_exp2_v2f64:
3147 ; PC64LE: # %bb.0: # %entry
3148 ; PC64LE-NEXT: mflr 0
3149 ; PC64LE-NEXT: std 0, 16(1)
3150 ; PC64LE-NEXT: stdu 1, -80(1)
3151 ; PC64LE-NEXT: li 3, 48
3152 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3153 ; PC64LE-NEXT: li 3, 64
3154 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3155 ; PC64LE-NEXT: vmr 31, 2
3156 ; PC64LE-NEXT: xxlor 1, 63, 63
3157 ; PC64LE-NEXT: bl exp2
3159 ; PC64LE-NEXT: xxlor 62, 1, 1
3160 ; PC64LE-NEXT: xxswapd 1, 63
3161 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3162 ; PC64LE-NEXT: bl exp2
3164 ; PC64LE-NEXT: li 3, 64
3165 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3166 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3167 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3168 ; PC64LE-NEXT: li 3, 48
3169 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3170 ; PC64LE-NEXT: addi 1, 1, 80
3171 ; PC64LE-NEXT: ld 0, 16(1)
3172 ; PC64LE-NEXT: mtlr 0
3175 ; PC64LE9-LABEL: constrained_vector_exp2_v2f64:
3176 ; PC64LE9: # %bb.0: # %entry
3177 ; PC64LE9-NEXT: mflr 0
3178 ; PC64LE9-NEXT: std 0, 16(1)
3179 ; PC64LE9-NEXT: stdu 1, -64(1)
3180 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3181 ; PC64LE9-NEXT: vmr 31, 2
3182 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3183 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3184 ; PC64LE9-NEXT: bl exp2
3186 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3187 ; PC64LE9-NEXT: xxswapd 1, 63
3188 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3189 ; PC64LE9-NEXT: bl exp2
3191 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3192 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3193 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3194 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3195 ; PC64LE9-NEXT: addi 1, 1, 64
3196 ; PC64LE9-NEXT: ld 0, 16(1)
3197 ; PC64LE9-NEXT: mtlr 0
3200 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
3202 metadata !"round.dynamic",
3203 metadata !"fpexcept.strict") #1
3204 ret <2 x double> %exp2
3207 define <3 x float> @constrained_vector_exp2_v3f32(<3 x float> %x) #0 {
3208 ; PC64LE-LABEL: constrained_vector_exp2_v3f32:
3209 ; PC64LE: # %bb.0: # %entry
3210 ; PC64LE-NEXT: mflr 0
3211 ; PC64LE-NEXT: std 0, 16(1)
3212 ; PC64LE-NEXT: stdu 1, -80(1)
3213 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3214 ; PC64LE-NEXT: li 3, 48
3215 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3216 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3217 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3218 ; PC64LE-NEXT: vmr 31, 2
3219 ; PC64LE-NEXT: xscvspdpn 1, 0
3220 ; PC64LE-NEXT: bl exp2f
3222 ; PC64LE-NEXT: xxswapd 0, 63
3223 ; PC64LE-NEXT: fmr 31, 1
3224 ; PC64LE-NEXT: xscvspdpn 1, 0
3225 ; PC64LE-NEXT: bl exp2f
3227 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3228 ; PC64LE-NEXT: fmr 30, 1
3229 ; PC64LE-NEXT: xscvspdpn 1, 0
3230 ; PC64LE-NEXT: bl exp2f
3232 ; PC64LE-NEXT: xscvdpspn 34, 30
3233 ; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3234 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3235 ; PC64LE-NEXT: xscvdpspn 35, 1
3236 ; PC64LE-NEXT: addi 3, 3, .LCPI57_0@toc@l
3237 ; PC64LE-NEXT: lvx 4, 0, 3
3238 ; PC64LE-NEXT: li 3, 48
3239 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3240 ; PC64LE-NEXT: vmrghw 2, 2, 3
3241 ; PC64LE-NEXT: xscvdpspn 35, 31
3242 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3243 ; PC64LE-NEXT: vperm 2, 3, 2, 4
3244 ; PC64LE-NEXT: addi 1, 1, 80
3245 ; PC64LE-NEXT: ld 0, 16(1)
3246 ; PC64LE-NEXT: mtlr 0
3249 ; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
3250 ; PC64LE9: # %bb.0: # %entry
3251 ; PC64LE9-NEXT: mflr 0
3252 ; PC64LE9-NEXT: std 0, 16(1)
3253 ; PC64LE9-NEXT: stdu 1, -64(1)
3254 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3255 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3256 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3257 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3258 ; PC64LE9-NEXT: xscvspdpn 1, 0
3259 ; PC64LE9-NEXT: vmr 31, 2
3260 ; PC64LE9-NEXT: bl exp2f
3262 ; PC64LE9-NEXT: xxswapd 0, 63
3263 ; PC64LE9-NEXT: fmr 31, 1
3264 ; PC64LE9-NEXT: xscvspdpn 1, 0
3265 ; PC64LE9-NEXT: bl exp2f
3267 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3268 ; PC64LE9-NEXT: fmr 30, 1
3269 ; PC64LE9-NEXT: xscvspdpn 1, 0
3270 ; PC64LE9-NEXT: bl exp2f
3272 ; PC64LE9-NEXT: xscvdpspn 34, 1
3273 ; PC64LE9-NEXT: xscvdpspn 35, 30
3274 ; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3275 ; PC64LE9-NEXT: xscvdpspn 36, 31
3276 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3277 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3278 ; PC64LE9-NEXT: addi 3, 3, .LCPI57_0@toc@l
3279 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3280 ; PC64LE9-NEXT: vmrghw 2, 3, 2
3281 ; PC64LE9-NEXT: lxv 35, 0(3)
3282 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
3283 ; PC64LE9-NEXT: addi 1, 1, 64
3284 ; PC64LE9-NEXT: ld 0, 16(1)
3285 ; PC64LE9-NEXT: mtlr 0
3288 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
3290 metadata !"round.dynamic",
3291 metadata !"fpexcept.strict") #1
3292 ret <3 x float> %exp2
3295 define <3 x double> @constrained_vector_exp2_v3f64(<3 x double> %x) #0 {
3296 ; PC64LE-LABEL: constrained_vector_exp2_v3f64:
3297 ; PC64LE: # %bb.0: # %entry
3298 ; PC64LE-NEXT: mflr 0
3299 ; PC64LE-NEXT: std 0, 16(1)
3300 ; PC64LE-NEXT: stdu 1, -80(1)
3301 ; PC64LE-NEXT: li 3, 48
3302 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3303 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3304 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3305 ; PC64LE-NEXT: fmr 31, 3
3306 ; PC64LE-NEXT: fmr 30, 2
3307 ; PC64LE-NEXT: bl exp2
3309 ; PC64LE-NEXT: xxlor 63, 1, 1
3310 ; PC64LE-NEXT: fmr 1, 30
3311 ; PC64LE-NEXT: bl exp2
3313 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3314 ; PC64LE-NEXT: xxmrghd 63, 1, 63
3315 ; PC64LE-NEXT: fmr 1, 31
3316 ; PC64LE-NEXT: bl exp2
3318 ; PC64LE-NEXT: xxswapd 0, 63
3319 ; PC64LE-NEXT: li 3, 48
3320 ; PC64LE-NEXT: xxlor 2, 63, 63
3321 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3322 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3323 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3324 ; PC64LE-NEXT: fmr 3, 1
3325 ; PC64LE-NEXT: fmr 1, 0
3326 ; PC64LE-NEXT: addi 1, 1, 80
3327 ; PC64LE-NEXT: ld 0, 16(1)
3328 ; PC64LE-NEXT: mtlr 0
3331 ; PC64LE9-LABEL: constrained_vector_exp2_v3f64:
3332 ; PC64LE9: # %bb.0: # %entry
3333 ; PC64LE9-NEXT: mflr 0
3334 ; PC64LE9-NEXT: std 0, 16(1)
3335 ; PC64LE9-NEXT: stdu 1, -64(1)
3336 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3337 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3338 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3339 ; PC64LE9-NEXT: fmr 31, 3
3340 ; PC64LE9-NEXT: fmr 30, 2
3341 ; PC64LE9-NEXT: bl exp2
3343 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3344 ; PC64LE9-NEXT: fmr 1, 30
3345 ; PC64LE9-NEXT: bl exp2
3347 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3348 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3349 ; PC64LE9-NEXT: fmr 1, 31
3350 ; PC64LE9-NEXT: bl exp2
3352 ; PC64LE9-NEXT: fmr 3, 1
3353 ; PC64LE9-NEXT: xxswapd 1, 63
3354 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3355 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3356 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3357 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3358 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3359 ; PC64LE9-NEXT: addi 1, 1, 64
3360 ; PC64LE9-NEXT: ld 0, 16(1)
3361 ; PC64LE9-NEXT: mtlr 0
3364 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
3366 metadata !"round.dynamic",
3367 metadata !"fpexcept.strict") #1
3368 ret <3 x double> %exp2
3371 define <4 x double> @constrained_vector_exp2_v4f64(<4 x double> %x) #0 {
3372 ; PC64LE-LABEL: constrained_vector_exp2_v4f64:
3373 ; PC64LE: # %bb.0: # %entry
3374 ; PC64LE-NEXT: mflr 0
3375 ; PC64LE-NEXT: std 0, 16(1)
3376 ; PC64LE-NEXT: stdu 1, -96(1)
3377 ; PC64LE-NEXT: li 3, 48
3378 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3379 ; PC64LE-NEXT: li 3, 64
3380 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3381 ; PC64LE-NEXT: vmr 30, 2
3382 ; PC64LE-NEXT: li 3, 80
3383 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3384 ; PC64LE-NEXT: vmr 31, 3
3385 ; PC64LE-NEXT: xxlor 1, 62, 62
3386 ; PC64LE-NEXT: bl exp2
3388 ; PC64LE-NEXT: xxlor 61, 1, 1
3389 ; PC64LE-NEXT: xxswapd 1, 62
3390 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3391 ; PC64LE-NEXT: bl exp2
3393 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3394 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3395 ; PC64LE-NEXT: xxlor 1, 63, 63
3396 ; PC64LE-NEXT: bl exp2
3398 ; PC64LE-NEXT: xxlor 61, 1, 1
3399 ; PC64LE-NEXT: xxswapd 1, 63
3400 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3401 ; PC64LE-NEXT: bl exp2
3403 ; PC64LE-NEXT: li 3, 80
3404 ; PC64LE-NEXT: vmr 2, 30
3405 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3406 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3407 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3408 ; PC64LE-NEXT: li 3, 64
3409 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3410 ; PC64LE-NEXT: li 3, 48
3411 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3412 ; PC64LE-NEXT: addi 1, 1, 96
3413 ; PC64LE-NEXT: ld 0, 16(1)
3414 ; PC64LE-NEXT: mtlr 0
3417 ; PC64LE9-LABEL: constrained_vector_exp2_v4f64:
3418 ; PC64LE9: # %bb.0: # %entry
3419 ; PC64LE9-NEXT: mflr 0
3420 ; PC64LE9-NEXT: std 0, 16(1)
3421 ; PC64LE9-NEXT: stdu 1, -80(1)
3422 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3423 ; PC64LE9-NEXT: vmr 30, 2
3424 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3425 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3426 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3427 ; PC64LE9-NEXT: vmr 31, 3
3428 ; PC64LE9-NEXT: bl exp2
3430 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3431 ; PC64LE9-NEXT: xxswapd 1, 62
3432 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3433 ; PC64LE9-NEXT: bl exp2
3435 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3436 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3437 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3438 ; PC64LE9-NEXT: bl exp2
3440 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3441 ; PC64LE9-NEXT: xxswapd 1, 63
3442 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3443 ; PC64LE9-NEXT: bl exp2
3445 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3446 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3447 ; PC64LE9-NEXT: vmr 2, 30
3448 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3449 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3450 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3451 ; PC64LE9-NEXT: addi 1, 1, 80
3452 ; PC64LE9-NEXT: ld 0, 16(1)
3453 ; PC64LE9-NEXT: mtlr 0
3456 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64(
3458 metadata !"round.dynamic",
3459 metadata !"fpexcept.strict") #1
3460 ret <4 x double> %exp2
3463 define <1 x float> @constrained_vector_log_v1f32(<1 x float> %x) #0 {
3464 ; PC64LE-LABEL: constrained_vector_log_v1f32:
3465 ; PC64LE: # %bb.0: # %entry
3466 ; PC64LE-NEXT: mflr 0
3467 ; PC64LE-NEXT: std 0, 16(1)
3468 ; PC64LE-NEXT: stdu 1, -32(1)
3469 ; PC64LE-NEXT: bl logf
3471 ; PC64LE-NEXT: addi 1, 1, 32
3472 ; PC64LE-NEXT: ld 0, 16(1)
3473 ; PC64LE-NEXT: mtlr 0
3476 ; PC64LE9-LABEL: constrained_vector_log_v1f32:
3477 ; PC64LE9: # %bb.0: # %entry
3478 ; PC64LE9-NEXT: mflr 0
3479 ; PC64LE9-NEXT: std 0, 16(1)
3480 ; PC64LE9-NEXT: stdu 1, -32(1)
3481 ; PC64LE9-NEXT: bl logf
3483 ; PC64LE9-NEXT: addi 1, 1, 32
3484 ; PC64LE9-NEXT: ld 0, 16(1)
3485 ; PC64LE9-NEXT: mtlr 0
3488 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
3490 metadata !"round.dynamic",
3491 metadata !"fpexcept.strict") #1
3492 ret <1 x float> %log
3495 define <2 x double> @constrained_vector_log_v2f64(<2 x double> %x) #0 {
3496 ; PC64LE-LABEL: constrained_vector_log_v2f64:
3497 ; PC64LE: # %bb.0: # %entry
3498 ; PC64LE-NEXT: mflr 0
3499 ; PC64LE-NEXT: std 0, 16(1)
3500 ; PC64LE-NEXT: stdu 1, -80(1)
3501 ; PC64LE-NEXT: li 3, 48
3502 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3503 ; PC64LE-NEXT: li 3, 64
3504 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3505 ; PC64LE-NEXT: vmr 31, 2
3506 ; PC64LE-NEXT: xxlor 1, 63, 63
3507 ; PC64LE-NEXT: bl log
3509 ; PC64LE-NEXT: xxlor 62, 1, 1
3510 ; PC64LE-NEXT: xxswapd 1, 63
3511 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3512 ; PC64LE-NEXT: bl log
3514 ; PC64LE-NEXT: li 3, 64
3515 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3516 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3517 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3518 ; PC64LE-NEXT: li 3, 48
3519 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3520 ; PC64LE-NEXT: addi 1, 1, 80
3521 ; PC64LE-NEXT: ld 0, 16(1)
3522 ; PC64LE-NEXT: mtlr 0
3525 ; PC64LE9-LABEL: constrained_vector_log_v2f64:
3526 ; PC64LE9: # %bb.0: # %entry
3527 ; PC64LE9-NEXT: mflr 0
3528 ; PC64LE9-NEXT: std 0, 16(1)
3529 ; PC64LE9-NEXT: stdu 1, -64(1)
3530 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3531 ; PC64LE9-NEXT: vmr 31, 2
3532 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3533 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3534 ; PC64LE9-NEXT: bl log
3536 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3537 ; PC64LE9-NEXT: xxswapd 1, 63
3538 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3539 ; PC64LE9-NEXT: bl log
3541 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3542 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3543 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3544 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3545 ; PC64LE9-NEXT: addi 1, 1, 64
3546 ; PC64LE9-NEXT: ld 0, 16(1)
3547 ; PC64LE9-NEXT: mtlr 0
3550 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
3552 metadata !"round.dynamic",
3553 metadata !"fpexcept.strict") #1
3554 ret <2 x double> %log
3557 define <3 x float> @constrained_vector_log_v3f32(<3 x float> %x) #0 {
3558 ; PC64LE-LABEL: constrained_vector_log_v3f32:
3559 ; PC64LE: # %bb.0: # %entry
3560 ; PC64LE-NEXT: mflr 0
3561 ; PC64LE-NEXT: std 0, 16(1)
3562 ; PC64LE-NEXT: stdu 1, -80(1)
3563 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3564 ; PC64LE-NEXT: li 3, 48
3565 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3566 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3567 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3568 ; PC64LE-NEXT: vmr 31, 2
3569 ; PC64LE-NEXT: xscvspdpn 1, 0
3570 ; PC64LE-NEXT: bl logf
3572 ; PC64LE-NEXT: xxswapd 0, 63
3573 ; PC64LE-NEXT: fmr 31, 1
3574 ; PC64LE-NEXT: xscvspdpn 1, 0
3575 ; PC64LE-NEXT: bl logf
3577 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3578 ; PC64LE-NEXT: fmr 30, 1
3579 ; PC64LE-NEXT: xscvspdpn 1, 0
3580 ; PC64LE-NEXT: bl logf
3582 ; PC64LE-NEXT: xscvdpspn 34, 30
3583 ; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha
3584 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3585 ; PC64LE-NEXT: xscvdpspn 35, 1
3586 ; PC64LE-NEXT: addi 3, 3, .LCPI62_0@toc@l
3587 ; PC64LE-NEXT: lvx 4, 0, 3
3588 ; PC64LE-NEXT: li 3, 48
3589 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3590 ; PC64LE-NEXT: vmrghw 2, 2, 3
3591 ; PC64LE-NEXT: xscvdpspn 35, 31
3592 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3593 ; PC64LE-NEXT: vperm 2, 3, 2, 4
3594 ; PC64LE-NEXT: addi 1, 1, 80
3595 ; PC64LE-NEXT: ld 0, 16(1)
3596 ; PC64LE-NEXT: mtlr 0
3599 ; PC64LE9-LABEL: constrained_vector_log_v3f32:
3600 ; PC64LE9: # %bb.0: # %entry
3601 ; PC64LE9-NEXT: mflr 0
3602 ; PC64LE9-NEXT: std 0, 16(1)
3603 ; PC64LE9-NEXT: stdu 1, -64(1)
3604 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3605 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3606 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3607 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3608 ; PC64LE9-NEXT: xscvspdpn 1, 0
3609 ; PC64LE9-NEXT: vmr 31, 2
3610 ; PC64LE9-NEXT: bl logf
3612 ; PC64LE9-NEXT: xxswapd 0, 63
3613 ; PC64LE9-NEXT: fmr 31, 1
3614 ; PC64LE9-NEXT: xscvspdpn 1, 0
3615 ; PC64LE9-NEXT: bl logf
3617 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3618 ; PC64LE9-NEXT: fmr 30, 1
3619 ; PC64LE9-NEXT: xscvspdpn 1, 0
3620 ; PC64LE9-NEXT: bl logf
3622 ; PC64LE9-NEXT: xscvdpspn 34, 1
3623 ; PC64LE9-NEXT: xscvdpspn 35, 30
3624 ; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha
3625 ; PC64LE9-NEXT: xscvdpspn 36, 31
3626 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3627 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3628 ; PC64LE9-NEXT: addi 3, 3, .LCPI62_0@toc@l
3629 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3630 ; PC64LE9-NEXT: vmrghw 2, 3, 2
3631 ; PC64LE9-NEXT: lxv 35, 0(3)
3632 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
3633 ; PC64LE9-NEXT: addi 1, 1, 64
3634 ; PC64LE9-NEXT: ld 0, 16(1)
3635 ; PC64LE9-NEXT: mtlr 0
3638 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
3640 metadata !"round.dynamic",
3641 metadata !"fpexcept.strict") #1
3642 ret <3 x float> %log
3645 define <3 x double> @constrained_vector_log_v3f64(<3 x double> %x) #0 {
3646 ; PC64LE-LABEL: constrained_vector_log_v3f64:
3647 ; PC64LE: # %bb.0: # %entry
3648 ; PC64LE-NEXT: mflr 0
3649 ; PC64LE-NEXT: std 0, 16(1)
3650 ; PC64LE-NEXT: stdu 1, -80(1)
3651 ; PC64LE-NEXT: li 3, 48
3652 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3653 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3654 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3655 ; PC64LE-NEXT: fmr 31, 3
3656 ; PC64LE-NEXT: fmr 30, 2
3657 ; PC64LE-NEXT: bl log
3659 ; PC64LE-NEXT: xxlor 63, 1, 1
3660 ; PC64LE-NEXT: fmr 1, 30
3661 ; PC64LE-NEXT: bl log
3663 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3664 ; PC64LE-NEXT: xxmrghd 63, 1, 63
3665 ; PC64LE-NEXT: fmr 1, 31
3666 ; PC64LE-NEXT: bl log
3668 ; PC64LE-NEXT: xxswapd 0, 63
3669 ; PC64LE-NEXT: li 3, 48
3670 ; PC64LE-NEXT: xxlor 2, 63, 63
3671 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3672 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3673 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3674 ; PC64LE-NEXT: fmr 3, 1
3675 ; PC64LE-NEXT: fmr 1, 0
3676 ; PC64LE-NEXT: addi 1, 1, 80
3677 ; PC64LE-NEXT: ld 0, 16(1)
3678 ; PC64LE-NEXT: mtlr 0
3681 ; PC64LE9-LABEL: constrained_vector_log_v3f64:
3682 ; PC64LE9: # %bb.0: # %entry
3683 ; PC64LE9-NEXT: mflr 0
3684 ; PC64LE9-NEXT: std 0, 16(1)
3685 ; PC64LE9-NEXT: stdu 1, -64(1)
3686 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3687 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3688 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3689 ; PC64LE9-NEXT: fmr 31, 3
3690 ; PC64LE9-NEXT: fmr 30, 2
3691 ; PC64LE9-NEXT: bl log
3693 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3694 ; PC64LE9-NEXT: fmr 1, 30
3695 ; PC64LE9-NEXT: bl log
3697 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3698 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3699 ; PC64LE9-NEXT: fmr 1, 31
3700 ; PC64LE9-NEXT: bl log
3702 ; PC64LE9-NEXT: fmr 3, 1
3703 ; PC64LE9-NEXT: xxswapd 1, 63
3704 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3705 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3706 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3707 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3708 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3709 ; PC64LE9-NEXT: addi 1, 1, 64
3710 ; PC64LE9-NEXT: ld 0, 16(1)
3711 ; PC64LE9-NEXT: mtlr 0
3714 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
3716 metadata !"round.dynamic",
3717 metadata !"fpexcept.strict") #1
3718 ret <3 x double> %log
3721 define <4 x double> @constrained_vector_log_v4f64(<4 x double> %x) #0 {
3722 ; PC64LE-LABEL: constrained_vector_log_v4f64:
3723 ; PC64LE: # %bb.0: # %entry
3724 ; PC64LE-NEXT: mflr 0
3725 ; PC64LE-NEXT: std 0, 16(1)
3726 ; PC64LE-NEXT: stdu 1, -96(1)
3727 ; PC64LE-NEXT: li 3, 48
3728 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3729 ; PC64LE-NEXT: li 3, 64
3730 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3731 ; PC64LE-NEXT: vmr 30, 2
3732 ; PC64LE-NEXT: li 3, 80
3733 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3734 ; PC64LE-NEXT: vmr 31, 3
3735 ; PC64LE-NEXT: xxlor 1, 62, 62
3736 ; PC64LE-NEXT: bl log
3738 ; PC64LE-NEXT: xxlor 61, 1, 1
3739 ; PC64LE-NEXT: xxswapd 1, 62
3740 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3741 ; PC64LE-NEXT: bl log
3743 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3744 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3745 ; PC64LE-NEXT: xxlor 1, 63, 63
3746 ; PC64LE-NEXT: bl log
3748 ; PC64LE-NEXT: xxlor 61, 1, 1
3749 ; PC64LE-NEXT: xxswapd 1, 63
3750 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3751 ; PC64LE-NEXT: bl log
3753 ; PC64LE-NEXT: li 3, 80
3754 ; PC64LE-NEXT: vmr 2, 30
3755 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3756 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3757 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3758 ; PC64LE-NEXT: li 3, 64
3759 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3760 ; PC64LE-NEXT: li 3, 48
3761 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3762 ; PC64LE-NEXT: addi 1, 1, 96
3763 ; PC64LE-NEXT: ld 0, 16(1)
3764 ; PC64LE-NEXT: mtlr 0
3767 ; PC64LE9-LABEL: constrained_vector_log_v4f64:
3768 ; PC64LE9: # %bb.0: # %entry
3769 ; PC64LE9-NEXT: mflr 0
3770 ; PC64LE9-NEXT: std 0, 16(1)
3771 ; PC64LE9-NEXT: stdu 1, -80(1)
3772 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3773 ; PC64LE9-NEXT: vmr 30, 2
3774 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3775 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3776 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3777 ; PC64LE9-NEXT: vmr 31, 3
3778 ; PC64LE9-NEXT: bl log
3780 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3781 ; PC64LE9-NEXT: xxswapd 1, 62
3782 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3783 ; PC64LE9-NEXT: bl log
3785 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3786 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3787 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3788 ; PC64LE9-NEXT: bl log
3790 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3791 ; PC64LE9-NEXT: xxswapd 1, 63
3792 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3793 ; PC64LE9-NEXT: bl log
3795 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3796 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3797 ; PC64LE9-NEXT: vmr 2, 30
3798 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3799 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3800 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3801 ; PC64LE9-NEXT: addi 1, 1, 80
3802 ; PC64LE9-NEXT: ld 0, 16(1)
3803 ; PC64LE9-NEXT: mtlr 0
3806 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64(
3808 metadata !"round.dynamic",
3809 metadata !"fpexcept.strict") #1
3810 ret <4 x double> %log
3813 define <1 x float> @constrained_vector_log10_v1f32(<1 x float> %x) #0 {
3814 ; PC64LE-LABEL: constrained_vector_log10_v1f32:
3815 ; PC64LE: # %bb.0: # %entry
3816 ; PC64LE-NEXT: mflr 0
3817 ; PC64LE-NEXT: std 0, 16(1)
3818 ; PC64LE-NEXT: stdu 1, -32(1)
3819 ; PC64LE-NEXT: bl log10f
3821 ; PC64LE-NEXT: addi 1, 1, 32
3822 ; PC64LE-NEXT: ld 0, 16(1)
3823 ; PC64LE-NEXT: mtlr 0
3826 ; PC64LE9-LABEL: constrained_vector_log10_v1f32:
3827 ; PC64LE9: # %bb.0: # %entry
3828 ; PC64LE9-NEXT: mflr 0
3829 ; PC64LE9-NEXT: std 0, 16(1)
3830 ; PC64LE9-NEXT: stdu 1, -32(1)
3831 ; PC64LE9-NEXT: bl log10f
3833 ; PC64LE9-NEXT: addi 1, 1, 32
3834 ; PC64LE9-NEXT: ld 0, 16(1)
3835 ; PC64LE9-NEXT: mtlr 0
3838 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
3840 metadata !"round.dynamic",
3841 metadata !"fpexcept.strict") #1
3842 ret <1 x float> %log10
3845 define <2 x double> @constrained_vector_log10_v2f64(<2 x double> %x) #0 {
3846 ; PC64LE-LABEL: constrained_vector_log10_v2f64:
3847 ; PC64LE: # %bb.0: # %entry
3848 ; PC64LE-NEXT: mflr 0
3849 ; PC64LE-NEXT: std 0, 16(1)
3850 ; PC64LE-NEXT: stdu 1, -80(1)
3851 ; PC64LE-NEXT: li 3, 48
3852 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3853 ; PC64LE-NEXT: li 3, 64
3854 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3855 ; PC64LE-NEXT: vmr 31, 2
3856 ; PC64LE-NEXT: xxlor 1, 63, 63
3857 ; PC64LE-NEXT: bl log10
3859 ; PC64LE-NEXT: xxlor 62, 1, 1
3860 ; PC64LE-NEXT: xxswapd 1, 63
3861 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3862 ; PC64LE-NEXT: bl log10
3864 ; PC64LE-NEXT: li 3, 64
3865 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3866 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3867 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3868 ; PC64LE-NEXT: li 3, 48
3869 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3870 ; PC64LE-NEXT: addi 1, 1, 80
3871 ; PC64LE-NEXT: ld 0, 16(1)
3872 ; PC64LE-NEXT: mtlr 0
3875 ; PC64LE9-LABEL: constrained_vector_log10_v2f64:
3876 ; PC64LE9: # %bb.0: # %entry
3877 ; PC64LE9-NEXT: mflr 0
3878 ; PC64LE9-NEXT: std 0, 16(1)
3879 ; PC64LE9-NEXT: stdu 1, -64(1)
3880 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3881 ; PC64LE9-NEXT: vmr 31, 2
3882 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3883 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3884 ; PC64LE9-NEXT: bl log10
3886 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3887 ; PC64LE9-NEXT: xxswapd 1, 63
3888 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3889 ; PC64LE9-NEXT: bl log10
3891 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3892 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3893 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3894 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3895 ; PC64LE9-NEXT: addi 1, 1, 64
3896 ; PC64LE9-NEXT: ld 0, 16(1)
3897 ; PC64LE9-NEXT: mtlr 0
3900 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
3902 metadata !"round.dynamic",
3903 metadata !"fpexcept.strict") #1
3904 ret <2 x double> %log10
3907 define <3 x float> @constrained_vector_log10_v3f32(<3 x float> %x) #0 {
3908 ; PC64LE-LABEL: constrained_vector_log10_v3f32:
3909 ; PC64LE: # %bb.0: # %entry
3910 ; PC64LE-NEXT: mflr 0
3911 ; PC64LE-NEXT: std 0, 16(1)
3912 ; PC64LE-NEXT: stdu 1, -80(1)
3913 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3914 ; PC64LE-NEXT: li 3, 48
3915 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3916 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3917 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3918 ; PC64LE-NEXT: vmr 31, 2
3919 ; PC64LE-NEXT: xscvspdpn 1, 0
3920 ; PC64LE-NEXT: bl log10f
3922 ; PC64LE-NEXT: xxswapd 0, 63
3923 ; PC64LE-NEXT: fmr 31, 1
3924 ; PC64LE-NEXT: xscvspdpn 1, 0
3925 ; PC64LE-NEXT: bl log10f
3927 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3928 ; PC64LE-NEXT: fmr 30, 1
3929 ; PC64LE-NEXT: xscvspdpn 1, 0
3930 ; PC64LE-NEXT: bl log10f
3932 ; PC64LE-NEXT: xscvdpspn 34, 30
3933 ; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha
3934 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3935 ; PC64LE-NEXT: xscvdpspn 35, 1
3936 ; PC64LE-NEXT: addi 3, 3, .LCPI67_0@toc@l
3937 ; PC64LE-NEXT: lvx 4, 0, 3
3938 ; PC64LE-NEXT: li 3, 48
3939 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3940 ; PC64LE-NEXT: vmrghw 2, 2, 3
3941 ; PC64LE-NEXT: xscvdpspn 35, 31
3942 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3943 ; PC64LE-NEXT: vperm 2, 3, 2, 4
3944 ; PC64LE-NEXT: addi 1, 1, 80
3945 ; PC64LE-NEXT: ld 0, 16(1)
3946 ; PC64LE-NEXT: mtlr 0
3949 ; PC64LE9-LABEL: constrained_vector_log10_v3f32:
3950 ; PC64LE9: # %bb.0: # %entry
3951 ; PC64LE9-NEXT: mflr 0
3952 ; PC64LE9-NEXT: std 0, 16(1)
3953 ; PC64LE9-NEXT: stdu 1, -64(1)
3954 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3955 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3956 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3957 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3958 ; PC64LE9-NEXT: xscvspdpn 1, 0
3959 ; PC64LE9-NEXT: vmr 31, 2
3960 ; PC64LE9-NEXT: bl log10f
3962 ; PC64LE9-NEXT: xxswapd 0, 63
3963 ; PC64LE9-NEXT: fmr 31, 1
3964 ; PC64LE9-NEXT: xscvspdpn 1, 0
3965 ; PC64LE9-NEXT: bl log10f
3967 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3968 ; PC64LE9-NEXT: fmr 30, 1
3969 ; PC64LE9-NEXT: xscvspdpn 1, 0
3970 ; PC64LE9-NEXT: bl log10f
3972 ; PC64LE9-NEXT: xscvdpspn 34, 1
3973 ; PC64LE9-NEXT: xscvdpspn 35, 30
3974 ; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha
3975 ; PC64LE9-NEXT: xscvdpspn 36, 31
3976 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3977 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3978 ; PC64LE9-NEXT: addi 3, 3, .LCPI67_0@toc@l
3979 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3980 ; PC64LE9-NEXT: vmrghw 2, 3, 2
3981 ; PC64LE9-NEXT: lxv 35, 0(3)
3982 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
3983 ; PC64LE9-NEXT: addi 1, 1, 64
3984 ; PC64LE9-NEXT: ld 0, 16(1)
3985 ; PC64LE9-NEXT: mtlr 0
3988 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
3990 metadata !"round.dynamic",
3991 metadata !"fpexcept.strict") #1
3992 ret <3 x float> %log10
3995 define <3 x double> @constrained_vector_log10_v3f64(<3 x double> %x) #0 {
3996 ; PC64LE-LABEL: constrained_vector_log10_v3f64:
3997 ; PC64LE: # %bb.0: # %entry
3998 ; PC64LE-NEXT: mflr 0
3999 ; PC64LE-NEXT: std 0, 16(1)
4000 ; PC64LE-NEXT: stdu 1, -80(1)
4001 ; PC64LE-NEXT: li 3, 48
4002 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4003 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4004 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4005 ; PC64LE-NEXT: fmr 31, 3
4006 ; PC64LE-NEXT: fmr 30, 2
4007 ; PC64LE-NEXT: bl log10
4009 ; PC64LE-NEXT: xxlor 63, 1, 1
4010 ; PC64LE-NEXT: fmr 1, 30
4011 ; PC64LE-NEXT: bl log10
4013 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4014 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4015 ; PC64LE-NEXT: fmr 1, 31
4016 ; PC64LE-NEXT: bl log10
4018 ; PC64LE-NEXT: xxswapd 0, 63
4019 ; PC64LE-NEXT: li 3, 48
4020 ; PC64LE-NEXT: xxlor 2, 63, 63
4021 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4022 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4023 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4024 ; PC64LE-NEXT: fmr 3, 1
4025 ; PC64LE-NEXT: fmr 1, 0
4026 ; PC64LE-NEXT: addi 1, 1, 80
4027 ; PC64LE-NEXT: ld 0, 16(1)
4028 ; PC64LE-NEXT: mtlr 0
4031 ; PC64LE9-LABEL: constrained_vector_log10_v3f64:
4032 ; PC64LE9: # %bb.0: # %entry
4033 ; PC64LE9-NEXT: mflr 0
4034 ; PC64LE9-NEXT: std 0, 16(1)
4035 ; PC64LE9-NEXT: stdu 1, -64(1)
4036 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4037 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4038 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4039 ; PC64LE9-NEXT: fmr 31, 3
4040 ; PC64LE9-NEXT: fmr 30, 2
4041 ; PC64LE9-NEXT: bl log10
4043 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4044 ; PC64LE9-NEXT: fmr 1, 30
4045 ; PC64LE9-NEXT: bl log10
4047 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4048 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4049 ; PC64LE9-NEXT: fmr 1, 31
4050 ; PC64LE9-NEXT: bl log10
4052 ; PC64LE9-NEXT: fmr 3, 1
4053 ; PC64LE9-NEXT: xxswapd 1, 63
4054 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4055 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4056 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4057 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4058 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4059 ; PC64LE9-NEXT: addi 1, 1, 64
4060 ; PC64LE9-NEXT: ld 0, 16(1)
4061 ; PC64LE9-NEXT: mtlr 0
4064 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
4066 metadata !"round.dynamic",
4067 metadata !"fpexcept.strict") #1
4068 ret <3 x double> %log10
4071 define <4 x double> @constrained_vector_log10_v4f64(<4 x double> %x) #0 {
4072 ; PC64LE-LABEL: constrained_vector_log10_v4f64:
4073 ; PC64LE: # %bb.0: # %entry
4074 ; PC64LE-NEXT: mflr 0
4075 ; PC64LE-NEXT: std 0, 16(1)
4076 ; PC64LE-NEXT: stdu 1, -96(1)
4077 ; PC64LE-NEXT: li 3, 48
4078 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4079 ; PC64LE-NEXT: li 3, 64
4080 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4081 ; PC64LE-NEXT: vmr 30, 2
4082 ; PC64LE-NEXT: li 3, 80
4083 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4084 ; PC64LE-NEXT: vmr 31, 3
4085 ; PC64LE-NEXT: xxlor 1, 62, 62
4086 ; PC64LE-NEXT: bl log10
4088 ; PC64LE-NEXT: xxlor 61, 1, 1
4089 ; PC64LE-NEXT: xxswapd 1, 62
4090 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4091 ; PC64LE-NEXT: bl log10
4093 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4094 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4095 ; PC64LE-NEXT: xxlor 1, 63, 63
4096 ; PC64LE-NEXT: bl log10
4098 ; PC64LE-NEXT: xxlor 61, 1, 1
4099 ; PC64LE-NEXT: xxswapd 1, 63
4100 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4101 ; PC64LE-NEXT: bl log10
4103 ; PC64LE-NEXT: li 3, 80
4104 ; PC64LE-NEXT: vmr 2, 30
4105 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4106 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4107 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4108 ; PC64LE-NEXT: li 3, 64
4109 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4110 ; PC64LE-NEXT: li 3, 48
4111 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4112 ; PC64LE-NEXT: addi 1, 1, 96
4113 ; PC64LE-NEXT: ld 0, 16(1)
4114 ; PC64LE-NEXT: mtlr 0
4117 ; PC64LE9-LABEL: constrained_vector_log10_v4f64:
4118 ; PC64LE9: # %bb.0: # %entry
4119 ; PC64LE9-NEXT: mflr 0
4120 ; PC64LE9-NEXT: std 0, 16(1)
4121 ; PC64LE9-NEXT: stdu 1, -80(1)
4122 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4123 ; PC64LE9-NEXT: vmr 30, 2
4124 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4125 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4126 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4127 ; PC64LE9-NEXT: vmr 31, 3
4128 ; PC64LE9-NEXT: bl log10
4130 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4131 ; PC64LE9-NEXT: xxswapd 1, 62
4132 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4133 ; PC64LE9-NEXT: bl log10
4135 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4136 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4137 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4138 ; PC64LE9-NEXT: bl log10
4140 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4141 ; PC64LE9-NEXT: xxswapd 1, 63
4142 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4143 ; PC64LE9-NEXT: bl log10
4145 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4146 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
4147 ; PC64LE9-NEXT: vmr 2, 30
4148 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
4149 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
4150 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
4151 ; PC64LE9-NEXT: addi 1, 1, 80
4152 ; PC64LE9-NEXT: ld 0, 16(1)
4153 ; PC64LE9-NEXT: mtlr 0
4156 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64(
4158 metadata !"round.dynamic",
4159 metadata !"fpexcept.strict") #1
4160 ret <4 x double> %log10
4163 define <1 x float> @constrained_vector_log2_v1f32(<1 x float> %x) #0 {
4164 ; PC64LE-LABEL: constrained_vector_log2_v1f32:
4165 ; PC64LE: # %bb.0: # %entry
4166 ; PC64LE-NEXT: mflr 0
4167 ; PC64LE-NEXT: std 0, 16(1)
4168 ; PC64LE-NEXT: stdu 1, -32(1)
4169 ; PC64LE-NEXT: bl log2f
4171 ; PC64LE-NEXT: addi 1, 1, 32
4172 ; PC64LE-NEXT: ld 0, 16(1)
4173 ; PC64LE-NEXT: mtlr 0
4176 ; PC64LE9-LABEL: constrained_vector_log2_v1f32:
4177 ; PC64LE9: # %bb.0: # %entry
4178 ; PC64LE9-NEXT: mflr 0
4179 ; PC64LE9-NEXT: std 0, 16(1)
4180 ; PC64LE9-NEXT: stdu 1, -32(1)
4181 ; PC64LE9-NEXT: bl log2f
4183 ; PC64LE9-NEXT: addi 1, 1, 32
4184 ; PC64LE9-NEXT: ld 0, 16(1)
4185 ; PC64LE9-NEXT: mtlr 0
4188 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
4190 metadata !"round.dynamic",
4191 metadata !"fpexcept.strict") #1
4192 ret <1 x float> %log2
4195 define <2 x double> @constrained_vector_log2_v2f64(<2 x double> %x) #0 {
4196 ; PC64LE-LABEL: constrained_vector_log2_v2f64:
4197 ; PC64LE: # %bb.0: # %entry
4198 ; PC64LE-NEXT: mflr 0
4199 ; PC64LE-NEXT: std 0, 16(1)
4200 ; PC64LE-NEXT: stdu 1, -80(1)
4201 ; PC64LE-NEXT: li 3, 48
4202 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4203 ; PC64LE-NEXT: li 3, 64
4204 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4205 ; PC64LE-NEXT: vmr 31, 2
4206 ; PC64LE-NEXT: xxlor 1, 63, 63
4207 ; PC64LE-NEXT: bl log2
4209 ; PC64LE-NEXT: xxlor 62, 1, 1
4210 ; PC64LE-NEXT: xxswapd 1, 63
4211 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4212 ; PC64LE-NEXT: bl log2
4214 ; PC64LE-NEXT: li 3, 64
4215 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4216 ; PC64LE-NEXT: xxmrghd 34, 62, 1
4217 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4218 ; PC64LE-NEXT: li 3, 48
4219 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4220 ; PC64LE-NEXT: addi 1, 1, 80
4221 ; PC64LE-NEXT: ld 0, 16(1)
4222 ; PC64LE-NEXT: mtlr 0
4225 ; PC64LE9-LABEL: constrained_vector_log2_v2f64:
4226 ; PC64LE9: # %bb.0: # %entry
4227 ; PC64LE9-NEXT: mflr 0
4228 ; PC64LE9-NEXT: std 0, 16(1)
4229 ; PC64LE9-NEXT: stdu 1, -64(1)
4230 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4231 ; PC64LE9-NEXT: vmr 31, 2
4232 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4233 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
4234 ; PC64LE9-NEXT: bl log2
4236 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
4237 ; PC64LE9-NEXT: xxswapd 1, 63
4238 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4239 ; PC64LE9-NEXT: bl log2
4241 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4242 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
4243 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4244 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
4245 ; PC64LE9-NEXT: addi 1, 1, 64
4246 ; PC64LE9-NEXT: ld 0, 16(1)
4247 ; PC64LE9-NEXT: mtlr 0
4250 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
4252 metadata !"round.dynamic",
4253 metadata !"fpexcept.strict") #1
4254 ret <2 x double> %log2
4257 define <3 x float> @constrained_vector_log2_v3f32(<3 x float> %x) #0 {
4258 ; PC64LE-LABEL: constrained_vector_log2_v3f32:
4259 ; PC64LE: # %bb.0: # %entry
4260 ; PC64LE-NEXT: mflr 0
4261 ; PC64LE-NEXT: std 0, 16(1)
4262 ; PC64LE-NEXT: stdu 1, -80(1)
4263 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
4264 ; PC64LE-NEXT: li 3, 48
4265 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4266 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4267 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4268 ; PC64LE-NEXT: vmr 31, 2
4269 ; PC64LE-NEXT: xscvspdpn 1, 0
4270 ; PC64LE-NEXT: bl log2f
4272 ; PC64LE-NEXT: xxswapd 0, 63
4273 ; PC64LE-NEXT: fmr 31, 1
4274 ; PC64LE-NEXT: xscvspdpn 1, 0
4275 ; PC64LE-NEXT: bl log2f
4277 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
4278 ; PC64LE-NEXT: fmr 30, 1
4279 ; PC64LE-NEXT: xscvspdpn 1, 0
4280 ; PC64LE-NEXT: bl log2f
4282 ; PC64LE-NEXT: xscvdpspn 34, 30
4283 ; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4284 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4285 ; PC64LE-NEXT: xscvdpspn 35, 1
4286 ; PC64LE-NEXT: addi 3, 3, .LCPI72_0@toc@l
4287 ; PC64LE-NEXT: lvx 4, 0, 3
4288 ; PC64LE-NEXT: li 3, 48
4289 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4290 ; PC64LE-NEXT: vmrghw 2, 2, 3
4291 ; PC64LE-NEXT: xscvdpspn 35, 31
4292 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4293 ; PC64LE-NEXT: vperm 2, 3, 2, 4
4294 ; PC64LE-NEXT: addi 1, 1, 80
4295 ; PC64LE-NEXT: ld 0, 16(1)
4296 ; PC64LE-NEXT: mtlr 0
4299 ; PC64LE9-LABEL: constrained_vector_log2_v3f32:
4300 ; PC64LE9: # %bb.0: # %entry
4301 ; PC64LE9-NEXT: mflr 0
4302 ; PC64LE9-NEXT: std 0, 16(1)
4303 ; PC64LE9-NEXT: stdu 1, -64(1)
4304 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4305 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4306 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4307 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4308 ; PC64LE9-NEXT: xscvspdpn 1, 0
4309 ; PC64LE9-NEXT: vmr 31, 2
4310 ; PC64LE9-NEXT: bl log2f
4312 ; PC64LE9-NEXT: xxswapd 0, 63
4313 ; PC64LE9-NEXT: fmr 31, 1
4314 ; PC64LE9-NEXT: xscvspdpn 1, 0
4315 ; PC64LE9-NEXT: bl log2f
4317 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
4318 ; PC64LE9-NEXT: fmr 30, 1
4319 ; PC64LE9-NEXT: xscvspdpn 1, 0
4320 ; PC64LE9-NEXT: bl log2f
4322 ; PC64LE9-NEXT: xscvdpspn 34, 1
4323 ; PC64LE9-NEXT: xscvdpspn 35, 30
4324 ; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4325 ; PC64LE9-NEXT: xscvdpspn 36, 31
4326 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4327 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4328 ; PC64LE9-NEXT: addi 3, 3, .LCPI72_0@toc@l
4329 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4330 ; PC64LE9-NEXT: vmrghw 2, 3, 2
4331 ; PC64LE9-NEXT: lxv 35, 0(3)
4332 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
4333 ; PC64LE9-NEXT: addi 1, 1, 64
4334 ; PC64LE9-NEXT: ld 0, 16(1)
4335 ; PC64LE9-NEXT: mtlr 0
4338 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
4340 metadata !"round.dynamic",
4341 metadata !"fpexcept.strict") #1
4342 ret <3 x float> %log2
4345 define <3 x double> @constrained_vector_log2_v3f64(<3 x double> %x) #0 {
4346 ; PC64LE-LABEL: constrained_vector_log2_v3f64:
4347 ; PC64LE: # %bb.0: # %entry
4348 ; PC64LE-NEXT: mflr 0
4349 ; PC64LE-NEXT: std 0, 16(1)
4350 ; PC64LE-NEXT: stdu 1, -80(1)
4351 ; PC64LE-NEXT: li 3, 48
4352 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4353 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4354 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4355 ; PC64LE-NEXT: fmr 31, 3
4356 ; PC64LE-NEXT: fmr 30, 2
4357 ; PC64LE-NEXT: bl log2
4359 ; PC64LE-NEXT: xxlor 63, 1, 1
4360 ; PC64LE-NEXT: fmr 1, 30
4361 ; PC64LE-NEXT: bl log2
4363 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4364 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4365 ; PC64LE-NEXT: fmr 1, 31
4366 ; PC64LE-NEXT: bl log2
4368 ; PC64LE-NEXT: xxswapd 0, 63
4369 ; PC64LE-NEXT: li 3, 48
4370 ; PC64LE-NEXT: xxlor 2, 63, 63
4371 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4372 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4373 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4374 ; PC64LE-NEXT: fmr 3, 1
4375 ; PC64LE-NEXT: fmr 1, 0
4376 ; PC64LE-NEXT: addi 1, 1, 80
4377 ; PC64LE-NEXT: ld 0, 16(1)
4378 ; PC64LE-NEXT: mtlr 0
4381 ; PC64LE9-LABEL: constrained_vector_log2_v3f64:
4382 ; PC64LE9: # %bb.0: # %entry
4383 ; PC64LE9-NEXT: mflr 0
4384 ; PC64LE9-NEXT: std 0, 16(1)
4385 ; PC64LE9-NEXT: stdu 1, -64(1)
4386 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4387 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4388 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4389 ; PC64LE9-NEXT: fmr 31, 3
4390 ; PC64LE9-NEXT: fmr 30, 2
4391 ; PC64LE9-NEXT: bl log2
4393 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4394 ; PC64LE9-NEXT: fmr 1, 30
4395 ; PC64LE9-NEXT: bl log2
4397 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4398 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4399 ; PC64LE9-NEXT: fmr 1, 31
4400 ; PC64LE9-NEXT: bl log2
4402 ; PC64LE9-NEXT: fmr 3, 1
4403 ; PC64LE9-NEXT: xxswapd 1, 63
4404 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4405 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4406 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4407 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4408 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4409 ; PC64LE9-NEXT: addi 1, 1, 64
4410 ; PC64LE9-NEXT: ld 0, 16(1)
4411 ; PC64LE9-NEXT: mtlr 0
4414 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
4416 metadata !"round.dynamic",
4417 metadata !"fpexcept.strict") #1
4418 ret <3 x double> %log2
4421 define <4 x double> @constrained_vector_log2_v4f64(<4 x double> %x) #0 {
4422 ; PC64LE-LABEL: constrained_vector_log2_v4f64:
4423 ; PC64LE: # %bb.0: # %entry
4424 ; PC64LE-NEXT: mflr 0
4425 ; PC64LE-NEXT: std 0, 16(1)
4426 ; PC64LE-NEXT: stdu 1, -96(1)
4427 ; PC64LE-NEXT: li 3, 48
4428 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4429 ; PC64LE-NEXT: li 3, 64
4430 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4431 ; PC64LE-NEXT: vmr 30, 2
4432 ; PC64LE-NEXT: li 3, 80
4433 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4434 ; PC64LE-NEXT: vmr 31, 3
4435 ; PC64LE-NEXT: xxlor 1, 62, 62
4436 ; PC64LE-NEXT: bl log2
4438 ; PC64LE-NEXT: xxlor 61, 1, 1
4439 ; PC64LE-NEXT: xxswapd 1, 62
4440 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4441 ; PC64LE-NEXT: bl log2
4443 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4444 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4445 ; PC64LE-NEXT: xxlor 1, 63, 63
4446 ; PC64LE-NEXT: bl log2
4448 ; PC64LE-NEXT: xxlor 61, 1, 1
4449 ; PC64LE-NEXT: xxswapd 1, 63
4450 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4451 ; PC64LE-NEXT: bl log2
4453 ; PC64LE-NEXT: li 3, 80
4454 ; PC64LE-NEXT: vmr 2, 30
4455 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4456 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4457 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4458 ; PC64LE-NEXT: li 3, 64
4459 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4460 ; PC64LE-NEXT: li 3, 48
4461 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4462 ; PC64LE-NEXT: addi 1, 1, 96
4463 ; PC64LE-NEXT: ld 0, 16(1)
4464 ; PC64LE-NEXT: mtlr 0
4467 ; PC64LE9-LABEL: constrained_vector_log2_v4f64:
4468 ; PC64LE9: # %bb.0: # %entry
4469 ; PC64LE9-NEXT: mflr 0
4470 ; PC64LE9-NEXT: std 0, 16(1)
4471 ; PC64LE9-NEXT: stdu 1, -80(1)
4472 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4473 ; PC64LE9-NEXT: vmr 30, 2
4474 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4475 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4476 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4477 ; PC64LE9-NEXT: vmr 31, 3
4478 ; PC64LE9-NEXT: bl log2
4480 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4481 ; PC64LE9-NEXT: xxswapd 1, 62
4482 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4483 ; PC64LE9-NEXT: bl log2
4485 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4486 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4487 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4488 ; PC64LE9-NEXT: bl log2
4490 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4491 ; PC64LE9-NEXT: xxswapd 1, 63
4492 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4493 ; PC64LE9-NEXT: bl log2
4495 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4496 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
4497 ; PC64LE9-NEXT: vmr 2, 30
4498 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
4499 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
4500 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
4501 ; PC64LE9-NEXT: addi 1, 1, 80
4502 ; PC64LE9-NEXT: ld 0, 16(1)
4503 ; PC64LE9-NEXT: mtlr 0
4506 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64(
4508 metadata !"round.dynamic",
4509 metadata !"fpexcept.strict") #1
4510 ret <4 x double> %log2
4513 define <1 x float> @constrained_vector_rint_v1f32(<1 x float> %x) #0 {
4514 ; PC64LE-LABEL: constrained_vector_rint_v1f32:
4515 ; PC64LE: # %bb.0: # %entry
4516 ; PC64LE-NEXT: xsrdpic 1, 1
4519 ; PC64LE9-LABEL: constrained_vector_rint_v1f32:
4520 ; PC64LE9: # %bb.0: # %entry
4521 ; PC64LE9-NEXT: xsrdpic 1, 1
4524 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
4526 metadata !"round.dynamic",
4527 metadata !"fpexcept.strict") #1
4528 ret <1 x float> %rint
4531 define <2 x double> @constrained_vector_rint_v2f64(<2 x double> %x) #0 {
4532 ; PC64LE-LABEL: constrained_vector_rint_v2f64:
4533 ; PC64LE: # %bb.0: # %entry
4534 ; PC64LE-NEXT: xvrdpic 34, 34
4537 ; PC64LE9-LABEL: constrained_vector_rint_v2f64:
4538 ; PC64LE9: # %bb.0: # %entry
4539 ; PC64LE9-NEXT: xvrdpic 34, 34
4542 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
4544 metadata !"round.dynamic",
4545 metadata !"fpexcept.strict") #1
4546 ret <2 x double> %rint
4549 define <3 x float> @constrained_vector_rint_v3f32(<3 x float> %x) #0 {
4550 ; PC64LE-LABEL: constrained_vector_rint_v3f32:
4551 ; PC64LE: # %bb.0: # %entry
4552 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
4553 ; PC64LE-NEXT: xxswapd 1, 34
4554 ; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha
4555 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
4556 ; PC64LE-NEXT: addi 3, 3, .LCPI77_0@toc@l
4557 ; PC64LE-NEXT: lvx 4, 0, 3
4558 ; PC64LE-NEXT: xscvspdpn 0, 0
4559 ; PC64LE-NEXT: xscvspdpn 1, 1
4560 ; PC64LE-NEXT: xscvspdpn 2, 2
4561 ; PC64LE-NEXT: xsrdpic 0, 0
4562 ; PC64LE-NEXT: xsrdpic 1, 1
4563 ; PC64LE-NEXT: xscvdpspn 34, 0
4564 ; PC64LE-NEXT: xscvdpspn 35, 1
4565 ; PC64LE-NEXT: xsrdpic 0, 2
4566 ; PC64LE-NEXT: vmrghw 2, 3, 2
4567 ; PC64LE-NEXT: xscvdpspn 35, 0
4568 ; PC64LE-NEXT: vperm 2, 3, 2, 4
4571 ; PC64LE9-LABEL: constrained_vector_rint_v3f32:
4572 ; PC64LE9: # %bb.0: # %entry
4573 ; PC64LE9-NEXT: xxswapd 1, 34
4574 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
4575 ; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha
4576 ; PC64LE9-NEXT: addi 3, 3, .LCPI77_0@toc@l
4577 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4578 ; PC64LE9-NEXT: xscvspdpn 1, 1
4579 ; PC64LE9-NEXT: xscvspdpn 2, 2
4580 ; PC64LE9-NEXT: xscvspdpn 0, 0
4581 ; PC64LE9-NEXT: xsrdpic 1, 1
4582 ; PC64LE9-NEXT: xsrdpic 2, 2
4583 ; PC64LE9-NEXT: xsrdpic 0, 0
4584 ; PC64LE9-NEXT: xscvdpspn 34, 2
4585 ; PC64LE9-NEXT: xscvdpspn 35, 1
4586 ; PC64LE9-NEXT: xscvdpspn 36, 0
4587 ; PC64LE9-NEXT: vmrghw 2, 3, 2
4588 ; PC64LE9-NEXT: lxv 35, 0(3)
4589 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
4592 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
4594 metadata !"round.dynamic",
4595 metadata !"fpexcept.strict") #1
4596 ret <3 x float> %rint
4599 define <3 x double> @constrained_vector_rint_v3f64(<3 x double> %x) #0 {
4600 ; PC64LE-LABEL: constrained_vector_rint_v3f64:
4601 ; PC64LE: # %bb.0: # %entry
4602 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
4603 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4604 ; PC64LE-NEXT: xxmrghd 0, 2, 1
4605 ; PC64LE-NEXT: xsrdpic 3, 3
4606 ; PC64LE-NEXT: xvrdpic 2, 0
4607 ; PC64LE-NEXT: xxswapd 1, 2
4608 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
4609 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4612 ; PC64LE9-LABEL: constrained_vector_rint_v3f64:
4613 ; PC64LE9: # %bb.0: # %entry
4614 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
4615 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4616 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
4617 ; PC64LE9-NEXT: xsrdpic 3, 3
4618 ; PC64LE9-NEXT: xvrdpic 2, 0
4619 ; PC64LE9-NEXT: xxswapd 1, 2
4620 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4621 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
4624 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
4626 metadata !"round.dynamic",
4627 metadata !"fpexcept.strict") #1
4628 ret <3 x double> %rint
4631 define <4 x double> @constrained_vector_rint_v4f64(<4 x double> %x) #0 {
4632 ; PC64LE-LABEL: constrained_vector_rint_v4f64:
4633 ; PC64LE: # %bb.0: # %entry
4634 ; PC64LE-NEXT: xvrdpic 34, 34
4635 ; PC64LE-NEXT: xvrdpic 35, 35
4638 ; PC64LE9-LABEL: constrained_vector_rint_v4f64:
4639 ; PC64LE9: # %bb.0: # %entry
4640 ; PC64LE9-NEXT: xvrdpic 34, 34
4641 ; PC64LE9-NEXT: xvrdpic 35, 35
4644 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
4646 metadata !"round.dynamic",
4647 metadata !"fpexcept.strict") #1
4648 ret <4 x double> %rint
4651 define <1 x float> @constrained_vector_nearbyint_v1f32(<1 x float> %x) #0 {
4652 ; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
4653 ; PC64LE: # %bb.0: # %entry
4654 ; PC64LE-NEXT: mflr 0
4655 ; PC64LE-NEXT: std 0, 16(1)
4656 ; PC64LE-NEXT: stdu 1, -32(1)
4657 ; PC64LE-NEXT: bl nearbyintf
4659 ; PC64LE-NEXT: addi 1, 1, 32
4660 ; PC64LE-NEXT: ld 0, 16(1)
4661 ; PC64LE-NEXT: mtlr 0
4664 ; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32:
4665 ; PC64LE9: # %bb.0: # %entry
4666 ; PC64LE9-NEXT: mflr 0
4667 ; PC64LE9-NEXT: std 0, 16(1)
4668 ; PC64LE9-NEXT: stdu 1, -32(1)
4669 ; PC64LE9-NEXT: bl nearbyintf
4671 ; PC64LE9-NEXT: addi 1, 1, 32
4672 ; PC64LE9-NEXT: ld 0, 16(1)
4673 ; PC64LE9-NEXT: mtlr 0
4676 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
4678 metadata !"round.dynamic",
4679 metadata !"fpexcept.strict") #1
4680 ret <1 x float> %nearby
4683 define <2 x double> @constrained_vector_nearbyint_v2f64(<2 x double> %x) #0 {
4684 ; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
4685 ; PC64LE: # %bb.0: # %entry
4686 ; PC64LE-NEXT: mflr 0
4687 ; PC64LE-NEXT: std 0, 16(1)
4688 ; PC64LE-NEXT: stdu 1, -80(1)
4689 ; PC64LE-NEXT: li 3, 48
4690 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4691 ; PC64LE-NEXT: li 3, 64
4692 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4693 ; PC64LE-NEXT: vmr 31, 2
4694 ; PC64LE-NEXT: xxlor 1, 63, 63
4695 ; PC64LE-NEXT: bl nearbyint
4697 ; PC64LE-NEXT: xxlor 62, 1, 1
4698 ; PC64LE-NEXT: xxswapd 1, 63
4699 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4700 ; PC64LE-NEXT: bl nearbyint
4702 ; PC64LE-NEXT: li 3, 64
4703 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4704 ; PC64LE-NEXT: xxmrghd 34, 62, 1
4705 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4706 ; PC64LE-NEXT: li 3, 48
4707 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4708 ; PC64LE-NEXT: addi 1, 1, 80
4709 ; PC64LE-NEXT: ld 0, 16(1)
4710 ; PC64LE-NEXT: mtlr 0
4713 ; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64:
4714 ; PC64LE9: # %bb.0: # %entry
4715 ; PC64LE9-NEXT: mflr 0
4716 ; PC64LE9-NEXT: std 0, 16(1)
4717 ; PC64LE9-NEXT: stdu 1, -64(1)
4718 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4719 ; PC64LE9-NEXT: vmr 31, 2
4720 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4721 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
4722 ; PC64LE9-NEXT: bl nearbyint
4724 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
4725 ; PC64LE9-NEXT: xxswapd 1, 63
4726 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4727 ; PC64LE9-NEXT: bl nearbyint
4729 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4730 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
4731 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4732 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
4733 ; PC64LE9-NEXT: addi 1, 1, 64
4734 ; PC64LE9-NEXT: ld 0, 16(1)
4735 ; PC64LE9-NEXT: mtlr 0
4738 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
4740 metadata !"round.dynamic",
4741 metadata !"fpexcept.strict") #1
4742 ret <2 x double> %nearby
4745 define <3 x float> @constrained_vector_nearbyint_v3f32(<3 x float> %x) #0 {
4746 ; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
4747 ; PC64LE: # %bb.0: # %entry
4748 ; PC64LE-NEXT: mflr 0
4749 ; PC64LE-NEXT: std 0, 16(1)
4750 ; PC64LE-NEXT: stdu 1, -80(1)
4751 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
4752 ; PC64LE-NEXT: li 3, 48
4753 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4754 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4755 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4756 ; PC64LE-NEXT: vmr 31, 2
4757 ; PC64LE-NEXT: xscvspdpn 1, 0
4758 ; PC64LE-NEXT: bl nearbyintf
4760 ; PC64LE-NEXT: xxswapd 0, 63
4761 ; PC64LE-NEXT: fmr 31, 1
4762 ; PC64LE-NEXT: xscvspdpn 1, 0
4763 ; PC64LE-NEXT: bl nearbyintf
4765 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
4766 ; PC64LE-NEXT: fmr 30, 1
4767 ; PC64LE-NEXT: xscvspdpn 1, 0
4768 ; PC64LE-NEXT: bl nearbyintf
4770 ; PC64LE-NEXT: xscvdpspn 34, 30
4771 ; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha
4772 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4773 ; PC64LE-NEXT: xscvdpspn 35, 1
4774 ; PC64LE-NEXT: addi 3, 3, .LCPI82_0@toc@l
4775 ; PC64LE-NEXT: lvx 4, 0, 3
4776 ; PC64LE-NEXT: li 3, 48
4777 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4778 ; PC64LE-NEXT: vmrghw 2, 2, 3
4779 ; PC64LE-NEXT: xscvdpspn 35, 31
4780 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4781 ; PC64LE-NEXT: vperm 2, 3, 2, 4
4782 ; PC64LE-NEXT: addi 1, 1, 80
4783 ; PC64LE-NEXT: ld 0, 16(1)
4784 ; PC64LE-NEXT: mtlr 0
4787 ; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
4788 ; PC64LE9: # %bb.0: # %entry
4789 ; PC64LE9-NEXT: mflr 0
4790 ; PC64LE9-NEXT: std 0, 16(1)
4791 ; PC64LE9-NEXT: stdu 1, -64(1)
4792 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4793 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4794 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4795 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4796 ; PC64LE9-NEXT: xscvspdpn 1, 0
4797 ; PC64LE9-NEXT: vmr 31, 2
4798 ; PC64LE9-NEXT: bl nearbyintf
4800 ; PC64LE9-NEXT: xxswapd 0, 63
4801 ; PC64LE9-NEXT: fmr 31, 1
4802 ; PC64LE9-NEXT: xscvspdpn 1, 0
4803 ; PC64LE9-NEXT: bl nearbyintf
4805 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
4806 ; PC64LE9-NEXT: fmr 30, 1
4807 ; PC64LE9-NEXT: xscvspdpn 1, 0
4808 ; PC64LE9-NEXT: bl nearbyintf
4810 ; PC64LE9-NEXT: xscvdpspn 34, 1
4811 ; PC64LE9-NEXT: xscvdpspn 35, 30
4812 ; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha
4813 ; PC64LE9-NEXT: xscvdpspn 36, 31
4814 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4815 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4816 ; PC64LE9-NEXT: addi 3, 3, .LCPI82_0@toc@l
4817 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4818 ; PC64LE9-NEXT: vmrghw 2, 3, 2
4819 ; PC64LE9-NEXT: lxv 35, 0(3)
4820 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
4821 ; PC64LE9-NEXT: addi 1, 1, 64
4822 ; PC64LE9-NEXT: ld 0, 16(1)
4823 ; PC64LE9-NEXT: mtlr 0
4826 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
4828 metadata !"round.dynamic",
4829 metadata !"fpexcept.strict") #1
4830 ret <3 x float> %nearby
4833 define <3 x double> @constrained_vector_nearby_v3f64(<3 x double> %x) #0 {
4834 ; PC64LE-LABEL: constrained_vector_nearby_v3f64:
4835 ; PC64LE: # %bb.0: # %entry
4836 ; PC64LE-NEXT: mflr 0
4837 ; PC64LE-NEXT: std 0, 16(1)
4838 ; PC64LE-NEXT: stdu 1, -80(1)
4839 ; PC64LE-NEXT: li 3, 48
4840 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4841 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4842 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4843 ; PC64LE-NEXT: fmr 31, 3
4844 ; PC64LE-NEXT: fmr 30, 2
4845 ; PC64LE-NEXT: bl nearbyint
4847 ; PC64LE-NEXT: xxlor 63, 1, 1
4848 ; PC64LE-NEXT: fmr 1, 30
4849 ; PC64LE-NEXT: bl nearbyint
4851 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4852 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4853 ; PC64LE-NEXT: fmr 1, 31
4854 ; PC64LE-NEXT: bl nearbyint
4856 ; PC64LE-NEXT: xxswapd 0, 63
4857 ; PC64LE-NEXT: li 3, 48
4858 ; PC64LE-NEXT: xxlor 2, 63, 63
4859 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4860 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4861 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4862 ; PC64LE-NEXT: fmr 3, 1
4863 ; PC64LE-NEXT: fmr 1, 0
4864 ; PC64LE-NEXT: addi 1, 1, 80
4865 ; PC64LE-NEXT: ld 0, 16(1)
4866 ; PC64LE-NEXT: mtlr 0
4869 ; PC64LE9-LABEL: constrained_vector_nearby_v3f64:
4870 ; PC64LE9: # %bb.0: # %entry
4871 ; PC64LE9-NEXT: mflr 0
4872 ; PC64LE9-NEXT: std 0, 16(1)
4873 ; PC64LE9-NEXT: stdu 1, -64(1)
4874 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4875 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4876 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4877 ; PC64LE9-NEXT: fmr 31, 3
4878 ; PC64LE9-NEXT: fmr 30, 2
4879 ; PC64LE9-NEXT: bl nearbyint
4881 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4882 ; PC64LE9-NEXT: fmr 1, 30
4883 ; PC64LE9-NEXT: bl nearbyint
4885 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4886 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4887 ; PC64LE9-NEXT: fmr 1, 31
4888 ; PC64LE9-NEXT: bl nearbyint
4890 ; PC64LE9-NEXT: fmr 3, 1
4891 ; PC64LE9-NEXT: xxswapd 1, 63
4892 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4893 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4894 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4895 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4896 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4897 ; PC64LE9-NEXT: addi 1, 1, 64
4898 ; PC64LE9-NEXT: ld 0, 16(1)
4899 ; PC64LE9-NEXT: mtlr 0
4902 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
4904 metadata !"round.dynamic",
4905 metadata !"fpexcept.strict") #1
4906 ret <3 x double> %nearby
4909 define <4 x double> @constrained_vector_nearbyint_v4f64(<4 x double> %x) #0 {
4910 ; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
4911 ; PC64LE: # %bb.0: # %entry
4912 ; PC64LE-NEXT: mflr 0
4913 ; PC64LE-NEXT: std 0, 16(1)
4914 ; PC64LE-NEXT: stdu 1, -96(1)
4915 ; PC64LE-NEXT: li 3, 48
4916 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4917 ; PC64LE-NEXT: li 3, 64
4918 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4919 ; PC64LE-NEXT: vmr 30, 2
4920 ; PC64LE-NEXT: li 3, 80
4921 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4922 ; PC64LE-NEXT: vmr 31, 3
4923 ; PC64LE-NEXT: xxlor 1, 62, 62
4924 ; PC64LE-NEXT: bl nearbyint
4926 ; PC64LE-NEXT: xxlor 61, 1, 1
4927 ; PC64LE-NEXT: xxswapd 1, 62
4928 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4929 ; PC64LE-NEXT: bl nearbyint
4931 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4932 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4933 ; PC64LE-NEXT: xxlor 1, 63, 63
4934 ; PC64LE-NEXT: bl nearbyint
4936 ; PC64LE-NEXT: xxlor 61, 1, 1
4937 ; PC64LE-NEXT: xxswapd 1, 63
4938 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4939 ; PC64LE-NEXT: bl nearbyint
4941 ; PC64LE-NEXT: li 3, 80
4942 ; PC64LE-NEXT: vmr 2, 30
4943 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4944 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4945 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4946 ; PC64LE-NEXT: li 3, 64
4947 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4948 ; PC64LE-NEXT: li 3, 48
4949 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4950 ; PC64LE-NEXT: addi 1, 1, 96
4951 ; PC64LE-NEXT: ld 0, 16(1)
4952 ; PC64LE-NEXT: mtlr 0
4955 ; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64:
4956 ; PC64LE9: # %bb.0: # %entry
4957 ; PC64LE9-NEXT: mflr 0
4958 ; PC64LE9-NEXT: std 0, 16(1)
4959 ; PC64LE9-NEXT: stdu 1, -80(1)
4960 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4961 ; PC64LE9-NEXT: vmr 30, 2
4962 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4963 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4964 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4965 ; PC64LE9-NEXT: vmr 31, 3
4966 ; PC64LE9-NEXT: bl nearbyint
4968 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4969 ; PC64LE9-NEXT: xxswapd 1, 62
4970 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4971 ; PC64LE9-NEXT: bl nearbyint
4973 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4974 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4975 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4976 ; PC64LE9-NEXT: bl nearbyint
4978 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4979 ; PC64LE9-NEXT: xxswapd 1, 63
4980 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4981 ; PC64LE9-NEXT: bl nearbyint
4983 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4984 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
4985 ; PC64LE9-NEXT: vmr 2, 30
4986 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
4987 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
4988 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
4989 ; PC64LE9-NEXT: addi 1, 1, 80
4990 ; PC64LE9-NEXT: ld 0, 16(1)
4991 ; PC64LE9-NEXT: mtlr 0
4994 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
4996 metadata !"round.dynamic",
4997 metadata !"fpexcept.strict") #1
4998 ret <4 x double> %nearby
5001 define <1 x float> @constrained_vector_maxnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
5002 ; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
5003 ; PC64LE: # %bb.0: # %entry
5004 ; PC64LE-NEXT: mflr 0
5005 ; PC64LE-NEXT: std 0, 16(1)
5006 ; PC64LE-NEXT: stdu 1, -32(1)
5007 ; PC64LE-NEXT: bl fmaxf
5009 ; PC64LE-NEXT: addi 1, 1, 32
5010 ; PC64LE-NEXT: ld 0, 16(1)
5011 ; PC64LE-NEXT: mtlr 0
5014 ; PC64LE9-LABEL: constrained_vector_maxnum_v1f32:
5015 ; PC64LE9: # %bb.0: # %entry
5016 ; PC64LE9-NEXT: mflr 0
5017 ; PC64LE9-NEXT: std 0, 16(1)
5018 ; PC64LE9-NEXT: stdu 1, -32(1)
5019 ; PC64LE9-NEXT: bl fmaxf
5021 ; PC64LE9-NEXT: addi 1, 1, 32
5022 ; PC64LE9-NEXT: ld 0, 16(1)
5023 ; PC64LE9-NEXT: mtlr 0
5026 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
5027 <1 x float> %x, <1 x float> %y,
5028 metadata !"fpexcept.strict") #1
5029 ret <1 x float> %max
5032 define <2 x double> @constrained_vector_maxnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
5033 ; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
5034 ; PC64LE: # %bb.0: # %entry
5035 ; PC64LE-NEXT: xvmaxdp 34, 34, 35
5038 ; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
5039 ; PC64LE9: # %bb.0: # %entry
5040 ; PC64LE9-NEXT: xvmaxdp 34, 34, 35
5043 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(
5046 metadata !"fpexcept.strict") #1
5047 ret <2 x double> %max
5050 define <3 x float> @constrained_vector_maxnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
5051 ; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
5052 ; PC64LE: # %bb.0: # %entry
5053 ; PC64LE-NEXT: mflr 0
5054 ; PC64LE-NEXT: std 0, 16(1)
5055 ; PC64LE-NEXT: stdu 1, -96(1)
5056 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
5057 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
5058 ; PC64LE-NEXT: li 3, 48
5059 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
5060 ; PC64LE-NEXT: li 3, 64
5061 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
5062 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
5063 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5064 ; PC64LE-NEXT: xscvspdpn 1, 0
5065 ; PC64LE-NEXT: xscvspdpn 2, 2
5066 ; PC64LE-NEXT: vmr 31, 3
5067 ; PC64LE-NEXT: vmr 30, 2
5068 ; PC64LE-NEXT: bl fmaxf
5070 ; PC64LE-NEXT: xxswapd 0, 62
5071 ; PC64LE-NEXT: xxswapd 2, 63
5072 ; PC64LE-NEXT: fmr 31, 1
5073 ; PC64LE-NEXT: xscvspdpn 1, 0
5074 ; PC64LE-NEXT: xscvspdpn 2, 2
5075 ; PC64LE-NEXT: bl fmaxf
5077 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
5078 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
5079 ; PC64LE-NEXT: fmr 30, 1
5080 ; PC64LE-NEXT: xscvspdpn 1, 0
5081 ; PC64LE-NEXT: xscvspdpn 2, 2
5082 ; PC64LE-NEXT: bl fmaxf
5084 ; PC64LE-NEXT: xscvdpspn 34, 30
5085 ; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha
5086 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
5087 ; PC64LE-NEXT: xscvdpspn 35, 1
5088 ; PC64LE-NEXT: addi 3, 3, .LCPI87_0@toc@l
5089 ; PC64LE-NEXT: lvx 4, 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: vmrghw 2, 2, 3
5095 ; PC64LE-NEXT: xscvdpspn 35, 31
5096 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
5097 ; PC64LE-NEXT: vperm 2, 3, 2, 4
5098 ; PC64LE-NEXT: addi 1, 1, 96
5099 ; PC64LE-NEXT: ld 0, 16(1)
5100 ; PC64LE-NEXT: mtlr 0
5103 ; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
5104 ; PC64LE9: # %bb.0: # %entry
5105 ; PC64LE9-NEXT: mflr 0
5106 ; PC64LE9-NEXT: std 0, 16(1)
5107 ; PC64LE9-NEXT: stdu 1, -80(1)
5108 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5109 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
5110 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
5111 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
5112 ; PC64LE9-NEXT: xscvspdpn 1, 0
5113 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
5114 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
5115 ; PC64LE9-NEXT: xscvspdpn 2, 0
5116 ; PC64LE9-NEXT: vmr 31, 3
5117 ; PC64LE9-NEXT: vmr 30, 2
5118 ; PC64LE9-NEXT: bl fmaxf
5120 ; PC64LE9-NEXT: xxswapd 0, 62
5121 ; PC64LE9-NEXT: fmr 31, 1
5122 ; PC64LE9-NEXT: xscvspdpn 1, 0
5123 ; PC64LE9-NEXT: xxswapd 0, 63
5124 ; PC64LE9-NEXT: xscvspdpn 2, 0
5125 ; PC64LE9-NEXT: bl fmaxf
5127 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
5128 ; PC64LE9-NEXT: fmr 30, 1
5129 ; PC64LE9-NEXT: xscvspdpn 1, 0
5130 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
5131 ; PC64LE9-NEXT: xscvspdpn 2, 0
5132 ; PC64LE9-NEXT: bl fmaxf
5134 ; PC64LE9-NEXT: xscvdpspn 34, 1
5135 ; PC64LE9-NEXT: xscvdpspn 35, 30
5136 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha
5137 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5138 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
5139 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
5140 ; PC64LE9-NEXT: addi 3, 3, .LCPI87_0@toc@l
5141 ; PC64LE9-NEXT: lxv 36, 0(3)
5142 ; PC64LE9-NEXT: vmrghw 2, 3, 2
5143 ; PC64LE9-NEXT: xscvdpspn 35, 31
5144 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
5145 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
5146 ; PC64LE9-NEXT: addi 1, 1, 80
5147 ; PC64LE9-NEXT: ld 0, 16(1)
5148 ; PC64LE9-NEXT: mtlr 0
5151 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32(
5154 metadata !"fpexcept.strict") #1
5155 ret <3 x float> %max
5158 define <3 x double> @constrained_vector_max_v3f64(<3 x double> %x, <3 x double> %y) #0 {
5159 ; PC64LE-LABEL: constrained_vector_max_v3f64:
5160 ; PC64LE: # %bb.0: # %entry
5161 ; PC64LE-NEXT: mflr 0
5162 ; PC64LE-NEXT: std 0, 16(1)
5163 ; PC64LE-NEXT: stdu 1, -64(1)
5164 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5165 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
5166 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
5167 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
5168 ; PC64LE-NEXT: xxmrghd 0, 5, 4
5169 ; PC64LE-NEXT: li 3, 48
5170 ; PC64LE-NEXT: xxmrghd 1, 2, 1
5171 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5172 ; PC64LE-NEXT: fmr 2, 6
5173 ; PC64LE-NEXT: xvmaxdp 63, 1, 0
5174 ; PC64LE-NEXT: fmr 1, 3
5175 ; PC64LE-NEXT: bl fmax
5177 ; PC64LE-NEXT: xxswapd 0, 63
5178 ; PC64LE-NEXT: li 3, 48
5179 ; PC64LE-NEXT: xxlor 2, 63, 63
5180 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5181 ; PC64LE-NEXT: fmr 3, 1
5182 ; PC64LE-NEXT: fmr 1, 0
5183 ; PC64LE-NEXT: addi 1, 1, 64
5184 ; PC64LE-NEXT: ld 0, 16(1)
5185 ; PC64LE-NEXT: mtlr 0
5188 ; PC64LE9-LABEL: constrained_vector_max_v3f64:
5189 ; PC64LE9: # %bb.0: # %entry
5190 ; PC64LE9-NEXT: mflr 0
5191 ; PC64LE9-NEXT: std 0, 16(1)
5192 ; PC64LE9-NEXT: stdu 1, -48(1)
5193 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
5194 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
5195 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
5196 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5197 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
5198 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
5199 ; PC64LE9-NEXT: fmr 2, 6
5200 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
5201 ; PC64LE9-NEXT: xvmaxdp 63, 1, 0
5202 ; PC64LE9-NEXT: fmr 1, 3
5203 ; PC64LE9-NEXT: bl fmax
5205 ; PC64LE9-NEXT: fmr 3, 1
5206 ; PC64LE9-NEXT: xxswapd 1, 63
5207 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
5208 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
5209 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5210 ; PC64LE9-NEXT: addi 1, 1, 48
5211 ; PC64LE9-NEXT: ld 0, 16(1)
5212 ; PC64LE9-NEXT: mtlr 0
5215 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
5218 metadata !"fpexcept.strict") #1
5219 ret <3 x double> %max
5222 define <4 x double> @constrained_vector_maxnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
5223 ; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
5224 ; PC64LE: # %bb.0: # %entry
5225 ; PC64LE-NEXT: xvmaxdp 34, 34, 36
5226 ; PC64LE-NEXT: xvmaxdp 35, 35, 37
5229 ; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
5230 ; PC64LE9: # %bb.0: # %entry
5231 ; PC64LE9-NEXT: xvmaxdp 34, 34, 36
5232 ; PC64LE9-NEXT: xvmaxdp 35, 35, 37
5235 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64(
5238 metadata !"fpexcept.strict") #1
5239 ret <4 x double> %max
5242 define <1 x float> @constrained_vector_minnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
5243 ; PC64LE-LABEL: constrained_vector_minnum_v1f32:
5244 ; PC64LE: # %bb.0: # %entry
5245 ; PC64LE-NEXT: mflr 0
5246 ; PC64LE-NEXT: std 0, 16(1)
5247 ; PC64LE-NEXT: stdu 1, -32(1)
5248 ; PC64LE-NEXT: bl fminf
5250 ; PC64LE-NEXT: addi 1, 1, 32
5251 ; PC64LE-NEXT: ld 0, 16(1)
5252 ; PC64LE-NEXT: mtlr 0
5255 ; PC64LE9-LABEL: constrained_vector_minnum_v1f32:
5256 ; PC64LE9: # %bb.0: # %entry
5257 ; PC64LE9-NEXT: mflr 0
5258 ; PC64LE9-NEXT: std 0, 16(1)
5259 ; PC64LE9-NEXT: stdu 1, -32(1)
5260 ; PC64LE9-NEXT: bl fminf
5262 ; PC64LE9-NEXT: addi 1, 1, 32
5263 ; PC64LE9-NEXT: ld 0, 16(1)
5264 ; PC64LE9-NEXT: mtlr 0
5267 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
5268 <1 x float> %x, <1 x float> %y,
5269 metadata !"fpexcept.strict") #1
5270 ret <1 x float> %min
5273 define <2 x double> @constrained_vector_minnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
5274 ; PC64LE-LABEL: constrained_vector_minnum_v2f64:
5275 ; PC64LE: # %bb.0: # %entry
5276 ; PC64LE-NEXT: xvmindp 34, 34, 35
5279 ; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
5280 ; PC64LE9: # %bb.0: # %entry
5281 ; PC64LE9-NEXT: xvmindp 34, 34, 35
5284 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(
5287 metadata !"fpexcept.strict") #1
5288 ret <2 x double> %min
5291 define <3 x float> @constrained_vector_minnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
5292 ; PC64LE-LABEL: constrained_vector_minnum_v3f32:
5293 ; PC64LE: # %bb.0: # %entry
5294 ; PC64LE-NEXT: mflr 0
5295 ; PC64LE-NEXT: std 0, 16(1)
5296 ; PC64LE-NEXT: stdu 1, -96(1)
5297 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
5298 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
5299 ; PC64LE-NEXT: li 3, 48
5300 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
5301 ; PC64LE-NEXT: li 3, 64
5302 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
5303 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
5304 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5305 ; PC64LE-NEXT: xscvspdpn 1, 0
5306 ; PC64LE-NEXT: xscvspdpn 2, 2
5307 ; PC64LE-NEXT: vmr 31, 3
5308 ; PC64LE-NEXT: vmr 30, 2
5309 ; PC64LE-NEXT: bl fminf
5311 ; PC64LE-NEXT: xxswapd 0, 62
5312 ; PC64LE-NEXT: xxswapd 2, 63
5313 ; PC64LE-NEXT: fmr 31, 1
5314 ; PC64LE-NEXT: xscvspdpn 1, 0
5315 ; PC64LE-NEXT: xscvspdpn 2, 2
5316 ; PC64LE-NEXT: bl fminf
5318 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
5319 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
5320 ; PC64LE-NEXT: fmr 30, 1
5321 ; PC64LE-NEXT: xscvspdpn 1, 0
5322 ; PC64LE-NEXT: xscvspdpn 2, 2
5323 ; PC64LE-NEXT: bl fminf
5325 ; PC64LE-NEXT: xscvdpspn 34, 30
5326 ; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha
5327 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
5328 ; PC64LE-NEXT: xscvdpspn 35, 1
5329 ; PC64LE-NEXT: addi 3, 3, .LCPI92_0@toc@l
5330 ; PC64LE-NEXT: lvx 4, 0, 3
5331 ; PC64LE-NEXT: li 3, 64
5332 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5333 ; PC64LE-NEXT: li 3, 48
5334 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
5335 ; PC64LE-NEXT: vmrghw 2, 2, 3
5336 ; PC64LE-NEXT: xscvdpspn 35, 31
5337 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
5338 ; PC64LE-NEXT: vperm 2, 3, 2, 4
5339 ; PC64LE-NEXT: addi 1, 1, 96
5340 ; PC64LE-NEXT: ld 0, 16(1)
5341 ; PC64LE-NEXT: mtlr 0
5344 ; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
5345 ; PC64LE9: # %bb.0: # %entry
5346 ; PC64LE9-NEXT: mflr 0
5347 ; PC64LE9-NEXT: std 0, 16(1)
5348 ; PC64LE9-NEXT: stdu 1, -80(1)
5349 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5350 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
5351 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
5352 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
5353 ; PC64LE9-NEXT: xscvspdpn 1, 0
5354 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
5355 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
5356 ; PC64LE9-NEXT: xscvspdpn 2, 0
5357 ; PC64LE9-NEXT: vmr 31, 3
5358 ; PC64LE9-NEXT: vmr 30, 2
5359 ; PC64LE9-NEXT: bl fminf
5361 ; PC64LE9-NEXT: xxswapd 0, 62
5362 ; PC64LE9-NEXT: fmr 31, 1
5363 ; PC64LE9-NEXT: xscvspdpn 1, 0
5364 ; PC64LE9-NEXT: xxswapd 0, 63
5365 ; PC64LE9-NEXT: xscvspdpn 2, 0
5366 ; PC64LE9-NEXT: bl fminf
5368 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
5369 ; PC64LE9-NEXT: fmr 30, 1
5370 ; PC64LE9-NEXT: xscvspdpn 1, 0
5371 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
5372 ; PC64LE9-NEXT: xscvspdpn 2, 0
5373 ; PC64LE9-NEXT: bl fminf
5375 ; PC64LE9-NEXT: xscvdpspn 34, 1
5376 ; PC64LE9-NEXT: xscvdpspn 35, 30
5377 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha
5378 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5379 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
5380 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
5381 ; PC64LE9-NEXT: addi 3, 3, .LCPI92_0@toc@l
5382 ; PC64LE9-NEXT: lxv 36, 0(3)
5383 ; PC64LE9-NEXT: vmrghw 2, 3, 2
5384 ; PC64LE9-NEXT: xscvdpspn 35, 31
5385 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
5386 ; PC64LE9-NEXT: vperm 2, 3, 2, 4
5387 ; PC64LE9-NEXT: addi 1, 1, 80
5388 ; PC64LE9-NEXT: ld 0, 16(1)
5389 ; PC64LE9-NEXT: mtlr 0
5392 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32(
5395 metadata !"fpexcept.strict") #1
5396 ret <3 x float> %min
5399 define <3 x double> @constrained_vector_min_v3f64(<3 x double> %x, <3 x double> %y) #0 {
5400 ; PC64LE-LABEL: constrained_vector_min_v3f64:
5401 ; PC64LE: # %bb.0: # %entry
5402 ; PC64LE-NEXT: mflr 0
5403 ; PC64LE-NEXT: std 0, 16(1)
5404 ; PC64LE-NEXT: stdu 1, -64(1)
5405 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5406 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
5407 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
5408 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
5409 ; PC64LE-NEXT: xxmrghd 0, 5, 4
5410 ; PC64LE-NEXT: li 3, 48
5411 ; PC64LE-NEXT: xxmrghd 1, 2, 1
5412 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5413 ; PC64LE-NEXT: fmr 2, 6
5414 ; PC64LE-NEXT: xvmindp 63, 1, 0
5415 ; PC64LE-NEXT: fmr 1, 3
5416 ; PC64LE-NEXT: bl fmin
5418 ; PC64LE-NEXT: xxswapd 0, 63
5419 ; PC64LE-NEXT: li 3, 48
5420 ; PC64LE-NEXT: xxlor 2, 63, 63
5421 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5422 ; PC64LE-NEXT: fmr 3, 1
5423 ; PC64LE-NEXT: fmr 1, 0
5424 ; PC64LE-NEXT: addi 1, 1, 64
5425 ; PC64LE-NEXT: ld 0, 16(1)
5426 ; PC64LE-NEXT: mtlr 0
5429 ; PC64LE9-LABEL: constrained_vector_min_v3f64:
5430 ; PC64LE9: # %bb.0: # %entry
5431 ; PC64LE9-NEXT: mflr 0
5432 ; PC64LE9-NEXT: std 0, 16(1)
5433 ; PC64LE9-NEXT: stdu 1, -48(1)
5434 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
5435 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
5436 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
5437 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5438 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
5439 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
5440 ; PC64LE9-NEXT: fmr 2, 6
5441 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
5442 ; PC64LE9-NEXT: xvmindp 63, 1, 0
5443 ; PC64LE9-NEXT: fmr 1, 3
5444 ; PC64LE9-NEXT: bl fmin
5446 ; PC64LE9-NEXT: fmr 3, 1
5447 ; PC64LE9-NEXT: xxswapd 1, 63
5448 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
5449 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
5450 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5451 ; PC64LE9-NEXT: addi 1, 1, 48
5452 ; PC64LE9-NEXT: ld 0, 16(1)
5453 ; PC64LE9-NEXT: mtlr 0
5456 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
5459 metadata !"fpexcept.strict") #1
5460 ret <3 x double> %min
5463 define <4 x double> @constrained_vector_minnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
5464 ; PC64LE-LABEL: constrained_vector_minnum_v4f64:
5465 ; PC64LE: # %bb.0: # %entry
5466 ; PC64LE-NEXT: xvmindp 34, 34, 36
5467 ; PC64LE-NEXT: xvmindp 35, 35, 37
5470 ; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
5471 ; PC64LE9: # %bb.0: # %entry
5472 ; PC64LE9-NEXT: xvmindp 34, 34, 36
5473 ; PC64LE9-NEXT: xvmindp 35, 35, 37
5476 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64(
5479 metadata !"fpexcept.strict") #1
5480 ret <4 x double> %min
5483 define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32(<1 x float> %x) #0 {
5484 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5485 ; PC64LE: # %bb.0: # %entry
5486 ; PC64LE-NEXT: xscvdpsxws 0, 1
5487 ; PC64LE-NEXT: mffprwz 3, 0
5490 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5491 ; PC64LE9: # %bb.0: # %entry
5492 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5493 ; PC64LE9-NEXT: mffprwz 3, 0
5496 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(
5498 metadata !"fpexcept.strict") #0
5499 ret <1 x i32> %result
5502 define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32(<2 x float> %x) #0 {
5503 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5504 ; PC64LE: # %bb.0: # %entry
5505 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5506 ; PC64LE-NEXT: xxswapd 1, 34
5507 ; PC64LE-NEXT: xscvspdpn 0, 0
5508 ; PC64LE-NEXT: xscvspdpn 1, 1
5509 ; PC64LE-NEXT: xscvdpsxws 0, 0
5510 ; PC64LE-NEXT: xscvdpsxws 1, 1
5511 ; PC64LE-NEXT: mffprwz 3, 0
5512 ; PC64LE-NEXT: mffprwz 4, 1
5513 ; PC64LE-NEXT: mtvsrwz 34, 3
5514 ; PC64LE-NEXT: mtvsrwz 35, 4
5515 ; PC64LE-NEXT: vmrghw 2, 3, 2
5518 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5519 ; PC64LE9: # %bb.0: # %entry
5520 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5521 ; PC64LE9-NEXT: xscvspdpn 0, 0
5522 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5523 ; PC64LE9-NEXT: mffprwz 3, 0
5524 ; PC64LE9-NEXT: xxswapd 0, 34
5525 ; PC64LE9-NEXT: mtvsrwz 35, 3
5526 ; PC64LE9-NEXT: xscvspdpn 0, 0
5527 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5528 ; PC64LE9-NEXT: mffprwz 3, 0
5529 ; PC64LE9-NEXT: mtvsrwz 34, 3
5530 ; PC64LE9-NEXT: vmrghw 2, 2, 3
5533 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(
5535 metadata !"fpexcept.strict") #0
5536 ret <2 x i32> %result
5539 define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 {
5540 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5541 ; PC64LE: # %bb.0: # %entry
5542 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5543 ; PC64LE-NEXT: xxswapd 1, 34
5544 ; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha
5545 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5546 ; PC64LE-NEXT: addi 3, 3, .LCPI97_0@toc@l
5547 ; PC64LE-NEXT: xscvspdpn 0, 0
5548 ; PC64LE-NEXT: xscvspdpn 1, 1
5549 ; PC64LE-NEXT: xscvspdpn 2, 2
5550 ; PC64LE-NEXT: xscvdpsxws 0, 0
5551 ; PC64LE-NEXT: xscvdpsxws 1, 1
5552 ; PC64LE-NEXT: xscvdpsxws 2, 2
5553 ; PC64LE-NEXT: mffprwz 4, 0
5554 ; PC64LE-NEXT: mffprwz 5, 1
5555 ; PC64LE-NEXT: mtvsrwz 34, 4
5556 ; PC64LE-NEXT: mtvsrwz 35, 5
5557 ; PC64LE-NEXT: mffprwz 4, 2
5558 ; PC64LE-NEXT: vmrghw 2, 3, 2
5559 ; PC64LE-NEXT: lvx 3, 0, 3
5560 ; PC64LE-NEXT: mtvsrwz 36, 4
5561 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5564 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5565 ; PC64LE9: # %bb.0: # %entry
5566 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5567 ; PC64LE9-NEXT: xscvspdpn 0, 0
5568 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5569 ; PC64LE9-NEXT: mffprwz 3, 0
5570 ; PC64LE9-NEXT: xxswapd 0, 34
5571 ; PC64LE9-NEXT: mtvsrwz 35, 3
5572 ; PC64LE9-NEXT: xscvspdpn 0, 0
5573 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5574 ; PC64LE9-NEXT: mffprwz 3, 0
5575 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5576 ; PC64LE9-NEXT: mtvsrwz 36, 3
5577 ; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha
5578 ; PC64LE9-NEXT: xscvspdpn 0, 0
5579 ; PC64LE9-NEXT: addi 3, 3, .LCPI97_0@toc@l
5580 ; PC64LE9-NEXT: vmrghw 3, 4, 3
5581 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5582 ; PC64LE9-NEXT: lxv 36, 0(3)
5583 ; PC64LE9-NEXT: mffprwz 3, 0
5584 ; PC64LE9-NEXT: mtvsrwz 34, 3
5585 ; PC64LE9-NEXT: vperm 2, 2, 3, 4
5588 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(
5590 metadata !"fpexcept.strict") #0
5591 ret <3 x i32> %result
5594 define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32(<4 x float> %x) #0 {
5595 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5596 ; PC64LE: # %bb.0: # %entry
5597 ; PC64LE-NEXT: xvcvspsxws 34, 34
5600 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5601 ; PC64LE9: # %bb.0: # %entry
5602 ; PC64LE9-NEXT: xvcvspsxws 34, 34
5605 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(
5607 metadata !"fpexcept.strict") #0
5608 ret <4 x i32> %result
5611 define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32(<1 x float> %x) #0 {
5612 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5613 ; PC64LE: # %bb.0: # %entry
5614 ; PC64LE-NEXT: xscvdpsxds 0, 1
5615 ; PC64LE-NEXT: mffprd 3, 0
5618 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5619 ; PC64LE9: # %bb.0: # %entry
5620 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5621 ; PC64LE9-NEXT: mffprd 3, 0
5624 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(
5626 metadata !"fpexcept.strict") #0
5627 ret <1 x i64> %result
5630 define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32(<2 x float> %x) #0 {
5631 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5632 ; PC64LE: # %bb.0: # %entry
5633 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5634 ; PC64LE-NEXT: xxswapd 1, 34
5635 ; PC64LE-NEXT: xscvspdpn 0, 0
5636 ; PC64LE-NEXT: xscvspdpn 1, 1
5637 ; PC64LE-NEXT: xscvdpsxds 0, 0
5638 ; PC64LE-NEXT: xscvdpsxds 1, 1
5639 ; PC64LE-NEXT: mffprd 3, 0
5640 ; PC64LE-NEXT: mffprd 4, 1
5641 ; PC64LE-NEXT: mtfprd 0, 3
5642 ; PC64LE-NEXT: mtfprd 1, 4
5643 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5646 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5647 ; PC64LE9: # %bb.0: # %entry
5648 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5649 ; PC64LE9-NEXT: xscvspdpn 0, 0
5650 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5651 ; PC64LE9-NEXT: mffprd 3, 0
5652 ; PC64LE9-NEXT: xxswapd 0, 34
5653 ; PC64LE9-NEXT: xscvspdpn 0, 0
5654 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5655 ; PC64LE9-NEXT: mffprd 4, 0
5656 ; PC64LE9-NEXT: mtvsrdd 34, 4, 3
5659 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(
5661 metadata !"fpexcept.strict") #0
5662 ret <2 x i64> %result
5665 define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32(<3 x float> %x) #0 {
5666 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5667 ; PC64LE: # %bb.0: # %entry
5668 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5669 ; PC64LE-NEXT: xxswapd 1, 34
5670 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5671 ; PC64LE-NEXT: xscvspdpn 0, 0
5672 ; PC64LE-NEXT: xscvspdpn 1, 1
5673 ; PC64LE-NEXT: xscvspdpn 2, 2
5674 ; PC64LE-NEXT: xscvdpsxds 0, 0
5675 ; PC64LE-NEXT: xscvdpsxds 1, 1
5676 ; PC64LE-NEXT: xscvdpsxds 2, 2
5677 ; PC64LE-NEXT: mffprd 3, 0
5678 ; PC64LE-NEXT: mffprd 4, 1
5679 ; PC64LE-NEXT: mffprd 5, 2
5682 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5683 ; PC64LE9: # %bb.0: # %entry
5684 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5685 ; PC64LE9-NEXT: xscvspdpn 0, 0
5686 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5687 ; PC64LE9-NEXT: mffprd 3, 0
5688 ; PC64LE9-NEXT: xxswapd 0, 34
5689 ; PC64LE9-NEXT: xscvspdpn 0, 0
5690 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5691 ; PC64LE9-NEXT: mffprd 4, 0
5692 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5693 ; PC64LE9-NEXT: xscvspdpn 0, 0
5694 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5695 ; PC64LE9-NEXT: mffprd 5, 0
5698 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(
5700 metadata !"fpexcept.strict") #0
5701 ret <3 x i64> %result
5704 define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32(<4 x float> %x) #0 {
5705 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5706 ; PC64LE: # %bb.0: # %entry
5707 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5708 ; PC64LE-NEXT: xscvspdpn 1, 34
5709 ; PC64LE-NEXT: xxswapd 2, 34
5710 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 1
5711 ; PC64LE-NEXT: xscvspdpn 0, 0
5712 ; PC64LE-NEXT: xscvspdpn 2, 2
5713 ; PC64LE-NEXT: xscvspdpn 3, 3
5714 ; PC64LE-NEXT: xscvdpsxds 1, 1
5715 ; PC64LE-NEXT: xscvdpsxds 0, 0
5716 ; PC64LE-NEXT: xscvdpsxds 2, 2
5717 ; PC64LE-NEXT: xscvdpsxds 3, 3
5718 ; PC64LE-NEXT: mffprd 3, 1
5719 ; PC64LE-NEXT: mtfprd 1, 3
5720 ; PC64LE-NEXT: mffprd 3, 0
5721 ; PC64LE-NEXT: mffprd 4, 2
5722 ; PC64LE-NEXT: mtfprd 0, 3
5723 ; PC64LE-NEXT: mffprd 3, 3
5724 ; PC64LE-NEXT: mtfprd 2, 4
5725 ; PC64LE-NEXT: mtfprd 3, 3
5726 ; PC64LE-NEXT: xxmrghd 34, 2, 0
5727 ; PC64LE-NEXT: xxmrghd 35, 1, 3
5730 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5731 ; PC64LE9: # %bb.0: # %entry
5732 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5733 ; PC64LE9-NEXT: xscvspdpn 0, 0
5734 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5735 ; PC64LE9-NEXT: mffprd 3, 0
5736 ; PC64LE9-NEXT: xxswapd 0, 34
5737 ; PC64LE9-NEXT: xscvspdpn 0, 0
5738 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5739 ; PC64LE9-NEXT: mffprd 4, 0
5740 ; PC64LE9-NEXT: xscvspdpn 0, 34
5741 ; PC64LE9-NEXT: mtvsrdd 36, 4, 3
5742 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5743 ; PC64LE9-NEXT: mffprd 3, 0
5744 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5745 ; PC64LE9-NEXT: vmr 2, 4
5746 ; PC64LE9-NEXT: xscvspdpn 0, 0
5747 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5748 ; PC64LE9-NEXT: mffprd 4, 0
5749 ; PC64LE9-NEXT: mtvsrdd 35, 3, 4
5752 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(
5754 metadata !"fpexcept.strict") #0
5755 ret <4 x i64> %result
5758 define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64(<1 x double> %x) #0 {
5759 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5760 ; PC64LE: # %bb.0: # %entry
5761 ; PC64LE-NEXT: xscvdpsxws 0, 1
5762 ; PC64LE-NEXT: mffprwz 3, 0
5765 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5766 ; PC64LE9: # %bb.0: # %entry
5767 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5768 ; PC64LE9-NEXT: mffprwz 3, 0
5771 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(
5773 metadata !"fpexcept.strict") #0
5774 ret <1 x i32> %result
5778 define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64(<2 x double> %x) #0 {
5779 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5780 ; PC64LE: # %bb.0: # %entry
5781 ; PC64LE-NEXT: xxswapd 0, 34
5782 ; PC64LE-NEXT: xscvdpsxws 1, 34
5783 ; PC64LE-NEXT: xscvdpsxws 0, 0
5784 ; PC64LE-NEXT: mffprwz 3, 1
5785 ; PC64LE-NEXT: mtvsrwz 34, 3
5786 ; PC64LE-NEXT: mffprwz 4, 0
5787 ; PC64LE-NEXT: mtvsrwz 35, 4
5788 ; PC64LE-NEXT: vmrghw 2, 2, 3
5791 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5792 ; PC64LE9: # %bb.0: # %entry
5793 ; PC64LE9-NEXT: xscvdpsxws 0, 34
5794 ; PC64LE9-NEXT: mffprwz 3, 0
5795 ; PC64LE9-NEXT: xxswapd 0, 34
5796 ; PC64LE9-NEXT: mtvsrwz 35, 3
5797 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5798 ; PC64LE9-NEXT: mffprwz 3, 0
5799 ; PC64LE9-NEXT: mtvsrwz 34, 3
5800 ; PC64LE9-NEXT: vmrghw 2, 3, 2
5803 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(
5805 metadata !"fpexcept.strict") #0
5806 ret <2 x i32> %result
5809 define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 {
5810 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5811 ; PC64LE: # %bb.0: # %entry
5812 ; PC64LE-NEXT: xscvdpsxws 0, 1
5813 ; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha
5814 ; PC64LE-NEXT: xscvdpsxws 1, 2
5815 ; PC64LE-NEXT: addi 3, 3, .LCPI105_0@toc@l
5816 ; PC64LE-NEXT: xscvdpsxws 2, 3
5817 ; PC64LE-NEXT: mffprwz 4, 0
5818 ; PC64LE-NEXT: mffprwz 5, 1
5819 ; PC64LE-NEXT: mtvsrwz 34, 4
5820 ; PC64LE-NEXT: mtvsrwz 35, 5
5821 ; PC64LE-NEXT: mffprwz 4, 2
5822 ; PC64LE-NEXT: vmrghw 2, 3, 2
5823 ; PC64LE-NEXT: lvx 3, 0, 3
5824 ; PC64LE-NEXT: mtvsrwz 36, 4
5825 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5828 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5829 ; PC64LE9: # %bb.0: # %entry
5830 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5831 ; PC64LE9-NEXT: mffprwz 3, 0
5832 ; PC64LE9-NEXT: xscvdpsxws 0, 2
5833 ; PC64LE9-NEXT: mtvsrwz 34, 3
5834 ; PC64LE9-NEXT: mffprwz 3, 0
5835 ; PC64LE9-NEXT: xscvdpsxws 0, 3
5836 ; PC64LE9-NEXT: mtvsrwz 35, 3
5837 ; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha
5838 ; PC64LE9-NEXT: addi 3, 3, .LCPI105_0@toc@l
5839 ; PC64LE9-NEXT: vmrghw 2, 3, 2
5840 ; PC64LE9-NEXT: lxv 35, 0(3)
5841 ; PC64LE9-NEXT: mffprwz 3, 0
5842 ; PC64LE9-NEXT: mtvsrwz 36, 3
5843 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
5846 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(
5848 metadata !"fpexcept.strict") #0
5849 ret <3 x i32> %result
5852 define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64(<4 x double> %x) #0 {
5853 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5854 ; PC64LE: # %bb.0: # %entry
5855 ; PC64LE-NEXT: xxswapd 0, 34
5856 ; PC64LE-NEXT: xxswapd 2, 35
5857 ; PC64LE-NEXT: xscvdpsxws 1, 34
5858 ; PC64LE-NEXT: xscvdpsxws 3, 35
5859 ; PC64LE-NEXT: xscvdpsxws 0, 0
5860 ; PC64LE-NEXT: xscvdpsxws 2, 2
5861 ; PC64LE-NEXT: mffprwz 3, 1
5862 ; PC64LE-NEXT: mffprwz 4, 3
5863 ; PC64LE-NEXT: mffprwz 5, 0
5864 ; PC64LE-NEXT: mffprwz 6, 2
5865 ; PC64LE-NEXT: rldimi 5, 3, 32, 0
5866 ; PC64LE-NEXT: rldimi 6, 4, 32, 0
5867 ; PC64LE-NEXT: mtfprd 0, 5
5868 ; PC64LE-NEXT: mtfprd 1, 6
5869 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5872 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5873 ; PC64LE9: # %bb.0: # %entry
5874 ; PC64LE9-NEXT: xscvdpsxws 0, 34
5875 ; PC64LE9-NEXT: mffprwz 3, 0
5876 ; PC64LE9-NEXT: xxswapd 0, 34
5877 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5878 ; PC64LE9-NEXT: mffprwz 4, 0
5879 ; PC64LE9-NEXT: xscvdpsxws 0, 35
5880 ; PC64LE9-NEXT: rldimi 4, 3, 32, 0
5881 ; PC64LE9-NEXT: mffprwz 3, 0
5882 ; PC64LE9-NEXT: xxswapd 0, 35
5883 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5884 ; PC64LE9-NEXT: mffprwz 5, 0
5885 ; PC64LE9-NEXT: rldimi 5, 3, 32, 0
5886 ; PC64LE9-NEXT: mtvsrdd 34, 5, 4
5889 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(
5891 metadata !"fpexcept.strict") #0
5892 ret <4 x i32> %result
5895 define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64(<1 x double> %x) #0 {
5896 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64:
5897 ; PC64LE: # %bb.0: # %entry
5898 ; PC64LE-NEXT: xscvdpsxds 0, 1
5899 ; PC64LE-NEXT: mffprd 3, 0
5902 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64:
5903 ; PC64LE9: # %bb.0: # %entry
5904 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5905 ; PC64LE9-NEXT: mffprd 3, 0
5908 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(
5910 metadata !"fpexcept.strict") #0
5911 ret <1 x i64> %result
5914 define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64(<2 x double> %x) #0 {
5915 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64:
5916 ; PC64LE: # %bb.0: # %entry
5917 ; PC64LE-NEXT: xvcvdpsxds 34, 34
5920 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64:
5921 ; PC64LE9: # %bb.0: # %entry
5922 ; PC64LE9-NEXT: xvcvdpsxds 34, 34
5925 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(
5927 metadata !"fpexcept.strict") #0
5928 ret <2 x i64> %result
5931 define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64(<3 x double> %x) #0 {
5932 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64:
5933 ; PC64LE: # %bb.0: # %entry
5934 ; PC64LE-NEXT: xscvdpsxds 0, 1
5935 ; PC64LE-NEXT: xscvdpsxds 1, 2
5936 ; PC64LE-NEXT: xscvdpsxds 2, 3
5937 ; PC64LE-NEXT: mffprd 3, 0
5938 ; PC64LE-NEXT: mffprd 4, 1
5939 ; PC64LE-NEXT: mffprd 5, 2
5942 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64:
5943 ; PC64LE9: # %bb.0: # %entry
5944 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5945 ; PC64LE9-NEXT: mffprd 3, 0
5946 ; PC64LE9-NEXT: xscvdpsxds 0, 2
5947 ; PC64LE9-NEXT: mffprd 4, 0
5948 ; PC64LE9-NEXT: xscvdpsxds 0, 3
5949 ; PC64LE9-NEXT: mffprd 5, 0
5952 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(
5954 metadata !"fpexcept.strict") #0
5955 ret <3 x i64> %result
5958 define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64(<4 x double> %x) #0 {
5959 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64:
5960 ; PC64LE: # %bb.0: # %entry
5961 ; PC64LE-NEXT: xvcvdpsxds 35, 35
5962 ; PC64LE-NEXT: xvcvdpsxds 34, 34
5965 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64:
5966 ; PC64LE9: # %bb.0: # %entry
5967 ; PC64LE9-NEXT: xvcvdpsxds 35, 35
5968 ; PC64LE9-NEXT: xvcvdpsxds 34, 34
5971 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(
5973 metadata !"fpexcept.strict") #0
5974 ret <4 x i64> %result
5977 define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32(<1 x float> %x) #0 {
5978 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32:
5979 ; PC64LE: # %bb.0: # %entry
5980 ; PC64LE-NEXT: xscvdpuxws 0, 1
5981 ; PC64LE-NEXT: mffprwz 3, 0
5984 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32:
5985 ; PC64LE9: # %bb.0: # %entry
5986 ; PC64LE9-NEXT: xscvdpuxws 0, 1
5987 ; PC64LE9-NEXT: mffprwz 3, 0
5990 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(
5992 metadata !"fpexcept.strict") #0
5993 ret <1 x i32> %result
5996 define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32(<2 x float> %x) #0 {
5997 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32:
5998 ; PC64LE: # %bb.0: # %entry
5999 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6000 ; PC64LE-NEXT: xxswapd 1, 34
6001 ; PC64LE-NEXT: xscvspdpn 0, 0
6002 ; PC64LE-NEXT: xscvspdpn 1, 1
6003 ; PC64LE-NEXT: xscvdpuxws 0, 0
6004 ; PC64LE-NEXT: xscvdpuxws 1, 1
6005 ; PC64LE-NEXT: mffprwz 3, 0
6006 ; PC64LE-NEXT: mffprwz 4, 1
6007 ; PC64LE-NEXT: mtvsrwz 34, 3
6008 ; PC64LE-NEXT: mtvsrwz 35, 4
6009 ; PC64LE-NEXT: vmrghw 2, 3, 2
6012 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32:
6013 ; PC64LE9: # %bb.0: # %entry
6014 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6015 ; PC64LE9-NEXT: xscvspdpn 0, 0
6016 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6017 ; PC64LE9-NEXT: mffprwz 3, 0
6018 ; PC64LE9-NEXT: xxswapd 0, 34
6019 ; PC64LE9-NEXT: mtvsrwz 35, 3
6020 ; PC64LE9-NEXT: xscvspdpn 0, 0
6021 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6022 ; PC64LE9-NEXT: mffprwz 3, 0
6023 ; PC64LE9-NEXT: mtvsrwz 34, 3
6024 ; PC64LE9-NEXT: vmrghw 2, 2, 3
6027 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(
6029 metadata !"fpexcept.strict") #0
6030 ret <2 x i32> %result
6033 define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 {
6034 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6035 ; PC64LE: # %bb.0: # %entry
6036 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6037 ; PC64LE-NEXT: xxswapd 1, 34
6038 ; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha
6039 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6040 ; PC64LE-NEXT: addi 3, 3, .LCPI113_0@toc@l
6041 ; PC64LE-NEXT: xscvspdpn 0, 0
6042 ; PC64LE-NEXT: xscvspdpn 1, 1
6043 ; PC64LE-NEXT: xscvspdpn 2, 2
6044 ; PC64LE-NEXT: xscvdpuxws 0, 0
6045 ; PC64LE-NEXT: xscvdpuxws 1, 1
6046 ; PC64LE-NEXT: xscvdpuxws 2, 2
6047 ; PC64LE-NEXT: mffprwz 4, 0
6048 ; PC64LE-NEXT: mffprwz 5, 1
6049 ; PC64LE-NEXT: mtvsrwz 34, 4
6050 ; PC64LE-NEXT: mtvsrwz 35, 5
6051 ; PC64LE-NEXT: mffprwz 4, 2
6052 ; PC64LE-NEXT: vmrghw 2, 3, 2
6053 ; PC64LE-NEXT: lvx 3, 0, 3
6054 ; PC64LE-NEXT: mtvsrwz 36, 4
6055 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6058 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6059 ; PC64LE9: # %bb.0: # %entry
6060 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6061 ; PC64LE9-NEXT: xscvspdpn 0, 0
6062 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6063 ; PC64LE9-NEXT: mffprwz 3, 0
6064 ; PC64LE9-NEXT: xxswapd 0, 34
6065 ; PC64LE9-NEXT: mtvsrwz 35, 3
6066 ; PC64LE9-NEXT: xscvspdpn 0, 0
6067 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6068 ; PC64LE9-NEXT: mffprwz 3, 0
6069 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6070 ; PC64LE9-NEXT: mtvsrwz 36, 3
6071 ; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha
6072 ; PC64LE9-NEXT: xscvspdpn 0, 0
6073 ; PC64LE9-NEXT: addi 3, 3, .LCPI113_0@toc@l
6074 ; PC64LE9-NEXT: vmrghw 3, 4, 3
6075 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6076 ; PC64LE9-NEXT: lxv 36, 0(3)
6077 ; PC64LE9-NEXT: mffprwz 3, 0
6078 ; PC64LE9-NEXT: mtvsrwz 34, 3
6079 ; PC64LE9-NEXT: vperm 2, 2, 3, 4
6082 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(
6084 metadata !"fpexcept.strict") #0
6085 ret <3 x i32> %result
6088 define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32(<4 x float> %x) #0 {
6089 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6090 ; PC64LE: # %bb.0: # %entry
6091 ; PC64LE-NEXT: xvcvspuxws 34, 34
6094 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6095 ; PC64LE9: # %bb.0: # %entry
6096 ; PC64LE9-NEXT: xvcvspuxws 34, 34
6099 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(
6101 metadata !"fpexcept.strict") #0
6102 ret <4 x i32> %result
6105 define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32(<1 x float> %x) #0 {
6106 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6107 ; PC64LE: # %bb.0: # %entry
6108 ; PC64LE-NEXT: xscvdpuxds 0, 1
6109 ; PC64LE-NEXT: mffprd 3, 0
6112 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6113 ; PC64LE9: # %bb.0: # %entry
6114 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6115 ; PC64LE9-NEXT: mffprd 3, 0
6118 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(
6120 metadata !"fpexcept.strict") #0
6121 ret <1 x i64> %result
6124 define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32(<2 x float> %x) #0 {
6125 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6126 ; PC64LE: # %bb.0: # %entry
6127 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6128 ; PC64LE-NEXT: xxswapd 1, 34
6129 ; PC64LE-NEXT: xscvspdpn 0, 0
6130 ; PC64LE-NEXT: xscvspdpn 1, 1
6131 ; PC64LE-NEXT: xscvdpuxds 0, 0
6132 ; PC64LE-NEXT: xscvdpuxds 1, 1
6133 ; PC64LE-NEXT: mffprd 3, 0
6134 ; PC64LE-NEXT: mffprd 4, 1
6135 ; PC64LE-NEXT: mtfprd 0, 3
6136 ; PC64LE-NEXT: mtfprd 1, 4
6137 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6140 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6141 ; PC64LE9: # %bb.0: # %entry
6142 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6143 ; PC64LE9-NEXT: xscvspdpn 0, 0
6144 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6145 ; PC64LE9-NEXT: mffprd 3, 0
6146 ; PC64LE9-NEXT: xxswapd 0, 34
6147 ; PC64LE9-NEXT: xscvspdpn 0, 0
6148 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6149 ; PC64LE9-NEXT: mffprd 4, 0
6150 ; PC64LE9-NEXT: mtvsrdd 34, 4, 3
6153 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(
6155 metadata !"fpexcept.strict") #0
6156 ret <2 x i64> %result
6159 define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32(<3 x float> %x) #0 {
6160 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6161 ; PC64LE: # %bb.0: # %entry
6162 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6163 ; PC64LE-NEXT: xxswapd 1, 34
6164 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6165 ; PC64LE-NEXT: xscvspdpn 0, 0
6166 ; PC64LE-NEXT: xscvspdpn 1, 1
6167 ; PC64LE-NEXT: xscvspdpn 2, 2
6168 ; PC64LE-NEXT: xscvdpuxds 0, 0
6169 ; PC64LE-NEXT: xscvdpuxds 1, 1
6170 ; PC64LE-NEXT: xscvdpuxds 2, 2
6171 ; PC64LE-NEXT: mffprd 3, 0
6172 ; PC64LE-NEXT: mffprd 4, 1
6173 ; PC64LE-NEXT: mffprd 5, 2
6176 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6177 ; PC64LE9: # %bb.0: # %entry
6178 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6179 ; PC64LE9-NEXT: xscvspdpn 0, 0
6180 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6181 ; PC64LE9-NEXT: mffprd 3, 0
6182 ; PC64LE9-NEXT: xxswapd 0, 34
6183 ; PC64LE9-NEXT: xscvspdpn 0, 0
6184 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6185 ; PC64LE9-NEXT: mffprd 4, 0
6186 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6187 ; PC64LE9-NEXT: xscvspdpn 0, 0
6188 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6189 ; PC64LE9-NEXT: mffprd 5, 0
6192 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(
6194 metadata !"fpexcept.strict") #0
6195 ret <3 x i64> %result
6198 define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32(<4 x float> %x) #0 {
6199 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6200 ; PC64LE: # %bb.0: # %entry
6201 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6202 ; PC64LE-NEXT: xscvspdpn 1, 34
6203 ; PC64LE-NEXT: xxswapd 2, 34
6204 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 1
6205 ; PC64LE-NEXT: xscvspdpn 0, 0
6206 ; PC64LE-NEXT: xscvspdpn 2, 2
6207 ; PC64LE-NEXT: xscvspdpn 3, 3
6208 ; PC64LE-NEXT: xscvdpuxds 1, 1
6209 ; PC64LE-NEXT: xscvdpuxds 0, 0
6210 ; PC64LE-NEXT: xscvdpuxds 2, 2
6211 ; PC64LE-NEXT: xscvdpuxds 3, 3
6212 ; PC64LE-NEXT: mffprd 3, 1
6213 ; PC64LE-NEXT: mtfprd 1, 3
6214 ; PC64LE-NEXT: mffprd 3, 0
6215 ; PC64LE-NEXT: mffprd 4, 2
6216 ; PC64LE-NEXT: mtfprd 0, 3
6217 ; PC64LE-NEXT: mffprd 3, 3
6218 ; PC64LE-NEXT: mtfprd 2, 4
6219 ; PC64LE-NEXT: mtfprd 3, 3
6220 ; PC64LE-NEXT: xxmrghd 34, 2, 0
6221 ; PC64LE-NEXT: xxmrghd 35, 1, 3
6224 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6225 ; PC64LE9: # %bb.0: # %entry
6226 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6227 ; PC64LE9-NEXT: xscvspdpn 0, 0
6228 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6229 ; PC64LE9-NEXT: mffprd 3, 0
6230 ; PC64LE9-NEXT: xxswapd 0, 34
6231 ; PC64LE9-NEXT: xscvspdpn 0, 0
6232 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6233 ; PC64LE9-NEXT: mffprd 4, 0
6234 ; PC64LE9-NEXT: xscvspdpn 0, 34
6235 ; PC64LE9-NEXT: mtvsrdd 36, 4, 3
6236 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6237 ; PC64LE9-NEXT: mffprd 3, 0
6238 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6239 ; PC64LE9-NEXT: vmr 2, 4
6240 ; PC64LE9-NEXT: xscvspdpn 0, 0
6241 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6242 ; PC64LE9-NEXT: mffprd 4, 0
6243 ; PC64LE9-NEXT: mtvsrdd 35, 3, 4
6246 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(
6248 metadata !"fpexcept.strict") #0
6249 ret <4 x i64> %result
6252 define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64(<1 x double> %x) #0 {
6253 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6254 ; PC64LE: # %bb.0: # %entry
6255 ; PC64LE-NEXT: xscvdpuxws 0, 1
6256 ; PC64LE-NEXT: mffprwz 3, 0
6259 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6260 ; PC64LE9: # %bb.0: # %entry
6261 ; PC64LE9-NEXT: xscvdpuxws 0, 1
6262 ; PC64LE9-NEXT: mffprwz 3, 0
6265 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(
6267 metadata !"fpexcept.strict") #0
6268 ret <1 x i32> %result
6271 define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64(<2 x double> %x) #0 {
6272 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6273 ; PC64LE: # %bb.0: # %entry
6274 ; PC64LE-NEXT: xxswapd 0, 34
6275 ; PC64LE-NEXT: xscvdpuxws 1, 34
6276 ; PC64LE-NEXT: xscvdpuxws 0, 0
6277 ; PC64LE-NEXT: mffprwz 3, 1
6278 ; PC64LE-NEXT: mtvsrwz 34, 3
6279 ; PC64LE-NEXT: mffprwz 4, 0
6280 ; PC64LE-NEXT: mtvsrwz 35, 4
6281 ; PC64LE-NEXT: vmrghw 2, 2, 3
6284 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6285 ; PC64LE9: # %bb.0: # %entry
6286 ; PC64LE9-NEXT: xscvdpuxws 0, 34
6287 ; PC64LE9-NEXT: mffprwz 3, 0
6288 ; PC64LE9-NEXT: xxswapd 0, 34
6289 ; PC64LE9-NEXT: mtvsrwz 35, 3
6290 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6291 ; PC64LE9-NEXT: mffprwz 3, 0
6292 ; PC64LE9-NEXT: mtvsrwz 34, 3
6293 ; PC64LE9-NEXT: vmrghw 2, 3, 2
6296 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(
6298 metadata !"fpexcept.strict") #0
6299 ret <2 x i32> %result
6302 define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 {
6303 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6304 ; PC64LE: # %bb.0: # %entry
6305 ; PC64LE-NEXT: xscvdpuxws 0, 1
6306 ; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha
6307 ; PC64LE-NEXT: xscvdpuxws 1, 2
6308 ; PC64LE-NEXT: addi 3, 3, .LCPI121_0@toc@l
6309 ; PC64LE-NEXT: xscvdpuxws 2, 3
6310 ; PC64LE-NEXT: mffprwz 4, 0
6311 ; PC64LE-NEXT: mffprwz 5, 1
6312 ; PC64LE-NEXT: mtvsrwz 34, 4
6313 ; PC64LE-NEXT: mtvsrwz 35, 5
6314 ; PC64LE-NEXT: mffprwz 4, 2
6315 ; PC64LE-NEXT: vmrghw 2, 3, 2
6316 ; PC64LE-NEXT: lvx 3, 0, 3
6317 ; PC64LE-NEXT: mtvsrwz 36, 4
6318 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6321 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6322 ; PC64LE9: # %bb.0: # %entry
6323 ; PC64LE9-NEXT: xscvdpuxws 0, 1
6324 ; PC64LE9-NEXT: mffprwz 3, 0
6325 ; PC64LE9-NEXT: xscvdpuxws 0, 2
6326 ; PC64LE9-NEXT: mtvsrwz 34, 3
6327 ; PC64LE9-NEXT: mffprwz 3, 0
6328 ; PC64LE9-NEXT: xscvdpuxws 0, 3
6329 ; PC64LE9-NEXT: mtvsrwz 35, 3
6330 ; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha
6331 ; PC64LE9-NEXT: addi 3, 3, .LCPI121_0@toc@l
6332 ; PC64LE9-NEXT: vmrghw 2, 3, 2
6333 ; PC64LE9-NEXT: lxv 35, 0(3)
6334 ; PC64LE9-NEXT: mffprwz 3, 0
6335 ; PC64LE9-NEXT: mtvsrwz 36, 3
6336 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6339 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(
6341 metadata !"fpexcept.strict") #0
6342 ret <3 x i32> %result
6345 define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64(<4 x double> %x) #0 {
6346 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6347 ; PC64LE: # %bb.0: # %entry
6348 ; PC64LE-NEXT: xxswapd 0, 34
6349 ; PC64LE-NEXT: xxswapd 2, 35
6350 ; PC64LE-NEXT: xscvdpuxws 1, 34
6351 ; PC64LE-NEXT: xscvdpuxws 3, 35
6352 ; PC64LE-NEXT: xscvdpuxws 0, 0
6353 ; PC64LE-NEXT: xscvdpuxws 2, 2
6354 ; PC64LE-NEXT: mffprwz 3, 1
6355 ; PC64LE-NEXT: mffprwz 4, 3
6356 ; PC64LE-NEXT: mffprwz 5, 0
6357 ; PC64LE-NEXT: mffprwz 6, 2
6358 ; PC64LE-NEXT: rldimi 5, 3, 32, 0
6359 ; PC64LE-NEXT: rldimi 6, 4, 32, 0
6360 ; PC64LE-NEXT: mtfprd 0, 5
6361 ; PC64LE-NEXT: mtfprd 1, 6
6362 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6365 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6366 ; PC64LE9: # %bb.0: # %entry
6367 ; PC64LE9-NEXT: xscvdpuxws 0, 34
6368 ; PC64LE9-NEXT: mffprwz 3, 0
6369 ; PC64LE9-NEXT: xxswapd 0, 34
6370 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6371 ; PC64LE9-NEXT: mffprwz 4, 0
6372 ; PC64LE9-NEXT: xscvdpuxws 0, 35
6373 ; PC64LE9-NEXT: rldimi 4, 3, 32, 0
6374 ; PC64LE9-NEXT: mffprwz 3, 0
6375 ; PC64LE9-NEXT: xxswapd 0, 35
6376 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6377 ; PC64LE9-NEXT: mffprwz 5, 0
6378 ; PC64LE9-NEXT: rldimi 5, 3, 32, 0
6379 ; PC64LE9-NEXT: mtvsrdd 34, 5, 4
6382 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(
6384 metadata !"fpexcept.strict") #0
6385 ret <4 x i32> %result
6388 define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64(<1 x double> %x) #0 {
6389 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6390 ; PC64LE: # %bb.0: # %entry
6391 ; PC64LE-NEXT: xscvdpuxds 0, 1
6392 ; PC64LE-NEXT: mffprd 3, 0
6395 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6396 ; PC64LE9: # %bb.0: # %entry
6397 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6398 ; PC64LE9-NEXT: mffprd 3, 0
6401 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(
6403 metadata !"fpexcept.strict") #0
6404 ret <1 x i64> %result
6407 define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64(<2 x double> %x) #0 {
6408 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6409 ; PC64LE: # %bb.0: # %entry
6410 ; PC64LE-NEXT: xvcvdpuxds 34, 34
6413 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6414 ; PC64LE9: # %bb.0: # %entry
6415 ; PC64LE9-NEXT: xvcvdpuxds 34, 34
6418 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(
6420 metadata !"fpexcept.strict") #0
6421 ret <2 x i64> %result
6424 define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64(<3 x double> %x) #0 {
6425 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6426 ; PC64LE: # %bb.0: # %entry
6427 ; PC64LE-NEXT: xscvdpuxds 0, 1
6428 ; PC64LE-NEXT: xscvdpuxds 1, 2
6429 ; PC64LE-NEXT: xscvdpuxds 2, 3
6430 ; PC64LE-NEXT: mffprd 3, 0
6431 ; PC64LE-NEXT: mffprd 4, 1
6432 ; PC64LE-NEXT: mffprd 5, 2
6435 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6436 ; PC64LE9: # %bb.0: # %entry
6437 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6438 ; PC64LE9-NEXT: mffprd 3, 0
6439 ; PC64LE9-NEXT: xscvdpuxds 0, 2
6440 ; PC64LE9-NEXT: mffprd 4, 0
6441 ; PC64LE9-NEXT: xscvdpuxds 0, 3
6442 ; PC64LE9-NEXT: mffprd 5, 0
6445 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(
6447 metadata !"fpexcept.strict") #0
6448 ret <3 x i64> %result
6451 define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64(<4 x double> %x) #0 {
6452 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6453 ; PC64LE: # %bb.0: # %entry
6454 ; PC64LE-NEXT: xvcvdpuxds 35, 35
6455 ; PC64LE-NEXT: xvcvdpuxds 34, 34
6458 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6459 ; PC64LE9: # %bb.0: # %entry
6460 ; PC64LE9-NEXT: xvcvdpuxds 35, 35
6461 ; PC64LE9-NEXT: xvcvdpuxds 34, 34
6464 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(
6466 metadata !"fpexcept.strict") #0
6467 ret <4 x i64> %result
6470 define <1 x float> @constrained_vector_fptrunc_v1f64(<1 x double> %x) #0 {
6471 ; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
6472 ; PC64LE: # %bb.0: # %entry
6473 ; PC64LE-NEXT: xsrsp 1, 1
6476 ; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
6477 ; PC64LE9: # %bb.0: # %entry
6478 ; PC64LE9-NEXT: xsrsp 1, 1
6481 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
6483 metadata !"round.dynamic",
6484 metadata !"fpexcept.strict") #1
6485 ret <1 x float> %result
6488 define <2 x float> @constrained_vector_fptrunc_v2f64(<2 x double> %x) #0 {
6489 ; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
6490 ; PC64LE: # %bb.0: # %entry
6491 ; PC64LE-NEXT: xxswapd 0, 34
6492 ; PC64LE-NEXT: xsrsp 1, 34
6493 ; PC64LE-NEXT: xsrsp 0, 0
6494 ; PC64LE-NEXT: xscvdpspn 34, 1
6495 ; PC64LE-NEXT: xscvdpspn 35, 0
6496 ; PC64LE-NEXT: vmrghw 2, 2, 3
6499 ; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
6500 ; PC64LE9: # %bb.0: # %entry
6501 ; PC64LE9-NEXT: xsrsp 0, 34
6502 ; PC64LE9-NEXT: xscvdpspn 35, 0
6503 ; PC64LE9-NEXT: xxswapd 0, 34
6504 ; PC64LE9-NEXT: xsrsp 0, 0
6505 ; PC64LE9-NEXT: xscvdpspn 34, 0
6506 ; PC64LE9-NEXT: vmrghw 2, 3, 2
6509 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
6511 metadata !"round.dynamic",
6512 metadata !"fpexcept.strict") #1
6513 ret <2 x float> %result
6516 define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 {
6517 ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
6518 ; PC64LE: # %bb.0: # %entry
6519 ; PC64LE-NEXT: xsrsp 0, 1
6520 ; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha
6521 ; PC64LE-NEXT: xsrsp 1, 2
6522 ; PC64LE-NEXT: addi 3, 3, .LCPI129_0@toc@l
6523 ; PC64LE-NEXT: xsrsp 2, 3
6524 ; PC64LE-NEXT: xscvdpspn 34, 0
6525 ; PC64LE-NEXT: xscvdpspn 35, 1
6526 ; PC64LE-NEXT: xscvdpspn 36, 2
6527 ; PC64LE-NEXT: vmrghw 2, 3, 2
6528 ; PC64LE-NEXT: lvx 3, 0, 3
6529 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6532 ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
6533 ; PC64LE9: # %bb.0: # %entry
6534 ; PC64LE9-NEXT: xsrsp 0, 1
6535 ; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha
6536 ; PC64LE9-NEXT: addi 3, 3, .LCPI129_0@toc@l
6537 ; PC64LE9-NEXT: xscvdpspn 34, 0
6538 ; PC64LE9-NEXT: xsrsp 0, 2
6539 ; PC64LE9-NEXT: xscvdpspn 35, 0
6540 ; PC64LE9-NEXT: xsrsp 0, 3
6541 ; PC64LE9-NEXT: xscvdpspn 36, 0
6542 ; PC64LE9-NEXT: vmrghw 2, 3, 2
6543 ; PC64LE9-NEXT: lxv 35, 0(3)
6544 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6547 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
6549 metadata !"round.dynamic",
6550 metadata !"fpexcept.strict") #1
6551 ret <3 x float> %result
6554 define <4 x float> @constrained_vector_fptrunc_v4f64(<4 x double> %x) #0 {
6555 ; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
6556 ; PC64LE: # %bb.0: # %entry
6557 ; PC64LE-NEXT: xxmrgld 0, 35, 34
6558 ; PC64LE-NEXT: xxmrghd 1, 35, 34
6559 ; PC64LE-NEXT: xvcvdpsp 34, 0
6560 ; PC64LE-NEXT: xvcvdpsp 35, 1
6561 ; PC64LE-NEXT: vmrgew 2, 3, 2
6564 ; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
6565 ; PC64LE9: # %bb.0: # %entry
6566 ; PC64LE9-NEXT: xxmrgld 0, 35, 34
6567 ; PC64LE9-NEXT: xvcvdpsp 36, 0
6568 ; PC64LE9-NEXT: xxmrghd 0, 35, 34
6569 ; PC64LE9-NEXT: xvcvdpsp 34, 0
6570 ; PC64LE9-NEXT: vmrgew 2, 2, 4
6573 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(
6575 metadata !"round.dynamic",
6576 metadata !"fpexcept.strict") #1
6577 ret <4 x float> %result
6580 define <1 x double> @constrained_vector_fpext_v1f32(<1 x float> %x) #0 {
6581 ; PC64LE-LABEL: constrained_vector_fpext_v1f32:
6582 ; PC64LE: # %bb.0: # %entry
6585 ; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
6586 ; PC64LE9: # %bb.0: # %entry
6589 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
6591 metadata !"fpexcept.strict") #1
6592 ret <1 x double> %result
6595 define <2 x double> @constrained_vector_fpext_v2f32(<2 x float> %x) #0 {
6596 ; PC64LE-LABEL: constrained_vector_fpext_v2f32:
6597 ; PC64LE: # %bb.0: # %entry
6598 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6599 ; PC64LE-NEXT: xxswapd 1, 34
6600 ; PC64LE-NEXT: xscvspdpn 0, 0
6601 ; PC64LE-NEXT: xscvspdpn 1, 1
6602 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6605 ; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
6606 ; PC64LE9: # %bb.0: # %entry
6607 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6608 ; PC64LE9-NEXT: xxswapd 1, 34
6609 ; PC64LE9-NEXT: xscvspdpn 0, 0
6610 ; PC64LE9-NEXT: xscvspdpn 1, 1
6611 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
6614 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
6616 metadata !"fpexcept.strict") #1
6617 ret <2 x double> %result
6620 define <3 x double> @constrained_vector_fpext_v3f32(<3 x float> %x) #0 {
6621 ; PC64LE-LABEL: constrained_vector_fpext_v3f32:
6622 ; PC64LE: # %bb.0: # %entry
6623 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
6624 ; PC64LE-NEXT: xxswapd 1, 34
6625 ; PC64LE-NEXT: xxsldwi 4, 34, 34, 3
6626 ; PC64LE-NEXT: xscvspdpn 3, 0
6627 ; PC64LE-NEXT: xscvspdpn 2, 1
6628 ; PC64LE-NEXT: xscvspdpn 1, 4
6631 ; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
6632 ; PC64LE9: # %bb.0: # %entry
6633 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6634 ; PC64LE9-NEXT: xscvspdpn 3, 0
6635 ; PC64LE9-NEXT: xxswapd 0, 34
6636 ; PC64LE9-NEXT: xscvspdpn 2, 0
6637 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6638 ; PC64LE9-NEXT: xscvspdpn 1, 0
6641 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
6643 metadata !"fpexcept.strict") #1
6644 ret <3 x double> %result
6647 define <4 x double> @constrained_vector_fpext_v4f32(<4 x float> %x) #0 {
6648 ; PC64LE-LABEL: constrained_vector_fpext_v4f32:
6649 ; PC64LE: # %bb.0: # %entry
6650 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6651 ; PC64LE-NEXT: xxswapd 1, 34
6652 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 1
6653 ; PC64LE-NEXT: xscvspdpn 2, 34
6654 ; PC64LE-NEXT: xscvspdpn 0, 0
6655 ; PC64LE-NEXT: xscvspdpn 1, 1
6656 ; PC64LE-NEXT: xscvspdpn 3, 3
6657 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6658 ; PC64LE-NEXT: xxmrghd 35, 2, 3
6661 ; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
6662 ; PC64LE9: # %bb.0: # %entry
6663 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6664 ; PC64LE9-NEXT: xxswapd 1, 34
6665 ; PC64LE9-NEXT: xscvspdpn 0, 0
6666 ; PC64LE9-NEXT: xscvspdpn 1, 1
6667 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 1
6668 ; PC64LE9-NEXT: xscvspdpn 2, 2
6669 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
6670 ; PC64LE9-NEXT: xscvspdpn 1, 34
6671 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
6672 ; PC64LE9-NEXT: xxlor 34, 0, 0
6675 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(
6677 metadata !"fpexcept.strict") #1
6678 ret <4 x double> %result
6681 define <1 x float> @constrained_vector_ceil_v1f32(<1 x float> %x) #0 {
6682 ; PC64LE-LABEL: constrained_vector_ceil_v1f32:
6683 ; PC64LE: # %bb.0: # %entry
6684 ; PC64LE-NEXT: xsrdpip 1, 1
6687 ; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
6688 ; PC64LE9: # %bb.0: # %entry
6689 ; PC64LE9-NEXT: xsrdpip 1, 1
6692 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
6694 metadata !"fpexcept.strict") #1
6695 ret <1 x float> %ceil
6698 define <2 x double> @constrained_vector_ceil_v2f64(<2 x double> %x) #0 {
6699 ; PC64LE-LABEL: constrained_vector_ceil_v2f64:
6700 ; PC64LE: # %bb.0: # %entry
6701 ; PC64LE-NEXT: xvrdpip 34, 34
6704 ; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
6705 ; PC64LE9: # %bb.0: # %entry
6706 ; PC64LE9-NEXT: xvrdpip 34, 34
6709 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
6711 metadata !"fpexcept.strict") #1
6712 ret <2 x double> %ceil
6715 define <3 x float> @constrained_vector_ceil_v3f32(<3 x float> %x) #0 {
6716 ; PC64LE-LABEL: constrained_vector_ceil_v3f32:
6717 ; PC64LE: # %bb.0: # %entry
6718 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6719 ; PC64LE-NEXT: xxswapd 1, 34
6720 ; PC64LE-NEXT: addis 3, 2, .LCPI137_0@toc@ha
6721 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6722 ; PC64LE-NEXT: addi 3, 3, .LCPI137_0@toc@l
6723 ; PC64LE-NEXT: lvx 4, 0, 3
6724 ; PC64LE-NEXT: xscvspdpn 0, 0
6725 ; PC64LE-NEXT: xscvspdpn 1, 1
6726 ; PC64LE-NEXT: xscvspdpn 2, 2
6727 ; PC64LE-NEXT: xsrdpip 0, 0
6728 ; PC64LE-NEXT: xsrdpip 1, 1
6729 ; PC64LE-NEXT: xscvdpspn 34, 0
6730 ; PC64LE-NEXT: xscvdpspn 35, 1
6731 ; PC64LE-NEXT: xsrdpip 0, 2
6732 ; PC64LE-NEXT: vmrghw 2, 3, 2
6733 ; PC64LE-NEXT: xscvdpspn 35, 0
6734 ; PC64LE-NEXT: vperm 2, 3, 2, 4
6737 ; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
6738 ; PC64LE9: # %bb.0: # %entry
6739 ; PC64LE9-NEXT: xxswapd 1, 34
6740 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6741 ; PC64LE9-NEXT: addis 3, 2, .LCPI137_0@toc@ha
6742 ; PC64LE9-NEXT: addi 3, 3, .LCPI137_0@toc@l
6743 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6744 ; PC64LE9-NEXT: xscvspdpn 1, 1
6745 ; PC64LE9-NEXT: xscvspdpn 2, 2
6746 ; PC64LE9-NEXT: xscvspdpn 0, 0
6747 ; PC64LE9-NEXT: xsrdpip 1, 1
6748 ; PC64LE9-NEXT: xsrdpip 2, 2
6749 ; PC64LE9-NEXT: xsrdpip 0, 0
6750 ; PC64LE9-NEXT: xscvdpspn 34, 2
6751 ; PC64LE9-NEXT: xscvdpspn 35, 1
6752 ; PC64LE9-NEXT: xscvdpspn 36, 0
6753 ; PC64LE9-NEXT: vmrghw 2, 3, 2
6754 ; PC64LE9-NEXT: lxv 35, 0(3)
6755 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6758 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
6760 metadata !"fpexcept.strict") #1
6761 ret <3 x float> %ceil
6764 define <3 x double> @constrained_vector_ceil_v3f64(<3 x double> %x) #0 {
6765 ; PC64LE-LABEL: constrained_vector_ceil_v3f64:
6766 ; PC64LE: # %bb.0: # %entry
6767 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
6768 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
6769 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6770 ; PC64LE-NEXT: xsrdpip 3, 3
6771 ; PC64LE-NEXT: xvrdpip 2, 0
6772 ; PC64LE-NEXT: xxswapd 1, 2
6773 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6774 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6777 ; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
6778 ; PC64LE9: # %bb.0: # %entry
6779 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
6780 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
6781 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6782 ; PC64LE9-NEXT: xsrdpip 3, 3
6783 ; PC64LE9-NEXT: xvrdpip 2, 0
6784 ; PC64LE9-NEXT: xxswapd 1, 2
6785 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6786 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6789 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
6791 metadata !"fpexcept.strict") #1
6792 ret <3 x double> %ceil
6795 define <1 x float> @constrained_vector_floor_v1f32(<1 x float> %x) #0 {
6796 ; PC64LE-LABEL: constrained_vector_floor_v1f32:
6797 ; PC64LE: # %bb.0: # %entry
6798 ; PC64LE-NEXT: xsrdpim 1, 1
6801 ; PC64LE9-LABEL: constrained_vector_floor_v1f32:
6802 ; PC64LE9: # %bb.0: # %entry
6803 ; PC64LE9-NEXT: xsrdpim 1, 1
6806 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
6808 metadata !"fpexcept.strict") #1
6809 ret <1 x float> %floor
6813 define <2 x double> @constrained_vector_floor_v2f64(<2 x double> %x) #0 {
6814 ; PC64LE-LABEL: constrained_vector_floor_v2f64:
6815 ; PC64LE: # %bb.0: # %entry
6816 ; PC64LE-NEXT: xvrdpim 34, 34
6819 ; PC64LE9-LABEL: constrained_vector_floor_v2f64:
6820 ; PC64LE9: # %bb.0: # %entry
6821 ; PC64LE9-NEXT: xvrdpim 34, 34
6824 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
6826 metadata !"fpexcept.strict") #1
6827 ret <2 x double> %floor
6830 define <3 x float> @constrained_vector_floor_v3f32(<3 x float> %x) #0 {
6831 ; PC64LE-LABEL: constrained_vector_floor_v3f32:
6832 ; PC64LE: # %bb.0: # %entry
6833 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6834 ; PC64LE-NEXT: xxswapd 1, 34
6835 ; PC64LE-NEXT: addis 3, 2, .LCPI141_0@toc@ha
6836 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6837 ; PC64LE-NEXT: addi 3, 3, .LCPI141_0@toc@l
6838 ; PC64LE-NEXT: lvx 4, 0, 3
6839 ; PC64LE-NEXT: xscvspdpn 0, 0
6840 ; PC64LE-NEXT: xscvspdpn 1, 1
6841 ; PC64LE-NEXT: xscvspdpn 2, 2
6842 ; PC64LE-NEXT: xsrdpim 0, 0
6843 ; PC64LE-NEXT: xsrdpim 1, 1
6844 ; PC64LE-NEXT: xscvdpspn 34, 0
6845 ; PC64LE-NEXT: xscvdpspn 35, 1
6846 ; PC64LE-NEXT: xsrdpim 0, 2
6847 ; PC64LE-NEXT: vmrghw 2, 3, 2
6848 ; PC64LE-NEXT: xscvdpspn 35, 0
6849 ; PC64LE-NEXT: vperm 2, 3, 2, 4
6852 ; PC64LE9-LABEL: constrained_vector_floor_v3f32:
6853 ; PC64LE9: # %bb.0: # %entry
6854 ; PC64LE9-NEXT: xxswapd 1, 34
6855 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6856 ; PC64LE9-NEXT: addis 3, 2, .LCPI141_0@toc@ha
6857 ; PC64LE9-NEXT: addi 3, 3, .LCPI141_0@toc@l
6858 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6859 ; PC64LE9-NEXT: xscvspdpn 1, 1
6860 ; PC64LE9-NEXT: xscvspdpn 2, 2
6861 ; PC64LE9-NEXT: xscvspdpn 0, 0
6862 ; PC64LE9-NEXT: xsrdpim 1, 1
6863 ; PC64LE9-NEXT: xsrdpim 2, 2
6864 ; PC64LE9-NEXT: xsrdpim 0, 0
6865 ; PC64LE9-NEXT: xscvdpspn 34, 2
6866 ; PC64LE9-NEXT: xscvdpspn 35, 1
6867 ; PC64LE9-NEXT: xscvdpspn 36, 0
6868 ; PC64LE9-NEXT: vmrghw 2, 3, 2
6869 ; PC64LE9-NEXT: lxv 35, 0(3)
6870 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6873 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
6875 metadata !"fpexcept.strict") #1
6876 ret <3 x float> %floor
6879 define <3 x double> @constrained_vector_floor_v3f64(<3 x double> %x) #0 {
6880 ; PC64LE-LABEL: constrained_vector_floor_v3f64:
6881 ; PC64LE: # %bb.0: # %entry
6882 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
6883 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
6884 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6885 ; PC64LE-NEXT: xsrdpim 3, 3
6886 ; PC64LE-NEXT: xvrdpim 2, 0
6887 ; PC64LE-NEXT: xxswapd 1, 2
6888 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6889 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6892 ; PC64LE9-LABEL: constrained_vector_floor_v3f64:
6893 ; PC64LE9: # %bb.0: # %entry
6894 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
6895 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
6896 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6897 ; PC64LE9-NEXT: xsrdpim 3, 3
6898 ; PC64LE9-NEXT: xvrdpim 2, 0
6899 ; PC64LE9-NEXT: xxswapd 1, 2
6900 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6901 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6904 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
6906 metadata !"fpexcept.strict") #1
6907 ret <3 x double> %floor
6910 define <1 x float> @constrained_vector_round_v1f32(<1 x float> %x) #0 {
6911 ; PC64LE-LABEL: constrained_vector_round_v1f32:
6912 ; PC64LE: # %bb.0: # %entry
6913 ; PC64LE-NEXT: xsrdpi 1, 1
6916 ; PC64LE9-LABEL: constrained_vector_round_v1f32:
6917 ; PC64LE9: # %bb.0: # %entry
6918 ; PC64LE9-NEXT: xsrdpi 1, 1
6921 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
6923 metadata !"fpexcept.strict") #1
6924 ret <1 x float> %round
6927 define <2 x double> @constrained_vector_round_v2f64(<2 x double> %x) #0 {
6928 ; PC64LE-LABEL: constrained_vector_round_v2f64:
6929 ; PC64LE: # %bb.0: # %entry
6930 ; PC64LE-NEXT: xvrdpi 34, 34
6933 ; PC64LE9-LABEL: constrained_vector_round_v2f64:
6934 ; PC64LE9: # %bb.0: # %entry
6935 ; PC64LE9-NEXT: xvrdpi 34, 34
6938 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
6940 metadata !"fpexcept.strict") #1
6941 ret <2 x double> %round
6944 define <3 x float> @constrained_vector_round_v3f32(<3 x float> %x) #0 {
6945 ; PC64LE-LABEL: constrained_vector_round_v3f32:
6946 ; PC64LE: # %bb.0: # %entry
6947 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6948 ; PC64LE-NEXT: xxswapd 1, 34
6949 ; PC64LE-NEXT: addis 3, 2, .LCPI145_0@toc@ha
6950 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6951 ; PC64LE-NEXT: addi 3, 3, .LCPI145_0@toc@l
6952 ; PC64LE-NEXT: lvx 4, 0, 3
6953 ; PC64LE-NEXT: xscvspdpn 0, 0
6954 ; PC64LE-NEXT: xscvspdpn 1, 1
6955 ; PC64LE-NEXT: xscvspdpn 2, 2
6956 ; PC64LE-NEXT: xsrdpi 0, 0
6957 ; PC64LE-NEXT: xsrdpi 1, 1
6958 ; PC64LE-NEXT: xscvdpspn 34, 0
6959 ; PC64LE-NEXT: xscvdpspn 35, 1
6960 ; PC64LE-NEXT: xsrdpi 0, 2
6961 ; PC64LE-NEXT: vmrghw 2, 3, 2
6962 ; PC64LE-NEXT: xscvdpspn 35, 0
6963 ; PC64LE-NEXT: vperm 2, 3, 2, 4
6966 ; PC64LE9-LABEL: constrained_vector_round_v3f32:
6967 ; PC64LE9: # %bb.0: # %entry
6968 ; PC64LE9-NEXT: xxswapd 1, 34
6969 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6970 ; PC64LE9-NEXT: addis 3, 2, .LCPI145_0@toc@ha
6971 ; PC64LE9-NEXT: addi 3, 3, .LCPI145_0@toc@l
6972 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6973 ; PC64LE9-NEXT: xscvspdpn 1, 1
6974 ; PC64LE9-NEXT: xscvspdpn 2, 2
6975 ; PC64LE9-NEXT: xscvspdpn 0, 0
6976 ; PC64LE9-NEXT: xsrdpi 1, 1
6977 ; PC64LE9-NEXT: xsrdpi 2, 2
6978 ; PC64LE9-NEXT: xsrdpi 0, 0
6979 ; PC64LE9-NEXT: xscvdpspn 34, 2
6980 ; PC64LE9-NEXT: xscvdpspn 35, 1
6981 ; PC64LE9-NEXT: xscvdpspn 36, 0
6982 ; PC64LE9-NEXT: vmrghw 2, 3, 2
6983 ; PC64LE9-NEXT: lxv 35, 0(3)
6984 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
6987 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
6989 metadata !"fpexcept.strict") #1
6990 ret <3 x float> %round
6994 define <3 x double> @constrained_vector_round_v3f64(<3 x double> %x) #0 {
6995 ; PC64LE-LABEL: constrained_vector_round_v3f64:
6996 ; PC64LE: # %bb.0: # %entry
6997 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
6998 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
6999 ; PC64LE-NEXT: xxmrghd 0, 2, 1
7000 ; PC64LE-NEXT: xsrdpi 3, 3
7001 ; PC64LE-NEXT: xvrdpi 2, 0
7002 ; PC64LE-NEXT: xxswapd 1, 2
7003 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7004 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7007 ; PC64LE9-LABEL: constrained_vector_round_v3f64:
7008 ; PC64LE9: # %bb.0: # %entry
7009 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
7010 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
7011 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
7012 ; PC64LE9-NEXT: xsrdpi 3, 3
7013 ; PC64LE9-NEXT: xvrdpi 2, 0
7014 ; PC64LE9-NEXT: xxswapd 1, 2
7015 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7016 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7019 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
7021 metadata !"fpexcept.strict") #1
7022 ret <3 x double> %round
7025 define <1 x float> @constrained_vector_trunc_v1f32(<1 x float> %x) #0 {
7026 ; PC64LE-LABEL: constrained_vector_trunc_v1f32:
7027 ; PC64LE: # %bb.0: # %entry
7028 ; PC64LE-NEXT: xsrdpiz 1, 1
7031 ; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
7032 ; PC64LE9: # %bb.0: # %entry
7033 ; PC64LE9-NEXT: xsrdpiz 1, 1
7036 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
7038 metadata !"fpexcept.strict") #1
7039 ret <1 x float> %trunc
7042 define <2 x double> @constrained_vector_trunc_v2f64(<2 x double> %x) #0 {
7043 ; PC64LE-LABEL: constrained_vector_trunc_v2f64:
7044 ; PC64LE: # %bb.0: # %entry
7045 ; PC64LE-NEXT: xvrdpiz 34, 34
7048 ; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
7049 ; PC64LE9: # %bb.0: # %entry
7050 ; PC64LE9-NEXT: xvrdpiz 34, 34
7053 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
7055 metadata !"fpexcept.strict") #1
7056 ret <2 x double> %trunc
7059 define <3 x float> @constrained_vector_trunc_v3f32(<3 x float> %x) #0 {
7060 ; PC64LE-LABEL: constrained_vector_trunc_v3f32:
7061 ; PC64LE: # %bb.0: # %entry
7062 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
7063 ; PC64LE-NEXT: xxswapd 1, 34
7064 ; PC64LE-NEXT: addis 3, 2, .LCPI149_0@toc@ha
7065 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
7066 ; PC64LE-NEXT: addi 3, 3, .LCPI149_0@toc@l
7067 ; PC64LE-NEXT: lvx 4, 0, 3
7068 ; PC64LE-NEXT: xscvspdpn 0, 0
7069 ; PC64LE-NEXT: xscvspdpn 1, 1
7070 ; PC64LE-NEXT: xscvspdpn 2, 2
7071 ; PC64LE-NEXT: xsrdpiz 0, 0
7072 ; PC64LE-NEXT: xsrdpiz 1, 1
7073 ; PC64LE-NEXT: xscvdpspn 34, 0
7074 ; PC64LE-NEXT: xscvdpspn 35, 1
7075 ; PC64LE-NEXT: xsrdpiz 0, 2
7076 ; PC64LE-NEXT: vmrghw 2, 3, 2
7077 ; PC64LE-NEXT: xscvdpspn 35, 0
7078 ; PC64LE-NEXT: vperm 2, 3, 2, 4
7081 ; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
7082 ; PC64LE9: # %bb.0: # %entry
7083 ; PC64LE9-NEXT: xxswapd 1, 34
7084 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
7085 ; PC64LE9-NEXT: addis 3, 2, .LCPI149_0@toc@ha
7086 ; PC64LE9-NEXT: addi 3, 3, .LCPI149_0@toc@l
7087 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
7088 ; PC64LE9-NEXT: xscvspdpn 1, 1
7089 ; PC64LE9-NEXT: xscvspdpn 2, 2
7090 ; PC64LE9-NEXT: xscvspdpn 0, 0
7091 ; PC64LE9-NEXT: xsrdpiz 1, 1
7092 ; PC64LE9-NEXT: xsrdpiz 2, 2
7093 ; PC64LE9-NEXT: xsrdpiz 0, 0
7094 ; PC64LE9-NEXT: xscvdpspn 34, 2
7095 ; PC64LE9-NEXT: xscvdpspn 35, 1
7096 ; PC64LE9-NEXT: xscvdpspn 36, 0
7097 ; PC64LE9-NEXT: vmrghw 2, 3, 2
7098 ; PC64LE9-NEXT: lxv 35, 0(3)
7099 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
7102 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
7104 metadata !"fpexcept.strict") #1
7105 ret <3 x float> %trunc
7108 define <3 x double> @constrained_vector_trunc_v3f64(<3 x double> %x) #0 {
7109 ; PC64LE-LABEL: constrained_vector_trunc_v3f64:
7110 ; PC64LE: # %bb.0: # %entry
7111 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
7112 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
7113 ; PC64LE-NEXT: xxmrghd 0, 2, 1
7114 ; PC64LE-NEXT: xsrdpiz 3, 3
7115 ; PC64LE-NEXT: xvrdpiz 2, 0
7116 ; PC64LE-NEXT: xxswapd 1, 2
7117 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7118 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7121 ; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
7122 ; PC64LE9: # %bb.0: # %entry
7123 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
7124 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
7125 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
7126 ; PC64LE9-NEXT: xsrdpiz 3, 3
7127 ; PC64LE9-NEXT: xvrdpiz 2, 0
7128 ; PC64LE9-NEXT: xxswapd 1, 2
7129 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7130 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7133 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
7135 metadata !"fpexcept.strict") #1
7136 ret <3 x double> %trunc
7139 define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 {
7140 ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7141 ; PC64LE: # %bb.0: # %entry
7142 ; PC64LE-NEXT: mtfprwa 0, 3
7143 ; PC64LE-NEXT: xscvsxddp 1, 0
7146 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7147 ; PC64LE9: # %bb.0: # %entry
7148 ; PC64LE9-NEXT: mtfprwa 0, 3
7149 ; PC64LE9-NEXT: xscvsxddp 1, 0
7152 %result = call <1 x double>
7153 @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x,
7154 metadata !"round.dynamic",
7155 metadata !"fpexcept.strict") #0
7156 ret <1 x double> %result
7159 define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 {
7160 ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7161 ; PC64LE: # %bb.0: # %entry
7162 ; PC64LE-NEXT: mtfprwa 0, 3
7163 ; PC64LE-NEXT: xscvsxdsp 1, 0
7166 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7167 ; PC64LE9: # %bb.0: # %entry
7168 ; PC64LE9-NEXT: mtfprwa 0, 3
7169 ; PC64LE9-NEXT: xscvsxdsp 1, 0
7172 %result = call <1 x float>
7173 @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x,
7174 metadata !"round.dynamic",
7175 metadata !"fpexcept.strict") #0
7176 ret <1 x float> %result
7179 define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 {
7180 ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7181 ; PC64LE: # %bb.0: # %entry
7182 ; PC64LE-NEXT: mtfprd 0, 3
7183 ; PC64LE-NEXT: xscvsxddp 1, 0
7186 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7187 ; PC64LE9: # %bb.0: # %entry
7188 ; PC64LE9-NEXT: mtfprd 0, 3
7189 ; PC64LE9-NEXT: xscvsxddp 1, 0
7192 %result = call <1 x double>
7193 @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x,
7194 metadata !"round.dynamic",
7195 metadata !"fpexcept.strict") #0
7196 ret <1 x double> %result
7199 define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 {
7200 ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7201 ; PC64LE: # %bb.0: # %entry
7202 ; PC64LE-NEXT: mtfprd 0, 3
7203 ; PC64LE-NEXT: xscvsxdsp 1, 0
7206 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7207 ; PC64LE9: # %bb.0: # %entry
7208 ; PC64LE9-NEXT: mtfprd 0, 3
7209 ; PC64LE9-NEXT: xscvsxdsp 1, 0
7212 %result = call <1 x float>
7213 @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x,
7214 metadata !"round.dynamic",
7215 metadata !"fpexcept.strict") #0
7216 ret <1 x float> %result
7219 define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 {
7220 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7221 ; PC64LE: # %bb.0: # %entry
7222 ; PC64LE-NEXT: addis 3, 2, .LCPI155_0@toc@ha
7223 ; PC64LE-NEXT: addi 3, 3, .LCPI155_0@toc@l
7224 ; PC64LE-NEXT: lvx 3, 0, 3
7225 ; PC64LE-NEXT: addis 3, 2, .LCPI155_1@toc@ha
7226 ; PC64LE-NEXT: addi 3, 3, .LCPI155_1@toc@l
7227 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7228 ; PC64LE-NEXT: vperm 2, 2, 2, 3
7229 ; PC64LE-NEXT: xxswapd 35, 0
7230 ; PC64LE-NEXT: vsld 2, 2, 3
7231 ; PC64LE-NEXT: vsrad 2, 2, 3
7232 ; PC64LE-NEXT: xvcvsxddp 34, 34
7235 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7236 ; PC64LE9: # %bb.0: # %entry
7237 ; PC64LE9-NEXT: addis 3, 2, .LCPI155_0@toc@ha
7238 ; PC64LE9-NEXT: addi 3, 3, .LCPI155_0@toc@l
7239 ; PC64LE9-NEXT: lxv 35, 0(3)
7240 ; PC64LE9-NEXT: vperm 2, 2, 2, 3
7241 ; PC64LE9-NEXT: vextsh2d 2, 2
7242 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7245 %result = call <2 x double>
7246 @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x,
7247 metadata !"round.dynamic",
7248 metadata !"fpexcept.strict") #0
7249 ret <2 x double> %result
7252 define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 {
7253 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7254 ; PC64LE: # %bb.0: # %entry
7255 ; PC64LE-NEXT: xxswapd 0, 34
7256 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7257 ; PC64LE-NEXT: mffprwz 3, 0
7258 ; PC64LE-NEXT: mffprwz 4, 1
7259 ; PC64LE-NEXT: mtfprwa 0, 3
7260 ; PC64LE-NEXT: mtfprwa 1, 4
7261 ; PC64LE-NEXT: xscvsxddp 0, 0
7262 ; PC64LE-NEXT: xscvsxddp 1, 1
7263 ; PC64LE-NEXT: xxmrghd 34, 1, 0
7266 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7267 ; PC64LE9: # %bb.0: # %entry
7268 ; PC64LE9-NEXT: li 3, 0
7269 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7270 ; PC64LE9-NEXT: mtfprwa 0, 3
7271 ; PC64LE9-NEXT: li 3, 4
7272 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7273 ; PC64LE9-NEXT: xscvsxddp 0, 0
7274 ; PC64LE9-NEXT: mtfprwa 1, 3
7275 ; PC64LE9-NEXT: xscvsxddp 1, 1
7276 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
7279 %result = call <2 x double>
7280 @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x,
7281 metadata !"round.dynamic",
7282 metadata !"fpexcept.strict") #0
7283 ret <2 x double> %result
7286 define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7287 ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7288 ; PC64LE: # %bb.0: # %entry
7289 ; PC64LE-NEXT: xxswapd 0, 34
7290 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7291 ; PC64LE-NEXT: mffprwz 3, 0
7292 ; PC64LE-NEXT: mffprwz 4, 1
7293 ; PC64LE-NEXT: mtfprwa 0, 3
7294 ; PC64LE-NEXT: mtfprwa 1, 4
7295 ; PC64LE-NEXT: xscvsxdsp 0, 0
7296 ; PC64LE-NEXT: xscvsxdsp 1, 1
7297 ; PC64LE-NEXT: xscvdpspn 34, 0
7298 ; PC64LE-NEXT: xscvdpspn 35, 1
7299 ; PC64LE-NEXT: vmrghw 2, 3, 2
7302 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7303 ; PC64LE9: # %bb.0: # %entry
7304 ; PC64LE9-NEXT: li 3, 0
7305 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7306 ; PC64LE9-NEXT: mtfprwa 0, 3
7307 ; PC64LE9-NEXT: li 3, 4
7308 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7309 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7310 ; PC64LE9-NEXT: xscvdpspn 35, 0
7311 ; PC64LE9-NEXT: mtfprwa 0, 3
7312 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7313 ; PC64LE9-NEXT: xscvdpspn 34, 0
7314 ; PC64LE9-NEXT: vmrghw 2, 2, 3
7317 %result = call <2 x float>
7318 @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x,
7319 metadata !"round.dynamic",
7320 metadata !"fpexcept.strict") #0
7321 ret <2 x float> %result
7324 define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7325 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7326 ; PC64LE: # %bb.0: # %entry
7327 ; PC64LE-NEXT: xvcvsxddp 34, 34
7330 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7331 ; PC64LE9: # %bb.0: # %entry
7332 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7335 %result = call <2 x double>
7336 @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x,
7337 metadata !"round.dynamic",
7338 metadata !"fpexcept.strict") #0
7339 ret <2 x double> %result
7342 define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7343 ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7344 ; PC64LE: # %bb.0: # %entry
7345 ; PC64LE-NEXT: xxswapd 0, 34
7346 ; PC64LE-NEXT: mfvsrd 3, 34
7347 ; PC64LE-NEXT: mffprd 4, 0
7348 ; PC64LE-NEXT: mtfprd 0, 3
7349 ; PC64LE-NEXT: mtfprd 1, 4
7350 ; PC64LE-NEXT: xscvsxdsp 0, 0
7351 ; PC64LE-NEXT: xscvsxdsp 1, 1
7352 ; PC64LE-NEXT: xscvdpspn 34, 0
7353 ; PC64LE-NEXT: xscvdpspn 35, 1
7354 ; PC64LE-NEXT: vmrghw 2, 2, 3
7357 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7358 ; PC64LE9: # %bb.0: # %entry
7359 ; PC64LE9-NEXT: mfvsrld 3, 34
7360 ; PC64LE9-NEXT: mtfprd 0, 3
7361 ; PC64LE9-NEXT: mfvsrd 3, 34
7362 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7363 ; PC64LE9-NEXT: xscvdpspn 35, 0
7364 ; PC64LE9-NEXT: mtfprd 0, 3
7365 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7366 ; PC64LE9-NEXT: xscvdpspn 34, 0
7367 ; PC64LE9-NEXT: vmrghw 2, 2, 3
7370 %result = call <2 x float>
7371 @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x,
7372 metadata !"round.dynamic",
7373 metadata !"fpexcept.strict") #0
7374 ret <2 x float> %result
7377 define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 {
7378 ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7379 ; PC64LE: # %bb.0: # %entry
7380 ; PC64LE-NEXT: xxswapd 0, 34
7381 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7382 ; PC64LE-NEXT: mfvsrwz 3, 34
7383 ; PC64LE-NEXT: mtfprwa 3, 3
7384 ; PC64LE-NEXT: mffprwz 3, 0
7385 ; PC64LE-NEXT: mffprwz 4, 1
7386 ; PC64LE-NEXT: mtfprwa 0, 3
7387 ; PC64LE-NEXT: mtfprwa 2, 4
7388 ; PC64LE-NEXT: xscvsxddp 1, 0
7389 ; PC64LE-NEXT: xscvsxddp 2, 2
7390 ; PC64LE-NEXT: xscvsxddp 3, 3
7393 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7394 ; PC64LE9: # %bb.0: # %entry
7395 ; PC64LE9-NEXT: li 3, 0
7396 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7397 ; PC64LE9-NEXT: mtfprwa 0, 3
7398 ; PC64LE9-NEXT: li 3, 4
7399 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7400 ; PC64LE9-NEXT: xscvsxddp 1, 0
7401 ; PC64LE9-NEXT: mtfprwa 0, 3
7402 ; PC64LE9-NEXT: mfvsrwz 3, 34
7403 ; PC64LE9-NEXT: xscvsxddp 2, 0
7404 ; PC64LE9-NEXT: mtfprwa 0, 3
7405 ; PC64LE9-NEXT: xscvsxddp 3, 0
7408 %result = call <3 x double>
7409 @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x,
7410 metadata !"round.dynamic",
7411 metadata !"fpexcept.strict") #0
7412 ret <3 x double> %result
7415 define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 {
7416 ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7417 ; PC64LE: # %bb.0: # %entry
7418 ; PC64LE-NEXT: xxswapd 0, 34
7419 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7420 ; PC64LE-NEXT: mffprwz 3, 0
7421 ; PC64LE-NEXT: mffprwz 4, 1
7422 ; PC64LE-NEXT: mtfprwa 0, 3
7423 ; PC64LE-NEXT: mtfprwa 1, 4
7424 ; PC64LE-NEXT: xscvsxdsp 0, 0
7425 ; PC64LE-NEXT: xscvsxdsp 1, 1
7426 ; PC64LE-NEXT: mfvsrwz 3, 34
7427 ; PC64LE-NEXT: mtfprwa 2, 3
7428 ; PC64LE-NEXT: addis 3, 2, .LCPI161_0@toc@ha
7429 ; PC64LE-NEXT: addi 3, 3, .LCPI161_0@toc@l
7430 ; PC64LE-NEXT: xscvdpspn 34, 0
7431 ; PC64LE-NEXT: lvx 4, 0, 3
7432 ; PC64LE-NEXT: xscvdpspn 35, 1
7433 ; PC64LE-NEXT: xscvsxdsp 0, 2
7434 ; PC64LE-NEXT: vmrghw 2, 3, 2
7435 ; PC64LE-NEXT: xscvdpspn 35, 0
7436 ; PC64LE-NEXT: vperm 2, 3, 2, 4
7439 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7440 ; PC64LE9: # %bb.0: # %entry
7441 ; PC64LE9-NEXT: li 3, 0
7442 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7443 ; PC64LE9-NEXT: mtfprwa 0, 3
7444 ; PC64LE9-NEXT: li 3, 4
7445 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7446 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7447 ; PC64LE9-NEXT: xscvdpspn 35, 0
7448 ; PC64LE9-NEXT: mtfprwa 0, 3
7449 ; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha
7450 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7451 ; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l
7452 ; PC64LE9-NEXT: xscvdpspn 36, 0
7453 ; PC64LE9-NEXT: vmrghw 3, 4, 3
7454 ; PC64LE9-NEXT: lxv 36, 0(3)
7455 ; PC64LE9-NEXT: mfvsrwz 3, 34
7456 ; PC64LE9-NEXT: mtfprwa 0, 3
7457 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7458 ; PC64LE9-NEXT: xscvdpspn 34, 0
7459 ; PC64LE9-NEXT: vperm 2, 2, 3, 4
7462 %result = call <3 x float>
7463 @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x,
7464 metadata !"round.dynamic",
7465 metadata !"fpexcept.strict") #0
7466 ret <3 x float> %result
7469 define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 {
7470 ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7471 ; PC64LE: # %bb.0: # %entry
7472 ; PC64LE-NEXT: mtfprd 0, 3
7473 ; PC64LE-NEXT: mtfprd 2, 4
7474 ; PC64LE-NEXT: mtfprd 3, 5
7475 ; PC64LE-NEXT: xscvsxddp 1, 0
7476 ; PC64LE-NEXT: xscvsxddp 2, 2
7477 ; PC64LE-NEXT: xscvsxddp 3, 3
7480 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7481 ; PC64LE9: # %bb.0: # %entry
7482 ; PC64LE9-NEXT: mtfprd 0, 3
7483 ; PC64LE9-NEXT: xscvsxddp 1, 0
7484 ; PC64LE9-NEXT: mtfprd 0, 4
7485 ; PC64LE9-NEXT: xscvsxddp 2, 0
7486 ; PC64LE9-NEXT: mtfprd 0, 5
7487 ; PC64LE9-NEXT: xscvsxddp 3, 0
7490 %result = call <3 x double>
7491 @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x,
7492 metadata !"round.dynamic",
7493 metadata !"fpexcept.strict") #0
7494 ret <3 x double> %result
7497 define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 {
7498 ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7499 ; PC64LE: # %bb.0: # %entry
7500 ; PC64LE-NEXT: mtfprd 0, 3
7501 ; PC64LE-NEXT: addis 3, 2, .LCPI163_0@toc@ha
7502 ; PC64LE-NEXT: mtfprd 1, 4
7503 ; PC64LE-NEXT: addi 3, 3, .LCPI163_0@toc@l
7504 ; PC64LE-NEXT: xscvsxdsp 0, 0
7505 ; PC64LE-NEXT: lvx 4, 0, 3
7506 ; PC64LE-NEXT: xscvsxdsp 1, 1
7507 ; PC64LE-NEXT: mtfprd 2, 5
7508 ; PC64LE-NEXT: xscvdpspn 34, 0
7509 ; PC64LE-NEXT: xscvdpspn 35, 1
7510 ; PC64LE-NEXT: xscvsxdsp 0, 2
7511 ; PC64LE-NEXT: vmrghw 2, 3, 2
7512 ; PC64LE-NEXT: xscvdpspn 35, 0
7513 ; PC64LE-NEXT: vperm 2, 3, 2, 4
7516 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7517 ; PC64LE9: # %bb.0: # %entry
7518 ; PC64LE9-NEXT: mtfprd 0, 3
7519 ; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha
7520 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7521 ; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l
7522 ; PC64LE9-NEXT: xscvdpspn 34, 0
7523 ; PC64LE9-NEXT: mtfprd 0, 4
7524 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7525 ; PC64LE9-NEXT: xscvdpspn 35, 0
7526 ; PC64LE9-NEXT: mtfprd 0, 5
7527 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7528 ; PC64LE9-NEXT: vmrghw 2, 3, 2
7529 ; PC64LE9-NEXT: lxv 35, 0(3)
7530 ; PC64LE9-NEXT: xscvdpspn 36, 0
7531 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
7534 %result = call <3 x float>
7535 @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x,
7536 metadata !"round.dynamic",
7537 metadata !"fpexcept.strict") #0
7538 ret <3 x float> %result
7541 define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 {
7542 ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7543 ; PC64LE: # %bb.0: # %entry
7544 ; PC64LE-NEXT: xxswapd 0, 34
7545 ; PC64LE-NEXT: mfvsrwz 3, 34
7546 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7547 ; PC64LE-NEXT: mtfprwa 2, 3
7548 ; PC64LE-NEXT: mffprwz 3, 0
7549 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
7550 ; PC64LE-NEXT: mffprwz 4, 1
7551 ; PC64LE-NEXT: mtfprwa 1, 3
7552 ; PC64LE-NEXT: mffprwz 3, 0
7553 ; PC64LE-NEXT: mtfprwa 3, 4
7554 ; PC64LE-NEXT: xscvsxddp 0, 2
7555 ; PC64LE-NEXT: mtfprwa 2, 3
7556 ; PC64LE-NEXT: xscvsxddp 1, 1
7557 ; PC64LE-NEXT: xscvsxddp 3, 3
7558 ; PC64LE-NEXT: xscvsxddp 2, 2
7559 ; PC64LE-NEXT: xxmrghd 34, 3, 1
7560 ; PC64LE-NEXT: xxmrghd 35, 2, 0
7563 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7564 ; PC64LE9: # %bb.0: # %entry
7565 ; PC64LE9-NEXT: li 3, 0
7566 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7567 ; PC64LE9-NEXT: mtfprwa 0, 3
7568 ; PC64LE9-NEXT: li 3, 4
7569 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7570 ; PC64LE9-NEXT: xscvsxddp 0, 0
7571 ; PC64LE9-NEXT: mtfprwa 1, 3
7572 ; PC64LE9-NEXT: li 3, 12
7573 ; PC64LE9-NEXT: xscvsxddp 1, 1
7574 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7575 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7576 ; PC64LE9-NEXT: mtfprwa 1, 3
7577 ; PC64LE9-NEXT: mfvsrwz 3, 34
7578 ; PC64LE9-NEXT: mtfprwa 2, 3
7579 ; PC64LE9-NEXT: xscvsxddp 1, 1
7580 ; PC64LE9-NEXT: xscvsxddp 2, 2
7581 ; PC64LE9-NEXT: xxlor 34, 0, 0
7582 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
7585 %result = call <4 x double>
7586 @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x,
7587 metadata !"round.dynamic",
7588 metadata !"fpexcept.strict") #0
7589 ret <4 x double> %result
7592 define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 {
7593 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7594 ; PC64LE: # %bb.0: # %entry
7595 ; PC64LE-NEXT: vmrglh 2, 2, 2
7596 ; PC64LE-NEXT: vspltisw 3, 8
7597 ; PC64LE-NEXT: vadduwm 3, 3, 3
7598 ; PC64LE-NEXT: vslw 2, 2, 3
7599 ; PC64LE-NEXT: vsraw 2, 2, 3
7600 ; PC64LE-NEXT: xvcvsxwsp 34, 34
7603 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7604 ; PC64LE9: # %bb.0: # %entry
7605 ; PC64LE9-NEXT: vmrglh 2, 2, 2
7606 ; PC64LE9-NEXT: vextsh2w 2, 2
7607 ; PC64LE9-NEXT: xvcvsxwsp 34, 34
7610 %result = call <4 x float>
7611 @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x,
7612 metadata !"round.dynamic",
7613 metadata !"fpexcept.strict") #0
7614 ret <4 x float> %result
7617 define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 {
7618 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7619 ; PC64LE: # %bb.0: # %entry
7620 ; PC64LE-NEXT: xvcvsxwsp 34, 34
7623 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7624 ; PC64LE9: # %bb.0: # %entry
7625 ; PC64LE9-NEXT: xvcvsxwsp 34, 34
7628 %result = call <4 x float>
7629 @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x,
7630 metadata !"round.dynamic",
7631 metadata !"fpexcept.strict") #0
7632 ret <4 x float> %result
7635 define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 {
7636 ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64:
7637 ; PC64LE: # %bb.0: # %entry
7638 ; PC64LE-NEXT: xvcvsxddp 35, 35
7639 ; PC64LE-NEXT: xvcvsxddp 34, 34
7642 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64:
7643 ; PC64LE9: # %bb.0: # %entry
7644 ; PC64LE9-NEXT: xvcvsxddp 35, 35
7645 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7648 %result = call <4 x double>
7649 @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x,
7650 metadata !"round.dynamic",
7651 metadata !"fpexcept.strict") #0
7652 ret <4 x double> %result
7655 define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 {
7656 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64:
7657 ; PC64LE: # %bb.0: # %entry
7658 ; PC64LE-NEXT: xxswapd 0, 34
7659 ; PC64LE-NEXT: mfvsrd 3, 34
7660 ; PC64LE-NEXT: xxswapd 2, 35
7661 ; PC64LE-NEXT: mfvsrd 4, 35
7662 ; PC64LE-NEXT: mtfprd 1, 3
7663 ; PC64LE-NEXT: mffprd 3, 0
7664 ; PC64LE-NEXT: mtfprd 0, 4
7665 ; PC64LE-NEXT: mtfprd 3, 3
7666 ; PC64LE-NEXT: mffprd 3, 2
7667 ; PC64LE-NEXT: xscvsxdsp 1, 1
7668 ; PC64LE-NEXT: mtfprd 2, 3
7669 ; PC64LE-NEXT: xscvsxdsp 0, 0
7670 ; PC64LE-NEXT: xscvsxdsp 3, 3
7671 ; PC64LE-NEXT: xscvsxdsp 2, 2
7672 ; PC64LE-NEXT: xxmrghd 0, 0, 1
7673 ; PC64LE-NEXT: xxmrghd 1, 2, 3
7674 ; PC64LE-NEXT: xvcvdpsp 34, 0
7675 ; PC64LE-NEXT: xvcvdpsp 35, 1
7676 ; PC64LE-NEXT: vmrgew 2, 2, 3
7679 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64:
7680 ; PC64LE9: # %bb.0: # %entry
7681 ; PC64LE9-NEXT: mfvsrld 3, 34
7682 ; PC64LE9-NEXT: mtfprd 0, 3
7683 ; PC64LE9-NEXT: mfvsrld 3, 35
7684 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7685 ; PC64LE9-NEXT: mtfprd 1, 3
7686 ; PC64LE9-NEXT: mfvsrd 3, 34
7687 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7688 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7689 ; PC64LE9-NEXT: xvcvdpsp 36, 0
7690 ; PC64LE9-NEXT: mtfprd 0, 3
7691 ; PC64LE9-NEXT: mfvsrd 3, 35
7692 ; PC64LE9-NEXT: mtfprd 1, 3
7693 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7694 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7695 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7696 ; PC64LE9-NEXT: xvcvdpsp 34, 0
7697 ; PC64LE9-NEXT: vmrgew 2, 2, 4
7700 %result = call <4 x float>
7701 @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x,
7702 metadata !"round.dynamic",
7703 metadata !"fpexcept.strict") #0
7704 ret <4 x float> %result
7707 define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 {
7708 ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32:
7709 ; PC64LE: # %bb.0: # %entry
7710 ; PC64LE-NEXT: mtfprwz 0, 3
7711 ; PC64LE-NEXT: xscvuxddp 1, 0
7714 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32:
7715 ; PC64LE9: # %bb.0: # %entry
7716 ; PC64LE9-NEXT: mtfprwz 0, 3
7717 ; PC64LE9-NEXT: xscvuxddp 1, 0
7720 %result = call <1 x double>
7721 @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x,
7722 metadata !"round.dynamic",
7723 metadata !"fpexcept.strict") #0
7724 ret <1 x double> %result
7727 define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 {
7728 ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32:
7729 ; PC64LE: # %bb.0: # %entry
7730 ; PC64LE-NEXT: mtfprwz 0, 3
7731 ; PC64LE-NEXT: xscvuxdsp 1, 0
7734 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32:
7735 ; PC64LE9: # %bb.0: # %entry
7736 ; PC64LE9-NEXT: mtfprwz 0, 3
7737 ; PC64LE9-NEXT: xscvuxdsp 1, 0
7740 %result = call <1 x float>
7741 @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x,
7742 metadata !"round.dynamic",
7743 metadata !"fpexcept.strict") #0
7744 ret <1 x float> %result
7747 define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 {
7748 ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64:
7749 ; PC64LE: # %bb.0: # %entry
7750 ; PC64LE-NEXT: mtfprd 0, 3
7751 ; PC64LE-NEXT: xscvuxddp 1, 0
7754 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64:
7755 ; PC64LE9: # %bb.0: # %entry
7756 ; PC64LE9-NEXT: mtfprd 0, 3
7757 ; PC64LE9-NEXT: xscvuxddp 1, 0
7760 %result = call <1 x double>
7761 @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x,
7762 metadata !"round.dynamic",
7763 metadata !"fpexcept.strict") #0
7764 ret <1 x double> %result
7767 define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 {
7768 ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64:
7769 ; PC64LE: # %bb.0: # %entry
7770 ; PC64LE-NEXT: mtfprd 0, 3
7771 ; PC64LE-NEXT: xscvuxdsp 1, 0
7774 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64:
7775 ; PC64LE9: # %bb.0: # %entry
7776 ; PC64LE9-NEXT: mtfprd 0, 3
7777 ; PC64LE9-NEXT: xscvuxdsp 1, 0
7780 %result = call <1 x float>
7781 @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x,
7782 metadata !"round.dynamic",
7783 metadata !"fpexcept.strict") #0
7784 ret <1 x float> %result
7787 define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 {
7788 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16:
7789 ; PC64LE: # %bb.0: # %entry
7790 ; PC64LE-NEXT: addis 3, 2, .LCPI173_0@toc@ha
7791 ; PC64LE-NEXT: xxlxor 36, 36, 36
7792 ; PC64LE-NEXT: addi 3, 3, .LCPI173_0@toc@l
7793 ; PC64LE-NEXT: lvx 3, 0, 3
7794 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7795 ; PC64LE-NEXT: xvcvuxddp 34, 34
7798 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16:
7799 ; PC64LE9: # %bb.0: # %entry
7800 ; PC64LE9-NEXT: addis 3, 2, .LCPI173_0@toc@ha
7801 ; PC64LE9-NEXT: xxlxor 36, 36, 36
7802 ; PC64LE9-NEXT: addi 3, 3, .LCPI173_0@toc@l
7803 ; PC64LE9-NEXT: lxv 35, 0(3)
7804 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
7805 ; PC64LE9-NEXT: xvcvuxddp 34, 34
7808 %result = call <2 x double>
7809 @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x,
7810 metadata !"round.dynamic",
7811 metadata !"fpexcept.strict") #0
7812 ret <2 x double> %result
7815 define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 {
7816 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32:
7817 ; PC64LE: # %bb.0: # %entry
7818 ; PC64LE-NEXT: xxswapd 0, 34
7819 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7820 ; PC64LE-NEXT: mffprwz 3, 0
7821 ; PC64LE-NEXT: mffprwz 4, 1
7822 ; PC64LE-NEXT: mtfprwz 0, 3
7823 ; PC64LE-NEXT: mtfprwz 1, 4
7824 ; PC64LE-NEXT: xscvuxddp 0, 0
7825 ; PC64LE-NEXT: xscvuxddp 1, 1
7826 ; PC64LE-NEXT: xxmrghd 34, 1, 0
7829 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32:
7830 ; PC64LE9: # %bb.0: # %entry
7831 ; PC64LE9-NEXT: li 3, 0
7832 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7833 ; PC64LE9-NEXT: mtfprwz 0, 3
7834 ; PC64LE9-NEXT: li 3, 4
7835 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7836 ; PC64LE9-NEXT: xscvuxddp 0, 0
7837 ; PC64LE9-NEXT: mtfprwz 1, 3
7838 ; PC64LE9-NEXT: xscvuxddp 1, 1
7839 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
7842 %result = call <2 x double>
7843 @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x,
7844 metadata !"round.dynamic",
7845 metadata !"fpexcept.strict") #0
7846 ret <2 x double> %result
7849 define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7850 ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32:
7851 ; PC64LE: # %bb.0: # %entry
7852 ; PC64LE-NEXT: xxswapd 0, 34
7853 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7854 ; PC64LE-NEXT: mffprwz 3, 0
7855 ; PC64LE-NEXT: mffprwz 4, 1
7856 ; PC64LE-NEXT: mtfprwz 0, 3
7857 ; PC64LE-NEXT: mtfprwz 1, 4
7858 ; PC64LE-NEXT: xscvuxdsp 0, 0
7859 ; PC64LE-NEXT: xscvuxdsp 1, 1
7860 ; PC64LE-NEXT: xscvdpspn 34, 0
7861 ; PC64LE-NEXT: xscvdpspn 35, 1
7862 ; PC64LE-NEXT: vmrghw 2, 3, 2
7865 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32:
7866 ; PC64LE9: # %bb.0: # %entry
7867 ; PC64LE9-NEXT: li 3, 0
7868 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7869 ; PC64LE9-NEXT: mtfprwz 0, 3
7870 ; PC64LE9-NEXT: li 3, 4
7871 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7872 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7873 ; PC64LE9-NEXT: xscvdpspn 35, 0
7874 ; PC64LE9-NEXT: mtfprwz 0, 3
7875 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7876 ; PC64LE9-NEXT: xscvdpspn 34, 0
7877 ; PC64LE9-NEXT: vmrghw 2, 2, 3
7880 %result = call <2 x float>
7881 @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x,
7882 metadata !"round.dynamic",
7883 metadata !"fpexcept.strict") #0
7884 ret <2 x float> %result
7887 define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7888 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64:
7889 ; PC64LE: # %bb.0: # %entry
7890 ; PC64LE-NEXT: xvcvuxddp 34, 34
7893 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64:
7894 ; PC64LE9: # %bb.0: # %entry
7895 ; PC64LE9-NEXT: xvcvuxddp 34, 34
7898 %result = call <2 x double>
7899 @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x,
7900 metadata !"round.dynamic",
7901 metadata !"fpexcept.strict") #0
7902 ret <2 x double> %result
7905 define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7906 ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64:
7907 ; PC64LE: # %bb.0: # %entry
7908 ; PC64LE-NEXT: xxswapd 0, 34
7909 ; PC64LE-NEXT: mfvsrd 3, 34
7910 ; PC64LE-NEXT: mffprd 4, 0
7911 ; PC64LE-NEXT: mtfprd 0, 3
7912 ; PC64LE-NEXT: mtfprd 1, 4
7913 ; PC64LE-NEXT: xscvuxdsp 0, 0
7914 ; PC64LE-NEXT: xscvuxdsp 1, 1
7915 ; PC64LE-NEXT: xscvdpspn 34, 0
7916 ; PC64LE-NEXT: xscvdpspn 35, 1
7917 ; PC64LE-NEXT: vmrghw 2, 2, 3
7920 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64:
7921 ; PC64LE9: # %bb.0: # %entry
7922 ; PC64LE9-NEXT: mfvsrld 3, 34
7923 ; PC64LE9-NEXT: mtfprd 0, 3
7924 ; PC64LE9-NEXT: mfvsrd 3, 34
7925 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7926 ; PC64LE9-NEXT: xscvdpspn 35, 0
7927 ; PC64LE9-NEXT: mtfprd 0, 3
7928 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7929 ; PC64LE9-NEXT: xscvdpspn 34, 0
7930 ; PC64LE9-NEXT: vmrghw 2, 2, 3
7933 %result = call <2 x float>
7934 @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x,
7935 metadata !"round.dynamic",
7936 metadata !"fpexcept.strict") #0
7937 ret <2 x float> %result
7940 define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 {
7941 ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32:
7942 ; PC64LE: # %bb.0: # %entry
7943 ; PC64LE-NEXT: xxswapd 0, 34
7944 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7945 ; PC64LE-NEXT: mfvsrwz 3, 34
7946 ; PC64LE-NEXT: mtfprwz 3, 3
7947 ; PC64LE-NEXT: mffprwz 3, 0
7948 ; PC64LE-NEXT: mffprwz 4, 1
7949 ; PC64LE-NEXT: mtfprwz 0, 3
7950 ; PC64LE-NEXT: mtfprwz 2, 4
7951 ; PC64LE-NEXT: xscvuxddp 1, 0
7952 ; PC64LE-NEXT: xscvuxddp 2, 2
7953 ; PC64LE-NEXT: xscvuxddp 3, 3
7956 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32:
7957 ; PC64LE9: # %bb.0: # %entry
7958 ; PC64LE9-NEXT: li 3, 0
7959 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7960 ; PC64LE9-NEXT: mtfprwz 0, 3
7961 ; PC64LE9-NEXT: li 3, 4
7962 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7963 ; PC64LE9-NEXT: xscvuxddp 1, 0
7964 ; PC64LE9-NEXT: mtfprwz 0, 3
7965 ; PC64LE9-NEXT: mfvsrwz 3, 34
7966 ; PC64LE9-NEXT: xscvuxddp 2, 0
7967 ; PC64LE9-NEXT: mtfprwz 0, 3
7968 ; PC64LE9-NEXT: xscvuxddp 3, 0
7971 %result = call <3 x double>
7972 @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x,
7973 metadata !"round.dynamic",
7974 metadata !"fpexcept.strict") #0
7975 ret <3 x double> %result
7978 define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 {
7979 ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32:
7980 ; PC64LE: # %bb.0: # %entry
7981 ; PC64LE-NEXT: xxswapd 0, 34
7982 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7983 ; PC64LE-NEXT: mffprwz 3, 0
7984 ; PC64LE-NEXT: mffprwz 4, 1
7985 ; PC64LE-NEXT: mtfprwz 0, 3
7986 ; PC64LE-NEXT: mtfprwz 1, 4
7987 ; PC64LE-NEXT: xscvuxdsp 0, 0
7988 ; PC64LE-NEXT: xscvuxdsp 1, 1
7989 ; PC64LE-NEXT: mfvsrwz 3, 34
7990 ; PC64LE-NEXT: mtfprwz 2, 3
7991 ; PC64LE-NEXT: addis 3, 2, .LCPI179_0@toc@ha
7992 ; PC64LE-NEXT: addi 3, 3, .LCPI179_0@toc@l
7993 ; PC64LE-NEXT: xscvdpspn 34, 0
7994 ; PC64LE-NEXT: lvx 4, 0, 3
7995 ; PC64LE-NEXT: xscvdpspn 35, 1
7996 ; PC64LE-NEXT: xscvuxdsp 0, 2
7997 ; PC64LE-NEXT: vmrghw 2, 3, 2
7998 ; PC64LE-NEXT: xscvdpspn 35, 0
7999 ; PC64LE-NEXT: vperm 2, 3, 2, 4
8002 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32:
8003 ; PC64LE9: # %bb.0: # %entry
8004 ; PC64LE9-NEXT: li 3, 0
8005 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8006 ; PC64LE9-NEXT: mtfprwz 0, 3
8007 ; PC64LE9-NEXT: li 3, 4
8008 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8009 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8010 ; PC64LE9-NEXT: xscvdpspn 35, 0
8011 ; PC64LE9-NEXT: mtfprwz 0, 3
8012 ; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha
8013 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8014 ; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l
8015 ; PC64LE9-NEXT: xscvdpspn 36, 0
8016 ; PC64LE9-NEXT: vmrghw 3, 4, 3
8017 ; PC64LE9-NEXT: lxv 36, 0(3)
8018 ; PC64LE9-NEXT: mfvsrwz 3, 34
8019 ; PC64LE9-NEXT: mtfprwz 0, 3
8020 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8021 ; PC64LE9-NEXT: xscvdpspn 34, 0
8022 ; PC64LE9-NEXT: vperm 2, 2, 3, 4
8025 %result = call <3 x float>
8026 @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x,
8027 metadata !"round.dynamic",
8028 metadata !"fpexcept.strict") #0
8029 ret <3 x float> %result
8032 define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 {
8033 ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8034 ; PC64LE: # %bb.0: # %entry
8035 ; PC64LE-NEXT: mtfprd 0, 3
8036 ; PC64LE-NEXT: mtfprd 2, 4
8037 ; PC64LE-NEXT: mtfprd 3, 5
8038 ; PC64LE-NEXT: xscvuxddp 1, 0
8039 ; PC64LE-NEXT: xscvuxddp 2, 2
8040 ; PC64LE-NEXT: xscvuxddp 3, 3
8043 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8044 ; PC64LE9: # %bb.0: # %entry
8045 ; PC64LE9-NEXT: mtfprd 0, 3
8046 ; PC64LE9-NEXT: xscvuxddp 1, 0
8047 ; PC64LE9-NEXT: mtfprd 0, 4
8048 ; PC64LE9-NEXT: xscvuxddp 2, 0
8049 ; PC64LE9-NEXT: mtfprd 0, 5
8050 ; PC64LE9-NEXT: xscvuxddp 3, 0
8053 %result = call <3 x double>
8054 @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x,
8055 metadata !"round.dynamic",
8056 metadata !"fpexcept.strict") #0
8057 ret <3 x double> %result
8060 define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 {
8061 ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8062 ; PC64LE: # %bb.0: # %entry
8063 ; PC64LE-NEXT: mtfprd 0, 3
8064 ; PC64LE-NEXT: addis 3, 2, .LCPI181_0@toc@ha
8065 ; PC64LE-NEXT: mtfprd 1, 4
8066 ; PC64LE-NEXT: addi 3, 3, .LCPI181_0@toc@l
8067 ; PC64LE-NEXT: xscvuxdsp 0, 0
8068 ; PC64LE-NEXT: lvx 4, 0, 3
8069 ; PC64LE-NEXT: xscvuxdsp 1, 1
8070 ; PC64LE-NEXT: mtfprd 2, 5
8071 ; PC64LE-NEXT: xscvdpspn 34, 0
8072 ; PC64LE-NEXT: xscvdpspn 35, 1
8073 ; PC64LE-NEXT: xscvuxdsp 0, 2
8074 ; PC64LE-NEXT: vmrghw 2, 3, 2
8075 ; PC64LE-NEXT: xscvdpspn 35, 0
8076 ; PC64LE-NEXT: vperm 2, 3, 2, 4
8079 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8080 ; PC64LE9: # %bb.0: # %entry
8081 ; PC64LE9-NEXT: mtfprd 0, 3
8082 ; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha
8083 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8084 ; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l
8085 ; PC64LE9-NEXT: xscvdpspn 34, 0
8086 ; PC64LE9-NEXT: mtfprd 0, 4
8087 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8088 ; PC64LE9-NEXT: xscvdpspn 35, 0
8089 ; PC64LE9-NEXT: mtfprd 0, 5
8090 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8091 ; PC64LE9-NEXT: vmrghw 2, 3, 2
8092 ; PC64LE9-NEXT: lxv 35, 0(3)
8093 ; PC64LE9-NEXT: xscvdpspn 36, 0
8094 ; PC64LE9-NEXT: vperm 2, 4, 2, 3
8097 %result = call <3 x float>
8098 @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x,
8099 metadata !"round.dynamic",
8100 metadata !"fpexcept.strict") #0
8101 ret <3 x float> %result
8104 define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 {
8105 ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8106 ; PC64LE: # %bb.0: # %entry
8107 ; PC64LE-NEXT: xxswapd 0, 34
8108 ; PC64LE-NEXT: mfvsrwz 3, 34
8109 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
8110 ; PC64LE-NEXT: mtfprwz 2, 3
8111 ; PC64LE-NEXT: mffprwz 3, 0
8112 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
8113 ; PC64LE-NEXT: mffprwz 4, 1
8114 ; PC64LE-NEXT: mtfprwz 1, 3
8115 ; PC64LE-NEXT: mffprwz 3, 0
8116 ; PC64LE-NEXT: mtfprwz 3, 4
8117 ; PC64LE-NEXT: xscvuxddp 0, 2
8118 ; PC64LE-NEXT: mtfprwz 2, 3
8119 ; PC64LE-NEXT: xscvuxddp 1, 1
8120 ; PC64LE-NEXT: xscvuxddp 3, 3
8121 ; PC64LE-NEXT: xscvuxddp 2, 2
8122 ; PC64LE-NEXT: xxmrghd 34, 3, 1
8123 ; PC64LE-NEXT: xxmrghd 35, 2, 0
8126 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8127 ; PC64LE9: # %bb.0: # %entry
8128 ; PC64LE9-NEXT: li 3, 0
8129 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8130 ; PC64LE9-NEXT: mtfprwz 0, 3
8131 ; PC64LE9-NEXT: li 3, 4
8132 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8133 ; PC64LE9-NEXT: xscvuxddp 0, 0
8134 ; PC64LE9-NEXT: mtfprwz 1, 3
8135 ; PC64LE9-NEXT: li 3, 12
8136 ; PC64LE9-NEXT: xscvuxddp 1, 1
8137 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8138 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
8139 ; PC64LE9-NEXT: mtfprwz 1, 3
8140 ; PC64LE9-NEXT: mfvsrwz 3, 34
8141 ; PC64LE9-NEXT: mtfprwz 2, 3
8142 ; PC64LE9-NEXT: xscvuxddp 1, 1
8143 ; PC64LE9-NEXT: xscvuxddp 2, 2
8144 ; PC64LE9-NEXT: xxlor 34, 0, 0
8145 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
8148 %result = call <4 x double>
8149 @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x,
8150 metadata !"round.dynamic",
8151 metadata !"fpexcept.strict") #0
8152 ret <4 x double> %result
8155 define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 {
8156 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8157 ; PC64LE: # %bb.0: # %entry
8158 ; PC64LE-NEXT: xxlxor 35, 35, 35
8159 ; PC64LE-NEXT: vmrglh 2, 3, 2
8160 ; PC64LE-NEXT: xvcvuxwsp 34, 34
8163 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8164 ; PC64LE9: # %bb.0: # %entry
8165 ; PC64LE9-NEXT: xxlxor 35, 35, 35
8166 ; PC64LE9-NEXT: vmrglh 2, 3, 2
8167 ; PC64LE9-NEXT: xvcvuxwsp 34, 34
8170 %result = call <4 x float>
8171 @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x,
8172 metadata !"round.dynamic",
8173 metadata !"fpexcept.strict") #0
8174 ret <4 x float> %result
8177 define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 {
8178 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8179 ; PC64LE: # %bb.0: # %entry
8180 ; PC64LE-NEXT: xvcvuxwsp 34, 34
8183 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8184 ; PC64LE9: # %bb.0: # %entry
8185 ; PC64LE9-NEXT: xvcvuxwsp 34, 34
8188 %result = call <4 x float>
8189 @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x,
8190 metadata !"round.dynamic",
8191 metadata !"fpexcept.strict") #0
8192 ret <4 x float> %result
8195 define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 {
8196 ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8197 ; PC64LE: # %bb.0: # %entry
8198 ; PC64LE-NEXT: xvcvuxddp 35, 35
8199 ; PC64LE-NEXT: xvcvuxddp 34, 34
8202 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8203 ; PC64LE9: # %bb.0: # %entry
8204 ; PC64LE9-NEXT: xvcvuxddp 35, 35
8205 ; PC64LE9-NEXT: xvcvuxddp 34, 34
8208 %result = call <4 x double>
8209 @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x,
8210 metadata !"round.dynamic",
8211 metadata !"fpexcept.strict") #0
8212 ret <4 x double> %result
8215 define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 {
8216 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8217 ; PC64LE: # %bb.0: # %entry
8218 ; PC64LE-NEXT: xxswapd 0, 34
8219 ; PC64LE-NEXT: mfvsrd 3, 34
8220 ; PC64LE-NEXT: xxswapd 2, 35
8221 ; PC64LE-NEXT: mfvsrd 4, 35
8222 ; PC64LE-NEXT: mtfprd 1, 3
8223 ; PC64LE-NEXT: mffprd 3, 0
8224 ; PC64LE-NEXT: mtfprd 0, 4
8225 ; PC64LE-NEXT: mtfprd 3, 3
8226 ; PC64LE-NEXT: mffprd 3, 2
8227 ; PC64LE-NEXT: xscvuxdsp 1, 1
8228 ; PC64LE-NEXT: mtfprd 2, 3
8229 ; PC64LE-NEXT: xscvuxdsp 0, 0
8230 ; PC64LE-NEXT: xscvuxdsp 3, 3
8231 ; PC64LE-NEXT: xscvuxdsp 2, 2
8232 ; PC64LE-NEXT: xxmrghd 0, 0, 1
8233 ; PC64LE-NEXT: xxmrghd 1, 2, 3
8234 ; PC64LE-NEXT: xvcvdpsp 34, 0
8235 ; PC64LE-NEXT: xvcvdpsp 35, 1
8236 ; PC64LE-NEXT: vmrgew 2, 2, 3
8239 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8240 ; PC64LE9: # %bb.0: # %entry
8241 ; PC64LE9-NEXT: mfvsrld 3, 34
8242 ; PC64LE9-NEXT: mtfprd 0, 3
8243 ; PC64LE9-NEXT: mfvsrld 3, 35
8244 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8245 ; PC64LE9-NEXT: mtfprd 1, 3
8246 ; PC64LE9-NEXT: mfvsrd 3, 34
8247 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8248 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
8249 ; PC64LE9-NEXT: xvcvdpsp 36, 0
8250 ; PC64LE9-NEXT: mtfprd 0, 3
8251 ; PC64LE9-NEXT: mfvsrd 3, 35
8252 ; PC64LE9-NEXT: mtfprd 1, 3
8253 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8254 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8255 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
8256 ; PC64LE9-NEXT: xvcvdpsp 34, 0
8257 ; PC64LE9-NEXT: vmrgew 2, 2, 4
8260 %result = call <4 x float>
8261 @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x,
8262 metadata !"round.dynamic",
8263 metadata !"fpexcept.strict") #0
8264 ret <4 x float> %result
8267 attributes #0 = { nounwind strictfp noimplicitfloat }
8268 attributes #1 = { strictfp }
8270 ; Single width declarations
8271 declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8272 declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8273 declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8274 declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8275 declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8276 declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
8277 declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8278 declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
8279 declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
8280 declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
8281 declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
8282 declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
8283 declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
8284 declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
8285 declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
8286 declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
8287 declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
8288 declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata)
8289 declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata)
8290 declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata)
8291 declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata)
8292 declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata)
8293 declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata)
8294 declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata)
8295 declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata)
8296 declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata)
8297 declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata)
8298 declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
8299 declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
8300 declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)
8301 declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)
8302 declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)
8303 declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
8304 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8305 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8306 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8307 declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8308 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8309 declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8310 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8311 declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8312 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8313 declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8315 ; Scalar width declarations
8316 declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8317 declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8318 declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8319 declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8320 declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8321 declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
8322 declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8323 declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
8324 declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
8325 declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
8326 declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
8327 declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
8328 declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
8329 declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
8330 declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
8331 declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
8332 declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
8333 declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata)
8334 declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata)
8335 declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata)
8336 declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata)
8337 declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata)
8338 declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata)
8339 declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata)
8340 declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata)
8341 declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata)
8342 declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata)
8343 declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
8344 declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
8345 declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata)
8346 declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata)
8347 declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata)
8348 declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata)
8349 declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8350 declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8351 declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8352 declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8353 declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8354 declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8355 declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8356 declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8358 ; Illegal width declarations
8359 declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8360 declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8361 declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8362 declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8363 declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8364 declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8365 declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8366 declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8367 declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8368 declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8369 declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
8370 declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
8371 declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8372 declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8373 declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
8374 declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
8375 declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
8376 declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
8377 declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
8378 declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
8379 declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
8380 declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
8381 declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
8382 declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
8383 declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
8384 declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
8385 declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
8386 declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
8387 declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
8388 declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
8389 declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
8390 declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
8391 declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
8392 declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
8393 declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata)
8394 declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata)
8395 declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata)
8396 declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata)
8397 declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata)
8398 declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata)
8399 declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata)
8400 declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata)
8401 declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata)
8402 declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata)
8403 declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata)
8404 declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata)
8405 declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
8406 declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
8407 declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata)
8408 declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata)
8409 declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata)
8410 declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata)
8411 declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata)
8412 declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata)
8413 declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata)
8414 declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata)
8415 declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8416 declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8417 declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8418 declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8419 declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8420 declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8421 declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8422 declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8424 ; Double width declarations
8425 declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8426 declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8427 declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8428 declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8429 declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8430 declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
8431 declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8432 declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
8433 declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
8434 declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
8435 declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
8436 declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
8437 declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
8438 declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
8439 declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
8440 declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
8441 declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
8442 declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata)
8443 declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata)
8444 declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)
8445 declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata)
8446 declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata)
8447 declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata)
8448 declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)
8449 declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata)
8450 declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata)
8451 declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata)
8452 declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
8453 declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
8454 declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata)
8455 declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata)
8456 declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata)
8457 declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata)
8458 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8459 declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8460 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8461 declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8462 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)
8463 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8464 declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8465 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8466 declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8467 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)