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