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