1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu < %s | FileCheck --check-prefix=PC64LE %s
3 ; RUN: llc -O3 -mtriple=powerpc64le-linux-gnu -mcpu=pwr9 < %s | FileCheck --check-prefix=PC64LE9 %s
5 define <1 x float> @constrained_vector_fdiv_v1f32(<1 x float> %x, <1 x float> %y) #0 {
6 ; PC64LE-LABEL: constrained_vector_fdiv_v1f32:
7 ; PC64LE: # %bb.0: # %entry
8 ; PC64LE-NEXT: xsdivsp 1, 1, 2
11 ; PC64LE9-LABEL: constrained_vector_fdiv_v1f32:
12 ; PC64LE9: # %bb.0: # %entry
13 ; PC64LE9-NEXT: xsdivsp 1, 1, 2
16 %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32(
19 metadata !"round.dynamic",
20 metadata !"fpexcept.strict") #1
24 define <2 x double> @constrained_vector_fdiv_v2f64(<2 x double> %x, <2 x double> %y) #0 {
25 ; PC64LE-LABEL: constrained_vector_fdiv_v2f64:
26 ; PC64LE: # %bb.0: # %entry
27 ; PC64LE-NEXT: xvdivdp 34, 34, 35
30 ; PC64LE9-LABEL: constrained_vector_fdiv_v2f64:
31 ; PC64LE9: # %bb.0: # %entry
32 ; PC64LE9-NEXT: xvdivdp 34, 34, 35
35 %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64(
38 metadata !"round.dynamic",
39 metadata !"fpexcept.strict") #1
43 define <3 x float> @constrained_vector_fdiv_v3f32(<3 x float> %x, <3 x float> %y) #0 {
44 ; PC64LE-LABEL: constrained_vector_fdiv_v3f32:
45 ; PC64LE: # %bb.0: # %entry
46 ; PC64LE-NEXT: xxswapd 0, 35
47 ; PC64LE-NEXT: xxswapd 1, 34
48 ; PC64LE-NEXT: addis 3, 2, .LCPI2_0@toc@ha
49 ; PC64LE-NEXT: xscvspdpn 0, 0
50 ; PC64LE-NEXT: xscvspdpn 1, 1
51 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
52 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
53 ; PC64LE-NEXT: addi 3, 3, .LCPI2_0@toc@l
54 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
55 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
56 ; PC64LE-NEXT: xsdivsp 0, 1, 0
57 ; PC64LE-NEXT: xscvspdpn 1, 2
58 ; PC64LE-NEXT: xscvspdpn 2, 3
59 ; PC64LE-NEXT: xsdivsp 1, 2, 1
60 ; PC64LE-NEXT: xscvdpspn 0, 0
61 ; PC64LE-NEXT: xscvdpspn 1, 1
62 ; PC64LE-NEXT: xxmrghw 34, 0, 1
63 ; PC64LE-NEXT: lxvd2x 0, 0, 3
64 ; PC64LE-NEXT: xscvspdpn 1, 5
65 ; PC64LE-NEXT: xxswapd 35, 0
66 ; PC64LE-NEXT: xscvspdpn 0, 4
67 ; PC64LE-NEXT: xsdivsp 0, 1, 0
68 ; PC64LE-NEXT: xscvdpspn 36, 0
69 ; PC64LE-NEXT: vperm 2, 4, 2, 3
72 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
73 ; PC64LE9: # %bb.0: # %entry
74 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
75 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
76 ; PC64LE9-NEXT: addis 3, 2, .LCPI2_0@toc@ha
77 ; PC64LE9-NEXT: addi 3, 3, .LCPI2_0@toc@l
78 ; PC64LE9-NEXT: xxswapd 2, 34
79 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
80 ; PC64LE9-NEXT: xscvspdpn 0, 0
81 ; PC64LE9-NEXT: xscvspdpn 1, 1
82 ; PC64LE9-NEXT: xscvspdpn 2, 2
83 ; PC64LE9-NEXT: xscvspdpn 3, 3
84 ; PC64LE9-NEXT: xsdivsp 0, 1, 0
85 ; PC64LE9-NEXT: xxswapd 1, 35
86 ; PC64LE9-NEXT: xscvspdpn 1, 1
87 ; PC64LE9-NEXT: xsdivsp 1, 2, 1
88 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
89 ; PC64LE9-NEXT: xscvspdpn 2, 2
90 ; PC64LE9-NEXT: xsdivsp 2, 3, 2
91 ; PC64LE9-NEXT: xscvdpspn 34, 0
92 ; PC64LE9-NEXT: lxv 0, 0(3)
93 ; PC64LE9-NEXT: xscvdpspn 1, 1
94 ; PC64LE9-NEXT: xscvdpspn 2, 2
95 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
96 ; PC64LE9-NEXT: xxperm 34, 35, 0
99 %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32(
102 metadata !"round.dynamic",
103 metadata !"fpexcept.strict") #1
107 define <3 x double> @constrained_vector_fdiv_v3f64(<3 x double> %x, <3 x double> %y) #0 {
108 ; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
109 ; PC64LE: # %bb.0: # %entry
110 ; PC64LE-NEXT: # 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: # kill: def $f1 killed $f1 def $vsl1
114 ; PC64LE-NEXT: xxmrghd 0, 5, 4
115 ; PC64LE-NEXT: xxmrghd 1, 2, 1
116 ; PC64LE-NEXT: xsdivdp 3, 3, 6
117 ; PC64LE-NEXT: xvdivdp 2, 1, 0
118 ; PC64LE-NEXT: xxswapd 1, 2
119 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
120 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
123 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
124 ; PC64LE9: # %bb.0: # %entry
125 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
126 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
127 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
128 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
129 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
130 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
131 ; PC64LE9-NEXT: xsdivdp 3, 3, 6
132 ; PC64LE9-NEXT: xvdivdp 2, 1, 0
133 ; PC64LE9-NEXT: xxswapd 1, 2
134 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
135 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
138 %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64(
141 metadata !"round.dynamic",
142 metadata !"fpexcept.strict") #1
143 ret <3 x double> %div
146 define <4 x double> @constrained_vector_fdiv_v4f64(<4 x double> %x, <4 x double> %y) #0 {
147 ; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
148 ; PC64LE: # %bb.0: # %entry
149 ; PC64LE-NEXT: xvdivdp 35, 35, 37
150 ; PC64LE-NEXT: xvdivdp 34, 34, 36
153 ; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
154 ; PC64LE9: # %bb.0: # %entry
155 ; PC64LE9-NEXT: xvdivdp 35, 35, 37
156 ; PC64LE9-NEXT: xvdivdp 34, 34, 36
159 %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64(
162 metadata !"round.dynamic",
163 metadata !"fpexcept.strict") #1
164 ret <4 x double> %div
167 define <1 x float> @constrained_vector_frem_v1f32(<1 x float> %x, <1 x float> %y) #0 {
168 ; PC64LE-LABEL: constrained_vector_frem_v1f32:
169 ; PC64LE: # %bb.0: # %entry
170 ; PC64LE-NEXT: mflr 0
171 ; PC64LE-NEXT: stdu 1, -32(1)
172 ; PC64LE-NEXT: std 0, 48(1)
173 ; PC64LE-NEXT: bl fmodf
175 ; PC64LE-NEXT: addi 1, 1, 32
176 ; PC64LE-NEXT: ld 0, 16(1)
177 ; PC64LE-NEXT: mtlr 0
180 ; PC64LE9-LABEL: constrained_vector_frem_v1f32:
181 ; PC64LE9: # %bb.0: # %entry
182 ; PC64LE9-NEXT: mflr 0
183 ; PC64LE9-NEXT: stdu 1, -32(1)
184 ; PC64LE9-NEXT: std 0, 48(1)
185 ; PC64LE9-NEXT: bl fmodf
187 ; PC64LE9-NEXT: addi 1, 1, 32
188 ; PC64LE9-NEXT: ld 0, 16(1)
189 ; PC64LE9-NEXT: mtlr 0
192 %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32(
195 metadata !"round.dynamic",
196 metadata !"fpexcept.strict") #1
200 define <2 x double> @constrained_vector_frem_v2f64(<2 x double> %x, <2 x double> %y) #0 {
201 ; PC64LE-LABEL: constrained_vector_frem_v2f64:
202 ; PC64LE: # %bb.0: # %entry
203 ; PC64LE-NEXT: mflr 0
204 ; PC64LE-NEXT: stdu 1, -96(1)
205 ; PC64LE-NEXT: li 3, 48
206 ; PC64LE-NEXT: std 0, 112(1)
207 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
208 ; PC64LE-NEXT: li 3, 64
209 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
210 ; PC64LE-NEXT: li 3, 80
211 ; PC64LE-NEXT: vmr 30, 2
212 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
213 ; PC64LE-NEXT: vmr 31, 3
214 ; PC64LE-NEXT: xxlor 1, 62, 62
215 ; PC64LE-NEXT: xxlor 2, 63, 63
216 ; PC64LE-NEXT: bl fmod
218 ; PC64LE-NEXT: xxlor 61, 1, 1
219 ; PC64LE-NEXT: xxswapd 1, 62
220 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
221 ; PC64LE-NEXT: xxswapd 2, 63
222 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
223 ; PC64LE-NEXT: bl fmod
225 ; PC64LE-NEXT: li 3, 80
226 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
227 ; PC64LE-NEXT: xxmrghd 34, 61, 1
228 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
229 ; PC64LE-NEXT: li 3, 64
230 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
231 ; PC64LE-NEXT: li 3, 48
232 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
233 ; PC64LE-NEXT: addi 1, 1, 96
234 ; PC64LE-NEXT: ld 0, 16(1)
235 ; PC64LE-NEXT: mtlr 0
238 ; PC64LE9-LABEL: constrained_vector_frem_v2f64:
239 ; PC64LE9: # %bb.0: # %entry
240 ; PC64LE9-NEXT: mflr 0
241 ; PC64LE9-NEXT: stdu 1, -80(1)
242 ; PC64LE9-NEXT: std 0, 96(1)
243 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
244 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
245 ; PC64LE9-NEXT: vmr 31, 3
246 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
247 ; PC64LE9-NEXT: vmr 30, 2
248 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
249 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
250 ; PC64LE9-NEXT: bl fmod
252 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
253 ; PC64LE9-NEXT: xxswapd 1, 62
254 ; PC64LE9-NEXT: xxswapd 2, 63
255 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
256 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
257 ; PC64LE9-NEXT: bl fmod
259 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
260 ; PC64LE9-NEXT: xxmrghd 34, 61, 1
261 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
262 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
263 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
264 ; PC64LE9-NEXT: addi 1, 1, 80
265 ; PC64LE9-NEXT: ld 0, 16(1)
266 ; PC64LE9-NEXT: mtlr 0
269 %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64(
272 metadata !"round.dynamic",
273 metadata !"fpexcept.strict") #1
274 ret <2 x double> %rem
277 define <3 x float> @constrained_vector_frem_v3f32(<3 x float> %x, <3 x float> %y) #0 {
278 ; PC64LE-LABEL: constrained_vector_frem_v3f32:
279 ; PC64LE: # %bb.0: # %entry
280 ; PC64LE-NEXT: mflr 0
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: std 0, 112(1)
286 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
287 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
288 ; PC64LE-NEXT: xscvspdpn 1, 0
289 ; PC64LE-NEXT: xscvspdpn 2, 2
290 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
291 ; PC64LE-NEXT: li 3, 64
292 ; PC64LE-NEXT: vmr 30, 2
293 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
294 ; PC64LE-NEXT: vmr 31, 3
295 ; PC64LE-NEXT: bl fmodf
297 ; PC64LE-NEXT: xxswapd 0, 62
298 ; PC64LE-NEXT: xxswapd 2, 63
299 ; PC64LE-NEXT: fmr 31, 1
300 ; PC64LE-NEXT: xscvspdpn 1, 0
301 ; PC64LE-NEXT: xscvspdpn 2, 2
302 ; PC64LE-NEXT: bl fmodf
304 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
305 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
306 ; PC64LE-NEXT: fmr 30, 1
307 ; PC64LE-NEXT: xscvspdpn 1, 0
308 ; PC64LE-NEXT: xscvspdpn 2, 2
309 ; PC64LE-NEXT: bl fmodf
311 ; PC64LE-NEXT: xscvdpspn 0, 1
312 ; PC64LE-NEXT: xscvdpspn 1, 30
313 ; PC64LE-NEXT: addis 3, 2, .LCPI7_0@toc@ha
314 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
315 ; PC64LE-NEXT: xscvdpspn 36, 31
316 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
317 ; PC64LE-NEXT: addi 3, 3, .LCPI7_0@toc@l
318 ; PC64LE-NEXT: xxmrghw 34, 1, 0
319 ; PC64LE-NEXT: lxvd2x 0, 0, 3
320 ; PC64LE-NEXT: li 3, 64
321 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
322 ; PC64LE-NEXT: li 3, 48
323 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
324 ; PC64LE-NEXT: xxswapd 35, 0
325 ; PC64LE-NEXT: vperm 2, 4, 2, 3
326 ; PC64LE-NEXT: addi 1, 1, 96
327 ; PC64LE-NEXT: ld 0, 16(1)
328 ; PC64LE-NEXT: mtlr 0
331 ; PC64LE9-LABEL: constrained_vector_frem_v3f32:
332 ; PC64LE9: # %bb.0: # %entry
333 ; PC64LE9-NEXT: mflr 0
334 ; PC64LE9-NEXT: stdu 1, -80(1)
335 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
336 ; PC64LE9-NEXT: std 0, 96(1)
337 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
338 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
339 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
340 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
341 ; PC64LE9-NEXT: xscvspdpn 1, 0
342 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
343 ; PC64LE9-NEXT: vmr 31, 3
344 ; PC64LE9-NEXT: vmr 30, 2
345 ; PC64LE9-NEXT: xscvspdpn 2, 0
346 ; PC64LE9-NEXT: bl fmodf
348 ; PC64LE9-NEXT: xxswapd 0, 62
349 ; PC64LE9-NEXT: fmr 31, 1
350 ; PC64LE9-NEXT: xscvspdpn 1, 0
351 ; PC64LE9-NEXT: xxswapd 0, 63
352 ; PC64LE9-NEXT: xscvspdpn 2, 0
353 ; PC64LE9-NEXT: bl fmodf
355 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
356 ; PC64LE9-NEXT: fmr 30, 1
357 ; PC64LE9-NEXT: xscvspdpn 1, 0
358 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
359 ; PC64LE9-NEXT: xscvspdpn 2, 0
360 ; PC64LE9-NEXT: bl fmodf
362 ; PC64LE9-NEXT: xscvdpspn 0, 1
363 ; PC64LE9-NEXT: xscvdpspn 1, 30
364 ; PC64LE9-NEXT: addis 3, 2, .LCPI7_0@toc@ha
365 ; PC64LE9-NEXT: xscvdpspn 34, 31
366 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
367 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
368 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
369 ; PC64LE9-NEXT: addi 3, 3, .LCPI7_0@toc@l
370 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
371 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
372 ; PC64LE9-NEXT: lxv 0, 0(3)
373 ; PC64LE9-NEXT: xxperm 34, 35, 0
374 ; PC64LE9-NEXT: addi 1, 1, 80
375 ; PC64LE9-NEXT: ld 0, 16(1)
376 ; PC64LE9-NEXT: mtlr 0
379 %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32(
382 metadata !"round.dynamic",
383 metadata !"fpexcept.strict") #1
387 define <3 x double> @constrained_vector_frem_v3f64(<3 x double> %x, <3 x double> %y) #0 {
388 ; PC64LE-LABEL: constrained_vector_frem_v3f64:
389 ; PC64LE: # %bb.0: # %entry
390 ; PC64LE-NEXT: mflr 0
391 ; PC64LE-NEXT: stdu 1, -96(1)
392 ; PC64LE-NEXT: std 0, 112(1)
393 ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill
394 ; PC64LE-NEXT: fmr 28, 2
395 ; PC64LE-NEXT: fmr 2, 4
396 ; PC64LE-NEXT: li 3, 48
397 ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill
398 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
399 ; PC64LE-NEXT: fmr 30, 5
400 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
401 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
402 ; PC64LE-NEXT: fmr 31, 6
403 ; PC64LE-NEXT: fmr 29, 3
404 ; PC64LE-NEXT: bl fmod
406 ; PC64LE-NEXT: xxlor 63, 1, 1
407 ; PC64LE-NEXT: fmr 1, 28
408 ; PC64LE-NEXT: fmr 2, 30
409 ; PC64LE-NEXT: bl fmod
411 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
412 ; PC64LE-NEXT: xxmrghd 63, 1, 63
413 ; PC64LE-NEXT: fmr 1, 29
414 ; PC64LE-NEXT: fmr 2, 31
415 ; PC64LE-NEXT: bl fmod
417 ; PC64LE-NEXT: li 3, 48
418 ; PC64LE-NEXT: fmr 3, 1
419 ; PC64LE-NEXT: xxswapd 1, 63
420 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
421 ; PC64LE-NEXT: xxlor 2, 63, 63
422 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
423 ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload
424 ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload
425 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
426 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
427 ; PC64LE-NEXT: addi 1, 1, 96
428 ; PC64LE-NEXT: ld 0, 16(1)
429 ; PC64LE-NEXT: mtlr 0
432 ; PC64LE9-LABEL: constrained_vector_frem_v3f64:
433 ; PC64LE9: # %bb.0: # %entry
434 ; PC64LE9-NEXT: mflr 0
435 ; PC64LE9-NEXT: stdu 1, -80(1)
436 ; PC64LE9-NEXT: std 0, 96(1)
437 ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill
438 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
439 ; PC64LE9-NEXT: fmr 28, 2
440 ; PC64LE9-NEXT: fmr 2, 4
441 ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill
442 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
443 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
444 ; PC64LE9-NEXT: fmr 31, 6
445 ; PC64LE9-NEXT: fmr 30, 5
446 ; PC64LE9-NEXT: fmr 29, 3
447 ; PC64LE9-NEXT: bl fmod
449 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
450 ; PC64LE9-NEXT: fmr 1, 28
451 ; PC64LE9-NEXT: fmr 2, 30
452 ; PC64LE9-NEXT: bl fmod
454 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
455 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
456 ; PC64LE9-NEXT: fmr 1, 29
457 ; PC64LE9-NEXT: fmr 2, 31
458 ; PC64LE9-NEXT: bl fmod
460 ; PC64LE9-NEXT: fmr 3, 1
461 ; PC64LE9-NEXT: xxswapd 1, 63
462 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
463 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
464 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
465 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
466 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
467 ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload
468 ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload
469 ; PC64LE9-NEXT: addi 1, 1, 80
470 ; PC64LE9-NEXT: ld 0, 16(1)
471 ; PC64LE9-NEXT: mtlr 0
474 %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64(
477 metadata !"round.dynamic",
478 metadata !"fpexcept.strict") #1
479 ret <3 x double> %rem
482 define <4 x double> @constrained_vector_frem_v4f64(<4 x double> %x, <4 x double> %y) #0 {
483 ; PC64LE-LABEL: constrained_vector_frem_v4f64:
485 ; PC64LE-NEXT: mflr 0
486 ; PC64LE-NEXT: stdu 1, -128(1)
487 ; PC64LE-NEXT: li 3, 48
488 ; PC64LE-NEXT: std 0, 144(1)
489 ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill
490 ; PC64LE-NEXT: li 3, 64
491 ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill
492 ; PC64LE-NEXT: li 3, 80
493 ; PC64LE-NEXT: vmr 28, 2
494 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
495 ; PC64LE-NEXT: li 3, 96
496 ; PC64LE-NEXT: xxlor 1, 60, 60
497 ; PC64LE-NEXT: vmr 29, 3
498 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
499 ; PC64LE-NEXT: vmr 30, 4
500 ; PC64LE-NEXT: li 3, 112
501 ; PC64LE-NEXT: xxlor 2, 62, 62
502 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
503 ; PC64LE-NEXT: vmr 31, 5
504 ; PC64LE-NEXT: bl fmod
506 ; PC64LE-NEXT: xxlor 59, 1, 1
507 ; PC64LE-NEXT: xxswapd 1, 60
508 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
509 ; PC64LE-NEXT: xxswapd 2, 62
510 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
511 ; PC64LE-NEXT: bl fmod
513 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
514 ; PC64LE-NEXT: xxmrghd 62, 59, 1
515 ; PC64LE-NEXT: xxlor 1, 61, 61
516 ; PC64LE-NEXT: xxlor 2, 63, 63
517 ; PC64LE-NEXT: bl fmod
519 ; PC64LE-NEXT: xxlor 60, 1, 1
520 ; PC64LE-NEXT: xxswapd 1, 61
521 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
522 ; PC64LE-NEXT: xxswapd 2, 63
523 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
524 ; PC64LE-NEXT: bl fmod
526 ; PC64LE-NEXT: li 3, 112
527 ; PC64LE-NEXT: vmr 2, 30
528 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
529 ; PC64LE-NEXT: xxmrghd 35, 60, 1
530 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
531 ; PC64LE-NEXT: li 3, 96
532 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
533 ; PC64LE-NEXT: li 3, 80
534 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
535 ; PC64LE-NEXT: li 3, 64
536 ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload
537 ; PC64LE-NEXT: li 3, 48
538 ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload
539 ; PC64LE-NEXT: addi 1, 1, 128
540 ; PC64LE-NEXT: ld 0, 16(1)
541 ; PC64LE-NEXT: mtlr 0
544 ; PC64LE9-LABEL: constrained_vector_frem_v4f64:
546 ; PC64LE9-NEXT: mflr 0
547 ; PC64LE9-NEXT: stdu 1, -112(1)
548 ; PC64LE9-NEXT: std 0, 128(1)
549 ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill
550 ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill
551 ; PC64LE9-NEXT: vmr 30, 4
552 ; PC64LE9-NEXT: xscpsgndp 2, 62, 62
553 ; PC64LE9-NEXT: vmr 28, 2
554 ; PC64LE9-NEXT: xscpsgndp 1, 60, 60
555 ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill
556 ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill
557 ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill
558 ; PC64LE9-NEXT: vmr 31, 5
559 ; PC64LE9-NEXT: vmr 29, 3
560 ; PC64LE9-NEXT: bl fmod
562 ; PC64LE9-NEXT: xscpsgndp 59, 1, 1
563 ; PC64LE9-NEXT: xxswapd 1, 60
564 ; PC64LE9-NEXT: xxswapd 2, 62
565 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
566 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
567 ; PC64LE9-NEXT: bl fmod
569 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
570 ; PC64LE9-NEXT: xxmrghd 62, 59, 1
571 ; PC64LE9-NEXT: xscpsgndp 1, 61, 61
572 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
573 ; PC64LE9-NEXT: bl fmod
575 ; PC64LE9-NEXT: xscpsgndp 60, 1, 1
576 ; PC64LE9-NEXT: xxswapd 1, 61
577 ; PC64LE9-NEXT: xxswapd 2, 63
578 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
579 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
580 ; PC64LE9-NEXT: bl fmod
582 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
583 ; PC64LE9-NEXT: xxmrghd 35, 60, 1
584 ; PC64LE9-NEXT: vmr 2, 30
585 ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload
586 ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload
587 ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload
588 ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload
589 ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload
590 ; PC64LE9-NEXT: addi 1, 1, 112
591 ; PC64LE9-NEXT: ld 0, 16(1)
592 ; PC64LE9-NEXT: mtlr 0
594 %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64(
597 metadata !"round.dynamic",
598 metadata !"fpexcept.strict") #1
599 ret <4 x double> %rem
602 define <1 x float> @constrained_vector_fmul_v1f32(<1 x float> %x, <1 x float> %y) #0 {
603 ; PC64LE-LABEL: constrained_vector_fmul_v1f32:
604 ; PC64LE: # %bb.0: # %entry
605 ; PC64LE-NEXT: xsmulsp 1, 1, 2
608 ; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
609 ; PC64LE9: # %bb.0: # %entry
610 ; PC64LE9-NEXT: xsmulsp 1, 1, 2
613 %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
616 metadata !"round.dynamic",
617 metadata !"fpexcept.strict") #1
621 define <2 x double> @constrained_vector_fmul_v2f64(<2 x double> %x, <2 x double> %y) #0 {
622 ; PC64LE-LABEL: constrained_vector_fmul_v2f64:
623 ; PC64LE: # %bb.0: # %entry
624 ; PC64LE-NEXT: xvmuldp 34, 34, 35
627 ; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
628 ; PC64LE9: # %bb.0: # %entry
629 ; PC64LE9-NEXT: xvmuldp 34, 34, 35
632 %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(
635 metadata !"round.dynamic",
636 metadata !"fpexcept.strict") #1
637 ret <2 x double> %mul
640 define <3 x float> @constrained_vector_fmul_v3f32(<3 x float> %x, <3 x float> %y) #0 {
641 ; PC64LE-LABEL: constrained_vector_fmul_v3f32:
642 ; PC64LE: # %bb.0: # %entry
643 ; PC64LE-NEXT: xxswapd 0, 35
644 ; PC64LE-NEXT: xxswapd 1, 34
645 ; PC64LE-NEXT: addis 3, 2, .LCPI12_0@toc@ha
646 ; PC64LE-NEXT: xscvspdpn 0, 0
647 ; PC64LE-NEXT: xscvspdpn 1, 1
648 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
649 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
650 ; PC64LE-NEXT: addi 3, 3, .LCPI12_0@toc@l
651 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
652 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
653 ; PC64LE-NEXT: xsmulsp 0, 1, 0
654 ; PC64LE-NEXT: xscvspdpn 1, 2
655 ; PC64LE-NEXT: xscvspdpn 2, 3
656 ; PC64LE-NEXT: xsmulsp 1, 2, 1
657 ; PC64LE-NEXT: xscvdpspn 0, 0
658 ; PC64LE-NEXT: xscvdpspn 1, 1
659 ; PC64LE-NEXT: xxmrghw 34, 0, 1
660 ; PC64LE-NEXT: lxvd2x 0, 0, 3
661 ; PC64LE-NEXT: xscvspdpn 1, 5
662 ; PC64LE-NEXT: xxswapd 35, 0
663 ; PC64LE-NEXT: xscvspdpn 0, 4
664 ; PC64LE-NEXT: xsmulsp 0, 1, 0
665 ; PC64LE-NEXT: xscvdpspn 36, 0
666 ; PC64LE-NEXT: vperm 2, 4, 2, 3
669 ; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
670 ; PC64LE9: # %bb.0: # %entry
671 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
672 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
673 ; PC64LE9-NEXT: addis 3, 2, .LCPI12_0@toc@ha
674 ; PC64LE9-NEXT: addi 3, 3, .LCPI12_0@toc@l
675 ; PC64LE9-NEXT: xxswapd 2, 34
676 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
677 ; PC64LE9-NEXT: xscvspdpn 0, 0
678 ; PC64LE9-NEXT: xscvspdpn 1, 1
679 ; PC64LE9-NEXT: xscvspdpn 2, 2
680 ; PC64LE9-NEXT: xscvspdpn 3, 3
681 ; PC64LE9-NEXT: xsmulsp 0, 1, 0
682 ; PC64LE9-NEXT: xxswapd 1, 35
683 ; PC64LE9-NEXT: xscvspdpn 1, 1
684 ; PC64LE9-NEXT: xsmulsp 1, 2, 1
685 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
686 ; PC64LE9-NEXT: xscvdpspn 34, 0
687 ; PC64LE9-NEXT: lxv 0, 0(3)
688 ; PC64LE9-NEXT: xscvspdpn 2, 2
689 ; PC64LE9-NEXT: xsmulsp 2, 3, 2
690 ; PC64LE9-NEXT: xscvdpspn 1, 1
691 ; PC64LE9-NEXT: xscvdpspn 2, 2
692 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
693 ; PC64LE9-NEXT: xxperm 34, 35, 0
696 %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32(
699 metadata !"round.dynamic",
700 metadata !"fpexcept.strict") #1
704 define <3 x double> @constrained_vector_fmul_v3f64(<3 x double> %x, <3 x double> %y) #0 {
705 ; PC64LE-LABEL: constrained_vector_fmul_v3f64:
706 ; PC64LE: # %bb.0: # %entry
707 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
708 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
709 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
710 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
711 ; PC64LE-NEXT: xxmrghd 0, 5, 4
712 ; PC64LE-NEXT: xxmrghd 1, 2, 1
713 ; PC64LE-NEXT: xsmuldp 3, 3, 6
714 ; PC64LE-NEXT: xvmuldp 2, 1, 0
715 ; PC64LE-NEXT: xxswapd 1, 2
716 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
717 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
720 ; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
721 ; PC64LE9: # %bb.0: # %entry
722 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
723 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
724 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
725 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
726 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
727 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
728 ; PC64LE9-NEXT: xsmuldp 3, 3, 6
729 ; PC64LE9-NEXT: xvmuldp 2, 1, 0
730 ; PC64LE9-NEXT: xxswapd 1, 2
731 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
732 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
735 %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
738 metadata !"round.dynamic",
739 metadata !"fpexcept.strict") #1
740 ret <3 x double> %mul
743 define <4 x double> @constrained_vector_fmul_v4f64(<4 x double> %x, <4 x double> %y) #0 {
744 ; PC64LE-LABEL: constrained_vector_fmul_v4f64:
745 ; PC64LE: # %bb.0: # %entry
746 ; PC64LE-NEXT: xvmuldp 35, 35, 37
747 ; PC64LE-NEXT: xvmuldp 34, 34, 36
750 ; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
751 ; PC64LE9: # %bb.0: # %entry
752 ; PC64LE9-NEXT: xvmuldp 35, 35, 37
753 ; PC64LE9-NEXT: xvmuldp 34, 34, 36
756 %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(
759 metadata !"round.dynamic",
760 metadata !"fpexcept.strict") #1
761 ret <4 x double> %mul
764 define <1 x float> @constrained_vector_fadd_v1f32(<1 x float> %x, <1 x float> %y) #0 {
765 ; PC64LE-LABEL: constrained_vector_fadd_v1f32:
766 ; PC64LE: # %bb.0: # %entry
767 ; PC64LE-NEXT: xsaddsp 1, 1, 2
770 ; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
771 ; PC64LE9: # %bb.0: # %entry
772 ; PC64LE9-NEXT: xsaddsp 1, 1, 2
775 %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
778 metadata !"round.dynamic",
779 metadata !"fpexcept.strict") #1
783 define <2 x double> @constrained_vector_fadd_v2f64(<2 x double> %x, <2 x double> %y) #0 {
784 ; PC64LE-LABEL: constrained_vector_fadd_v2f64:
785 ; PC64LE: # %bb.0: # %entry
786 ; PC64LE-NEXT: xvadddp 34, 34, 35
789 ; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
790 ; PC64LE9: # %bb.0: # %entry
791 ; PC64LE9-NEXT: xvadddp 34, 34, 35
794 %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(
797 metadata !"round.dynamic",
798 metadata !"fpexcept.strict") #1
799 ret <2 x double> %add
802 define <3 x float> @constrained_vector_fadd_v3f32(<3 x float> %x, <3 x float> %y) #0 {
803 ; PC64LE-LABEL: constrained_vector_fadd_v3f32:
804 ; PC64LE: # %bb.0: # %entry
805 ; PC64LE-NEXT: xxswapd 0, 35
806 ; PC64LE-NEXT: xxswapd 1, 34
807 ; PC64LE-NEXT: addis 3, 2, .LCPI17_0@toc@ha
808 ; PC64LE-NEXT: xscvspdpn 0, 0
809 ; PC64LE-NEXT: xscvspdpn 1, 1
810 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
811 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
812 ; PC64LE-NEXT: addi 3, 3, .LCPI17_0@toc@l
813 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
814 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
815 ; PC64LE-NEXT: xsaddsp 0, 1, 0
816 ; PC64LE-NEXT: xscvspdpn 1, 2
817 ; PC64LE-NEXT: xscvspdpn 2, 3
818 ; PC64LE-NEXT: xsaddsp 1, 2, 1
819 ; PC64LE-NEXT: xscvdpspn 0, 0
820 ; PC64LE-NEXT: xscvdpspn 1, 1
821 ; PC64LE-NEXT: xxmrghw 34, 0, 1
822 ; PC64LE-NEXT: lxvd2x 0, 0, 3
823 ; PC64LE-NEXT: xscvspdpn 1, 5
824 ; PC64LE-NEXT: xxswapd 35, 0
825 ; PC64LE-NEXT: xscvspdpn 0, 4
826 ; PC64LE-NEXT: xsaddsp 0, 1, 0
827 ; PC64LE-NEXT: xscvdpspn 36, 0
828 ; PC64LE-NEXT: vperm 2, 4, 2, 3
831 ; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
832 ; PC64LE9: # %bb.0: # %entry
833 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
834 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
835 ; PC64LE9-NEXT: addis 3, 2, .LCPI17_0@toc@ha
836 ; PC64LE9-NEXT: addi 3, 3, .LCPI17_0@toc@l
837 ; PC64LE9-NEXT: xxswapd 2, 34
838 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
839 ; PC64LE9-NEXT: xscvspdpn 0, 0
840 ; PC64LE9-NEXT: xscvspdpn 1, 1
841 ; PC64LE9-NEXT: xscvspdpn 2, 2
842 ; PC64LE9-NEXT: xscvspdpn 3, 3
843 ; PC64LE9-NEXT: xsaddsp 0, 1, 0
844 ; PC64LE9-NEXT: xxswapd 1, 35
845 ; PC64LE9-NEXT: xscvspdpn 1, 1
846 ; PC64LE9-NEXT: xsaddsp 1, 2, 1
847 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
848 ; PC64LE9-NEXT: xscvdpspn 34, 0
849 ; PC64LE9-NEXT: lxv 0, 0(3)
850 ; PC64LE9-NEXT: xscvspdpn 2, 2
851 ; PC64LE9-NEXT: xsaddsp 2, 3, 2
852 ; PC64LE9-NEXT: xscvdpspn 1, 1
853 ; PC64LE9-NEXT: xscvdpspn 2, 2
854 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
855 ; PC64LE9-NEXT: xxperm 34, 35, 0
858 %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32(
861 metadata !"round.dynamic",
862 metadata !"fpexcept.strict") #1
866 define <3 x double> @constrained_vector_fadd_v3f64(<3 x double> %x, <3 x double> %y) #0 {
867 ; PC64LE-LABEL: constrained_vector_fadd_v3f64:
868 ; PC64LE: # %bb.0: # %entry
869 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
870 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
871 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
872 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
873 ; PC64LE-NEXT: xxmrghd 0, 5, 4
874 ; PC64LE-NEXT: xxmrghd 1, 2, 1
875 ; PC64LE-NEXT: xsadddp 3, 3, 6
876 ; PC64LE-NEXT: xvadddp 2, 1, 0
877 ; PC64LE-NEXT: xxswapd 1, 2
878 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
879 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
882 ; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
883 ; PC64LE9: # %bb.0: # %entry
884 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
885 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
886 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
887 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
888 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
889 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
890 ; PC64LE9-NEXT: xsadddp 3, 3, 6
891 ; PC64LE9-NEXT: xvadddp 2, 1, 0
892 ; PC64LE9-NEXT: xxswapd 1, 2
893 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
894 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
897 %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
900 metadata !"round.dynamic",
901 metadata !"fpexcept.strict") #1
902 ret <3 x double> %add
905 define <4 x double> @constrained_vector_fadd_v4f64(<4 x double> %x, <4 x double> %y) #0 {
906 ; PC64LE-LABEL: constrained_vector_fadd_v4f64:
907 ; PC64LE: # %bb.0: # %entry
908 ; PC64LE-NEXT: xvadddp 35, 35, 37
909 ; PC64LE-NEXT: xvadddp 34, 34, 36
912 ; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
913 ; PC64LE9: # %bb.0: # %entry
914 ; PC64LE9-NEXT: xvadddp 35, 35, 37
915 ; PC64LE9-NEXT: xvadddp 34, 34, 36
918 %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64(
921 metadata !"round.dynamic",
922 metadata !"fpexcept.strict") #1
923 ret <4 x double> %add
926 define <1 x float> @constrained_vector_fsub_v1f32(<1 x float> %x, <1 x float> %y) #0 {
927 ; PC64LE-LABEL: constrained_vector_fsub_v1f32:
928 ; PC64LE: # %bb.0: # %entry
929 ; PC64LE-NEXT: xssubsp 1, 1, 2
932 ; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
933 ; PC64LE9: # %bb.0: # %entry
934 ; PC64LE9-NEXT: xssubsp 1, 1, 2
937 %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
940 metadata !"round.dynamic",
941 metadata !"fpexcept.strict") #1
945 define <2 x double> @constrained_vector_fsub_v2f64(<2 x double> %x, <2 x double> %y) #0 {
946 ; PC64LE-LABEL: constrained_vector_fsub_v2f64:
947 ; PC64LE: # %bb.0: # %entry
948 ; PC64LE-NEXT: xvsubdp 34, 34, 35
951 ; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
952 ; PC64LE9: # %bb.0: # %entry
953 ; PC64LE9-NEXT: xvsubdp 34, 34, 35
956 %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(
959 metadata !"round.dynamic",
960 metadata !"fpexcept.strict") #1
961 ret <2 x double> %sub
964 define <3 x float> @constrained_vector_fsub_v3f32(<3 x float> %x, <3 x float> %y) #0 {
965 ; PC64LE-LABEL: constrained_vector_fsub_v3f32:
966 ; PC64LE: # %bb.0: # %entry
967 ; PC64LE-NEXT: xxswapd 0, 35
968 ; PC64LE-NEXT: xxswapd 1, 34
969 ; PC64LE-NEXT: addis 3, 2, .LCPI22_0@toc@ha
970 ; PC64LE-NEXT: xscvspdpn 0, 0
971 ; PC64LE-NEXT: xscvspdpn 1, 1
972 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 3
973 ; PC64LE-NEXT: xxsldwi 3, 34, 34, 3
974 ; PC64LE-NEXT: addi 3, 3, .LCPI22_0@toc@l
975 ; PC64LE-NEXT: xxsldwi 5, 34, 34, 1
976 ; PC64LE-NEXT: xxsldwi 4, 35, 35, 1
977 ; PC64LE-NEXT: xssubsp 0, 1, 0
978 ; PC64LE-NEXT: xscvspdpn 1, 2
979 ; PC64LE-NEXT: xscvspdpn 2, 3
980 ; PC64LE-NEXT: xssubsp 1, 2, 1
981 ; PC64LE-NEXT: xscvdpspn 0, 0
982 ; PC64LE-NEXT: xscvdpspn 1, 1
983 ; PC64LE-NEXT: xxmrghw 34, 0, 1
984 ; PC64LE-NEXT: lxvd2x 0, 0, 3
985 ; PC64LE-NEXT: xscvspdpn 1, 5
986 ; PC64LE-NEXT: xxswapd 35, 0
987 ; PC64LE-NEXT: xscvspdpn 0, 4
988 ; PC64LE-NEXT: xssubsp 0, 1, 0
989 ; PC64LE-NEXT: xscvdpspn 36, 0
990 ; PC64LE-NEXT: vperm 2, 4, 2, 3
993 ; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
994 ; PC64LE9: # %bb.0: # %entry
995 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
996 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
997 ; PC64LE9-NEXT: addis 3, 2, .LCPI22_0@toc@ha
998 ; PC64LE9-NEXT: addi 3, 3, .LCPI22_0@toc@l
999 ; PC64LE9-NEXT: xxswapd 2, 34
1000 ; PC64LE9-NEXT: xxsldwi 3, 34, 34, 3
1001 ; PC64LE9-NEXT: xscvspdpn 0, 0
1002 ; PC64LE9-NEXT: xscvspdpn 1, 1
1003 ; PC64LE9-NEXT: xscvspdpn 2, 2
1004 ; PC64LE9-NEXT: xscvspdpn 3, 3
1005 ; PC64LE9-NEXT: xssubsp 0, 1, 0
1006 ; PC64LE9-NEXT: xxswapd 1, 35
1007 ; PC64LE9-NEXT: xscvspdpn 1, 1
1008 ; PC64LE9-NEXT: xssubsp 1, 2, 1
1009 ; PC64LE9-NEXT: xxsldwi 2, 35, 35, 3
1010 ; PC64LE9-NEXT: xscvdpspn 34, 0
1011 ; PC64LE9-NEXT: lxv 0, 0(3)
1012 ; PC64LE9-NEXT: xscvspdpn 2, 2
1013 ; PC64LE9-NEXT: xssubsp 2, 3, 2
1014 ; PC64LE9-NEXT: xscvdpspn 1, 1
1015 ; PC64LE9-NEXT: xscvdpspn 2, 2
1016 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
1017 ; PC64LE9-NEXT: xxperm 34, 35, 0
1020 %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(
1023 metadata !"round.dynamic",
1024 metadata !"fpexcept.strict") #1
1025 ret <3 x float> %sub
1028 define <3 x double> @constrained_vector_fsub_v3f64(<3 x double> %x, <3 x double> %y) #0 {
1029 ; PC64LE-LABEL: constrained_vector_fsub_v3f64:
1030 ; PC64LE: # %bb.0: # %entry
1031 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
1032 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
1033 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
1034 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1035 ; PC64LE-NEXT: xxmrghd 0, 5, 4
1036 ; PC64LE-NEXT: xxmrghd 1, 2, 1
1037 ; PC64LE-NEXT: xssubdp 3, 3, 6
1038 ; PC64LE-NEXT: xvsubdp 2, 1, 0
1039 ; PC64LE-NEXT: xxswapd 1, 2
1040 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1041 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1044 ; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
1045 ; PC64LE9: # %bb.0: # %entry
1046 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
1047 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
1048 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
1049 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1050 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
1051 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
1052 ; PC64LE9-NEXT: xssubdp 3, 3, 6
1053 ; PC64LE9-NEXT: xvsubdp 2, 1, 0
1054 ; PC64LE9-NEXT: xxswapd 1, 2
1055 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1056 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1059 %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
1062 metadata !"round.dynamic",
1063 metadata !"fpexcept.strict") #1
1064 ret <3 x double> %sub
1067 define <4 x double> @constrained_vector_fsub_v4f64(<4 x double> %x, <4 x double> %y) #0 {
1068 ; PC64LE-LABEL: constrained_vector_fsub_v4f64:
1069 ; PC64LE: # %bb.0: # %entry
1070 ; PC64LE-NEXT: xvsubdp 35, 35, 37
1071 ; PC64LE-NEXT: xvsubdp 34, 34, 36
1074 ; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
1075 ; PC64LE9: # %bb.0: # %entry
1076 ; PC64LE9-NEXT: xvsubdp 35, 35, 37
1077 ; PC64LE9-NEXT: xvsubdp 34, 34, 36
1080 %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(
1083 metadata !"round.dynamic",
1084 metadata !"fpexcept.strict") #1
1085 ret <4 x double> %sub
1088 define <1 x float> @constrained_vector_sqrt_v1f32(<1 x float> %x) #0 {
1089 ; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
1090 ; PC64LE: # %bb.0: # %entry
1091 ; PC64LE-NEXT: xssqrtsp 1, 1
1094 ; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
1095 ; PC64LE9: # %bb.0: # %entry
1096 ; PC64LE9-NEXT: xssqrtsp 1, 1
1099 %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
1101 metadata !"round.dynamic",
1102 metadata !"fpexcept.strict") #1
1103 ret <1 x float> %sqrt
1106 define <2 x double> @constrained_vector_sqrt_v2f64(<2 x double> %x) #0 {
1107 ; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
1108 ; PC64LE: # %bb.0: # %entry
1109 ; PC64LE-NEXT: xvsqrtdp 34, 34
1112 ; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
1113 ; PC64LE9: # %bb.0: # %entry
1114 ; PC64LE9-NEXT: xvsqrtdp 34, 34
1117 %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
1119 metadata !"round.dynamic",
1120 metadata !"fpexcept.strict") #1
1121 ret <2 x double> %sqrt
1124 define <3 x float> @constrained_vector_sqrt_v3f32(<3 x float> %x) #0 {
1125 ; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
1126 ; PC64LE: # %bb.0: # %entry
1127 ; PC64LE-NEXT: xxswapd 0, 34
1128 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
1129 ; PC64LE-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1130 ; PC64LE-NEXT: xscvspdpn 0, 0
1131 ; PC64LE-NEXT: xscvspdpn 1, 1
1132 ; PC64LE-NEXT: addi 3, 3, .LCPI27_0@toc@l
1133 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
1134 ; PC64LE-NEXT: xssqrtsp 0, 0
1135 ; PC64LE-NEXT: xssqrtsp 1, 1
1136 ; PC64LE-NEXT: xscvdpspn 1, 1
1137 ; PC64LE-NEXT: xscvdpspn 0, 0
1138 ; PC64LE-NEXT: xxmrghw 34, 0, 1
1139 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1140 ; PC64LE-NEXT: xxswapd 35, 0
1141 ; PC64LE-NEXT: xscvspdpn 0, 2
1142 ; PC64LE-NEXT: xssqrtsp 0, 0
1143 ; PC64LE-NEXT: xscvdpspn 36, 0
1144 ; PC64LE-NEXT: vperm 2, 4, 2, 3
1147 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
1148 ; PC64LE9: # %bb.0: # %entry
1149 ; PC64LE9-NEXT: xxswapd 1, 34
1150 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
1151 ; PC64LE9-NEXT: addis 3, 2, .LCPI27_0@toc@ha
1152 ; PC64LE9-NEXT: addi 3, 3, .LCPI27_0@toc@l
1153 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1154 ; PC64LE9-NEXT: xscvspdpn 1, 1
1155 ; PC64LE9-NEXT: xscvspdpn 2, 2
1156 ; PC64LE9-NEXT: xscvspdpn 0, 0
1157 ; PC64LE9-NEXT: xssqrtsp 1, 1
1158 ; PC64LE9-NEXT: xssqrtsp 2, 2
1159 ; PC64LE9-NEXT: xssqrtsp 0, 0
1160 ; PC64LE9-NEXT: xscvdpspn 2, 2
1161 ; PC64LE9-NEXT: xscvdpspn 1, 1
1162 ; PC64LE9-NEXT: xscvdpspn 34, 0
1163 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
1164 ; PC64LE9-NEXT: lxv 1, 0(3)
1165 ; PC64LE9-NEXT: xxperm 34, 35, 1
1168 %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
1170 metadata !"round.dynamic",
1171 metadata !"fpexcept.strict") #1
1172 ret <3 x float> %sqrt
1175 define <3 x double> @constrained_vector_sqrt_v3f64(<3 x double> %x) #0 {
1176 ; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
1177 ; PC64LE: # %bb.0: # %entry
1178 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
1179 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1180 ; PC64LE-NEXT: xxmrghd 0, 2, 1
1181 ; PC64LE-NEXT: xssqrtdp 3, 3
1182 ; PC64LE-NEXT: xvsqrtdp 2, 0
1183 ; PC64LE-NEXT: xxswapd 1, 2
1184 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1185 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1188 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
1189 ; PC64LE9: # %bb.0: # %entry
1190 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
1191 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1192 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
1193 ; PC64LE9-NEXT: xssqrtdp 3, 3
1194 ; PC64LE9-NEXT: xvsqrtdp 2, 0
1195 ; PC64LE9-NEXT: xxswapd 1, 2
1196 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1197 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1200 %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
1202 metadata !"round.dynamic",
1203 metadata !"fpexcept.strict") #1
1204 ret <3 x double> %sqrt
1207 define <4 x double> @constrained_vector_sqrt_v4f64(<4 x double> %x) #0 {
1208 ; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
1209 ; PC64LE: # %bb.0: # %entry
1210 ; PC64LE-NEXT: xvsqrtdp 35, 35
1211 ; PC64LE-NEXT: xvsqrtdp 34, 34
1214 ; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
1215 ; PC64LE9: # %bb.0: # %entry
1216 ; PC64LE9-NEXT: xvsqrtdp 35, 35
1217 ; PC64LE9-NEXT: xvsqrtdp 34, 34
1220 %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(
1222 metadata !"round.dynamic",
1223 metadata !"fpexcept.strict") #1
1224 ret <4 x double> %sqrt
1227 define <1 x float> @constrained_vector_pow_v1f32(<1 x float> %x, <1 x float> %y) #0 {
1228 ; PC64LE-LABEL: constrained_vector_pow_v1f32:
1229 ; PC64LE: # %bb.0: # %entry
1230 ; PC64LE-NEXT: mflr 0
1231 ; PC64LE-NEXT: stdu 1, -32(1)
1232 ; PC64LE-NEXT: std 0, 48(1)
1233 ; PC64LE-NEXT: bl powf
1235 ; PC64LE-NEXT: addi 1, 1, 32
1236 ; PC64LE-NEXT: ld 0, 16(1)
1237 ; PC64LE-NEXT: mtlr 0
1240 ; PC64LE9-LABEL: constrained_vector_pow_v1f32:
1241 ; PC64LE9: # %bb.0: # %entry
1242 ; PC64LE9-NEXT: mflr 0
1243 ; PC64LE9-NEXT: stdu 1, -32(1)
1244 ; PC64LE9-NEXT: std 0, 48(1)
1245 ; PC64LE9-NEXT: bl powf
1247 ; PC64LE9-NEXT: addi 1, 1, 32
1248 ; PC64LE9-NEXT: ld 0, 16(1)
1249 ; PC64LE9-NEXT: mtlr 0
1252 %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
1255 metadata !"round.dynamic",
1256 metadata !"fpexcept.strict") #1
1257 ret <1 x float> %pow
1260 define <2 x double> @constrained_vector_pow_v2f64(<2 x double> %x, <2 x double> %y) #0 {
1261 ; PC64LE-LABEL: constrained_vector_pow_v2f64:
1262 ; PC64LE: # %bb.0: # %entry
1263 ; PC64LE-NEXT: mflr 0
1264 ; PC64LE-NEXT: stdu 1, -96(1)
1265 ; PC64LE-NEXT: li 3, 48
1266 ; PC64LE-NEXT: std 0, 112(1)
1267 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1268 ; PC64LE-NEXT: li 3, 64
1269 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1270 ; PC64LE-NEXT: li 3, 80
1271 ; PC64LE-NEXT: vmr 30, 2
1272 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1273 ; PC64LE-NEXT: vmr 31, 3
1274 ; PC64LE-NEXT: xxlor 1, 62, 62
1275 ; PC64LE-NEXT: xxlor 2, 63, 63
1276 ; PC64LE-NEXT: bl pow
1278 ; PC64LE-NEXT: xxlor 61, 1, 1
1279 ; PC64LE-NEXT: xxswapd 1, 62
1280 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1281 ; PC64LE-NEXT: xxswapd 2, 63
1282 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1283 ; PC64LE-NEXT: bl pow
1285 ; PC64LE-NEXT: li 3, 80
1286 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1287 ; PC64LE-NEXT: xxmrghd 34, 61, 1
1288 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1289 ; PC64LE-NEXT: li 3, 64
1290 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1291 ; PC64LE-NEXT: li 3, 48
1292 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
1293 ; PC64LE-NEXT: addi 1, 1, 96
1294 ; PC64LE-NEXT: ld 0, 16(1)
1295 ; PC64LE-NEXT: mtlr 0
1298 ; PC64LE9-LABEL: constrained_vector_pow_v2f64:
1299 ; PC64LE9: # %bb.0: # %entry
1300 ; PC64LE9-NEXT: mflr 0
1301 ; PC64LE9-NEXT: stdu 1, -80(1)
1302 ; PC64LE9-NEXT: std 0, 96(1)
1303 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
1304 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
1305 ; PC64LE9-NEXT: vmr 31, 3
1306 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1307 ; PC64LE9-NEXT: vmr 30, 2
1308 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
1309 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
1310 ; PC64LE9-NEXT: bl pow
1312 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
1313 ; PC64LE9-NEXT: xxswapd 1, 62
1314 ; PC64LE9-NEXT: xxswapd 2, 63
1315 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1316 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1317 ; PC64LE9-NEXT: bl pow
1319 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1320 ; PC64LE9-NEXT: xxmrghd 34, 61, 1
1321 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
1322 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
1323 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
1324 ; PC64LE9-NEXT: addi 1, 1, 80
1325 ; PC64LE9-NEXT: ld 0, 16(1)
1326 ; PC64LE9-NEXT: mtlr 0
1329 %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64(
1332 metadata !"round.dynamic",
1333 metadata !"fpexcept.strict") #1
1334 ret <2 x double> %pow
1337 define <3 x float> @constrained_vector_pow_v3f32(<3 x float> %x, <3 x float> %y) #0 {
1338 ; PC64LE-LABEL: constrained_vector_pow_v3f32:
1339 ; PC64LE: # %bb.0: # %entry
1340 ; PC64LE-NEXT: mflr 0
1341 ; PC64LE-NEXT: stdu 1, -96(1)
1342 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
1343 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
1344 ; PC64LE-NEXT: li 3, 48
1345 ; PC64LE-NEXT: std 0, 112(1)
1346 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1347 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1348 ; PC64LE-NEXT: xscvspdpn 1, 0
1349 ; PC64LE-NEXT: xscvspdpn 2, 2
1350 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1351 ; PC64LE-NEXT: li 3, 64
1352 ; PC64LE-NEXT: vmr 30, 2
1353 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1354 ; PC64LE-NEXT: vmr 31, 3
1355 ; PC64LE-NEXT: bl powf
1357 ; PC64LE-NEXT: xxswapd 0, 62
1358 ; PC64LE-NEXT: xxswapd 2, 63
1359 ; PC64LE-NEXT: fmr 31, 1
1360 ; PC64LE-NEXT: xscvspdpn 1, 0
1361 ; PC64LE-NEXT: xscvspdpn 2, 2
1362 ; PC64LE-NEXT: bl powf
1364 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
1365 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
1366 ; PC64LE-NEXT: fmr 30, 1
1367 ; PC64LE-NEXT: xscvspdpn 1, 0
1368 ; PC64LE-NEXT: xscvspdpn 2, 2
1369 ; PC64LE-NEXT: bl powf
1371 ; PC64LE-NEXT: xscvdpspn 0, 1
1372 ; PC64LE-NEXT: xscvdpspn 1, 30
1373 ; PC64LE-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1374 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1375 ; PC64LE-NEXT: xscvdpspn 36, 31
1376 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1377 ; PC64LE-NEXT: addi 3, 3, .LCPI32_0@toc@l
1378 ; PC64LE-NEXT: xxmrghw 34, 1, 0
1379 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1380 ; PC64LE-NEXT: li 3, 64
1381 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1382 ; PC64LE-NEXT: li 3, 48
1383 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1384 ; PC64LE-NEXT: xxswapd 35, 0
1385 ; PC64LE-NEXT: vperm 2, 4, 2, 3
1386 ; PC64LE-NEXT: addi 1, 1, 96
1387 ; PC64LE-NEXT: ld 0, 16(1)
1388 ; PC64LE-NEXT: mtlr 0
1391 ; PC64LE9-LABEL: constrained_vector_pow_v3f32:
1392 ; PC64LE9: # %bb.0: # %entry
1393 ; PC64LE9-NEXT: mflr 0
1394 ; PC64LE9-NEXT: stdu 1, -80(1)
1395 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1396 ; PC64LE9-NEXT: std 0, 96(1)
1397 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1398 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
1399 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1400 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1401 ; PC64LE9-NEXT: xscvspdpn 1, 0
1402 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
1403 ; PC64LE9-NEXT: vmr 31, 3
1404 ; PC64LE9-NEXT: vmr 30, 2
1405 ; PC64LE9-NEXT: xscvspdpn 2, 0
1406 ; PC64LE9-NEXT: bl powf
1408 ; PC64LE9-NEXT: xxswapd 0, 62
1409 ; PC64LE9-NEXT: fmr 31, 1
1410 ; PC64LE9-NEXT: xscvspdpn 1, 0
1411 ; PC64LE9-NEXT: xxswapd 0, 63
1412 ; PC64LE9-NEXT: xscvspdpn 2, 0
1413 ; PC64LE9-NEXT: bl powf
1415 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
1416 ; PC64LE9-NEXT: fmr 30, 1
1417 ; PC64LE9-NEXT: xscvspdpn 1, 0
1418 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
1419 ; PC64LE9-NEXT: xscvspdpn 2, 0
1420 ; PC64LE9-NEXT: bl powf
1422 ; PC64LE9-NEXT: xscvdpspn 0, 1
1423 ; PC64LE9-NEXT: xscvdpspn 1, 30
1424 ; PC64LE9-NEXT: addis 3, 2, .LCPI32_0@toc@ha
1425 ; PC64LE9-NEXT: xscvdpspn 34, 31
1426 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1427 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
1428 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1429 ; PC64LE9-NEXT: addi 3, 3, .LCPI32_0@toc@l
1430 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1431 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
1432 ; PC64LE9-NEXT: lxv 0, 0(3)
1433 ; PC64LE9-NEXT: xxperm 34, 35, 0
1434 ; PC64LE9-NEXT: addi 1, 1, 80
1435 ; PC64LE9-NEXT: ld 0, 16(1)
1436 ; PC64LE9-NEXT: mtlr 0
1439 %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32(
1442 metadata !"round.dynamic",
1443 metadata !"fpexcept.strict") #1
1444 ret <3 x float> %pow
1447 define <3 x double> @constrained_vector_pow_v3f64(<3 x double> %x, <3 x double> %y) #0 {
1448 ; PC64LE-LABEL: constrained_vector_pow_v3f64:
1449 ; PC64LE: # %bb.0: # %entry
1450 ; PC64LE-NEXT: mflr 0
1451 ; PC64LE-NEXT: stdu 1, -96(1)
1452 ; PC64LE-NEXT: std 0, 112(1)
1453 ; PC64LE-NEXT: stfd 28, 64(1) # 8-byte Folded Spill
1454 ; PC64LE-NEXT: fmr 28, 2
1455 ; PC64LE-NEXT: fmr 2, 4
1456 ; PC64LE-NEXT: li 3, 48
1457 ; PC64LE-NEXT: stfd 29, 72(1) # 8-byte Folded Spill
1458 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1459 ; PC64LE-NEXT: fmr 30, 5
1460 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1461 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1462 ; PC64LE-NEXT: fmr 31, 6
1463 ; PC64LE-NEXT: fmr 29, 3
1464 ; PC64LE-NEXT: bl pow
1466 ; PC64LE-NEXT: xxlor 63, 1, 1
1467 ; PC64LE-NEXT: fmr 1, 28
1468 ; PC64LE-NEXT: fmr 2, 30
1469 ; PC64LE-NEXT: bl pow
1471 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1472 ; PC64LE-NEXT: xxmrghd 63, 1, 63
1473 ; PC64LE-NEXT: fmr 1, 29
1474 ; PC64LE-NEXT: fmr 2, 31
1475 ; PC64LE-NEXT: bl pow
1477 ; PC64LE-NEXT: li 3, 48
1478 ; PC64LE-NEXT: fmr 3, 1
1479 ; PC64LE-NEXT: xxswapd 1, 63
1480 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1481 ; PC64LE-NEXT: xxlor 2, 63, 63
1482 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1483 ; PC64LE-NEXT: lfd 29, 72(1) # 8-byte Folded Reload
1484 ; PC64LE-NEXT: lfd 28, 64(1) # 8-byte Folded Reload
1485 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1486 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1487 ; PC64LE-NEXT: addi 1, 1, 96
1488 ; PC64LE-NEXT: ld 0, 16(1)
1489 ; PC64LE-NEXT: mtlr 0
1492 ; PC64LE9-LABEL: constrained_vector_pow_v3f64:
1493 ; PC64LE9: # %bb.0: # %entry
1494 ; PC64LE9-NEXT: mflr 0
1495 ; PC64LE9-NEXT: stdu 1, -80(1)
1496 ; PC64LE9-NEXT: std 0, 96(1)
1497 ; PC64LE9-NEXT: stfd 28, 48(1) # 8-byte Folded Spill
1498 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1499 ; PC64LE9-NEXT: fmr 28, 2
1500 ; PC64LE9-NEXT: fmr 2, 4
1501 ; PC64LE9-NEXT: stfd 29, 56(1) # 8-byte Folded Spill
1502 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1503 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1504 ; PC64LE9-NEXT: fmr 31, 6
1505 ; PC64LE9-NEXT: fmr 30, 5
1506 ; PC64LE9-NEXT: fmr 29, 3
1507 ; PC64LE9-NEXT: bl pow
1509 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
1510 ; PC64LE9-NEXT: fmr 1, 28
1511 ; PC64LE9-NEXT: fmr 2, 30
1512 ; PC64LE9-NEXT: bl pow
1514 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1515 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
1516 ; PC64LE9-NEXT: fmr 1, 29
1517 ; PC64LE9-NEXT: fmr 2, 31
1518 ; PC64LE9-NEXT: bl pow
1520 ; PC64LE9-NEXT: fmr 3, 1
1521 ; PC64LE9-NEXT: xxswapd 1, 63
1522 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1523 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1524 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1525 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1526 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1527 ; PC64LE9-NEXT: lfd 29, 56(1) # 8-byte Folded Reload
1528 ; PC64LE9-NEXT: lfd 28, 48(1) # 8-byte Folded Reload
1529 ; PC64LE9-NEXT: addi 1, 1, 80
1530 ; PC64LE9-NEXT: ld 0, 16(1)
1531 ; PC64LE9-NEXT: mtlr 0
1534 %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
1537 metadata !"round.dynamic",
1538 metadata !"fpexcept.strict") #1
1539 ret <3 x double> %pow
1542 define <4 x double> @constrained_vector_pow_v4f64(<4 x double> %x, <4 x double> %y) #0 {
1543 ; PC64LE-LABEL: constrained_vector_pow_v4f64:
1544 ; PC64LE: # %bb.0: # %entry
1545 ; PC64LE-NEXT: mflr 0
1546 ; PC64LE-NEXT: stdu 1, -128(1)
1547 ; PC64LE-NEXT: li 3, 48
1548 ; PC64LE-NEXT: std 0, 144(1)
1549 ; PC64LE-NEXT: stxvd2x 59, 1, 3 # 16-byte Folded Spill
1550 ; PC64LE-NEXT: li 3, 64
1551 ; PC64LE-NEXT: stxvd2x 60, 1, 3 # 16-byte Folded Spill
1552 ; PC64LE-NEXT: li 3, 80
1553 ; PC64LE-NEXT: vmr 28, 2
1554 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1555 ; PC64LE-NEXT: li 3, 96
1556 ; PC64LE-NEXT: xxlor 1, 60, 60
1557 ; PC64LE-NEXT: vmr 29, 3
1558 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1559 ; PC64LE-NEXT: vmr 30, 4
1560 ; PC64LE-NEXT: li 3, 112
1561 ; PC64LE-NEXT: xxlor 2, 62, 62
1562 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1563 ; PC64LE-NEXT: vmr 31, 5
1564 ; PC64LE-NEXT: bl pow
1566 ; PC64LE-NEXT: xxlor 59, 1, 1
1567 ; PC64LE-NEXT: xxswapd 1, 60
1568 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1569 ; PC64LE-NEXT: xxswapd 2, 62
1570 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1571 ; PC64LE-NEXT: bl pow
1573 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1574 ; PC64LE-NEXT: xxmrghd 62, 59, 1
1575 ; PC64LE-NEXT: xxlor 1, 61, 61
1576 ; PC64LE-NEXT: xxlor 2, 63, 63
1577 ; PC64LE-NEXT: bl pow
1579 ; PC64LE-NEXT: xxlor 60, 1, 1
1580 ; PC64LE-NEXT: xxswapd 1, 61
1581 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1582 ; PC64LE-NEXT: xxswapd 2, 63
1583 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1584 ; PC64LE-NEXT: bl pow
1586 ; PC64LE-NEXT: li 3, 112
1587 ; PC64LE-NEXT: vmr 2, 30
1588 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1589 ; PC64LE-NEXT: xxmrghd 35, 60, 1
1590 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1591 ; PC64LE-NEXT: li 3, 96
1592 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1593 ; PC64LE-NEXT: li 3, 80
1594 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
1595 ; PC64LE-NEXT: li 3, 64
1596 ; PC64LE-NEXT: lxvd2x 60, 1, 3 # 16-byte Folded Reload
1597 ; PC64LE-NEXT: li 3, 48
1598 ; PC64LE-NEXT: lxvd2x 59, 1, 3 # 16-byte Folded Reload
1599 ; PC64LE-NEXT: addi 1, 1, 128
1600 ; PC64LE-NEXT: ld 0, 16(1)
1601 ; PC64LE-NEXT: mtlr 0
1604 ; PC64LE9-LABEL: constrained_vector_pow_v4f64:
1605 ; PC64LE9: # %bb.0: # %entry
1606 ; PC64LE9-NEXT: mflr 0
1607 ; PC64LE9-NEXT: stdu 1, -112(1)
1608 ; PC64LE9-NEXT: std 0, 128(1)
1609 ; PC64LE9-NEXT: stxv 60, 48(1) # 16-byte Folded Spill
1610 ; PC64LE9-NEXT: stxv 62, 80(1) # 16-byte Folded Spill
1611 ; PC64LE9-NEXT: vmr 30, 4
1612 ; PC64LE9-NEXT: xscpsgndp 2, 62, 62
1613 ; PC64LE9-NEXT: vmr 28, 2
1614 ; PC64LE9-NEXT: xscpsgndp 1, 60, 60
1615 ; PC64LE9-NEXT: stxv 59, 32(1) # 16-byte Folded Spill
1616 ; PC64LE9-NEXT: stxv 61, 64(1) # 16-byte Folded Spill
1617 ; PC64LE9-NEXT: stxv 63, 96(1) # 16-byte Folded Spill
1618 ; PC64LE9-NEXT: vmr 31, 5
1619 ; PC64LE9-NEXT: vmr 29, 3
1620 ; PC64LE9-NEXT: bl pow
1622 ; PC64LE9-NEXT: xscpsgndp 59, 1, 1
1623 ; PC64LE9-NEXT: xxswapd 1, 60
1624 ; PC64LE9-NEXT: xxswapd 2, 62
1625 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1626 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1627 ; PC64LE9-NEXT: bl pow
1629 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1630 ; PC64LE9-NEXT: xxmrghd 62, 59, 1
1631 ; PC64LE9-NEXT: xscpsgndp 1, 61, 61
1632 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1633 ; PC64LE9-NEXT: bl pow
1635 ; PC64LE9-NEXT: xscpsgndp 60, 1, 1
1636 ; PC64LE9-NEXT: xxswapd 1, 61
1637 ; PC64LE9-NEXT: xxswapd 2, 63
1638 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1639 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
1640 ; PC64LE9-NEXT: bl pow
1642 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1643 ; PC64LE9-NEXT: xxmrghd 35, 60, 1
1644 ; PC64LE9-NEXT: vmr 2, 30
1645 ; PC64LE9-NEXT: lxv 63, 96(1) # 16-byte Folded Reload
1646 ; PC64LE9-NEXT: lxv 62, 80(1) # 16-byte Folded Reload
1647 ; PC64LE9-NEXT: lxv 61, 64(1) # 16-byte Folded Reload
1648 ; PC64LE9-NEXT: lxv 60, 48(1) # 16-byte Folded Reload
1649 ; PC64LE9-NEXT: lxv 59, 32(1) # 16-byte Folded Reload
1650 ; PC64LE9-NEXT: addi 1, 1, 112
1651 ; PC64LE9-NEXT: ld 0, 16(1)
1652 ; PC64LE9-NEXT: mtlr 0
1655 %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64(
1658 metadata !"round.dynamic",
1659 metadata !"fpexcept.strict") #1
1660 ret <4 x double> %pow
1663 define <1 x float> @constrained_vector_powi_v1f32(<1 x float> %x, i32 %y) #0 {
1664 ; PC64LE-LABEL: constrained_vector_powi_v1f32:
1665 ; PC64LE: # %bb.0: # %entry
1666 ; PC64LE-NEXT: mflr 0
1667 ; PC64LE-NEXT: stdu 1, -32(1)
1668 ; PC64LE-NEXT: clrldi 4, 4, 32
1669 ; PC64LE-NEXT: std 0, 48(1)
1670 ; PC64LE-NEXT: bl __powisf2
1672 ; PC64LE-NEXT: addi 1, 1, 32
1673 ; PC64LE-NEXT: ld 0, 16(1)
1674 ; PC64LE-NEXT: mtlr 0
1677 ; PC64LE9-LABEL: constrained_vector_powi_v1f32:
1678 ; PC64LE9: # %bb.0: # %entry
1679 ; PC64LE9-NEXT: mflr 0
1680 ; PC64LE9-NEXT: stdu 1, -32(1)
1681 ; PC64LE9-NEXT: clrldi 4, 4, 32
1682 ; PC64LE9-NEXT: std 0, 48(1)
1683 ; PC64LE9-NEXT: bl __powisf2
1685 ; PC64LE9-NEXT: addi 1, 1, 32
1686 ; PC64LE9-NEXT: ld 0, 16(1)
1687 ; PC64LE9-NEXT: mtlr 0
1690 %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
1693 metadata !"round.dynamic",
1694 metadata !"fpexcept.strict") #1
1695 ret <1 x float> %powi
1698 define <2 x double> @constrained_vector_powi_v2f64(<2 x double> %x, i32 %y) #0 {
1699 ; PC64LE-LABEL: constrained_vector_powi_v2f64:
1700 ; PC64LE: # %bb.0: # %entry
1701 ; PC64LE-NEXT: mflr 0
1702 ; PC64LE-NEXT: stdu 1, -96(1)
1703 ; PC64LE-NEXT: li 3, 48
1704 ; PC64LE-NEXT: std 0, 112(1)
1705 ; PC64LE-NEXT: std 30, 80(1) # 8-byte Folded Spill
1706 ; PC64LE-NEXT: clrldi 30, 5, 32
1707 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1708 ; PC64LE-NEXT: li 3, 64
1709 ; PC64LE-NEXT: mr 4, 30
1710 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1711 ; PC64LE-NEXT: vmr 31, 2
1712 ; PC64LE-NEXT: xxlor 1, 63, 63
1713 ; PC64LE-NEXT: bl __powidf2
1715 ; PC64LE-NEXT: mr 4, 30
1716 ; PC64LE-NEXT: xxlor 62, 1, 1
1717 ; PC64LE-NEXT: xxswapd 1, 63
1718 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1719 ; PC64LE-NEXT: bl __powidf2
1721 ; PC64LE-NEXT: li 3, 64
1722 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1723 ; PC64LE-NEXT: xxmrghd 34, 62, 1
1724 ; PC64LE-NEXT: ld 30, 80(1) # 8-byte Folded Reload
1725 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1726 ; PC64LE-NEXT: li 3, 48
1727 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
1728 ; PC64LE-NEXT: addi 1, 1, 96
1729 ; PC64LE-NEXT: ld 0, 16(1)
1730 ; PC64LE-NEXT: mtlr 0
1733 ; PC64LE9-LABEL: constrained_vector_powi_v2f64:
1734 ; PC64LE9: # %bb.0: # %entry
1735 ; PC64LE9-NEXT: mflr 0
1736 ; PC64LE9-NEXT: stdu 1, -80(1)
1737 ; PC64LE9-NEXT: std 0, 96(1)
1738 ; PC64LE9-NEXT: std 30, 64(1) # 8-byte Folded Spill
1739 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
1740 ; PC64LE9-NEXT: vmr 31, 2
1741 ; PC64LE9-NEXT: clrldi 30, 5, 32
1742 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
1743 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
1744 ; PC64LE9-NEXT: mr 4, 30
1745 ; PC64LE9-NEXT: bl __powidf2
1747 ; PC64LE9-NEXT: mr 4, 30
1748 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
1749 ; PC64LE9-NEXT: xxswapd 1, 63
1750 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1751 ; PC64LE9-NEXT: bl __powidf2
1753 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1754 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
1755 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
1756 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
1757 ; PC64LE9-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1758 ; PC64LE9-NEXT: addi 1, 1, 80
1759 ; PC64LE9-NEXT: ld 0, 16(1)
1760 ; PC64LE9-NEXT: mtlr 0
1763 %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
1766 metadata !"round.dynamic",
1767 metadata !"fpexcept.strict") #1
1768 ret <2 x double> %powi
1771 define <3 x float> @constrained_vector_powi_v3f32(<3 x float> %x, i32 %y) #0 {
1774 ; PC64LE-LABEL: constrained_vector_powi_v3f32:
1775 ; PC64LE: # %bb.0: # %entry
1776 ; PC64LE-NEXT: mflr 0
1777 ; PC64LE-NEXT: stdu 1, -96(1)
1778 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
1779 ; PC64LE-NEXT: std 0, 112(1)
1780 ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill
1781 ; PC64LE-NEXT: clrldi 30, 5, 32
1782 ; PC64LE-NEXT: li 3, 48
1783 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1784 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1785 ; PC64LE-NEXT: xscvspdpn 1, 0
1786 ; PC64LE-NEXT: mr 4, 30
1787 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1788 ; PC64LE-NEXT: vmr 31, 2
1789 ; PC64LE-NEXT: bl __powisf2
1791 ; PC64LE-NEXT: xxswapd 0, 63
1792 ; PC64LE-NEXT: fmr 31, 1
1793 ; PC64LE-NEXT: mr 4, 30
1794 ; PC64LE-NEXT: xscvspdpn 1, 0
1795 ; PC64LE-NEXT: bl __powisf2
1797 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
1798 ; PC64LE-NEXT: fmr 30, 1
1799 ; PC64LE-NEXT: mr 4, 30
1800 ; PC64LE-NEXT: xscvspdpn 1, 0
1801 ; PC64LE-NEXT: bl __powisf2
1803 ; PC64LE-NEXT: xscvdpspn 0, 1
1804 ; PC64LE-NEXT: xscvdpspn 1, 30
1805 ; PC64LE-NEXT: addis 3, 2, .LCPI37_0@toc@ha
1806 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1807 ; PC64LE-NEXT: xscvdpspn 36, 31
1808 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1809 ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1810 ; PC64LE-NEXT: addi 3, 3, .LCPI37_0@toc@l
1811 ; PC64LE-NEXT: xxmrghw 34, 1, 0
1812 ; PC64LE-NEXT: lxvd2x 0, 0, 3
1813 ; PC64LE-NEXT: li 3, 48
1814 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1815 ; PC64LE-NEXT: xxswapd 35, 0
1816 ; PC64LE-NEXT: vperm 2, 4, 2, 3
1817 ; PC64LE-NEXT: addi 1, 1, 96
1818 ; PC64LE-NEXT: ld 0, 16(1)
1819 ; PC64LE-NEXT: mtlr 0
1822 ; PC64LE9-LABEL: constrained_vector_powi_v3f32:
1823 ; PC64LE9: # %bb.0: # %entry
1824 ; PC64LE9-NEXT: mflr 0
1825 ; PC64LE9-NEXT: stdu 1, -80(1)
1826 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
1827 ; PC64LE9-NEXT: std 0, 96(1)
1828 ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill
1829 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1830 ; PC64LE9-NEXT: clrldi 30, 5, 32
1831 ; PC64LE9-NEXT: vmr 31, 2
1832 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1833 ; PC64LE9-NEXT: mr 4, 30
1834 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1835 ; PC64LE9-NEXT: xscvspdpn 1, 0
1836 ; PC64LE9-NEXT: bl __powisf2
1838 ; PC64LE9-NEXT: xxswapd 0, 63
1839 ; PC64LE9-NEXT: fmr 31, 1
1840 ; PC64LE9-NEXT: mr 4, 30
1841 ; PC64LE9-NEXT: xscvspdpn 1, 0
1842 ; PC64LE9-NEXT: bl __powisf2
1844 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
1845 ; PC64LE9-NEXT: fmr 30, 1
1846 ; PC64LE9-NEXT: mr 4, 30
1847 ; PC64LE9-NEXT: xscvspdpn 1, 0
1848 ; PC64LE9-NEXT: bl __powisf2
1850 ; PC64LE9-NEXT: xscvdpspn 0, 1
1851 ; PC64LE9-NEXT: xscvdpspn 1, 30
1852 ; PC64LE9-NEXT: addis 3, 2, .LCPI37_0@toc@ha
1853 ; PC64LE9-NEXT: xscvdpspn 34, 31
1854 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1855 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1856 ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload
1857 ; PC64LE9-NEXT: addi 3, 3, .LCPI37_0@toc@l
1858 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1859 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
1860 ; PC64LE9-NEXT: lxv 0, 0(3)
1861 ; PC64LE9-NEXT: xxperm 34, 35, 0
1862 ; PC64LE9-NEXT: addi 1, 1, 80
1863 ; PC64LE9-NEXT: ld 0, 16(1)
1864 ; PC64LE9-NEXT: mtlr 0
1867 %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32(
1870 metadata !"round.dynamic",
1871 metadata !"fpexcept.strict") #1
1872 ret <3 x float> %powi
1875 define <3 x double> @constrained_vector_powi_v3f64(<3 x double> %x, i32 %y) #0 {
1876 ; PC64LE-LABEL: constrained_vector_powi_v3f64:
1877 ; PC64LE: # %bb.0: # %entry
1878 ; PC64LE-NEXT: mflr 0
1879 ; PC64LE-NEXT: stdu 1, -96(1)
1880 ; PC64LE-NEXT: std 0, 112(1)
1881 ; PC64LE-NEXT: std 30, 64(1) # 8-byte Folded Spill
1882 ; PC64LE-NEXT: clrldi 30, 6, 32
1883 ; PC64LE-NEXT: li 3, 48
1884 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
1885 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
1886 ; PC64LE-NEXT: fmr 31, 3
1887 ; PC64LE-NEXT: fmr 30, 2
1888 ; PC64LE-NEXT: mr 4, 30
1889 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1890 ; PC64LE-NEXT: bl __powidf2
1892 ; PC64LE-NEXT: xxlor 63, 1, 1
1893 ; PC64LE-NEXT: fmr 1, 30
1894 ; PC64LE-NEXT: mr 4, 30
1895 ; PC64LE-NEXT: bl __powidf2
1897 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1898 ; PC64LE-NEXT: xxmrghd 63, 1, 63
1899 ; PC64LE-NEXT: fmr 1, 31
1900 ; PC64LE-NEXT: mr 4, 30
1901 ; PC64LE-NEXT: bl __powidf2
1903 ; PC64LE-NEXT: li 3, 48
1904 ; PC64LE-NEXT: fmr 3, 1
1905 ; PC64LE-NEXT: xxswapd 1, 63
1906 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
1907 ; PC64LE-NEXT: xxlor 2, 63, 63
1908 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
1909 ; PC64LE-NEXT: ld 30, 64(1) # 8-byte Folded Reload
1910 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1911 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
1912 ; PC64LE-NEXT: addi 1, 1, 96
1913 ; PC64LE-NEXT: ld 0, 16(1)
1914 ; PC64LE-NEXT: mtlr 0
1917 ; PC64LE9-LABEL: constrained_vector_powi_v3f64:
1918 ; PC64LE9: # %bb.0: # %entry
1919 ; PC64LE9-NEXT: mflr 0
1920 ; PC64LE9-NEXT: stdu 1, -80(1)
1921 ; PC64LE9-NEXT: std 0, 96(1)
1922 ; PC64LE9-NEXT: std 30, 48(1) # 8-byte Folded Spill
1923 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
1924 ; PC64LE9-NEXT: clrldi 30, 6, 32
1925 ; PC64LE9-NEXT: mr 4, 30
1926 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
1927 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
1928 ; PC64LE9-NEXT: fmr 31, 3
1929 ; PC64LE9-NEXT: fmr 30, 2
1930 ; PC64LE9-NEXT: bl __powidf2
1932 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
1933 ; PC64LE9-NEXT: fmr 1, 30
1934 ; PC64LE9-NEXT: mr 4, 30
1935 ; PC64LE9-NEXT: bl __powidf2
1937 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
1938 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
1939 ; PC64LE9-NEXT: fmr 1, 31
1940 ; PC64LE9-NEXT: mr 4, 30
1941 ; PC64LE9-NEXT: bl __powidf2
1943 ; PC64LE9-NEXT: fmr 3, 1
1944 ; PC64LE9-NEXT: xxswapd 1, 63
1945 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
1946 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
1947 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
1948 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1949 ; PC64LE9-NEXT: ld 30, 48(1) # 8-byte Folded Reload
1950 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
1951 ; PC64LE9-NEXT: addi 1, 1, 80
1952 ; PC64LE9-NEXT: ld 0, 16(1)
1953 ; PC64LE9-NEXT: mtlr 0
1956 %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
1959 metadata !"round.dynamic",
1960 metadata !"fpexcept.strict") #1
1961 ret <3 x double> %powi
1964 define <4 x double> @constrained_vector_powi_v4f64(<4 x double> %x, i32 %y) #0 {
1965 ; PC64LE-LABEL: constrained_vector_powi_v4f64:
1966 ; PC64LE: # %bb.0: # %entry
1967 ; PC64LE-NEXT: mflr 0
1968 ; PC64LE-NEXT: stdu 1, -112(1)
1969 ; PC64LE-NEXT: li 3, 48
1970 ; PC64LE-NEXT: std 0, 128(1)
1971 ; PC64LE-NEXT: std 30, 96(1) # 8-byte Folded Spill
1972 ; PC64LE-NEXT: clrldi 30, 7, 32
1973 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
1974 ; PC64LE-NEXT: li 3, 64
1975 ; PC64LE-NEXT: mr 4, 30
1976 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
1977 ; PC64LE-NEXT: vmr 30, 2
1978 ; PC64LE-NEXT: li 3, 80
1979 ; PC64LE-NEXT: xxlor 1, 62, 62
1980 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
1981 ; PC64LE-NEXT: vmr 31, 3
1982 ; PC64LE-NEXT: bl __powidf2
1984 ; PC64LE-NEXT: mr 4, 30
1985 ; PC64LE-NEXT: xxlor 61, 1, 1
1986 ; PC64LE-NEXT: xxswapd 1, 62
1987 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
1988 ; PC64LE-NEXT: bl __powidf2
1990 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
1991 ; PC64LE-NEXT: xxmrghd 62, 61, 1
1992 ; PC64LE-NEXT: xxlor 1, 63, 63
1993 ; PC64LE-NEXT: mr 4, 30
1994 ; PC64LE-NEXT: bl __powidf2
1996 ; PC64LE-NEXT: mr 4, 30
1997 ; PC64LE-NEXT: xxlor 61, 1, 1
1998 ; PC64LE-NEXT: xxswapd 1, 63
1999 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2000 ; PC64LE-NEXT: bl __powidf2
2002 ; PC64LE-NEXT: li 3, 80
2003 ; PC64LE-NEXT: vmr 2, 30
2004 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2005 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2006 ; PC64LE-NEXT: ld 30, 96(1) # 8-byte Folded Reload
2007 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2008 ; PC64LE-NEXT: li 3, 64
2009 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2010 ; PC64LE-NEXT: li 3, 48
2011 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2012 ; PC64LE-NEXT: addi 1, 1, 112
2013 ; PC64LE-NEXT: ld 0, 16(1)
2014 ; PC64LE-NEXT: mtlr 0
2017 ; PC64LE9-LABEL: constrained_vector_powi_v4f64:
2018 ; PC64LE9: # %bb.0: # %entry
2019 ; PC64LE9-NEXT: mflr 0
2020 ; PC64LE9-NEXT: stdu 1, -96(1)
2021 ; PC64LE9-NEXT: std 0, 112(1)
2022 ; PC64LE9-NEXT: std 30, 80(1) # 8-byte Folded Spill
2023 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2024 ; PC64LE9-NEXT: vmr 30, 2
2025 ; PC64LE9-NEXT: clrldi 30, 7, 32
2026 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2027 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2028 ; PC64LE9-NEXT: mr 4, 30
2029 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2030 ; PC64LE9-NEXT: vmr 31, 3
2031 ; PC64LE9-NEXT: bl __powidf2
2033 ; PC64LE9-NEXT: mr 4, 30
2034 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2035 ; PC64LE9-NEXT: xxswapd 1, 62
2036 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2037 ; PC64LE9-NEXT: bl __powidf2
2039 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2040 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2041 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2042 ; PC64LE9-NEXT: mr 4, 30
2043 ; PC64LE9-NEXT: bl __powidf2
2045 ; PC64LE9-NEXT: mr 4, 30
2046 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2047 ; PC64LE9-NEXT: xxswapd 1, 63
2048 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2049 ; PC64LE9-NEXT: bl __powidf2
2051 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2052 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2053 ; PC64LE9-NEXT: vmr 2, 30
2054 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2055 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2056 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2057 ; PC64LE9-NEXT: ld 30, 80(1) # 8-byte Folded Reload
2058 ; PC64LE9-NEXT: addi 1, 1, 96
2059 ; PC64LE9-NEXT: ld 0, 16(1)
2060 ; PC64LE9-NEXT: mtlr 0
2063 %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64(
2066 metadata !"round.dynamic",
2067 metadata !"fpexcept.strict") #1
2068 ret <4 x double> %powi
2071 define <1 x float> @constrained_vector_sin_v1f32(<1 x float> %x) #0 {
2072 ; PC64LE-LABEL: constrained_vector_sin_v1f32:
2073 ; PC64LE: # %bb.0: # %entry
2074 ; PC64LE-NEXT: mflr 0
2075 ; PC64LE-NEXT: stdu 1, -32(1)
2076 ; PC64LE-NEXT: std 0, 48(1)
2077 ; PC64LE-NEXT: bl sinf
2079 ; PC64LE-NEXT: addi 1, 1, 32
2080 ; PC64LE-NEXT: ld 0, 16(1)
2081 ; PC64LE-NEXT: mtlr 0
2084 ; PC64LE9-LABEL: constrained_vector_sin_v1f32:
2085 ; PC64LE9: # %bb.0: # %entry
2086 ; PC64LE9-NEXT: mflr 0
2087 ; PC64LE9-NEXT: stdu 1, -32(1)
2088 ; PC64LE9-NEXT: std 0, 48(1)
2089 ; PC64LE9-NEXT: bl sinf
2091 ; PC64LE9-NEXT: addi 1, 1, 32
2092 ; PC64LE9-NEXT: ld 0, 16(1)
2093 ; PC64LE9-NEXT: mtlr 0
2096 %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
2098 metadata !"round.dynamic",
2099 metadata !"fpexcept.strict") #1
2100 ret <1 x float> %sin
2103 define <2 x double> @constrained_vector_sin_v2f64(<2 x double> %x) #0 {
2104 ; PC64LE-LABEL: constrained_vector_sin_v2f64:
2105 ; PC64LE: # %bb.0: # %entry
2106 ; PC64LE-NEXT: mflr 0
2107 ; PC64LE-NEXT: stdu 1, -80(1)
2108 ; PC64LE-NEXT: li 3, 48
2109 ; PC64LE-NEXT: std 0, 96(1)
2110 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2111 ; PC64LE-NEXT: li 3, 64
2112 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2113 ; PC64LE-NEXT: vmr 31, 2
2114 ; PC64LE-NEXT: xxlor 1, 63, 63
2115 ; PC64LE-NEXT: bl sin
2117 ; PC64LE-NEXT: xxlor 62, 1, 1
2118 ; PC64LE-NEXT: xxswapd 1, 63
2119 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2120 ; PC64LE-NEXT: bl sin
2122 ; PC64LE-NEXT: li 3, 64
2123 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2124 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2125 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2126 ; PC64LE-NEXT: li 3, 48
2127 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2128 ; PC64LE-NEXT: addi 1, 1, 80
2129 ; PC64LE-NEXT: ld 0, 16(1)
2130 ; PC64LE-NEXT: mtlr 0
2133 ; PC64LE9-LABEL: constrained_vector_sin_v2f64:
2134 ; PC64LE9: # %bb.0: # %entry
2135 ; PC64LE9-NEXT: mflr 0
2136 ; PC64LE9-NEXT: stdu 1, -64(1)
2137 ; PC64LE9-NEXT: std 0, 80(1)
2138 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2139 ; PC64LE9-NEXT: vmr 31, 2
2140 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2141 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2142 ; PC64LE9-NEXT: bl sin
2144 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2145 ; PC64LE9-NEXT: xxswapd 1, 63
2146 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2147 ; PC64LE9-NEXT: bl sin
2149 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2150 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2151 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2152 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2153 ; PC64LE9-NEXT: addi 1, 1, 64
2154 ; PC64LE9-NEXT: ld 0, 16(1)
2155 ; PC64LE9-NEXT: mtlr 0
2158 %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
2160 metadata !"round.dynamic",
2161 metadata !"fpexcept.strict") #1
2162 ret <2 x double> %sin
2165 define <3 x float> @constrained_vector_sin_v3f32(<3 x float> %x) #0 {
2166 ; PC64LE-LABEL: constrained_vector_sin_v3f32:
2167 ; PC64LE: # %bb.0: # %entry
2168 ; PC64LE-NEXT: mflr 0
2169 ; PC64LE-NEXT: stdu 1, -80(1)
2170 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2171 ; PC64LE-NEXT: li 3, 48
2172 ; PC64LE-NEXT: std 0, 96(1)
2173 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2174 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2175 ; PC64LE-NEXT: xscvspdpn 1, 0
2176 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2177 ; PC64LE-NEXT: vmr 31, 2
2178 ; PC64LE-NEXT: bl sinf
2180 ; PC64LE-NEXT: xxswapd 0, 63
2181 ; PC64LE-NEXT: fmr 31, 1
2182 ; PC64LE-NEXT: xscvspdpn 1, 0
2183 ; PC64LE-NEXT: bl sinf
2185 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2186 ; PC64LE-NEXT: fmr 30, 1
2187 ; PC64LE-NEXT: xscvspdpn 1, 0
2188 ; PC64LE-NEXT: bl sinf
2190 ; PC64LE-NEXT: xscvdpspn 0, 1
2191 ; PC64LE-NEXT: xscvdpspn 1, 30
2192 ; PC64LE-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2193 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2194 ; PC64LE-NEXT: xscvdpspn 36, 31
2195 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2196 ; PC64LE-NEXT: addi 3, 3, .LCPI42_0@toc@l
2197 ; PC64LE-NEXT: xxmrghw 34, 1, 0
2198 ; PC64LE-NEXT: lxvd2x 0, 0, 3
2199 ; PC64LE-NEXT: li 3, 48
2200 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2201 ; PC64LE-NEXT: xxswapd 35, 0
2202 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2203 ; PC64LE-NEXT: addi 1, 1, 80
2204 ; PC64LE-NEXT: ld 0, 16(1)
2205 ; PC64LE-NEXT: mtlr 0
2208 ; PC64LE9-LABEL: constrained_vector_sin_v3f32:
2209 ; PC64LE9: # %bb.0: # %entry
2210 ; PC64LE9-NEXT: mflr 0
2211 ; PC64LE9-NEXT: stdu 1, -64(1)
2212 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2213 ; PC64LE9-NEXT: std 0, 80(1)
2214 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2215 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2216 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2217 ; PC64LE9-NEXT: vmr 31, 2
2218 ; PC64LE9-NEXT: xscvspdpn 1, 0
2219 ; PC64LE9-NEXT: bl sinf
2221 ; PC64LE9-NEXT: xxswapd 0, 63
2222 ; PC64LE9-NEXT: fmr 31, 1
2223 ; PC64LE9-NEXT: xscvspdpn 1, 0
2224 ; PC64LE9-NEXT: bl sinf
2226 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2227 ; PC64LE9-NEXT: fmr 30, 1
2228 ; PC64LE9-NEXT: xscvspdpn 1, 0
2229 ; PC64LE9-NEXT: bl sinf
2231 ; PC64LE9-NEXT: xscvdpspn 0, 1
2232 ; PC64LE9-NEXT: xscvdpspn 1, 30
2233 ; PC64LE9-NEXT: addis 3, 2, .LCPI42_0@toc@ha
2234 ; PC64LE9-NEXT: xscvdpspn 34, 31
2235 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2236 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2237 ; PC64LE9-NEXT: addi 3, 3, .LCPI42_0@toc@l
2238 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2239 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
2240 ; PC64LE9-NEXT: lxv 0, 0(3)
2241 ; PC64LE9-NEXT: xxperm 34, 35, 0
2242 ; PC64LE9-NEXT: addi 1, 1, 64
2243 ; PC64LE9-NEXT: ld 0, 16(1)
2244 ; PC64LE9-NEXT: mtlr 0
2247 %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
2249 metadata !"round.dynamic",
2250 metadata !"fpexcept.strict") #1
2251 ret <3 x float> %sin
2254 define <3 x double> @constrained_vector_sin_v3f64(<3 x double> %x) #0 {
2255 ; PC64LE-LABEL: constrained_vector_sin_v3f64:
2256 ; PC64LE: # %bb.0: # %entry
2257 ; PC64LE-NEXT: mflr 0
2258 ; PC64LE-NEXT: stdu 1, -80(1)
2259 ; PC64LE-NEXT: li 3, 48
2260 ; PC64LE-NEXT: std 0, 96(1)
2261 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2262 ; PC64LE-NEXT: fmr 30, 2
2263 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2264 ; PC64LE-NEXT: fmr 31, 3
2265 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2266 ; PC64LE-NEXT: bl sin
2268 ; PC64LE-NEXT: xxlor 63, 1, 1
2269 ; PC64LE-NEXT: fmr 1, 30
2270 ; PC64LE-NEXT: bl sin
2272 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2273 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2274 ; PC64LE-NEXT: fmr 1, 31
2275 ; PC64LE-NEXT: bl sin
2277 ; PC64LE-NEXT: li 3, 48
2278 ; PC64LE-NEXT: fmr 3, 1
2279 ; PC64LE-NEXT: xxswapd 1, 63
2280 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2281 ; PC64LE-NEXT: xxlor 2, 63, 63
2282 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2283 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2284 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2285 ; PC64LE-NEXT: addi 1, 1, 80
2286 ; PC64LE-NEXT: ld 0, 16(1)
2287 ; PC64LE-NEXT: mtlr 0
2290 ; PC64LE9-LABEL: constrained_vector_sin_v3f64:
2291 ; PC64LE9: # %bb.0: # %entry
2292 ; PC64LE9-NEXT: mflr 0
2293 ; PC64LE9-NEXT: stdu 1, -64(1)
2294 ; PC64LE9-NEXT: std 0, 80(1)
2295 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2296 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2297 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2298 ; PC64LE9-NEXT: fmr 31, 3
2299 ; PC64LE9-NEXT: fmr 30, 2
2300 ; PC64LE9-NEXT: bl sin
2302 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2303 ; PC64LE9-NEXT: fmr 1, 30
2304 ; PC64LE9-NEXT: bl sin
2306 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2307 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2308 ; PC64LE9-NEXT: fmr 1, 31
2309 ; PC64LE9-NEXT: bl sin
2311 ; PC64LE9-NEXT: fmr 3, 1
2312 ; PC64LE9-NEXT: xxswapd 1, 63
2313 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2314 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2315 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2316 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2317 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2318 ; PC64LE9-NEXT: addi 1, 1, 64
2319 ; PC64LE9-NEXT: ld 0, 16(1)
2320 ; PC64LE9-NEXT: mtlr 0
2323 %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
2325 metadata !"round.dynamic",
2326 metadata !"fpexcept.strict") #1
2327 ret <3 x double> %sin
2330 define <4 x double> @constrained_vector_sin_v4f64(<4 x double> %x) #0 {
2331 ; PC64LE-LABEL: constrained_vector_sin_v4f64:
2332 ; PC64LE: # %bb.0: # %entry
2333 ; PC64LE-NEXT: mflr 0
2334 ; PC64LE-NEXT: stdu 1, -96(1)
2335 ; PC64LE-NEXT: li 3, 48
2336 ; PC64LE-NEXT: std 0, 112(1)
2337 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
2338 ; PC64LE-NEXT: li 3, 64
2339 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2340 ; PC64LE-NEXT: vmr 30, 2
2341 ; PC64LE-NEXT: li 3, 80
2342 ; PC64LE-NEXT: xxlor 1, 62, 62
2343 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2344 ; PC64LE-NEXT: vmr 31, 3
2345 ; PC64LE-NEXT: bl sin
2347 ; PC64LE-NEXT: xxlor 61, 1, 1
2348 ; PC64LE-NEXT: xxswapd 1, 62
2349 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2350 ; PC64LE-NEXT: bl sin
2352 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2353 ; PC64LE-NEXT: xxmrghd 62, 61, 1
2354 ; PC64LE-NEXT: xxlor 1, 63, 63
2355 ; PC64LE-NEXT: bl sin
2357 ; PC64LE-NEXT: xxlor 61, 1, 1
2358 ; PC64LE-NEXT: xxswapd 1, 63
2359 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2360 ; PC64LE-NEXT: bl sin
2362 ; PC64LE-NEXT: li 3, 80
2363 ; PC64LE-NEXT: vmr 2, 30
2364 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2365 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2366 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2367 ; PC64LE-NEXT: li 3, 64
2368 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2369 ; PC64LE-NEXT: li 3, 48
2370 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2371 ; PC64LE-NEXT: addi 1, 1, 96
2372 ; PC64LE-NEXT: ld 0, 16(1)
2373 ; PC64LE-NEXT: mtlr 0
2376 ; PC64LE9-LABEL: constrained_vector_sin_v4f64:
2377 ; PC64LE9: # %bb.0: # %entry
2378 ; PC64LE9-NEXT: mflr 0
2379 ; PC64LE9-NEXT: stdu 1, -80(1)
2380 ; PC64LE9-NEXT: std 0, 96(1)
2381 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2382 ; PC64LE9-NEXT: vmr 30, 2
2383 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2384 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2385 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2386 ; PC64LE9-NEXT: vmr 31, 3
2387 ; PC64LE9-NEXT: bl sin
2389 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2390 ; PC64LE9-NEXT: xxswapd 1, 62
2391 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2392 ; PC64LE9-NEXT: bl sin
2394 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2395 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
2396 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2397 ; PC64LE9-NEXT: bl sin
2399 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2400 ; PC64LE9-NEXT: xxswapd 1, 63
2401 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2402 ; PC64LE9-NEXT: bl sin
2404 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2405 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2406 ; PC64LE9-NEXT: vmr 2, 30
2407 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2408 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2409 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2410 ; PC64LE9-NEXT: addi 1, 1, 80
2411 ; PC64LE9-NEXT: ld 0, 16(1)
2412 ; PC64LE9-NEXT: mtlr 0
2415 %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64(
2417 metadata !"round.dynamic",
2418 metadata !"fpexcept.strict") #1
2419 ret <4 x double> %sin
2422 define <1 x float> @constrained_vector_cos_v1f32(<1 x float> %x) #0 {
2423 ; PC64LE-LABEL: constrained_vector_cos_v1f32:
2424 ; PC64LE: # %bb.0: # %entry
2425 ; PC64LE-NEXT: mflr 0
2426 ; PC64LE-NEXT: stdu 1, -32(1)
2427 ; PC64LE-NEXT: std 0, 48(1)
2428 ; PC64LE-NEXT: bl cosf
2430 ; PC64LE-NEXT: addi 1, 1, 32
2431 ; PC64LE-NEXT: ld 0, 16(1)
2432 ; PC64LE-NEXT: mtlr 0
2435 ; PC64LE9-LABEL: constrained_vector_cos_v1f32:
2436 ; PC64LE9: # %bb.0: # %entry
2437 ; PC64LE9-NEXT: mflr 0
2438 ; PC64LE9-NEXT: stdu 1, -32(1)
2439 ; PC64LE9-NEXT: std 0, 48(1)
2440 ; PC64LE9-NEXT: bl cosf
2442 ; PC64LE9-NEXT: addi 1, 1, 32
2443 ; PC64LE9-NEXT: ld 0, 16(1)
2444 ; PC64LE9-NEXT: mtlr 0
2447 %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
2449 metadata !"round.dynamic",
2450 metadata !"fpexcept.strict") #1
2451 ret <1 x float> %cos
2454 define <2 x double> @constrained_vector_cos_v2f64(<2 x double> %x) #0 {
2455 ; PC64LE-LABEL: constrained_vector_cos_v2f64:
2456 ; PC64LE: # %bb.0: # %entry
2457 ; PC64LE-NEXT: mflr 0
2458 ; PC64LE-NEXT: stdu 1, -80(1)
2459 ; PC64LE-NEXT: li 3, 48
2460 ; PC64LE-NEXT: std 0, 96(1)
2461 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2462 ; PC64LE-NEXT: li 3, 64
2463 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2464 ; PC64LE-NEXT: vmr 31, 2
2465 ; PC64LE-NEXT: xxlor 1, 63, 63
2466 ; PC64LE-NEXT: bl cos
2468 ; PC64LE-NEXT: xxlor 62, 1, 1
2469 ; PC64LE-NEXT: xxswapd 1, 63
2470 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2471 ; PC64LE-NEXT: bl cos
2473 ; PC64LE-NEXT: li 3, 64
2474 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2475 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2476 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2477 ; PC64LE-NEXT: li 3, 48
2478 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2479 ; PC64LE-NEXT: addi 1, 1, 80
2480 ; PC64LE-NEXT: ld 0, 16(1)
2481 ; PC64LE-NEXT: mtlr 0
2484 ; PC64LE9-LABEL: constrained_vector_cos_v2f64:
2485 ; PC64LE9: # %bb.0: # %entry
2486 ; PC64LE9-NEXT: mflr 0
2487 ; PC64LE9-NEXT: stdu 1, -64(1)
2488 ; PC64LE9-NEXT: std 0, 80(1)
2489 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2490 ; PC64LE9-NEXT: vmr 31, 2
2491 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2492 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2493 ; PC64LE9-NEXT: bl cos
2495 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2496 ; PC64LE9-NEXT: xxswapd 1, 63
2497 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2498 ; PC64LE9-NEXT: bl cos
2500 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2501 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2502 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2503 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2504 ; PC64LE9-NEXT: addi 1, 1, 64
2505 ; PC64LE9-NEXT: ld 0, 16(1)
2506 ; PC64LE9-NEXT: mtlr 0
2509 %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
2511 metadata !"round.dynamic",
2512 metadata !"fpexcept.strict") #1
2513 ret <2 x double> %cos
2516 define <3 x float> @constrained_vector_cos_v3f32(<3 x float> %x) #0 {
2517 ; PC64LE-LABEL: constrained_vector_cos_v3f32:
2518 ; PC64LE: # %bb.0: # %entry
2519 ; PC64LE-NEXT: mflr 0
2520 ; PC64LE-NEXT: stdu 1, -80(1)
2521 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2522 ; PC64LE-NEXT: li 3, 48
2523 ; PC64LE-NEXT: std 0, 96(1)
2524 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2525 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2526 ; PC64LE-NEXT: xscvspdpn 1, 0
2527 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2528 ; PC64LE-NEXT: vmr 31, 2
2529 ; PC64LE-NEXT: bl cosf
2531 ; PC64LE-NEXT: xxswapd 0, 63
2532 ; PC64LE-NEXT: fmr 31, 1
2533 ; PC64LE-NEXT: xscvspdpn 1, 0
2534 ; PC64LE-NEXT: bl cosf
2536 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2537 ; PC64LE-NEXT: fmr 30, 1
2538 ; PC64LE-NEXT: xscvspdpn 1, 0
2539 ; PC64LE-NEXT: bl cosf
2541 ; PC64LE-NEXT: xscvdpspn 0, 1
2542 ; PC64LE-NEXT: xscvdpspn 1, 30
2543 ; PC64LE-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2544 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2545 ; PC64LE-NEXT: xscvdpspn 36, 31
2546 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2547 ; PC64LE-NEXT: addi 3, 3, .LCPI47_0@toc@l
2548 ; PC64LE-NEXT: xxmrghw 34, 1, 0
2549 ; PC64LE-NEXT: lxvd2x 0, 0, 3
2550 ; PC64LE-NEXT: li 3, 48
2551 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2552 ; PC64LE-NEXT: xxswapd 35, 0
2553 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2554 ; PC64LE-NEXT: addi 1, 1, 80
2555 ; PC64LE-NEXT: ld 0, 16(1)
2556 ; PC64LE-NEXT: mtlr 0
2559 ; PC64LE9-LABEL: constrained_vector_cos_v3f32:
2560 ; PC64LE9: # %bb.0: # %entry
2561 ; PC64LE9-NEXT: mflr 0
2562 ; PC64LE9-NEXT: stdu 1, -64(1)
2563 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2564 ; PC64LE9-NEXT: std 0, 80(1)
2565 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2566 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2567 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2568 ; PC64LE9-NEXT: vmr 31, 2
2569 ; PC64LE9-NEXT: xscvspdpn 1, 0
2570 ; PC64LE9-NEXT: bl cosf
2572 ; PC64LE9-NEXT: xxswapd 0, 63
2573 ; PC64LE9-NEXT: fmr 31, 1
2574 ; PC64LE9-NEXT: xscvspdpn 1, 0
2575 ; PC64LE9-NEXT: bl cosf
2577 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2578 ; PC64LE9-NEXT: fmr 30, 1
2579 ; PC64LE9-NEXT: xscvspdpn 1, 0
2580 ; PC64LE9-NEXT: bl cosf
2582 ; PC64LE9-NEXT: xscvdpspn 0, 1
2583 ; PC64LE9-NEXT: xscvdpspn 1, 30
2584 ; PC64LE9-NEXT: addis 3, 2, .LCPI47_0@toc@ha
2585 ; PC64LE9-NEXT: xscvdpspn 34, 31
2586 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2587 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2588 ; PC64LE9-NEXT: addi 3, 3, .LCPI47_0@toc@l
2589 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2590 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
2591 ; PC64LE9-NEXT: lxv 0, 0(3)
2592 ; PC64LE9-NEXT: xxperm 34, 35, 0
2593 ; PC64LE9-NEXT: addi 1, 1, 64
2594 ; PC64LE9-NEXT: ld 0, 16(1)
2595 ; PC64LE9-NEXT: mtlr 0
2598 %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
2600 metadata !"round.dynamic",
2601 metadata !"fpexcept.strict") #1
2602 ret <3 x float> %cos
2605 define <3 x double> @constrained_vector_cos_v3f64(<3 x double> %x) #0 {
2606 ; PC64LE-LABEL: constrained_vector_cos_v3f64:
2607 ; PC64LE: # %bb.0: # %entry
2608 ; PC64LE-NEXT: mflr 0
2609 ; PC64LE-NEXT: stdu 1, -80(1)
2610 ; PC64LE-NEXT: li 3, 48
2611 ; PC64LE-NEXT: std 0, 96(1)
2612 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2613 ; PC64LE-NEXT: fmr 30, 2
2614 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2615 ; PC64LE-NEXT: fmr 31, 3
2616 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2617 ; PC64LE-NEXT: bl cos
2619 ; PC64LE-NEXT: xxlor 63, 1, 1
2620 ; PC64LE-NEXT: fmr 1, 30
2621 ; PC64LE-NEXT: bl cos
2623 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2624 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2625 ; PC64LE-NEXT: fmr 1, 31
2626 ; PC64LE-NEXT: bl cos
2628 ; PC64LE-NEXT: li 3, 48
2629 ; PC64LE-NEXT: fmr 3, 1
2630 ; PC64LE-NEXT: xxswapd 1, 63
2631 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2632 ; PC64LE-NEXT: xxlor 2, 63, 63
2633 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2634 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2635 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2636 ; PC64LE-NEXT: addi 1, 1, 80
2637 ; PC64LE-NEXT: ld 0, 16(1)
2638 ; PC64LE-NEXT: mtlr 0
2641 ; PC64LE9-LABEL: constrained_vector_cos_v3f64:
2642 ; PC64LE9: # %bb.0: # %entry
2643 ; PC64LE9-NEXT: mflr 0
2644 ; PC64LE9-NEXT: stdu 1, -64(1)
2645 ; PC64LE9-NEXT: std 0, 80(1)
2646 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2647 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2648 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2649 ; PC64LE9-NEXT: fmr 31, 3
2650 ; PC64LE9-NEXT: fmr 30, 2
2651 ; PC64LE9-NEXT: bl cos
2653 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
2654 ; PC64LE9-NEXT: fmr 1, 30
2655 ; PC64LE9-NEXT: bl cos
2657 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2658 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
2659 ; PC64LE9-NEXT: fmr 1, 31
2660 ; PC64LE9-NEXT: bl cos
2662 ; PC64LE9-NEXT: fmr 3, 1
2663 ; PC64LE9-NEXT: xxswapd 1, 63
2664 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
2665 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2666 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2667 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2668 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2669 ; PC64LE9-NEXT: addi 1, 1, 64
2670 ; PC64LE9-NEXT: ld 0, 16(1)
2671 ; PC64LE9-NEXT: mtlr 0
2674 %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
2676 metadata !"round.dynamic",
2677 metadata !"fpexcept.strict") #1
2678 ret <3 x double> %cos
2681 define <4 x double> @constrained_vector_cos_v4f64(<4 x double> %x) #0 {
2682 ; PC64LE-LABEL: constrained_vector_cos_v4f64:
2683 ; PC64LE: # %bb.0: # %entry
2684 ; PC64LE-NEXT: mflr 0
2685 ; PC64LE-NEXT: stdu 1, -96(1)
2686 ; PC64LE-NEXT: li 3, 48
2687 ; PC64LE-NEXT: std 0, 112(1)
2688 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
2689 ; PC64LE-NEXT: li 3, 64
2690 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2691 ; PC64LE-NEXT: vmr 30, 2
2692 ; PC64LE-NEXT: li 3, 80
2693 ; PC64LE-NEXT: xxlor 1, 62, 62
2694 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2695 ; PC64LE-NEXT: vmr 31, 3
2696 ; PC64LE-NEXT: bl cos
2698 ; PC64LE-NEXT: xxlor 61, 1, 1
2699 ; PC64LE-NEXT: xxswapd 1, 62
2700 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2701 ; PC64LE-NEXT: bl cos
2703 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2704 ; PC64LE-NEXT: xxmrghd 62, 61, 1
2705 ; PC64LE-NEXT: xxlor 1, 63, 63
2706 ; PC64LE-NEXT: bl cos
2708 ; PC64LE-NEXT: xxlor 61, 1, 1
2709 ; PC64LE-NEXT: xxswapd 1, 63
2710 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2711 ; PC64LE-NEXT: bl cos
2713 ; PC64LE-NEXT: li 3, 80
2714 ; PC64LE-NEXT: vmr 2, 30
2715 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2716 ; PC64LE-NEXT: xxmrghd 35, 61, 1
2717 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2718 ; PC64LE-NEXT: li 3, 64
2719 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2720 ; PC64LE-NEXT: li 3, 48
2721 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
2722 ; PC64LE-NEXT: addi 1, 1, 96
2723 ; PC64LE-NEXT: ld 0, 16(1)
2724 ; PC64LE-NEXT: mtlr 0
2727 ; PC64LE9-LABEL: constrained_vector_cos_v4f64:
2728 ; PC64LE9: # %bb.0: # %entry
2729 ; PC64LE9-NEXT: mflr 0
2730 ; PC64LE9-NEXT: stdu 1, -80(1)
2731 ; PC64LE9-NEXT: std 0, 96(1)
2732 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
2733 ; PC64LE9-NEXT: vmr 30, 2
2734 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
2735 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
2736 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
2737 ; PC64LE9-NEXT: vmr 31, 3
2738 ; PC64LE9-NEXT: bl cos
2740 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2741 ; PC64LE9-NEXT: xxswapd 1, 62
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 62, 61, 1
2747 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2748 ; PC64LE9-NEXT: bl cos
2750 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
2751 ; PC64LE9-NEXT: xxswapd 1, 63
2752 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2753 ; PC64LE9-NEXT: bl cos
2755 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2756 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
2757 ; PC64LE9-NEXT: vmr 2, 30
2758 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
2759 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
2760 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
2761 ; PC64LE9-NEXT: addi 1, 1, 80
2762 ; PC64LE9-NEXT: ld 0, 16(1)
2763 ; PC64LE9-NEXT: mtlr 0
2766 %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64(
2768 metadata !"round.dynamic",
2769 metadata !"fpexcept.strict") #1
2770 ret <4 x double> %cos
2773 define <1 x float> @constrained_vector_exp_v1f32(<1 x float> %x) #0 {
2774 ; PC64LE-LABEL: constrained_vector_exp_v1f32:
2775 ; PC64LE: # %bb.0: # %entry
2776 ; PC64LE-NEXT: mflr 0
2777 ; PC64LE-NEXT: stdu 1, -32(1)
2778 ; PC64LE-NEXT: std 0, 48(1)
2779 ; PC64LE-NEXT: bl expf
2781 ; PC64LE-NEXT: addi 1, 1, 32
2782 ; PC64LE-NEXT: ld 0, 16(1)
2783 ; PC64LE-NEXT: mtlr 0
2786 ; PC64LE9-LABEL: constrained_vector_exp_v1f32:
2787 ; PC64LE9: # %bb.0: # %entry
2788 ; PC64LE9-NEXT: mflr 0
2789 ; PC64LE9-NEXT: stdu 1, -32(1)
2790 ; PC64LE9-NEXT: std 0, 48(1)
2791 ; PC64LE9-NEXT: bl expf
2793 ; PC64LE9-NEXT: addi 1, 1, 32
2794 ; PC64LE9-NEXT: ld 0, 16(1)
2795 ; PC64LE9-NEXT: mtlr 0
2798 %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
2800 metadata !"round.dynamic",
2801 metadata !"fpexcept.strict") #1
2802 ret <1 x float> %exp
2805 define <2 x double> @constrained_vector_exp_v2f64(<2 x double> %x) #0 {
2806 ; PC64LE-LABEL: constrained_vector_exp_v2f64:
2807 ; PC64LE: # %bb.0: # %entry
2808 ; PC64LE-NEXT: mflr 0
2809 ; PC64LE-NEXT: stdu 1, -80(1)
2810 ; PC64LE-NEXT: li 3, 48
2811 ; PC64LE-NEXT: std 0, 96(1)
2812 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
2813 ; PC64LE-NEXT: li 3, 64
2814 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2815 ; PC64LE-NEXT: vmr 31, 2
2816 ; PC64LE-NEXT: xxlor 1, 63, 63
2817 ; PC64LE-NEXT: bl exp
2819 ; PC64LE-NEXT: xxlor 62, 1, 1
2820 ; PC64LE-NEXT: xxswapd 1, 63
2821 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2822 ; PC64LE-NEXT: bl exp
2824 ; PC64LE-NEXT: li 3, 64
2825 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2826 ; PC64LE-NEXT: xxmrghd 34, 62, 1
2827 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2828 ; PC64LE-NEXT: li 3, 48
2829 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
2830 ; PC64LE-NEXT: addi 1, 1, 80
2831 ; PC64LE-NEXT: ld 0, 16(1)
2832 ; PC64LE-NEXT: mtlr 0
2835 ; PC64LE9-LABEL: constrained_vector_exp_v2f64:
2836 ; PC64LE9: # %bb.0: # %entry
2837 ; PC64LE9-NEXT: mflr 0
2838 ; PC64LE9-NEXT: stdu 1, -64(1)
2839 ; PC64LE9-NEXT: std 0, 80(1)
2840 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
2841 ; PC64LE9-NEXT: vmr 31, 2
2842 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
2843 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
2844 ; PC64LE9-NEXT: bl exp
2846 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
2847 ; PC64LE9-NEXT: xxswapd 1, 63
2848 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2849 ; PC64LE9-NEXT: bl exp
2851 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
2852 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
2853 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
2854 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
2855 ; PC64LE9-NEXT: addi 1, 1, 64
2856 ; PC64LE9-NEXT: ld 0, 16(1)
2857 ; PC64LE9-NEXT: mtlr 0
2860 %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
2862 metadata !"round.dynamic",
2863 metadata !"fpexcept.strict") #1
2864 ret <2 x double> %exp
2867 define <3 x float> @constrained_vector_exp_v3f32(<3 x float> %x) #0 {
2868 ; PC64LE-LABEL: constrained_vector_exp_v3f32:
2869 ; PC64LE: # %bb.0: # %entry
2870 ; PC64LE-NEXT: mflr 0
2871 ; PC64LE-NEXT: stdu 1, -80(1)
2872 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
2873 ; PC64LE-NEXT: li 3, 48
2874 ; PC64LE-NEXT: std 0, 96(1)
2875 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2876 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2877 ; PC64LE-NEXT: xscvspdpn 1, 0
2878 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2879 ; PC64LE-NEXT: vmr 31, 2
2880 ; PC64LE-NEXT: bl expf
2882 ; PC64LE-NEXT: xxswapd 0, 63
2883 ; PC64LE-NEXT: fmr 31, 1
2884 ; PC64LE-NEXT: xscvspdpn 1, 0
2885 ; PC64LE-NEXT: bl expf
2887 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
2888 ; PC64LE-NEXT: fmr 30, 1
2889 ; PC64LE-NEXT: xscvspdpn 1, 0
2890 ; PC64LE-NEXT: bl expf
2892 ; PC64LE-NEXT: xscvdpspn 0, 1
2893 ; PC64LE-NEXT: xscvdpspn 1, 30
2894 ; PC64LE-NEXT: addis 3, 2, .LCPI52_0@toc@ha
2895 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2896 ; PC64LE-NEXT: xscvdpspn 36, 31
2897 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2898 ; PC64LE-NEXT: addi 3, 3, .LCPI52_0@toc@l
2899 ; PC64LE-NEXT: xxmrghw 34, 1, 0
2900 ; PC64LE-NEXT: lxvd2x 0, 0, 3
2901 ; PC64LE-NEXT: li 3, 48
2902 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2903 ; PC64LE-NEXT: xxswapd 35, 0
2904 ; PC64LE-NEXT: vperm 2, 4, 2, 3
2905 ; PC64LE-NEXT: addi 1, 1, 80
2906 ; PC64LE-NEXT: ld 0, 16(1)
2907 ; PC64LE-NEXT: mtlr 0
2910 ; PC64LE9-LABEL: constrained_vector_exp_v3f32:
2911 ; PC64LE9: # %bb.0: # %entry
2912 ; PC64LE9-NEXT: mflr 0
2913 ; PC64LE9-NEXT: stdu 1, -64(1)
2914 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
2915 ; PC64LE9-NEXT: std 0, 80(1)
2916 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2917 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2918 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
2919 ; PC64LE9-NEXT: vmr 31, 2
2920 ; PC64LE9-NEXT: xscvspdpn 1, 0
2921 ; PC64LE9-NEXT: bl expf
2923 ; PC64LE9-NEXT: xxswapd 0, 63
2924 ; PC64LE9-NEXT: fmr 31, 1
2925 ; PC64LE9-NEXT: xscvspdpn 1, 0
2926 ; PC64LE9-NEXT: bl expf
2928 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
2929 ; PC64LE9-NEXT: fmr 30, 1
2930 ; PC64LE9-NEXT: xscvspdpn 1, 0
2931 ; PC64LE9-NEXT: bl expf
2933 ; PC64LE9-NEXT: xscvdpspn 0, 1
2934 ; PC64LE9-NEXT: xscvdpspn 1, 30
2935 ; PC64LE9-NEXT: addis 3, 2, .LCPI52_0@toc@ha
2936 ; PC64LE9-NEXT: xscvdpspn 34, 31
2937 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
2938 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
2939 ; PC64LE9-NEXT: addi 3, 3, .LCPI52_0@toc@l
2940 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
2941 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
2942 ; PC64LE9-NEXT: lxv 0, 0(3)
2943 ; PC64LE9-NEXT: xxperm 34, 35, 0
2944 ; PC64LE9-NEXT: addi 1, 1, 64
2945 ; PC64LE9-NEXT: ld 0, 16(1)
2946 ; PC64LE9-NEXT: mtlr 0
2949 %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
2951 metadata !"round.dynamic",
2952 metadata !"fpexcept.strict") #1
2953 ret <3 x float> %exp
2956 define <3 x double> @constrained_vector_exp_v3f64(<3 x double> %x) #0 {
2957 ; PC64LE-LABEL: constrained_vector_exp_v3f64:
2958 ; PC64LE: # %bb.0: # %entry
2959 ; PC64LE-NEXT: mflr 0
2960 ; PC64LE-NEXT: stdu 1, -80(1)
2961 ; PC64LE-NEXT: li 3, 48
2962 ; PC64LE-NEXT: std 0, 96(1)
2963 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
2964 ; PC64LE-NEXT: fmr 30, 2
2965 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
2966 ; PC64LE-NEXT: fmr 31, 3
2967 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
2968 ; PC64LE-NEXT: bl exp
2970 ; PC64LE-NEXT: xxlor 63, 1, 1
2971 ; PC64LE-NEXT: fmr 1, 30
2972 ; PC64LE-NEXT: bl exp
2974 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
2975 ; PC64LE-NEXT: xxmrghd 63, 1, 63
2976 ; PC64LE-NEXT: fmr 1, 31
2977 ; PC64LE-NEXT: bl exp
2979 ; PC64LE-NEXT: li 3, 48
2980 ; PC64LE-NEXT: fmr 3, 1
2981 ; PC64LE-NEXT: xxswapd 1, 63
2982 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
2983 ; PC64LE-NEXT: xxlor 2, 63, 63
2984 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
2985 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
2986 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
2987 ; PC64LE-NEXT: addi 1, 1, 80
2988 ; PC64LE-NEXT: ld 0, 16(1)
2989 ; PC64LE-NEXT: mtlr 0
2992 ; PC64LE9-LABEL: constrained_vector_exp_v3f64:
2993 ; PC64LE9: # %bb.0: # %entry
2994 ; PC64LE9-NEXT: mflr 0
2995 ; PC64LE9-NEXT: stdu 1, -64(1)
2996 ; PC64LE9-NEXT: std 0, 80(1)
2997 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
2998 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
2999 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3000 ; PC64LE9-NEXT: fmr 31, 3
3001 ; PC64LE9-NEXT: fmr 30, 2
3002 ; PC64LE9-NEXT: bl exp
3004 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3005 ; PC64LE9-NEXT: fmr 1, 30
3006 ; PC64LE9-NEXT: bl exp
3008 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3009 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3010 ; PC64LE9-NEXT: fmr 1, 31
3011 ; PC64LE9-NEXT: bl exp
3013 ; PC64LE9-NEXT: fmr 3, 1
3014 ; PC64LE9-NEXT: xxswapd 1, 63
3015 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3016 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3017 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3018 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3019 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3020 ; PC64LE9-NEXT: addi 1, 1, 64
3021 ; PC64LE9-NEXT: ld 0, 16(1)
3022 ; PC64LE9-NEXT: mtlr 0
3025 %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
3027 metadata !"round.dynamic",
3028 metadata !"fpexcept.strict") #1
3029 ret <3 x double> %exp
3032 define <4 x double> @constrained_vector_exp_v4f64(<4 x double> %x) #0 {
3033 ; PC64LE-LABEL: constrained_vector_exp_v4f64:
3034 ; PC64LE: # %bb.0: # %entry
3035 ; PC64LE-NEXT: mflr 0
3036 ; PC64LE-NEXT: stdu 1, -96(1)
3037 ; PC64LE-NEXT: li 3, 48
3038 ; PC64LE-NEXT: std 0, 112(1)
3039 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3040 ; PC64LE-NEXT: li 3, 64
3041 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3042 ; PC64LE-NEXT: vmr 30, 2
3043 ; PC64LE-NEXT: li 3, 80
3044 ; PC64LE-NEXT: xxlor 1, 62, 62
3045 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3046 ; PC64LE-NEXT: vmr 31, 3
3047 ; PC64LE-NEXT: bl exp
3049 ; PC64LE-NEXT: xxlor 61, 1, 1
3050 ; PC64LE-NEXT: xxswapd 1, 62
3051 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3052 ; PC64LE-NEXT: bl exp
3054 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3055 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3056 ; PC64LE-NEXT: xxlor 1, 63, 63
3057 ; PC64LE-NEXT: bl exp
3059 ; PC64LE-NEXT: xxlor 61, 1, 1
3060 ; PC64LE-NEXT: xxswapd 1, 63
3061 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3062 ; PC64LE-NEXT: bl exp
3064 ; PC64LE-NEXT: li 3, 80
3065 ; PC64LE-NEXT: vmr 2, 30
3066 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3067 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3068 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3069 ; PC64LE-NEXT: li 3, 64
3070 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3071 ; PC64LE-NEXT: li 3, 48
3072 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3073 ; PC64LE-NEXT: addi 1, 1, 96
3074 ; PC64LE-NEXT: ld 0, 16(1)
3075 ; PC64LE-NEXT: mtlr 0
3078 ; PC64LE9-LABEL: constrained_vector_exp_v4f64:
3079 ; PC64LE9: # %bb.0: # %entry
3080 ; PC64LE9-NEXT: mflr 0
3081 ; PC64LE9-NEXT: stdu 1, -80(1)
3082 ; PC64LE9-NEXT: std 0, 96(1)
3083 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3084 ; PC64LE9-NEXT: vmr 30, 2
3085 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3086 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3087 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3088 ; PC64LE9-NEXT: vmr 31, 3
3089 ; PC64LE9-NEXT: bl exp
3091 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3092 ; PC64LE9-NEXT: xxswapd 1, 62
3093 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3094 ; PC64LE9-NEXT: bl exp
3096 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3097 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3098 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3099 ; PC64LE9-NEXT: bl exp
3101 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3102 ; PC64LE9-NEXT: xxswapd 1, 63
3103 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3104 ; PC64LE9-NEXT: bl exp
3106 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3107 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3108 ; PC64LE9-NEXT: vmr 2, 30
3109 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3110 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3111 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3112 ; PC64LE9-NEXT: addi 1, 1, 80
3113 ; PC64LE9-NEXT: ld 0, 16(1)
3114 ; PC64LE9-NEXT: mtlr 0
3117 %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64(
3119 metadata !"round.dynamic",
3120 metadata !"fpexcept.strict") #1
3121 ret <4 x double> %exp
3124 define <1 x float> @constrained_vector_exp2_v1f32(<1 x float> %x) #0 {
3125 ; PC64LE-LABEL: constrained_vector_exp2_v1f32:
3126 ; PC64LE: # %bb.0: # %entry
3127 ; PC64LE-NEXT: mflr 0
3128 ; PC64LE-NEXT: stdu 1, -32(1)
3129 ; PC64LE-NEXT: std 0, 48(1)
3130 ; PC64LE-NEXT: bl exp2f
3132 ; PC64LE-NEXT: addi 1, 1, 32
3133 ; PC64LE-NEXT: ld 0, 16(1)
3134 ; PC64LE-NEXT: mtlr 0
3137 ; PC64LE9-LABEL: constrained_vector_exp2_v1f32:
3138 ; PC64LE9: # %bb.0: # %entry
3139 ; PC64LE9-NEXT: mflr 0
3140 ; PC64LE9-NEXT: stdu 1, -32(1)
3141 ; PC64LE9-NEXT: std 0, 48(1)
3142 ; PC64LE9-NEXT: bl exp2f
3144 ; PC64LE9-NEXT: addi 1, 1, 32
3145 ; PC64LE9-NEXT: ld 0, 16(1)
3146 ; PC64LE9-NEXT: mtlr 0
3149 %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
3151 metadata !"round.dynamic",
3152 metadata !"fpexcept.strict") #1
3153 ret <1 x float> %exp2
3156 define <2 x double> @constrained_vector_exp2_v2f64(<2 x double> %x) #0 {
3157 ; PC64LE-LABEL: constrained_vector_exp2_v2f64:
3158 ; PC64LE: # %bb.0: # %entry
3159 ; PC64LE-NEXT: mflr 0
3160 ; PC64LE-NEXT: stdu 1, -80(1)
3161 ; PC64LE-NEXT: li 3, 48
3162 ; PC64LE-NEXT: std 0, 96(1)
3163 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3164 ; PC64LE-NEXT: li 3, 64
3165 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3166 ; PC64LE-NEXT: vmr 31, 2
3167 ; PC64LE-NEXT: xxlor 1, 63, 63
3168 ; PC64LE-NEXT: bl exp2
3170 ; PC64LE-NEXT: xxlor 62, 1, 1
3171 ; PC64LE-NEXT: xxswapd 1, 63
3172 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3173 ; PC64LE-NEXT: bl exp2
3175 ; PC64LE-NEXT: li 3, 64
3176 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3177 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3178 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3179 ; PC64LE-NEXT: li 3, 48
3180 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3181 ; PC64LE-NEXT: addi 1, 1, 80
3182 ; PC64LE-NEXT: ld 0, 16(1)
3183 ; PC64LE-NEXT: mtlr 0
3186 ; PC64LE9-LABEL: constrained_vector_exp2_v2f64:
3187 ; PC64LE9: # %bb.0: # %entry
3188 ; PC64LE9-NEXT: mflr 0
3189 ; PC64LE9-NEXT: stdu 1, -64(1)
3190 ; PC64LE9-NEXT: std 0, 80(1)
3191 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3192 ; PC64LE9-NEXT: vmr 31, 2
3193 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3194 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3195 ; PC64LE9-NEXT: bl exp2
3197 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3198 ; PC64LE9-NEXT: xxswapd 1, 63
3199 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3200 ; PC64LE9-NEXT: bl exp2
3202 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3203 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3204 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3205 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3206 ; PC64LE9-NEXT: addi 1, 1, 64
3207 ; PC64LE9-NEXT: ld 0, 16(1)
3208 ; PC64LE9-NEXT: mtlr 0
3211 %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
3213 metadata !"round.dynamic",
3214 metadata !"fpexcept.strict") #1
3215 ret <2 x double> %exp2
3218 define <3 x float> @constrained_vector_exp2_v3f32(<3 x float> %x) #0 {
3219 ; PC64LE-LABEL: constrained_vector_exp2_v3f32:
3220 ; PC64LE: # %bb.0: # %entry
3221 ; PC64LE-NEXT: mflr 0
3222 ; PC64LE-NEXT: stdu 1, -80(1)
3223 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3224 ; PC64LE-NEXT: li 3, 48
3225 ; PC64LE-NEXT: std 0, 96(1)
3226 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3227 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3228 ; PC64LE-NEXT: xscvspdpn 1, 0
3229 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3230 ; PC64LE-NEXT: vmr 31, 2
3231 ; PC64LE-NEXT: bl exp2f
3233 ; PC64LE-NEXT: xxswapd 0, 63
3234 ; PC64LE-NEXT: fmr 31, 1
3235 ; PC64LE-NEXT: xscvspdpn 1, 0
3236 ; PC64LE-NEXT: bl exp2f
3238 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3239 ; PC64LE-NEXT: fmr 30, 1
3240 ; PC64LE-NEXT: xscvspdpn 1, 0
3241 ; PC64LE-NEXT: bl exp2f
3243 ; PC64LE-NEXT: xscvdpspn 0, 1
3244 ; PC64LE-NEXT: xscvdpspn 1, 30
3245 ; PC64LE-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3246 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3247 ; PC64LE-NEXT: xscvdpspn 36, 31
3248 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3249 ; PC64LE-NEXT: addi 3, 3, .LCPI57_0@toc@l
3250 ; PC64LE-NEXT: xxmrghw 34, 1, 0
3251 ; PC64LE-NEXT: lxvd2x 0, 0, 3
3252 ; PC64LE-NEXT: li 3, 48
3253 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3254 ; PC64LE-NEXT: xxswapd 35, 0
3255 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3256 ; PC64LE-NEXT: addi 1, 1, 80
3257 ; PC64LE-NEXT: ld 0, 16(1)
3258 ; PC64LE-NEXT: mtlr 0
3261 ; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
3262 ; PC64LE9: # %bb.0: # %entry
3263 ; PC64LE9-NEXT: mflr 0
3264 ; PC64LE9-NEXT: stdu 1, -64(1)
3265 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3266 ; PC64LE9-NEXT: std 0, 80(1)
3267 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3268 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3269 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3270 ; PC64LE9-NEXT: vmr 31, 2
3271 ; PC64LE9-NEXT: xscvspdpn 1, 0
3272 ; PC64LE9-NEXT: bl exp2f
3274 ; PC64LE9-NEXT: xxswapd 0, 63
3275 ; PC64LE9-NEXT: fmr 31, 1
3276 ; PC64LE9-NEXT: xscvspdpn 1, 0
3277 ; PC64LE9-NEXT: bl exp2f
3279 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3280 ; PC64LE9-NEXT: fmr 30, 1
3281 ; PC64LE9-NEXT: xscvspdpn 1, 0
3282 ; PC64LE9-NEXT: bl exp2f
3284 ; PC64LE9-NEXT: xscvdpspn 0, 1
3285 ; PC64LE9-NEXT: xscvdpspn 1, 30
3286 ; PC64LE9-NEXT: addis 3, 2, .LCPI57_0@toc@ha
3287 ; PC64LE9-NEXT: xscvdpspn 34, 31
3288 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3289 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3290 ; PC64LE9-NEXT: addi 3, 3, .LCPI57_0@toc@l
3291 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3292 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
3293 ; PC64LE9-NEXT: lxv 0, 0(3)
3294 ; PC64LE9-NEXT: xxperm 34, 35, 0
3295 ; PC64LE9-NEXT: addi 1, 1, 64
3296 ; PC64LE9-NEXT: ld 0, 16(1)
3297 ; PC64LE9-NEXT: mtlr 0
3300 %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
3302 metadata !"round.dynamic",
3303 metadata !"fpexcept.strict") #1
3304 ret <3 x float> %exp2
3307 define <3 x double> @constrained_vector_exp2_v3f64(<3 x double> %x) #0 {
3308 ; PC64LE-LABEL: constrained_vector_exp2_v3f64:
3309 ; PC64LE: # %bb.0: # %entry
3310 ; PC64LE-NEXT: mflr 0
3311 ; PC64LE-NEXT: stdu 1, -80(1)
3312 ; PC64LE-NEXT: li 3, 48
3313 ; PC64LE-NEXT: std 0, 96(1)
3314 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3315 ; PC64LE-NEXT: fmr 30, 2
3316 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3317 ; PC64LE-NEXT: fmr 31, 3
3318 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3319 ; PC64LE-NEXT: bl exp2
3321 ; PC64LE-NEXT: xxlor 63, 1, 1
3322 ; PC64LE-NEXT: fmr 1, 30
3323 ; PC64LE-NEXT: bl exp2
3325 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3326 ; PC64LE-NEXT: xxmrghd 63, 1, 63
3327 ; PC64LE-NEXT: fmr 1, 31
3328 ; PC64LE-NEXT: bl exp2
3330 ; PC64LE-NEXT: li 3, 48
3331 ; PC64LE-NEXT: fmr 3, 1
3332 ; PC64LE-NEXT: xxswapd 1, 63
3333 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3334 ; PC64LE-NEXT: xxlor 2, 63, 63
3335 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3336 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3337 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3338 ; PC64LE-NEXT: addi 1, 1, 80
3339 ; PC64LE-NEXT: ld 0, 16(1)
3340 ; PC64LE-NEXT: mtlr 0
3343 ; PC64LE9-LABEL: constrained_vector_exp2_v3f64:
3344 ; PC64LE9: # %bb.0: # %entry
3345 ; PC64LE9-NEXT: mflr 0
3346 ; PC64LE9-NEXT: stdu 1, -64(1)
3347 ; PC64LE9-NEXT: std 0, 80(1)
3348 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3349 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3350 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3351 ; PC64LE9-NEXT: fmr 31, 3
3352 ; PC64LE9-NEXT: fmr 30, 2
3353 ; PC64LE9-NEXT: bl exp2
3355 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3356 ; PC64LE9-NEXT: fmr 1, 30
3357 ; PC64LE9-NEXT: bl exp2
3359 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3360 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3361 ; PC64LE9-NEXT: fmr 1, 31
3362 ; PC64LE9-NEXT: bl exp2
3364 ; PC64LE9-NEXT: fmr 3, 1
3365 ; PC64LE9-NEXT: xxswapd 1, 63
3366 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3367 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3368 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3369 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3370 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3371 ; PC64LE9-NEXT: addi 1, 1, 64
3372 ; PC64LE9-NEXT: ld 0, 16(1)
3373 ; PC64LE9-NEXT: mtlr 0
3376 %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
3378 metadata !"round.dynamic",
3379 metadata !"fpexcept.strict") #1
3380 ret <3 x double> %exp2
3383 define <4 x double> @constrained_vector_exp2_v4f64(<4 x double> %x) #0 {
3384 ; PC64LE-LABEL: constrained_vector_exp2_v4f64:
3385 ; PC64LE: # %bb.0: # %entry
3386 ; PC64LE-NEXT: mflr 0
3387 ; PC64LE-NEXT: stdu 1, -96(1)
3388 ; PC64LE-NEXT: li 3, 48
3389 ; PC64LE-NEXT: std 0, 112(1)
3390 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3391 ; PC64LE-NEXT: li 3, 64
3392 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3393 ; PC64LE-NEXT: vmr 30, 2
3394 ; PC64LE-NEXT: li 3, 80
3395 ; PC64LE-NEXT: xxlor 1, 62, 62
3396 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3397 ; PC64LE-NEXT: vmr 31, 3
3398 ; PC64LE-NEXT: bl exp2
3400 ; PC64LE-NEXT: xxlor 61, 1, 1
3401 ; PC64LE-NEXT: xxswapd 1, 62
3402 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3403 ; PC64LE-NEXT: bl exp2
3405 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3406 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3407 ; PC64LE-NEXT: xxlor 1, 63, 63
3408 ; PC64LE-NEXT: bl exp2
3410 ; PC64LE-NEXT: xxlor 61, 1, 1
3411 ; PC64LE-NEXT: xxswapd 1, 63
3412 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3413 ; PC64LE-NEXT: bl exp2
3415 ; PC64LE-NEXT: li 3, 80
3416 ; PC64LE-NEXT: vmr 2, 30
3417 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3418 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3419 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3420 ; PC64LE-NEXT: li 3, 64
3421 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3422 ; PC64LE-NEXT: li 3, 48
3423 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3424 ; PC64LE-NEXT: addi 1, 1, 96
3425 ; PC64LE-NEXT: ld 0, 16(1)
3426 ; PC64LE-NEXT: mtlr 0
3429 ; PC64LE9-LABEL: constrained_vector_exp2_v4f64:
3430 ; PC64LE9: # %bb.0: # %entry
3431 ; PC64LE9-NEXT: mflr 0
3432 ; PC64LE9-NEXT: stdu 1, -80(1)
3433 ; PC64LE9-NEXT: std 0, 96(1)
3434 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3435 ; PC64LE9-NEXT: vmr 30, 2
3436 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3437 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3438 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3439 ; PC64LE9-NEXT: vmr 31, 3
3440 ; PC64LE9-NEXT: bl exp2
3442 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3443 ; PC64LE9-NEXT: xxswapd 1, 62
3444 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3445 ; PC64LE9-NEXT: bl exp2
3447 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3448 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3449 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3450 ; PC64LE9-NEXT: bl exp2
3452 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3453 ; PC64LE9-NEXT: xxswapd 1, 63
3454 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3455 ; PC64LE9-NEXT: bl exp2
3457 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3458 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3459 ; PC64LE9-NEXT: vmr 2, 30
3460 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3461 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3462 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3463 ; PC64LE9-NEXT: addi 1, 1, 80
3464 ; PC64LE9-NEXT: ld 0, 16(1)
3465 ; PC64LE9-NEXT: mtlr 0
3468 %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64(
3470 metadata !"round.dynamic",
3471 metadata !"fpexcept.strict") #1
3472 ret <4 x double> %exp2
3475 define <1 x float> @constrained_vector_log_v1f32(<1 x float> %x) #0 {
3476 ; PC64LE-LABEL: constrained_vector_log_v1f32:
3477 ; PC64LE: # %bb.0: # %entry
3478 ; PC64LE-NEXT: mflr 0
3479 ; PC64LE-NEXT: stdu 1, -32(1)
3480 ; PC64LE-NEXT: std 0, 48(1)
3481 ; PC64LE-NEXT: bl logf
3483 ; PC64LE-NEXT: addi 1, 1, 32
3484 ; PC64LE-NEXT: ld 0, 16(1)
3485 ; PC64LE-NEXT: mtlr 0
3488 ; PC64LE9-LABEL: constrained_vector_log_v1f32:
3489 ; PC64LE9: # %bb.0: # %entry
3490 ; PC64LE9-NEXT: mflr 0
3491 ; PC64LE9-NEXT: stdu 1, -32(1)
3492 ; PC64LE9-NEXT: std 0, 48(1)
3493 ; PC64LE9-NEXT: bl logf
3495 ; PC64LE9-NEXT: addi 1, 1, 32
3496 ; PC64LE9-NEXT: ld 0, 16(1)
3497 ; PC64LE9-NEXT: mtlr 0
3500 %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
3502 metadata !"round.dynamic",
3503 metadata !"fpexcept.strict") #1
3504 ret <1 x float> %log
3507 define <2 x double> @constrained_vector_log_v2f64(<2 x double> %x) #0 {
3508 ; PC64LE-LABEL: constrained_vector_log_v2f64:
3509 ; PC64LE: # %bb.0: # %entry
3510 ; PC64LE-NEXT: mflr 0
3511 ; PC64LE-NEXT: stdu 1, -80(1)
3512 ; PC64LE-NEXT: li 3, 48
3513 ; PC64LE-NEXT: std 0, 96(1)
3514 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3515 ; PC64LE-NEXT: li 3, 64
3516 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3517 ; PC64LE-NEXT: vmr 31, 2
3518 ; PC64LE-NEXT: xxlor 1, 63, 63
3519 ; PC64LE-NEXT: bl log
3521 ; PC64LE-NEXT: xxlor 62, 1, 1
3522 ; PC64LE-NEXT: xxswapd 1, 63
3523 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3524 ; PC64LE-NEXT: bl log
3526 ; PC64LE-NEXT: li 3, 64
3527 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3528 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3529 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3530 ; PC64LE-NEXT: li 3, 48
3531 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3532 ; PC64LE-NEXT: addi 1, 1, 80
3533 ; PC64LE-NEXT: ld 0, 16(1)
3534 ; PC64LE-NEXT: mtlr 0
3537 ; PC64LE9-LABEL: constrained_vector_log_v2f64:
3538 ; PC64LE9: # %bb.0: # %entry
3539 ; PC64LE9-NEXT: mflr 0
3540 ; PC64LE9-NEXT: stdu 1, -64(1)
3541 ; PC64LE9-NEXT: std 0, 80(1)
3542 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3543 ; PC64LE9-NEXT: vmr 31, 2
3544 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3545 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3546 ; PC64LE9-NEXT: bl log
3548 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3549 ; PC64LE9-NEXT: xxswapd 1, 63
3550 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3551 ; PC64LE9-NEXT: bl log
3553 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3554 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3555 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3556 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3557 ; PC64LE9-NEXT: addi 1, 1, 64
3558 ; PC64LE9-NEXT: ld 0, 16(1)
3559 ; PC64LE9-NEXT: mtlr 0
3562 %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
3564 metadata !"round.dynamic",
3565 metadata !"fpexcept.strict") #1
3566 ret <2 x double> %log
3569 define <3 x float> @constrained_vector_log_v3f32(<3 x float> %x) #0 {
3570 ; PC64LE-LABEL: constrained_vector_log_v3f32:
3571 ; PC64LE: # %bb.0: # %entry
3572 ; PC64LE-NEXT: mflr 0
3573 ; PC64LE-NEXT: stdu 1, -80(1)
3574 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3575 ; PC64LE-NEXT: li 3, 48
3576 ; PC64LE-NEXT: std 0, 96(1)
3577 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3578 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3579 ; PC64LE-NEXT: xscvspdpn 1, 0
3580 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3581 ; PC64LE-NEXT: vmr 31, 2
3582 ; PC64LE-NEXT: bl logf
3584 ; PC64LE-NEXT: xxswapd 0, 63
3585 ; PC64LE-NEXT: fmr 31, 1
3586 ; PC64LE-NEXT: xscvspdpn 1, 0
3587 ; PC64LE-NEXT: bl logf
3589 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3590 ; PC64LE-NEXT: fmr 30, 1
3591 ; PC64LE-NEXT: xscvspdpn 1, 0
3592 ; PC64LE-NEXT: bl logf
3594 ; PC64LE-NEXT: xscvdpspn 0, 1
3595 ; PC64LE-NEXT: xscvdpspn 1, 30
3596 ; PC64LE-NEXT: addis 3, 2, .LCPI62_0@toc@ha
3597 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3598 ; PC64LE-NEXT: xscvdpspn 36, 31
3599 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3600 ; PC64LE-NEXT: addi 3, 3, .LCPI62_0@toc@l
3601 ; PC64LE-NEXT: xxmrghw 34, 1, 0
3602 ; PC64LE-NEXT: lxvd2x 0, 0, 3
3603 ; PC64LE-NEXT: li 3, 48
3604 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3605 ; PC64LE-NEXT: xxswapd 35, 0
3606 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3607 ; PC64LE-NEXT: addi 1, 1, 80
3608 ; PC64LE-NEXT: ld 0, 16(1)
3609 ; PC64LE-NEXT: mtlr 0
3612 ; PC64LE9-LABEL: constrained_vector_log_v3f32:
3613 ; PC64LE9: # %bb.0: # %entry
3614 ; PC64LE9-NEXT: mflr 0
3615 ; PC64LE9-NEXT: stdu 1, -64(1)
3616 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3617 ; PC64LE9-NEXT: std 0, 80(1)
3618 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3619 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3620 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3621 ; PC64LE9-NEXT: vmr 31, 2
3622 ; PC64LE9-NEXT: xscvspdpn 1, 0
3623 ; PC64LE9-NEXT: bl logf
3625 ; PC64LE9-NEXT: xxswapd 0, 63
3626 ; PC64LE9-NEXT: fmr 31, 1
3627 ; PC64LE9-NEXT: xscvspdpn 1, 0
3628 ; PC64LE9-NEXT: bl logf
3630 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3631 ; PC64LE9-NEXT: fmr 30, 1
3632 ; PC64LE9-NEXT: xscvspdpn 1, 0
3633 ; PC64LE9-NEXT: bl logf
3635 ; PC64LE9-NEXT: xscvdpspn 0, 1
3636 ; PC64LE9-NEXT: xscvdpspn 1, 30
3637 ; PC64LE9-NEXT: addis 3, 2, .LCPI62_0@toc@ha
3638 ; PC64LE9-NEXT: xscvdpspn 34, 31
3639 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3640 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3641 ; PC64LE9-NEXT: addi 3, 3, .LCPI62_0@toc@l
3642 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3643 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
3644 ; PC64LE9-NEXT: lxv 0, 0(3)
3645 ; PC64LE9-NEXT: xxperm 34, 35, 0
3646 ; PC64LE9-NEXT: addi 1, 1, 64
3647 ; PC64LE9-NEXT: ld 0, 16(1)
3648 ; PC64LE9-NEXT: mtlr 0
3651 %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
3653 metadata !"round.dynamic",
3654 metadata !"fpexcept.strict") #1
3655 ret <3 x float> %log
3658 define <3 x double> @constrained_vector_log_v3f64(<3 x double> %x) #0 {
3659 ; PC64LE-LABEL: constrained_vector_log_v3f64:
3660 ; PC64LE: # %bb.0: # %entry
3661 ; PC64LE-NEXT: mflr 0
3662 ; PC64LE-NEXT: stdu 1, -80(1)
3663 ; PC64LE-NEXT: li 3, 48
3664 ; PC64LE-NEXT: std 0, 96(1)
3665 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3666 ; PC64LE-NEXT: fmr 30, 2
3667 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3668 ; PC64LE-NEXT: fmr 31, 3
3669 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3670 ; PC64LE-NEXT: bl log
3672 ; PC64LE-NEXT: xxlor 63, 1, 1
3673 ; PC64LE-NEXT: fmr 1, 30
3674 ; PC64LE-NEXT: bl log
3676 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3677 ; PC64LE-NEXT: xxmrghd 63, 1, 63
3678 ; PC64LE-NEXT: fmr 1, 31
3679 ; PC64LE-NEXT: bl log
3681 ; PC64LE-NEXT: li 3, 48
3682 ; PC64LE-NEXT: fmr 3, 1
3683 ; PC64LE-NEXT: xxswapd 1, 63
3684 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3685 ; PC64LE-NEXT: xxlor 2, 63, 63
3686 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3687 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3688 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3689 ; PC64LE-NEXT: addi 1, 1, 80
3690 ; PC64LE-NEXT: ld 0, 16(1)
3691 ; PC64LE-NEXT: mtlr 0
3694 ; PC64LE9-LABEL: constrained_vector_log_v3f64:
3695 ; PC64LE9: # %bb.0: # %entry
3696 ; PC64LE9-NEXT: mflr 0
3697 ; PC64LE9-NEXT: stdu 1, -64(1)
3698 ; PC64LE9-NEXT: std 0, 80(1)
3699 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3700 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3701 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3702 ; PC64LE9-NEXT: fmr 31, 3
3703 ; PC64LE9-NEXT: fmr 30, 2
3704 ; PC64LE9-NEXT: bl log
3706 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
3707 ; PC64LE9-NEXT: fmr 1, 30
3708 ; PC64LE9-NEXT: bl log
3710 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3711 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
3712 ; PC64LE9-NEXT: fmr 1, 31
3713 ; PC64LE9-NEXT: bl log
3715 ; PC64LE9-NEXT: fmr 3, 1
3716 ; PC64LE9-NEXT: xxswapd 1, 63
3717 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
3718 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3719 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3720 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3721 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3722 ; PC64LE9-NEXT: addi 1, 1, 64
3723 ; PC64LE9-NEXT: ld 0, 16(1)
3724 ; PC64LE9-NEXT: mtlr 0
3727 %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
3729 metadata !"round.dynamic",
3730 metadata !"fpexcept.strict") #1
3731 ret <3 x double> %log
3734 define <4 x double> @constrained_vector_log_v4f64(<4 x double> %x) #0 {
3735 ; PC64LE-LABEL: constrained_vector_log_v4f64:
3736 ; PC64LE: # %bb.0: # %entry
3737 ; PC64LE-NEXT: mflr 0
3738 ; PC64LE-NEXT: stdu 1, -96(1)
3739 ; PC64LE-NEXT: li 3, 48
3740 ; PC64LE-NEXT: std 0, 112(1)
3741 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
3742 ; PC64LE-NEXT: li 3, 64
3743 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3744 ; PC64LE-NEXT: vmr 30, 2
3745 ; PC64LE-NEXT: li 3, 80
3746 ; PC64LE-NEXT: xxlor 1, 62, 62
3747 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3748 ; PC64LE-NEXT: vmr 31, 3
3749 ; PC64LE-NEXT: bl log
3751 ; PC64LE-NEXT: xxlor 61, 1, 1
3752 ; PC64LE-NEXT: xxswapd 1, 62
3753 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3754 ; PC64LE-NEXT: bl log
3756 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3757 ; PC64LE-NEXT: xxmrghd 62, 61, 1
3758 ; PC64LE-NEXT: xxlor 1, 63, 63
3759 ; PC64LE-NEXT: bl log
3761 ; PC64LE-NEXT: xxlor 61, 1, 1
3762 ; PC64LE-NEXT: xxswapd 1, 63
3763 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3764 ; PC64LE-NEXT: bl log
3766 ; PC64LE-NEXT: li 3, 80
3767 ; PC64LE-NEXT: vmr 2, 30
3768 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3769 ; PC64LE-NEXT: xxmrghd 35, 61, 1
3770 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3771 ; PC64LE-NEXT: li 3, 64
3772 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3773 ; PC64LE-NEXT: li 3, 48
3774 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
3775 ; PC64LE-NEXT: addi 1, 1, 96
3776 ; PC64LE-NEXT: ld 0, 16(1)
3777 ; PC64LE-NEXT: mtlr 0
3780 ; PC64LE9-LABEL: constrained_vector_log_v4f64:
3781 ; PC64LE9: # %bb.0: # %entry
3782 ; PC64LE9-NEXT: mflr 0
3783 ; PC64LE9-NEXT: stdu 1, -80(1)
3784 ; PC64LE9-NEXT: std 0, 96(1)
3785 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
3786 ; PC64LE9-NEXT: vmr 30, 2
3787 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
3788 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
3789 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
3790 ; PC64LE9-NEXT: vmr 31, 3
3791 ; PC64LE9-NEXT: bl log
3793 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3794 ; PC64LE9-NEXT: xxswapd 1, 62
3795 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3796 ; PC64LE9-NEXT: bl log
3798 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3799 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
3800 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3801 ; PC64LE9-NEXT: bl log
3803 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
3804 ; PC64LE9-NEXT: xxswapd 1, 63
3805 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3806 ; PC64LE9-NEXT: bl log
3808 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3809 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
3810 ; PC64LE9-NEXT: vmr 2, 30
3811 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
3812 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
3813 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
3814 ; PC64LE9-NEXT: addi 1, 1, 80
3815 ; PC64LE9-NEXT: ld 0, 16(1)
3816 ; PC64LE9-NEXT: mtlr 0
3819 %log = call <4 x double> @llvm.experimental.constrained.log.v4f64(
3821 metadata !"round.dynamic",
3822 metadata !"fpexcept.strict") #1
3823 ret <4 x double> %log
3826 define <1 x float> @constrained_vector_log10_v1f32(<1 x float> %x) #0 {
3827 ; PC64LE-LABEL: constrained_vector_log10_v1f32:
3828 ; PC64LE: # %bb.0: # %entry
3829 ; PC64LE-NEXT: mflr 0
3830 ; PC64LE-NEXT: stdu 1, -32(1)
3831 ; PC64LE-NEXT: std 0, 48(1)
3832 ; PC64LE-NEXT: bl log10f
3834 ; PC64LE-NEXT: addi 1, 1, 32
3835 ; PC64LE-NEXT: ld 0, 16(1)
3836 ; PC64LE-NEXT: mtlr 0
3839 ; PC64LE9-LABEL: constrained_vector_log10_v1f32:
3840 ; PC64LE9: # %bb.0: # %entry
3841 ; PC64LE9-NEXT: mflr 0
3842 ; PC64LE9-NEXT: stdu 1, -32(1)
3843 ; PC64LE9-NEXT: std 0, 48(1)
3844 ; PC64LE9-NEXT: bl log10f
3846 ; PC64LE9-NEXT: addi 1, 1, 32
3847 ; PC64LE9-NEXT: ld 0, 16(1)
3848 ; PC64LE9-NEXT: mtlr 0
3851 %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
3853 metadata !"round.dynamic",
3854 metadata !"fpexcept.strict") #1
3855 ret <1 x float> %log10
3858 define <2 x double> @constrained_vector_log10_v2f64(<2 x double> %x) #0 {
3859 ; PC64LE-LABEL: constrained_vector_log10_v2f64:
3860 ; PC64LE: # %bb.0: # %entry
3861 ; PC64LE-NEXT: mflr 0
3862 ; PC64LE-NEXT: stdu 1, -80(1)
3863 ; PC64LE-NEXT: li 3, 48
3864 ; PC64LE-NEXT: std 0, 96(1)
3865 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
3866 ; PC64LE-NEXT: li 3, 64
3867 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3868 ; PC64LE-NEXT: vmr 31, 2
3869 ; PC64LE-NEXT: xxlor 1, 63, 63
3870 ; PC64LE-NEXT: bl log10
3872 ; PC64LE-NEXT: xxlor 62, 1, 1
3873 ; PC64LE-NEXT: xxswapd 1, 63
3874 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3875 ; PC64LE-NEXT: bl log10
3877 ; PC64LE-NEXT: li 3, 64
3878 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
3879 ; PC64LE-NEXT: xxmrghd 34, 62, 1
3880 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3881 ; PC64LE-NEXT: li 3, 48
3882 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
3883 ; PC64LE-NEXT: addi 1, 1, 80
3884 ; PC64LE-NEXT: ld 0, 16(1)
3885 ; PC64LE-NEXT: mtlr 0
3888 ; PC64LE9-LABEL: constrained_vector_log10_v2f64:
3889 ; PC64LE9: # %bb.0: # %entry
3890 ; PC64LE9-NEXT: mflr 0
3891 ; PC64LE9-NEXT: stdu 1, -64(1)
3892 ; PC64LE9-NEXT: std 0, 80(1)
3893 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
3894 ; PC64LE9-NEXT: vmr 31, 2
3895 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
3896 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
3897 ; PC64LE9-NEXT: bl log10
3899 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
3900 ; PC64LE9-NEXT: xxswapd 1, 63
3901 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
3902 ; PC64LE9-NEXT: bl log10
3904 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
3905 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
3906 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
3907 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
3908 ; PC64LE9-NEXT: addi 1, 1, 64
3909 ; PC64LE9-NEXT: ld 0, 16(1)
3910 ; PC64LE9-NEXT: mtlr 0
3913 %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
3915 metadata !"round.dynamic",
3916 metadata !"fpexcept.strict") #1
3917 ret <2 x double> %log10
3920 define <3 x float> @constrained_vector_log10_v3f32(<3 x float> %x) #0 {
3921 ; PC64LE-LABEL: constrained_vector_log10_v3f32:
3922 ; PC64LE: # %bb.0: # %entry
3923 ; PC64LE-NEXT: mflr 0
3924 ; PC64LE-NEXT: stdu 1, -80(1)
3925 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
3926 ; PC64LE-NEXT: li 3, 48
3927 ; PC64LE-NEXT: std 0, 96(1)
3928 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
3929 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
3930 ; PC64LE-NEXT: xscvspdpn 1, 0
3931 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
3932 ; PC64LE-NEXT: vmr 31, 2
3933 ; PC64LE-NEXT: bl log10f
3935 ; PC64LE-NEXT: xxswapd 0, 63
3936 ; PC64LE-NEXT: fmr 31, 1
3937 ; PC64LE-NEXT: xscvspdpn 1, 0
3938 ; PC64LE-NEXT: bl log10f
3940 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
3941 ; PC64LE-NEXT: fmr 30, 1
3942 ; PC64LE-NEXT: xscvspdpn 1, 0
3943 ; PC64LE-NEXT: bl log10f
3945 ; PC64LE-NEXT: xscvdpspn 0, 1
3946 ; PC64LE-NEXT: xscvdpspn 1, 30
3947 ; PC64LE-NEXT: addis 3, 2, .LCPI67_0@toc@ha
3948 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
3949 ; PC64LE-NEXT: xscvdpspn 36, 31
3950 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
3951 ; PC64LE-NEXT: addi 3, 3, .LCPI67_0@toc@l
3952 ; PC64LE-NEXT: xxmrghw 34, 1, 0
3953 ; PC64LE-NEXT: lxvd2x 0, 0, 3
3954 ; PC64LE-NEXT: li 3, 48
3955 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
3956 ; PC64LE-NEXT: xxswapd 35, 0
3957 ; PC64LE-NEXT: vperm 2, 4, 2, 3
3958 ; PC64LE-NEXT: addi 1, 1, 80
3959 ; PC64LE-NEXT: ld 0, 16(1)
3960 ; PC64LE-NEXT: mtlr 0
3963 ; PC64LE9-LABEL: constrained_vector_log10_v3f32:
3964 ; PC64LE9: # %bb.0: # %entry
3965 ; PC64LE9-NEXT: mflr 0
3966 ; PC64LE9-NEXT: stdu 1, -64(1)
3967 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
3968 ; PC64LE9-NEXT: std 0, 80(1)
3969 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
3970 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
3971 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
3972 ; PC64LE9-NEXT: vmr 31, 2
3973 ; PC64LE9-NEXT: xscvspdpn 1, 0
3974 ; PC64LE9-NEXT: bl log10f
3976 ; PC64LE9-NEXT: xxswapd 0, 63
3977 ; PC64LE9-NEXT: fmr 31, 1
3978 ; PC64LE9-NEXT: xscvspdpn 1, 0
3979 ; PC64LE9-NEXT: bl log10f
3981 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
3982 ; PC64LE9-NEXT: fmr 30, 1
3983 ; PC64LE9-NEXT: xscvspdpn 1, 0
3984 ; PC64LE9-NEXT: bl log10f
3986 ; PC64LE9-NEXT: xscvdpspn 0, 1
3987 ; PC64LE9-NEXT: xscvdpspn 1, 30
3988 ; PC64LE9-NEXT: addis 3, 2, .LCPI67_0@toc@ha
3989 ; PC64LE9-NEXT: xscvdpspn 34, 31
3990 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
3991 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
3992 ; PC64LE9-NEXT: addi 3, 3, .LCPI67_0@toc@l
3993 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
3994 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
3995 ; PC64LE9-NEXT: lxv 0, 0(3)
3996 ; PC64LE9-NEXT: xxperm 34, 35, 0
3997 ; PC64LE9-NEXT: addi 1, 1, 64
3998 ; PC64LE9-NEXT: ld 0, 16(1)
3999 ; PC64LE9-NEXT: mtlr 0
4002 %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
4004 metadata !"round.dynamic",
4005 metadata !"fpexcept.strict") #1
4006 ret <3 x float> %log10
4009 define <3 x double> @constrained_vector_log10_v3f64(<3 x double> %x) #0 {
4010 ; PC64LE-LABEL: constrained_vector_log10_v3f64:
4011 ; PC64LE: # %bb.0: # %entry
4012 ; PC64LE-NEXT: mflr 0
4013 ; PC64LE-NEXT: stdu 1, -80(1)
4014 ; PC64LE-NEXT: li 3, 48
4015 ; PC64LE-NEXT: std 0, 96(1)
4016 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4017 ; PC64LE-NEXT: fmr 30, 2
4018 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4019 ; PC64LE-NEXT: fmr 31, 3
4020 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4021 ; PC64LE-NEXT: bl log10
4023 ; PC64LE-NEXT: xxlor 63, 1, 1
4024 ; PC64LE-NEXT: fmr 1, 30
4025 ; PC64LE-NEXT: bl log10
4027 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4028 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4029 ; PC64LE-NEXT: fmr 1, 31
4030 ; PC64LE-NEXT: bl log10
4032 ; PC64LE-NEXT: li 3, 48
4033 ; PC64LE-NEXT: fmr 3, 1
4034 ; PC64LE-NEXT: xxswapd 1, 63
4035 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4036 ; PC64LE-NEXT: xxlor 2, 63, 63
4037 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4038 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4039 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4040 ; PC64LE-NEXT: addi 1, 1, 80
4041 ; PC64LE-NEXT: ld 0, 16(1)
4042 ; PC64LE-NEXT: mtlr 0
4045 ; PC64LE9-LABEL: constrained_vector_log10_v3f64:
4046 ; PC64LE9: # %bb.0: # %entry
4047 ; PC64LE9-NEXT: mflr 0
4048 ; PC64LE9-NEXT: stdu 1, -64(1)
4049 ; PC64LE9-NEXT: std 0, 80(1)
4050 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4051 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4052 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4053 ; PC64LE9-NEXT: fmr 31, 3
4054 ; PC64LE9-NEXT: fmr 30, 2
4055 ; PC64LE9-NEXT: bl log10
4057 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4058 ; PC64LE9-NEXT: fmr 1, 30
4059 ; PC64LE9-NEXT: bl log10
4061 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4062 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4063 ; PC64LE9-NEXT: fmr 1, 31
4064 ; PC64LE9-NEXT: bl log10
4066 ; PC64LE9-NEXT: fmr 3, 1
4067 ; PC64LE9-NEXT: xxswapd 1, 63
4068 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4069 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4070 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4071 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4072 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4073 ; PC64LE9-NEXT: addi 1, 1, 64
4074 ; PC64LE9-NEXT: ld 0, 16(1)
4075 ; PC64LE9-NEXT: mtlr 0
4078 %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
4080 metadata !"round.dynamic",
4081 metadata !"fpexcept.strict") #1
4082 ret <3 x double> %log10
4085 define <4 x double> @constrained_vector_log10_v4f64(<4 x double> %x) #0 {
4086 ; PC64LE-LABEL: constrained_vector_log10_v4f64:
4087 ; PC64LE: # %bb.0: # %entry
4088 ; PC64LE-NEXT: mflr 0
4089 ; PC64LE-NEXT: stdu 1, -96(1)
4090 ; PC64LE-NEXT: li 3, 48
4091 ; PC64LE-NEXT: std 0, 112(1)
4092 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4093 ; PC64LE-NEXT: li 3, 64
4094 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4095 ; PC64LE-NEXT: vmr 30, 2
4096 ; PC64LE-NEXT: li 3, 80
4097 ; PC64LE-NEXT: xxlor 1, 62, 62
4098 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4099 ; PC64LE-NEXT: vmr 31, 3
4100 ; PC64LE-NEXT: bl log10
4102 ; PC64LE-NEXT: xxlor 61, 1, 1
4103 ; PC64LE-NEXT: xxswapd 1, 62
4104 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4105 ; PC64LE-NEXT: bl log10
4107 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4108 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4109 ; PC64LE-NEXT: xxlor 1, 63, 63
4110 ; PC64LE-NEXT: bl log10
4112 ; PC64LE-NEXT: xxlor 61, 1, 1
4113 ; PC64LE-NEXT: xxswapd 1, 63
4114 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4115 ; PC64LE-NEXT: bl log10
4117 ; PC64LE-NEXT: li 3, 80
4118 ; PC64LE-NEXT: vmr 2, 30
4119 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4120 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4121 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4122 ; PC64LE-NEXT: li 3, 64
4123 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4124 ; PC64LE-NEXT: li 3, 48
4125 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4126 ; PC64LE-NEXT: addi 1, 1, 96
4127 ; PC64LE-NEXT: ld 0, 16(1)
4128 ; PC64LE-NEXT: mtlr 0
4131 ; PC64LE9-LABEL: constrained_vector_log10_v4f64:
4132 ; PC64LE9: # %bb.0: # %entry
4133 ; PC64LE9-NEXT: mflr 0
4134 ; PC64LE9-NEXT: stdu 1, -80(1)
4135 ; PC64LE9-NEXT: std 0, 96(1)
4136 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4137 ; PC64LE9-NEXT: vmr 30, 2
4138 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4139 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4140 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4141 ; PC64LE9-NEXT: vmr 31, 3
4142 ; PC64LE9-NEXT: bl log10
4144 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4145 ; PC64LE9-NEXT: xxswapd 1, 62
4146 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4147 ; PC64LE9-NEXT: bl log10
4149 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4150 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4151 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4152 ; PC64LE9-NEXT: bl log10
4154 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4155 ; PC64LE9-NEXT: xxswapd 1, 63
4156 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4157 ; PC64LE9-NEXT: bl log10
4159 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4160 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
4161 ; PC64LE9-NEXT: vmr 2, 30
4162 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
4163 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
4164 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
4165 ; PC64LE9-NEXT: addi 1, 1, 80
4166 ; PC64LE9-NEXT: ld 0, 16(1)
4167 ; PC64LE9-NEXT: mtlr 0
4170 %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64(
4172 metadata !"round.dynamic",
4173 metadata !"fpexcept.strict") #1
4174 ret <4 x double> %log10
4177 define <1 x float> @constrained_vector_log2_v1f32(<1 x float> %x) #0 {
4178 ; PC64LE-LABEL: constrained_vector_log2_v1f32:
4179 ; PC64LE: # %bb.0: # %entry
4180 ; PC64LE-NEXT: mflr 0
4181 ; PC64LE-NEXT: stdu 1, -32(1)
4182 ; PC64LE-NEXT: std 0, 48(1)
4183 ; PC64LE-NEXT: bl log2f
4185 ; PC64LE-NEXT: addi 1, 1, 32
4186 ; PC64LE-NEXT: ld 0, 16(1)
4187 ; PC64LE-NEXT: mtlr 0
4190 ; PC64LE9-LABEL: constrained_vector_log2_v1f32:
4191 ; PC64LE9: # %bb.0: # %entry
4192 ; PC64LE9-NEXT: mflr 0
4193 ; PC64LE9-NEXT: stdu 1, -32(1)
4194 ; PC64LE9-NEXT: std 0, 48(1)
4195 ; PC64LE9-NEXT: bl log2f
4197 ; PC64LE9-NEXT: addi 1, 1, 32
4198 ; PC64LE9-NEXT: ld 0, 16(1)
4199 ; PC64LE9-NEXT: mtlr 0
4202 %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
4204 metadata !"round.dynamic",
4205 metadata !"fpexcept.strict") #1
4206 ret <1 x float> %log2
4209 define <2 x double> @constrained_vector_log2_v2f64(<2 x double> %x) #0 {
4210 ; PC64LE-LABEL: constrained_vector_log2_v2f64:
4211 ; PC64LE: # %bb.0: # %entry
4212 ; PC64LE-NEXT: mflr 0
4213 ; PC64LE-NEXT: stdu 1, -80(1)
4214 ; PC64LE-NEXT: li 3, 48
4215 ; PC64LE-NEXT: std 0, 96(1)
4216 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4217 ; PC64LE-NEXT: li 3, 64
4218 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4219 ; PC64LE-NEXT: vmr 31, 2
4220 ; PC64LE-NEXT: xxlor 1, 63, 63
4221 ; PC64LE-NEXT: bl log2
4223 ; PC64LE-NEXT: xxlor 62, 1, 1
4224 ; PC64LE-NEXT: xxswapd 1, 63
4225 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4226 ; PC64LE-NEXT: bl log2
4228 ; PC64LE-NEXT: li 3, 64
4229 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4230 ; PC64LE-NEXT: xxmrghd 34, 62, 1
4231 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4232 ; PC64LE-NEXT: li 3, 48
4233 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4234 ; PC64LE-NEXT: addi 1, 1, 80
4235 ; PC64LE-NEXT: ld 0, 16(1)
4236 ; PC64LE-NEXT: mtlr 0
4239 ; PC64LE9-LABEL: constrained_vector_log2_v2f64:
4240 ; PC64LE9: # %bb.0: # %entry
4241 ; PC64LE9-NEXT: mflr 0
4242 ; PC64LE9-NEXT: stdu 1, -64(1)
4243 ; PC64LE9-NEXT: std 0, 80(1)
4244 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4245 ; PC64LE9-NEXT: vmr 31, 2
4246 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4247 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
4248 ; PC64LE9-NEXT: bl log2
4250 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
4251 ; PC64LE9-NEXT: xxswapd 1, 63
4252 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4253 ; PC64LE9-NEXT: bl log2
4255 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4256 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
4257 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4258 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
4259 ; PC64LE9-NEXT: addi 1, 1, 64
4260 ; PC64LE9-NEXT: ld 0, 16(1)
4261 ; PC64LE9-NEXT: mtlr 0
4264 %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
4266 metadata !"round.dynamic",
4267 metadata !"fpexcept.strict") #1
4268 ret <2 x double> %log2
4271 define <3 x float> @constrained_vector_log2_v3f32(<3 x float> %x) #0 {
4272 ; PC64LE-LABEL: constrained_vector_log2_v3f32:
4273 ; PC64LE: # %bb.0: # %entry
4274 ; PC64LE-NEXT: mflr 0
4275 ; PC64LE-NEXT: stdu 1, -80(1)
4276 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
4277 ; PC64LE-NEXT: li 3, 48
4278 ; PC64LE-NEXT: std 0, 96(1)
4279 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4280 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4281 ; PC64LE-NEXT: xscvspdpn 1, 0
4282 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4283 ; PC64LE-NEXT: vmr 31, 2
4284 ; PC64LE-NEXT: bl log2f
4286 ; PC64LE-NEXT: xxswapd 0, 63
4287 ; PC64LE-NEXT: fmr 31, 1
4288 ; PC64LE-NEXT: xscvspdpn 1, 0
4289 ; PC64LE-NEXT: bl log2f
4291 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
4292 ; PC64LE-NEXT: fmr 30, 1
4293 ; PC64LE-NEXT: xscvspdpn 1, 0
4294 ; PC64LE-NEXT: bl log2f
4296 ; PC64LE-NEXT: xscvdpspn 0, 1
4297 ; PC64LE-NEXT: xscvdpspn 1, 30
4298 ; PC64LE-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4299 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4300 ; PC64LE-NEXT: xscvdpspn 36, 31
4301 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4302 ; PC64LE-NEXT: addi 3, 3, .LCPI72_0@toc@l
4303 ; PC64LE-NEXT: xxmrghw 34, 1, 0
4304 ; PC64LE-NEXT: lxvd2x 0, 0, 3
4305 ; PC64LE-NEXT: li 3, 48
4306 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4307 ; PC64LE-NEXT: xxswapd 35, 0
4308 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4309 ; PC64LE-NEXT: addi 1, 1, 80
4310 ; PC64LE-NEXT: ld 0, 16(1)
4311 ; PC64LE-NEXT: mtlr 0
4314 ; PC64LE9-LABEL: constrained_vector_log2_v3f32:
4315 ; PC64LE9: # %bb.0: # %entry
4316 ; PC64LE9-NEXT: mflr 0
4317 ; PC64LE9-NEXT: stdu 1, -64(1)
4318 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4319 ; PC64LE9-NEXT: std 0, 80(1)
4320 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4321 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4322 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4323 ; PC64LE9-NEXT: vmr 31, 2
4324 ; PC64LE9-NEXT: xscvspdpn 1, 0
4325 ; PC64LE9-NEXT: bl log2f
4327 ; PC64LE9-NEXT: xxswapd 0, 63
4328 ; PC64LE9-NEXT: fmr 31, 1
4329 ; PC64LE9-NEXT: xscvspdpn 1, 0
4330 ; PC64LE9-NEXT: bl log2f
4332 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
4333 ; PC64LE9-NEXT: fmr 30, 1
4334 ; PC64LE9-NEXT: xscvspdpn 1, 0
4335 ; PC64LE9-NEXT: bl log2f
4337 ; PC64LE9-NEXT: xscvdpspn 0, 1
4338 ; PC64LE9-NEXT: xscvdpspn 1, 30
4339 ; PC64LE9-NEXT: addis 3, 2, .LCPI72_0@toc@ha
4340 ; PC64LE9-NEXT: xscvdpspn 34, 31
4341 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4342 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4343 ; PC64LE9-NEXT: addi 3, 3, .LCPI72_0@toc@l
4344 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4345 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
4346 ; PC64LE9-NEXT: lxv 0, 0(3)
4347 ; PC64LE9-NEXT: xxperm 34, 35, 0
4348 ; PC64LE9-NEXT: addi 1, 1, 64
4349 ; PC64LE9-NEXT: ld 0, 16(1)
4350 ; PC64LE9-NEXT: mtlr 0
4353 %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
4355 metadata !"round.dynamic",
4356 metadata !"fpexcept.strict") #1
4357 ret <3 x float> %log2
4360 define <3 x double> @constrained_vector_log2_v3f64(<3 x double> %x) #0 {
4361 ; PC64LE-LABEL: constrained_vector_log2_v3f64:
4362 ; PC64LE: # %bb.0: # %entry
4363 ; PC64LE-NEXT: mflr 0
4364 ; PC64LE-NEXT: stdu 1, -80(1)
4365 ; PC64LE-NEXT: li 3, 48
4366 ; PC64LE-NEXT: std 0, 96(1)
4367 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4368 ; PC64LE-NEXT: fmr 30, 2
4369 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4370 ; PC64LE-NEXT: fmr 31, 3
4371 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4372 ; PC64LE-NEXT: bl log2
4374 ; PC64LE-NEXT: xxlor 63, 1, 1
4375 ; PC64LE-NEXT: fmr 1, 30
4376 ; PC64LE-NEXT: bl log2
4378 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4379 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4380 ; PC64LE-NEXT: fmr 1, 31
4381 ; PC64LE-NEXT: bl log2
4383 ; PC64LE-NEXT: li 3, 48
4384 ; PC64LE-NEXT: fmr 3, 1
4385 ; PC64LE-NEXT: xxswapd 1, 63
4386 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4387 ; PC64LE-NEXT: xxlor 2, 63, 63
4388 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4389 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4390 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4391 ; PC64LE-NEXT: addi 1, 1, 80
4392 ; PC64LE-NEXT: ld 0, 16(1)
4393 ; PC64LE-NEXT: mtlr 0
4396 ; PC64LE9-LABEL: constrained_vector_log2_v3f64:
4397 ; PC64LE9: # %bb.0: # %entry
4398 ; PC64LE9-NEXT: mflr 0
4399 ; PC64LE9-NEXT: stdu 1, -64(1)
4400 ; PC64LE9-NEXT: std 0, 80(1)
4401 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4402 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4403 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4404 ; PC64LE9-NEXT: fmr 31, 3
4405 ; PC64LE9-NEXT: fmr 30, 2
4406 ; PC64LE9-NEXT: bl log2
4408 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4409 ; PC64LE9-NEXT: fmr 1, 30
4410 ; PC64LE9-NEXT: bl log2
4412 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4413 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4414 ; PC64LE9-NEXT: fmr 1, 31
4415 ; PC64LE9-NEXT: bl log2
4417 ; PC64LE9-NEXT: fmr 3, 1
4418 ; PC64LE9-NEXT: xxswapd 1, 63
4419 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4420 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4421 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4422 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4423 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4424 ; PC64LE9-NEXT: addi 1, 1, 64
4425 ; PC64LE9-NEXT: ld 0, 16(1)
4426 ; PC64LE9-NEXT: mtlr 0
4429 %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
4431 metadata !"round.dynamic",
4432 metadata !"fpexcept.strict") #1
4433 ret <3 x double> %log2
4436 define <4 x double> @constrained_vector_log2_v4f64(<4 x double> %x) #0 {
4437 ; PC64LE-LABEL: constrained_vector_log2_v4f64:
4438 ; PC64LE: # %bb.0: # %entry
4439 ; PC64LE-NEXT: mflr 0
4440 ; PC64LE-NEXT: stdu 1, -96(1)
4441 ; PC64LE-NEXT: li 3, 48
4442 ; PC64LE-NEXT: std 0, 112(1)
4443 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4444 ; PC64LE-NEXT: li 3, 64
4445 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4446 ; PC64LE-NEXT: vmr 30, 2
4447 ; PC64LE-NEXT: li 3, 80
4448 ; PC64LE-NEXT: xxlor 1, 62, 62
4449 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4450 ; PC64LE-NEXT: vmr 31, 3
4451 ; PC64LE-NEXT: bl log2
4453 ; PC64LE-NEXT: xxlor 61, 1, 1
4454 ; PC64LE-NEXT: xxswapd 1, 62
4455 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4456 ; PC64LE-NEXT: bl log2
4458 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4459 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4460 ; PC64LE-NEXT: xxlor 1, 63, 63
4461 ; PC64LE-NEXT: bl log2
4463 ; PC64LE-NEXT: xxlor 61, 1, 1
4464 ; PC64LE-NEXT: xxswapd 1, 63
4465 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4466 ; PC64LE-NEXT: bl log2
4468 ; PC64LE-NEXT: li 3, 80
4469 ; PC64LE-NEXT: vmr 2, 30
4470 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4471 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4472 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4473 ; PC64LE-NEXT: li 3, 64
4474 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4475 ; PC64LE-NEXT: li 3, 48
4476 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4477 ; PC64LE-NEXT: addi 1, 1, 96
4478 ; PC64LE-NEXT: ld 0, 16(1)
4479 ; PC64LE-NEXT: mtlr 0
4482 ; PC64LE9-LABEL: constrained_vector_log2_v4f64:
4483 ; PC64LE9: # %bb.0: # %entry
4484 ; PC64LE9-NEXT: mflr 0
4485 ; PC64LE9-NEXT: stdu 1, -80(1)
4486 ; PC64LE9-NEXT: std 0, 96(1)
4487 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4488 ; PC64LE9-NEXT: vmr 30, 2
4489 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4490 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4491 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4492 ; PC64LE9-NEXT: vmr 31, 3
4493 ; PC64LE9-NEXT: bl log2
4495 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4496 ; PC64LE9-NEXT: xxswapd 1, 62
4497 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4498 ; PC64LE9-NEXT: bl log2
4500 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4501 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4502 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4503 ; PC64LE9-NEXT: bl log2
4505 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4506 ; PC64LE9-NEXT: xxswapd 1, 63
4507 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4508 ; PC64LE9-NEXT: bl log2
4510 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4511 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
4512 ; PC64LE9-NEXT: vmr 2, 30
4513 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
4514 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
4515 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
4516 ; PC64LE9-NEXT: addi 1, 1, 80
4517 ; PC64LE9-NEXT: ld 0, 16(1)
4518 ; PC64LE9-NEXT: mtlr 0
4521 %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64(
4523 metadata !"round.dynamic",
4524 metadata !"fpexcept.strict") #1
4525 ret <4 x double> %log2
4528 define <1 x float> @constrained_vector_rint_v1f32(<1 x float> %x) #0 {
4529 ; PC64LE-LABEL: constrained_vector_rint_v1f32:
4530 ; PC64LE: # %bb.0: # %entry
4531 ; PC64LE-NEXT: xsrdpic 1, 1
4534 ; PC64LE9-LABEL: constrained_vector_rint_v1f32:
4535 ; PC64LE9: # %bb.0: # %entry
4536 ; PC64LE9-NEXT: xsrdpic 1, 1
4539 %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
4541 metadata !"round.dynamic",
4542 metadata !"fpexcept.strict") #1
4543 ret <1 x float> %rint
4546 define <2 x double> @constrained_vector_rint_v2f64(<2 x double> %x) #0 {
4547 ; PC64LE-LABEL: constrained_vector_rint_v2f64:
4548 ; PC64LE: # %bb.0: # %entry
4549 ; PC64LE-NEXT: xvrdpic 34, 34
4552 ; PC64LE9-LABEL: constrained_vector_rint_v2f64:
4553 ; PC64LE9: # %bb.0: # %entry
4554 ; PC64LE9-NEXT: xvrdpic 34, 34
4557 %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
4559 metadata !"round.dynamic",
4560 metadata !"fpexcept.strict") #1
4561 ret <2 x double> %rint
4564 define <3 x float> @constrained_vector_rint_v3f32(<3 x float> %x) #0 {
4565 ; PC64LE-LABEL: constrained_vector_rint_v3f32:
4566 ; PC64LE: # %bb.0: # %entry
4567 ; PC64LE-NEXT: xxswapd 0, 34
4568 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
4569 ; PC64LE-NEXT: addis 3, 2, .LCPI77_0@toc@ha
4570 ; PC64LE-NEXT: xscvspdpn 0, 0
4571 ; PC64LE-NEXT: xscvspdpn 1, 1
4572 ; PC64LE-NEXT: addi 3, 3, .LCPI77_0@toc@l
4573 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
4574 ; PC64LE-NEXT: xsrdpic 0, 0
4575 ; PC64LE-NEXT: xsrdpic 1, 1
4576 ; PC64LE-NEXT: xscvdpspn 1, 1
4577 ; PC64LE-NEXT: xscvdpspn 0, 0
4578 ; PC64LE-NEXT: xxmrghw 34, 0, 1
4579 ; PC64LE-NEXT: lxvd2x 0, 0, 3
4580 ; PC64LE-NEXT: xxswapd 35, 0
4581 ; PC64LE-NEXT: xscvspdpn 0, 2
4582 ; PC64LE-NEXT: xsrdpic 0, 0
4583 ; PC64LE-NEXT: xscvdpspn 36, 0
4584 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4587 ; PC64LE9-LABEL: constrained_vector_rint_v3f32:
4588 ; PC64LE9: # %bb.0: # %entry
4589 ; PC64LE9-NEXT: xxswapd 1, 34
4590 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
4591 ; PC64LE9-NEXT: addis 3, 2, .LCPI77_0@toc@ha
4592 ; PC64LE9-NEXT: addi 3, 3, .LCPI77_0@toc@l
4593 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4594 ; PC64LE9-NEXT: xscvspdpn 1, 1
4595 ; PC64LE9-NEXT: xscvspdpn 2, 2
4596 ; PC64LE9-NEXT: xscvspdpn 0, 0
4597 ; PC64LE9-NEXT: xsrdpic 1, 1
4598 ; PC64LE9-NEXT: xsrdpic 2, 2
4599 ; PC64LE9-NEXT: xsrdpic 0, 0
4600 ; PC64LE9-NEXT: xscvdpspn 2, 2
4601 ; PC64LE9-NEXT: xscvdpspn 1, 1
4602 ; PC64LE9-NEXT: xscvdpspn 34, 0
4603 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
4604 ; PC64LE9-NEXT: lxv 1, 0(3)
4605 ; PC64LE9-NEXT: xxperm 34, 35, 1
4608 %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
4610 metadata !"round.dynamic",
4611 metadata !"fpexcept.strict") #1
4612 ret <3 x float> %rint
4615 define <3 x double> @constrained_vector_rint_v3f64(<3 x double> %x) #0 {
4616 ; PC64LE-LABEL: constrained_vector_rint_v3f64:
4617 ; PC64LE: # %bb.0: # %entry
4618 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
4619 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4620 ; PC64LE-NEXT: xxmrghd 0, 2, 1
4621 ; PC64LE-NEXT: xsrdpic 3, 3
4622 ; PC64LE-NEXT: xvrdpic 2, 0
4623 ; PC64LE-NEXT: xxswapd 1, 2
4624 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4625 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
4628 ; PC64LE9-LABEL: constrained_vector_rint_v3f64:
4629 ; PC64LE9: # %bb.0: # %entry
4630 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
4631 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4632 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
4633 ; PC64LE9-NEXT: xsrdpic 3, 3
4634 ; PC64LE9-NEXT: xvrdpic 2, 0
4635 ; PC64LE9-NEXT: xxswapd 1, 2
4636 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4637 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
4640 %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
4642 metadata !"round.dynamic",
4643 metadata !"fpexcept.strict") #1
4644 ret <3 x double> %rint
4647 define <4 x double> @constrained_vector_rint_v4f64(<4 x double> %x) #0 {
4648 ; PC64LE-LABEL: constrained_vector_rint_v4f64:
4649 ; PC64LE: # %bb.0: # %entry
4650 ; PC64LE-NEXT: xvrdpic 35, 35
4651 ; PC64LE-NEXT: xvrdpic 34, 34
4654 ; PC64LE9-LABEL: constrained_vector_rint_v4f64:
4655 ; PC64LE9: # %bb.0: # %entry
4656 ; PC64LE9-NEXT: xvrdpic 35, 35
4657 ; PC64LE9-NEXT: xvrdpic 34, 34
4660 %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
4662 metadata !"round.dynamic",
4663 metadata !"fpexcept.strict") #1
4664 ret <4 x double> %rint
4667 define <1 x float> @constrained_vector_nearbyint_v1f32(<1 x float> %x) #0 {
4668 ; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
4669 ; PC64LE: # %bb.0: # %entry
4670 ; PC64LE-NEXT: mflr 0
4671 ; PC64LE-NEXT: stdu 1, -32(1)
4672 ; PC64LE-NEXT: std 0, 48(1)
4673 ; PC64LE-NEXT: bl nearbyintf
4675 ; PC64LE-NEXT: addi 1, 1, 32
4676 ; PC64LE-NEXT: ld 0, 16(1)
4677 ; PC64LE-NEXT: mtlr 0
4680 ; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32:
4681 ; PC64LE9: # %bb.0: # %entry
4682 ; PC64LE9-NEXT: mflr 0
4683 ; PC64LE9-NEXT: stdu 1, -32(1)
4684 ; PC64LE9-NEXT: std 0, 48(1)
4685 ; PC64LE9-NEXT: bl nearbyintf
4687 ; PC64LE9-NEXT: addi 1, 1, 32
4688 ; PC64LE9-NEXT: ld 0, 16(1)
4689 ; PC64LE9-NEXT: mtlr 0
4692 %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
4694 metadata !"round.dynamic",
4695 metadata !"fpexcept.strict") #1
4696 ret <1 x float> %nearby
4699 define <2 x double> @constrained_vector_nearbyint_v2f64(<2 x double> %x) #0 {
4700 ; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
4701 ; PC64LE: # %bb.0: # %entry
4702 ; PC64LE-NEXT: mflr 0
4703 ; PC64LE-NEXT: stdu 1, -80(1)
4704 ; PC64LE-NEXT: li 3, 48
4705 ; PC64LE-NEXT: std 0, 96(1)
4706 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4707 ; PC64LE-NEXT: li 3, 64
4708 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4709 ; PC64LE-NEXT: vmr 31, 2
4710 ; PC64LE-NEXT: xxlor 1, 63, 63
4711 ; PC64LE-NEXT: bl nearbyint
4713 ; PC64LE-NEXT: xxlor 62, 1, 1
4714 ; PC64LE-NEXT: xxswapd 1, 63
4715 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4716 ; PC64LE-NEXT: bl nearbyint
4718 ; PC64LE-NEXT: li 3, 64
4719 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4720 ; PC64LE-NEXT: xxmrghd 34, 62, 1
4721 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4722 ; PC64LE-NEXT: li 3, 48
4723 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4724 ; PC64LE-NEXT: addi 1, 1, 80
4725 ; PC64LE-NEXT: ld 0, 16(1)
4726 ; PC64LE-NEXT: mtlr 0
4729 ; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64:
4730 ; PC64LE9: # %bb.0: # %entry
4731 ; PC64LE9-NEXT: mflr 0
4732 ; PC64LE9-NEXT: stdu 1, -64(1)
4733 ; PC64LE9-NEXT: std 0, 80(1)
4734 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
4735 ; PC64LE9-NEXT: vmr 31, 2
4736 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4737 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
4738 ; PC64LE9-NEXT: bl nearbyint
4740 ; PC64LE9-NEXT: xscpsgndp 62, 1, 1
4741 ; PC64LE9-NEXT: xxswapd 1, 63
4742 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4743 ; PC64LE9-NEXT: bl nearbyint
4745 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4746 ; PC64LE9-NEXT: xxmrghd 34, 62, 1
4747 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
4748 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
4749 ; PC64LE9-NEXT: addi 1, 1, 64
4750 ; PC64LE9-NEXT: ld 0, 16(1)
4751 ; PC64LE9-NEXT: mtlr 0
4754 %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
4756 metadata !"round.dynamic",
4757 metadata !"fpexcept.strict") #1
4758 ret <2 x double> %nearby
4761 define <3 x float> @constrained_vector_nearbyint_v3f32(<3 x float> %x) #0 {
4762 ; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
4763 ; PC64LE: # %bb.0: # %entry
4764 ; PC64LE-NEXT: mflr 0
4765 ; PC64LE-NEXT: stdu 1, -80(1)
4766 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
4767 ; PC64LE-NEXT: li 3, 48
4768 ; PC64LE-NEXT: std 0, 96(1)
4769 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4770 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4771 ; PC64LE-NEXT: xscvspdpn 1, 0
4772 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4773 ; PC64LE-NEXT: vmr 31, 2
4774 ; PC64LE-NEXT: bl nearbyintf
4776 ; PC64LE-NEXT: xxswapd 0, 63
4777 ; PC64LE-NEXT: fmr 31, 1
4778 ; PC64LE-NEXT: xscvspdpn 1, 0
4779 ; PC64LE-NEXT: bl nearbyintf
4781 ; PC64LE-NEXT: xxsldwi 0, 63, 63, 3
4782 ; PC64LE-NEXT: fmr 30, 1
4783 ; PC64LE-NEXT: xscvspdpn 1, 0
4784 ; PC64LE-NEXT: bl nearbyintf
4786 ; PC64LE-NEXT: xscvdpspn 0, 1
4787 ; PC64LE-NEXT: xscvdpspn 1, 30
4788 ; PC64LE-NEXT: addis 3, 2, .LCPI82_0@toc@ha
4789 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4790 ; PC64LE-NEXT: xscvdpspn 36, 31
4791 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4792 ; PC64LE-NEXT: addi 3, 3, .LCPI82_0@toc@l
4793 ; PC64LE-NEXT: xxmrghw 34, 1, 0
4794 ; PC64LE-NEXT: lxvd2x 0, 0, 3
4795 ; PC64LE-NEXT: li 3, 48
4796 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4797 ; PC64LE-NEXT: xxswapd 35, 0
4798 ; PC64LE-NEXT: vperm 2, 4, 2, 3
4799 ; PC64LE-NEXT: addi 1, 1, 80
4800 ; PC64LE-NEXT: ld 0, 16(1)
4801 ; PC64LE-NEXT: mtlr 0
4804 ; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
4805 ; PC64LE9: # %bb.0: # %entry
4806 ; PC64LE9-NEXT: mflr 0
4807 ; PC64LE9-NEXT: stdu 1, -64(1)
4808 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
4809 ; PC64LE9-NEXT: std 0, 80(1)
4810 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4811 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4812 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4813 ; PC64LE9-NEXT: vmr 31, 2
4814 ; PC64LE9-NEXT: xscvspdpn 1, 0
4815 ; PC64LE9-NEXT: bl nearbyintf
4817 ; PC64LE9-NEXT: xxswapd 0, 63
4818 ; PC64LE9-NEXT: fmr 31, 1
4819 ; PC64LE9-NEXT: xscvspdpn 1, 0
4820 ; PC64LE9-NEXT: bl nearbyintf
4822 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
4823 ; PC64LE9-NEXT: fmr 30, 1
4824 ; PC64LE9-NEXT: xscvspdpn 1, 0
4825 ; PC64LE9-NEXT: bl nearbyintf
4827 ; PC64LE9-NEXT: xscvdpspn 0, 1
4828 ; PC64LE9-NEXT: xscvdpspn 1, 30
4829 ; PC64LE9-NEXT: addis 3, 2, .LCPI82_0@toc@ha
4830 ; PC64LE9-NEXT: xscvdpspn 34, 31
4831 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4832 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4833 ; PC64LE9-NEXT: addi 3, 3, .LCPI82_0@toc@l
4834 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4835 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
4836 ; PC64LE9-NEXT: lxv 0, 0(3)
4837 ; PC64LE9-NEXT: xxperm 34, 35, 0
4838 ; PC64LE9-NEXT: addi 1, 1, 64
4839 ; PC64LE9-NEXT: ld 0, 16(1)
4840 ; PC64LE9-NEXT: mtlr 0
4843 %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
4845 metadata !"round.dynamic",
4846 metadata !"fpexcept.strict") #1
4847 ret <3 x float> %nearby
4850 define <3 x double> @constrained_vector_nearby_v3f64(<3 x double> %x) #0 {
4851 ; PC64LE-LABEL: constrained_vector_nearby_v3f64:
4852 ; PC64LE: # %bb.0: # %entry
4853 ; PC64LE-NEXT: mflr 0
4854 ; PC64LE-NEXT: stdu 1, -80(1)
4855 ; PC64LE-NEXT: li 3, 48
4856 ; PC64LE-NEXT: std 0, 96(1)
4857 ; PC64LE-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
4858 ; PC64LE-NEXT: fmr 30, 2
4859 ; PC64LE-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
4860 ; PC64LE-NEXT: fmr 31, 3
4861 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4862 ; PC64LE-NEXT: bl nearbyint
4864 ; PC64LE-NEXT: xxlor 63, 1, 1
4865 ; PC64LE-NEXT: fmr 1, 30
4866 ; PC64LE-NEXT: bl nearbyint
4868 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4869 ; PC64LE-NEXT: xxmrghd 63, 1, 63
4870 ; PC64LE-NEXT: fmr 1, 31
4871 ; PC64LE-NEXT: bl nearbyint
4873 ; PC64LE-NEXT: li 3, 48
4874 ; PC64LE-NEXT: fmr 3, 1
4875 ; PC64LE-NEXT: xxswapd 1, 63
4876 ; PC64LE-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
4877 ; PC64LE-NEXT: xxlor 2, 63, 63
4878 ; PC64LE-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
4879 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4880 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4881 ; PC64LE-NEXT: addi 1, 1, 80
4882 ; PC64LE-NEXT: ld 0, 16(1)
4883 ; PC64LE-NEXT: mtlr 0
4886 ; PC64LE9-LABEL: constrained_vector_nearby_v3f64:
4887 ; PC64LE9: # %bb.0: # %entry
4888 ; PC64LE9-NEXT: mflr 0
4889 ; PC64LE9-NEXT: stdu 1, -64(1)
4890 ; PC64LE9-NEXT: std 0, 80(1)
4891 ; PC64LE9-NEXT: stfd 30, 48(1) # 8-byte Folded Spill
4892 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
4893 ; PC64LE9-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
4894 ; PC64LE9-NEXT: fmr 31, 3
4895 ; PC64LE9-NEXT: fmr 30, 2
4896 ; PC64LE9-NEXT: bl nearbyint
4898 ; PC64LE9-NEXT: xscpsgndp 63, 1, 1
4899 ; PC64LE9-NEXT: fmr 1, 30
4900 ; PC64LE9-NEXT: bl nearbyint
4902 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4903 ; PC64LE9-NEXT: xxmrghd 63, 1, 63
4904 ; PC64LE9-NEXT: fmr 1, 31
4905 ; PC64LE9-NEXT: bl nearbyint
4907 ; PC64LE9-NEXT: fmr 3, 1
4908 ; PC64LE9-NEXT: xxswapd 1, 63
4909 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
4910 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
4911 ; PC64LE9-NEXT: lfd 31, 56(1) # 8-byte Folded Reload
4912 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4913 ; PC64LE9-NEXT: lfd 30, 48(1) # 8-byte Folded Reload
4914 ; PC64LE9-NEXT: addi 1, 1, 64
4915 ; PC64LE9-NEXT: ld 0, 16(1)
4916 ; PC64LE9-NEXT: mtlr 0
4919 %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
4921 metadata !"round.dynamic",
4922 metadata !"fpexcept.strict") #1
4923 ret <3 x double> %nearby
4926 define <4 x double> @constrained_vector_nearbyint_v4f64(<4 x double> %x) #0 {
4927 ; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
4928 ; PC64LE: # %bb.0: # %entry
4929 ; PC64LE-NEXT: mflr 0
4930 ; PC64LE-NEXT: stdu 1, -96(1)
4931 ; PC64LE-NEXT: li 3, 48
4932 ; PC64LE-NEXT: std 0, 112(1)
4933 ; PC64LE-NEXT: stxvd2x 61, 1, 3 # 16-byte Folded Spill
4934 ; PC64LE-NEXT: li 3, 64
4935 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
4936 ; PC64LE-NEXT: vmr 30, 2
4937 ; PC64LE-NEXT: li 3, 80
4938 ; PC64LE-NEXT: xxlor 1, 62, 62
4939 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
4940 ; PC64LE-NEXT: vmr 31, 3
4941 ; PC64LE-NEXT: bl nearbyint
4943 ; PC64LE-NEXT: xxlor 61, 1, 1
4944 ; PC64LE-NEXT: xxswapd 1, 62
4945 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4946 ; PC64LE-NEXT: bl nearbyint
4948 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4949 ; PC64LE-NEXT: xxmrghd 62, 61, 1
4950 ; PC64LE-NEXT: xxlor 1, 63, 63
4951 ; PC64LE-NEXT: bl nearbyint
4953 ; PC64LE-NEXT: xxlor 61, 1, 1
4954 ; PC64LE-NEXT: xxswapd 1, 63
4955 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4956 ; PC64LE-NEXT: bl nearbyint
4958 ; PC64LE-NEXT: li 3, 80
4959 ; PC64LE-NEXT: vmr 2, 30
4960 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
4961 ; PC64LE-NEXT: xxmrghd 35, 61, 1
4962 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
4963 ; PC64LE-NEXT: li 3, 64
4964 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
4965 ; PC64LE-NEXT: li 3, 48
4966 ; PC64LE-NEXT: lxvd2x 61, 1, 3 # 16-byte Folded Reload
4967 ; PC64LE-NEXT: addi 1, 1, 96
4968 ; PC64LE-NEXT: ld 0, 16(1)
4969 ; PC64LE-NEXT: mtlr 0
4972 ; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64:
4973 ; PC64LE9: # %bb.0: # %entry
4974 ; PC64LE9-NEXT: mflr 0
4975 ; PC64LE9-NEXT: stdu 1, -80(1)
4976 ; PC64LE9-NEXT: std 0, 96(1)
4977 ; PC64LE9-NEXT: stxv 62, 48(1) # 16-byte Folded Spill
4978 ; PC64LE9-NEXT: vmr 30, 2
4979 ; PC64LE9-NEXT: xscpsgndp 1, 62, 62
4980 ; PC64LE9-NEXT: stxv 61, 32(1) # 16-byte Folded Spill
4981 ; PC64LE9-NEXT: stxv 63, 64(1) # 16-byte Folded Spill
4982 ; PC64LE9-NEXT: vmr 31, 3
4983 ; PC64LE9-NEXT: bl nearbyint
4985 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4986 ; PC64LE9-NEXT: xxswapd 1, 62
4987 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4988 ; PC64LE9-NEXT: bl nearbyint
4990 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
4991 ; PC64LE9-NEXT: xxmrghd 62, 61, 1
4992 ; PC64LE9-NEXT: xscpsgndp 1, 63, 63
4993 ; PC64LE9-NEXT: bl nearbyint
4995 ; PC64LE9-NEXT: xscpsgndp 61, 1, 1
4996 ; PC64LE9-NEXT: xxswapd 1, 63
4997 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
4998 ; PC64LE9-NEXT: bl nearbyint
5000 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5001 ; PC64LE9-NEXT: xxmrghd 35, 61, 1
5002 ; PC64LE9-NEXT: vmr 2, 30
5003 ; PC64LE9-NEXT: lxv 63, 64(1) # 16-byte Folded Reload
5004 ; PC64LE9-NEXT: lxv 62, 48(1) # 16-byte Folded Reload
5005 ; PC64LE9-NEXT: lxv 61, 32(1) # 16-byte Folded Reload
5006 ; PC64LE9-NEXT: addi 1, 1, 80
5007 ; PC64LE9-NEXT: ld 0, 16(1)
5008 ; PC64LE9-NEXT: mtlr 0
5011 %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
5013 metadata !"round.dynamic",
5014 metadata !"fpexcept.strict") #1
5015 ret <4 x double> %nearby
5018 define <1 x float> @constrained_vector_maxnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
5019 ; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
5020 ; PC64LE: # %bb.0: # %entry
5021 ; PC64LE-NEXT: mflr 0
5022 ; PC64LE-NEXT: stdu 1, -32(1)
5023 ; PC64LE-NEXT: std 0, 48(1)
5024 ; PC64LE-NEXT: bl fmaxf
5026 ; PC64LE-NEXT: addi 1, 1, 32
5027 ; PC64LE-NEXT: ld 0, 16(1)
5028 ; PC64LE-NEXT: mtlr 0
5031 ; PC64LE9-LABEL: constrained_vector_maxnum_v1f32:
5032 ; PC64LE9: # %bb.0: # %entry
5033 ; PC64LE9-NEXT: mflr 0
5034 ; PC64LE9-NEXT: stdu 1, -32(1)
5035 ; PC64LE9-NEXT: std 0, 48(1)
5036 ; PC64LE9-NEXT: bl fmaxf
5038 ; PC64LE9-NEXT: addi 1, 1, 32
5039 ; PC64LE9-NEXT: ld 0, 16(1)
5040 ; PC64LE9-NEXT: mtlr 0
5043 %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
5044 <1 x float> %x, <1 x float> %y,
5045 metadata !"fpexcept.strict") #1
5046 ret <1 x float> %max
5049 define <2 x double> @constrained_vector_maxnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
5050 ; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
5051 ; PC64LE: # %bb.0: # %entry
5052 ; PC64LE-NEXT: xvmaxdp 34, 34, 35
5055 ; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
5056 ; PC64LE9: # %bb.0: # %entry
5057 ; PC64LE9-NEXT: xvmaxdp 34, 34, 35
5060 %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(
5063 metadata !"fpexcept.strict") #1
5064 ret <2 x double> %max
5067 define <3 x float> @constrained_vector_maxnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
5068 ; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
5069 ; PC64LE: # %bb.0: # %entry
5070 ; PC64LE-NEXT: mflr 0
5071 ; PC64LE-NEXT: stdu 1, -96(1)
5072 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
5073 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
5074 ; PC64LE-NEXT: li 3, 48
5075 ; PC64LE-NEXT: std 0, 112(1)
5076 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
5077 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
5078 ; PC64LE-NEXT: xscvspdpn 1, 0
5079 ; PC64LE-NEXT: xscvspdpn 2, 2
5080 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
5081 ; PC64LE-NEXT: li 3, 64
5082 ; PC64LE-NEXT: vmr 30, 2
5083 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5084 ; PC64LE-NEXT: vmr 31, 3
5085 ; PC64LE-NEXT: bl fmaxf
5087 ; PC64LE-NEXT: xxswapd 0, 62
5088 ; PC64LE-NEXT: xxswapd 2, 63
5089 ; PC64LE-NEXT: fmr 31, 1
5090 ; PC64LE-NEXT: xscvspdpn 1, 0
5091 ; PC64LE-NEXT: xscvspdpn 2, 2
5092 ; PC64LE-NEXT: bl fmaxf
5094 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
5095 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
5096 ; PC64LE-NEXT: fmr 30, 1
5097 ; PC64LE-NEXT: xscvspdpn 1, 0
5098 ; PC64LE-NEXT: xscvspdpn 2, 2
5099 ; PC64LE-NEXT: bl fmaxf
5101 ; PC64LE-NEXT: xscvdpspn 0, 1
5102 ; PC64LE-NEXT: xscvdpspn 1, 30
5103 ; PC64LE-NEXT: addis 3, 2, .LCPI87_0@toc@ha
5104 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
5105 ; PC64LE-NEXT: xscvdpspn 36, 31
5106 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
5107 ; PC64LE-NEXT: addi 3, 3, .LCPI87_0@toc@l
5108 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5109 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5110 ; PC64LE-NEXT: li 3, 64
5111 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5112 ; PC64LE-NEXT: li 3, 48
5113 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
5114 ; PC64LE-NEXT: xxswapd 35, 0
5115 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5116 ; PC64LE-NEXT: addi 1, 1, 96
5117 ; PC64LE-NEXT: ld 0, 16(1)
5118 ; PC64LE-NEXT: mtlr 0
5121 ; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
5122 ; PC64LE9: # %bb.0: # %entry
5123 ; PC64LE9-NEXT: mflr 0
5124 ; PC64LE9-NEXT: stdu 1, -80(1)
5125 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5126 ; PC64LE9-NEXT: std 0, 96(1)
5127 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
5128 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
5129 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
5130 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
5131 ; PC64LE9-NEXT: xscvspdpn 1, 0
5132 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
5133 ; PC64LE9-NEXT: vmr 31, 3
5134 ; PC64LE9-NEXT: vmr 30, 2
5135 ; PC64LE9-NEXT: xscvspdpn 2, 0
5136 ; PC64LE9-NEXT: bl fmaxf
5138 ; PC64LE9-NEXT: xxswapd 0, 62
5139 ; PC64LE9-NEXT: fmr 31, 1
5140 ; PC64LE9-NEXT: xscvspdpn 1, 0
5141 ; PC64LE9-NEXT: xxswapd 0, 63
5142 ; PC64LE9-NEXT: xscvspdpn 2, 0
5143 ; PC64LE9-NEXT: bl fmaxf
5145 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
5146 ; PC64LE9-NEXT: fmr 30, 1
5147 ; PC64LE9-NEXT: xscvspdpn 1, 0
5148 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
5149 ; PC64LE9-NEXT: xscvspdpn 2, 0
5150 ; PC64LE9-NEXT: bl fmaxf
5152 ; PC64LE9-NEXT: xscvdpspn 0, 1
5153 ; PC64LE9-NEXT: xscvdpspn 1, 30
5154 ; PC64LE9-NEXT: addis 3, 2, .LCPI87_0@toc@ha
5155 ; PC64LE9-NEXT: xscvdpspn 34, 31
5156 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5157 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
5158 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
5159 ; PC64LE9-NEXT: addi 3, 3, .LCPI87_0@toc@l
5160 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
5161 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5162 ; PC64LE9-NEXT: lxv 0, 0(3)
5163 ; PC64LE9-NEXT: xxperm 34, 35, 0
5164 ; PC64LE9-NEXT: addi 1, 1, 80
5165 ; PC64LE9-NEXT: ld 0, 16(1)
5166 ; PC64LE9-NEXT: mtlr 0
5169 %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32(
5172 metadata !"fpexcept.strict") #1
5173 ret <3 x float> %max
5176 define <3 x double> @constrained_vector_max_v3f64(<3 x double> %x, <3 x double> %y) #0 {
5177 ; PC64LE-LABEL: constrained_vector_max_v3f64:
5178 ; PC64LE: # %bb.0: # %entry
5179 ; PC64LE-NEXT: mflr 0
5180 ; PC64LE-NEXT: stdu 1, -64(1)
5181 ; PC64LE-NEXT: li 3, 48
5182 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
5183 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
5184 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
5185 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5186 ; PC64LE-NEXT: xxmrghd 0, 5, 4
5187 ; PC64LE-NEXT: xxmrghd 1, 2, 1
5188 ; PC64LE-NEXT: std 0, 80(1)
5189 ; PC64LE-NEXT: fmr 2, 6
5190 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5191 ; PC64LE-NEXT: xvmaxdp 63, 1, 0
5192 ; PC64LE-NEXT: fmr 1, 3
5193 ; PC64LE-NEXT: bl fmax
5195 ; PC64LE-NEXT: li 3, 48
5196 ; PC64LE-NEXT: fmr 3, 1
5197 ; PC64LE-NEXT: xxswapd 1, 63
5198 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5199 ; PC64LE-NEXT: xxlor 2, 63, 63
5200 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5201 ; PC64LE-NEXT: addi 1, 1, 64
5202 ; PC64LE-NEXT: ld 0, 16(1)
5203 ; PC64LE-NEXT: mtlr 0
5206 ; PC64LE9-LABEL: constrained_vector_max_v3f64:
5207 ; PC64LE9: # %bb.0: # %entry
5208 ; PC64LE9-NEXT: mflr 0
5209 ; PC64LE9-NEXT: stdu 1, -48(1)
5210 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
5211 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
5212 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
5213 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5214 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
5215 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
5216 ; PC64LE9-NEXT: std 0, 64(1)
5217 ; PC64LE9-NEXT: fmr 2, 6
5218 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
5219 ; PC64LE9-NEXT: xvmaxdp 63, 1, 0
5220 ; PC64LE9-NEXT: fmr 1, 3
5221 ; PC64LE9-NEXT: bl fmax
5223 ; PC64LE9-NEXT: fmr 3, 1
5224 ; PC64LE9-NEXT: xxswapd 1, 63
5225 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
5226 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
5227 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5228 ; PC64LE9-NEXT: addi 1, 1, 48
5229 ; PC64LE9-NEXT: ld 0, 16(1)
5230 ; PC64LE9-NEXT: mtlr 0
5233 %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
5236 metadata !"fpexcept.strict") #1
5237 ret <3 x double> %max
5240 define <4 x double> @constrained_vector_maxnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
5241 ; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
5242 ; PC64LE: # %bb.0: # %entry
5243 ; PC64LE-NEXT: xvmaxdp 34, 34, 36
5244 ; PC64LE-NEXT: xvmaxdp 35, 35, 37
5247 ; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
5248 ; PC64LE9: # %bb.0: # %entry
5249 ; PC64LE9-NEXT: xvmaxdp 34, 34, 36
5250 ; PC64LE9-NEXT: xvmaxdp 35, 35, 37
5253 %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64(
5256 metadata !"fpexcept.strict") #1
5257 ret <4 x double> %max
5260 define <1 x float> @constrained_vector_minnum_v1f32(<1 x float> %x, <1 x float> %y) #0 {
5261 ; PC64LE-LABEL: constrained_vector_minnum_v1f32:
5262 ; PC64LE: # %bb.0: # %entry
5263 ; PC64LE-NEXT: mflr 0
5264 ; PC64LE-NEXT: stdu 1, -32(1)
5265 ; PC64LE-NEXT: std 0, 48(1)
5266 ; PC64LE-NEXT: bl fminf
5268 ; PC64LE-NEXT: addi 1, 1, 32
5269 ; PC64LE-NEXT: ld 0, 16(1)
5270 ; PC64LE-NEXT: mtlr 0
5273 ; PC64LE9-LABEL: constrained_vector_minnum_v1f32:
5274 ; PC64LE9: # %bb.0: # %entry
5275 ; PC64LE9-NEXT: mflr 0
5276 ; PC64LE9-NEXT: stdu 1, -32(1)
5277 ; PC64LE9-NEXT: std 0, 48(1)
5278 ; PC64LE9-NEXT: bl fminf
5280 ; PC64LE9-NEXT: addi 1, 1, 32
5281 ; PC64LE9-NEXT: ld 0, 16(1)
5282 ; PC64LE9-NEXT: mtlr 0
5285 %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
5286 <1 x float> %x, <1 x float> %y,
5287 metadata !"fpexcept.strict") #1
5288 ret <1 x float> %min
5291 define <2 x double> @constrained_vector_minnum_v2f64(<2 x double> %x, <2 x double> %y) #0 {
5292 ; PC64LE-LABEL: constrained_vector_minnum_v2f64:
5293 ; PC64LE: # %bb.0: # %entry
5294 ; PC64LE-NEXT: xvmindp 34, 34, 35
5297 ; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
5298 ; PC64LE9: # %bb.0: # %entry
5299 ; PC64LE9-NEXT: xvmindp 34, 34, 35
5302 %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(
5305 metadata !"fpexcept.strict") #1
5306 ret <2 x double> %min
5309 define <3 x float> @constrained_vector_minnum_v3f32(<3 x float> %x, <3 x float> %y) #0 {
5310 ; PC64LE-LABEL: constrained_vector_minnum_v3f32:
5311 ; PC64LE: # %bb.0: # %entry
5312 ; PC64LE-NEXT: mflr 0
5313 ; PC64LE-NEXT: stdu 1, -96(1)
5314 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
5315 ; PC64LE-NEXT: xxsldwi 2, 35, 35, 1
5316 ; PC64LE-NEXT: li 3, 48
5317 ; PC64LE-NEXT: std 0, 112(1)
5318 ; PC64LE-NEXT: stfd 30, 80(1) # 8-byte Folded Spill
5319 ; PC64LE-NEXT: stfd 31, 88(1) # 8-byte Folded Spill
5320 ; PC64LE-NEXT: xscvspdpn 1, 0
5321 ; PC64LE-NEXT: xscvspdpn 2, 2
5322 ; PC64LE-NEXT: stxvd2x 62, 1, 3 # 16-byte Folded Spill
5323 ; PC64LE-NEXT: li 3, 64
5324 ; PC64LE-NEXT: vmr 30, 2
5325 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5326 ; PC64LE-NEXT: vmr 31, 3
5327 ; PC64LE-NEXT: bl fminf
5329 ; PC64LE-NEXT: xxswapd 0, 62
5330 ; PC64LE-NEXT: xxswapd 2, 63
5331 ; PC64LE-NEXT: fmr 31, 1
5332 ; PC64LE-NEXT: xscvspdpn 1, 0
5333 ; PC64LE-NEXT: xscvspdpn 2, 2
5334 ; PC64LE-NEXT: bl fminf
5336 ; PC64LE-NEXT: xxsldwi 0, 62, 62, 3
5337 ; PC64LE-NEXT: xxsldwi 2, 63, 63, 3
5338 ; PC64LE-NEXT: fmr 30, 1
5339 ; PC64LE-NEXT: xscvspdpn 1, 0
5340 ; PC64LE-NEXT: xscvspdpn 2, 2
5341 ; PC64LE-NEXT: bl fminf
5343 ; PC64LE-NEXT: xscvdpspn 0, 1
5344 ; PC64LE-NEXT: xscvdpspn 1, 30
5345 ; PC64LE-NEXT: addis 3, 2, .LCPI92_0@toc@ha
5346 ; PC64LE-NEXT: lfd 30, 80(1) # 8-byte Folded Reload
5347 ; PC64LE-NEXT: xscvdpspn 36, 31
5348 ; PC64LE-NEXT: lfd 31, 88(1) # 8-byte Folded Reload
5349 ; PC64LE-NEXT: addi 3, 3, .LCPI92_0@toc@l
5350 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5351 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5352 ; PC64LE-NEXT: li 3, 64
5353 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5354 ; PC64LE-NEXT: li 3, 48
5355 ; PC64LE-NEXT: lxvd2x 62, 1, 3 # 16-byte Folded Reload
5356 ; PC64LE-NEXT: xxswapd 35, 0
5357 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5358 ; PC64LE-NEXT: addi 1, 1, 96
5359 ; PC64LE-NEXT: ld 0, 16(1)
5360 ; PC64LE-NEXT: mtlr 0
5363 ; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
5364 ; PC64LE9: # %bb.0: # %entry
5365 ; PC64LE9-NEXT: mflr 0
5366 ; PC64LE9-NEXT: stdu 1, -80(1)
5367 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5368 ; PC64LE9-NEXT: std 0, 96(1)
5369 ; PC64LE9-NEXT: stfd 30, 64(1) # 8-byte Folded Spill
5370 ; PC64LE9-NEXT: stxv 62, 32(1) # 16-byte Folded Spill
5371 ; PC64LE9-NEXT: stfd 31, 72(1) # 8-byte Folded Spill
5372 ; PC64LE9-NEXT: stxv 63, 48(1) # 16-byte Folded Spill
5373 ; PC64LE9-NEXT: xscvspdpn 1, 0
5374 ; PC64LE9-NEXT: xxsldwi 0, 35, 35, 1
5375 ; PC64LE9-NEXT: vmr 31, 3
5376 ; PC64LE9-NEXT: vmr 30, 2
5377 ; PC64LE9-NEXT: xscvspdpn 2, 0
5378 ; PC64LE9-NEXT: bl fminf
5380 ; PC64LE9-NEXT: xxswapd 0, 62
5381 ; PC64LE9-NEXT: fmr 31, 1
5382 ; PC64LE9-NEXT: xscvspdpn 1, 0
5383 ; PC64LE9-NEXT: xxswapd 0, 63
5384 ; PC64LE9-NEXT: xscvspdpn 2, 0
5385 ; PC64LE9-NEXT: bl fminf
5387 ; PC64LE9-NEXT: xxsldwi 0, 62, 62, 3
5388 ; PC64LE9-NEXT: fmr 30, 1
5389 ; PC64LE9-NEXT: xscvspdpn 1, 0
5390 ; PC64LE9-NEXT: xxsldwi 0, 63, 63, 3
5391 ; PC64LE9-NEXT: xscvspdpn 2, 0
5392 ; PC64LE9-NEXT: bl fminf
5394 ; PC64LE9-NEXT: xscvdpspn 0, 1
5395 ; PC64LE9-NEXT: xscvdpspn 1, 30
5396 ; PC64LE9-NEXT: addis 3, 2, .LCPI92_0@toc@ha
5397 ; PC64LE9-NEXT: xscvdpspn 34, 31
5398 ; PC64LE9-NEXT: lxv 63, 48(1) # 16-byte Folded Reload
5399 ; PC64LE9-NEXT: lxv 62, 32(1) # 16-byte Folded Reload
5400 ; PC64LE9-NEXT: lfd 31, 72(1) # 8-byte Folded Reload
5401 ; PC64LE9-NEXT: addi 3, 3, .LCPI92_0@toc@l
5402 ; PC64LE9-NEXT: lfd 30, 64(1) # 8-byte Folded Reload
5403 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5404 ; PC64LE9-NEXT: lxv 0, 0(3)
5405 ; PC64LE9-NEXT: xxperm 34, 35, 0
5406 ; PC64LE9-NEXT: addi 1, 1, 80
5407 ; PC64LE9-NEXT: ld 0, 16(1)
5408 ; PC64LE9-NEXT: mtlr 0
5411 %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32(
5414 metadata !"fpexcept.strict") #1
5415 ret <3 x float> %min
5418 define <3 x double> @constrained_vector_min_v3f64(<3 x double> %x, <3 x double> %y) #0 {
5419 ; PC64LE-LABEL: constrained_vector_min_v3f64:
5420 ; PC64LE: # %bb.0: # %entry
5421 ; PC64LE-NEXT: mflr 0
5422 ; PC64LE-NEXT: stdu 1, -64(1)
5423 ; PC64LE-NEXT: li 3, 48
5424 ; PC64LE-NEXT: # kill: def $f5 killed $f5 def $vsl5
5425 ; PC64LE-NEXT: # kill: def $f4 killed $f4 def $vsl4
5426 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
5427 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
5428 ; PC64LE-NEXT: xxmrghd 0, 5, 4
5429 ; PC64LE-NEXT: xxmrghd 1, 2, 1
5430 ; PC64LE-NEXT: std 0, 80(1)
5431 ; PC64LE-NEXT: fmr 2, 6
5432 ; PC64LE-NEXT: stxvd2x 63, 1, 3 # 16-byte Folded Spill
5433 ; PC64LE-NEXT: xvmindp 63, 1, 0
5434 ; PC64LE-NEXT: fmr 1, 3
5435 ; PC64LE-NEXT: bl fmin
5437 ; PC64LE-NEXT: li 3, 48
5438 ; PC64LE-NEXT: fmr 3, 1
5439 ; PC64LE-NEXT: xxswapd 1, 63
5440 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5441 ; PC64LE-NEXT: xxlor 2, 63, 63
5442 ; PC64LE-NEXT: lxvd2x 63, 1, 3 # 16-byte Folded Reload
5443 ; PC64LE-NEXT: addi 1, 1, 64
5444 ; PC64LE-NEXT: ld 0, 16(1)
5445 ; PC64LE-NEXT: mtlr 0
5448 ; PC64LE9-LABEL: constrained_vector_min_v3f64:
5449 ; PC64LE9: # %bb.0: # %entry
5450 ; PC64LE9-NEXT: mflr 0
5451 ; PC64LE9-NEXT: stdu 1, -48(1)
5452 ; PC64LE9-NEXT: # kill: def $f5 killed $f5 def $vsl5
5453 ; PC64LE9-NEXT: # kill: def $f4 killed $f4 def $vsl4
5454 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
5455 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
5456 ; PC64LE9-NEXT: xxmrghd 0, 5, 4
5457 ; PC64LE9-NEXT: xxmrghd 1, 2, 1
5458 ; PC64LE9-NEXT: std 0, 64(1)
5459 ; PC64LE9-NEXT: fmr 2, 6
5460 ; PC64LE9-NEXT: stxv 63, 32(1) # 16-byte Folded Spill
5461 ; PC64LE9-NEXT: xvmindp 63, 1, 0
5462 ; PC64LE9-NEXT: fmr 1, 3
5463 ; PC64LE9-NEXT: bl fmin
5465 ; PC64LE9-NEXT: fmr 3, 1
5466 ; PC64LE9-NEXT: xxswapd 1, 63
5467 ; PC64LE9-NEXT: xscpsgndp 2, 63, 63
5468 ; PC64LE9-NEXT: lxv 63, 32(1) # 16-byte Folded Reload
5469 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
5470 ; PC64LE9-NEXT: addi 1, 1, 48
5471 ; PC64LE9-NEXT: ld 0, 16(1)
5472 ; PC64LE9-NEXT: mtlr 0
5475 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
5478 metadata !"fpexcept.strict") #1
5479 ret <3 x double> %min
5482 define <4 x double> @constrained_vector_minnum_v4f64(<4 x double> %x, <4 x double> %y) #0 {
5483 ; PC64LE-LABEL: constrained_vector_minnum_v4f64:
5484 ; PC64LE: # %bb.0: # %entry
5485 ; PC64LE-NEXT: xvmindp 34, 34, 36
5486 ; PC64LE-NEXT: xvmindp 35, 35, 37
5489 ; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
5490 ; PC64LE9: # %bb.0: # %entry
5491 ; PC64LE9-NEXT: xvmindp 34, 34, 36
5492 ; PC64LE9-NEXT: xvmindp 35, 35, 37
5495 %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64(
5498 metadata !"fpexcept.strict") #1
5499 ret <4 x double> %min
5502 define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32(<1 x float> %x) #0 {
5503 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5504 ; PC64LE: # %bb.0: # %entry
5505 ; PC64LE-NEXT: xscvdpsxws 0, 1
5506 ; PC64LE-NEXT: mffprwz 3, 0
5509 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5510 ; PC64LE9: # %bb.0: # %entry
5511 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5512 ; PC64LE9-NEXT: mffprwz 3, 0
5515 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(
5517 metadata !"fpexcept.strict") #0
5518 ret <1 x i32> %result
5521 define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32(<2 x float> %x) #0 {
5522 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5523 ; PC64LE: # %bb.0: # %entry
5524 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5525 ; PC64LE-NEXT: xxswapd 1, 34
5526 ; PC64LE-NEXT: xscvspdpn 0, 0
5527 ; PC64LE-NEXT: xscvspdpn 1, 1
5528 ; PC64LE-NEXT: xscvdpsxws 0, 0
5529 ; PC64LE-NEXT: xscvdpsxws 1, 1
5530 ; PC64LE-NEXT: mffprwz 3, 0
5531 ; PC64LE-NEXT: mtfprwz 0, 3
5532 ; PC64LE-NEXT: mffprwz 3, 1
5533 ; PC64LE-NEXT: mtfprwz 1, 3
5534 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5537 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5538 ; PC64LE9: # %bb.0: # %entry
5539 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5540 ; PC64LE9-NEXT: xxswapd 1, 34
5541 ; PC64LE9-NEXT: xscvspdpn 0, 0
5542 ; PC64LE9-NEXT: xscvspdpn 1, 1
5543 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5544 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5545 ; PC64LE9-NEXT: mffprwz 3, 0
5546 ; PC64LE9-NEXT: mtfprwz 0, 3
5547 ; PC64LE9-NEXT: mffprwz 3, 1
5548 ; PC64LE9-NEXT: mtfprwz 1, 3
5549 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
5552 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(
5554 metadata !"fpexcept.strict") #0
5555 ret <2 x i32> %result
5558 define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32(<3 x float> %x) #0 {
5559 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5560 ; PC64LE: # %bb.0: # %entry
5561 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5562 ; PC64LE-NEXT: xxswapd 1, 34
5563 ; PC64LE-NEXT: xscvspdpn 0, 0
5564 ; PC64LE-NEXT: xscvspdpn 1, 1
5565 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5566 ; PC64LE-NEXT: xscvdpsxws 0, 0
5567 ; PC64LE-NEXT: xscvdpsxws 1, 1
5568 ; PC64LE-NEXT: mffprwz 3, 0
5569 ; PC64LE-NEXT: mtfprwz 0, 3
5570 ; PC64LE-NEXT: mffprwz 3, 1
5571 ; PC64LE-NEXT: mtfprwz 1, 3
5572 ; PC64LE-NEXT: addis 3, 2, .LCPI97_0@toc@ha
5573 ; PC64LE-NEXT: addi 3, 3, .LCPI97_0@toc@l
5574 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5575 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5576 ; PC64LE-NEXT: xxswapd 35, 0
5577 ; PC64LE-NEXT: xscvspdpn 0, 2
5578 ; PC64LE-NEXT: xscvdpsxws 0, 0
5579 ; PC64LE-NEXT: mffprwz 3, 0
5580 ; PC64LE-NEXT: mtvsrwz 36, 3
5581 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5584 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5585 ; PC64LE9: # %bb.0: # %entry
5586 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5587 ; PC64LE9-NEXT: xxswapd 1, 34
5588 ; PC64LE9-NEXT: xscvspdpn 0, 0
5589 ; PC64LE9-NEXT: xscvspdpn 1, 1
5590 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5591 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5592 ; PC64LE9-NEXT: mffprwz 3, 0
5593 ; PC64LE9-NEXT: mtfprwz 0, 3
5594 ; PC64LE9-NEXT: mffprwz 3, 1
5595 ; PC64LE9-NEXT: mtfprwz 1, 3
5596 ; PC64LE9-NEXT: addis 3, 2, .LCPI97_0@toc@ha
5597 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5598 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
5599 ; PC64LE9-NEXT: addi 3, 3, .LCPI97_0@toc@l
5600 ; PC64LE9-NEXT: lxv 0, 0(3)
5601 ; PC64LE9-NEXT: xscvspdpn 1, 1
5602 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5603 ; PC64LE9-NEXT: mffprwz 3, 1
5604 ; PC64LE9-NEXT: mtvsrwz 34, 3
5605 ; PC64LE9-NEXT: xxperm 34, 35, 0
5608 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(
5610 metadata !"fpexcept.strict") #0
5611 ret <3 x i32> %result
5614 define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32(<4 x float> %x) #0 {
5615 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5616 ; PC64LE: # %bb.0: # %entry
5617 ; PC64LE-NEXT: xvcvspsxws 34, 34
5620 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5621 ; PC64LE9: # %bb.0: # %entry
5622 ; PC64LE9-NEXT: xvcvspsxws 34, 34
5625 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(
5627 metadata !"fpexcept.strict") #0
5628 ret <4 x i32> %result
5631 define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32(<1 x float> %x) #0 {
5632 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5633 ; PC64LE: # %bb.0: # %entry
5634 ; PC64LE-NEXT: xscvdpsxds 0, 1
5635 ; PC64LE-NEXT: mffprd 3, 0
5638 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5639 ; PC64LE9: # %bb.0: # %entry
5640 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5641 ; PC64LE9-NEXT: mffprd 3, 0
5644 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(
5646 metadata !"fpexcept.strict") #0
5647 ret <1 x i64> %result
5650 define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32(<2 x float> %x) #0 {
5651 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5652 ; PC64LE: # %bb.0: # %entry
5653 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5654 ; PC64LE-NEXT: xxswapd 1, 34
5655 ; PC64LE-NEXT: xscvspdpn 0, 0
5656 ; PC64LE-NEXT: xscvspdpn 1, 1
5657 ; PC64LE-NEXT: xscvdpsxds 0, 0
5658 ; PC64LE-NEXT: xscvdpsxds 1, 1
5659 ; PC64LE-NEXT: mffprd 3, 0
5660 ; PC64LE-NEXT: mtfprd 0, 3
5661 ; PC64LE-NEXT: mffprd 3, 1
5662 ; PC64LE-NEXT: mtfprd 1, 3
5663 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5666 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5667 ; PC64LE9: # %bb.0: # %entry
5668 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5669 ; PC64LE9-NEXT: xscvspdpn 0, 0
5670 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5671 ; PC64LE9-NEXT: mffprd 3, 0
5672 ; PC64LE9-NEXT: xxswapd 0, 34
5673 ; PC64LE9-NEXT: xscvspdpn 0, 0
5674 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5675 ; PC64LE9-NEXT: mffprd 4, 0
5676 ; PC64LE9-NEXT: mtvsrdd 34, 4, 3
5679 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(
5681 metadata !"fpexcept.strict") #0
5682 ret <2 x i64> %result
5685 define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32(<3 x float> %x) #0 {
5686 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5687 ; PC64LE: # %bb.0: # %entry
5688 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5689 ; PC64LE-NEXT: xxswapd 1, 34
5690 ; PC64LE-NEXT: xscvspdpn 0, 0
5691 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5692 ; PC64LE-NEXT: xscvdpsxds 0, 0
5693 ; PC64LE-NEXT: mffprd 3, 0
5694 ; PC64LE-NEXT: xscvspdpn 0, 1
5695 ; PC64LE-NEXT: xscvdpsxds 0, 0
5696 ; PC64LE-NEXT: mffprd 4, 0
5697 ; PC64LE-NEXT: xscvspdpn 0, 2
5698 ; PC64LE-NEXT: xscvdpsxds 0, 0
5699 ; PC64LE-NEXT: mffprd 5, 0
5702 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5703 ; PC64LE9: # %bb.0: # %entry
5704 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5705 ; PC64LE9-NEXT: xscvspdpn 0, 0
5706 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5707 ; PC64LE9-NEXT: mffprd 3, 0
5708 ; PC64LE9-NEXT: xxswapd 0, 34
5709 ; PC64LE9-NEXT: xscvspdpn 0, 0
5710 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5711 ; PC64LE9-NEXT: mffprd 4, 0
5712 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5713 ; PC64LE9-NEXT: xscvspdpn 0, 0
5714 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5715 ; PC64LE9-NEXT: mffprd 5, 0
5718 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(
5720 metadata !"fpexcept.strict") #0
5721 ret <3 x i64> %result
5724 define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32(<4 x float> %x) #0 {
5725 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5726 ; PC64LE: # %bb.0: # %entry
5727 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
5728 ; PC64LE-NEXT: xxswapd 1, 34
5729 ; PC64LE-NEXT: xscvspdpn 0, 0
5730 ; PC64LE-NEXT: xscvspdpn 1, 1
5731 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
5732 ; PC64LE-NEXT: xscvdpsxds 0, 0
5733 ; PC64LE-NEXT: xscvdpsxds 1, 1
5734 ; PC64LE-NEXT: mffprd 3, 0
5735 ; PC64LE-NEXT: mtfprd 0, 3
5736 ; PC64LE-NEXT: mffprd 3, 1
5737 ; PC64LE-NEXT: mtfprd 1, 3
5738 ; PC64LE-NEXT: xxmrghd 36, 1, 0
5739 ; PC64LE-NEXT: xscvspdpn 0, 34
5740 ; PC64LE-NEXT: xscvspdpn 1, 2
5741 ; PC64LE-NEXT: vmr 2, 4
5742 ; PC64LE-NEXT: xscvdpsxds 0, 0
5743 ; PC64LE-NEXT: xscvdpsxds 1, 1
5744 ; PC64LE-NEXT: mffprd 3, 0
5745 ; PC64LE-NEXT: mtfprd 0, 3
5746 ; PC64LE-NEXT: mffprd 3, 1
5747 ; PC64LE-NEXT: mtfprd 1, 3
5748 ; PC64LE-NEXT: xxmrghd 35, 0, 1
5751 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5752 ; PC64LE9: # %bb.0: # %entry
5753 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
5754 ; PC64LE9-NEXT: xscvspdpn 0, 0
5755 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5756 ; PC64LE9-NEXT: mffprd 3, 0
5757 ; PC64LE9-NEXT: xxswapd 0, 34
5758 ; PC64LE9-NEXT: xscvspdpn 0, 0
5759 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5760 ; PC64LE9-NEXT: mffprd 4, 0
5761 ; PC64LE9-NEXT: xscvspdpn 0, 34
5762 ; PC64LE9-NEXT: mtvsrdd 36, 4, 3
5763 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5764 ; PC64LE9-NEXT: mffprd 3, 0
5765 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
5766 ; PC64LE9-NEXT: vmr 2, 4
5767 ; PC64LE9-NEXT: xscvspdpn 0, 0
5768 ; PC64LE9-NEXT: xscvdpsxds 0, 0
5769 ; PC64LE9-NEXT: mffprd 4, 0
5770 ; PC64LE9-NEXT: mtvsrdd 35, 3, 4
5773 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(
5775 metadata !"fpexcept.strict") #0
5776 ret <4 x i64> %result
5779 define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64(<1 x double> %x) #0 {
5780 ; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5781 ; PC64LE: # %bb.0: # %entry
5782 ; PC64LE-NEXT: xscvdpsxws 0, 1
5783 ; PC64LE-NEXT: mffprwz 3, 0
5786 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5787 ; PC64LE9: # %bb.0: # %entry
5788 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5789 ; PC64LE9-NEXT: mffprwz 3, 0
5792 %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(
5794 metadata !"fpexcept.strict") #0
5795 ret <1 x i32> %result
5799 define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64(<2 x double> %x) #0 {
5800 ; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5801 ; PC64LE: # %bb.0: # %entry
5802 ; PC64LE-NEXT: xscvdpsxws 1, 34
5803 ; PC64LE-NEXT: xxswapd 0, 34
5804 ; PC64LE-NEXT: xscvdpsxws 0, 0
5805 ; PC64LE-NEXT: mffprwz 3, 1
5806 ; PC64LE-NEXT: mtfprwz 1, 3
5807 ; PC64LE-NEXT: mffprwz 3, 0
5808 ; PC64LE-NEXT: mtfprwz 0, 3
5809 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5812 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5813 ; PC64LE9: # %bb.0: # %entry
5814 ; PC64LE9-NEXT: xxswapd 1, 34
5815 ; PC64LE9-NEXT: xscvdpsxws 0, 34
5816 ; PC64LE9-NEXT: xscvdpsxws 1, 1
5817 ; PC64LE9-NEXT: mffprwz 3, 0
5818 ; PC64LE9-NEXT: mtfprwz 0, 3
5819 ; PC64LE9-NEXT: mffprwz 3, 1
5820 ; PC64LE9-NEXT: mtfprwz 1, 3
5821 ; PC64LE9-NEXT: xxmrghw 34, 0, 1
5824 %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(
5826 metadata !"fpexcept.strict") #0
5827 ret <2 x i32> %result
5830 define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64(<3 x double> %x) #0 {
5831 ; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5832 ; PC64LE: # %bb.0: # %entry
5833 ; PC64LE-NEXT: xscvdpsxws 0, 1
5834 ; PC64LE-NEXT: xscvdpsxws 1, 2
5835 ; PC64LE-NEXT: mffprwz 3, 0
5836 ; PC64LE-NEXT: mtfprwz 0, 3
5837 ; PC64LE-NEXT: mffprwz 3, 1
5838 ; PC64LE-NEXT: mtfprwz 1, 3
5839 ; PC64LE-NEXT: addis 3, 2, .LCPI105_0@toc@ha
5840 ; PC64LE-NEXT: addi 3, 3, .LCPI105_0@toc@l
5841 ; PC64LE-NEXT: xxmrghw 34, 1, 0
5842 ; PC64LE-NEXT: lxvd2x 0, 0, 3
5843 ; PC64LE-NEXT: xxswapd 35, 0
5844 ; PC64LE-NEXT: xscvdpsxws 0, 3
5845 ; PC64LE-NEXT: mffprwz 3, 0
5846 ; PC64LE-NEXT: mtvsrwz 36, 3
5847 ; PC64LE-NEXT: vperm 2, 4, 2, 3
5850 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5851 ; PC64LE9: # %bb.0: # %entry
5852 ; PC64LE9-NEXT: xscvdpsxws 0, 1
5853 ; PC64LE9-NEXT: xscvdpsxws 1, 2
5854 ; PC64LE9-NEXT: mffprwz 3, 0
5855 ; PC64LE9-NEXT: mtfprwz 0, 3
5856 ; PC64LE9-NEXT: mffprwz 3, 1
5857 ; PC64LE9-NEXT: mtfprwz 1, 3
5858 ; PC64LE9-NEXT: addis 3, 2, .LCPI105_0@toc@ha
5859 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
5860 ; PC64LE9-NEXT: xscvdpsxws 1, 3
5861 ; PC64LE9-NEXT: addi 3, 3, .LCPI105_0@toc@l
5862 ; PC64LE9-NEXT: lxv 0, 0(3)
5863 ; PC64LE9-NEXT: mffprwz 3, 1
5864 ; PC64LE9-NEXT: mtvsrwz 34, 3
5865 ; PC64LE9-NEXT: xxperm 34, 35, 0
5868 %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(
5870 metadata !"fpexcept.strict") #0
5871 ret <3 x i32> %result
5874 define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64(<4 x double> %x) #0 {
5875 ; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5876 ; PC64LE: # %bb.0: # %entry
5877 ; PC64LE-NEXT: xxswapd 0, 34
5878 ; PC64LE-NEXT: xscvdpsxws 2, 34
5879 ; PC64LE-NEXT: xxswapd 1, 35
5880 ; PC64LE-NEXT: xscvdpsxws 0, 0
5881 ; PC64LE-NEXT: xscvdpsxws 1, 1
5882 ; PC64LE-NEXT: mffprwz 3, 2
5883 ; PC64LE-NEXT: xscvdpsxws 2, 35
5884 ; PC64LE-NEXT: mffprwz 4, 0
5885 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
5886 ; PC64LE-NEXT: mffprwz 3, 2
5887 ; PC64LE-NEXT: mtfprd 0, 4
5888 ; PC64LE-NEXT: mffprwz 4, 1
5889 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
5890 ; PC64LE-NEXT: mtfprd 1, 4
5891 ; PC64LE-NEXT: xxmrghd 34, 1, 0
5894 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5895 ; PC64LE9: # %bb.0: # %entry
5896 ; PC64LE9-NEXT: xscvdpsxws 0, 34
5897 ; PC64LE9-NEXT: mffprwz 3, 0
5898 ; PC64LE9-NEXT: xxswapd 0, 34
5899 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5900 ; PC64LE9-NEXT: mffprwz 4, 0
5901 ; PC64LE9-NEXT: xscvdpsxws 0, 35
5902 ; PC64LE9-NEXT: rldimi 4, 3, 32, 0
5903 ; PC64LE9-NEXT: mffprwz 3, 0
5904 ; PC64LE9-NEXT: xxswapd 0, 35
5905 ; PC64LE9-NEXT: xscvdpsxws 0, 0
5906 ; PC64LE9-NEXT: mffprwz 5, 0
5907 ; PC64LE9-NEXT: rldimi 5, 3, 32, 0
5908 ; PC64LE9-NEXT: mtvsrdd 34, 5, 4
5911 %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(
5913 metadata !"fpexcept.strict") #0
5914 ret <4 x i32> %result
5917 define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64(<1 x double> %x) #0 {
5918 ; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64:
5919 ; PC64LE: # %bb.0: # %entry
5920 ; PC64LE-NEXT: xscvdpsxds 0, 1
5921 ; PC64LE-NEXT: mffprd 3, 0
5924 ; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64:
5925 ; PC64LE9: # %bb.0: # %entry
5926 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5927 ; PC64LE9-NEXT: mffprd 3, 0
5930 %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(
5932 metadata !"fpexcept.strict") #0
5933 ret <1 x i64> %result
5936 define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64(<2 x double> %x) #0 {
5937 ; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64:
5938 ; PC64LE: # %bb.0: # %entry
5939 ; PC64LE-NEXT: xvcvdpsxds 34, 34
5942 ; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64:
5943 ; PC64LE9: # %bb.0: # %entry
5944 ; PC64LE9-NEXT: xvcvdpsxds 34, 34
5947 %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(
5949 metadata !"fpexcept.strict") #0
5950 ret <2 x i64> %result
5953 define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64(<3 x double> %x) #0 {
5954 ; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64:
5955 ; PC64LE: # %bb.0: # %entry
5956 ; PC64LE-NEXT: xscvdpsxds 0, 1
5957 ; PC64LE-NEXT: mffprd 3, 0
5958 ; PC64LE-NEXT: xscvdpsxds 0, 2
5959 ; PC64LE-NEXT: mffprd 4, 0
5960 ; PC64LE-NEXT: xscvdpsxds 0, 3
5961 ; PC64LE-NEXT: mffprd 5, 0
5964 ; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64:
5965 ; PC64LE9: # %bb.0: # %entry
5966 ; PC64LE9-NEXT: xscvdpsxds 0, 1
5967 ; PC64LE9-NEXT: mffprd 3, 0
5968 ; PC64LE9-NEXT: xscvdpsxds 0, 2
5969 ; PC64LE9-NEXT: mffprd 4, 0
5970 ; PC64LE9-NEXT: xscvdpsxds 0, 3
5971 ; PC64LE9-NEXT: mffprd 5, 0
5974 %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(
5976 metadata !"fpexcept.strict") #0
5977 ret <3 x i64> %result
5980 define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64(<4 x double> %x) #0 {
5981 ; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64:
5982 ; PC64LE: # %bb.0: # %entry
5983 ; PC64LE-NEXT: xvcvdpsxds 35, 35
5984 ; PC64LE-NEXT: xvcvdpsxds 34, 34
5987 ; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64:
5988 ; PC64LE9: # %bb.0: # %entry
5989 ; PC64LE9-NEXT: xvcvdpsxds 35, 35
5990 ; PC64LE9-NEXT: xvcvdpsxds 34, 34
5993 %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(
5995 metadata !"fpexcept.strict") #0
5996 ret <4 x i64> %result
5999 define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32(<1 x float> %x) #0 {
6000 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32:
6001 ; PC64LE: # %bb.0: # %entry
6002 ; PC64LE-NEXT: xscvdpuxws 0, 1
6003 ; PC64LE-NEXT: mffprwz 3, 0
6006 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32:
6007 ; PC64LE9: # %bb.0: # %entry
6008 ; PC64LE9-NEXT: xscvdpuxws 0, 1
6009 ; PC64LE9-NEXT: mffprwz 3, 0
6012 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(
6014 metadata !"fpexcept.strict") #0
6015 ret <1 x i32> %result
6018 define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32(<2 x float> %x) #0 {
6019 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32:
6020 ; PC64LE: # %bb.0: # %entry
6021 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6022 ; PC64LE-NEXT: xxswapd 1, 34
6023 ; PC64LE-NEXT: xscvspdpn 0, 0
6024 ; PC64LE-NEXT: xscvspdpn 1, 1
6025 ; PC64LE-NEXT: xscvdpuxws 0, 0
6026 ; PC64LE-NEXT: xscvdpuxws 1, 1
6027 ; PC64LE-NEXT: mffprwz 3, 0
6028 ; PC64LE-NEXT: mtfprwz 0, 3
6029 ; PC64LE-NEXT: mffprwz 3, 1
6030 ; PC64LE-NEXT: mtfprwz 1, 3
6031 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6034 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32:
6035 ; PC64LE9: # %bb.0: # %entry
6036 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6037 ; PC64LE9-NEXT: xxswapd 1, 34
6038 ; PC64LE9-NEXT: xscvspdpn 0, 0
6039 ; PC64LE9-NEXT: xscvspdpn 1, 1
6040 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6041 ; PC64LE9-NEXT: xscvdpuxws 1, 1
6042 ; PC64LE9-NEXT: mffprwz 3, 0
6043 ; PC64LE9-NEXT: mtfprwz 0, 3
6044 ; PC64LE9-NEXT: mffprwz 3, 1
6045 ; PC64LE9-NEXT: mtfprwz 1, 3
6046 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
6049 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(
6051 metadata !"fpexcept.strict") #0
6052 ret <2 x i32> %result
6055 define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32(<3 x float> %x) #0 {
6056 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6057 ; PC64LE: # %bb.0: # %entry
6058 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6059 ; PC64LE-NEXT: xxswapd 1, 34
6060 ; PC64LE-NEXT: xscvspdpn 0, 0
6061 ; PC64LE-NEXT: xscvspdpn 1, 1
6062 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6063 ; PC64LE-NEXT: xscvdpuxws 0, 0
6064 ; PC64LE-NEXT: xscvdpuxws 1, 1
6065 ; PC64LE-NEXT: mffprwz 3, 0
6066 ; PC64LE-NEXT: mtfprwz 0, 3
6067 ; PC64LE-NEXT: mffprwz 3, 1
6068 ; PC64LE-NEXT: mtfprwz 1, 3
6069 ; PC64LE-NEXT: addis 3, 2, .LCPI113_0@toc@ha
6070 ; PC64LE-NEXT: addi 3, 3, .LCPI113_0@toc@l
6071 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6072 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6073 ; PC64LE-NEXT: xxswapd 35, 0
6074 ; PC64LE-NEXT: xscvspdpn 0, 2
6075 ; PC64LE-NEXT: xscvdpuxws 0, 0
6076 ; PC64LE-NEXT: mffprwz 3, 0
6077 ; PC64LE-NEXT: mtvsrwz 36, 3
6078 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6081 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6082 ; PC64LE9: # %bb.0: # %entry
6083 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6084 ; PC64LE9-NEXT: xxswapd 1, 34
6085 ; PC64LE9-NEXT: xscvspdpn 0, 0
6086 ; PC64LE9-NEXT: xscvspdpn 1, 1
6087 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6088 ; PC64LE9-NEXT: xscvdpuxws 1, 1
6089 ; PC64LE9-NEXT: mffprwz 3, 0
6090 ; PC64LE9-NEXT: mtfprwz 0, 3
6091 ; PC64LE9-NEXT: mffprwz 3, 1
6092 ; PC64LE9-NEXT: mtfprwz 1, 3
6093 ; PC64LE9-NEXT: addis 3, 2, .LCPI113_0@toc@ha
6094 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
6095 ; PC64LE9-NEXT: xxsldwi 1, 34, 34, 1
6096 ; PC64LE9-NEXT: addi 3, 3, .LCPI113_0@toc@l
6097 ; PC64LE9-NEXT: lxv 0, 0(3)
6098 ; PC64LE9-NEXT: xscvspdpn 1, 1
6099 ; PC64LE9-NEXT: xscvdpuxws 1, 1
6100 ; PC64LE9-NEXT: mffprwz 3, 1
6101 ; PC64LE9-NEXT: mtvsrwz 34, 3
6102 ; PC64LE9-NEXT: xxperm 34, 35, 0
6105 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(
6107 metadata !"fpexcept.strict") #0
6108 ret <3 x i32> %result
6111 define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32(<4 x float> %x) #0 {
6112 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6113 ; PC64LE: # %bb.0: # %entry
6114 ; PC64LE-NEXT: xvcvspuxws 34, 34
6117 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6118 ; PC64LE9: # %bb.0: # %entry
6119 ; PC64LE9-NEXT: xvcvspuxws 34, 34
6122 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(
6124 metadata !"fpexcept.strict") #0
6125 ret <4 x i32> %result
6128 define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32(<1 x float> %x) #0 {
6129 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6130 ; PC64LE: # %bb.0: # %entry
6131 ; PC64LE-NEXT: xscvdpuxds 0, 1
6132 ; PC64LE-NEXT: mffprd 3, 0
6135 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6136 ; PC64LE9: # %bb.0: # %entry
6137 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6138 ; PC64LE9-NEXT: mffprd 3, 0
6141 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(
6143 metadata !"fpexcept.strict") #0
6144 ret <1 x i64> %result
6147 define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32(<2 x float> %x) #0 {
6148 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6149 ; PC64LE: # %bb.0: # %entry
6150 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6151 ; PC64LE-NEXT: xxswapd 1, 34
6152 ; PC64LE-NEXT: xscvspdpn 0, 0
6153 ; PC64LE-NEXT: xscvspdpn 1, 1
6154 ; PC64LE-NEXT: xscvdpuxds 0, 0
6155 ; PC64LE-NEXT: xscvdpuxds 1, 1
6156 ; PC64LE-NEXT: mffprd 3, 0
6157 ; PC64LE-NEXT: mtfprd 0, 3
6158 ; PC64LE-NEXT: mffprd 3, 1
6159 ; PC64LE-NEXT: mtfprd 1, 3
6160 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6163 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6164 ; PC64LE9: # %bb.0: # %entry
6165 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6166 ; PC64LE9-NEXT: xscvspdpn 0, 0
6167 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6168 ; PC64LE9-NEXT: mffprd 3, 0
6169 ; PC64LE9-NEXT: xxswapd 0, 34
6170 ; PC64LE9-NEXT: xscvspdpn 0, 0
6171 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6172 ; PC64LE9-NEXT: mffprd 4, 0
6173 ; PC64LE9-NEXT: mtvsrdd 34, 4, 3
6176 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(
6178 metadata !"fpexcept.strict") #0
6179 ret <2 x i64> %result
6182 define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32(<3 x float> %x) #0 {
6183 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6184 ; PC64LE: # %bb.0: # %entry
6185 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6186 ; PC64LE-NEXT: xxswapd 1, 34
6187 ; PC64LE-NEXT: xscvspdpn 0, 0
6188 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6189 ; PC64LE-NEXT: xscvdpuxds 0, 0
6190 ; PC64LE-NEXT: mffprd 3, 0
6191 ; PC64LE-NEXT: xscvspdpn 0, 1
6192 ; PC64LE-NEXT: xscvdpuxds 0, 0
6193 ; PC64LE-NEXT: mffprd 4, 0
6194 ; PC64LE-NEXT: xscvspdpn 0, 2
6195 ; PC64LE-NEXT: xscvdpuxds 0, 0
6196 ; PC64LE-NEXT: mffprd 5, 0
6199 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6200 ; PC64LE9: # %bb.0: # %entry
6201 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6202 ; PC64LE9-NEXT: xscvspdpn 0, 0
6203 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6204 ; PC64LE9-NEXT: mffprd 3, 0
6205 ; PC64LE9-NEXT: xxswapd 0, 34
6206 ; PC64LE9-NEXT: xscvspdpn 0, 0
6207 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6208 ; PC64LE9-NEXT: mffprd 4, 0
6209 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6210 ; PC64LE9-NEXT: xscvspdpn 0, 0
6211 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6212 ; PC64LE9-NEXT: mffprd 5, 0
6215 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(
6217 metadata !"fpexcept.strict") #0
6218 ret <3 x i64> %result
6221 define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32(<4 x float> %x) #0 {
6222 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6223 ; PC64LE: # %bb.0: # %entry
6224 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6225 ; PC64LE-NEXT: xxswapd 1, 34
6226 ; PC64LE-NEXT: xscvspdpn 0, 0
6227 ; PC64LE-NEXT: xscvspdpn 1, 1
6228 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6229 ; PC64LE-NEXT: xscvdpuxds 0, 0
6230 ; PC64LE-NEXT: xscvdpuxds 1, 1
6231 ; PC64LE-NEXT: mffprd 3, 0
6232 ; PC64LE-NEXT: mtfprd 0, 3
6233 ; PC64LE-NEXT: mffprd 3, 1
6234 ; PC64LE-NEXT: mtfprd 1, 3
6235 ; PC64LE-NEXT: xxmrghd 36, 1, 0
6236 ; PC64LE-NEXT: xscvspdpn 0, 34
6237 ; PC64LE-NEXT: xscvspdpn 1, 2
6238 ; PC64LE-NEXT: vmr 2, 4
6239 ; PC64LE-NEXT: xscvdpuxds 0, 0
6240 ; PC64LE-NEXT: xscvdpuxds 1, 1
6241 ; PC64LE-NEXT: mffprd 3, 0
6242 ; PC64LE-NEXT: mtfprd 0, 3
6243 ; PC64LE-NEXT: mffprd 3, 1
6244 ; PC64LE-NEXT: mtfprd 1, 3
6245 ; PC64LE-NEXT: xxmrghd 35, 0, 1
6248 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6249 ; PC64LE9: # %bb.0: # %entry
6250 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6251 ; PC64LE9-NEXT: xscvspdpn 0, 0
6252 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6253 ; PC64LE9-NEXT: mffprd 3, 0
6254 ; PC64LE9-NEXT: xxswapd 0, 34
6255 ; PC64LE9-NEXT: xscvspdpn 0, 0
6256 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6257 ; PC64LE9-NEXT: mffprd 4, 0
6258 ; PC64LE9-NEXT: xscvspdpn 0, 34
6259 ; PC64LE9-NEXT: mtvsrdd 36, 4, 3
6260 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6261 ; PC64LE9-NEXT: mffprd 3, 0
6262 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6263 ; PC64LE9-NEXT: vmr 2, 4
6264 ; PC64LE9-NEXT: xscvspdpn 0, 0
6265 ; PC64LE9-NEXT: xscvdpuxds 0, 0
6266 ; PC64LE9-NEXT: mffprd 4, 0
6267 ; PC64LE9-NEXT: mtvsrdd 35, 3, 4
6270 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(
6272 metadata !"fpexcept.strict") #0
6273 ret <4 x i64> %result
6276 define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64(<1 x double> %x) #0 {
6277 ; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6278 ; PC64LE: # %bb.0: # %entry
6279 ; PC64LE-NEXT: xscvdpuxws 0, 1
6280 ; PC64LE-NEXT: mffprwz 3, 0
6283 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6284 ; PC64LE9: # %bb.0: # %entry
6285 ; PC64LE9-NEXT: xscvdpuxws 0, 1
6286 ; PC64LE9-NEXT: mffprwz 3, 0
6289 %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(
6291 metadata !"fpexcept.strict") #0
6292 ret <1 x i32> %result
6295 define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64(<2 x double> %x) #0 {
6296 ; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6297 ; PC64LE: # %bb.0: # %entry
6298 ; PC64LE-NEXT: xscvdpuxws 1, 34
6299 ; PC64LE-NEXT: xxswapd 0, 34
6300 ; PC64LE-NEXT: xscvdpuxws 0, 0
6301 ; PC64LE-NEXT: mffprwz 3, 1
6302 ; PC64LE-NEXT: mtfprwz 1, 3
6303 ; PC64LE-NEXT: mffprwz 3, 0
6304 ; PC64LE-NEXT: mtfprwz 0, 3
6305 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6308 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6309 ; PC64LE9: # %bb.0: # %entry
6310 ; PC64LE9-NEXT: xxswapd 1, 34
6311 ; PC64LE9-NEXT: xscvdpuxws 0, 34
6312 ; PC64LE9-NEXT: xscvdpuxws 1, 1
6313 ; PC64LE9-NEXT: mffprwz 3, 0
6314 ; PC64LE9-NEXT: mtfprwz 0, 3
6315 ; PC64LE9-NEXT: mffprwz 3, 1
6316 ; PC64LE9-NEXT: mtfprwz 1, 3
6317 ; PC64LE9-NEXT: xxmrghw 34, 0, 1
6320 %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(
6322 metadata !"fpexcept.strict") #0
6323 ret <2 x i32> %result
6326 define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64(<3 x double> %x) #0 {
6327 ; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6328 ; PC64LE: # %bb.0: # %entry
6329 ; PC64LE-NEXT: xscvdpuxws 0, 1
6330 ; PC64LE-NEXT: xscvdpuxws 1, 2
6331 ; PC64LE-NEXT: mffprwz 3, 0
6332 ; PC64LE-NEXT: mtfprwz 0, 3
6333 ; PC64LE-NEXT: mffprwz 3, 1
6334 ; PC64LE-NEXT: mtfprwz 1, 3
6335 ; PC64LE-NEXT: addis 3, 2, .LCPI121_0@toc@ha
6336 ; PC64LE-NEXT: addi 3, 3, .LCPI121_0@toc@l
6337 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6338 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6339 ; PC64LE-NEXT: xxswapd 35, 0
6340 ; PC64LE-NEXT: xscvdpuxws 0, 3
6341 ; PC64LE-NEXT: mffprwz 3, 0
6342 ; PC64LE-NEXT: mtvsrwz 36, 3
6343 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6346 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6347 ; PC64LE9: # %bb.0: # %entry
6348 ; PC64LE9-NEXT: xscvdpuxws 0, 1
6349 ; PC64LE9-NEXT: xscvdpuxws 1, 2
6350 ; PC64LE9-NEXT: mffprwz 3, 0
6351 ; PC64LE9-NEXT: mtfprwz 0, 3
6352 ; PC64LE9-NEXT: mffprwz 3, 1
6353 ; PC64LE9-NEXT: mtfprwz 1, 3
6354 ; PC64LE9-NEXT: addis 3, 2, .LCPI121_0@toc@ha
6355 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
6356 ; PC64LE9-NEXT: xscvdpuxws 1, 3
6357 ; PC64LE9-NEXT: addi 3, 3, .LCPI121_0@toc@l
6358 ; PC64LE9-NEXT: lxv 0, 0(3)
6359 ; PC64LE9-NEXT: mffprwz 3, 1
6360 ; PC64LE9-NEXT: mtvsrwz 34, 3
6361 ; PC64LE9-NEXT: xxperm 34, 35, 0
6364 %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(
6366 metadata !"fpexcept.strict") #0
6367 ret <3 x i32> %result
6370 define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64(<4 x double> %x) #0 {
6371 ; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6372 ; PC64LE: # %bb.0: # %entry
6373 ; PC64LE-NEXT: xxswapd 0, 34
6374 ; PC64LE-NEXT: xscvdpuxws 2, 34
6375 ; PC64LE-NEXT: xxswapd 1, 35
6376 ; PC64LE-NEXT: xscvdpuxws 0, 0
6377 ; PC64LE-NEXT: xscvdpuxws 1, 1
6378 ; PC64LE-NEXT: mffprwz 3, 2
6379 ; PC64LE-NEXT: xscvdpuxws 2, 35
6380 ; PC64LE-NEXT: mffprwz 4, 0
6381 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
6382 ; PC64LE-NEXT: mffprwz 3, 2
6383 ; PC64LE-NEXT: mtfprd 0, 4
6384 ; PC64LE-NEXT: mffprwz 4, 1
6385 ; PC64LE-NEXT: rldimi 4, 3, 32, 0
6386 ; PC64LE-NEXT: mtfprd 1, 4
6387 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6390 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6391 ; PC64LE9: # %bb.0: # %entry
6392 ; PC64LE9-NEXT: xscvdpuxws 0, 34
6393 ; PC64LE9-NEXT: mffprwz 3, 0
6394 ; PC64LE9-NEXT: xxswapd 0, 34
6395 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6396 ; PC64LE9-NEXT: mffprwz 4, 0
6397 ; PC64LE9-NEXT: xscvdpuxws 0, 35
6398 ; PC64LE9-NEXT: rldimi 4, 3, 32, 0
6399 ; PC64LE9-NEXT: mffprwz 3, 0
6400 ; PC64LE9-NEXT: xxswapd 0, 35
6401 ; PC64LE9-NEXT: xscvdpuxws 0, 0
6402 ; PC64LE9-NEXT: mffprwz 5, 0
6403 ; PC64LE9-NEXT: rldimi 5, 3, 32, 0
6404 ; PC64LE9-NEXT: mtvsrdd 34, 5, 4
6407 %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(
6409 metadata !"fpexcept.strict") #0
6410 ret <4 x i32> %result
6413 define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64(<1 x double> %x) #0 {
6414 ; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6415 ; PC64LE: # %bb.0: # %entry
6416 ; PC64LE-NEXT: xscvdpuxds 0, 1
6417 ; PC64LE-NEXT: mffprd 3, 0
6420 ; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6421 ; PC64LE9: # %bb.0: # %entry
6422 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6423 ; PC64LE9-NEXT: mffprd 3, 0
6426 %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(
6428 metadata !"fpexcept.strict") #0
6429 ret <1 x i64> %result
6432 define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64(<2 x double> %x) #0 {
6433 ; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6434 ; PC64LE: # %bb.0: # %entry
6435 ; PC64LE-NEXT: xvcvdpuxds 34, 34
6438 ; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6439 ; PC64LE9: # %bb.0: # %entry
6440 ; PC64LE9-NEXT: xvcvdpuxds 34, 34
6443 %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(
6445 metadata !"fpexcept.strict") #0
6446 ret <2 x i64> %result
6449 define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64(<3 x double> %x) #0 {
6450 ; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6451 ; PC64LE: # %bb.0: # %entry
6452 ; PC64LE-NEXT: xscvdpuxds 0, 1
6453 ; PC64LE-NEXT: mffprd 3, 0
6454 ; PC64LE-NEXT: xscvdpuxds 0, 2
6455 ; PC64LE-NEXT: mffprd 4, 0
6456 ; PC64LE-NEXT: xscvdpuxds 0, 3
6457 ; PC64LE-NEXT: mffprd 5, 0
6460 ; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6461 ; PC64LE9: # %bb.0: # %entry
6462 ; PC64LE9-NEXT: xscvdpuxds 0, 1
6463 ; PC64LE9-NEXT: mffprd 3, 0
6464 ; PC64LE9-NEXT: xscvdpuxds 0, 2
6465 ; PC64LE9-NEXT: mffprd 4, 0
6466 ; PC64LE9-NEXT: xscvdpuxds 0, 3
6467 ; PC64LE9-NEXT: mffprd 5, 0
6470 %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(
6472 metadata !"fpexcept.strict") #0
6473 ret <3 x i64> %result
6476 define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64(<4 x double> %x) #0 {
6477 ; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6478 ; PC64LE: # %bb.0: # %entry
6479 ; PC64LE-NEXT: xvcvdpuxds 35, 35
6480 ; PC64LE-NEXT: xvcvdpuxds 34, 34
6483 ; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6484 ; PC64LE9: # %bb.0: # %entry
6485 ; PC64LE9-NEXT: xvcvdpuxds 35, 35
6486 ; PC64LE9-NEXT: xvcvdpuxds 34, 34
6489 %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(
6491 metadata !"fpexcept.strict") #0
6492 ret <4 x i64> %result
6495 define <1 x float> @constrained_vector_fptrunc_v1f64(<1 x double> %x) #0 {
6496 ; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
6497 ; PC64LE: # %bb.0: # %entry
6498 ; PC64LE-NEXT: xsrsp 1, 1
6501 ; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
6502 ; PC64LE9: # %bb.0: # %entry
6503 ; PC64LE9-NEXT: xsrsp 1, 1
6506 %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
6508 metadata !"round.dynamic",
6509 metadata !"fpexcept.strict") #1
6510 ret <1 x float> %result
6513 define <2 x float> @constrained_vector_fptrunc_v2f64(<2 x double> %x) #0 {
6514 ; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
6515 ; PC64LE: # %bb.0: # %entry
6516 ; PC64LE-NEXT: xxswapd 0, 34
6517 ; PC64LE-NEXT: xsrsp 1, 34
6518 ; PC64LE-NEXT: xsrsp 0, 0
6519 ; PC64LE-NEXT: xscvdpspn 1, 1
6520 ; PC64LE-NEXT: xscvdpspn 0, 0
6521 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6524 ; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
6525 ; PC64LE9: # %bb.0: # %entry
6526 ; PC64LE9-NEXT: xxswapd 1, 34
6527 ; PC64LE9-NEXT: xsrsp 0, 34
6528 ; PC64LE9-NEXT: xsrsp 1, 1
6529 ; PC64LE9-NEXT: xscvdpspn 0, 0
6530 ; PC64LE9-NEXT: xscvdpspn 1, 1
6531 ; PC64LE9-NEXT: xxmrghw 34, 0, 1
6534 %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
6536 metadata !"round.dynamic",
6537 metadata !"fpexcept.strict") #1
6538 ret <2 x float> %result
6541 define <3 x float> @constrained_vector_fptrunc_v3f64(<3 x double> %x) #0 {
6542 ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
6543 ; PC64LE: # %bb.0: # %entry
6544 ; PC64LE-NEXT: xsrsp 0, 1
6545 ; PC64LE-NEXT: xsrsp 1, 2
6546 ; PC64LE-NEXT: addis 3, 2, .LCPI129_0@toc@ha
6547 ; PC64LE-NEXT: addi 3, 3, .LCPI129_0@toc@l
6548 ; PC64LE-NEXT: xscvdpspn 0, 0
6549 ; PC64LE-NEXT: xscvdpspn 1, 1
6550 ; PC64LE-NEXT: xxmrghw 34, 1, 0
6551 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6552 ; PC64LE-NEXT: xxswapd 35, 0
6553 ; PC64LE-NEXT: xsrsp 0, 3
6554 ; PC64LE-NEXT: xscvdpspn 36, 0
6555 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6558 ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
6559 ; PC64LE9: # %bb.0: # %entry
6560 ; PC64LE9-NEXT: xsrsp 0, 1
6561 ; PC64LE9-NEXT: xsrsp 1, 2
6562 ; PC64LE9-NEXT: addis 3, 2, .LCPI129_0@toc@ha
6563 ; PC64LE9-NEXT: addi 3, 3, .LCPI129_0@toc@l
6564 ; PC64LE9-NEXT: xscvdpspn 0, 0
6565 ; PC64LE9-NEXT: xscvdpspn 1, 1
6566 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
6567 ; PC64LE9-NEXT: xsrsp 1, 3
6568 ; PC64LE9-NEXT: lxv 0, 0(3)
6569 ; PC64LE9-NEXT: xscvdpspn 34, 1
6570 ; PC64LE9-NEXT: xxperm 34, 35, 0
6573 %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
6575 metadata !"round.dynamic",
6576 metadata !"fpexcept.strict") #1
6577 ret <3 x float> %result
6580 define <4 x float> @constrained_vector_fptrunc_v4f64(<4 x double> %x) #0 {
6581 ; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
6582 ; PC64LE: # %bb.0: # %entry
6583 ; PC64LE-NEXT: xxmrgld 0, 35, 34
6584 ; PC64LE-NEXT: xxmrghd 1, 35, 34
6585 ; PC64LE-NEXT: xvcvdpsp 34, 0
6586 ; PC64LE-NEXT: xvcvdpsp 35, 1
6587 ; PC64LE-NEXT: vmrgew 2, 3, 2
6590 ; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
6591 ; PC64LE9: # %bb.0: # %entry
6592 ; PC64LE9-NEXT: xxmrgld 0, 35, 34
6593 ; PC64LE9-NEXT: xvcvdpsp 36, 0
6594 ; PC64LE9-NEXT: xxmrghd 0, 35, 34
6595 ; PC64LE9-NEXT: xvcvdpsp 34, 0
6596 ; PC64LE9-NEXT: vmrgew 2, 2, 4
6599 %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(
6601 metadata !"round.dynamic",
6602 metadata !"fpexcept.strict") #1
6603 ret <4 x float> %result
6606 define <1 x double> @constrained_vector_fpext_v1f32(<1 x float> %x) #0 {
6607 ; PC64LE-LABEL: constrained_vector_fpext_v1f32:
6608 ; PC64LE: # %bb.0: # %entry
6611 ; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
6612 ; PC64LE9: # %bb.0: # %entry
6615 %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
6617 metadata !"fpexcept.strict") #1
6618 ret <1 x double> %result
6621 define <2 x double> @constrained_vector_fpext_v2f32(<2 x float> %x) #0 {
6622 ; PC64LE-LABEL: constrained_vector_fpext_v2f32:
6623 ; PC64LE: # %bb.0: # %entry
6624 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6625 ; PC64LE-NEXT: xxswapd 1, 34
6626 ; PC64LE-NEXT: xscvspdpn 0, 0
6627 ; PC64LE-NEXT: xscvspdpn 1, 1
6628 ; PC64LE-NEXT: xxmrghd 34, 1, 0
6631 ; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
6632 ; PC64LE9: # %bb.0: # %entry
6633 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6634 ; PC64LE9-NEXT: xxswapd 1, 34
6635 ; PC64LE9-NEXT: xscvspdpn 0, 0
6636 ; PC64LE9-NEXT: xscvspdpn 1, 1
6637 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
6640 %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
6642 metadata !"fpexcept.strict") #1
6643 ret <2 x double> %result
6646 define <3 x double> @constrained_vector_fpext_v3f32(<3 x float> %x) #0 {
6647 ; PC64LE-LABEL: constrained_vector_fpext_v3f32:
6648 ; PC64LE: # %bb.0: # %entry
6649 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 1
6650 ; PC64LE-NEXT: xxswapd 1, 34
6651 ; PC64LE-NEXT: xscvspdpn 3, 0
6652 ; PC64LE-NEXT: xxsldwi 4, 34, 34, 3
6653 ; PC64LE-NEXT: xscvspdpn 2, 1
6654 ; PC64LE-NEXT: xscvspdpn 1, 4
6657 ; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
6658 ; PC64LE9: # %bb.0: # %entry
6659 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6660 ; PC64LE9-NEXT: xscvspdpn 3, 0
6661 ; PC64LE9-NEXT: xxswapd 0, 34
6662 ; PC64LE9-NEXT: xscvspdpn 2, 0
6663 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6664 ; PC64LE9-NEXT: xscvspdpn 1, 0
6667 %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
6669 metadata !"fpexcept.strict") #1
6670 ret <3 x double> %result
6673 define <4 x double> @constrained_vector_fpext_v4f32(<4 x float> %x) #0 {
6674 ; PC64LE-LABEL: constrained_vector_fpext_v4f32:
6675 ; PC64LE: # %bb.0: # %entry
6676 ; PC64LE-NEXT: xxsldwi 0, 34, 34, 3
6677 ; PC64LE-NEXT: xxswapd 1, 34
6678 ; PC64LE-NEXT: xscvspdpn 0, 0
6679 ; PC64LE-NEXT: xscvspdpn 1, 1
6680 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6681 ; PC64LE-NEXT: xscvspdpn 2, 2
6682 ; PC64LE-NEXT: xxmrghd 0, 1, 0
6683 ; PC64LE-NEXT: xscvspdpn 1, 34
6684 ; PC64LE-NEXT: xxlor 34, 0, 0
6685 ; PC64LE-NEXT: xxmrghd 35, 1, 2
6688 ; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
6689 ; PC64LE9: # %bb.0: # %entry
6690 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 3
6691 ; PC64LE9-NEXT: xxswapd 1, 34
6692 ; PC64LE9-NEXT: xscvspdpn 0, 0
6693 ; PC64LE9-NEXT: xscvspdpn 1, 1
6694 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 1
6695 ; PC64LE9-NEXT: xscvspdpn 2, 2
6696 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
6697 ; PC64LE9-NEXT: xscvspdpn 1, 34
6698 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
6699 ; PC64LE9-NEXT: xxlor 34, 0, 0
6702 %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(
6704 metadata !"fpexcept.strict") #1
6705 ret <4 x double> %result
6708 define <1 x float> @constrained_vector_ceil_v1f32(<1 x float> %x) #0 {
6709 ; PC64LE-LABEL: constrained_vector_ceil_v1f32:
6710 ; PC64LE: # %bb.0: # %entry
6711 ; PC64LE-NEXT: xsrdpip 1, 1
6714 ; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
6715 ; PC64LE9: # %bb.0: # %entry
6716 ; PC64LE9-NEXT: xsrdpip 1, 1
6719 %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
6721 metadata !"fpexcept.strict") #1
6722 ret <1 x float> %ceil
6725 define <2 x double> @constrained_vector_ceil_v2f64(<2 x double> %x) #0 {
6726 ; PC64LE-LABEL: constrained_vector_ceil_v2f64:
6727 ; PC64LE: # %bb.0: # %entry
6728 ; PC64LE-NEXT: xvrdpip 34, 34
6731 ; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
6732 ; PC64LE9: # %bb.0: # %entry
6733 ; PC64LE9-NEXT: xvrdpip 34, 34
6736 %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
6738 metadata !"fpexcept.strict") #1
6739 ret <2 x double> %ceil
6742 define <3 x float> @constrained_vector_ceil_v3f32(<3 x float> %x) #0 {
6743 ; PC64LE-LABEL: constrained_vector_ceil_v3f32:
6744 ; PC64LE: # %bb.0: # %entry
6745 ; PC64LE-NEXT: xxswapd 0, 34
6746 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
6747 ; PC64LE-NEXT: addis 3, 2, .LCPI137_0@toc@ha
6748 ; PC64LE-NEXT: xscvspdpn 0, 0
6749 ; PC64LE-NEXT: xscvspdpn 1, 1
6750 ; PC64LE-NEXT: addi 3, 3, .LCPI137_0@toc@l
6751 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6752 ; PC64LE-NEXT: xsrdpip 0, 0
6753 ; PC64LE-NEXT: xsrdpip 1, 1
6754 ; PC64LE-NEXT: xscvdpspn 1, 1
6755 ; PC64LE-NEXT: xscvdpspn 0, 0
6756 ; PC64LE-NEXT: xxmrghw 34, 0, 1
6757 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6758 ; PC64LE-NEXT: xxswapd 35, 0
6759 ; PC64LE-NEXT: xscvspdpn 0, 2
6760 ; PC64LE-NEXT: xsrdpip 0, 0
6761 ; PC64LE-NEXT: xscvdpspn 36, 0
6762 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6765 ; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
6766 ; PC64LE9: # %bb.0: # %entry
6767 ; PC64LE9-NEXT: xxswapd 1, 34
6768 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6769 ; PC64LE9-NEXT: addis 3, 2, .LCPI137_0@toc@ha
6770 ; PC64LE9-NEXT: addi 3, 3, .LCPI137_0@toc@l
6771 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6772 ; PC64LE9-NEXT: xscvspdpn 1, 1
6773 ; PC64LE9-NEXT: xscvspdpn 2, 2
6774 ; PC64LE9-NEXT: xscvspdpn 0, 0
6775 ; PC64LE9-NEXT: xsrdpip 1, 1
6776 ; PC64LE9-NEXT: xsrdpip 2, 2
6777 ; PC64LE9-NEXT: xsrdpip 0, 0
6778 ; PC64LE9-NEXT: xscvdpspn 2, 2
6779 ; PC64LE9-NEXT: xscvdpspn 1, 1
6780 ; PC64LE9-NEXT: xscvdpspn 34, 0
6781 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
6782 ; PC64LE9-NEXT: lxv 1, 0(3)
6783 ; PC64LE9-NEXT: xxperm 34, 35, 1
6786 %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
6788 metadata !"fpexcept.strict") #1
6789 ret <3 x float> %ceil
6792 define <3 x double> @constrained_vector_ceil_v3f64(<3 x double> %x) #0 {
6793 ; PC64LE-LABEL: constrained_vector_ceil_v3f64:
6794 ; PC64LE: # %bb.0: # %entry
6795 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
6796 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
6797 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6798 ; PC64LE-NEXT: xsrdpip 3, 3
6799 ; PC64LE-NEXT: xvrdpip 2, 0
6800 ; PC64LE-NEXT: xxswapd 1, 2
6801 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6802 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6805 ; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
6806 ; PC64LE9: # %bb.0: # %entry
6807 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
6808 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
6809 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6810 ; PC64LE9-NEXT: xsrdpip 3, 3
6811 ; PC64LE9-NEXT: xvrdpip 2, 0
6812 ; PC64LE9-NEXT: xxswapd 1, 2
6813 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6814 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6817 %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
6819 metadata !"fpexcept.strict") #1
6820 ret <3 x double> %ceil
6823 define <1 x float> @constrained_vector_floor_v1f32(<1 x float> %x) #0 {
6824 ; PC64LE-LABEL: constrained_vector_floor_v1f32:
6825 ; PC64LE: # %bb.0: # %entry
6826 ; PC64LE-NEXT: xsrdpim 1, 1
6829 ; PC64LE9-LABEL: constrained_vector_floor_v1f32:
6830 ; PC64LE9: # %bb.0: # %entry
6831 ; PC64LE9-NEXT: xsrdpim 1, 1
6834 %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
6836 metadata !"fpexcept.strict") #1
6837 ret <1 x float> %floor
6841 define <2 x double> @constrained_vector_floor_v2f64(<2 x double> %x) #0 {
6842 ; PC64LE-LABEL: constrained_vector_floor_v2f64:
6843 ; PC64LE: # %bb.0: # %entry
6844 ; PC64LE-NEXT: xvrdpim 34, 34
6847 ; PC64LE9-LABEL: constrained_vector_floor_v2f64:
6848 ; PC64LE9: # %bb.0: # %entry
6849 ; PC64LE9-NEXT: xvrdpim 34, 34
6852 %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
6854 metadata !"fpexcept.strict") #1
6855 ret <2 x double> %floor
6858 define <3 x float> @constrained_vector_floor_v3f32(<3 x float> %x) #0 {
6859 ; PC64LE-LABEL: constrained_vector_floor_v3f32:
6860 ; PC64LE: # %bb.0: # %entry
6861 ; PC64LE-NEXT: xxswapd 0, 34
6862 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
6863 ; PC64LE-NEXT: addis 3, 2, .LCPI141_0@toc@ha
6864 ; PC64LE-NEXT: xscvspdpn 0, 0
6865 ; PC64LE-NEXT: xscvspdpn 1, 1
6866 ; PC64LE-NEXT: addi 3, 3, .LCPI141_0@toc@l
6867 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6868 ; PC64LE-NEXT: xsrdpim 0, 0
6869 ; PC64LE-NEXT: xsrdpim 1, 1
6870 ; PC64LE-NEXT: xscvdpspn 1, 1
6871 ; PC64LE-NEXT: xscvdpspn 0, 0
6872 ; PC64LE-NEXT: xxmrghw 34, 0, 1
6873 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6874 ; PC64LE-NEXT: xxswapd 35, 0
6875 ; PC64LE-NEXT: xscvspdpn 0, 2
6876 ; PC64LE-NEXT: xsrdpim 0, 0
6877 ; PC64LE-NEXT: xscvdpspn 36, 0
6878 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6881 ; PC64LE9-LABEL: constrained_vector_floor_v3f32:
6882 ; PC64LE9: # %bb.0: # %entry
6883 ; PC64LE9-NEXT: xxswapd 1, 34
6884 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
6885 ; PC64LE9-NEXT: addis 3, 2, .LCPI141_0@toc@ha
6886 ; PC64LE9-NEXT: addi 3, 3, .LCPI141_0@toc@l
6887 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
6888 ; PC64LE9-NEXT: xscvspdpn 1, 1
6889 ; PC64LE9-NEXT: xscvspdpn 2, 2
6890 ; PC64LE9-NEXT: xscvspdpn 0, 0
6891 ; PC64LE9-NEXT: xsrdpim 1, 1
6892 ; PC64LE9-NEXT: xsrdpim 2, 2
6893 ; PC64LE9-NEXT: xsrdpim 0, 0
6894 ; PC64LE9-NEXT: xscvdpspn 2, 2
6895 ; PC64LE9-NEXT: xscvdpspn 1, 1
6896 ; PC64LE9-NEXT: xscvdpspn 34, 0
6897 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
6898 ; PC64LE9-NEXT: lxv 1, 0(3)
6899 ; PC64LE9-NEXT: xxperm 34, 35, 1
6902 %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
6904 metadata !"fpexcept.strict") #1
6905 ret <3 x float> %floor
6908 define <3 x double> @constrained_vector_floor_v3f64(<3 x double> %x) #0 {
6909 ; PC64LE-LABEL: constrained_vector_floor_v3f64:
6910 ; PC64LE: # %bb.0: # %entry
6911 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
6912 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
6913 ; PC64LE-NEXT: xxmrghd 0, 2, 1
6914 ; PC64LE-NEXT: xsrdpim 3, 3
6915 ; PC64LE-NEXT: xvrdpim 2, 0
6916 ; PC64LE-NEXT: xxswapd 1, 2
6917 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6918 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6921 ; PC64LE9-LABEL: constrained_vector_floor_v3f64:
6922 ; PC64LE9: # %bb.0: # %entry
6923 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
6924 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
6925 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
6926 ; PC64LE9-NEXT: xsrdpim 3, 3
6927 ; PC64LE9-NEXT: xvrdpim 2, 0
6928 ; PC64LE9-NEXT: xxswapd 1, 2
6929 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
6930 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
6933 %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
6935 metadata !"fpexcept.strict") #1
6936 ret <3 x double> %floor
6939 define <1 x float> @constrained_vector_round_v1f32(<1 x float> %x) #0 {
6940 ; PC64LE-LABEL: constrained_vector_round_v1f32:
6941 ; PC64LE: # %bb.0: # %entry
6942 ; PC64LE-NEXT: xsrdpi 1, 1
6945 ; PC64LE9-LABEL: constrained_vector_round_v1f32:
6946 ; PC64LE9: # %bb.0: # %entry
6947 ; PC64LE9-NEXT: xsrdpi 1, 1
6950 %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
6952 metadata !"fpexcept.strict") #1
6953 ret <1 x float> %round
6956 define <2 x double> @constrained_vector_round_v2f64(<2 x double> %x) #0 {
6957 ; PC64LE-LABEL: constrained_vector_round_v2f64:
6958 ; PC64LE: # %bb.0: # %entry
6959 ; PC64LE-NEXT: xvrdpi 34, 34
6962 ; PC64LE9-LABEL: constrained_vector_round_v2f64:
6963 ; PC64LE9: # %bb.0: # %entry
6964 ; PC64LE9-NEXT: xvrdpi 34, 34
6967 %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
6969 metadata !"fpexcept.strict") #1
6970 ret <2 x double> %round
6973 define <3 x float> @constrained_vector_round_v3f32(<3 x float> %x) #0 {
6974 ; PC64LE-LABEL: constrained_vector_round_v3f32:
6975 ; PC64LE: # %bb.0: # %entry
6976 ; PC64LE-NEXT: xxswapd 0, 34
6977 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
6978 ; PC64LE-NEXT: addis 3, 2, .LCPI145_0@toc@ha
6979 ; PC64LE-NEXT: xscvspdpn 0, 0
6980 ; PC64LE-NEXT: xscvspdpn 1, 1
6981 ; PC64LE-NEXT: addi 3, 3, .LCPI145_0@toc@l
6982 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
6983 ; PC64LE-NEXT: xsrdpi 0, 0
6984 ; PC64LE-NEXT: xsrdpi 1, 1
6985 ; PC64LE-NEXT: xscvdpspn 1, 1
6986 ; PC64LE-NEXT: xscvdpspn 0, 0
6987 ; PC64LE-NEXT: xxmrghw 34, 0, 1
6988 ; PC64LE-NEXT: lxvd2x 0, 0, 3
6989 ; PC64LE-NEXT: xxswapd 35, 0
6990 ; PC64LE-NEXT: xscvspdpn 0, 2
6991 ; PC64LE-NEXT: xsrdpi 0, 0
6992 ; PC64LE-NEXT: xscvdpspn 36, 0
6993 ; PC64LE-NEXT: vperm 2, 4, 2, 3
6996 ; PC64LE9-LABEL: constrained_vector_round_v3f32:
6997 ; PC64LE9: # %bb.0: # %entry
6998 ; PC64LE9-NEXT: xxswapd 1, 34
6999 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
7000 ; PC64LE9-NEXT: addis 3, 2, .LCPI145_0@toc@ha
7001 ; PC64LE9-NEXT: addi 3, 3, .LCPI145_0@toc@l
7002 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
7003 ; PC64LE9-NEXT: xscvspdpn 1, 1
7004 ; PC64LE9-NEXT: xscvspdpn 2, 2
7005 ; PC64LE9-NEXT: xscvspdpn 0, 0
7006 ; PC64LE9-NEXT: xsrdpi 1, 1
7007 ; PC64LE9-NEXT: xsrdpi 2, 2
7008 ; PC64LE9-NEXT: xsrdpi 0, 0
7009 ; PC64LE9-NEXT: xscvdpspn 2, 2
7010 ; PC64LE9-NEXT: xscvdpspn 1, 1
7011 ; PC64LE9-NEXT: xscvdpspn 34, 0
7012 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
7013 ; PC64LE9-NEXT: lxv 1, 0(3)
7014 ; PC64LE9-NEXT: xxperm 34, 35, 1
7017 %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
7019 metadata !"fpexcept.strict") #1
7020 ret <3 x float> %round
7024 define <3 x double> @constrained_vector_round_v3f64(<3 x double> %x) #0 {
7025 ; PC64LE-LABEL: constrained_vector_round_v3f64:
7026 ; PC64LE: # %bb.0: # %entry
7027 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
7028 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
7029 ; PC64LE-NEXT: xxmrghd 0, 2, 1
7030 ; PC64LE-NEXT: xsrdpi 3, 3
7031 ; PC64LE-NEXT: xvrdpi 2, 0
7032 ; PC64LE-NEXT: xxswapd 1, 2
7033 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7034 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7037 ; PC64LE9-LABEL: constrained_vector_round_v3f64:
7038 ; PC64LE9: # %bb.0: # %entry
7039 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
7040 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
7041 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
7042 ; PC64LE9-NEXT: xsrdpi 3, 3
7043 ; PC64LE9-NEXT: xvrdpi 2, 0
7044 ; PC64LE9-NEXT: xxswapd 1, 2
7045 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7046 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7049 %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
7051 metadata !"fpexcept.strict") #1
7052 ret <3 x double> %round
7055 define <1 x float> @constrained_vector_trunc_v1f32(<1 x float> %x) #0 {
7056 ; PC64LE-LABEL: constrained_vector_trunc_v1f32:
7057 ; PC64LE: # %bb.0: # %entry
7058 ; PC64LE-NEXT: xsrdpiz 1, 1
7061 ; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
7062 ; PC64LE9: # %bb.0: # %entry
7063 ; PC64LE9-NEXT: xsrdpiz 1, 1
7066 %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
7068 metadata !"fpexcept.strict") #1
7069 ret <1 x float> %trunc
7072 define <2 x double> @constrained_vector_trunc_v2f64(<2 x double> %x) #0 {
7073 ; PC64LE-LABEL: constrained_vector_trunc_v2f64:
7074 ; PC64LE: # %bb.0: # %entry
7075 ; PC64LE-NEXT: xvrdpiz 34, 34
7078 ; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
7079 ; PC64LE9: # %bb.0: # %entry
7080 ; PC64LE9-NEXT: xvrdpiz 34, 34
7083 %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
7085 metadata !"fpexcept.strict") #1
7086 ret <2 x double> %trunc
7089 define <3 x float> @constrained_vector_trunc_v3f32(<3 x float> %x) #0 {
7090 ; PC64LE-LABEL: constrained_vector_trunc_v3f32:
7091 ; PC64LE: # %bb.0: # %entry
7092 ; PC64LE-NEXT: xxswapd 0, 34
7093 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 3
7094 ; PC64LE-NEXT: addis 3, 2, .LCPI149_0@toc@ha
7095 ; PC64LE-NEXT: xscvspdpn 0, 0
7096 ; PC64LE-NEXT: xscvspdpn 1, 1
7097 ; PC64LE-NEXT: addi 3, 3, .LCPI149_0@toc@l
7098 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
7099 ; PC64LE-NEXT: xsrdpiz 0, 0
7100 ; PC64LE-NEXT: xsrdpiz 1, 1
7101 ; PC64LE-NEXT: xscvdpspn 1, 1
7102 ; PC64LE-NEXT: xscvdpspn 0, 0
7103 ; PC64LE-NEXT: xxmrghw 34, 0, 1
7104 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7105 ; PC64LE-NEXT: xxswapd 35, 0
7106 ; PC64LE-NEXT: xscvspdpn 0, 2
7107 ; PC64LE-NEXT: xsrdpiz 0, 0
7108 ; PC64LE-NEXT: xscvdpspn 36, 0
7109 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7112 ; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
7113 ; PC64LE9: # %bb.0: # %entry
7114 ; PC64LE9-NEXT: xxswapd 1, 34
7115 ; PC64LE9-NEXT: xxsldwi 2, 34, 34, 3
7116 ; PC64LE9-NEXT: addis 3, 2, .LCPI149_0@toc@ha
7117 ; PC64LE9-NEXT: addi 3, 3, .LCPI149_0@toc@l
7118 ; PC64LE9-NEXT: xxsldwi 0, 34, 34, 1
7119 ; PC64LE9-NEXT: xscvspdpn 1, 1
7120 ; PC64LE9-NEXT: xscvspdpn 2, 2
7121 ; PC64LE9-NEXT: xscvspdpn 0, 0
7122 ; PC64LE9-NEXT: xsrdpiz 1, 1
7123 ; PC64LE9-NEXT: xsrdpiz 2, 2
7124 ; PC64LE9-NEXT: xsrdpiz 0, 0
7125 ; PC64LE9-NEXT: xscvdpspn 2, 2
7126 ; PC64LE9-NEXT: xscvdpspn 1, 1
7127 ; PC64LE9-NEXT: xscvdpspn 34, 0
7128 ; PC64LE9-NEXT: xxmrghw 35, 1, 2
7129 ; PC64LE9-NEXT: lxv 1, 0(3)
7130 ; PC64LE9-NEXT: xxperm 34, 35, 1
7133 %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
7135 metadata !"fpexcept.strict") #1
7136 ret <3 x float> %trunc
7139 define <3 x double> @constrained_vector_trunc_v3f64(<3 x double> %x) #0 {
7140 ; PC64LE-LABEL: constrained_vector_trunc_v3f64:
7141 ; PC64LE: # %bb.0: # %entry
7142 ; PC64LE-NEXT: # kill: def $f2 killed $f2 def $vsl2
7143 ; PC64LE-NEXT: # kill: def $f1 killed $f1 def $vsl1
7144 ; PC64LE-NEXT: xxmrghd 0, 2, 1
7145 ; PC64LE-NEXT: xsrdpiz 3, 3
7146 ; PC64LE-NEXT: xvrdpiz 2, 0
7147 ; PC64LE-NEXT: xxswapd 1, 2
7148 ; PC64LE-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7149 ; PC64LE-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7152 ; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
7153 ; PC64LE9: # %bb.0: # %entry
7154 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 def $vsl2
7155 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 def $vsl1
7156 ; PC64LE9-NEXT: xxmrghd 0, 2, 1
7157 ; PC64LE9-NEXT: xsrdpiz 3, 3
7158 ; PC64LE9-NEXT: xvrdpiz 2, 0
7159 ; PC64LE9-NEXT: xxswapd 1, 2
7160 ; PC64LE9-NEXT: # kill: def $f1 killed $f1 killed $vsl1
7161 ; PC64LE9-NEXT: # kill: def $f2 killed $f2 killed $vsl2
7164 %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
7166 metadata !"fpexcept.strict") #1
7167 ret <3 x double> %trunc
7170 define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 {
7171 ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7172 ; PC64LE: # %bb.0: # %entry
7173 ; PC64LE-NEXT: mtfprwa 0, 3
7174 ; PC64LE-NEXT: xscvsxddp 1, 0
7177 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7178 ; PC64LE9: # %bb.0: # %entry
7179 ; PC64LE9-NEXT: mtfprwa 0, 3
7180 ; PC64LE9-NEXT: xscvsxddp 1, 0
7183 %result = call <1 x double>
7184 @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x,
7185 metadata !"round.dynamic",
7186 metadata !"fpexcept.strict") #0
7187 ret <1 x double> %result
7190 define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 {
7191 ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7192 ; PC64LE: # %bb.0: # %entry
7193 ; PC64LE-NEXT: mtfprwa 0, 3
7194 ; PC64LE-NEXT: xscvsxdsp 1, 0
7197 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7198 ; PC64LE9: # %bb.0: # %entry
7199 ; PC64LE9-NEXT: mtfprwa 0, 3
7200 ; PC64LE9-NEXT: xscvsxdsp 1, 0
7203 %result = call <1 x float>
7204 @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x,
7205 metadata !"round.dynamic",
7206 metadata !"fpexcept.strict") #0
7207 ret <1 x float> %result
7210 define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 {
7211 ; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7212 ; PC64LE: # %bb.0: # %entry
7213 ; PC64LE-NEXT: mtfprd 0, 3
7214 ; PC64LE-NEXT: xscvsxddp 1, 0
7217 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7218 ; PC64LE9: # %bb.0: # %entry
7219 ; PC64LE9-NEXT: mtfprd 0, 3
7220 ; PC64LE9-NEXT: xscvsxddp 1, 0
7223 %result = call <1 x double>
7224 @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x,
7225 metadata !"round.dynamic",
7226 metadata !"fpexcept.strict") #0
7227 ret <1 x double> %result
7230 define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 {
7231 ; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7232 ; PC64LE: # %bb.0: # %entry
7233 ; PC64LE-NEXT: mtfprd 0, 3
7234 ; PC64LE-NEXT: xscvsxdsp 1, 0
7237 ; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7238 ; PC64LE9: # %bb.0: # %entry
7239 ; PC64LE9-NEXT: mtfprd 0, 3
7240 ; PC64LE9-NEXT: xscvsxdsp 1, 0
7243 %result = call <1 x float>
7244 @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x,
7245 metadata !"round.dynamic",
7246 metadata !"fpexcept.strict") #0
7247 ret <1 x float> %result
7250 define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 {
7251 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7252 ; PC64LE: # %bb.0: # %entry
7253 ; PC64LE-NEXT: addis 3, 2, .LCPI155_0@toc@ha
7254 ; PC64LE-NEXT: addi 3, 3, .LCPI155_0@toc@l
7255 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7256 ; PC64LE-NEXT: addis 3, 2, .LCPI155_1@toc@ha
7257 ; PC64LE-NEXT: addi 3, 3, .LCPI155_1@toc@l
7258 ; PC64LE-NEXT: xxswapd 35, 0
7259 ; PC64LE-NEXT: vperm 2, 2, 2, 3
7260 ; PC64LE-NEXT: lxvd2x 35, 0, 3
7261 ; PC64LE-NEXT: vsld 2, 2, 3
7262 ; PC64LE-NEXT: vsrad 2, 2, 3
7263 ; PC64LE-NEXT: xvcvsxddp 34, 34
7266 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7267 ; PC64LE9: # %bb.0: # %entry
7268 ; PC64LE9-NEXT: addis 3, 2, .LCPI155_0@toc@ha
7269 ; PC64LE9-NEXT: addi 3, 3, .LCPI155_0@toc@l
7270 ; PC64LE9-NEXT: lxv 0, 0(3)
7271 ; PC64LE9-NEXT: xxperm 34, 34, 0
7272 ; PC64LE9-NEXT: vextsh2d 2, 2
7273 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7276 %result = call <2 x double>
7277 @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x,
7278 metadata !"round.dynamic",
7279 metadata !"fpexcept.strict") #0
7280 ret <2 x double> %result
7283 define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 {
7284 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7285 ; PC64LE: # %bb.0: # %entry
7286 ; PC64LE-NEXT: xxswapd 0, 34
7287 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7288 ; PC64LE-NEXT: mffprwz 3, 0
7289 ; PC64LE-NEXT: mtfprwa 0, 3
7290 ; PC64LE-NEXT: mffprwz 3, 1
7291 ; PC64LE-NEXT: mtfprwa 1, 3
7292 ; PC64LE-NEXT: xscvsxddp 0, 0
7293 ; PC64LE-NEXT: xscvsxddp 1, 1
7294 ; PC64LE-NEXT: xxmrghd 34, 1, 0
7297 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7298 ; PC64LE9: # %bb.0: # %entry
7299 ; PC64LE9-NEXT: li 3, 0
7300 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7301 ; PC64LE9-NEXT: mtfprwa 0, 3
7302 ; PC64LE9-NEXT: li 3, 4
7303 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7304 ; PC64LE9-NEXT: xscvsxddp 0, 0
7305 ; PC64LE9-NEXT: mtfprwa 1, 3
7306 ; PC64LE9-NEXT: xscvsxddp 1, 1
7307 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
7310 %result = call <2 x double>
7311 @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x,
7312 metadata !"round.dynamic",
7313 metadata !"fpexcept.strict") #0
7314 ret <2 x double> %result
7317 define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7318 ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7319 ; PC64LE: # %bb.0: # %entry
7320 ; PC64LE-NEXT: xxswapd 0, 34
7321 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7322 ; PC64LE-NEXT: mffprwz 3, 0
7323 ; PC64LE-NEXT: mtfprwa 0, 3
7324 ; PC64LE-NEXT: mffprwz 3, 1
7325 ; PC64LE-NEXT: mtfprwa 1, 3
7326 ; PC64LE-NEXT: xscvsxdsp 0, 0
7327 ; PC64LE-NEXT: xscvsxdsp 1, 1
7328 ; PC64LE-NEXT: xscvdpspn 0, 0
7329 ; PC64LE-NEXT: xscvdpspn 1, 1
7330 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7333 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7334 ; PC64LE9: # %bb.0: # %entry
7335 ; PC64LE9-NEXT: li 3, 0
7336 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7337 ; PC64LE9-NEXT: mtfprwa 0, 3
7338 ; PC64LE9-NEXT: li 3, 4
7339 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7340 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7341 ; PC64LE9-NEXT: mtfprwa 1, 3
7342 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7343 ; PC64LE9-NEXT: xscvdpspn 0, 0
7344 ; PC64LE9-NEXT: xscvdpspn 1, 1
7345 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7348 %result = call <2 x float>
7349 @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x,
7350 metadata !"round.dynamic",
7351 metadata !"fpexcept.strict") #0
7352 ret <2 x float> %result
7355 define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7356 ; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7357 ; PC64LE: # %bb.0: # %entry
7358 ; PC64LE-NEXT: xvcvsxddp 34, 34
7361 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7362 ; PC64LE9: # %bb.0: # %entry
7363 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7366 %result = call <2 x double>
7367 @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x,
7368 metadata !"round.dynamic",
7369 metadata !"fpexcept.strict") #0
7370 ret <2 x double> %result
7373 define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7374 ; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7375 ; PC64LE: # %bb.0: # %entry
7376 ; PC64LE-NEXT: mfvsrd 3, 34
7377 ; PC64LE-NEXT: xxswapd 0, 34
7378 ; PC64LE-NEXT: mtfprd 1, 3
7379 ; PC64LE-NEXT: mffprd 3, 0
7380 ; PC64LE-NEXT: mtfprd 0, 3
7381 ; PC64LE-NEXT: xscvsxdsp 1, 1
7382 ; PC64LE-NEXT: xscvsxdsp 0, 0
7383 ; PC64LE-NEXT: xscvdpspn 1, 1
7384 ; PC64LE-NEXT: xscvdpspn 0, 0
7385 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7388 ; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7389 ; PC64LE9: # %bb.0: # %entry
7390 ; PC64LE9-NEXT: mfvsrld 3, 34
7391 ; PC64LE9-NEXT: mtfprd 0, 3
7392 ; PC64LE9-NEXT: mfvsrd 3, 34
7393 ; PC64LE9-NEXT: mtfprd 1, 3
7394 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7395 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7396 ; PC64LE9-NEXT: xscvdpspn 0, 0
7397 ; PC64LE9-NEXT: xscvdpspn 1, 1
7398 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7401 %result = call <2 x float>
7402 @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x,
7403 metadata !"round.dynamic",
7404 metadata !"fpexcept.strict") #0
7405 ret <2 x float> %result
7408 define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 {
7409 ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7410 ; PC64LE: # %bb.0: # %entry
7411 ; PC64LE-NEXT: xxswapd 0, 34
7412 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
7413 ; PC64LE-NEXT: mffprwz 3, 0
7414 ; PC64LE-NEXT: mtfprwa 0, 3
7415 ; PC64LE-NEXT: mffprwz 3, 2
7416 ; PC64LE-NEXT: xscvsxddp 1, 0
7417 ; PC64LE-NEXT: mtfprwa 0, 3
7418 ; PC64LE-NEXT: mfvsrwz 3, 34
7419 ; PC64LE-NEXT: xscvsxddp 2, 0
7420 ; PC64LE-NEXT: mtfprwa 0, 3
7421 ; PC64LE-NEXT: xscvsxddp 3, 0
7424 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7425 ; PC64LE9: # %bb.0: # %entry
7426 ; PC64LE9-NEXT: li 3, 0
7427 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7428 ; PC64LE9-NEXT: mtfprwa 0, 3
7429 ; PC64LE9-NEXT: li 3, 4
7430 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7431 ; PC64LE9-NEXT: xscvsxddp 1, 0
7432 ; PC64LE9-NEXT: mtfprwa 0, 3
7433 ; PC64LE9-NEXT: mfvsrwz 3, 34
7434 ; PC64LE9-NEXT: xscvsxddp 2, 0
7435 ; PC64LE9-NEXT: mtfprwa 0, 3
7436 ; PC64LE9-NEXT: xscvsxddp 3, 0
7439 %result = call <3 x double>
7440 @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x,
7441 metadata !"round.dynamic",
7442 metadata !"fpexcept.strict") #0
7443 ret <3 x double> %result
7446 define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 {
7447 ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7448 ; PC64LE: # %bb.0: # %entry
7449 ; PC64LE-NEXT: xxswapd 0, 34
7450 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7451 ; PC64LE-NEXT: mffprwz 3, 0
7452 ; PC64LE-NEXT: mtfprwa 0, 3
7453 ; PC64LE-NEXT: mffprwz 3, 1
7454 ; PC64LE-NEXT: mtfprwa 1, 3
7455 ; PC64LE-NEXT: xscvsxdsp 0, 0
7456 ; PC64LE-NEXT: addis 3, 2, .LCPI161_0@toc@ha
7457 ; PC64LE-NEXT: addi 3, 3, .LCPI161_0@toc@l
7458 ; PC64LE-NEXT: xscvsxdsp 1, 1
7459 ; PC64LE-NEXT: xscvdpspn 0, 0
7460 ; PC64LE-NEXT: xscvdpspn 1, 1
7461 ; PC64LE-NEXT: xxmrghw 35, 1, 0
7462 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7463 ; PC64LE-NEXT: mfvsrwz 3, 34
7464 ; PC64LE-NEXT: xxswapd 36, 0
7465 ; PC64LE-NEXT: mtfprwa 0, 3
7466 ; PC64LE-NEXT: xscvsxdsp 0, 0
7467 ; PC64LE-NEXT: xscvdpspn 34, 0
7468 ; PC64LE-NEXT: vperm 2, 2, 3, 4
7471 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7472 ; PC64LE9: # %bb.0: # %entry
7473 ; PC64LE9-NEXT: li 3, 0
7474 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7475 ; PC64LE9-NEXT: mtfprwa 0, 3
7476 ; PC64LE9-NEXT: li 3, 4
7477 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7478 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7479 ; PC64LE9-NEXT: mtfprwa 1, 3
7480 ; PC64LE9-NEXT: addis 3, 2, .LCPI161_0@toc@ha
7481 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7482 ; PC64LE9-NEXT: addi 3, 3, .LCPI161_0@toc@l
7483 ; PC64LE9-NEXT: xscvdpspn 0, 0
7484 ; PC64LE9-NEXT: xscvdpspn 1, 1
7485 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
7486 ; PC64LE9-NEXT: lxv 0, 0(3)
7487 ; PC64LE9-NEXT: mfvsrwz 3, 34
7488 ; PC64LE9-NEXT: mtfprwa 1, 3
7489 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7490 ; PC64LE9-NEXT: xscvdpspn 34, 1
7491 ; PC64LE9-NEXT: xxperm 34, 35, 0
7494 %result = call <3 x float>
7495 @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x,
7496 metadata !"round.dynamic",
7497 metadata !"fpexcept.strict") #0
7498 ret <3 x float> %result
7501 define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 {
7502 ; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7503 ; PC64LE: # %bb.0: # %entry
7504 ; PC64LE-NEXT: mtfprd 0, 3
7505 ; PC64LE-NEXT: xscvsxddp 1, 0
7506 ; PC64LE-NEXT: mtfprd 0, 4
7507 ; PC64LE-NEXT: xscvsxddp 2, 0
7508 ; PC64LE-NEXT: mtfprd 0, 5
7509 ; PC64LE-NEXT: xscvsxddp 3, 0
7512 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7513 ; PC64LE9: # %bb.0: # %entry
7514 ; PC64LE9-NEXT: mtfprd 0, 3
7515 ; PC64LE9-NEXT: xscvsxddp 1, 0
7516 ; PC64LE9-NEXT: mtfprd 0, 4
7517 ; PC64LE9-NEXT: xscvsxddp 2, 0
7518 ; PC64LE9-NEXT: mtfprd 0, 5
7519 ; PC64LE9-NEXT: xscvsxddp 3, 0
7522 %result = call <3 x double>
7523 @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x,
7524 metadata !"round.dynamic",
7525 metadata !"fpexcept.strict") #0
7526 ret <3 x double> %result
7529 define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 {
7530 ; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7531 ; PC64LE: # %bb.0: # %entry
7532 ; PC64LE-NEXT: mtfprd 0, 3
7533 ; PC64LE-NEXT: mtfprd 1, 4
7534 ; PC64LE-NEXT: addis 3, 2, .LCPI163_0@toc@ha
7535 ; PC64LE-NEXT: addi 3, 3, .LCPI163_0@toc@l
7536 ; PC64LE-NEXT: xscvsxdsp 0, 0
7537 ; PC64LE-NEXT: xscvsxdsp 1, 1
7538 ; PC64LE-NEXT: xscvdpspn 0, 0
7539 ; PC64LE-NEXT: xscvdpspn 1, 1
7540 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7541 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7542 ; PC64LE-NEXT: xxswapd 35, 0
7543 ; PC64LE-NEXT: mtfprd 0, 5
7544 ; PC64LE-NEXT: xscvsxdsp 0, 0
7545 ; PC64LE-NEXT: xscvdpspn 36, 0
7546 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7549 ; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7550 ; PC64LE9: # %bb.0: # %entry
7551 ; PC64LE9-NEXT: mtfprd 0, 3
7552 ; PC64LE9-NEXT: mtfprd 1, 4
7553 ; PC64LE9-NEXT: addis 3, 2, .LCPI163_0@toc@ha
7554 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7555 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7556 ; PC64LE9-NEXT: addi 3, 3, .LCPI163_0@toc@l
7557 ; PC64LE9-NEXT: xscvdpspn 0, 0
7558 ; PC64LE9-NEXT: xscvdpspn 1, 1
7559 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
7560 ; PC64LE9-NEXT: mtfprd 1, 5
7561 ; PC64LE9-NEXT: lxv 0, 0(3)
7562 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7563 ; PC64LE9-NEXT: xscvdpspn 34, 1
7564 ; PC64LE9-NEXT: xxperm 34, 35, 0
7567 %result = call <3 x float>
7568 @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x,
7569 metadata !"round.dynamic",
7570 metadata !"fpexcept.strict") #0
7571 ret <3 x float> %result
7574 define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 {
7575 ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7576 ; PC64LE: # %bb.0: # %entry
7577 ; PC64LE-NEXT: xxswapd 0, 34
7578 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7579 ; PC64LE-NEXT: mffprwz 3, 0
7580 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 3
7581 ; PC64LE-NEXT: mtfprwa 0, 3
7582 ; PC64LE-NEXT: mffprwz 3, 1
7583 ; PC64LE-NEXT: mtfprwa 1, 3
7584 ; PC64LE-NEXT: xscvsxddp 0, 0
7585 ; PC64LE-NEXT: mfvsrwz 3, 34
7586 ; PC64LE-NEXT: xscvsxddp 1, 1
7587 ; PC64LE-NEXT: xxmrghd 0, 1, 0
7588 ; PC64LE-NEXT: mtfprwa 1, 3
7589 ; PC64LE-NEXT: mffprwz 3, 2
7590 ; PC64LE-NEXT: xxlor 34, 0, 0
7591 ; PC64LE-NEXT: mtfprwa 2, 3
7592 ; PC64LE-NEXT: xscvsxddp 1, 1
7593 ; PC64LE-NEXT: xscvsxddp 2, 2
7594 ; PC64LE-NEXT: xxmrghd 35, 2, 1
7597 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7598 ; PC64LE9: # %bb.0: # %entry
7599 ; PC64LE9-NEXT: li 3, 0
7600 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7601 ; PC64LE9-NEXT: mtfprwa 0, 3
7602 ; PC64LE9-NEXT: li 3, 4
7603 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7604 ; PC64LE9-NEXT: xscvsxddp 0, 0
7605 ; PC64LE9-NEXT: mtfprwa 1, 3
7606 ; PC64LE9-NEXT: li 3, 12
7607 ; PC64LE9-NEXT: xscvsxddp 1, 1
7608 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7609 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7610 ; PC64LE9-NEXT: mtfprwa 1, 3
7611 ; PC64LE9-NEXT: mfvsrwz 3, 34
7612 ; PC64LE9-NEXT: mtfprwa 2, 3
7613 ; PC64LE9-NEXT: xscvsxddp 1, 1
7614 ; PC64LE9-NEXT: xscvsxddp 2, 2
7615 ; PC64LE9-NEXT: xxlor 34, 0, 0
7616 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
7619 %result = call <4 x double>
7620 @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x,
7621 metadata !"round.dynamic",
7622 metadata !"fpexcept.strict") #0
7623 ret <4 x double> %result
7626 define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 {
7627 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7628 ; PC64LE: # %bb.0: # %entry
7629 ; PC64LE-NEXT: vspltisw 3, 8
7630 ; PC64LE-NEXT: vmrglh 2, 2, 2
7631 ; PC64LE-NEXT: vadduwm 3, 3, 3
7632 ; PC64LE-NEXT: vslw 2, 2, 3
7633 ; PC64LE-NEXT: vsraw 2, 2, 3
7634 ; PC64LE-NEXT: xvcvsxwsp 34, 34
7637 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7638 ; PC64LE9: # %bb.0: # %entry
7639 ; PC64LE9-NEXT: vmrglh 2, 2, 2
7640 ; PC64LE9-NEXT: vextsh2w 2, 2
7641 ; PC64LE9-NEXT: xvcvsxwsp 34, 34
7644 %result = call <4 x float>
7645 @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x,
7646 metadata !"round.dynamic",
7647 metadata !"fpexcept.strict") #0
7648 ret <4 x float> %result
7651 define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 {
7652 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7653 ; PC64LE: # %bb.0: # %entry
7654 ; PC64LE-NEXT: xvcvsxwsp 34, 34
7657 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7658 ; PC64LE9: # %bb.0: # %entry
7659 ; PC64LE9-NEXT: xvcvsxwsp 34, 34
7662 %result = call <4 x float>
7663 @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x,
7664 metadata !"round.dynamic",
7665 metadata !"fpexcept.strict") #0
7666 ret <4 x float> %result
7669 define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 {
7670 ; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64:
7671 ; PC64LE: # %bb.0: # %entry
7672 ; PC64LE-NEXT: xvcvsxddp 35, 35
7673 ; PC64LE-NEXT: xvcvsxddp 34, 34
7676 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64:
7677 ; PC64LE9: # %bb.0: # %entry
7678 ; PC64LE9-NEXT: xvcvsxddp 35, 35
7679 ; PC64LE9-NEXT: xvcvsxddp 34, 34
7682 %result = call <4 x double>
7683 @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x,
7684 metadata !"round.dynamic",
7685 metadata !"fpexcept.strict") #0
7686 ret <4 x double> %result
7689 define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 {
7690 ; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64:
7691 ; PC64LE: # %bb.0: # %entry
7692 ; PC64LE-NEXT: mfvsrd 3, 34
7693 ; PC64LE-NEXT: xxswapd 0, 34
7694 ; PC64LE-NEXT: xxswapd 1, 35
7695 ; PC64LE-NEXT: mtfprd 2, 3
7696 ; PC64LE-NEXT: mfvsrd 3, 35
7697 ; PC64LE-NEXT: mtfprd 3, 3
7698 ; PC64LE-NEXT: mffprd 3, 0
7699 ; PC64LE-NEXT: xscvsxdsp 2, 2
7700 ; PC64LE-NEXT: mtfprd 0, 3
7701 ; PC64LE-NEXT: mffprd 3, 1
7702 ; PC64LE-NEXT: xscvsxdsp 3, 3
7703 ; PC64LE-NEXT: mtfprd 1, 3
7704 ; PC64LE-NEXT: xscvsxdsp 0, 0
7705 ; PC64LE-NEXT: xscvsxdsp 1, 1
7706 ; PC64LE-NEXT: xxmrghd 2, 3, 2
7707 ; PC64LE-NEXT: xvcvdpsp 34, 2
7708 ; PC64LE-NEXT: xxmrghd 0, 1, 0
7709 ; PC64LE-NEXT: xvcvdpsp 35, 0
7710 ; PC64LE-NEXT: vmrgew 2, 2, 3
7713 ; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64:
7714 ; PC64LE9: # %bb.0: # %entry
7715 ; PC64LE9-NEXT: mfvsrld 3, 34
7716 ; PC64LE9-NEXT: mtfprd 0, 3
7717 ; PC64LE9-NEXT: mfvsrld 3, 35
7718 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7719 ; PC64LE9-NEXT: mtfprd 1, 3
7720 ; PC64LE9-NEXT: mfvsrd 3, 34
7721 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7722 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7723 ; PC64LE9-NEXT: xvcvdpsp 36, 0
7724 ; PC64LE9-NEXT: mtfprd 0, 3
7725 ; PC64LE9-NEXT: mfvsrd 3, 35
7726 ; PC64LE9-NEXT: mtfprd 1, 3
7727 ; PC64LE9-NEXT: xscvsxdsp 0, 0
7728 ; PC64LE9-NEXT: xscvsxdsp 1, 1
7729 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
7730 ; PC64LE9-NEXT: xvcvdpsp 34, 0
7731 ; PC64LE9-NEXT: vmrgew 2, 2, 4
7734 %result = call <4 x float>
7735 @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x,
7736 metadata !"round.dynamic",
7737 metadata !"fpexcept.strict") #0
7738 ret <4 x float> %result
7741 define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 {
7742 ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32:
7743 ; PC64LE: # %bb.0: # %entry
7744 ; PC64LE-NEXT: mtfprwz 0, 3
7745 ; PC64LE-NEXT: xscvuxddp 1, 0
7748 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32:
7749 ; PC64LE9: # %bb.0: # %entry
7750 ; PC64LE9-NEXT: mtfprwz 0, 3
7751 ; PC64LE9-NEXT: xscvuxddp 1, 0
7754 %result = call <1 x double>
7755 @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x,
7756 metadata !"round.dynamic",
7757 metadata !"fpexcept.strict") #0
7758 ret <1 x double> %result
7761 define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 {
7762 ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32:
7763 ; PC64LE: # %bb.0: # %entry
7764 ; PC64LE-NEXT: mtfprwz 0, 3
7765 ; PC64LE-NEXT: xscvuxdsp 1, 0
7768 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32:
7769 ; PC64LE9: # %bb.0: # %entry
7770 ; PC64LE9-NEXT: mtfprwz 0, 3
7771 ; PC64LE9-NEXT: xscvuxdsp 1, 0
7774 %result = call <1 x float>
7775 @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x,
7776 metadata !"round.dynamic",
7777 metadata !"fpexcept.strict") #0
7778 ret <1 x float> %result
7781 define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 {
7782 ; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64:
7783 ; PC64LE: # %bb.0: # %entry
7784 ; PC64LE-NEXT: mtfprd 0, 3
7785 ; PC64LE-NEXT: xscvuxddp 1, 0
7788 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64:
7789 ; PC64LE9: # %bb.0: # %entry
7790 ; PC64LE9-NEXT: mtfprd 0, 3
7791 ; PC64LE9-NEXT: xscvuxddp 1, 0
7794 %result = call <1 x double>
7795 @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x,
7796 metadata !"round.dynamic",
7797 metadata !"fpexcept.strict") #0
7798 ret <1 x double> %result
7801 define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 {
7802 ; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64:
7803 ; PC64LE: # %bb.0: # %entry
7804 ; PC64LE-NEXT: mtfprd 0, 3
7805 ; PC64LE-NEXT: xscvuxdsp 1, 0
7808 ; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64:
7809 ; PC64LE9: # %bb.0: # %entry
7810 ; PC64LE9-NEXT: mtfprd 0, 3
7811 ; PC64LE9-NEXT: xscvuxdsp 1, 0
7814 %result = call <1 x float>
7815 @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x,
7816 metadata !"round.dynamic",
7817 metadata !"fpexcept.strict") #0
7818 ret <1 x float> %result
7821 define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 {
7822 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16:
7823 ; PC64LE: # %bb.0: # %entry
7824 ; PC64LE-NEXT: addis 3, 2, .LCPI173_0@toc@ha
7825 ; PC64LE-NEXT: xxlxor 36, 36, 36
7826 ; PC64LE-NEXT: addi 3, 3, .LCPI173_0@toc@l
7827 ; PC64LE-NEXT: lxvd2x 0, 0, 3
7828 ; PC64LE-NEXT: xxswapd 35, 0
7829 ; PC64LE-NEXT: vperm 2, 4, 2, 3
7830 ; PC64LE-NEXT: xvcvuxddp 34, 34
7833 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16:
7834 ; PC64LE9: # %bb.0: # %entry
7835 ; PC64LE9-NEXT: addis 3, 2, .LCPI173_0@toc@ha
7836 ; PC64LE9-NEXT: xxlxor 1, 1, 1
7837 ; PC64LE9-NEXT: addi 3, 3, .LCPI173_0@toc@l
7838 ; PC64LE9-NEXT: lxv 0, 0(3)
7839 ; PC64LE9-NEXT: xxperm 34, 1, 0
7840 ; PC64LE9-NEXT: xvcvuxddp 34, 34
7843 %result = call <2 x double>
7844 @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x,
7845 metadata !"round.dynamic",
7846 metadata !"fpexcept.strict") #0
7847 ret <2 x double> %result
7850 define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 {
7851 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32:
7852 ; PC64LE: # %bb.0: # %entry
7853 ; PC64LE-NEXT: xxswapd 0, 34
7854 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7855 ; PC64LE-NEXT: mffprwz 3, 0
7856 ; PC64LE-NEXT: mtfprwz 0, 3
7857 ; PC64LE-NEXT: mffprwz 3, 1
7858 ; PC64LE-NEXT: mtfprwz 1, 3
7859 ; PC64LE-NEXT: xscvuxddp 0, 0
7860 ; PC64LE-NEXT: xscvuxddp 1, 1
7861 ; PC64LE-NEXT: xxmrghd 34, 1, 0
7864 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32:
7865 ; PC64LE9: # %bb.0: # %entry
7866 ; PC64LE9-NEXT: li 3, 0
7867 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7868 ; PC64LE9-NEXT: mtfprwz 0, 3
7869 ; PC64LE9-NEXT: li 3, 4
7870 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7871 ; PC64LE9-NEXT: xscvuxddp 0, 0
7872 ; PC64LE9-NEXT: mtfprwz 1, 3
7873 ; PC64LE9-NEXT: xscvuxddp 1, 1
7874 ; PC64LE9-NEXT: xxmrghd 34, 1, 0
7877 %result = call <2 x double>
7878 @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x,
7879 metadata !"round.dynamic",
7880 metadata !"fpexcept.strict") #0
7881 ret <2 x double> %result
7884 define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7885 ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32:
7886 ; PC64LE: # %bb.0: # %entry
7887 ; PC64LE-NEXT: xxswapd 0, 34
7888 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
7889 ; PC64LE-NEXT: mffprwz 3, 0
7890 ; PC64LE-NEXT: mtfprwz 0, 3
7891 ; PC64LE-NEXT: mffprwz 3, 1
7892 ; PC64LE-NEXT: mtfprwz 1, 3
7893 ; PC64LE-NEXT: xscvuxdsp 0, 0
7894 ; PC64LE-NEXT: xscvuxdsp 1, 1
7895 ; PC64LE-NEXT: xscvdpspn 0, 0
7896 ; PC64LE-NEXT: xscvdpspn 1, 1
7897 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7900 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32:
7901 ; PC64LE9: # %bb.0: # %entry
7902 ; PC64LE9-NEXT: li 3, 0
7903 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7904 ; PC64LE9-NEXT: mtfprwz 0, 3
7905 ; PC64LE9-NEXT: li 3, 4
7906 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7907 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7908 ; PC64LE9-NEXT: mtfprwz 1, 3
7909 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7910 ; PC64LE9-NEXT: xscvdpspn 0, 0
7911 ; PC64LE9-NEXT: xscvdpspn 1, 1
7912 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7915 %result = call <2 x float>
7916 @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x,
7917 metadata !"round.dynamic",
7918 metadata !"fpexcept.strict") #0
7919 ret <2 x float> %result
7922 define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7923 ; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64:
7924 ; PC64LE: # %bb.0: # %entry
7925 ; PC64LE-NEXT: xvcvuxddp 34, 34
7928 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64:
7929 ; PC64LE9: # %bb.0: # %entry
7930 ; PC64LE9-NEXT: xvcvuxddp 34, 34
7933 %result = call <2 x double>
7934 @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x,
7935 metadata !"round.dynamic",
7936 metadata !"fpexcept.strict") #0
7937 ret <2 x double> %result
7940 define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7941 ; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64:
7942 ; PC64LE: # %bb.0: # %entry
7943 ; PC64LE-NEXT: mfvsrd 3, 34
7944 ; PC64LE-NEXT: xxswapd 0, 34
7945 ; PC64LE-NEXT: mtfprd 1, 3
7946 ; PC64LE-NEXT: mffprd 3, 0
7947 ; PC64LE-NEXT: mtfprd 0, 3
7948 ; PC64LE-NEXT: xscvuxdsp 1, 1
7949 ; PC64LE-NEXT: xscvuxdsp 0, 0
7950 ; PC64LE-NEXT: xscvdpspn 1, 1
7951 ; PC64LE-NEXT: xscvdpspn 0, 0
7952 ; PC64LE-NEXT: xxmrghw 34, 1, 0
7955 ; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64:
7956 ; PC64LE9: # %bb.0: # %entry
7957 ; PC64LE9-NEXT: mfvsrld 3, 34
7958 ; PC64LE9-NEXT: mtfprd 0, 3
7959 ; PC64LE9-NEXT: mfvsrd 3, 34
7960 ; PC64LE9-NEXT: mtfprd 1, 3
7961 ; PC64LE9-NEXT: xscvuxdsp 0, 0
7962 ; PC64LE9-NEXT: xscvuxdsp 1, 1
7963 ; PC64LE9-NEXT: xscvdpspn 0, 0
7964 ; PC64LE9-NEXT: xscvdpspn 1, 1
7965 ; PC64LE9-NEXT: xxmrghw 34, 1, 0
7968 %result = call <2 x float>
7969 @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x,
7970 metadata !"round.dynamic",
7971 metadata !"fpexcept.strict") #0
7972 ret <2 x float> %result
7975 define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 {
7976 ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32:
7977 ; PC64LE: # %bb.0: # %entry
7978 ; PC64LE-NEXT: xxswapd 0, 34
7979 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 1
7980 ; PC64LE-NEXT: mffprwz 3, 0
7981 ; PC64LE-NEXT: mtfprwz 0, 3
7982 ; PC64LE-NEXT: mffprwz 3, 2
7983 ; PC64LE-NEXT: xscvuxddp 1, 0
7984 ; PC64LE-NEXT: mtfprwz 0, 3
7985 ; PC64LE-NEXT: mfvsrwz 3, 34
7986 ; PC64LE-NEXT: xscvuxddp 2, 0
7987 ; PC64LE-NEXT: mtfprwz 0, 3
7988 ; PC64LE-NEXT: xscvuxddp 3, 0
7991 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32:
7992 ; PC64LE9: # %bb.0: # %entry
7993 ; PC64LE9-NEXT: li 3, 0
7994 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7995 ; PC64LE9-NEXT: mtfprwz 0, 3
7996 ; PC64LE9-NEXT: li 3, 4
7997 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
7998 ; PC64LE9-NEXT: xscvuxddp 1, 0
7999 ; PC64LE9-NEXT: mtfprwz 0, 3
8000 ; PC64LE9-NEXT: mfvsrwz 3, 34
8001 ; PC64LE9-NEXT: xscvuxddp 2, 0
8002 ; PC64LE9-NEXT: mtfprwz 0, 3
8003 ; PC64LE9-NEXT: xscvuxddp 3, 0
8006 %result = call <3 x double>
8007 @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x,
8008 metadata !"round.dynamic",
8009 metadata !"fpexcept.strict") #0
8010 ret <3 x double> %result
8013 define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 {
8014 ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32:
8015 ; PC64LE: # %bb.0: # %entry
8016 ; PC64LE-NEXT: xxswapd 0, 34
8017 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
8018 ; PC64LE-NEXT: mffprwz 3, 0
8019 ; PC64LE-NEXT: mtfprwz 0, 3
8020 ; PC64LE-NEXT: mffprwz 3, 1
8021 ; PC64LE-NEXT: mtfprwz 1, 3
8022 ; PC64LE-NEXT: xscvuxdsp 0, 0
8023 ; PC64LE-NEXT: addis 3, 2, .LCPI179_0@toc@ha
8024 ; PC64LE-NEXT: addi 3, 3, .LCPI179_0@toc@l
8025 ; PC64LE-NEXT: xscvuxdsp 1, 1
8026 ; PC64LE-NEXT: xscvdpspn 0, 0
8027 ; PC64LE-NEXT: xscvdpspn 1, 1
8028 ; PC64LE-NEXT: xxmrghw 35, 1, 0
8029 ; PC64LE-NEXT: lxvd2x 0, 0, 3
8030 ; PC64LE-NEXT: mfvsrwz 3, 34
8031 ; PC64LE-NEXT: xxswapd 36, 0
8032 ; PC64LE-NEXT: mtfprwz 0, 3
8033 ; PC64LE-NEXT: xscvuxdsp 0, 0
8034 ; PC64LE-NEXT: xscvdpspn 34, 0
8035 ; PC64LE-NEXT: vperm 2, 2, 3, 4
8038 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32:
8039 ; PC64LE9: # %bb.0: # %entry
8040 ; PC64LE9-NEXT: li 3, 0
8041 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8042 ; PC64LE9-NEXT: mtfprwz 0, 3
8043 ; PC64LE9-NEXT: li 3, 4
8044 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8045 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8046 ; PC64LE9-NEXT: mtfprwz 1, 3
8047 ; PC64LE9-NEXT: addis 3, 2, .LCPI179_0@toc@ha
8048 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8049 ; PC64LE9-NEXT: addi 3, 3, .LCPI179_0@toc@l
8050 ; PC64LE9-NEXT: xscvdpspn 0, 0
8051 ; PC64LE9-NEXT: xscvdpspn 1, 1
8052 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
8053 ; PC64LE9-NEXT: lxv 0, 0(3)
8054 ; PC64LE9-NEXT: mfvsrwz 3, 34
8055 ; PC64LE9-NEXT: mtfprwz 1, 3
8056 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8057 ; PC64LE9-NEXT: xscvdpspn 34, 1
8058 ; PC64LE9-NEXT: xxperm 34, 35, 0
8061 %result = call <3 x float>
8062 @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x,
8063 metadata !"round.dynamic",
8064 metadata !"fpexcept.strict") #0
8065 ret <3 x float> %result
8068 define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 {
8069 ; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8070 ; PC64LE: # %bb.0: # %entry
8071 ; PC64LE-NEXT: mtfprd 0, 3
8072 ; PC64LE-NEXT: xscvuxddp 1, 0
8073 ; PC64LE-NEXT: mtfprd 0, 4
8074 ; PC64LE-NEXT: xscvuxddp 2, 0
8075 ; PC64LE-NEXT: mtfprd 0, 5
8076 ; PC64LE-NEXT: xscvuxddp 3, 0
8079 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8080 ; PC64LE9: # %bb.0: # %entry
8081 ; PC64LE9-NEXT: mtfprd 0, 3
8082 ; PC64LE9-NEXT: xscvuxddp 1, 0
8083 ; PC64LE9-NEXT: mtfprd 0, 4
8084 ; PC64LE9-NEXT: xscvuxddp 2, 0
8085 ; PC64LE9-NEXT: mtfprd 0, 5
8086 ; PC64LE9-NEXT: xscvuxddp 3, 0
8089 %result = call <3 x double>
8090 @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x,
8091 metadata !"round.dynamic",
8092 metadata !"fpexcept.strict") #0
8093 ret <3 x double> %result
8096 define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 {
8097 ; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8098 ; PC64LE: # %bb.0: # %entry
8099 ; PC64LE-NEXT: mtfprd 0, 3
8100 ; PC64LE-NEXT: mtfprd 1, 4
8101 ; PC64LE-NEXT: addis 3, 2, .LCPI181_0@toc@ha
8102 ; PC64LE-NEXT: addi 3, 3, .LCPI181_0@toc@l
8103 ; PC64LE-NEXT: xscvuxdsp 0, 0
8104 ; PC64LE-NEXT: xscvuxdsp 1, 1
8105 ; PC64LE-NEXT: xscvdpspn 0, 0
8106 ; PC64LE-NEXT: xscvdpspn 1, 1
8107 ; PC64LE-NEXT: xxmrghw 34, 1, 0
8108 ; PC64LE-NEXT: lxvd2x 0, 0, 3
8109 ; PC64LE-NEXT: xxswapd 35, 0
8110 ; PC64LE-NEXT: mtfprd 0, 5
8111 ; PC64LE-NEXT: xscvuxdsp 0, 0
8112 ; PC64LE-NEXT: xscvdpspn 36, 0
8113 ; PC64LE-NEXT: vperm 2, 4, 2, 3
8116 ; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8117 ; PC64LE9: # %bb.0: # %entry
8118 ; PC64LE9-NEXT: mtfprd 0, 3
8119 ; PC64LE9-NEXT: mtfprd 1, 4
8120 ; PC64LE9-NEXT: addis 3, 2, .LCPI181_0@toc@ha
8121 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8122 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8123 ; PC64LE9-NEXT: addi 3, 3, .LCPI181_0@toc@l
8124 ; PC64LE9-NEXT: xscvdpspn 0, 0
8125 ; PC64LE9-NEXT: xscvdpspn 1, 1
8126 ; PC64LE9-NEXT: xxmrghw 35, 1, 0
8127 ; PC64LE9-NEXT: mtfprd 1, 5
8128 ; PC64LE9-NEXT: lxv 0, 0(3)
8129 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8130 ; PC64LE9-NEXT: xscvdpspn 34, 1
8131 ; PC64LE9-NEXT: xxperm 34, 35, 0
8134 %result = call <3 x float>
8135 @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x,
8136 metadata !"round.dynamic",
8137 metadata !"fpexcept.strict") #0
8138 ret <3 x float> %result
8141 define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 {
8142 ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8143 ; PC64LE: # %bb.0: # %entry
8144 ; PC64LE-NEXT: xxswapd 0, 34
8145 ; PC64LE-NEXT: xxsldwi 1, 34, 34, 1
8146 ; PC64LE-NEXT: mffprwz 3, 0
8147 ; PC64LE-NEXT: xxsldwi 2, 34, 34, 3
8148 ; PC64LE-NEXT: mtfprwz 0, 3
8149 ; PC64LE-NEXT: mffprwz 3, 1
8150 ; PC64LE-NEXT: mtfprwz 1, 3
8151 ; PC64LE-NEXT: xscvuxddp 0, 0
8152 ; PC64LE-NEXT: mfvsrwz 3, 34
8153 ; PC64LE-NEXT: xscvuxddp 1, 1
8154 ; PC64LE-NEXT: xxmrghd 0, 1, 0
8155 ; PC64LE-NEXT: mtfprwz 1, 3
8156 ; PC64LE-NEXT: mffprwz 3, 2
8157 ; PC64LE-NEXT: xxlor 34, 0, 0
8158 ; PC64LE-NEXT: mtfprwz 2, 3
8159 ; PC64LE-NEXT: xscvuxddp 1, 1
8160 ; PC64LE-NEXT: xscvuxddp 2, 2
8161 ; PC64LE-NEXT: xxmrghd 35, 2, 1
8164 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8165 ; PC64LE9: # %bb.0: # %entry
8166 ; PC64LE9-NEXT: li 3, 0
8167 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8168 ; PC64LE9-NEXT: mtfprwz 0, 3
8169 ; PC64LE9-NEXT: li 3, 4
8170 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8171 ; PC64LE9-NEXT: xscvuxddp 0, 0
8172 ; PC64LE9-NEXT: mtfprwz 1, 3
8173 ; PC64LE9-NEXT: li 3, 12
8174 ; PC64LE9-NEXT: xscvuxddp 1, 1
8175 ; PC64LE9-NEXT: vextuwrx 3, 3, 2
8176 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
8177 ; PC64LE9-NEXT: mtfprwz 1, 3
8178 ; PC64LE9-NEXT: mfvsrwz 3, 34
8179 ; PC64LE9-NEXT: mtfprwz 2, 3
8180 ; PC64LE9-NEXT: xscvuxddp 1, 1
8181 ; PC64LE9-NEXT: xscvuxddp 2, 2
8182 ; PC64LE9-NEXT: xxlor 34, 0, 0
8183 ; PC64LE9-NEXT: xxmrghd 35, 1, 2
8186 %result = call <4 x double>
8187 @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x,
8188 metadata !"round.dynamic",
8189 metadata !"fpexcept.strict") #0
8190 ret <4 x double> %result
8193 define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 {
8194 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8195 ; PC64LE: # %bb.0: # %entry
8196 ; PC64LE-NEXT: xxlxor 35, 35, 35
8197 ; PC64LE-NEXT: vmrglh 2, 3, 2
8198 ; PC64LE-NEXT: xvcvuxwsp 34, 34
8201 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8202 ; PC64LE9: # %bb.0: # %entry
8203 ; PC64LE9-NEXT: xxlxor 35, 35, 35
8204 ; PC64LE9-NEXT: vmrglh 2, 3, 2
8205 ; PC64LE9-NEXT: xvcvuxwsp 34, 34
8208 %result = call <4 x float>
8209 @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x,
8210 metadata !"round.dynamic",
8211 metadata !"fpexcept.strict") #0
8212 ret <4 x float> %result
8215 define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 {
8216 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8217 ; PC64LE: # %bb.0: # %entry
8218 ; PC64LE-NEXT: xvcvuxwsp 34, 34
8221 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8222 ; PC64LE9: # %bb.0: # %entry
8223 ; PC64LE9-NEXT: xvcvuxwsp 34, 34
8226 %result = call <4 x float>
8227 @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x,
8228 metadata !"round.dynamic",
8229 metadata !"fpexcept.strict") #0
8230 ret <4 x float> %result
8233 define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 {
8234 ; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8235 ; PC64LE: # %bb.0: # %entry
8236 ; PC64LE-NEXT: xvcvuxddp 35, 35
8237 ; PC64LE-NEXT: xvcvuxddp 34, 34
8240 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8241 ; PC64LE9: # %bb.0: # %entry
8242 ; PC64LE9-NEXT: xvcvuxddp 35, 35
8243 ; PC64LE9-NEXT: xvcvuxddp 34, 34
8246 %result = call <4 x double>
8247 @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x,
8248 metadata !"round.dynamic",
8249 metadata !"fpexcept.strict") #0
8250 ret <4 x double> %result
8253 define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 {
8254 ; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8255 ; PC64LE: # %bb.0: # %entry
8256 ; PC64LE-NEXT: mfvsrd 3, 34
8257 ; PC64LE-NEXT: xxswapd 0, 34
8258 ; PC64LE-NEXT: xxswapd 1, 35
8259 ; PC64LE-NEXT: mtfprd 2, 3
8260 ; PC64LE-NEXT: mfvsrd 3, 35
8261 ; PC64LE-NEXT: mtfprd 3, 3
8262 ; PC64LE-NEXT: mffprd 3, 0
8263 ; PC64LE-NEXT: xscvuxdsp 2, 2
8264 ; PC64LE-NEXT: mtfprd 0, 3
8265 ; PC64LE-NEXT: mffprd 3, 1
8266 ; PC64LE-NEXT: xscvuxdsp 3, 3
8267 ; PC64LE-NEXT: mtfprd 1, 3
8268 ; PC64LE-NEXT: xscvuxdsp 0, 0
8269 ; PC64LE-NEXT: xscvuxdsp 1, 1
8270 ; PC64LE-NEXT: xxmrghd 2, 3, 2
8271 ; PC64LE-NEXT: xvcvdpsp 34, 2
8272 ; PC64LE-NEXT: xxmrghd 0, 1, 0
8273 ; PC64LE-NEXT: xvcvdpsp 35, 0
8274 ; PC64LE-NEXT: vmrgew 2, 2, 3
8277 ; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8278 ; PC64LE9: # %bb.0: # %entry
8279 ; PC64LE9-NEXT: mfvsrld 3, 34
8280 ; PC64LE9-NEXT: mtfprd 0, 3
8281 ; PC64LE9-NEXT: mfvsrld 3, 35
8282 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8283 ; PC64LE9-NEXT: mtfprd 1, 3
8284 ; PC64LE9-NEXT: mfvsrd 3, 34
8285 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8286 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
8287 ; PC64LE9-NEXT: xvcvdpsp 36, 0
8288 ; PC64LE9-NEXT: mtfprd 0, 3
8289 ; PC64LE9-NEXT: mfvsrd 3, 35
8290 ; PC64LE9-NEXT: mtfprd 1, 3
8291 ; PC64LE9-NEXT: xscvuxdsp 0, 0
8292 ; PC64LE9-NEXT: xscvuxdsp 1, 1
8293 ; PC64LE9-NEXT: xxmrghd 0, 1, 0
8294 ; PC64LE9-NEXT: xvcvdpsp 34, 0
8295 ; PC64LE9-NEXT: vmrgew 2, 2, 4
8298 %result = call <4 x float>
8299 @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x,
8300 metadata !"round.dynamic",
8301 metadata !"fpexcept.strict") #0
8302 ret <4 x float> %result
8305 attributes #0 = { nounwind strictfp noimplicitfloat }
8306 attributes #1 = { strictfp }
8308 ; Single width declarations
8309 declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8310 declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8311 declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8312 declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8313 declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8314 declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
8315 declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8316 declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
8317 declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
8318 declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
8319 declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
8320 declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
8321 declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
8322 declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
8323 declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
8324 declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
8325 declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
8326 declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata)
8327 declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata)
8328 declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata)
8329 declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata)
8330 declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata)
8331 declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata)
8332 declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata)
8333 declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata)
8334 declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata)
8335 declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata)
8336 declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
8337 declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
8338 declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)
8339 declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)
8340 declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)
8341 declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
8342 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8343 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8344 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8345 declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8346 declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8347 declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8348 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8349 declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8350 declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8351 declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8353 ; Scalar width declarations
8354 declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8355 declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8356 declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8357 declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8358 declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8359 declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
8360 declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8361 declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
8362 declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
8363 declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
8364 declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
8365 declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
8366 declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
8367 declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
8368 declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
8369 declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
8370 declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
8371 declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata)
8372 declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata)
8373 declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata)
8374 declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata)
8375 declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata)
8376 declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata)
8377 declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata)
8378 declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata)
8379 declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata)
8380 declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata)
8381 declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
8382 declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
8383 declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata)
8384 declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata)
8385 declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata)
8386 declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata)
8387 declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8388 declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8389 declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8390 declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8391 declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8392 declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8393 declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8394 declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8396 ; Illegal width declarations
8397 declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8398 declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8399 declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8400 declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8401 declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8402 declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8403 declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8404 declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8405 declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8406 declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8407 declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
8408 declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
8409 declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8410 declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8411 declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
8412 declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
8413 declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
8414 declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
8415 declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
8416 declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
8417 declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
8418 declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
8419 declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
8420 declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
8421 declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
8422 declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
8423 declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
8424 declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
8425 declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
8426 declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
8427 declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
8428 declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
8429 declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
8430 declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
8431 declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata)
8432 declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata)
8433 declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata)
8434 declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata)
8435 declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata)
8436 declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata)
8437 declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata)
8438 declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata)
8439 declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata)
8440 declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata)
8441 declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata)
8442 declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata)
8443 declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
8444 declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
8445 declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata)
8446 declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata)
8447 declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata)
8448 declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata)
8449 declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata)
8450 declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata)
8451 declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata)
8452 declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata)
8453 declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8454 declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8455 declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8456 declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8457 declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8458 declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8459 declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8460 declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8462 ; Double width declarations
8463 declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8464 declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8465 declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8466 declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8467 declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8468 declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
8469 declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8470 declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
8471 declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
8472 declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
8473 declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
8474 declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
8475 declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
8476 declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
8477 declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
8478 declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
8479 declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
8480 declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata)
8481 declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata)
8482 declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)
8483 declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata)
8484 declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata)
8485 declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata)
8486 declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)
8487 declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata)
8488 declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata)
8489 declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata)
8490 declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
8491 declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
8492 declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata)
8493 declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata)
8494 declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata)
8495 declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata)
8496 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8497 declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8498 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8499 declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8500 declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)
8501 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8502 declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8503 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8504 declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8505 declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)