[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / PowerPC / vector-constrained-fp-intrinsics.ll
bloba35b6f9356c6e9472c3ad89ba799f45f6c72aad4
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() {
6 ; PC64LE-LABEL: constrained_vector_fdiv_v1f32:
7 ; PC64LE:       # %bb.0: # %entry
8 ; PC64LE-NEXT:    addis 3, 2, .LCPI0_0@toc@ha
9 ; PC64LE-NEXT:    addis 4, 2, .LCPI0_1@toc@ha
10 ; PC64LE-NEXT:    lfs 0, .LCPI0_0@toc@l(3)
11 ; PC64LE-NEXT:    lfs 1, .LCPI0_1@toc@l(4)
12 ; PC64LE-NEXT:    xsdivsp 0, 1, 0
13 ; PC64LE-NEXT:    xscvdpspn 0, 0
14 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
15 ; PC64LE-NEXT:    blr
17 ; PC64LE9-LABEL: constrained_vector_fdiv_v1f32:
18 ; PC64LE9:       # %bb.0: # %entry
19 ; PC64LE9-NEXT:    addis 3, 2, .LCPI0_0@toc@ha
20 ; PC64LE9-NEXT:    lfs 0, .LCPI0_0@toc@l(3)
21 ; PC64LE9-NEXT:    addis 3, 2, .LCPI0_1@toc@ha
22 ; PC64LE9-NEXT:    lfs 1, .LCPI0_1@toc@l(3)
23 ; PC64LE9-NEXT:    xsdivsp 0, 1, 0
24 ; PC64LE9-NEXT:    xscvdpspn 0, 0
25 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
26 ; PC64LE9-NEXT:    blr
27 entry:
28   %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32(
29            <1 x float> <float 1.000000e+00>,
30            <1 x float> <float 1.000000e+01>,
31            metadata !"round.dynamic",
32            metadata !"fpexcept.strict")
33   ret <1 x float> %div
36 define <2 x double> @constrained_vector_fdiv_v2f64() {
37 ; PC64LE-LABEL: constrained_vector_fdiv_v2f64:
38 ; PC64LE:       # %bb.0: # %entry
39 ; PC64LE-NEXT:    addis 3, 2, .LCPI1_0@toc@ha
40 ; PC64LE-NEXT:    addis 4, 2, .LCPI1_1@toc@ha
41 ; PC64LE-NEXT:    addi 3, 3, .LCPI1_0@toc@l
42 ; PC64LE-NEXT:    addi 4, 4, .LCPI1_1@toc@l
43 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
44 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
45 ; PC64LE-NEXT:    xxswapd 0, 0
46 ; PC64LE-NEXT:    xxswapd 1, 1
47 ; PC64LE-NEXT:    xvdivdp 34, 1, 0
48 ; PC64LE-NEXT:    blr
50 ; PC64LE9-LABEL: constrained_vector_fdiv_v2f64:
51 ; PC64LE9:       # %bb.0: # %entry
52 ; PC64LE9-NEXT:    addis 3, 2, .LCPI1_0@toc@ha
53 ; PC64LE9-NEXT:    addi 3, 3, .LCPI1_0@toc@l
54 ; PC64LE9-NEXT:    lxvx 0, 0, 3
55 ; PC64LE9-NEXT:    addis 3, 2, .LCPI1_1@toc@ha
56 ; PC64LE9-NEXT:    addi 3, 3, .LCPI1_1@toc@l
57 ; PC64LE9-NEXT:    lxvx 1, 0, 3
58 ; PC64LE9-NEXT:    xvdivdp 34, 1, 0
59 ; PC64LE9-NEXT:    blr
60 entry:
61   %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64(
62            <2 x double> <double 1.000000e+00, double 2.000000e+00>,
63            <2 x double> <double 1.000000e+01, double 1.000000e+01>,
64            metadata !"round.dynamic",
65            metadata !"fpexcept.strict")
66   ret <2 x double> %div
69 define <3 x float> @constrained_vector_fdiv_v3f32() {
70 ; PC64LE-LABEL: constrained_vector_fdiv_v3f32:
71 ; PC64LE:       # %bb.0: # %entry
72 ; PC64LE-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
73 ; PC64LE-NEXT:    addis 4, 2, .LCPI2_3@toc@ha
74 ; PC64LE-NEXT:    addis 5, 2, .LCPI2_2@toc@ha
75 ; PC64LE-NEXT:    lfs 0, .LCPI2_0@toc@l(3)
76 ; PC64LE-NEXT:    lfs 1, .LCPI2_3@toc@l(4)
77 ; PC64LE-NEXT:    lfs 2, .LCPI2_2@toc@l(5)
78 ; PC64LE-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
79 ; PC64LE-NEXT:    xsdivsp 1, 1, 0
80 ; PC64LE-NEXT:    lfs 3, .LCPI2_1@toc@l(3)
81 ; PC64LE-NEXT:    addis 3, 2, .LCPI2_4@toc@ha
82 ; PC64LE-NEXT:    xsdivsp 2, 2, 0
83 ; PC64LE-NEXT:    addi 3, 3, .LCPI2_4@toc@l
84 ; PC64LE-NEXT:    lvx 4, 0, 3
85 ; PC64LE-NEXT:    xsdivsp 0, 3, 0
86 ; PC64LE-NEXT:    xscvdpspn 1, 1
87 ; PC64LE-NEXT:    xscvdpspn 2, 2
88 ; PC64LE-NEXT:    xscvdpspn 0, 0
89 ; PC64LE-NEXT:    xxsldwi 34, 1, 1, 1
90 ; PC64LE-NEXT:    xxsldwi 35, 2, 2, 1
91 ; PC64LE-NEXT:    vmrglw 2, 3, 2
92 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
93 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
94 ; PC64LE-NEXT:    blr
96 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
97 ; PC64LE9:       # %bb.0: # %entry
98 ; PC64LE9-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
99 ; PC64LE9-NEXT:    lfs 0, .LCPI2_0@toc@l(3)
100 ; PC64LE9-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
101 ; PC64LE9-NEXT:    lfs 1, .LCPI2_1@toc@l(3)
102 ; PC64LE9-NEXT:    addis 3, 2, .LCPI2_2@toc@ha
103 ; PC64LE9-NEXT:    xsdivsp 1, 1, 0
104 ; PC64LE9-NEXT:    lfs 2, .LCPI2_2@toc@l(3)
105 ; PC64LE9-NEXT:    addis 3, 2, .LCPI2_3@toc@ha
106 ; PC64LE9-NEXT:    lfs 3, .LCPI2_3@toc@l(3)
107 ; PC64LE9-NEXT:    addis 3, 2, .LCPI2_4@toc@ha
108 ; PC64LE9-NEXT:    addi 3, 3, .LCPI2_4@toc@l
109 ; PC64LE9-NEXT:    lxvx 36, 0, 3
110 ; PC64LE9-NEXT:    xsdivsp 2, 2, 0
111 ; PC64LE9-NEXT:    xsdivsp 0, 3, 0
112 ; PC64LE9-NEXT:    xscvdpspn 0, 0
113 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
114 ; PC64LE9-NEXT:    xscvdpspn 0, 2
115 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
116 ; PC64LE9-NEXT:    xscvdpspn 0, 1
117 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
118 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
119 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
120 ; PC64LE9-NEXT:    blr
121 entry:
122   %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32(
123            <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
124            <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
125            metadata !"round.dynamic",
126            metadata !"fpexcept.strict")
127   ret <3 x float> %div
130 define <3 x double> @constrained_vector_fdiv_v3f64() {
131 ; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
132 ; PC64LE:       # %bb.0: # %entry
133 ; PC64LE-NEXT:    addis 3, 2, .LCPI3_2@toc@ha
134 ; PC64LE-NEXT:    addis 4, 2, .LCPI3_3@toc@ha
135 ; PC64LE-NEXT:    addi 3, 3, .LCPI3_2@toc@l
136 ; PC64LE-NEXT:    addi 4, 4, .LCPI3_3@toc@l
137 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
138 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
139 ; PC64LE-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
140 ; PC64LE-NEXT:    addis 4, 2, .LCPI3_1@toc@ha
141 ; PC64LE-NEXT:    lfs 3, .LCPI3_0@toc@l(3)
142 ; PC64LE-NEXT:    xxswapd 0, 0
143 ; PC64LE-NEXT:    xxswapd 1, 1
144 ; PC64LE-NEXT:    xvdivdp 2, 1, 0
145 ; PC64LE-NEXT:    lfs 0, .LCPI3_1@toc@l(4)
146 ; PC64LE-NEXT:    xsdivdp 3, 0, 3
147 ; PC64LE-NEXT:    xxswapd 1, 2
148 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
149 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
150 ; PC64LE-NEXT:    blr
152 ; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
153 ; PC64LE9:       # %bb.0: # %entry
154 ; PC64LE9-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
155 ; PC64LE9-NEXT:    lfs 0, .LCPI3_0@toc@l(3)
156 ; PC64LE9-NEXT:    addis 3, 2, .LCPI3_1@toc@ha
157 ; PC64LE9-NEXT:    lfs 1, .LCPI3_1@toc@l(3)
158 ; PC64LE9-NEXT:    addis 3, 2, .LCPI3_2@toc@ha
159 ; PC64LE9-NEXT:    addi 3, 3, .LCPI3_2@toc@l
160 ; PC64LE9-NEXT:    xsdivdp 3, 1, 0
161 ; PC64LE9-NEXT:    lxvx 0, 0, 3
162 ; PC64LE9-NEXT:    addis 3, 2, .LCPI3_3@toc@ha
163 ; PC64LE9-NEXT:    addi 3, 3, .LCPI3_3@toc@l
164 ; PC64LE9-NEXT:    lxvx 1, 0, 3
165 ; PC64LE9-NEXT:    xvdivdp 2, 1, 0
166 ; PC64LE9-NEXT:    xxswapd 1, 2
167 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
168 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
169 ; PC64LE9-NEXT:    blr
170 entry:
171   %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64(
172            <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
173            <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
174            metadata !"round.dynamic",
175            metadata !"fpexcept.strict")
176   ret <3 x double> %div
179 define <4 x double> @constrained_vector_fdiv_v4f64() {
180 ; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
181 ; PC64LE:       # %bb.0: # %entry
182 ; PC64LE-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
183 ; PC64LE-NEXT:    addis 4, 2, .LCPI4_1@toc@ha
184 ; PC64LE-NEXT:    addis 5, 2, .LCPI4_2@toc@ha
185 ; PC64LE-NEXT:    addi 3, 3, .LCPI4_0@toc@l
186 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
187 ; PC64LE-NEXT:    addi 3, 4, .LCPI4_1@toc@l
188 ; PC64LE-NEXT:    addi 4, 5, .LCPI4_2@toc@l
189 ; PC64LE-NEXT:    lxvd2x 1, 0, 3
190 ; PC64LE-NEXT:    lxvd2x 2, 0, 4
191 ; PC64LE-NEXT:    xxswapd 0, 0
192 ; PC64LE-NEXT:    xxswapd 1, 1
193 ; PC64LE-NEXT:    xxswapd 2, 2
194 ; PC64LE-NEXT:    xvdivdp 34, 1, 0
195 ; PC64LE-NEXT:    xvdivdp 35, 2, 0
196 ; PC64LE-NEXT:    blr
198 ; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
199 ; PC64LE9:       # %bb.0: # %entry
200 ; PC64LE9-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
201 ; PC64LE9-NEXT:    addi 3, 3, .LCPI4_0@toc@l
202 ; PC64LE9-NEXT:    lxvx 0, 0, 3
203 ; PC64LE9-NEXT:    addis 3, 2, .LCPI4_1@toc@ha
204 ; PC64LE9-NEXT:    addi 3, 3, .LCPI4_1@toc@l
205 ; PC64LE9-NEXT:    lxvx 1, 0, 3
206 ; PC64LE9-NEXT:    addis 3, 2, .LCPI4_2@toc@ha
207 ; PC64LE9-NEXT:    addi 3, 3, .LCPI4_2@toc@l
208 ; PC64LE9-NEXT:    xvdivdp 34, 1, 0
209 ; PC64LE9-NEXT:    lxvx 1, 0, 3
210 ; PC64LE9-NEXT:    xvdivdp 35, 1, 0
211 ; PC64LE9-NEXT:    blr
212 entry:
213   %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64(
214            <4 x double> <double 1.000000e+00, double 2.000000e+00,
215                          double 3.000000e+00, double 4.000000e+00>,
216            <4 x double> <double 1.000000e+01, double 1.000000e+01,
217                          double 1.000000e+01, double 1.000000e+01>,
218            metadata !"round.dynamic",
219            metadata !"fpexcept.strict")
220   ret <4 x double> %div
223 define <1 x float> @constrained_vector_frem_v1f32() {
224 ; PC64LE-LABEL: constrained_vector_frem_v1f32:
225 ; PC64LE:       # %bb.0: # %entry
226 ; PC64LE-NEXT:    mflr 0
227 ; PC64LE-NEXT:    std 0, 16(1)
228 ; PC64LE-NEXT:    stdu 1, -32(1)
229 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
230 ; PC64LE-NEXT:    .cfi_offset lr, 16
231 ; PC64LE-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
232 ; PC64LE-NEXT:    addis 4, 2, .LCPI5_1@toc@ha
233 ; PC64LE-NEXT:    lfs 1, .LCPI5_0@toc@l(3)
234 ; PC64LE-NEXT:    lfs 2, .LCPI5_1@toc@l(4)
235 ; PC64LE-NEXT:    bl fmodf
236 ; PC64LE-NEXT:    nop
237 ; PC64LE-NEXT:    xscvdpspn 0, 1
238 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
239 ; PC64LE-NEXT:    addi 1, 1, 32
240 ; PC64LE-NEXT:    ld 0, 16(1)
241 ; PC64LE-NEXT:    mtlr 0
242 ; PC64LE-NEXT:    blr
244 ; PC64LE9-LABEL: constrained_vector_frem_v1f32:
245 ; PC64LE9:       # %bb.0: # %entry
246 ; PC64LE9-NEXT:    mflr 0
247 ; PC64LE9-NEXT:    std 0, 16(1)
248 ; PC64LE9-NEXT:    stdu 1, -32(1)
249 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
250 ; PC64LE9-NEXT:    .cfi_offset lr, 16
251 ; PC64LE9-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
252 ; PC64LE9-NEXT:    lfs 1, .LCPI5_0@toc@l(3)
253 ; PC64LE9-NEXT:    addis 3, 2, .LCPI5_1@toc@ha
254 ; PC64LE9-NEXT:    lfs 2, .LCPI5_1@toc@l(3)
255 ; PC64LE9-NEXT:    bl fmodf
256 ; PC64LE9-NEXT:    nop
257 ; PC64LE9-NEXT:    xscvdpspn 0, 1
258 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
259 ; PC64LE9-NEXT:    addi 1, 1, 32
260 ; PC64LE9-NEXT:    ld 0, 16(1)
261 ; PC64LE9-NEXT:    mtlr 0
262 ; PC64LE9-NEXT:    blr
263 entry:
264   %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32(
265            <1 x float> <float 1.000000e+00>,
266            <1 x float> <float 1.000000e+01>,
267            metadata !"round.dynamic",
268            metadata !"fpexcept.strict")
269   ret <1 x float> %rem
272 define <2 x double> @constrained_vector_frem_v2f64() {
273 ; PC64LE-LABEL: constrained_vector_frem_v2f64:
274 ; PC64LE:       # %bb.0: # %entry
275 ; PC64LE-NEXT:    mflr 0
276 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
277 ; PC64LE-NEXT:    .cfi_offset lr, 16
278 ; PC64LE-NEXT:    .cfi_offset f31, -8
279 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
280 ; PC64LE-NEXT:    std 0, 16(1)
281 ; PC64LE-NEXT:    stdu 1, -80(1)
282 ; PC64LE-NEXT:    addis 4, 2, .LCPI6_1@toc@ha
283 ; PC64LE-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
284 ; PC64LE-NEXT:    lfs 31, .LCPI6_1@toc@l(4)
285 ; PC64LE-NEXT:    lfs 1, .LCPI6_0@toc@l(3)
286 ; PC64LE-NEXT:    fmr 2, 31
287 ; PC64LE-NEXT:    bl fmod
288 ; PC64LE-NEXT:    nop
289 ; PC64LE-NEXT:    li 3, 48
290 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
291 ; PC64LE-NEXT:    fmr 2, 31
292 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
293 ; PC64LE-NEXT:    addis 3, 2, .LCPI6_2@toc@ha
294 ; PC64LE-NEXT:    lfs 1, .LCPI6_2@toc@l(3)
295 ; PC64LE-NEXT:    bl fmod
296 ; PC64LE-NEXT:    nop
297 ; PC64LE-NEXT:    li 3, 48
298 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
299 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
300 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
301 ; PC64LE-NEXT:    addi 1, 1, 80
302 ; PC64LE-NEXT:    ld 0, 16(1)
303 ; PC64LE-NEXT:    mtlr 0
304 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
305 ; PC64LE-NEXT:    blr
307 ; PC64LE9-LABEL: constrained_vector_frem_v2f64:
308 ; PC64LE9:       # %bb.0: # %entry
309 ; PC64LE9-NEXT:    mflr 0
310 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
311 ; PC64LE9-NEXT:    .cfi_offset lr, 16
312 ; PC64LE9-NEXT:    .cfi_offset f31, -8
313 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
314 ; PC64LE9-NEXT:    std 0, 16(1)
315 ; PC64LE9-NEXT:    stdu 1, -64(1)
316 ; PC64LE9-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
317 ; PC64LE9-NEXT:    lfs 1, .LCPI6_0@toc@l(3)
318 ; PC64LE9-NEXT:    addis 3, 2, .LCPI6_1@toc@ha
319 ; PC64LE9-NEXT:    lfs 31, .LCPI6_1@toc@l(3)
320 ; PC64LE9-NEXT:    fmr 2, 31
321 ; PC64LE9-NEXT:    bl fmod
322 ; PC64LE9-NEXT:    nop
323 ; PC64LE9-NEXT:    addis 3, 2, .LCPI6_2@toc@ha
324 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
325 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
326 ; PC64LE9-NEXT:    lfs 1, .LCPI6_2@toc@l(3)
327 ; PC64LE9-NEXT:    fmr 2, 31
328 ; PC64LE9-NEXT:    bl fmod
329 ; PC64LE9-NEXT:    nop
330 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
331 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
332 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
333 ; PC64LE9-NEXT:    addi 1, 1, 64
334 ; PC64LE9-NEXT:    ld 0, 16(1)
335 ; PC64LE9-NEXT:    mtlr 0
336 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
337 ; PC64LE9-NEXT:    blr
338 entry:
339   %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64(
340            <2 x double> <double 1.000000e+00, double 2.000000e+00>,
341            <2 x double> <double 1.000000e+01, double 1.000000e+01>,
342            metadata !"round.dynamic",
343            metadata !"fpexcept.strict")
344   ret <2 x double> %rem
347 define <3 x float> @constrained_vector_frem_v3f32() {
348 ; PC64LE-LABEL: constrained_vector_frem_v3f32:
349 ; PC64LE:       # %bb.0: # %entry
350 ; PC64LE-NEXT:    mflr 0
351 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
352 ; PC64LE-NEXT:    .cfi_offset lr, 16
353 ; PC64LE-NEXT:    .cfi_offset f29, -24
354 ; PC64LE-NEXT:    .cfi_offset f30, -16
355 ; PC64LE-NEXT:    .cfi_offset f31, -8
356 ; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
357 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
358 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
359 ; PC64LE-NEXT:    std 0, 16(1)
360 ; PC64LE-NEXT:    stdu 1, -64(1)
361 ; PC64LE-NEXT:    addis 4, 2, .LCPI7_1@toc@ha
362 ; PC64LE-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
363 ; PC64LE-NEXT:    lfs 31, .LCPI7_1@toc@l(4)
364 ; PC64LE-NEXT:    lfs 1, .LCPI7_0@toc@l(3)
365 ; PC64LE-NEXT:    fmr 2, 31
366 ; PC64LE-NEXT:    bl fmodf
367 ; PC64LE-NEXT:    nop
368 ; PC64LE-NEXT:    addis 3, 2, .LCPI7_2@toc@ha
369 ; PC64LE-NEXT:    fmr 2, 31
370 ; PC64LE-NEXT:    fmr 30, 1
371 ; PC64LE-NEXT:    lfs 1, .LCPI7_2@toc@l(3)
372 ; PC64LE-NEXT:    bl fmodf
373 ; PC64LE-NEXT:    nop
374 ; PC64LE-NEXT:    addis 3, 2, .LCPI7_3@toc@ha
375 ; PC64LE-NEXT:    fmr 2, 31
376 ; PC64LE-NEXT:    fmr 29, 1
377 ; PC64LE-NEXT:    lfs 1, .LCPI7_3@toc@l(3)
378 ; PC64LE-NEXT:    bl fmodf
379 ; PC64LE-NEXT:    nop
380 ; PC64LE-NEXT:    xscvdpspn 0, 29
381 ; PC64LE-NEXT:    addis 3, 2, .LCPI7_4@toc@ha
382 ; PC64LE-NEXT:    xscvdpspn 1, 1
383 ; PC64LE-NEXT:    addi 3, 3, .LCPI7_4@toc@l
384 ; PC64LE-NEXT:    lvx 4, 0, 3
385 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
386 ; PC64LE-NEXT:    xscvdpspn 0, 30
387 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
388 ; PC64LE-NEXT:    vmrglw 2, 2, 3
389 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
390 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
391 ; PC64LE-NEXT:    addi 1, 1, 64
392 ; PC64LE-NEXT:    ld 0, 16(1)
393 ; PC64LE-NEXT:    mtlr 0
394 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
395 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
396 ; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
397 ; PC64LE-NEXT:    blr
399 ; PC64LE9-LABEL: constrained_vector_frem_v3f32:
400 ; PC64LE9:       # %bb.0: # %entry
401 ; PC64LE9-NEXT:    mflr 0
402 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
403 ; PC64LE9-NEXT:    .cfi_offset lr, 16
404 ; PC64LE9-NEXT:    .cfi_offset f29, -24
405 ; PC64LE9-NEXT:    .cfi_offset f30, -16
406 ; PC64LE9-NEXT:    .cfi_offset f31, -8
407 ; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
408 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
409 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
410 ; PC64LE9-NEXT:    std 0, 16(1)
411 ; PC64LE9-NEXT:    stdu 1, -64(1)
412 ; PC64LE9-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
413 ; PC64LE9-NEXT:    lfs 1, .LCPI7_0@toc@l(3)
414 ; PC64LE9-NEXT:    addis 3, 2, .LCPI7_1@toc@ha
415 ; PC64LE9-NEXT:    lfs 31, .LCPI7_1@toc@l(3)
416 ; PC64LE9-NEXT:    fmr 2, 31
417 ; PC64LE9-NEXT:    bl fmodf
418 ; PC64LE9-NEXT:    nop
419 ; PC64LE9-NEXT:    addis 3, 2, .LCPI7_2@toc@ha
420 ; PC64LE9-NEXT:    fmr 30, 1
421 ; PC64LE9-NEXT:    lfs 1, .LCPI7_2@toc@l(3)
422 ; PC64LE9-NEXT:    fmr 2, 31
423 ; PC64LE9-NEXT:    bl fmodf
424 ; PC64LE9-NEXT:    nop
425 ; PC64LE9-NEXT:    addis 3, 2, .LCPI7_3@toc@ha
426 ; PC64LE9-NEXT:    fmr 29, 1
427 ; PC64LE9-NEXT:    lfs 1, .LCPI7_3@toc@l(3)
428 ; PC64LE9-NEXT:    fmr 2, 31
429 ; PC64LE9-NEXT:    bl fmodf
430 ; PC64LE9-NEXT:    nop
431 ; PC64LE9-NEXT:    xscvdpspn 0, 1
432 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
433 ; PC64LE9-NEXT:    xscvdpspn 0, 29
434 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
435 ; PC64LE9-NEXT:    xscvdpspn 0, 30
436 ; PC64LE9-NEXT:    addis 3, 2, .LCPI7_4@toc@ha
437 ; PC64LE9-NEXT:    addi 3, 3, .LCPI7_4@toc@l
438 ; PC64LE9-NEXT:    lxvx 36, 0, 3
439 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
440 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
441 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
442 ; PC64LE9-NEXT:    addi 1, 1, 64
443 ; PC64LE9-NEXT:    ld 0, 16(1)
444 ; PC64LE9-NEXT:    mtlr 0
445 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
446 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
447 ; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
448 ; PC64LE9-NEXT:    blr
449 entry:
450   %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32(
451            <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
452            <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
453            metadata !"round.dynamic",
454            metadata !"fpexcept.strict")
455   ret <3 x float> %rem
458 define <3 x double> @constrained_vector_frem_v3f64() {
459 ; PC64LE-LABEL: constrained_vector_frem_v3f64:
460 ; PC64LE:       # %bb.0: # %entry
461 ; PC64LE-NEXT:    mflr 0
462 ; PC64LE-NEXT:    std 0, 16(1)
463 ; PC64LE-NEXT:    stdu 1, -96(1)
464 ; PC64LE-NEXT:    .cfi_def_cfa_offset 96
465 ; PC64LE-NEXT:    .cfi_offset lr, 16
466 ; PC64LE-NEXT:    .cfi_offset f31, -8
467 ; PC64LE-NEXT:    .cfi_offset v31, -32
468 ; PC64LE-NEXT:    addis 4, 2, .LCPI8_1@toc@ha
469 ; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
470 ; PC64LE-NEXT:    li 3, 64
471 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
472 ; PC64LE-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
473 ; PC64LE-NEXT:    lfs 31, .LCPI8_1@toc@l(4)
474 ; PC64LE-NEXT:    lfs 1, .LCPI8_0@toc@l(3)
475 ; PC64LE-NEXT:    fmr 2, 31
476 ; PC64LE-NEXT:    bl fmod
477 ; PC64LE-NEXT:    nop
478 ; PC64LE-NEXT:    li 3, 48
479 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
480 ; PC64LE-NEXT:    fmr 2, 31
481 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
482 ; PC64LE-NEXT:    addis 3, 2, .LCPI8_2@toc@ha
483 ; PC64LE-NEXT:    lfs 1, .LCPI8_2@toc@l(3)
484 ; PC64LE-NEXT:    bl fmod
485 ; PC64LE-NEXT:    nop
486 ; PC64LE-NEXT:    li 3, 48
487 ; PC64LE-NEXT:    fmr 2, 31
488 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
489 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
490 ; PC64LE-NEXT:    addis 3, 2, .LCPI8_3@toc@ha
491 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
492 ; PC64LE-NEXT:    lfs 1, .LCPI8_3@toc@l(3)
493 ; PC64LE-NEXT:    bl fmod
494 ; PC64LE-NEXT:    nop
495 ; PC64LE-NEXT:    li 3, 64
496 ; PC64LE-NEXT:    fmr 3, 1
497 ; PC64LE-NEXT:    xxlor 1, 63, 63
498 ; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
499 ; PC64LE-NEXT:    xxlor 2, 63, 63
500 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
501 ; PC64LE-NEXT:    addi 1, 1, 96
502 ; PC64LE-NEXT:    ld 0, 16(1)
503 ; PC64LE-NEXT:    mtlr 0
504 ; PC64LE-NEXT:    blr
506 ; PC64LE9-LABEL: constrained_vector_frem_v3f64:
507 ; PC64LE9:       # %bb.0: # %entry
508 ; PC64LE9-NEXT:    mflr 0
509 ; PC64LE9-NEXT:    std 0, 16(1)
510 ; PC64LE9-NEXT:    stdu 1, -80(1)
511 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 80
512 ; PC64LE9-NEXT:    .cfi_offset lr, 16
513 ; PC64LE9-NEXT:    .cfi_offset f31, -8
514 ; PC64LE9-NEXT:    .cfi_offset v31, -32
515 ; PC64LE9-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
516 ; PC64LE9-NEXT:    lfs 1, .LCPI8_0@toc@l(3)
517 ; PC64LE9-NEXT:    addis 3, 2, .LCPI8_1@toc@ha
518 ; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
519 ; PC64LE9-NEXT:    lfs 31, .LCPI8_1@toc@l(3)
520 ; PC64LE9-NEXT:    fmr 2, 31
521 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
522 ; PC64LE9-NEXT:    bl fmod
523 ; PC64LE9-NEXT:    nop
524 ; PC64LE9-NEXT:    addis 3, 2, .LCPI8_2@toc@ha
525 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
526 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
527 ; PC64LE9-NEXT:    lfs 1, .LCPI8_2@toc@l(3)
528 ; PC64LE9-NEXT:    fmr 2, 31
529 ; PC64LE9-NEXT:    bl fmod
530 ; PC64LE9-NEXT:    nop
531 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
532 ; PC64LE9-NEXT:    addis 3, 2, .LCPI8_3@toc@ha
533 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
534 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
535 ; PC64LE9-NEXT:    lfs 1, .LCPI8_3@toc@l(3)
536 ; PC64LE9-NEXT:    fmr 2, 31
537 ; PC64LE9-NEXT:    bl fmod
538 ; PC64LE9-NEXT:    nop
539 ; PC64LE9-NEXT:    fmr 3, 1
540 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
541 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
542 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
543 ; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
544 ; PC64LE9-NEXT:    addi 1, 1, 80
545 ; PC64LE9-NEXT:    ld 0, 16(1)
546 ; PC64LE9-NEXT:    mtlr 0
547 ; PC64LE9-NEXT:    blr
548 entry:
549   %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64(
550            <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
551            <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
552            metadata !"round.dynamic",
553            metadata !"fpexcept.strict")
554   ret <3 x double> %rem
557 define <4 x double> @constrained_vector_frem_v4f64() {
558 ; PC64LE-LABEL: constrained_vector_frem_v4f64:
559 ; PC64LE:       # %bb.0:
560 ; PC64LE-NEXT:    mflr 0
561 ; PC64LE-NEXT:    std 0, 16(1)
562 ; PC64LE-NEXT:    stdu 1, -96(1)
563 ; PC64LE-NEXT:    .cfi_def_cfa_offset 96
564 ; PC64LE-NEXT:    .cfi_offset lr, 16
565 ; PC64LE-NEXT:    .cfi_offset f31, -8
566 ; PC64LE-NEXT:    .cfi_offset v31, -32
567 ; PC64LE-NEXT:    addis 4, 2, .LCPI9_1@toc@ha
568 ; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
569 ; PC64LE-NEXT:    li 3, 64
570 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
571 ; PC64LE-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
572 ; PC64LE-NEXT:    lfs 31, .LCPI9_1@toc@l(4)
573 ; PC64LE-NEXT:    lfs 1, .LCPI9_0@toc@l(3)
574 ; PC64LE-NEXT:    fmr 2, 31
575 ; PC64LE-NEXT:    bl fmod
576 ; PC64LE-NEXT:    nop
577 ; PC64LE-NEXT:    li 3, 48
578 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
579 ; PC64LE-NEXT:    fmr 2, 31
580 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
581 ; PC64LE-NEXT:    addis 3, 2, .LCPI9_2@toc@ha
582 ; PC64LE-NEXT:    lfs 1, .LCPI9_2@toc@l(3)
583 ; PC64LE-NEXT:    bl fmod
584 ; PC64LE-NEXT:    nop
585 ; PC64LE-NEXT:    li 3, 48
586 ; PC64LE-NEXT:    fmr 2, 31
587 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
588 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
589 ; PC64LE-NEXT:    addis 3, 2, .LCPI9_3@toc@ha
590 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
591 ; PC64LE-NEXT:    lfs 1, .LCPI9_3@toc@l(3)
592 ; PC64LE-NEXT:    bl fmod
593 ; PC64LE-NEXT:    nop
594 ; PC64LE-NEXT:    li 3, 48
595 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
596 ; PC64LE-NEXT:    fmr 2, 31
597 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
598 ; PC64LE-NEXT:    addis 3, 2, .LCPI9_4@toc@ha
599 ; PC64LE-NEXT:    lfs 1, .LCPI9_4@toc@l(3)
600 ; PC64LE-NEXT:    bl fmod
601 ; PC64LE-NEXT:    nop
602 ; PC64LE-NEXT:    li 3, 48
603 ; PC64LE-NEXT:    vmr 2, 31
604 ; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
605 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
606 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
607 ; PC64LE-NEXT:    li 3, 64
608 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
609 ; PC64LE-NEXT:    xxmrghd 35, 1, 0
610 ; PC64LE-NEXT:    addi 1, 1, 96
611 ; PC64LE-NEXT:    ld 0, 16(1)
612 ; PC64LE-NEXT:    mtlr 0
613 ; PC64LE-NEXT:    blr
615 ; PC64LE9-LABEL: constrained_vector_frem_v4f64:
616 ; PC64LE9:       # %bb.0:
617 ; PC64LE9-NEXT:    mflr 0
618 ; PC64LE9-NEXT:    std 0, 16(1)
619 ; PC64LE9-NEXT:    stdu 1, -80(1)
620 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 80
621 ; PC64LE9-NEXT:    .cfi_offset lr, 16
622 ; PC64LE9-NEXT:    .cfi_offset f31, -8
623 ; PC64LE9-NEXT:    .cfi_offset v31, -32
624 ; PC64LE9-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
625 ; PC64LE9-NEXT:    lfs 1, .LCPI9_0@toc@l(3)
626 ; PC64LE9-NEXT:    addis 3, 2, .LCPI9_1@toc@ha
627 ; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
628 ; PC64LE9-NEXT:    lfs 31, .LCPI9_1@toc@l(3)
629 ; PC64LE9-NEXT:    fmr 2, 31
630 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
631 ; PC64LE9-NEXT:    bl fmod
632 ; PC64LE9-NEXT:    nop
633 ; PC64LE9-NEXT:    addis 3, 2, .LCPI9_2@toc@ha
634 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
635 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
636 ; PC64LE9-NEXT:    lfs 1, .LCPI9_2@toc@l(3)
637 ; PC64LE9-NEXT:    fmr 2, 31
638 ; PC64LE9-NEXT:    bl fmod
639 ; PC64LE9-NEXT:    nop
640 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
641 ; PC64LE9-NEXT:    addis 3, 2, .LCPI9_3@toc@ha
642 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
643 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
644 ; PC64LE9-NEXT:    lfs 1, .LCPI9_3@toc@l(3)
645 ; PC64LE9-NEXT:    fmr 2, 31
646 ; PC64LE9-NEXT:    bl fmod
647 ; PC64LE9-NEXT:    nop
648 ; PC64LE9-NEXT:    addis 3, 2, .LCPI9_4@toc@ha
649 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
650 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
651 ; PC64LE9-NEXT:    lfs 1, .LCPI9_4@toc@l(3)
652 ; PC64LE9-NEXT:    fmr 2, 31
653 ; PC64LE9-NEXT:    bl fmod
654 ; PC64LE9-NEXT:    nop
655 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
656 ; PC64LE9-NEXT:    vmr 2, 31
657 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
658 ; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
659 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
660 ; PC64LE9-NEXT:    xxmrghd 35, 1, 0
661 ; PC64LE9-NEXT:    addi 1, 1, 80
662 ; PC64LE9-NEXT:    ld 0, 16(1)
663 ; PC64LE9-NEXT:    mtlr 0
664 ; PC64LE9-NEXT:    blr
665   %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64(
666            <4 x double> <double 1.000000e+00, double 2.000000e+00,
667                          double 3.000000e+00, double 4.000000e+00>,
668            <4 x double> <double 1.000000e+01, double 1.000000e+01,
669                          double 1.000000e+01, double 1.000000e+01>,
670            metadata !"round.dynamic",
671            metadata !"fpexcept.strict")
672   ret <4 x double> %rem
675 define <1 x float> @constrained_vector_fmul_v1f32() {
676 ; PC64LE-LABEL: constrained_vector_fmul_v1f32:
677 ; PC64LE:       # %bb.0: # %entry
678 ; PC64LE-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
679 ; PC64LE-NEXT:    addis 4, 2, .LCPI10_1@toc@ha
680 ; PC64LE-NEXT:    lfs 0, .LCPI10_0@toc@l(3)
681 ; PC64LE-NEXT:    lfs 1, .LCPI10_1@toc@l(4)
682 ; PC64LE-NEXT:    xsmulsp 0, 1, 0
683 ; PC64LE-NEXT:    xscvdpspn 0, 0
684 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
685 ; PC64LE-NEXT:    blr
687 ; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
688 ; PC64LE9:       # %bb.0: # %entry
689 ; PC64LE9-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
690 ; PC64LE9-NEXT:    lfs 0, .LCPI10_0@toc@l(3)
691 ; PC64LE9-NEXT:    addis 3, 2, .LCPI10_1@toc@ha
692 ; PC64LE9-NEXT:    lfs 1, .LCPI10_1@toc@l(3)
693 ; PC64LE9-NEXT:    xsmulsp 0, 1, 0
694 ; PC64LE9-NEXT:    xscvdpspn 0, 0
695 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
696 ; PC64LE9-NEXT:    blr
697 entry:
698   %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
699            <1 x float> <float 0x7FF0000000000000>,
700            <1 x float> <float 2.000000e+00>,
701            metadata !"round.dynamic",
702            metadata !"fpexcept.strict")
703   ret <1 x float> %mul
706 define <2 x double> @constrained_vector_fmul_v2f64() {
707 ; PC64LE-LABEL: constrained_vector_fmul_v2f64:
708 ; PC64LE:       # %bb.0: # %entry
709 ; PC64LE-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
710 ; PC64LE-NEXT:    addis 4, 2, .LCPI11_1@toc@ha
711 ; PC64LE-NEXT:    addi 3, 3, .LCPI11_0@toc@l
712 ; PC64LE-NEXT:    addi 4, 4, .LCPI11_1@toc@l
713 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
714 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
715 ; PC64LE-NEXT:    xxswapd 0, 0
716 ; PC64LE-NEXT:    xxswapd 1, 1
717 ; PC64LE-NEXT:    xvmuldp 34, 1, 0
718 ; PC64LE-NEXT:    blr
720 ; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
721 ; PC64LE9:       # %bb.0: # %entry
722 ; PC64LE9-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
723 ; PC64LE9-NEXT:    addi 3, 3, .LCPI11_0@toc@l
724 ; PC64LE9-NEXT:    lxvx 0, 0, 3
725 ; PC64LE9-NEXT:    addis 3, 2, .LCPI11_1@toc@ha
726 ; PC64LE9-NEXT:    addi 3, 3, .LCPI11_1@toc@l
727 ; PC64LE9-NEXT:    lxvx 1, 0, 3
728 ; PC64LE9-NEXT:    xvmuldp 34, 1, 0
729 ; PC64LE9-NEXT:    blr
730 entry:
731   %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(
732            <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
733            <2 x double> <double 2.000000e+00, double 3.000000e+00>,
734            metadata !"round.dynamic",
735            metadata !"fpexcept.strict")
736   ret <2 x double> %mul
739 define <3 x float> @constrained_vector_fmul_v3f32() {
740 ; PC64LE-LABEL: constrained_vector_fmul_v3f32:
741 ; PC64LE:       # %bb.0: # %entry
742 ; PC64LE-NEXT:    addis 3, 2, .LCPI12_1@toc@ha
743 ; PC64LE-NEXT:    addis 4, 2, .LCPI12_3@toc@ha
744 ; PC64LE-NEXT:    addis 5, 2, .LCPI12_2@toc@ha
745 ; PC64LE-NEXT:    lfs 0, .LCPI12_1@toc@l(3)
746 ; PC64LE-NEXT:    lfs 1, .LCPI12_3@toc@l(4)
747 ; PC64LE-NEXT:    lfs 2, .LCPI12_2@toc@l(5)
748 ; PC64LE-NEXT:    addis 3, 2, .LCPI12_0@toc@ha
749 ; PC64LE-NEXT:    xsmulsp 1, 0, 1
750 ; PC64LE-NEXT:    lfs 3, .LCPI12_0@toc@l(3)
751 ; PC64LE-NEXT:    addis 3, 2, .LCPI12_4@toc@ha
752 ; PC64LE-NEXT:    xsmulsp 2, 0, 2
753 ; PC64LE-NEXT:    addi 3, 3, .LCPI12_4@toc@l
754 ; PC64LE-NEXT:    lvx 4, 0, 3
755 ; PC64LE-NEXT:    xsmulsp 0, 0, 3
756 ; PC64LE-NEXT:    xscvdpspn 1, 1
757 ; PC64LE-NEXT:    xscvdpspn 2, 2
758 ; PC64LE-NEXT:    xscvdpspn 0, 0
759 ; PC64LE-NEXT:    xxsldwi 34, 1, 1, 1
760 ; PC64LE-NEXT:    xxsldwi 35, 2, 2, 1
761 ; PC64LE-NEXT:    vmrglw 2, 3, 2
762 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
763 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
764 ; PC64LE-NEXT:    blr
766 ; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
767 ; PC64LE9:       # %bb.0: # %entry
768 ; PC64LE9-NEXT:    addis 3, 2, .LCPI12_0@toc@ha
769 ; PC64LE9-NEXT:    lfs 0, .LCPI12_0@toc@l(3)
770 ; PC64LE9-NEXT:    addis 3, 2, .LCPI12_1@toc@ha
771 ; PC64LE9-NEXT:    lfs 1, .LCPI12_1@toc@l(3)
772 ; PC64LE9-NEXT:    addis 3, 2, .LCPI12_2@toc@ha
773 ; PC64LE9-NEXT:    xsmulsp 0, 1, 0
774 ; PC64LE9-NEXT:    lfs 2, .LCPI12_2@toc@l(3)
775 ; PC64LE9-NEXT:    addis 3, 2, .LCPI12_3@toc@ha
776 ; PC64LE9-NEXT:    lfs 3, .LCPI12_3@toc@l(3)
777 ; PC64LE9-NEXT:    addis 3, 2, .LCPI12_4@toc@ha
778 ; PC64LE9-NEXT:    addi 3, 3, .LCPI12_4@toc@l
779 ; PC64LE9-NEXT:    lxvx 36, 0, 3
780 ; PC64LE9-NEXT:    xsmulsp 2, 1, 2
781 ; PC64LE9-NEXT:    xsmulsp 1, 1, 3
782 ; PC64LE9-NEXT:    xscvdpspn 0, 0
783 ; PC64LE9-NEXT:    xscvdpspn 1, 1
784 ; PC64LE9-NEXT:    xxsldwi 34, 1, 1, 1
785 ; PC64LE9-NEXT:    xscvdpspn 1, 2
786 ; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 1
787 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
788 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
789 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
790 ; PC64LE9-NEXT:    blr
791 entry:
792   %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32(
793            <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000,
794                         float 0x7FF0000000000000>,
795            <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>,
796            metadata !"round.dynamic",
797            metadata !"fpexcept.strict")
798   ret <3 x float> %mul
801 define <3 x double> @constrained_vector_fmul_v3f64() {
802 ; PC64LE-LABEL: constrained_vector_fmul_v3f64:
803 ; PC64LE:       # %bb.0: # %entry
804 ; PC64LE-NEXT:    addis 3, 2, .LCPI13_2@toc@ha
805 ; PC64LE-NEXT:    addis 4, 2, .LCPI13_3@toc@ha
806 ; PC64LE-NEXT:    addi 3, 3, .LCPI13_2@toc@l
807 ; PC64LE-NEXT:    addi 4, 4, .LCPI13_3@toc@l
808 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
809 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
810 ; PC64LE-NEXT:    addis 3, 2, .LCPI13_0@toc@ha
811 ; PC64LE-NEXT:    addis 4, 2, .LCPI13_1@toc@ha
812 ; PC64LE-NEXT:    lfd 3, .LCPI13_0@toc@l(3)
813 ; PC64LE-NEXT:    xxswapd 0, 0
814 ; PC64LE-NEXT:    xxswapd 1, 1
815 ; PC64LE-NEXT:    xvmuldp 2, 1, 0
816 ; PC64LE-NEXT:    lfs 0, .LCPI13_1@toc@l(4)
817 ; PC64LE-NEXT:    xsmuldp 3, 3, 0
818 ; PC64LE-NEXT:    xxswapd 1, 2
819 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
820 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
821 ; PC64LE-NEXT:    blr
823 ; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
824 ; PC64LE9:       # %bb.0: # %entry
825 ; PC64LE9-NEXT:    addis 3, 2, .LCPI13_0@toc@ha
826 ; PC64LE9-NEXT:    lfd 0, .LCPI13_0@toc@l(3)
827 ; PC64LE9-NEXT:    addis 3, 2, .LCPI13_1@toc@ha
828 ; PC64LE9-NEXT:    lfs 1, .LCPI13_1@toc@l(3)
829 ; PC64LE9-NEXT:    addis 3, 2, .LCPI13_2@toc@ha
830 ; PC64LE9-NEXT:    addi 3, 3, .LCPI13_2@toc@l
831 ; PC64LE9-NEXT:    xsmuldp 3, 0, 1
832 ; PC64LE9-NEXT:    lxvx 0, 0, 3
833 ; PC64LE9-NEXT:    addis 3, 2, .LCPI13_3@toc@ha
834 ; PC64LE9-NEXT:    addi 3, 3, .LCPI13_3@toc@l
835 ; PC64LE9-NEXT:    lxvx 1, 0, 3
836 ; PC64LE9-NEXT:    xvmuldp 2, 1, 0
837 ; PC64LE9-NEXT:    xxswapd 1, 2
838 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
839 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
840 ; PC64LE9-NEXT:    blr
841 entry:
842   %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
843            <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
844                          double 0x7FEFFFFFFFFFFFFF>,
845            <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>,
846            metadata !"round.dynamic",
847            metadata !"fpexcept.strict")
848   ret <3 x double> %mul
851 define <4 x double> @constrained_vector_fmul_v4f64() {
852 ; PC64LE-LABEL: constrained_vector_fmul_v4f64:
853 ; PC64LE:       # %bb.0: # %entry
854 ; PC64LE-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
855 ; PC64LE-NEXT:    addis 4, 2, .LCPI14_1@toc@ha
856 ; PC64LE-NEXT:    addis 5, 2, .LCPI14_2@toc@ha
857 ; PC64LE-NEXT:    addi 3, 3, .LCPI14_0@toc@l
858 ; PC64LE-NEXT:    addi 4, 4, .LCPI14_1@toc@l
859 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
860 ; PC64LE-NEXT:    addi 3, 5, .LCPI14_2@toc@l
861 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
862 ; PC64LE-NEXT:    lxvd2x 2, 0, 3
863 ; PC64LE-NEXT:    xxswapd 0, 0
864 ; PC64LE-NEXT:    xxswapd 1, 1
865 ; PC64LE-NEXT:    xxswapd 2, 2
866 ; PC64LE-NEXT:    xvmuldp 34, 1, 0
867 ; PC64LE-NEXT:    xvmuldp 35, 1, 2
868 ; PC64LE-NEXT:    blr
870 ; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
871 ; PC64LE9:       # %bb.0: # %entry
872 ; PC64LE9-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
873 ; PC64LE9-NEXT:    addi 3, 3, .LCPI14_0@toc@l
874 ; PC64LE9-NEXT:    lxvx 0, 0, 3
875 ; PC64LE9-NEXT:    addis 3, 2, .LCPI14_1@toc@ha
876 ; PC64LE9-NEXT:    addi 3, 3, .LCPI14_1@toc@l
877 ; PC64LE9-NEXT:    lxvx 1, 0, 3
878 ; PC64LE9-NEXT:    addis 3, 2, .LCPI14_2@toc@ha
879 ; PC64LE9-NEXT:    addi 3, 3, .LCPI14_2@toc@l
880 ; PC64LE9-NEXT:    xvmuldp 34, 1, 0
881 ; PC64LE9-NEXT:    lxvx 0, 0, 3
882 ; PC64LE9-NEXT:    xvmuldp 35, 1, 0
883 ; PC64LE9-NEXT:    blr
884 entry:
885   %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(
886            <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
887                          double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
888            <4 x double> <double 2.000000e+00, double 3.000000e+00,
889                          double 4.000000e+00, double 5.000000e+00>,
890            metadata !"round.dynamic",
891            metadata !"fpexcept.strict")
892   ret <4 x double> %mul
895 define <1 x float> @constrained_vector_fadd_v1f32() {
896 ; PC64LE-LABEL: constrained_vector_fadd_v1f32:
897 ; PC64LE:       # %bb.0: # %entry
898 ; PC64LE-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
899 ; PC64LE-NEXT:    addis 4, 2, .LCPI15_1@toc@ha
900 ; PC64LE-NEXT:    lfs 0, .LCPI15_0@toc@l(3)
901 ; PC64LE-NEXT:    lfs 1, .LCPI15_1@toc@l(4)
902 ; PC64LE-NEXT:    xsaddsp 0, 1, 0
903 ; PC64LE-NEXT:    xscvdpspn 0, 0
904 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
905 ; PC64LE-NEXT:    blr
907 ; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
908 ; PC64LE9:       # %bb.0: # %entry
909 ; PC64LE9-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
910 ; PC64LE9-NEXT:    lfs 0, .LCPI15_0@toc@l(3)
911 ; PC64LE9-NEXT:    addis 3, 2, .LCPI15_1@toc@ha
912 ; PC64LE9-NEXT:    lfs 1, .LCPI15_1@toc@l(3)
913 ; PC64LE9-NEXT:    xsaddsp 0, 1, 0
914 ; PC64LE9-NEXT:    xscvdpspn 0, 0
915 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
916 ; PC64LE9-NEXT:    blr
917 entry:
918   %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
919            <1 x float> <float 0x7FF0000000000000>,
920            <1 x float> <float 1.0>,
921            metadata !"round.dynamic",
922            metadata !"fpexcept.strict")
923   ret <1 x float> %add
926 define <2 x double> @constrained_vector_fadd_v2f64() {
927 ; PC64LE-LABEL: constrained_vector_fadd_v2f64:
928 ; PC64LE:       # %bb.0: # %entry
929 ; PC64LE-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
930 ; PC64LE-NEXT:    addis 4, 2, .LCPI16_1@toc@ha
931 ; PC64LE-NEXT:    addi 3, 3, .LCPI16_0@toc@l
932 ; PC64LE-NEXT:    addi 4, 4, .LCPI16_1@toc@l
933 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
934 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
935 ; PC64LE-NEXT:    xxswapd 0, 0
936 ; PC64LE-NEXT:    xxswapd 1, 1
937 ; PC64LE-NEXT:    xvadddp 34, 1, 0
938 ; PC64LE-NEXT:    blr
940 ; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
941 ; PC64LE9:       # %bb.0: # %entry
942 ; PC64LE9-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
943 ; PC64LE9-NEXT:    addi 3, 3, .LCPI16_0@toc@l
944 ; PC64LE9-NEXT:    lxvx 0, 0, 3
945 ; PC64LE9-NEXT:    addis 3, 2, .LCPI16_1@toc@ha
946 ; PC64LE9-NEXT:    addi 3, 3, .LCPI16_1@toc@l
947 ; PC64LE9-NEXT:    lxvx 1, 0, 3
948 ; PC64LE9-NEXT:    xvadddp 34, 1, 0
949 ; PC64LE9-NEXT:    blr
950 entry:
951   %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(
952            <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
953            <2 x double> <double 1.000000e+00, double 1.000000e-01>,
954            metadata !"round.dynamic",
955            metadata !"fpexcept.strict")
956   ret <2 x double> %add
959 define <3 x float> @constrained_vector_fadd_v3f32() {
960 ; PC64LE-LABEL: constrained_vector_fadd_v3f32:
961 ; PC64LE:       # %bb.0: # %entry
962 ; PC64LE-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
963 ; PC64LE-NEXT:    addis 4, 2, .LCPI17_2@toc@ha
964 ; PC64LE-NEXT:    addis 5, 2, .LCPI17_1@toc@ha
965 ; PC64LE-NEXT:    xxlxor 3, 3, 3
966 ; PC64LE-NEXT:    lfs 0, .LCPI17_0@toc@l(3)
967 ; PC64LE-NEXT:    lfs 1, .LCPI17_2@toc@l(4)
968 ; PC64LE-NEXT:    lfs 2, .LCPI17_1@toc@l(5)
969 ; PC64LE-NEXT:    addis 3, 2, .LCPI17_3@toc@ha
970 ; PC64LE-NEXT:    addi 3, 3, .LCPI17_3@toc@l
971 ; PC64LE-NEXT:    xsaddsp 1, 0, 1
972 ; PC64LE-NEXT:    lvx 4, 0, 3
973 ; PC64LE-NEXT:    xsaddsp 2, 0, 2
974 ; PC64LE-NEXT:    xsaddsp 0, 0, 3
975 ; PC64LE-NEXT:    xscvdpspn 1, 1
976 ; PC64LE-NEXT:    xscvdpspn 2, 2
977 ; PC64LE-NEXT:    xscvdpspn 0, 0
978 ; PC64LE-NEXT:    xxsldwi 34, 1, 1, 1
979 ; PC64LE-NEXT:    xxsldwi 35, 2, 2, 1
980 ; PC64LE-NEXT:    vmrglw 2, 3, 2
981 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
982 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
983 ; PC64LE-NEXT:    blr
985 ; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
986 ; PC64LE9:       # %bb.0: # %entry
987 ; PC64LE9-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
988 ; PC64LE9-NEXT:    lfs 0, .LCPI17_0@toc@l(3)
989 ; PC64LE9-NEXT:    addis 3, 2, .LCPI17_1@toc@ha
990 ; PC64LE9-NEXT:    lfs 2, .LCPI17_1@toc@l(3)
991 ; PC64LE9-NEXT:    addis 3, 2, .LCPI17_2@toc@ha
992 ; PC64LE9-NEXT:    xsaddsp 2, 0, 2
993 ; PC64LE9-NEXT:    lfs 3, .LCPI17_2@toc@l(3)
994 ; PC64LE9-NEXT:    xxlxor 1, 1, 1
995 ; PC64LE9-NEXT:    xsaddsp 1, 0, 1
996 ; PC64LE9-NEXT:    xsaddsp 0, 0, 3
997 ; PC64LE9-NEXT:    xscvdpspn 0, 0
998 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
999 ; PC64LE9-NEXT:    xscvdpspn 0, 2
1000 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
1001 ; PC64LE9-NEXT:    xscvdpspn 0, 1
1002 ; PC64LE9-NEXT:    addis 3, 2, .LCPI17_3@toc@ha
1003 ; PC64LE9-NEXT:    addi 3, 3, .LCPI17_3@toc@l
1004 ; PC64LE9-NEXT:    lxvx 36, 0, 3
1005 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
1006 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
1007 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1008 ; PC64LE9-NEXT:    blr
1009 entry:
1010   %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32(
1011            <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
1012                         float 0xFFFFFFFFE0000000>,
1013            <3 x float> <float 2.0, float 1.0, float 0.0>,
1014            metadata !"round.dynamic",
1015            metadata !"fpexcept.strict")
1016   ret <3 x float> %add
1019 define <3 x double> @constrained_vector_fadd_v3f64() {
1020 ; PC64LE-LABEL: constrained_vector_fadd_v3f64:
1021 ; PC64LE:       # %bb.0: # %entry
1022 ; PC64LE-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
1023 ; PC64LE-NEXT:    addis 4, 2, .LCPI18_2@toc@ha
1024 ; PC64LE-NEXT:    addi 3, 3, .LCPI18_1@toc@l
1025 ; PC64LE-NEXT:    addi 4, 4, .LCPI18_2@toc@l
1026 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1027 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
1028 ; PC64LE-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
1029 ; PC64LE-NEXT:    lfd 3, .LCPI18_0@toc@l(3)
1030 ; PC64LE-NEXT:    xxswapd 0, 0
1031 ; PC64LE-NEXT:    xxswapd 1, 1
1032 ; PC64LE-NEXT:    xvadddp 2, 1, 0
1033 ; PC64LE-NEXT:    xxlxor 0, 0, 0
1034 ; PC64LE-NEXT:    xsadddp 3, 3, 0
1035 ; PC64LE-NEXT:    xxswapd 1, 2
1036 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1037 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1038 ; PC64LE-NEXT:    blr
1040 ; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
1041 ; PC64LE9:       # %bb.0: # %entry
1042 ; PC64LE9-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
1043 ; PC64LE9-NEXT:    lfd 0, .LCPI18_0@toc@l(3)
1044 ; PC64LE9-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
1045 ; PC64LE9-NEXT:    xxlxor 1, 1, 1
1046 ; PC64LE9-NEXT:    addi 3, 3, .LCPI18_1@toc@l
1047 ; PC64LE9-NEXT:    xsadddp 3, 0, 1
1048 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1049 ; PC64LE9-NEXT:    addis 3, 2, .LCPI18_2@toc@ha
1050 ; PC64LE9-NEXT:    addi 3, 3, .LCPI18_2@toc@l
1051 ; PC64LE9-NEXT:    lxvx 1, 0, 3
1052 ; PC64LE9-NEXT:    xvadddp 2, 1, 0
1053 ; PC64LE9-NEXT:    xxswapd 1, 2
1054 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1055 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1056 ; PC64LE9-NEXT:    blr
1057 entry:
1058   %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
1059            <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
1060                          double 0x7FEFFFFFFFFFFFFF>,
1061            <3 x double> <double 2.0, double 1.0, double 0.0>,
1062            metadata !"round.dynamic",
1063            metadata !"fpexcept.strict")
1064   ret <3 x double> %add
1067 define <4 x double> @constrained_vector_fadd_v4f64() {
1068 ; PC64LE-LABEL: constrained_vector_fadd_v4f64:
1069 ; PC64LE:       # %bb.0: # %entry
1070 ; PC64LE-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1071 ; PC64LE-NEXT:    addis 4, 2, .LCPI19_1@toc@ha
1072 ; PC64LE-NEXT:    addis 5, 2, .LCPI19_2@toc@ha
1073 ; PC64LE-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1074 ; PC64LE-NEXT:    addi 4, 4, .LCPI19_1@toc@l
1075 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1076 ; PC64LE-NEXT:    addi 3, 5, .LCPI19_2@toc@l
1077 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
1078 ; PC64LE-NEXT:    lxvd2x 2, 0, 3
1079 ; PC64LE-NEXT:    xxswapd 0, 0
1080 ; PC64LE-NEXT:    xxswapd 1, 1
1081 ; PC64LE-NEXT:    xxswapd 2, 2
1082 ; PC64LE-NEXT:    xvadddp 34, 1, 0
1083 ; PC64LE-NEXT:    xvadddp 35, 1, 2
1084 ; PC64LE-NEXT:    blr
1086 ; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
1087 ; PC64LE9:       # %bb.0: # %entry
1088 ; PC64LE9-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1089 ; PC64LE9-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1090 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1091 ; PC64LE9-NEXT:    addis 3, 2, .LCPI19_1@toc@ha
1092 ; PC64LE9-NEXT:    addi 3, 3, .LCPI19_1@toc@l
1093 ; PC64LE9-NEXT:    lxvx 1, 0, 3
1094 ; PC64LE9-NEXT:    addis 3, 2, .LCPI19_2@toc@ha
1095 ; PC64LE9-NEXT:    addi 3, 3, .LCPI19_2@toc@l
1096 ; PC64LE9-NEXT:    xvadddp 34, 1, 0
1097 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1098 ; PC64LE9-NEXT:    xvadddp 35, 1, 0
1099 ; PC64LE9-NEXT:    blr
1100 entry:
1101   %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64(
1102            <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
1103                          double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
1104            <4 x double> <double 1.000000e+00, double 1.000000e-01,
1105                          double 2.000000e+00, double 2.000000e-01>,
1106            metadata !"round.dynamic",
1107            metadata !"fpexcept.strict")
1108   ret <4 x double> %add
1111 define <1 x float> @constrained_vector_fsub_v1f32() {
1112 ; PC64LE-LABEL: constrained_vector_fsub_v1f32:
1113 ; PC64LE:       # %bb.0: # %entry
1114 ; PC64LE-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1115 ; PC64LE-NEXT:    addis 4, 2, .LCPI20_1@toc@ha
1116 ; PC64LE-NEXT:    lfs 0, .LCPI20_0@toc@l(3)
1117 ; PC64LE-NEXT:    lfs 1, .LCPI20_1@toc@l(4)
1118 ; PC64LE-NEXT:    xssubsp 0, 1, 0
1119 ; PC64LE-NEXT:    xscvdpspn 0, 0
1120 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
1121 ; PC64LE-NEXT:    blr
1123 ; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
1124 ; PC64LE9:       # %bb.0: # %entry
1125 ; PC64LE9-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1126 ; PC64LE9-NEXT:    lfs 0, .LCPI20_0@toc@l(3)
1127 ; PC64LE9-NEXT:    addis 3, 2, .LCPI20_1@toc@ha
1128 ; PC64LE9-NEXT:    lfs 1, .LCPI20_1@toc@l(3)
1129 ; PC64LE9-NEXT:    xssubsp 0, 1, 0
1130 ; PC64LE9-NEXT:    xscvdpspn 0, 0
1131 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
1132 ; PC64LE9-NEXT:    blr
1133 entry:
1134   %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
1135            <1 x float> <float 0x7FF0000000000000>,
1136            <1 x float> <float 1.000000e+00>,
1137            metadata !"round.dynamic",
1138            metadata !"fpexcept.strict")
1139   ret <1 x float> %sub
1142 define <2 x double> @constrained_vector_fsub_v2f64() {
1143 ; PC64LE-LABEL: constrained_vector_fsub_v2f64:
1144 ; PC64LE:       # %bb.0: # %entry
1145 ; PC64LE-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1146 ; PC64LE-NEXT:    addis 4, 2, .LCPI21_1@toc@ha
1147 ; PC64LE-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1148 ; PC64LE-NEXT:    addi 4, 4, .LCPI21_1@toc@l
1149 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1150 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
1151 ; PC64LE-NEXT:    xxswapd 0, 0
1152 ; PC64LE-NEXT:    xxswapd 1, 1
1153 ; PC64LE-NEXT:    xvsubdp 34, 1, 0
1154 ; PC64LE-NEXT:    blr
1156 ; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
1157 ; PC64LE9:       # %bb.0: # %entry
1158 ; PC64LE9-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1159 ; PC64LE9-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1160 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1161 ; PC64LE9-NEXT:    addis 3, 2, .LCPI21_1@toc@ha
1162 ; PC64LE9-NEXT:    addi 3, 3, .LCPI21_1@toc@l
1163 ; PC64LE9-NEXT:    lxvx 1, 0, 3
1164 ; PC64LE9-NEXT:    xvsubdp 34, 1, 0
1165 ; PC64LE9-NEXT:    blr
1166 entry:
1167   %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(
1168            <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1169            <2 x double> <double 1.000000e+00, double 1.000000e-01>,
1170            metadata !"round.dynamic",
1171            metadata !"fpexcept.strict")
1172   ret <2 x double> %sub
1175 define <3 x float> @constrained_vector_fsub_v3f32() {
1176 ; PC64LE-LABEL: constrained_vector_fsub_v3f32:
1177 ; PC64LE:       # %bb.0: # %entry
1178 ; PC64LE-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
1179 ; PC64LE-NEXT:    addis 4, 2, .LCPI22_2@toc@ha
1180 ; PC64LE-NEXT:    addis 5, 2, .LCPI22_1@toc@ha
1181 ; PC64LE-NEXT:    xxlxor 3, 3, 3
1182 ; PC64LE-NEXT:    lfs 0, .LCPI22_0@toc@l(3)
1183 ; PC64LE-NEXT:    lfs 1, .LCPI22_2@toc@l(4)
1184 ; PC64LE-NEXT:    lfs 2, .LCPI22_1@toc@l(5)
1185 ; PC64LE-NEXT:    addis 3, 2, .LCPI22_3@toc@ha
1186 ; PC64LE-NEXT:    addi 3, 3, .LCPI22_3@toc@l
1187 ; PC64LE-NEXT:    xssubsp 1, 0, 1
1188 ; PC64LE-NEXT:    lvx 4, 0, 3
1189 ; PC64LE-NEXT:    xssubsp 2, 0, 2
1190 ; PC64LE-NEXT:    xssubsp 0, 0, 3
1191 ; PC64LE-NEXT:    xscvdpspn 1, 1
1192 ; PC64LE-NEXT:    xscvdpspn 2, 2
1193 ; PC64LE-NEXT:    xscvdpspn 0, 0
1194 ; PC64LE-NEXT:    xxsldwi 34, 1, 1, 1
1195 ; PC64LE-NEXT:    xxsldwi 35, 2, 2, 1
1196 ; PC64LE-NEXT:    vmrglw 2, 3, 2
1197 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
1198 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
1199 ; PC64LE-NEXT:    blr
1201 ; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
1202 ; PC64LE9:       # %bb.0: # %entry
1203 ; PC64LE9-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
1204 ; PC64LE9-NEXT:    lfs 0, .LCPI22_0@toc@l(3)
1205 ; PC64LE9-NEXT:    addis 3, 2, .LCPI22_1@toc@ha
1206 ; PC64LE9-NEXT:    lfs 2, .LCPI22_1@toc@l(3)
1207 ; PC64LE9-NEXT:    addis 3, 2, .LCPI22_2@toc@ha
1208 ; PC64LE9-NEXT:    xssubsp 2, 0, 2
1209 ; PC64LE9-NEXT:    lfs 3, .LCPI22_2@toc@l(3)
1210 ; PC64LE9-NEXT:    xxlxor 1, 1, 1
1211 ; PC64LE9-NEXT:    xssubsp 1, 0, 1
1212 ; PC64LE9-NEXT:    xssubsp 0, 0, 3
1213 ; PC64LE9-NEXT:    xscvdpspn 0, 0
1214 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
1215 ; PC64LE9-NEXT:    xscvdpspn 0, 2
1216 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
1217 ; PC64LE9-NEXT:    xscvdpspn 0, 1
1218 ; PC64LE9-NEXT:    addis 3, 2, .LCPI22_3@toc@ha
1219 ; PC64LE9-NEXT:    addi 3, 3, .LCPI22_3@toc@l
1220 ; PC64LE9-NEXT:    lxvx 36, 0, 3
1221 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
1222 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
1223 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1224 ; PC64LE9-NEXT:    blr
1225 entry:
1226   %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(
1227            <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
1228                         float 0xFFFFFFFFE0000000>,
1229            <3 x float> <float 2.0, float 1.0, float 0.0>,
1230            metadata !"round.dynamic",
1231            metadata !"fpexcept.strict")
1232   ret <3 x float> %sub
1235 define <3 x double> @constrained_vector_fsub_v3f64() {
1236 ; PC64LE-LABEL: constrained_vector_fsub_v3f64:
1237 ; PC64LE:       # %bb.0: # %entry
1238 ; PC64LE-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
1239 ; PC64LE-NEXT:    addis 4, 2, .LCPI23_2@toc@ha
1240 ; PC64LE-NEXT:    addi 3, 3, .LCPI23_1@toc@l
1241 ; PC64LE-NEXT:    addi 4, 4, .LCPI23_2@toc@l
1242 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1243 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
1244 ; PC64LE-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
1245 ; PC64LE-NEXT:    lfd 3, .LCPI23_0@toc@l(3)
1246 ; PC64LE-NEXT:    xxswapd 0, 0
1247 ; PC64LE-NEXT:    xxswapd 1, 1
1248 ; PC64LE-NEXT:    xvsubdp 2, 1, 0
1249 ; PC64LE-NEXT:    xxlxor 0, 0, 0
1250 ; PC64LE-NEXT:    xssubdp 3, 3, 0
1251 ; PC64LE-NEXT:    xxswapd 1, 2
1252 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1253 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1254 ; PC64LE-NEXT:    blr
1256 ; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
1257 ; PC64LE9:       # %bb.0: # %entry
1258 ; PC64LE9-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
1259 ; PC64LE9-NEXT:    lfd 0, .LCPI23_0@toc@l(3)
1260 ; PC64LE9-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
1261 ; PC64LE9-NEXT:    xxlxor 1, 1, 1
1262 ; PC64LE9-NEXT:    addi 3, 3, .LCPI23_1@toc@l
1263 ; PC64LE9-NEXT:    xssubdp 3, 0, 1
1264 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1265 ; PC64LE9-NEXT:    addis 3, 2, .LCPI23_2@toc@ha
1266 ; PC64LE9-NEXT:    addi 3, 3, .LCPI23_2@toc@l
1267 ; PC64LE9-NEXT:    lxvx 1, 0, 3
1268 ; PC64LE9-NEXT:    xvsubdp 2, 1, 0
1269 ; PC64LE9-NEXT:    xxswapd 1, 2
1270 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1271 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1272 ; PC64LE9-NEXT:    blr
1273 entry:
1274   %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
1275            <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1276                          double 0xFFEFFFFFFFFFFFFF>,
1277            <3 x double> <double 2.0, double 1.0, double 0.0>,
1278            metadata !"round.dynamic",
1279            metadata !"fpexcept.strict")
1280   ret <3 x double> %sub
1283 define <4 x double> @constrained_vector_fsub_v4f64() {
1284 ; PC64LE-LABEL: constrained_vector_fsub_v4f64:
1285 ; PC64LE:       # %bb.0: # %entry
1286 ; PC64LE-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
1287 ; PC64LE-NEXT:    addis 4, 2, .LCPI24_1@toc@ha
1288 ; PC64LE-NEXT:    addis 5, 2, .LCPI24_2@toc@ha
1289 ; PC64LE-NEXT:    addi 3, 3, .LCPI24_0@toc@l
1290 ; PC64LE-NEXT:    addi 4, 4, .LCPI24_1@toc@l
1291 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1292 ; PC64LE-NEXT:    addi 3, 5, .LCPI24_2@toc@l
1293 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
1294 ; PC64LE-NEXT:    lxvd2x 2, 0, 3
1295 ; PC64LE-NEXT:    xxswapd 0, 0
1296 ; PC64LE-NEXT:    xxswapd 1, 1
1297 ; PC64LE-NEXT:    xxswapd 2, 2
1298 ; PC64LE-NEXT:    xvsubdp 34, 1, 0
1299 ; PC64LE-NEXT:    xvsubdp 35, 1, 2
1300 ; PC64LE-NEXT:    blr
1302 ; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
1303 ; PC64LE9:       # %bb.0: # %entry
1304 ; PC64LE9-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
1305 ; PC64LE9-NEXT:    addi 3, 3, .LCPI24_0@toc@l
1306 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1307 ; PC64LE9-NEXT:    addis 3, 2, .LCPI24_1@toc@ha
1308 ; PC64LE9-NEXT:    addi 3, 3, .LCPI24_1@toc@l
1309 ; PC64LE9-NEXT:    lxvx 1, 0, 3
1310 ; PC64LE9-NEXT:    addis 3, 2, .LCPI24_2@toc@ha
1311 ; PC64LE9-NEXT:    addi 3, 3, .LCPI24_2@toc@l
1312 ; PC64LE9-NEXT:    xvsubdp 34, 1, 0
1313 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1314 ; PC64LE9-NEXT:    xvsubdp 35, 1, 0
1315 ; PC64LE9-NEXT:    blr
1316 entry:
1317   %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(
1318            <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1319                          double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1320            <4 x double> <double 1.000000e+00, double 1.000000e-01,
1321                          double 2.000000e+00, double 2.000000e-01>,
1322            metadata !"round.dynamic",
1323            metadata !"fpexcept.strict")
1324   ret <4 x double> %sub
1327 define <1 x float> @constrained_vector_sqrt_v1f32() {
1328 ; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
1329 ; PC64LE:       # %bb.0: # %entry
1330 ; PC64LE-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
1331 ; PC64LE-NEXT:    lfs 0, .LCPI25_0@toc@l(3)
1332 ; PC64LE-NEXT:    xssqrtsp 0, 0
1333 ; PC64LE-NEXT:    xscvdpspn 0, 0
1334 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
1335 ; PC64LE-NEXT:    blr
1337 ; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
1338 ; PC64LE9:       # %bb.0: # %entry
1339 ; PC64LE9-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
1340 ; PC64LE9-NEXT:    lfs 0, .LCPI25_0@toc@l(3)
1341 ; PC64LE9-NEXT:    xssqrtsp 0, 0
1342 ; PC64LE9-NEXT:    xscvdpspn 0, 0
1343 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
1344 ; PC64LE9-NEXT:    blr
1345 entry:
1346   %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
1347                               <1 x float> <float 42.0>,
1348                               metadata !"round.dynamic",
1349                               metadata !"fpexcept.strict")
1350   ret <1 x float> %sqrt
1353 define <2 x double> @constrained_vector_sqrt_v2f64() {
1354 ; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
1355 ; PC64LE:       # %bb.0: # %entry
1356 ; PC64LE-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
1357 ; PC64LE-NEXT:    addi 3, 3, .LCPI26_0@toc@l
1358 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1359 ; PC64LE-NEXT:    xxswapd 0, 0
1360 ; PC64LE-NEXT:    xvsqrtdp 34, 0
1361 ; PC64LE-NEXT:    blr
1363 ; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
1364 ; PC64LE9:       # %bb.0: # %entry
1365 ; PC64LE9-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
1366 ; PC64LE9-NEXT:    addi 3, 3, .LCPI26_0@toc@l
1367 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1368 ; PC64LE9-NEXT:    xvsqrtdp 34, 0
1369 ; PC64LE9-NEXT:    blr
1370 entry:
1371   %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
1372                               <2 x double> <double 42.0, double 42.1>,
1373                               metadata !"round.dynamic",
1374                               metadata !"fpexcept.strict")
1375   ret <2 x double> %sqrt
1378 define <3 x float> @constrained_vector_sqrt_v3f32() {
1379 ; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
1380 ; PC64LE:       # %bb.0: # %entry
1381 ; PC64LE-NEXT:    addis 3, 2, .LCPI27_2@toc@ha
1382 ; PC64LE-NEXT:    addis 4, 2, .LCPI27_1@toc@ha
1383 ; PC64LE-NEXT:    lfs 0, .LCPI27_2@toc@l(3)
1384 ; PC64LE-NEXT:    lfs 1, .LCPI27_1@toc@l(4)
1385 ; PC64LE-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
1386 ; PC64LE-NEXT:    xssqrtsp 0, 0
1387 ; PC64LE-NEXT:    lfs 2, .LCPI27_0@toc@l(3)
1388 ; PC64LE-NEXT:    addis 3, 2, .LCPI27_3@toc@ha
1389 ; PC64LE-NEXT:    xssqrtsp 1, 1
1390 ; PC64LE-NEXT:    addi 3, 3, .LCPI27_3@toc@l
1391 ; PC64LE-NEXT:    xssqrtsp 2, 2
1392 ; PC64LE-NEXT:    xscvdpspn 0, 0
1393 ; PC64LE-NEXT:    xscvdpspn 1, 1
1394 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
1395 ; PC64LE-NEXT:    xscvdpspn 0, 2
1396 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
1397 ; PC64LE-NEXT:    vmrglw 2, 3, 2
1398 ; PC64LE-NEXT:    lvx 3, 0, 3
1399 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
1400 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
1401 ; PC64LE-NEXT:    blr
1403 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
1404 ; PC64LE9:       # %bb.0: # %entry
1405 ; PC64LE9-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
1406 ; PC64LE9-NEXT:    lfs 0, .LCPI27_0@toc@l(3)
1407 ; PC64LE9-NEXT:    addis 3, 2, .LCPI27_1@toc@ha
1408 ; PC64LE9-NEXT:    lfs 1, .LCPI27_1@toc@l(3)
1409 ; PC64LE9-NEXT:    addis 3, 2, .LCPI27_2@toc@ha
1410 ; PC64LE9-NEXT:    xssqrtsp 0, 0
1411 ; PC64LE9-NEXT:    lfs 2, .LCPI27_2@toc@l(3)
1412 ; PC64LE9-NEXT:    addis 3, 2, .LCPI27_3@toc@ha
1413 ; PC64LE9-NEXT:    addi 3, 3, .LCPI27_3@toc@l
1414 ; PC64LE9-NEXT:    xssqrtsp 1, 1
1415 ; PC64LE9-NEXT:    xssqrtsp 2, 2
1416 ; PC64LE9-NEXT:    xscvdpspn 0, 0
1417 ; PC64LE9-NEXT:    xscvdpspn 1, 1
1418 ; PC64LE9-NEXT:    xscvdpspn 2, 2
1419 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
1420 ; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 1
1421 ; PC64LE9-NEXT:    xxsldwi 34, 2, 2, 1
1422 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
1423 ; PC64LE9-NEXT:    lxvx 35, 0, 3
1424 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
1425 ; PC64LE9-NEXT:    blr
1426 entry:
1427   %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
1428                               <3 x float> <float 42.0, float 43.0, float 44.0>,
1429                               metadata !"round.dynamic",
1430                               metadata !"fpexcept.strict")
1431   ret <3 x float> %sqrt
1434 define <3 x double> @constrained_vector_sqrt_v3f64() {
1435 ; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
1436 ; PC64LE:       # %bb.0: # %entry
1437 ; PC64LE-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
1438 ; PC64LE-NEXT:    addi 3, 3, .LCPI28_1@toc@l
1439 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1440 ; PC64LE-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
1441 ; PC64LE-NEXT:    lfd 1, .LCPI28_0@toc@l(3)
1442 ; PC64LE-NEXT:    xxswapd 0, 0
1443 ; PC64LE-NEXT:    xssqrtdp 3, 1
1444 ; PC64LE-NEXT:    xvsqrtdp 2, 0
1445 ; PC64LE-NEXT:    xxswapd 1, 2
1446 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1447 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1448 ; PC64LE-NEXT:    blr
1450 ; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
1451 ; PC64LE9:       # %bb.0: # %entry
1452 ; PC64LE9-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
1453 ; PC64LE9-NEXT:    lfd 0, .LCPI28_0@toc@l(3)
1454 ; PC64LE9-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
1455 ; PC64LE9-NEXT:    addi 3, 3, .LCPI28_1@toc@l
1456 ; PC64LE9-NEXT:    xssqrtdp 3, 0
1457 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1458 ; PC64LE9-NEXT:    xvsqrtdp 2, 0
1459 ; PC64LE9-NEXT:    xxswapd 1, 2
1460 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1461 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1462 ; PC64LE9-NEXT:    blr
1463 entry:
1464   %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
1465                           <3 x double> <double 42.0, double 42.1, double 42.2>,
1466                           metadata !"round.dynamic",
1467                           metadata !"fpexcept.strict")
1468   ret <3 x double> %sqrt
1471 define <4 x double> @constrained_vector_sqrt_v4f64() {
1472 ; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
1473 ; PC64LE:       # %bb.0: # %entry
1474 ; PC64LE-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
1475 ; PC64LE-NEXT:    addis 4, 2, .LCPI29_1@toc@ha
1476 ; PC64LE-NEXT:    addi 3, 3, .LCPI29_0@toc@l
1477 ; PC64LE-NEXT:    addi 4, 4, .LCPI29_1@toc@l
1478 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
1479 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
1480 ; PC64LE-NEXT:    xxswapd 0, 0
1481 ; PC64LE-NEXT:    xxswapd 1, 1
1482 ; PC64LE-NEXT:    xvsqrtdp 34, 0
1483 ; PC64LE-NEXT:    xvsqrtdp 35, 1
1484 ; PC64LE-NEXT:    blr
1486 ; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
1487 ; PC64LE9:       # %bb.0: # %entry
1488 ; PC64LE9-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
1489 ; PC64LE9-NEXT:    addi 3, 3, .LCPI29_0@toc@l
1490 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1491 ; PC64LE9-NEXT:    addis 3, 2, .LCPI29_1@toc@ha
1492 ; PC64LE9-NEXT:    addi 3, 3, .LCPI29_1@toc@l
1493 ; PC64LE9-NEXT:    xvsqrtdp 34, 0
1494 ; PC64LE9-NEXT:    lxvx 0, 0, 3
1495 ; PC64LE9-NEXT:    xvsqrtdp 35, 0
1496 ; PC64LE9-NEXT:    blr
1497  entry:
1498   %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(
1499                               <4 x double> <double 42.0, double 42.1,
1500                                             double 42.2, double 42.3>,
1501                               metadata !"round.dynamic",
1502                               metadata !"fpexcept.strict")
1503   ret <4 x double> %sqrt
1506 define <1 x float> @constrained_vector_pow_v1f32() {
1507 ; PC64LE-LABEL: constrained_vector_pow_v1f32:
1508 ; PC64LE:       # %bb.0: # %entry
1509 ; PC64LE-NEXT:    mflr 0
1510 ; PC64LE-NEXT:    std 0, 16(1)
1511 ; PC64LE-NEXT:    stdu 1, -32(1)
1512 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
1513 ; PC64LE-NEXT:    .cfi_offset lr, 16
1514 ; PC64LE-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
1515 ; PC64LE-NEXT:    addis 4, 2, .LCPI30_1@toc@ha
1516 ; PC64LE-NEXT:    lfs 1, .LCPI30_0@toc@l(3)
1517 ; PC64LE-NEXT:    lfs 2, .LCPI30_1@toc@l(4)
1518 ; PC64LE-NEXT:    bl powf
1519 ; PC64LE-NEXT:    nop
1520 ; PC64LE-NEXT:    xscvdpspn 0, 1
1521 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
1522 ; PC64LE-NEXT:    addi 1, 1, 32
1523 ; PC64LE-NEXT:    ld 0, 16(1)
1524 ; PC64LE-NEXT:    mtlr 0
1525 ; PC64LE-NEXT:    blr
1527 ; PC64LE9-LABEL: constrained_vector_pow_v1f32:
1528 ; PC64LE9:       # %bb.0: # %entry
1529 ; PC64LE9-NEXT:    mflr 0
1530 ; PC64LE9-NEXT:    std 0, 16(1)
1531 ; PC64LE9-NEXT:    stdu 1, -32(1)
1532 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
1533 ; PC64LE9-NEXT:    .cfi_offset lr, 16
1534 ; PC64LE9-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
1535 ; PC64LE9-NEXT:    lfs 1, .LCPI30_0@toc@l(3)
1536 ; PC64LE9-NEXT:    addis 3, 2, .LCPI30_1@toc@ha
1537 ; PC64LE9-NEXT:    lfs 2, .LCPI30_1@toc@l(3)
1538 ; PC64LE9-NEXT:    bl powf
1539 ; PC64LE9-NEXT:    nop
1540 ; PC64LE9-NEXT:    xscvdpspn 0, 1
1541 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
1542 ; PC64LE9-NEXT:    addi 1, 1, 32
1543 ; PC64LE9-NEXT:    ld 0, 16(1)
1544 ; PC64LE9-NEXT:    mtlr 0
1545 ; PC64LE9-NEXT:    blr
1546 entry:
1547   %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
1548                              <1 x float> <float 42.0>,
1549                              <1 x float> <float 3.0>,
1550                              metadata !"round.dynamic",
1551                              metadata !"fpexcept.strict")
1552   ret <1 x float> %pow
1555 define <2 x double> @constrained_vector_pow_v2f64() {
1556 ; PC64LE-LABEL: constrained_vector_pow_v2f64:
1557 ; PC64LE:       # %bb.0: # %entry
1558 ; PC64LE-NEXT:    mflr 0
1559 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
1560 ; PC64LE-NEXT:    .cfi_offset lr, 16
1561 ; PC64LE-NEXT:    .cfi_offset f31, -8
1562 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1563 ; PC64LE-NEXT:    std 0, 16(1)
1564 ; PC64LE-NEXT:    stdu 1, -80(1)
1565 ; PC64LE-NEXT:    addis 4, 2, .LCPI31_1@toc@ha
1566 ; PC64LE-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
1567 ; PC64LE-NEXT:    lfs 31, .LCPI31_1@toc@l(4)
1568 ; PC64LE-NEXT:    lfd 1, .LCPI31_0@toc@l(3)
1569 ; PC64LE-NEXT:    fmr 2, 31
1570 ; PC64LE-NEXT:    bl pow
1571 ; PC64LE-NEXT:    nop
1572 ; PC64LE-NEXT:    li 3, 48
1573 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1574 ; PC64LE-NEXT:    fmr 2, 31
1575 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1576 ; PC64LE-NEXT:    addis 3, 2, .LCPI31_2@toc@ha
1577 ; PC64LE-NEXT:    lfd 1, .LCPI31_2@toc@l(3)
1578 ; PC64LE-NEXT:    bl pow
1579 ; PC64LE-NEXT:    nop
1580 ; PC64LE-NEXT:    li 3, 48
1581 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1582 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1583 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
1584 ; PC64LE-NEXT:    addi 1, 1, 80
1585 ; PC64LE-NEXT:    ld 0, 16(1)
1586 ; PC64LE-NEXT:    mtlr 0
1587 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1588 ; PC64LE-NEXT:    blr
1590 ; PC64LE9-LABEL: constrained_vector_pow_v2f64:
1591 ; PC64LE9:       # %bb.0: # %entry
1592 ; PC64LE9-NEXT:    mflr 0
1593 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
1594 ; PC64LE9-NEXT:    .cfi_offset lr, 16
1595 ; PC64LE9-NEXT:    .cfi_offset f31, -8
1596 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1597 ; PC64LE9-NEXT:    std 0, 16(1)
1598 ; PC64LE9-NEXT:    stdu 1, -64(1)
1599 ; PC64LE9-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
1600 ; PC64LE9-NEXT:    lfd 1, .LCPI31_0@toc@l(3)
1601 ; PC64LE9-NEXT:    addis 3, 2, .LCPI31_1@toc@ha
1602 ; PC64LE9-NEXT:    lfs 31, .LCPI31_1@toc@l(3)
1603 ; PC64LE9-NEXT:    fmr 2, 31
1604 ; PC64LE9-NEXT:    bl pow
1605 ; PC64LE9-NEXT:    nop
1606 ; PC64LE9-NEXT:    addis 3, 2, .LCPI31_2@toc@ha
1607 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1608 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1609 ; PC64LE9-NEXT:    lfd 1, .LCPI31_2@toc@l(3)
1610 ; PC64LE9-NEXT:    fmr 2, 31
1611 ; PC64LE9-NEXT:    bl pow
1612 ; PC64LE9-NEXT:    nop
1613 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1614 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1615 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
1616 ; PC64LE9-NEXT:    addi 1, 1, 64
1617 ; PC64LE9-NEXT:    ld 0, 16(1)
1618 ; PC64LE9-NEXT:    mtlr 0
1619 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1620 ; PC64LE9-NEXT:    blr
1621 entry:
1622   %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64(
1623                              <2 x double> <double 42.1, double 42.2>,
1624                              <2 x double> <double 3.0, double 3.0>,
1625                              metadata !"round.dynamic",
1626                              metadata !"fpexcept.strict")
1627   ret <2 x double> %pow
1630 define <3 x float> @constrained_vector_pow_v3f32() {
1631 ; PC64LE-LABEL: constrained_vector_pow_v3f32:
1632 ; PC64LE:       # %bb.0: # %entry
1633 ; PC64LE-NEXT:    mflr 0
1634 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
1635 ; PC64LE-NEXT:    .cfi_offset lr, 16
1636 ; PC64LE-NEXT:    .cfi_offset f29, -24
1637 ; PC64LE-NEXT:    .cfi_offset f30, -16
1638 ; PC64LE-NEXT:    .cfi_offset f31, -8
1639 ; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
1640 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1641 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1642 ; PC64LE-NEXT:    std 0, 16(1)
1643 ; PC64LE-NEXT:    stdu 1, -64(1)
1644 ; PC64LE-NEXT:    addis 4, 2, .LCPI32_1@toc@ha
1645 ; PC64LE-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
1646 ; PC64LE-NEXT:    lfs 31, .LCPI32_1@toc@l(4)
1647 ; PC64LE-NEXT:    lfs 1, .LCPI32_0@toc@l(3)
1648 ; PC64LE-NEXT:    fmr 2, 31
1649 ; PC64LE-NEXT:    bl powf
1650 ; PC64LE-NEXT:    nop
1651 ; PC64LE-NEXT:    addis 3, 2, .LCPI32_2@toc@ha
1652 ; PC64LE-NEXT:    fmr 2, 31
1653 ; PC64LE-NEXT:    fmr 30, 1
1654 ; PC64LE-NEXT:    lfs 1, .LCPI32_2@toc@l(3)
1655 ; PC64LE-NEXT:    bl powf
1656 ; PC64LE-NEXT:    nop
1657 ; PC64LE-NEXT:    addis 3, 2, .LCPI32_3@toc@ha
1658 ; PC64LE-NEXT:    fmr 2, 31
1659 ; PC64LE-NEXT:    fmr 29, 1
1660 ; PC64LE-NEXT:    lfs 1, .LCPI32_3@toc@l(3)
1661 ; PC64LE-NEXT:    bl powf
1662 ; PC64LE-NEXT:    nop
1663 ; PC64LE-NEXT:    xscvdpspn 0, 29
1664 ; PC64LE-NEXT:    addis 3, 2, .LCPI32_4@toc@ha
1665 ; PC64LE-NEXT:    xscvdpspn 1, 1
1666 ; PC64LE-NEXT:    addi 3, 3, .LCPI32_4@toc@l
1667 ; PC64LE-NEXT:    lvx 4, 0, 3
1668 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
1669 ; PC64LE-NEXT:    xscvdpspn 0, 30
1670 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
1671 ; PC64LE-NEXT:    vmrglw 2, 2, 3
1672 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
1673 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
1674 ; PC64LE-NEXT:    addi 1, 1, 64
1675 ; PC64LE-NEXT:    ld 0, 16(1)
1676 ; PC64LE-NEXT:    mtlr 0
1677 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1678 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1679 ; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
1680 ; PC64LE-NEXT:    blr
1682 ; PC64LE9-LABEL: constrained_vector_pow_v3f32:
1683 ; PC64LE9:       # %bb.0: # %entry
1684 ; PC64LE9-NEXT:    mflr 0
1685 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
1686 ; PC64LE9-NEXT:    .cfi_offset lr, 16
1687 ; PC64LE9-NEXT:    .cfi_offset f29, -24
1688 ; PC64LE9-NEXT:    .cfi_offset f30, -16
1689 ; PC64LE9-NEXT:    .cfi_offset f31, -8
1690 ; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
1691 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1692 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1693 ; PC64LE9-NEXT:    std 0, 16(1)
1694 ; PC64LE9-NEXT:    stdu 1, -64(1)
1695 ; PC64LE9-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
1696 ; PC64LE9-NEXT:    lfs 1, .LCPI32_0@toc@l(3)
1697 ; PC64LE9-NEXT:    addis 3, 2, .LCPI32_1@toc@ha
1698 ; PC64LE9-NEXT:    lfs 31, .LCPI32_1@toc@l(3)
1699 ; PC64LE9-NEXT:    fmr 2, 31
1700 ; PC64LE9-NEXT:    bl powf
1701 ; PC64LE9-NEXT:    nop
1702 ; PC64LE9-NEXT:    addis 3, 2, .LCPI32_2@toc@ha
1703 ; PC64LE9-NEXT:    fmr 30, 1
1704 ; PC64LE9-NEXT:    lfs 1, .LCPI32_2@toc@l(3)
1705 ; PC64LE9-NEXT:    fmr 2, 31
1706 ; PC64LE9-NEXT:    bl powf
1707 ; PC64LE9-NEXT:    nop
1708 ; PC64LE9-NEXT:    addis 3, 2, .LCPI32_3@toc@ha
1709 ; PC64LE9-NEXT:    fmr 29, 1
1710 ; PC64LE9-NEXT:    lfs 1, .LCPI32_3@toc@l(3)
1711 ; PC64LE9-NEXT:    fmr 2, 31
1712 ; PC64LE9-NEXT:    bl powf
1713 ; PC64LE9-NEXT:    nop
1714 ; PC64LE9-NEXT:    xscvdpspn 0, 1
1715 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
1716 ; PC64LE9-NEXT:    xscvdpspn 0, 29
1717 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
1718 ; PC64LE9-NEXT:    xscvdpspn 0, 30
1719 ; PC64LE9-NEXT:    addis 3, 2, .LCPI32_4@toc@ha
1720 ; PC64LE9-NEXT:    addi 3, 3, .LCPI32_4@toc@l
1721 ; PC64LE9-NEXT:    lxvx 36, 0, 3
1722 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
1723 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
1724 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1725 ; PC64LE9-NEXT:    addi 1, 1, 64
1726 ; PC64LE9-NEXT:    ld 0, 16(1)
1727 ; PC64LE9-NEXT:    mtlr 0
1728 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1729 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1730 ; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
1731 ; PC64LE9-NEXT:    blr
1732 entry:
1733   %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32(
1734                              <3 x float> <float 42.0, float 43.0, float 44.0>,
1735                              <3 x float> <float 3.0, float 3.0, float 3.0>,
1736                              metadata !"round.dynamic",
1737                              metadata !"fpexcept.strict")
1738   ret <3 x float> %pow
1741 define <3 x double> @constrained_vector_pow_v3f64() {
1742 ; PC64LE-LABEL: constrained_vector_pow_v3f64:
1743 ; PC64LE:       # %bb.0: # %entry
1744 ; PC64LE-NEXT:    mflr 0
1745 ; PC64LE-NEXT:    std 0, 16(1)
1746 ; PC64LE-NEXT:    stdu 1, -96(1)
1747 ; PC64LE-NEXT:    .cfi_def_cfa_offset 96
1748 ; PC64LE-NEXT:    .cfi_offset lr, 16
1749 ; PC64LE-NEXT:    .cfi_offset f31, -8
1750 ; PC64LE-NEXT:    .cfi_offset v31, -32
1751 ; PC64LE-NEXT:    addis 4, 2, .LCPI33_1@toc@ha
1752 ; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
1753 ; PC64LE-NEXT:    li 3, 64
1754 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1755 ; PC64LE-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
1756 ; PC64LE-NEXT:    lfs 31, .LCPI33_1@toc@l(4)
1757 ; PC64LE-NEXT:    lfs 1, .LCPI33_0@toc@l(3)
1758 ; PC64LE-NEXT:    fmr 2, 31
1759 ; PC64LE-NEXT:    bl pow
1760 ; PC64LE-NEXT:    nop
1761 ; PC64LE-NEXT:    li 3, 48
1762 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1763 ; PC64LE-NEXT:    fmr 2, 31
1764 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1765 ; PC64LE-NEXT:    addis 3, 2, .LCPI33_2@toc@ha
1766 ; PC64LE-NEXT:    lfd 1, .LCPI33_2@toc@l(3)
1767 ; PC64LE-NEXT:    bl pow
1768 ; PC64LE-NEXT:    nop
1769 ; PC64LE-NEXT:    li 3, 48
1770 ; PC64LE-NEXT:    fmr 2, 31
1771 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1772 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1773 ; PC64LE-NEXT:    addis 3, 2, .LCPI33_3@toc@ha
1774 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
1775 ; PC64LE-NEXT:    lfd 1, .LCPI33_3@toc@l(3)
1776 ; PC64LE-NEXT:    bl pow
1777 ; PC64LE-NEXT:    nop
1778 ; PC64LE-NEXT:    li 3, 64
1779 ; PC64LE-NEXT:    fmr 3, 1
1780 ; PC64LE-NEXT:    xxlor 1, 63, 63
1781 ; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
1782 ; PC64LE-NEXT:    xxlor 2, 63, 63
1783 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1784 ; PC64LE-NEXT:    addi 1, 1, 96
1785 ; PC64LE-NEXT:    ld 0, 16(1)
1786 ; PC64LE-NEXT:    mtlr 0
1787 ; PC64LE-NEXT:    blr
1789 ; PC64LE9-LABEL: constrained_vector_pow_v3f64:
1790 ; PC64LE9:       # %bb.0: # %entry
1791 ; PC64LE9-NEXT:    mflr 0
1792 ; PC64LE9-NEXT:    std 0, 16(1)
1793 ; PC64LE9-NEXT:    stdu 1, -80(1)
1794 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 80
1795 ; PC64LE9-NEXT:    .cfi_offset lr, 16
1796 ; PC64LE9-NEXT:    .cfi_offset f31, -8
1797 ; PC64LE9-NEXT:    .cfi_offset v31, -32
1798 ; PC64LE9-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
1799 ; PC64LE9-NEXT:    lfs 1, .LCPI33_0@toc@l(3)
1800 ; PC64LE9-NEXT:    addis 3, 2, .LCPI33_1@toc@ha
1801 ; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
1802 ; PC64LE9-NEXT:    lfs 31, .LCPI33_1@toc@l(3)
1803 ; PC64LE9-NEXT:    fmr 2, 31
1804 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
1805 ; PC64LE9-NEXT:    bl pow
1806 ; PC64LE9-NEXT:    nop
1807 ; PC64LE9-NEXT:    addis 3, 2, .LCPI33_2@toc@ha
1808 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1809 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1810 ; PC64LE9-NEXT:    lfd 1, .LCPI33_2@toc@l(3)
1811 ; PC64LE9-NEXT:    fmr 2, 31
1812 ; PC64LE9-NEXT:    bl pow
1813 ; PC64LE9-NEXT:    nop
1814 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1815 ; PC64LE9-NEXT:    addis 3, 2, .LCPI33_3@toc@ha
1816 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1817 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
1818 ; PC64LE9-NEXT:    lfd 1, .LCPI33_3@toc@l(3)
1819 ; PC64LE9-NEXT:    fmr 2, 31
1820 ; PC64LE9-NEXT:    bl pow
1821 ; PC64LE9-NEXT:    nop
1822 ; PC64LE9-NEXT:    fmr 3, 1
1823 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
1824 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
1825 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
1826 ; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
1827 ; PC64LE9-NEXT:    addi 1, 1, 80
1828 ; PC64LE9-NEXT:    ld 0, 16(1)
1829 ; PC64LE9-NEXT:    mtlr 0
1830 ; PC64LE9-NEXT:    blr
1831 entry:
1832   %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
1833                           <3 x double> <double 42.0, double 42.1, double 42.2>,
1834                           <3 x double> <double 3.0, double 3.0, double 3.0>,
1835                           metadata !"round.dynamic",
1836                           metadata !"fpexcept.strict")
1837   ret <3 x double> %pow
1840 define <4 x double> @constrained_vector_pow_v4f64() {
1841 ; PC64LE-LABEL: constrained_vector_pow_v4f64:
1842 ; PC64LE:       # %bb.0: # %entry
1843 ; PC64LE-NEXT:    mflr 0
1844 ; PC64LE-NEXT:    std 0, 16(1)
1845 ; PC64LE-NEXT:    stdu 1, -96(1)
1846 ; PC64LE-NEXT:    .cfi_def_cfa_offset 96
1847 ; PC64LE-NEXT:    .cfi_offset lr, 16
1848 ; PC64LE-NEXT:    .cfi_offset f31, -8
1849 ; PC64LE-NEXT:    .cfi_offset v31, -32
1850 ; PC64LE-NEXT:    addis 4, 2, .LCPI34_1@toc@ha
1851 ; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
1852 ; PC64LE-NEXT:    li 3, 64
1853 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1854 ; PC64LE-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
1855 ; PC64LE-NEXT:    lfs 31, .LCPI34_1@toc@l(4)
1856 ; PC64LE-NEXT:    lfd 1, .LCPI34_0@toc@l(3)
1857 ; PC64LE-NEXT:    fmr 2, 31
1858 ; PC64LE-NEXT:    bl pow
1859 ; PC64LE-NEXT:    nop
1860 ; PC64LE-NEXT:    li 3, 48
1861 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1862 ; PC64LE-NEXT:    fmr 2, 31
1863 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1864 ; PC64LE-NEXT:    addis 3, 2, .LCPI34_2@toc@ha
1865 ; PC64LE-NEXT:    lfd 1, .LCPI34_2@toc@l(3)
1866 ; PC64LE-NEXT:    bl pow
1867 ; PC64LE-NEXT:    nop
1868 ; PC64LE-NEXT:    li 3, 48
1869 ; PC64LE-NEXT:    fmr 2, 31
1870 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1871 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1872 ; PC64LE-NEXT:    addis 3, 2, .LCPI34_3@toc@ha
1873 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
1874 ; PC64LE-NEXT:    lfd 1, .LCPI34_3@toc@l(3)
1875 ; PC64LE-NEXT:    bl pow
1876 ; PC64LE-NEXT:    nop
1877 ; PC64LE-NEXT:    li 3, 48
1878 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1879 ; PC64LE-NEXT:    fmr 2, 31
1880 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1881 ; PC64LE-NEXT:    addis 3, 2, .LCPI34_4@toc@ha
1882 ; PC64LE-NEXT:    lfd 1, .LCPI34_4@toc@l(3)
1883 ; PC64LE-NEXT:    bl pow
1884 ; PC64LE-NEXT:    nop
1885 ; PC64LE-NEXT:    li 3, 48
1886 ; PC64LE-NEXT:    vmr 2, 31
1887 ; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
1888 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1889 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1890 ; PC64LE-NEXT:    li 3, 64
1891 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1892 ; PC64LE-NEXT:    xxmrghd 35, 1, 0
1893 ; PC64LE-NEXT:    addi 1, 1, 96
1894 ; PC64LE-NEXT:    ld 0, 16(1)
1895 ; PC64LE-NEXT:    mtlr 0
1896 ; PC64LE-NEXT:    blr
1898 ; PC64LE9-LABEL: constrained_vector_pow_v4f64:
1899 ; PC64LE9:       # %bb.0: # %entry
1900 ; PC64LE9-NEXT:    mflr 0
1901 ; PC64LE9-NEXT:    std 0, 16(1)
1902 ; PC64LE9-NEXT:    stdu 1, -80(1)
1903 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 80
1904 ; PC64LE9-NEXT:    .cfi_offset lr, 16
1905 ; PC64LE9-NEXT:    .cfi_offset f31, -8
1906 ; PC64LE9-NEXT:    .cfi_offset v31, -32
1907 ; PC64LE9-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
1908 ; PC64LE9-NEXT:    lfd 1, .LCPI34_0@toc@l(3)
1909 ; PC64LE9-NEXT:    addis 3, 2, .LCPI34_1@toc@ha
1910 ; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
1911 ; PC64LE9-NEXT:    lfs 31, .LCPI34_1@toc@l(3)
1912 ; PC64LE9-NEXT:    fmr 2, 31
1913 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
1914 ; PC64LE9-NEXT:    bl pow
1915 ; PC64LE9-NEXT:    nop
1916 ; PC64LE9-NEXT:    addis 3, 2, .LCPI34_2@toc@ha
1917 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1918 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1919 ; PC64LE9-NEXT:    lfd 1, .LCPI34_2@toc@l(3)
1920 ; PC64LE9-NEXT:    fmr 2, 31
1921 ; PC64LE9-NEXT:    bl pow
1922 ; PC64LE9-NEXT:    nop
1923 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1924 ; PC64LE9-NEXT:    addis 3, 2, .LCPI34_3@toc@ha
1925 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1926 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
1927 ; PC64LE9-NEXT:    lfd 1, .LCPI34_3@toc@l(3)
1928 ; PC64LE9-NEXT:    fmr 2, 31
1929 ; PC64LE9-NEXT:    bl pow
1930 ; PC64LE9-NEXT:    nop
1931 ; PC64LE9-NEXT:    addis 3, 2, .LCPI34_4@toc@ha
1932 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1933 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1934 ; PC64LE9-NEXT:    lfd 1, .LCPI34_4@toc@l(3)
1935 ; PC64LE9-NEXT:    fmr 2, 31
1936 ; PC64LE9-NEXT:    bl pow
1937 ; PC64LE9-NEXT:    nop
1938 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1939 ; PC64LE9-NEXT:    vmr 2, 31
1940 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
1941 ; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
1942 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1943 ; PC64LE9-NEXT:    xxmrghd 35, 1, 0
1944 ; PC64LE9-NEXT:    addi 1, 1, 80
1945 ; PC64LE9-NEXT:    ld 0, 16(1)
1946 ; PC64LE9-NEXT:    mtlr 0
1947 ; PC64LE9-NEXT:    blr
1948 entry:
1949   %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64(
1950                              <4 x double> <double 42.1, double 42.2,
1951                                            double 42.3, double 42.4>,
1952                              <4 x double> <double 3.0, double 3.0,
1953                                            double 3.0, double 3.0>,
1954                              metadata !"round.dynamic",
1955                              metadata !"fpexcept.strict")
1956   ret <4 x double> %pow
1959 define <1 x float> @constrained_vector_powi_v1f32() {
1960 ; PC64LE-LABEL: constrained_vector_powi_v1f32:
1961 ; PC64LE:       # %bb.0: # %entry
1962 ; PC64LE-NEXT:    mflr 0
1963 ; PC64LE-NEXT:    std 0, 16(1)
1964 ; PC64LE-NEXT:    stdu 1, -32(1)
1965 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
1966 ; PC64LE-NEXT:    .cfi_offset lr, 16
1967 ; PC64LE-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
1968 ; PC64LE-NEXT:    li 4, 3
1969 ; PC64LE-NEXT:    lfs 1, .LCPI35_0@toc@l(3)
1970 ; PC64LE-NEXT:    bl __powisf2
1971 ; PC64LE-NEXT:    nop
1972 ; PC64LE-NEXT:    xscvdpspn 0, 1
1973 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
1974 ; PC64LE-NEXT:    addi 1, 1, 32
1975 ; PC64LE-NEXT:    ld 0, 16(1)
1976 ; PC64LE-NEXT:    mtlr 0
1977 ; PC64LE-NEXT:    blr
1979 ; PC64LE9-LABEL: constrained_vector_powi_v1f32:
1980 ; PC64LE9:       # %bb.0: # %entry
1981 ; PC64LE9-NEXT:    mflr 0
1982 ; PC64LE9-NEXT:    std 0, 16(1)
1983 ; PC64LE9-NEXT:    stdu 1, -32(1)
1984 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
1985 ; PC64LE9-NEXT:    .cfi_offset lr, 16
1986 ; PC64LE9-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
1987 ; PC64LE9-NEXT:    lfs 1, .LCPI35_0@toc@l(3)
1988 ; PC64LE9-NEXT:    li 4, 3
1989 ; PC64LE9-NEXT:    bl __powisf2
1990 ; PC64LE9-NEXT:    nop
1991 ; PC64LE9-NEXT:    xscvdpspn 0, 1
1992 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
1993 ; PC64LE9-NEXT:    addi 1, 1, 32
1994 ; PC64LE9-NEXT:    ld 0, 16(1)
1995 ; PC64LE9-NEXT:    mtlr 0
1996 ; PC64LE9-NEXT:    blr
1997 entry:
1998   %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
1999                               <1 x float> <float 42.0>,
2000                               i32 3,
2001                               metadata !"round.dynamic",
2002                               metadata !"fpexcept.strict")
2003   ret <1 x float> %powi
2006 define <2 x double> @constrained_vector_powi_v2f64() {
2007 ; PC64LE-LABEL: constrained_vector_powi_v2f64:
2008 ; PC64LE:       # %bb.0: # %entry
2009 ; PC64LE-NEXT:    mflr 0
2010 ; PC64LE-NEXT:    std 0, 16(1)
2011 ; PC64LE-NEXT:    stdu 1, -64(1)
2012 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
2013 ; PC64LE-NEXT:    .cfi_offset lr, 16
2014 ; PC64LE-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
2015 ; PC64LE-NEXT:    li 4, 3
2016 ; PC64LE-NEXT:    lfd 1, .LCPI36_0@toc@l(3)
2017 ; PC64LE-NEXT:    bl __powidf2
2018 ; PC64LE-NEXT:    nop
2019 ; PC64LE-NEXT:    li 3, 48
2020 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2021 ; PC64LE-NEXT:    li 4, 3
2022 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2023 ; PC64LE-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
2024 ; PC64LE-NEXT:    lfd 1, .LCPI36_1@toc@l(3)
2025 ; PC64LE-NEXT:    bl __powidf2
2026 ; PC64LE-NEXT:    nop
2027 ; PC64LE-NEXT:    li 3, 48
2028 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2029 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2030 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
2031 ; PC64LE-NEXT:    addi 1, 1, 64
2032 ; PC64LE-NEXT:    ld 0, 16(1)
2033 ; PC64LE-NEXT:    mtlr 0
2034 ; PC64LE-NEXT:    blr
2036 ; PC64LE9-LABEL: constrained_vector_powi_v2f64:
2037 ; PC64LE9:       # %bb.0: # %entry
2038 ; PC64LE9-NEXT:    mflr 0
2039 ; PC64LE9-NEXT:    std 0, 16(1)
2040 ; PC64LE9-NEXT:    stdu 1, -48(1)
2041 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
2042 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2043 ; PC64LE9-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
2044 ; PC64LE9-NEXT:    lfd 1, .LCPI36_0@toc@l(3)
2045 ; PC64LE9-NEXT:    li 4, 3
2046 ; PC64LE9-NEXT:    bl __powidf2
2047 ; PC64LE9-NEXT:    nop
2048 ; PC64LE9-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
2049 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2050 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2051 ; PC64LE9-NEXT:    lfd 1, .LCPI36_1@toc@l(3)
2052 ; PC64LE9-NEXT:    li 4, 3
2053 ; PC64LE9-NEXT:    bl __powidf2
2054 ; PC64LE9-NEXT:    nop
2055 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2056 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2057 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
2058 ; PC64LE9-NEXT:    addi 1, 1, 48
2059 ; PC64LE9-NEXT:    ld 0, 16(1)
2060 ; PC64LE9-NEXT:    mtlr 0
2061 ; PC64LE9-NEXT:    blr
2062 entry:
2063   %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
2064                               <2 x double> <double 42.1, double 42.2>,
2065                               i32 3,
2066                               metadata !"round.dynamic",
2067                               metadata !"fpexcept.strict")
2068   ret <2 x double> %powi
2071 define <3 x float> @constrained_vector_powi_v3f32() {
2074 ; PC64LE-LABEL: constrained_vector_powi_v3f32:
2075 ; PC64LE:       # %bb.0: # %entry
2076 ; PC64LE-NEXT:    mflr 0
2077 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
2078 ; PC64LE-NEXT:    .cfi_offset lr, 16
2079 ; PC64LE-NEXT:    .cfi_offset f30, -16
2080 ; PC64LE-NEXT:    .cfi_offset f31, -8
2081 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2082 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2083 ; PC64LE-NEXT:    std 0, 16(1)
2084 ; PC64LE-NEXT:    stdu 1, -48(1)
2085 ; PC64LE-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
2086 ; PC64LE-NEXT:    li 4, 3
2087 ; PC64LE-NEXT:    lfs 1, .LCPI37_0@toc@l(3)
2088 ; PC64LE-NEXT:    bl __powisf2
2089 ; PC64LE-NEXT:    nop
2090 ; PC64LE-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
2091 ; PC64LE-NEXT:    fmr 31, 1
2092 ; PC64LE-NEXT:    li 4, 3
2093 ; PC64LE-NEXT:    lfs 1, .LCPI37_1@toc@l(3)
2094 ; PC64LE-NEXT:    bl __powisf2
2095 ; PC64LE-NEXT:    nop
2096 ; PC64LE-NEXT:    addis 3, 2, .LCPI37_2@toc@ha
2097 ; PC64LE-NEXT:    fmr 30, 1
2098 ; PC64LE-NEXT:    li 4, 3
2099 ; PC64LE-NEXT:    lfs 1, .LCPI37_2@toc@l(3)
2100 ; PC64LE-NEXT:    bl __powisf2
2101 ; PC64LE-NEXT:    nop
2102 ; PC64LE-NEXT:    xscvdpspn 0, 30
2103 ; PC64LE-NEXT:    addis 3, 2, .LCPI37_3@toc@ha
2104 ; PC64LE-NEXT:    xscvdpspn 1, 1
2105 ; PC64LE-NEXT:    addi 3, 3, .LCPI37_3@toc@l
2106 ; PC64LE-NEXT:    lvx 4, 0, 3
2107 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
2108 ; PC64LE-NEXT:    xscvdpspn 0, 31
2109 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
2110 ; PC64LE-NEXT:    vmrglw 2, 2, 3
2111 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
2112 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
2113 ; PC64LE-NEXT:    addi 1, 1, 48
2114 ; PC64LE-NEXT:    ld 0, 16(1)
2115 ; PC64LE-NEXT:    mtlr 0
2116 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2117 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2118 ; PC64LE-NEXT:    blr
2120 ; PC64LE9-LABEL: constrained_vector_powi_v3f32:
2121 ; PC64LE9:       # %bb.0: # %entry
2122 ; PC64LE9-NEXT:    mflr 0
2123 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
2124 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2125 ; PC64LE9-NEXT:    .cfi_offset f30, -16
2126 ; PC64LE9-NEXT:    .cfi_offset f31, -8
2127 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2128 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2129 ; PC64LE9-NEXT:    std 0, 16(1)
2130 ; PC64LE9-NEXT:    stdu 1, -48(1)
2131 ; PC64LE9-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
2132 ; PC64LE9-NEXT:    lfs 1, .LCPI37_0@toc@l(3)
2133 ; PC64LE9-NEXT:    li 4, 3
2134 ; PC64LE9-NEXT:    bl __powisf2
2135 ; PC64LE9-NEXT:    nop
2136 ; PC64LE9-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
2137 ; PC64LE9-NEXT:    fmr 31, 1
2138 ; PC64LE9-NEXT:    lfs 1, .LCPI37_1@toc@l(3)
2139 ; PC64LE9-NEXT:    li 4, 3
2140 ; PC64LE9-NEXT:    bl __powisf2
2141 ; PC64LE9-NEXT:    nop
2142 ; PC64LE9-NEXT:    addis 3, 2, .LCPI37_2@toc@ha
2143 ; PC64LE9-NEXT:    fmr 30, 1
2144 ; PC64LE9-NEXT:    lfs 1, .LCPI37_2@toc@l(3)
2145 ; PC64LE9-NEXT:    li 4, 3
2146 ; PC64LE9-NEXT:    bl __powisf2
2147 ; PC64LE9-NEXT:    nop
2148 ; PC64LE9-NEXT:    xscvdpspn 0, 1
2149 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
2150 ; PC64LE9-NEXT:    xscvdpspn 0, 30
2151 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
2152 ; PC64LE9-NEXT:    xscvdpspn 0, 31
2153 ; PC64LE9-NEXT:    addis 3, 2, .LCPI37_3@toc@ha
2154 ; PC64LE9-NEXT:    addi 3, 3, .LCPI37_3@toc@l
2155 ; PC64LE9-NEXT:    lxvx 36, 0, 3
2156 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
2157 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
2158 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
2159 ; PC64LE9-NEXT:    addi 1, 1, 48
2160 ; PC64LE9-NEXT:    ld 0, 16(1)
2161 ; PC64LE9-NEXT:    mtlr 0
2162 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2163 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2164 ; PC64LE9-NEXT:    blr
2165 entry:
2166   %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32(
2167                               <3 x float> <float 42.0, float 43.0, float 44.0>,
2168                               i32 3,
2169                               metadata !"round.dynamic",
2170                               metadata !"fpexcept.strict")
2171   ret <3 x float> %powi
2174 define <3 x double> @constrained_vector_powi_v3f64() {
2175 ; PC64LE-LABEL: constrained_vector_powi_v3f64:
2176 ; PC64LE:       # %bb.0: # %entry
2177 ; PC64LE-NEXT:    mflr 0
2178 ; PC64LE-NEXT:    std 0, 16(1)
2179 ; PC64LE-NEXT:    stdu 1, -80(1)
2180 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
2181 ; PC64LE-NEXT:    .cfi_offset lr, 16
2182 ; PC64LE-NEXT:    .cfi_offset v31, -16
2183 ; PC64LE-NEXT:    li 3, 64
2184 ; PC64LE-NEXT:    li 4, 3
2185 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2186 ; PC64LE-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
2187 ; PC64LE-NEXT:    lfd 1, .LCPI38_0@toc@l(3)
2188 ; PC64LE-NEXT:    bl __powidf2
2189 ; PC64LE-NEXT:    nop
2190 ; PC64LE-NEXT:    li 3, 48
2191 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2192 ; PC64LE-NEXT:    li 4, 3
2193 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2194 ; PC64LE-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
2195 ; PC64LE-NEXT:    lfs 1, .LCPI38_1@toc@l(3)
2196 ; PC64LE-NEXT:    bl __powidf2
2197 ; PC64LE-NEXT:    nop
2198 ; PC64LE-NEXT:    li 3, 48
2199 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2200 ; PC64LE-NEXT:    li 4, 3
2201 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2202 ; PC64LE-NEXT:    addis 3, 2, .LCPI38_2@toc@ha
2203 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
2204 ; PC64LE-NEXT:    lfd 1, .LCPI38_2@toc@l(3)
2205 ; PC64LE-NEXT:    bl __powidf2
2206 ; PC64LE-NEXT:    nop
2207 ; PC64LE-NEXT:    li 3, 64
2208 ; PC64LE-NEXT:    fmr 3, 1
2209 ; PC64LE-NEXT:    xxlor 1, 63, 63
2210 ; PC64LE-NEXT:    xxlor 2, 63, 63
2211 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2212 ; PC64LE-NEXT:    addi 1, 1, 80
2213 ; PC64LE-NEXT:    ld 0, 16(1)
2214 ; PC64LE-NEXT:    mtlr 0
2215 ; PC64LE-NEXT:    blr
2217 ; PC64LE9-LABEL: constrained_vector_powi_v3f64:
2218 ; PC64LE9:       # %bb.0: # %entry
2219 ; PC64LE9-NEXT:    mflr 0
2220 ; PC64LE9-NEXT:    std 0, 16(1)
2221 ; PC64LE9-NEXT:    stdu 1, -64(1)
2222 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
2223 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2224 ; PC64LE9-NEXT:    .cfi_offset v31, -16
2225 ; PC64LE9-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
2226 ; PC64LE9-NEXT:    lfd 1, .LCPI38_0@toc@l(3)
2227 ; PC64LE9-NEXT:    li 4, 3
2228 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2229 ; PC64LE9-NEXT:    bl __powidf2
2230 ; PC64LE9-NEXT:    nop
2231 ; PC64LE9-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
2232 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2233 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2234 ; PC64LE9-NEXT:    lfs 1, .LCPI38_1@toc@l(3)
2235 ; PC64LE9-NEXT:    li 4, 3
2236 ; PC64LE9-NEXT:    bl __powidf2
2237 ; PC64LE9-NEXT:    nop
2238 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2239 ; PC64LE9-NEXT:    addis 3, 2, .LCPI38_2@toc@ha
2240 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2241 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
2242 ; PC64LE9-NEXT:    lfd 1, .LCPI38_2@toc@l(3)
2243 ; PC64LE9-NEXT:    li 4, 3
2244 ; PC64LE9-NEXT:    bl __powidf2
2245 ; PC64LE9-NEXT:    nop
2246 ; PC64LE9-NEXT:    fmr 3, 1
2247 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
2248 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2249 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2250 ; PC64LE9-NEXT:    addi 1, 1, 64
2251 ; PC64LE9-NEXT:    ld 0, 16(1)
2252 ; PC64LE9-NEXT:    mtlr 0
2253 ; PC64LE9-NEXT:    blr
2254 entry:
2255   %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
2256                           <3 x double> <double 42.0, double 42.1, double 42.2>,
2257                           i32 3,
2258                           metadata !"round.dynamic",
2259                           metadata !"fpexcept.strict")
2260   ret <3 x double> %powi
2263 define <4 x double> @constrained_vector_powi_v4f64() {
2264 ; PC64LE-LABEL: constrained_vector_powi_v4f64:
2265 ; PC64LE:       # %bb.0: # %entry
2266 ; PC64LE-NEXT:    mflr 0
2267 ; PC64LE-NEXT:    std 0, 16(1)
2268 ; PC64LE-NEXT:    stdu 1, -80(1)
2269 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
2270 ; PC64LE-NEXT:    .cfi_offset lr, 16
2271 ; PC64LE-NEXT:    .cfi_offset v31, -16
2272 ; PC64LE-NEXT:    li 3, 64
2273 ; PC64LE-NEXT:    li 4, 3
2274 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2275 ; PC64LE-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
2276 ; PC64LE-NEXT:    lfd 1, .LCPI39_0@toc@l(3)
2277 ; PC64LE-NEXT:    bl __powidf2
2278 ; PC64LE-NEXT:    nop
2279 ; PC64LE-NEXT:    li 3, 48
2280 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2281 ; PC64LE-NEXT:    li 4, 3
2282 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2283 ; PC64LE-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
2284 ; PC64LE-NEXT:    lfd 1, .LCPI39_1@toc@l(3)
2285 ; PC64LE-NEXT:    bl __powidf2
2286 ; PC64LE-NEXT:    nop
2287 ; PC64LE-NEXT:    li 3, 48
2288 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2289 ; PC64LE-NEXT:    li 4, 3
2290 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2291 ; PC64LE-NEXT:    addis 3, 2, .LCPI39_2@toc@ha
2292 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
2293 ; PC64LE-NEXT:    lfd 1, .LCPI39_2@toc@l(3)
2294 ; PC64LE-NEXT:    bl __powidf2
2295 ; PC64LE-NEXT:    nop
2296 ; PC64LE-NEXT:    li 3, 48
2297 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2298 ; PC64LE-NEXT:    li 4, 3
2299 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2300 ; PC64LE-NEXT:    addis 3, 2, .LCPI39_3@toc@ha
2301 ; PC64LE-NEXT:    lfd 1, .LCPI39_3@toc@l(3)
2302 ; PC64LE-NEXT:    bl __powidf2
2303 ; PC64LE-NEXT:    nop
2304 ; PC64LE-NEXT:    li 3, 48
2305 ; PC64LE-NEXT:    vmr 2, 31
2306 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2307 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2308 ; PC64LE-NEXT:    li 3, 64
2309 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2310 ; PC64LE-NEXT:    xxmrghd 35, 1, 0
2311 ; PC64LE-NEXT:    addi 1, 1, 80
2312 ; PC64LE-NEXT:    ld 0, 16(1)
2313 ; PC64LE-NEXT:    mtlr 0
2314 ; PC64LE-NEXT:    blr
2316 ; PC64LE9-LABEL: constrained_vector_powi_v4f64:
2317 ; PC64LE9:       # %bb.0: # %entry
2318 ; PC64LE9-NEXT:    mflr 0
2319 ; PC64LE9-NEXT:    std 0, 16(1)
2320 ; PC64LE9-NEXT:    stdu 1, -64(1)
2321 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
2322 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2323 ; PC64LE9-NEXT:    .cfi_offset v31, -16
2324 ; PC64LE9-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
2325 ; PC64LE9-NEXT:    lfd 1, .LCPI39_0@toc@l(3)
2326 ; PC64LE9-NEXT:    li 4, 3
2327 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2328 ; PC64LE9-NEXT:    bl __powidf2
2329 ; PC64LE9-NEXT:    nop
2330 ; PC64LE9-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
2331 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2332 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2333 ; PC64LE9-NEXT:    lfd 1, .LCPI39_1@toc@l(3)
2334 ; PC64LE9-NEXT:    li 4, 3
2335 ; PC64LE9-NEXT:    bl __powidf2
2336 ; PC64LE9-NEXT:    nop
2337 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2338 ; PC64LE9-NEXT:    addis 3, 2, .LCPI39_2@toc@ha
2339 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2340 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
2341 ; PC64LE9-NEXT:    lfd 1, .LCPI39_2@toc@l(3)
2342 ; PC64LE9-NEXT:    li 4, 3
2343 ; PC64LE9-NEXT:    bl __powidf2
2344 ; PC64LE9-NEXT:    nop
2345 ; PC64LE9-NEXT:    addis 3, 2, .LCPI39_3@toc@ha
2346 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2347 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2348 ; PC64LE9-NEXT:    lfd 1, .LCPI39_3@toc@l(3)
2349 ; PC64LE9-NEXT:    li 4, 3
2350 ; PC64LE9-NEXT:    bl __powidf2
2351 ; PC64LE9-NEXT:    nop
2352 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2353 ; PC64LE9-NEXT:    vmr 2, 31
2354 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2355 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2356 ; PC64LE9-NEXT:    xxmrghd 35, 1, 0
2357 ; PC64LE9-NEXT:    addi 1, 1, 64
2358 ; PC64LE9-NEXT:    ld 0, 16(1)
2359 ; PC64LE9-NEXT:    mtlr 0
2360 ; PC64LE9-NEXT:    blr
2361 entry:
2362   %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64(
2363                               <4 x double> <double 42.1, double 42.2,
2364                                             double 42.3, double 42.4>,
2365                               i32 3,
2366                               metadata !"round.dynamic",
2367                               metadata !"fpexcept.strict")
2368   ret <4 x double> %powi
2371 define <1 x float> @constrained_vector_sin_v1f32() {
2372 ; PC64LE-LABEL: constrained_vector_sin_v1f32:
2373 ; PC64LE:       # %bb.0: # %entry
2374 ; PC64LE-NEXT:    mflr 0
2375 ; PC64LE-NEXT:    std 0, 16(1)
2376 ; PC64LE-NEXT:    stdu 1, -32(1)
2377 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
2378 ; PC64LE-NEXT:    .cfi_offset lr, 16
2379 ; PC64LE-NEXT:    addis 3, 2, .LCPI40_0@toc@ha
2380 ; PC64LE-NEXT:    lfs 1, .LCPI40_0@toc@l(3)
2381 ; PC64LE-NEXT:    bl sinf
2382 ; PC64LE-NEXT:    nop
2383 ; PC64LE-NEXT:    xscvdpspn 0, 1
2384 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
2385 ; PC64LE-NEXT:    addi 1, 1, 32
2386 ; PC64LE-NEXT:    ld 0, 16(1)
2387 ; PC64LE-NEXT:    mtlr 0
2388 ; PC64LE-NEXT:    blr
2390 ; PC64LE9-LABEL: constrained_vector_sin_v1f32:
2391 ; PC64LE9:       # %bb.0: # %entry
2392 ; PC64LE9-NEXT:    mflr 0
2393 ; PC64LE9-NEXT:    std 0, 16(1)
2394 ; PC64LE9-NEXT:    stdu 1, -32(1)
2395 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
2396 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2397 ; PC64LE9-NEXT:    addis 3, 2, .LCPI40_0@toc@ha
2398 ; PC64LE9-NEXT:    lfs 1, .LCPI40_0@toc@l(3)
2399 ; PC64LE9-NEXT:    bl sinf
2400 ; PC64LE9-NEXT:    nop
2401 ; PC64LE9-NEXT:    xscvdpspn 0, 1
2402 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
2403 ; PC64LE9-NEXT:    addi 1, 1, 32
2404 ; PC64LE9-NEXT:    ld 0, 16(1)
2405 ; PC64LE9-NEXT:    mtlr 0
2406 ; PC64LE9-NEXT:    blr
2407 entry:
2408   %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
2409                              <1 x float> <float 42.0>,
2410                              metadata !"round.dynamic",
2411                              metadata !"fpexcept.strict")
2412   ret <1 x float> %sin
2415 define <2 x double> @constrained_vector_sin_v2f64() {
2416 ; PC64LE-LABEL: constrained_vector_sin_v2f64:
2417 ; PC64LE:       # %bb.0: # %entry
2418 ; PC64LE-NEXT:    mflr 0
2419 ; PC64LE-NEXT:    std 0, 16(1)
2420 ; PC64LE-NEXT:    stdu 1, -64(1)
2421 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
2422 ; PC64LE-NEXT:    .cfi_offset lr, 16
2423 ; PC64LE-NEXT:    addis 3, 2, .LCPI41_0@toc@ha
2424 ; PC64LE-NEXT:    lfd 1, .LCPI41_0@toc@l(3)
2425 ; PC64LE-NEXT:    bl sin
2426 ; PC64LE-NEXT:    nop
2427 ; PC64LE-NEXT:    li 3, 48
2428 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2429 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2430 ; PC64LE-NEXT:    addis 3, 2, .LCPI41_1@toc@ha
2431 ; PC64LE-NEXT:    lfs 1, .LCPI41_1@toc@l(3)
2432 ; PC64LE-NEXT:    bl sin
2433 ; PC64LE-NEXT:    nop
2434 ; PC64LE-NEXT:    li 3, 48
2435 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2436 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2437 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
2438 ; PC64LE-NEXT:    addi 1, 1, 64
2439 ; PC64LE-NEXT:    ld 0, 16(1)
2440 ; PC64LE-NEXT:    mtlr 0
2441 ; PC64LE-NEXT:    blr
2443 ; PC64LE9-LABEL: constrained_vector_sin_v2f64:
2444 ; PC64LE9:       # %bb.0: # %entry
2445 ; PC64LE9-NEXT:    mflr 0
2446 ; PC64LE9-NEXT:    std 0, 16(1)
2447 ; PC64LE9-NEXT:    stdu 1, -48(1)
2448 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
2449 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2450 ; PC64LE9-NEXT:    addis 3, 2, .LCPI41_0@toc@ha
2451 ; PC64LE9-NEXT:    lfd 1, .LCPI41_0@toc@l(3)
2452 ; PC64LE9-NEXT:    bl sin
2453 ; PC64LE9-NEXT:    nop
2454 ; PC64LE9-NEXT:    addis 3, 2, .LCPI41_1@toc@ha
2455 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2456 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2457 ; PC64LE9-NEXT:    lfs 1, .LCPI41_1@toc@l(3)
2458 ; PC64LE9-NEXT:    bl sin
2459 ; PC64LE9-NEXT:    nop
2460 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2461 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2462 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
2463 ; PC64LE9-NEXT:    addi 1, 1, 48
2464 ; PC64LE9-NEXT:    ld 0, 16(1)
2465 ; PC64LE9-NEXT:    mtlr 0
2466 ; PC64LE9-NEXT:    blr
2467 entry:
2468   %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
2469                              <2 x double> <double 42.0, double 42.1>,
2470                              metadata !"round.dynamic",
2471                              metadata !"fpexcept.strict")
2472   ret <2 x double> %sin
2475 define <3 x float> @constrained_vector_sin_v3f32() {
2476 ; PC64LE-LABEL: constrained_vector_sin_v3f32:
2477 ; PC64LE:       # %bb.0: # %entry
2478 ; PC64LE-NEXT:    mflr 0
2479 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
2480 ; PC64LE-NEXT:    .cfi_offset lr, 16
2481 ; PC64LE-NEXT:    .cfi_offset f30, -16
2482 ; PC64LE-NEXT:    .cfi_offset f31, -8
2483 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2484 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2485 ; PC64LE-NEXT:    std 0, 16(1)
2486 ; PC64LE-NEXT:    stdu 1, -48(1)
2487 ; PC64LE-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
2488 ; PC64LE-NEXT:    lfs 1, .LCPI42_0@toc@l(3)
2489 ; PC64LE-NEXT:    bl sinf
2490 ; PC64LE-NEXT:    nop
2491 ; PC64LE-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
2492 ; PC64LE-NEXT:    fmr 31, 1
2493 ; PC64LE-NEXT:    lfs 1, .LCPI42_1@toc@l(3)
2494 ; PC64LE-NEXT:    bl sinf
2495 ; PC64LE-NEXT:    nop
2496 ; PC64LE-NEXT:    addis 3, 2, .LCPI42_2@toc@ha
2497 ; PC64LE-NEXT:    fmr 30, 1
2498 ; PC64LE-NEXT:    lfs 1, .LCPI42_2@toc@l(3)
2499 ; PC64LE-NEXT:    bl sinf
2500 ; PC64LE-NEXT:    nop
2501 ; PC64LE-NEXT:    xscvdpspn 0, 30
2502 ; PC64LE-NEXT:    addis 3, 2, .LCPI42_3@toc@ha
2503 ; PC64LE-NEXT:    xscvdpspn 1, 1
2504 ; PC64LE-NEXT:    addi 3, 3, .LCPI42_3@toc@l
2505 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
2506 ; PC64LE-NEXT:    xscvdpspn 0, 31
2507 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
2508 ; PC64LE-NEXT:    vmrglw 2, 2, 3
2509 ; PC64LE-NEXT:    lvx 3, 0, 3
2510 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
2511 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
2512 ; PC64LE-NEXT:    addi 1, 1, 48
2513 ; PC64LE-NEXT:    ld 0, 16(1)
2514 ; PC64LE-NEXT:    mtlr 0
2515 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2516 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2517 ; PC64LE-NEXT:    blr
2519 ; PC64LE9-LABEL: constrained_vector_sin_v3f32:
2520 ; PC64LE9:       # %bb.0: # %entry
2521 ; PC64LE9-NEXT:    mflr 0
2522 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
2523 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2524 ; PC64LE9-NEXT:    .cfi_offset f30, -16
2525 ; PC64LE9-NEXT:    .cfi_offset f31, -8
2526 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2527 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2528 ; PC64LE9-NEXT:    std 0, 16(1)
2529 ; PC64LE9-NEXT:    stdu 1, -48(1)
2530 ; PC64LE9-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
2531 ; PC64LE9-NEXT:    lfs 1, .LCPI42_0@toc@l(3)
2532 ; PC64LE9-NEXT:    bl sinf
2533 ; PC64LE9-NEXT:    nop
2534 ; PC64LE9-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
2535 ; PC64LE9-NEXT:    fmr 31, 1
2536 ; PC64LE9-NEXT:    lfs 1, .LCPI42_1@toc@l(3)
2537 ; PC64LE9-NEXT:    bl sinf
2538 ; PC64LE9-NEXT:    nop
2539 ; PC64LE9-NEXT:    addis 3, 2, .LCPI42_2@toc@ha
2540 ; PC64LE9-NEXT:    fmr 30, 1
2541 ; PC64LE9-NEXT:    lfs 1, .LCPI42_2@toc@l(3)
2542 ; PC64LE9-NEXT:    bl sinf
2543 ; PC64LE9-NEXT:    nop
2544 ; PC64LE9-NEXT:    xscvdpspn 0, 1
2545 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
2546 ; PC64LE9-NEXT:    xscvdpspn 0, 30
2547 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
2548 ; PC64LE9-NEXT:    xscvdpspn 0, 31
2549 ; PC64LE9-NEXT:    addis 3, 2, .LCPI42_3@toc@ha
2550 ; PC64LE9-NEXT:    addi 3, 3, .LCPI42_3@toc@l
2551 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
2552 ; PC64LE9-NEXT:    lxvx 35, 0, 3
2553 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
2554 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
2555 ; PC64LE9-NEXT:    addi 1, 1, 48
2556 ; PC64LE9-NEXT:    ld 0, 16(1)
2557 ; PC64LE9-NEXT:    mtlr 0
2558 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2559 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2560 ; PC64LE9-NEXT:    blr
2561 entry:
2562   %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
2563                               <3 x float> <float 42.0, float 43.0, float 44.0>,
2564                               metadata !"round.dynamic",
2565                               metadata !"fpexcept.strict")
2566   ret <3 x float> %sin
2569 define <3 x double> @constrained_vector_sin_v3f64() {
2570 ; PC64LE-LABEL: constrained_vector_sin_v3f64:
2571 ; PC64LE:       # %bb.0: # %entry
2572 ; PC64LE-NEXT:    mflr 0
2573 ; PC64LE-NEXT:    std 0, 16(1)
2574 ; PC64LE-NEXT:    stdu 1, -80(1)
2575 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
2576 ; PC64LE-NEXT:    .cfi_offset lr, 16
2577 ; PC64LE-NEXT:    .cfi_offset v31, -16
2578 ; PC64LE-NEXT:    li 3, 64
2579 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2580 ; PC64LE-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
2581 ; PC64LE-NEXT:    lfd 1, .LCPI43_0@toc@l(3)
2582 ; PC64LE-NEXT:    bl sin
2583 ; PC64LE-NEXT:    nop
2584 ; PC64LE-NEXT:    li 3, 48
2585 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2586 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2587 ; PC64LE-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
2588 ; PC64LE-NEXT:    lfs 1, .LCPI43_1@toc@l(3)
2589 ; PC64LE-NEXT:    bl sin
2590 ; PC64LE-NEXT:    nop
2591 ; PC64LE-NEXT:    li 3, 48
2592 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2593 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2594 ; PC64LE-NEXT:    addis 3, 2, .LCPI43_2@toc@ha
2595 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
2596 ; PC64LE-NEXT:    lfd 1, .LCPI43_2@toc@l(3)
2597 ; PC64LE-NEXT:    bl sin
2598 ; PC64LE-NEXT:    nop
2599 ; PC64LE-NEXT:    li 3, 64
2600 ; PC64LE-NEXT:    fmr 3, 1
2601 ; PC64LE-NEXT:    xxlor 1, 63, 63
2602 ; PC64LE-NEXT:    xxlor 2, 63, 63
2603 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2604 ; PC64LE-NEXT:    addi 1, 1, 80
2605 ; PC64LE-NEXT:    ld 0, 16(1)
2606 ; PC64LE-NEXT:    mtlr 0
2607 ; PC64LE-NEXT:    blr
2609 ; PC64LE9-LABEL: constrained_vector_sin_v3f64:
2610 ; PC64LE9:       # %bb.0: # %entry
2611 ; PC64LE9-NEXT:    mflr 0
2612 ; PC64LE9-NEXT:    std 0, 16(1)
2613 ; PC64LE9-NEXT:    stdu 1, -64(1)
2614 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
2615 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2616 ; PC64LE9-NEXT:    .cfi_offset v31, -16
2617 ; PC64LE9-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
2618 ; PC64LE9-NEXT:    lfd 1, .LCPI43_0@toc@l(3)
2619 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2620 ; PC64LE9-NEXT:    bl sin
2621 ; PC64LE9-NEXT:    nop
2622 ; PC64LE9-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
2623 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2624 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2625 ; PC64LE9-NEXT:    lfs 1, .LCPI43_1@toc@l(3)
2626 ; PC64LE9-NEXT:    bl sin
2627 ; PC64LE9-NEXT:    nop
2628 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2629 ; PC64LE9-NEXT:    addis 3, 2, .LCPI43_2@toc@ha
2630 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2631 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
2632 ; PC64LE9-NEXT:    lfd 1, .LCPI43_2@toc@l(3)
2633 ; PC64LE9-NEXT:    bl sin
2634 ; PC64LE9-NEXT:    nop
2635 ; PC64LE9-NEXT:    fmr 3, 1
2636 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
2637 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2638 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2639 ; PC64LE9-NEXT:    addi 1, 1, 64
2640 ; PC64LE9-NEXT:    ld 0, 16(1)
2641 ; PC64LE9-NEXT:    mtlr 0
2642 ; PC64LE9-NEXT:    blr
2643 entry:
2644   %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
2645                           <3 x double> <double 42.0, double 42.1, double 42.2>,
2646                           metadata !"round.dynamic",
2647                           metadata !"fpexcept.strict")
2648   ret <3 x double> %sin
2651 define <4 x double> @constrained_vector_sin_v4f64() {
2652 ; PC64LE-LABEL: constrained_vector_sin_v4f64:
2653 ; PC64LE:       # %bb.0: # %entry
2654 ; PC64LE-NEXT:    mflr 0
2655 ; PC64LE-NEXT:    std 0, 16(1)
2656 ; PC64LE-NEXT:    stdu 1, -80(1)
2657 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
2658 ; PC64LE-NEXT:    .cfi_offset lr, 16
2659 ; PC64LE-NEXT:    .cfi_offset v31, -16
2660 ; PC64LE-NEXT:    li 3, 64
2661 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2662 ; PC64LE-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
2663 ; PC64LE-NEXT:    lfd 1, .LCPI44_0@toc@l(3)
2664 ; PC64LE-NEXT:    bl sin
2665 ; PC64LE-NEXT:    nop
2666 ; PC64LE-NEXT:    li 3, 48
2667 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2668 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2669 ; PC64LE-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
2670 ; PC64LE-NEXT:    lfd 1, .LCPI44_1@toc@l(3)
2671 ; PC64LE-NEXT:    bl sin
2672 ; PC64LE-NEXT:    nop
2673 ; PC64LE-NEXT:    li 3, 48
2674 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2675 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2676 ; PC64LE-NEXT:    addis 3, 2, .LCPI44_2@toc@ha
2677 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
2678 ; PC64LE-NEXT:    lfd 1, .LCPI44_2@toc@l(3)
2679 ; PC64LE-NEXT:    bl sin
2680 ; PC64LE-NEXT:    nop
2681 ; PC64LE-NEXT:    li 3, 48
2682 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2683 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2684 ; PC64LE-NEXT:    addis 3, 2, .LCPI44_3@toc@ha
2685 ; PC64LE-NEXT:    lfs 1, .LCPI44_3@toc@l(3)
2686 ; PC64LE-NEXT:    bl sin
2687 ; PC64LE-NEXT:    nop
2688 ; PC64LE-NEXT:    li 3, 48
2689 ; PC64LE-NEXT:    vmr 3, 31
2690 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2691 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2692 ; PC64LE-NEXT:    li 3, 64
2693 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2694 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
2695 ; PC64LE-NEXT:    addi 1, 1, 80
2696 ; PC64LE-NEXT:    ld 0, 16(1)
2697 ; PC64LE-NEXT:    mtlr 0
2698 ; PC64LE-NEXT:    blr
2700 ; PC64LE9-LABEL: constrained_vector_sin_v4f64:
2701 ; PC64LE9:       # %bb.0: # %entry
2702 ; PC64LE9-NEXT:    mflr 0
2703 ; PC64LE9-NEXT:    std 0, 16(1)
2704 ; PC64LE9-NEXT:    stdu 1, -64(1)
2705 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
2706 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2707 ; PC64LE9-NEXT:    .cfi_offset v31, -16
2708 ; PC64LE9-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
2709 ; PC64LE9-NEXT:    lfd 1, .LCPI44_0@toc@l(3)
2710 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2711 ; PC64LE9-NEXT:    bl sin
2712 ; PC64LE9-NEXT:    nop
2713 ; PC64LE9-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
2714 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2715 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2716 ; PC64LE9-NEXT:    lfd 1, .LCPI44_1@toc@l(3)
2717 ; PC64LE9-NEXT:    bl sin
2718 ; PC64LE9-NEXT:    nop
2719 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2720 ; PC64LE9-NEXT:    addis 3, 2, .LCPI44_2@toc@ha
2721 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2722 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
2723 ; PC64LE9-NEXT:    lfd 1, .LCPI44_2@toc@l(3)
2724 ; PC64LE9-NEXT:    bl sin
2725 ; PC64LE9-NEXT:    nop
2726 ; PC64LE9-NEXT:    addis 3, 2, .LCPI44_3@toc@ha
2727 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2728 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2729 ; PC64LE9-NEXT:    lfs 1, .LCPI44_3@toc@l(3)
2730 ; PC64LE9-NEXT:    bl sin
2731 ; PC64LE9-NEXT:    nop
2732 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2733 ; PC64LE9-NEXT:    vmr 3, 31
2734 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2735 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2736 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
2737 ; PC64LE9-NEXT:    addi 1, 1, 64
2738 ; PC64LE9-NEXT:    ld 0, 16(1)
2739 ; PC64LE9-NEXT:    mtlr 0
2740 ; PC64LE9-NEXT:    blr
2741 entry:
2742   %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64(
2743                              <4 x double> <double 42.0, double 42.1,
2744                                            double 42.2, double 42.3>,
2745                              metadata !"round.dynamic",
2746                              metadata !"fpexcept.strict")
2747   ret <4 x double> %sin
2750 define <1 x float> @constrained_vector_cos_v1f32() {
2751 ; PC64LE-LABEL: constrained_vector_cos_v1f32:
2752 ; PC64LE:       # %bb.0: # %entry
2753 ; PC64LE-NEXT:    mflr 0
2754 ; PC64LE-NEXT:    std 0, 16(1)
2755 ; PC64LE-NEXT:    stdu 1, -32(1)
2756 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
2757 ; PC64LE-NEXT:    .cfi_offset lr, 16
2758 ; PC64LE-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
2759 ; PC64LE-NEXT:    lfs 1, .LCPI45_0@toc@l(3)
2760 ; PC64LE-NEXT:    bl cosf
2761 ; PC64LE-NEXT:    nop
2762 ; PC64LE-NEXT:    xscvdpspn 0, 1
2763 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
2764 ; PC64LE-NEXT:    addi 1, 1, 32
2765 ; PC64LE-NEXT:    ld 0, 16(1)
2766 ; PC64LE-NEXT:    mtlr 0
2767 ; PC64LE-NEXT:    blr
2769 ; PC64LE9-LABEL: constrained_vector_cos_v1f32:
2770 ; PC64LE9:       # %bb.0: # %entry
2771 ; PC64LE9-NEXT:    mflr 0
2772 ; PC64LE9-NEXT:    std 0, 16(1)
2773 ; PC64LE9-NEXT:    stdu 1, -32(1)
2774 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
2775 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2776 ; PC64LE9-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
2777 ; PC64LE9-NEXT:    lfs 1, .LCPI45_0@toc@l(3)
2778 ; PC64LE9-NEXT:    bl cosf
2779 ; PC64LE9-NEXT:    nop
2780 ; PC64LE9-NEXT:    xscvdpspn 0, 1
2781 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
2782 ; PC64LE9-NEXT:    addi 1, 1, 32
2783 ; PC64LE9-NEXT:    ld 0, 16(1)
2784 ; PC64LE9-NEXT:    mtlr 0
2785 ; PC64LE9-NEXT:    blr
2786 entry:
2787   %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
2788                              <1 x float> <float 42.0>,
2789                              metadata !"round.dynamic",
2790                              metadata !"fpexcept.strict")
2791   ret <1 x float> %cos
2794 define <2 x double> @constrained_vector_cos_v2f64() {
2795 ; PC64LE-LABEL: constrained_vector_cos_v2f64:
2796 ; PC64LE:       # %bb.0: # %entry
2797 ; PC64LE-NEXT:    mflr 0
2798 ; PC64LE-NEXT:    std 0, 16(1)
2799 ; PC64LE-NEXT:    stdu 1, -64(1)
2800 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
2801 ; PC64LE-NEXT:    .cfi_offset lr, 16
2802 ; PC64LE-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
2803 ; PC64LE-NEXT:    lfd 1, .LCPI46_0@toc@l(3)
2804 ; PC64LE-NEXT:    bl cos
2805 ; PC64LE-NEXT:    nop
2806 ; PC64LE-NEXT:    li 3, 48
2807 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2808 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2809 ; PC64LE-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
2810 ; PC64LE-NEXT:    lfs 1, .LCPI46_1@toc@l(3)
2811 ; PC64LE-NEXT:    bl cos
2812 ; PC64LE-NEXT:    nop
2813 ; PC64LE-NEXT:    li 3, 48
2814 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2815 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2816 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
2817 ; PC64LE-NEXT:    addi 1, 1, 64
2818 ; PC64LE-NEXT:    ld 0, 16(1)
2819 ; PC64LE-NEXT:    mtlr 0
2820 ; PC64LE-NEXT:    blr
2822 ; PC64LE9-LABEL: constrained_vector_cos_v2f64:
2823 ; PC64LE9:       # %bb.0: # %entry
2824 ; PC64LE9-NEXT:    mflr 0
2825 ; PC64LE9-NEXT:    std 0, 16(1)
2826 ; PC64LE9-NEXT:    stdu 1, -48(1)
2827 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
2828 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2829 ; PC64LE9-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
2830 ; PC64LE9-NEXT:    lfd 1, .LCPI46_0@toc@l(3)
2831 ; PC64LE9-NEXT:    bl cos
2832 ; PC64LE9-NEXT:    nop
2833 ; PC64LE9-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
2834 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2835 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2836 ; PC64LE9-NEXT:    lfs 1, .LCPI46_1@toc@l(3)
2837 ; PC64LE9-NEXT:    bl cos
2838 ; PC64LE9-NEXT:    nop
2839 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2840 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2841 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
2842 ; PC64LE9-NEXT:    addi 1, 1, 48
2843 ; PC64LE9-NEXT:    ld 0, 16(1)
2844 ; PC64LE9-NEXT:    mtlr 0
2845 ; PC64LE9-NEXT:    blr
2846 entry:
2847   %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
2848                              <2 x double> <double 42.0, double 42.1>,
2849                              metadata !"round.dynamic",
2850                              metadata !"fpexcept.strict")
2851   ret <2 x double> %cos
2854 define <3 x float> @constrained_vector_cos_v3f32() {
2855 ; PC64LE-LABEL: constrained_vector_cos_v3f32:
2856 ; PC64LE:       # %bb.0: # %entry
2857 ; PC64LE-NEXT:    mflr 0
2858 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
2859 ; PC64LE-NEXT:    .cfi_offset lr, 16
2860 ; PC64LE-NEXT:    .cfi_offset f30, -16
2861 ; PC64LE-NEXT:    .cfi_offset f31, -8
2862 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2863 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2864 ; PC64LE-NEXT:    std 0, 16(1)
2865 ; PC64LE-NEXT:    stdu 1, -48(1)
2866 ; PC64LE-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
2867 ; PC64LE-NEXT:    lfs 1, .LCPI47_0@toc@l(3)
2868 ; PC64LE-NEXT:    bl cosf
2869 ; PC64LE-NEXT:    nop
2870 ; PC64LE-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
2871 ; PC64LE-NEXT:    fmr 31, 1
2872 ; PC64LE-NEXT:    lfs 1, .LCPI47_1@toc@l(3)
2873 ; PC64LE-NEXT:    bl cosf
2874 ; PC64LE-NEXT:    nop
2875 ; PC64LE-NEXT:    addis 3, 2, .LCPI47_2@toc@ha
2876 ; PC64LE-NEXT:    fmr 30, 1
2877 ; PC64LE-NEXT:    lfs 1, .LCPI47_2@toc@l(3)
2878 ; PC64LE-NEXT:    bl cosf
2879 ; PC64LE-NEXT:    nop
2880 ; PC64LE-NEXT:    xscvdpspn 0, 30
2881 ; PC64LE-NEXT:    addis 3, 2, .LCPI47_3@toc@ha
2882 ; PC64LE-NEXT:    xscvdpspn 1, 1
2883 ; PC64LE-NEXT:    addi 3, 3, .LCPI47_3@toc@l
2884 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
2885 ; PC64LE-NEXT:    xscvdpspn 0, 31
2886 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
2887 ; PC64LE-NEXT:    vmrglw 2, 2, 3
2888 ; PC64LE-NEXT:    lvx 3, 0, 3
2889 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
2890 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
2891 ; PC64LE-NEXT:    addi 1, 1, 48
2892 ; PC64LE-NEXT:    ld 0, 16(1)
2893 ; PC64LE-NEXT:    mtlr 0
2894 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2895 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2896 ; PC64LE-NEXT:    blr
2898 ; PC64LE9-LABEL: constrained_vector_cos_v3f32:
2899 ; PC64LE9:       # %bb.0: # %entry
2900 ; PC64LE9-NEXT:    mflr 0
2901 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
2902 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2903 ; PC64LE9-NEXT:    .cfi_offset f30, -16
2904 ; PC64LE9-NEXT:    .cfi_offset f31, -8
2905 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2906 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2907 ; PC64LE9-NEXT:    std 0, 16(1)
2908 ; PC64LE9-NEXT:    stdu 1, -48(1)
2909 ; PC64LE9-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
2910 ; PC64LE9-NEXT:    lfs 1, .LCPI47_0@toc@l(3)
2911 ; PC64LE9-NEXT:    bl cosf
2912 ; PC64LE9-NEXT:    nop
2913 ; PC64LE9-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
2914 ; PC64LE9-NEXT:    fmr 31, 1
2915 ; PC64LE9-NEXT:    lfs 1, .LCPI47_1@toc@l(3)
2916 ; PC64LE9-NEXT:    bl cosf
2917 ; PC64LE9-NEXT:    nop
2918 ; PC64LE9-NEXT:    addis 3, 2, .LCPI47_2@toc@ha
2919 ; PC64LE9-NEXT:    fmr 30, 1
2920 ; PC64LE9-NEXT:    lfs 1, .LCPI47_2@toc@l(3)
2921 ; PC64LE9-NEXT:    bl cosf
2922 ; PC64LE9-NEXT:    nop
2923 ; PC64LE9-NEXT:    xscvdpspn 0, 1
2924 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
2925 ; PC64LE9-NEXT:    xscvdpspn 0, 30
2926 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
2927 ; PC64LE9-NEXT:    xscvdpspn 0, 31
2928 ; PC64LE9-NEXT:    addis 3, 2, .LCPI47_3@toc@ha
2929 ; PC64LE9-NEXT:    addi 3, 3, .LCPI47_3@toc@l
2930 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
2931 ; PC64LE9-NEXT:    lxvx 35, 0, 3
2932 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
2933 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
2934 ; PC64LE9-NEXT:    addi 1, 1, 48
2935 ; PC64LE9-NEXT:    ld 0, 16(1)
2936 ; PC64LE9-NEXT:    mtlr 0
2937 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2938 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2939 ; PC64LE9-NEXT:    blr
2940 entry:
2941   %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
2942                               <3 x float> <float 42.0, float 43.0, float 44.0>,
2943                               metadata !"round.dynamic",
2944                               metadata !"fpexcept.strict")
2945   ret <3 x float> %cos
2948 define <3 x double> @constrained_vector_cos_v3f64() {
2949 ; PC64LE-LABEL: constrained_vector_cos_v3f64:
2950 ; PC64LE:       # %bb.0: # %entry
2951 ; PC64LE-NEXT:    mflr 0
2952 ; PC64LE-NEXT:    std 0, 16(1)
2953 ; PC64LE-NEXT:    stdu 1, -80(1)
2954 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
2955 ; PC64LE-NEXT:    .cfi_offset lr, 16
2956 ; PC64LE-NEXT:    .cfi_offset v31, -16
2957 ; PC64LE-NEXT:    li 3, 64
2958 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2959 ; PC64LE-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
2960 ; PC64LE-NEXT:    lfd 1, .LCPI48_0@toc@l(3)
2961 ; PC64LE-NEXT:    bl cos
2962 ; PC64LE-NEXT:    nop
2963 ; PC64LE-NEXT:    li 3, 48
2964 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2965 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2966 ; PC64LE-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
2967 ; PC64LE-NEXT:    lfs 1, .LCPI48_1@toc@l(3)
2968 ; PC64LE-NEXT:    bl cos
2969 ; PC64LE-NEXT:    nop
2970 ; PC64LE-NEXT:    li 3, 48
2971 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2972 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2973 ; PC64LE-NEXT:    addis 3, 2, .LCPI48_2@toc@ha
2974 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
2975 ; PC64LE-NEXT:    lfd 1, .LCPI48_2@toc@l(3)
2976 ; PC64LE-NEXT:    bl cos
2977 ; PC64LE-NEXT:    nop
2978 ; PC64LE-NEXT:    li 3, 64
2979 ; PC64LE-NEXT:    fmr 3, 1
2980 ; PC64LE-NEXT:    xxlor 1, 63, 63
2981 ; PC64LE-NEXT:    xxlor 2, 63, 63
2982 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2983 ; PC64LE-NEXT:    addi 1, 1, 80
2984 ; PC64LE-NEXT:    ld 0, 16(1)
2985 ; PC64LE-NEXT:    mtlr 0
2986 ; PC64LE-NEXT:    blr
2988 ; PC64LE9-LABEL: constrained_vector_cos_v3f64:
2989 ; PC64LE9:       # %bb.0: # %entry
2990 ; PC64LE9-NEXT:    mflr 0
2991 ; PC64LE9-NEXT:    std 0, 16(1)
2992 ; PC64LE9-NEXT:    stdu 1, -64(1)
2993 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
2994 ; PC64LE9-NEXT:    .cfi_offset lr, 16
2995 ; PC64LE9-NEXT:    .cfi_offset v31, -16
2996 ; PC64LE9-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
2997 ; PC64LE9-NEXT:    lfd 1, .LCPI48_0@toc@l(3)
2998 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2999 ; PC64LE9-NEXT:    bl cos
3000 ; PC64LE9-NEXT:    nop
3001 ; PC64LE9-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
3002 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3003 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3004 ; PC64LE9-NEXT:    lfs 1, .LCPI48_1@toc@l(3)
3005 ; PC64LE9-NEXT:    bl cos
3006 ; PC64LE9-NEXT:    nop
3007 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3008 ; PC64LE9-NEXT:    addis 3, 2, .LCPI48_2@toc@ha
3009 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3010 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
3011 ; PC64LE9-NEXT:    lfd 1, .LCPI48_2@toc@l(3)
3012 ; PC64LE9-NEXT:    bl cos
3013 ; PC64LE9-NEXT:    nop
3014 ; PC64LE9-NEXT:    fmr 3, 1
3015 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
3016 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3017 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3018 ; PC64LE9-NEXT:    addi 1, 1, 64
3019 ; PC64LE9-NEXT:    ld 0, 16(1)
3020 ; PC64LE9-NEXT:    mtlr 0
3021 ; PC64LE9-NEXT:    blr
3022 entry:
3023   %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
3024                           <3 x double> <double 42.0, double 42.1, double 42.2>,
3025                           metadata !"round.dynamic",
3026                           metadata !"fpexcept.strict")
3027   ret <3 x double> %cos
3030 define <4 x double> @constrained_vector_cos_v4f64() {
3031 ; PC64LE-LABEL: constrained_vector_cos_v4f64:
3032 ; PC64LE:       # %bb.0: # %entry
3033 ; PC64LE-NEXT:    mflr 0
3034 ; PC64LE-NEXT:    std 0, 16(1)
3035 ; PC64LE-NEXT:    stdu 1, -80(1)
3036 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
3037 ; PC64LE-NEXT:    .cfi_offset lr, 16
3038 ; PC64LE-NEXT:    .cfi_offset v31, -16
3039 ; PC64LE-NEXT:    li 3, 64
3040 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3041 ; PC64LE-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
3042 ; PC64LE-NEXT:    lfd 1, .LCPI49_0@toc@l(3)
3043 ; PC64LE-NEXT:    bl cos
3044 ; PC64LE-NEXT:    nop
3045 ; PC64LE-NEXT:    li 3, 48
3046 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3047 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3048 ; PC64LE-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
3049 ; PC64LE-NEXT:    lfd 1, .LCPI49_1@toc@l(3)
3050 ; PC64LE-NEXT:    bl cos
3051 ; PC64LE-NEXT:    nop
3052 ; PC64LE-NEXT:    li 3, 48
3053 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3054 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3055 ; PC64LE-NEXT:    addis 3, 2, .LCPI49_2@toc@ha
3056 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
3057 ; PC64LE-NEXT:    lfd 1, .LCPI49_2@toc@l(3)
3058 ; PC64LE-NEXT:    bl cos
3059 ; PC64LE-NEXT:    nop
3060 ; PC64LE-NEXT:    li 3, 48
3061 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3062 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3063 ; PC64LE-NEXT:    addis 3, 2, .LCPI49_3@toc@ha
3064 ; PC64LE-NEXT:    lfs 1, .LCPI49_3@toc@l(3)
3065 ; PC64LE-NEXT:    bl cos
3066 ; PC64LE-NEXT:    nop
3067 ; PC64LE-NEXT:    li 3, 48
3068 ; PC64LE-NEXT:    vmr 3, 31
3069 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3070 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3071 ; PC64LE-NEXT:    li 3, 64
3072 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3073 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
3074 ; PC64LE-NEXT:    addi 1, 1, 80
3075 ; PC64LE-NEXT:    ld 0, 16(1)
3076 ; PC64LE-NEXT:    mtlr 0
3077 ; PC64LE-NEXT:    blr
3079 ; PC64LE9-LABEL: constrained_vector_cos_v4f64:
3080 ; PC64LE9:       # %bb.0: # %entry
3081 ; PC64LE9-NEXT:    mflr 0
3082 ; PC64LE9-NEXT:    std 0, 16(1)
3083 ; PC64LE9-NEXT:    stdu 1, -64(1)
3084 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
3085 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3086 ; PC64LE9-NEXT:    .cfi_offset v31, -16
3087 ; PC64LE9-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
3088 ; PC64LE9-NEXT:    lfd 1, .LCPI49_0@toc@l(3)
3089 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3090 ; PC64LE9-NEXT:    bl cos
3091 ; PC64LE9-NEXT:    nop
3092 ; PC64LE9-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
3093 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3094 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3095 ; PC64LE9-NEXT:    lfd 1, .LCPI49_1@toc@l(3)
3096 ; PC64LE9-NEXT:    bl cos
3097 ; PC64LE9-NEXT:    nop
3098 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3099 ; PC64LE9-NEXT:    addis 3, 2, .LCPI49_2@toc@ha
3100 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3101 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
3102 ; PC64LE9-NEXT:    lfd 1, .LCPI49_2@toc@l(3)
3103 ; PC64LE9-NEXT:    bl cos
3104 ; PC64LE9-NEXT:    nop
3105 ; PC64LE9-NEXT:    addis 3, 2, .LCPI49_3@toc@ha
3106 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3107 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3108 ; PC64LE9-NEXT:    lfs 1, .LCPI49_3@toc@l(3)
3109 ; PC64LE9-NEXT:    bl cos
3110 ; PC64LE9-NEXT:    nop
3111 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3112 ; PC64LE9-NEXT:    vmr 3, 31
3113 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3114 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3115 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3116 ; PC64LE9-NEXT:    addi 1, 1, 64
3117 ; PC64LE9-NEXT:    ld 0, 16(1)
3118 ; PC64LE9-NEXT:    mtlr 0
3119 ; PC64LE9-NEXT:    blr
3120 entry:
3121   %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64(
3122                              <4 x double> <double 42.0, double 42.1,
3123                                            double 42.2, double 42.3>,
3124                              metadata !"round.dynamic",
3125                              metadata !"fpexcept.strict")
3126   ret <4 x double> %cos
3129 define <1 x float> @constrained_vector_exp_v1f32() {
3130 ; PC64LE-LABEL: constrained_vector_exp_v1f32:
3131 ; PC64LE:       # %bb.0: # %entry
3132 ; PC64LE-NEXT:    mflr 0
3133 ; PC64LE-NEXT:    std 0, 16(1)
3134 ; PC64LE-NEXT:    stdu 1, -32(1)
3135 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
3136 ; PC64LE-NEXT:    .cfi_offset lr, 16
3137 ; PC64LE-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
3138 ; PC64LE-NEXT:    lfs 1, .LCPI50_0@toc@l(3)
3139 ; PC64LE-NEXT:    bl expf
3140 ; PC64LE-NEXT:    nop
3141 ; PC64LE-NEXT:    xscvdpspn 0, 1
3142 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
3143 ; PC64LE-NEXT:    addi 1, 1, 32
3144 ; PC64LE-NEXT:    ld 0, 16(1)
3145 ; PC64LE-NEXT:    mtlr 0
3146 ; PC64LE-NEXT:    blr
3148 ; PC64LE9-LABEL: constrained_vector_exp_v1f32:
3149 ; PC64LE9:       # %bb.0: # %entry
3150 ; PC64LE9-NEXT:    mflr 0
3151 ; PC64LE9-NEXT:    std 0, 16(1)
3152 ; PC64LE9-NEXT:    stdu 1, -32(1)
3153 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
3154 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3155 ; PC64LE9-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
3156 ; PC64LE9-NEXT:    lfs 1, .LCPI50_0@toc@l(3)
3157 ; PC64LE9-NEXT:    bl expf
3158 ; PC64LE9-NEXT:    nop
3159 ; PC64LE9-NEXT:    xscvdpspn 0, 1
3160 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
3161 ; PC64LE9-NEXT:    addi 1, 1, 32
3162 ; PC64LE9-NEXT:    ld 0, 16(1)
3163 ; PC64LE9-NEXT:    mtlr 0
3164 ; PC64LE9-NEXT:    blr
3165 entry:
3166   %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
3167                              <1 x float> <float 42.0>,
3168                              metadata !"round.dynamic",
3169                              metadata !"fpexcept.strict")
3170   ret <1 x float> %exp
3173 define <2 x double> @constrained_vector_exp_v2f64() {
3174 ; PC64LE-LABEL: constrained_vector_exp_v2f64:
3175 ; PC64LE:       # %bb.0: # %entry
3176 ; PC64LE-NEXT:    mflr 0
3177 ; PC64LE-NEXT:    std 0, 16(1)
3178 ; PC64LE-NEXT:    stdu 1, -64(1)
3179 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
3180 ; PC64LE-NEXT:    .cfi_offset lr, 16
3181 ; PC64LE-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
3182 ; PC64LE-NEXT:    lfd 1, .LCPI51_0@toc@l(3)
3183 ; PC64LE-NEXT:    bl exp
3184 ; PC64LE-NEXT:    nop
3185 ; PC64LE-NEXT:    li 3, 48
3186 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3187 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3188 ; PC64LE-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
3189 ; PC64LE-NEXT:    lfs 1, .LCPI51_1@toc@l(3)
3190 ; PC64LE-NEXT:    bl exp
3191 ; PC64LE-NEXT:    nop
3192 ; PC64LE-NEXT:    li 3, 48
3193 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3194 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3195 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
3196 ; PC64LE-NEXT:    addi 1, 1, 64
3197 ; PC64LE-NEXT:    ld 0, 16(1)
3198 ; PC64LE-NEXT:    mtlr 0
3199 ; PC64LE-NEXT:    blr
3201 ; PC64LE9-LABEL: constrained_vector_exp_v2f64:
3202 ; PC64LE9:       # %bb.0: # %entry
3203 ; PC64LE9-NEXT:    mflr 0
3204 ; PC64LE9-NEXT:    std 0, 16(1)
3205 ; PC64LE9-NEXT:    stdu 1, -48(1)
3206 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
3207 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3208 ; PC64LE9-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
3209 ; PC64LE9-NEXT:    lfd 1, .LCPI51_0@toc@l(3)
3210 ; PC64LE9-NEXT:    bl exp
3211 ; PC64LE9-NEXT:    nop
3212 ; PC64LE9-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
3213 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3214 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3215 ; PC64LE9-NEXT:    lfs 1, .LCPI51_1@toc@l(3)
3216 ; PC64LE9-NEXT:    bl exp
3217 ; PC64LE9-NEXT:    nop
3218 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3219 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3220 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3221 ; PC64LE9-NEXT:    addi 1, 1, 48
3222 ; PC64LE9-NEXT:    ld 0, 16(1)
3223 ; PC64LE9-NEXT:    mtlr 0
3224 ; PC64LE9-NEXT:    blr
3225 entry:
3226   %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
3227                              <2 x double> <double 42.0, double 42.1>,
3228                              metadata !"round.dynamic",
3229                              metadata !"fpexcept.strict")
3230   ret <2 x double> %exp
3233 define <3 x float> @constrained_vector_exp_v3f32() {
3234 ; PC64LE-LABEL: constrained_vector_exp_v3f32:
3235 ; PC64LE:       # %bb.0: # %entry
3236 ; PC64LE-NEXT:    mflr 0
3237 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
3238 ; PC64LE-NEXT:    .cfi_offset lr, 16
3239 ; PC64LE-NEXT:    .cfi_offset f30, -16
3240 ; PC64LE-NEXT:    .cfi_offset f31, -8
3241 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3242 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3243 ; PC64LE-NEXT:    std 0, 16(1)
3244 ; PC64LE-NEXT:    stdu 1, -48(1)
3245 ; PC64LE-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
3246 ; PC64LE-NEXT:    lfs 1, .LCPI52_0@toc@l(3)
3247 ; PC64LE-NEXT:    bl expf
3248 ; PC64LE-NEXT:    nop
3249 ; PC64LE-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
3250 ; PC64LE-NEXT:    fmr 31, 1
3251 ; PC64LE-NEXT:    lfs 1, .LCPI52_1@toc@l(3)
3252 ; PC64LE-NEXT:    bl expf
3253 ; PC64LE-NEXT:    nop
3254 ; PC64LE-NEXT:    addis 3, 2, .LCPI52_2@toc@ha
3255 ; PC64LE-NEXT:    fmr 30, 1
3256 ; PC64LE-NEXT:    lfs 1, .LCPI52_2@toc@l(3)
3257 ; PC64LE-NEXT:    bl expf
3258 ; PC64LE-NEXT:    nop
3259 ; PC64LE-NEXT:    xscvdpspn 0, 30
3260 ; PC64LE-NEXT:    addis 3, 2, .LCPI52_3@toc@ha
3261 ; PC64LE-NEXT:    xscvdpspn 1, 1
3262 ; PC64LE-NEXT:    addi 3, 3, .LCPI52_3@toc@l
3263 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
3264 ; PC64LE-NEXT:    xscvdpspn 0, 31
3265 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
3266 ; PC64LE-NEXT:    vmrglw 2, 2, 3
3267 ; PC64LE-NEXT:    lvx 3, 0, 3
3268 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
3269 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
3270 ; PC64LE-NEXT:    addi 1, 1, 48
3271 ; PC64LE-NEXT:    ld 0, 16(1)
3272 ; PC64LE-NEXT:    mtlr 0
3273 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3274 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3275 ; PC64LE-NEXT:    blr
3277 ; PC64LE9-LABEL: constrained_vector_exp_v3f32:
3278 ; PC64LE9:       # %bb.0: # %entry
3279 ; PC64LE9-NEXT:    mflr 0
3280 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
3281 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3282 ; PC64LE9-NEXT:    .cfi_offset f30, -16
3283 ; PC64LE9-NEXT:    .cfi_offset f31, -8
3284 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3285 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3286 ; PC64LE9-NEXT:    std 0, 16(1)
3287 ; PC64LE9-NEXT:    stdu 1, -48(1)
3288 ; PC64LE9-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
3289 ; PC64LE9-NEXT:    lfs 1, .LCPI52_0@toc@l(3)
3290 ; PC64LE9-NEXT:    bl expf
3291 ; PC64LE9-NEXT:    nop
3292 ; PC64LE9-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
3293 ; PC64LE9-NEXT:    fmr 31, 1
3294 ; PC64LE9-NEXT:    lfs 1, .LCPI52_1@toc@l(3)
3295 ; PC64LE9-NEXT:    bl expf
3296 ; PC64LE9-NEXT:    nop
3297 ; PC64LE9-NEXT:    addis 3, 2, .LCPI52_2@toc@ha
3298 ; PC64LE9-NEXT:    fmr 30, 1
3299 ; PC64LE9-NEXT:    lfs 1, .LCPI52_2@toc@l(3)
3300 ; PC64LE9-NEXT:    bl expf
3301 ; PC64LE9-NEXT:    nop
3302 ; PC64LE9-NEXT:    xscvdpspn 0, 1
3303 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
3304 ; PC64LE9-NEXT:    xscvdpspn 0, 30
3305 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
3306 ; PC64LE9-NEXT:    xscvdpspn 0, 31
3307 ; PC64LE9-NEXT:    addis 3, 2, .LCPI52_3@toc@ha
3308 ; PC64LE9-NEXT:    addi 3, 3, .LCPI52_3@toc@l
3309 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
3310 ; PC64LE9-NEXT:    lxvx 35, 0, 3
3311 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
3312 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3313 ; PC64LE9-NEXT:    addi 1, 1, 48
3314 ; PC64LE9-NEXT:    ld 0, 16(1)
3315 ; PC64LE9-NEXT:    mtlr 0
3316 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3317 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3318 ; PC64LE9-NEXT:    blr
3319 entry:
3320   %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
3321                               <3 x float> <float 42.0, float 43.0, float 44.0>,
3322                               metadata !"round.dynamic",
3323                               metadata !"fpexcept.strict")
3324   ret <3 x float> %exp
3327 define <3 x double> @constrained_vector_exp_v3f64() {
3328 ; PC64LE-LABEL: constrained_vector_exp_v3f64:
3329 ; PC64LE:       # %bb.0: # %entry
3330 ; PC64LE-NEXT:    mflr 0
3331 ; PC64LE-NEXT:    std 0, 16(1)
3332 ; PC64LE-NEXT:    stdu 1, -80(1)
3333 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
3334 ; PC64LE-NEXT:    .cfi_offset lr, 16
3335 ; PC64LE-NEXT:    .cfi_offset v31, -16
3336 ; PC64LE-NEXT:    li 3, 64
3337 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3338 ; PC64LE-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
3339 ; PC64LE-NEXT:    lfd 1, .LCPI53_0@toc@l(3)
3340 ; PC64LE-NEXT:    bl exp
3341 ; PC64LE-NEXT:    nop
3342 ; PC64LE-NEXT:    li 3, 48
3343 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3344 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3345 ; PC64LE-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
3346 ; PC64LE-NEXT:    lfs 1, .LCPI53_1@toc@l(3)
3347 ; PC64LE-NEXT:    bl exp
3348 ; PC64LE-NEXT:    nop
3349 ; PC64LE-NEXT:    li 3, 48
3350 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3351 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3352 ; PC64LE-NEXT:    addis 3, 2, .LCPI53_2@toc@ha
3353 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
3354 ; PC64LE-NEXT:    lfd 1, .LCPI53_2@toc@l(3)
3355 ; PC64LE-NEXT:    bl exp
3356 ; PC64LE-NEXT:    nop
3357 ; PC64LE-NEXT:    li 3, 64
3358 ; PC64LE-NEXT:    fmr 3, 1
3359 ; PC64LE-NEXT:    xxlor 1, 63, 63
3360 ; PC64LE-NEXT:    xxlor 2, 63, 63
3361 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3362 ; PC64LE-NEXT:    addi 1, 1, 80
3363 ; PC64LE-NEXT:    ld 0, 16(1)
3364 ; PC64LE-NEXT:    mtlr 0
3365 ; PC64LE-NEXT:    blr
3367 ; PC64LE9-LABEL: constrained_vector_exp_v3f64:
3368 ; PC64LE9:       # %bb.0: # %entry
3369 ; PC64LE9-NEXT:    mflr 0
3370 ; PC64LE9-NEXT:    std 0, 16(1)
3371 ; PC64LE9-NEXT:    stdu 1, -64(1)
3372 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
3373 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3374 ; PC64LE9-NEXT:    .cfi_offset v31, -16
3375 ; PC64LE9-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
3376 ; PC64LE9-NEXT:    lfd 1, .LCPI53_0@toc@l(3)
3377 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3378 ; PC64LE9-NEXT:    bl exp
3379 ; PC64LE9-NEXT:    nop
3380 ; PC64LE9-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
3381 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3382 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3383 ; PC64LE9-NEXT:    lfs 1, .LCPI53_1@toc@l(3)
3384 ; PC64LE9-NEXT:    bl exp
3385 ; PC64LE9-NEXT:    nop
3386 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3387 ; PC64LE9-NEXT:    addis 3, 2, .LCPI53_2@toc@ha
3388 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3389 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
3390 ; PC64LE9-NEXT:    lfd 1, .LCPI53_2@toc@l(3)
3391 ; PC64LE9-NEXT:    bl exp
3392 ; PC64LE9-NEXT:    nop
3393 ; PC64LE9-NEXT:    fmr 3, 1
3394 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
3395 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3396 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3397 ; PC64LE9-NEXT:    addi 1, 1, 64
3398 ; PC64LE9-NEXT:    ld 0, 16(1)
3399 ; PC64LE9-NEXT:    mtlr 0
3400 ; PC64LE9-NEXT:    blr
3401 entry:
3402   %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
3403                           <3 x double> <double 42.0, double 42.1, double 42.2>,
3404                           metadata !"round.dynamic",
3405                           metadata !"fpexcept.strict")
3406   ret <3 x double> %exp
3409 define <4 x double> @constrained_vector_exp_v4f64() {
3410 ; PC64LE-LABEL: constrained_vector_exp_v4f64:
3411 ; PC64LE:       # %bb.0: # %entry
3412 ; PC64LE-NEXT:    mflr 0
3413 ; PC64LE-NEXT:    std 0, 16(1)
3414 ; PC64LE-NEXT:    stdu 1, -80(1)
3415 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
3416 ; PC64LE-NEXT:    .cfi_offset lr, 16
3417 ; PC64LE-NEXT:    .cfi_offset v31, -16
3418 ; PC64LE-NEXT:    li 3, 64
3419 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3420 ; PC64LE-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
3421 ; PC64LE-NEXT:    lfd 1, .LCPI54_0@toc@l(3)
3422 ; PC64LE-NEXT:    bl exp
3423 ; PC64LE-NEXT:    nop
3424 ; PC64LE-NEXT:    li 3, 48
3425 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3426 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3427 ; PC64LE-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
3428 ; PC64LE-NEXT:    lfd 1, .LCPI54_1@toc@l(3)
3429 ; PC64LE-NEXT:    bl exp
3430 ; PC64LE-NEXT:    nop
3431 ; PC64LE-NEXT:    li 3, 48
3432 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3433 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3434 ; PC64LE-NEXT:    addis 3, 2, .LCPI54_2@toc@ha
3435 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
3436 ; PC64LE-NEXT:    lfd 1, .LCPI54_2@toc@l(3)
3437 ; PC64LE-NEXT:    bl exp
3438 ; PC64LE-NEXT:    nop
3439 ; PC64LE-NEXT:    li 3, 48
3440 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3441 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3442 ; PC64LE-NEXT:    addis 3, 2, .LCPI54_3@toc@ha
3443 ; PC64LE-NEXT:    lfs 1, .LCPI54_3@toc@l(3)
3444 ; PC64LE-NEXT:    bl exp
3445 ; PC64LE-NEXT:    nop
3446 ; PC64LE-NEXT:    li 3, 48
3447 ; PC64LE-NEXT:    vmr 3, 31
3448 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3449 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3450 ; PC64LE-NEXT:    li 3, 64
3451 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3452 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
3453 ; PC64LE-NEXT:    addi 1, 1, 80
3454 ; PC64LE-NEXT:    ld 0, 16(1)
3455 ; PC64LE-NEXT:    mtlr 0
3456 ; PC64LE-NEXT:    blr
3458 ; PC64LE9-LABEL: constrained_vector_exp_v4f64:
3459 ; PC64LE9:       # %bb.0: # %entry
3460 ; PC64LE9-NEXT:    mflr 0
3461 ; PC64LE9-NEXT:    std 0, 16(1)
3462 ; PC64LE9-NEXT:    stdu 1, -64(1)
3463 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
3464 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3465 ; PC64LE9-NEXT:    .cfi_offset v31, -16
3466 ; PC64LE9-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
3467 ; PC64LE9-NEXT:    lfd 1, .LCPI54_0@toc@l(3)
3468 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3469 ; PC64LE9-NEXT:    bl exp
3470 ; PC64LE9-NEXT:    nop
3471 ; PC64LE9-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
3472 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3473 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3474 ; PC64LE9-NEXT:    lfd 1, .LCPI54_1@toc@l(3)
3475 ; PC64LE9-NEXT:    bl exp
3476 ; PC64LE9-NEXT:    nop
3477 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3478 ; PC64LE9-NEXT:    addis 3, 2, .LCPI54_2@toc@ha
3479 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3480 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
3481 ; PC64LE9-NEXT:    lfd 1, .LCPI54_2@toc@l(3)
3482 ; PC64LE9-NEXT:    bl exp
3483 ; PC64LE9-NEXT:    nop
3484 ; PC64LE9-NEXT:    addis 3, 2, .LCPI54_3@toc@ha
3485 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3486 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3487 ; PC64LE9-NEXT:    lfs 1, .LCPI54_3@toc@l(3)
3488 ; PC64LE9-NEXT:    bl exp
3489 ; PC64LE9-NEXT:    nop
3490 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3491 ; PC64LE9-NEXT:    vmr 3, 31
3492 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3493 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3494 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3495 ; PC64LE9-NEXT:    addi 1, 1, 64
3496 ; PC64LE9-NEXT:    ld 0, 16(1)
3497 ; PC64LE9-NEXT:    mtlr 0
3498 ; PC64LE9-NEXT:    blr
3499 entry:
3500   %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64(
3501                              <4 x double> <double 42.0, double 42.1,
3502                                            double 42.2, double 42.3>,
3503                              metadata !"round.dynamic",
3504                              metadata !"fpexcept.strict")
3505   ret <4 x double> %exp
3508 define <1 x float> @constrained_vector_exp2_v1f32() {
3509 ; PC64LE-LABEL: constrained_vector_exp2_v1f32:
3510 ; PC64LE:       # %bb.0: # %entry
3511 ; PC64LE-NEXT:    mflr 0
3512 ; PC64LE-NEXT:    std 0, 16(1)
3513 ; PC64LE-NEXT:    stdu 1, -32(1)
3514 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
3515 ; PC64LE-NEXT:    .cfi_offset lr, 16
3516 ; PC64LE-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
3517 ; PC64LE-NEXT:    lfs 1, .LCPI55_0@toc@l(3)
3518 ; PC64LE-NEXT:    bl exp2f
3519 ; PC64LE-NEXT:    nop
3520 ; PC64LE-NEXT:    xscvdpspn 0, 1
3521 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
3522 ; PC64LE-NEXT:    addi 1, 1, 32
3523 ; PC64LE-NEXT:    ld 0, 16(1)
3524 ; PC64LE-NEXT:    mtlr 0
3525 ; PC64LE-NEXT:    blr
3527 ; PC64LE9-LABEL: constrained_vector_exp2_v1f32:
3528 ; PC64LE9:       # %bb.0: # %entry
3529 ; PC64LE9-NEXT:    mflr 0
3530 ; PC64LE9-NEXT:    std 0, 16(1)
3531 ; PC64LE9-NEXT:    stdu 1, -32(1)
3532 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
3533 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3534 ; PC64LE9-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
3535 ; PC64LE9-NEXT:    lfs 1, .LCPI55_0@toc@l(3)
3536 ; PC64LE9-NEXT:    bl exp2f
3537 ; PC64LE9-NEXT:    nop
3538 ; PC64LE9-NEXT:    xscvdpspn 0, 1
3539 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
3540 ; PC64LE9-NEXT:    addi 1, 1, 32
3541 ; PC64LE9-NEXT:    ld 0, 16(1)
3542 ; PC64LE9-NEXT:    mtlr 0
3543 ; PC64LE9-NEXT:    blr
3544 entry:
3545   %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
3546                              <1 x float> <float 42.0>,
3547                              metadata !"round.dynamic",
3548                              metadata !"fpexcept.strict")
3549   ret <1 x float> %exp2
3552 define <2 x double> @constrained_vector_exp2_v2f64() {
3553 ; PC64LE-LABEL: constrained_vector_exp2_v2f64:
3554 ; PC64LE:       # %bb.0: # %entry
3555 ; PC64LE-NEXT:    mflr 0
3556 ; PC64LE-NEXT:    std 0, 16(1)
3557 ; PC64LE-NEXT:    stdu 1, -64(1)
3558 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
3559 ; PC64LE-NEXT:    .cfi_offset lr, 16
3560 ; PC64LE-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
3561 ; PC64LE-NEXT:    lfd 1, .LCPI56_0@toc@l(3)
3562 ; PC64LE-NEXT:    bl exp2
3563 ; PC64LE-NEXT:    nop
3564 ; PC64LE-NEXT:    li 3, 48
3565 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3566 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3567 ; PC64LE-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
3568 ; PC64LE-NEXT:    lfs 1, .LCPI56_1@toc@l(3)
3569 ; PC64LE-NEXT:    bl exp2
3570 ; PC64LE-NEXT:    nop
3571 ; PC64LE-NEXT:    li 3, 48
3572 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3573 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3574 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
3575 ; PC64LE-NEXT:    addi 1, 1, 64
3576 ; PC64LE-NEXT:    ld 0, 16(1)
3577 ; PC64LE-NEXT:    mtlr 0
3578 ; PC64LE-NEXT:    blr
3580 ; PC64LE9-LABEL: constrained_vector_exp2_v2f64:
3581 ; PC64LE9:       # %bb.0: # %entry
3582 ; PC64LE9-NEXT:    mflr 0
3583 ; PC64LE9-NEXT:    std 0, 16(1)
3584 ; PC64LE9-NEXT:    stdu 1, -48(1)
3585 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
3586 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3587 ; PC64LE9-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
3588 ; PC64LE9-NEXT:    lfd 1, .LCPI56_0@toc@l(3)
3589 ; PC64LE9-NEXT:    bl exp2
3590 ; PC64LE9-NEXT:    nop
3591 ; PC64LE9-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
3592 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3593 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3594 ; PC64LE9-NEXT:    lfs 1, .LCPI56_1@toc@l(3)
3595 ; PC64LE9-NEXT:    bl exp2
3596 ; PC64LE9-NEXT:    nop
3597 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3598 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3599 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
3600 ; PC64LE9-NEXT:    addi 1, 1, 48
3601 ; PC64LE9-NEXT:    ld 0, 16(1)
3602 ; PC64LE9-NEXT:    mtlr 0
3603 ; PC64LE9-NEXT:    blr
3604 entry:
3605   %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
3606                               <2 x double> <double 42.1, double 42.0>,
3607                               metadata !"round.dynamic",
3608                               metadata !"fpexcept.strict")
3609   ret <2 x double> %exp2
3612 define <3 x float> @constrained_vector_exp2_v3f32() {
3613 ; PC64LE-LABEL: constrained_vector_exp2_v3f32:
3614 ; PC64LE:       # %bb.0: # %entry
3615 ; PC64LE-NEXT:    mflr 0
3616 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
3617 ; PC64LE-NEXT:    .cfi_offset lr, 16
3618 ; PC64LE-NEXT:    .cfi_offset f30, -16
3619 ; PC64LE-NEXT:    .cfi_offset f31, -8
3620 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3621 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3622 ; PC64LE-NEXT:    std 0, 16(1)
3623 ; PC64LE-NEXT:    stdu 1, -48(1)
3624 ; PC64LE-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
3625 ; PC64LE-NEXT:    lfs 1, .LCPI57_0@toc@l(3)
3626 ; PC64LE-NEXT:    bl exp2f
3627 ; PC64LE-NEXT:    nop
3628 ; PC64LE-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
3629 ; PC64LE-NEXT:    fmr 31, 1
3630 ; PC64LE-NEXT:    lfs 1, .LCPI57_1@toc@l(3)
3631 ; PC64LE-NEXT:    bl exp2f
3632 ; PC64LE-NEXT:    nop
3633 ; PC64LE-NEXT:    addis 3, 2, .LCPI57_2@toc@ha
3634 ; PC64LE-NEXT:    fmr 30, 1
3635 ; PC64LE-NEXT:    lfs 1, .LCPI57_2@toc@l(3)
3636 ; PC64LE-NEXT:    bl exp2f
3637 ; PC64LE-NEXT:    nop
3638 ; PC64LE-NEXT:    xscvdpspn 0, 30
3639 ; PC64LE-NEXT:    addis 3, 2, .LCPI57_3@toc@ha
3640 ; PC64LE-NEXT:    xscvdpspn 1, 1
3641 ; PC64LE-NEXT:    addi 3, 3, .LCPI57_3@toc@l
3642 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
3643 ; PC64LE-NEXT:    xscvdpspn 0, 31
3644 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
3645 ; PC64LE-NEXT:    vmrglw 2, 2, 3
3646 ; PC64LE-NEXT:    lvx 3, 0, 3
3647 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
3648 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
3649 ; PC64LE-NEXT:    addi 1, 1, 48
3650 ; PC64LE-NEXT:    ld 0, 16(1)
3651 ; PC64LE-NEXT:    mtlr 0
3652 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3653 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3654 ; PC64LE-NEXT:    blr
3656 ; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
3657 ; PC64LE9:       # %bb.0: # %entry
3658 ; PC64LE9-NEXT:    mflr 0
3659 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
3660 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3661 ; PC64LE9-NEXT:    .cfi_offset f30, -16
3662 ; PC64LE9-NEXT:    .cfi_offset f31, -8
3663 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3664 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3665 ; PC64LE9-NEXT:    std 0, 16(1)
3666 ; PC64LE9-NEXT:    stdu 1, -48(1)
3667 ; PC64LE9-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
3668 ; PC64LE9-NEXT:    lfs 1, .LCPI57_0@toc@l(3)
3669 ; PC64LE9-NEXT:    bl exp2f
3670 ; PC64LE9-NEXT:    nop
3671 ; PC64LE9-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
3672 ; PC64LE9-NEXT:    fmr 31, 1
3673 ; PC64LE9-NEXT:    lfs 1, .LCPI57_1@toc@l(3)
3674 ; PC64LE9-NEXT:    bl exp2f
3675 ; PC64LE9-NEXT:    nop
3676 ; PC64LE9-NEXT:    addis 3, 2, .LCPI57_2@toc@ha
3677 ; PC64LE9-NEXT:    fmr 30, 1
3678 ; PC64LE9-NEXT:    lfs 1, .LCPI57_2@toc@l(3)
3679 ; PC64LE9-NEXT:    bl exp2f
3680 ; PC64LE9-NEXT:    nop
3681 ; PC64LE9-NEXT:    xscvdpspn 0, 1
3682 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
3683 ; PC64LE9-NEXT:    xscvdpspn 0, 30
3684 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
3685 ; PC64LE9-NEXT:    xscvdpspn 0, 31
3686 ; PC64LE9-NEXT:    addis 3, 2, .LCPI57_3@toc@ha
3687 ; PC64LE9-NEXT:    addi 3, 3, .LCPI57_3@toc@l
3688 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
3689 ; PC64LE9-NEXT:    lxvx 35, 0, 3
3690 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
3691 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3692 ; PC64LE9-NEXT:    addi 1, 1, 48
3693 ; PC64LE9-NEXT:    ld 0, 16(1)
3694 ; PC64LE9-NEXT:    mtlr 0
3695 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3696 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3697 ; PC64LE9-NEXT:    blr
3698 entry:
3699   %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
3700                               <3 x float> <float 42.0, float 43.0, float 44.0>,
3701                               metadata !"round.dynamic",
3702                               metadata !"fpexcept.strict")
3703   ret <3 x float> %exp2
3706 define <3 x double> @constrained_vector_exp2_v3f64() {
3707 ; PC64LE-LABEL: constrained_vector_exp2_v3f64:
3708 ; PC64LE:       # %bb.0: # %entry
3709 ; PC64LE-NEXT:    mflr 0
3710 ; PC64LE-NEXT:    std 0, 16(1)
3711 ; PC64LE-NEXT:    stdu 1, -80(1)
3712 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
3713 ; PC64LE-NEXT:    .cfi_offset lr, 16
3714 ; PC64LE-NEXT:    .cfi_offset v31, -16
3715 ; PC64LE-NEXT:    li 3, 64
3716 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3717 ; PC64LE-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
3718 ; PC64LE-NEXT:    lfd 1, .LCPI58_0@toc@l(3)
3719 ; PC64LE-NEXT:    bl exp2
3720 ; PC64LE-NEXT:    nop
3721 ; PC64LE-NEXT:    li 3, 48
3722 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3723 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3724 ; PC64LE-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
3725 ; PC64LE-NEXT:    lfs 1, .LCPI58_1@toc@l(3)
3726 ; PC64LE-NEXT:    bl exp2
3727 ; PC64LE-NEXT:    nop
3728 ; PC64LE-NEXT:    li 3, 48
3729 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3730 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3731 ; PC64LE-NEXT:    addis 3, 2, .LCPI58_2@toc@ha
3732 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
3733 ; PC64LE-NEXT:    lfd 1, .LCPI58_2@toc@l(3)
3734 ; PC64LE-NEXT:    bl exp2
3735 ; PC64LE-NEXT:    nop
3736 ; PC64LE-NEXT:    li 3, 64
3737 ; PC64LE-NEXT:    fmr 3, 1
3738 ; PC64LE-NEXT:    xxlor 1, 63, 63
3739 ; PC64LE-NEXT:    xxlor 2, 63, 63
3740 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3741 ; PC64LE-NEXT:    addi 1, 1, 80
3742 ; PC64LE-NEXT:    ld 0, 16(1)
3743 ; PC64LE-NEXT:    mtlr 0
3744 ; PC64LE-NEXT:    blr
3746 ; PC64LE9-LABEL: constrained_vector_exp2_v3f64:
3747 ; PC64LE9:       # %bb.0: # %entry
3748 ; PC64LE9-NEXT:    mflr 0
3749 ; PC64LE9-NEXT:    std 0, 16(1)
3750 ; PC64LE9-NEXT:    stdu 1, -64(1)
3751 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
3752 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3753 ; PC64LE9-NEXT:    .cfi_offset v31, -16
3754 ; PC64LE9-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
3755 ; PC64LE9-NEXT:    lfd 1, .LCPI58_0@toc@l(3)
3756 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3757 ; PC64LE9-NEXT:    bl exp2
3758 ; PC64LE9-NEXT:    nop
3759 ; PC64LE9-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
3760 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3761 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3762 ; PC64LE9-NEXT:    lfs 1, .LCPI58_1@toc@l(3)
3763 ; PC64LE9-NEXT:    bl exp2
3764 ; PC64LE9-NEXT:    nop
3765 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3766 ; PC64LE9-NEXT:    addis 3, 2, .LCPI58_2@toc@ha
3767 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3768 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
3769 ; PC64LE9-NEXT:    lfd 1, .LCPI58_2@toc@l(3)
3770 ; PC64LE9-NEXT:    bl exp2
3771 ; PC64LE9-NEXT:    nop
3772 ; PC64LE9-NEXT:    fmr 3, 1
3773 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
3774 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3775 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3776 ; PC64LE9-NEXT:    addi 1, 1, 64
3777 ; PC64LE9-NEXT:    ld 0, 16(1)
3778 ; PC64LE9-NEXT:    mtlr 0
3779 ; PC64LE9-NEXT:    blr
3780 entry:
3781   %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
3782                           <3 x double> <double 42.0, double 42.1, double 42.2>,
3783                           metadata !"round.dynamic",
3784                           metadata !"fpexcept.strict")
3785   ret <3 x double> %exp2
3788 define <4 x double> @constrained_vector_exp2_v4f64() {
3789 ; PC64LE-LABEL: constrained_vector_exp2_v4f64:
3790 ; PC64LE:       # %bb.0: # %entry
3791 ; PC64LE-NEXT:    mflr 0
3792 ; PC64LE-NEXT:    std 0, 16(1)
3793 ; PC64LE-NEXT:    stdu 1, -80(1)
3794 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
3795 ; PC64LE-NEXT:    .cfi_offset lr, 16
3796 ; PC64LE-NEXT:    .cfi_offset v31, -16
3797 ; PC64LE-NEXT:    li 3, 64
3798 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3799 ; PC64LE-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
3800 ; PC64LE-NEXT:    lfd 1, .LCPI59_0@toc@l(3)
3801 ; PC64LE-NEXT:    bl exp2
3802 ; PC64LE-NEXT:    nop
3803 ; PC64LE-NEXT:    li 3, 48
3804 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3805 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3806 ; PC64LE-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
3807 ; PC64LE-NEXT:    lfd 1, .LCPI59_1@toc@l(3)
3808 ; PC64LE-NEXT:    bl exp2
3809 ; PC64LE-NEXT:    nop
3810 ; PC64LE-NEXT:    li 3, 48
3811 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3812 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3813 ; PC64LE-NEXT:    addis 3, 2, .LCPI59_2@toc@ha
3814 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
3815 ; PC64LE-NEXT:    lfd 1, .LCPI59_2@toc@l(3)
3816 ; PC64LE-NEXT:    bl exp2
3817 ; PC64LE-NEXT:    nop
3818 ; PC64LE-NEXT:    li 3, 48
3819 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3820 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3821 ; PC64LE-NEXT:    addis 3, 2, .LCPI59_3@toc@ha
3822 ; PC64LE-NEXT:    lfd 1, .LCPI59_3@toc@l(3)
3823 ; PC64LE-NEXT:    bl exp2
3824 ; PC64LE-NEXT:    nop
3825 ; PC64LE-NEXT:    li 3, 48
3826 ; PC64LE-NEXT:    vmr 2, 31
3827 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3828 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3829 ; PC64LE-NEXT:    li 3, 64
3830 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3831 ; PC64LE-NEXT:    xxmrghd 35, 1, 0
3832 ; PC64LE-NEXT:    addi 1, 1, 80
3833 ; PC64LE-NEXT:    ld 0, 16(1)
3834 ; PC64LE-NEXT:    mtlr 0
3835 ; PC64LE-NEXT:    blr
3837 ; PC64LE9-LABEL: constrained_vector_exp2_v4f64:
3838 ; PC64LE9:       # %bb.0: # %entry
3839 ; PC64LE9-NEXT:    mflr 0
3840 ; PC64LE9-NEXT:    std 0, 16(1)
3841 ; PC64LE9-NEXT:    stdu 1, -64(1)
3842 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
3843 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3844 ; PC64LE9-NEXT:    .cfi_offset v31, -16
3845 ; PC64LE9-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
3846 ; PC64LE9-NEXT:    lfd 1, .LCPI59_0@toc@l(3)
3847 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3848 ; PC64LE9-NEXT:    bl exp2
3849 ; PC64LE9-NEXT:    nop
3850 ; PC64LE9-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
3851 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3852 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3853 ; PC64LE9-NEXT:    lfd 1, .LCPI59_1@toc@l(3)
3854 ; PC64LE9-NEXT:    bl exp2
3855 ; PC64LE9-NEXT:    nop
3856 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3857 ; PC64LE9-NEXT:    addis 3, 2, .LCPI59_2@toc@ha
3858 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3859 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
3860 ; PC64LE9-NEXT:    lfd 1, .LCPI59_2@toc@l(3)
3861 ; PC64LE9-NEXT:    bl exp2
3862 ; PC64LE9-NEXT:    nop
3863 ; PC64LE9-NEXT:    addis 3, 2, .LCPI59_3@toc@ha
3864 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3865 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3866 ; PC64LE9-NEXT:    lfd 1, .LCPI59_3@toc@l(3)
3867 ; PC64LE9-NEXT:    bl exp2
3868 ; PC64LE9-NEXT:    nop
3869 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3870 ; PC64LE9-NEXT:    vmr 2, 31
3871 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3872 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3873 ; PC64LE9-NEXT:    xxmrghd 35, 1, 0
3874 ; PC64LE9-NEXT:    addi 1, 1, 64
3875 ; PC64LE9-NEXT:    ld 0, 16(1)
3876 ; PC64LE9-NEXT:    mtlr 0
3877 ; PC64LE9-NEXT:    blr
3878 entry:
3879   %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64(
3880                               <4 x double> <double 42.1, double 42.2,
3881                                             double 42.3, double 42.4>,
3882                               metadata !"round.dynamic",
3883                               metadata !"fpexcept.strict")
3884   ret <4 x double> %exp2
3887 define <1 x float> @constrained_vector_log_v1f32() {
3888 ; PC64LE-LABEL: constrained_vector_log_v1f32:
3889 ; PC64LE:       # %bb.0: # %entry
3890 ; PC64LE-NEXT:    mflr 0
3891 ; PC64LE-NEXT:    std 0, 16(1)
3892 ; PC64LE-NEXT:    stdu 1, -32(1)
3893 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
3894 ; PC64LE-NEXT:    .cfi_offset lr, 16
3895 ; PC64LE-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
3896 ; PC64LE-NEXT:    lfs 1, .LCPI60_0@toc@l(3)
3897 ; PC64LE-NEXT:    bl logf
3898 ; PC64LE-NEXT:    nop
3899 ; PC64LE-NEXT:    xscvdpspn 0, 1
3900 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
3901 ; PC64LE-NEXT:    addi 1, 1, 32
3902 ; PC64LE-NEXT:    ld 0, 16(1)
3903 ; PC64LE-NEXT:    mtlr 0
3904 ; PC64LE-NEXT:    blr
3906 ; PC64LE9-LABEL: constrained_vector_log_v1f32:
3907 ; PC64LE9:       # %bb.0: # %entry
3908 ; PC64LE9-NEXT:    mflr 0
3909 ; PC64LE9-NEXT:    std 0, 16(1)
3910 ; PC64LE9-NEXT:    stdu 1, -32(1)
3911 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
3912 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3913 ; PC64LE9-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
3914 ; PC64LE9-NEXT:    lfs 1, .LCPI60_0@toc@l(3)
3915 ; PC64LE9-NEXT:    bl logf
3916 ; PC64LE9-NEXT:    nop
3917 ; PC64LE9-NEXT:    xscvdpspn 0, 1
3918 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
3919 ; PC64LE9-NEXT:    addi 1, 1, 32
3920 ; PC64LE9-NEXT:    ld 0, 16(1)
3921 ; PC64LE9-NEXT:    mtlr 0
3922 ; PC64LE9-NEXT:    blr
3923 entry:
3924   %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
3925                              <1 x float> <float 42.0>,
3926                              metadata !"round.dynamic",
3927                              metadata !"fpexcept.strict")
3928   ret <1 x float> %log
3931 define <2 x double> @constrained_vector_log_v2f64() {
3932 ; PC64LE-LABEL: constrained_vector_log_v2f64:
3933 ; PC64LE:       # %bb.0: # %entry
3934 ; PC64LE-NEXT:    mflr 0
3935 ; PC64LE-NEXT:    std 0, 16(1)
3936 ; PC64LE-NEXT:    stdu 1, -64(1)
3937 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
3938 ; PC64LE-NEXT:    .cfi_offset lr, 16
3939 ; PC64LE-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
3940 ; PC64LE-NEXT:    lfd 1, .LCPI61_0@toc@l(3)
3941 ; PC64LE-NEXT:    bl log
3942 ; PC64LE-NEXT:    nop
3943 ; PC64LE-NEXT:    li 3, 48
3944 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3945 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3946 ; PC64LE-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
3947 ; PC64LE-NEXT:    lfs 1, .LCPI61_1@toc@l(3)
3948 ; PC64LE-NEXT:    bl log
3949 ; PC64LE-NEXT:    nop
3950 ; PC64LE-NEXT:    li 3, 48
3951 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3952 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3953 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
3954 ; PC64LE-NEXT:    addi 1, 1, 64
3955 ; PC64LE-NEXT:    ld 0, 16(1)
3956 ; PC64LE-NEXT:    mtlr 0
3957 ; PC64LE-NEXT:    blr
3959 ; PC64LE9-LABEL: constrained_vector_log_v2f64:
3960 ; PC64LE9:       # %bb.0: # %entry
3961 ; PC64LE9-NEXT:    mflr 0
3962 ; PC64LE9-NEXT:    std 0, 16(1)
3963 ; PC64LE9-NEXT:    stdu 1, -48(1)
3964 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
3965 ; PC64LE9-NEXT:    .cfi_offset lr, 16
3966 ; PC64LE9-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
3967 ; PC64LE9-NEXT:    lfd 1, .LCPI61_0@toc@l(3)
3968 ; PC64LE9-NEXT:    bl log
3969 ; PC64LE9-NEXT:    nop
3970 ; PC64LE9-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
3971 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3972 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3973 ; PC64LE9-NEXT:    lfs 1, .LCPI61_1@toc@l(3)
3974 ; PC64LE9-NEXT:    bl log
3975 ; PC64LE9-NEXT:    nop
3976 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3977 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3978 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3979 ; PC64LE9-NEXT:    addi 1, 1, 48
3980 ; PC64LE9-NEXT:    ld 0, 16(1)
3981 ; PC64LE9-NEXT:    mtlr 0
3982 ; PC64LE9-NEXT:    blr
3983 entry:
3984   %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
3985                              <2 x double> <double 42.0, double 42.1>,
3986                              metadata !"round.dynamic",
3987                              metadata !"fpexcept.strict")
3988   ret <2 x double> %log
3991 define <3 x float> @constrained_vector_log_v3f32() {
3992 ; PC64LE-LABEL: constrained_vector_log_v3f32:
3993 ; PC64LE:       # %bb.0: # %entry
3994 ; PC64LE-NEXT:    mflr 0
3995 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
3996 ; PC64LE-NEXT:    .cfi_offset lr, 16
3997 ; PC64LE-NEXT:    .cfi_offset f30, -16
3998 ; PC64LE-NEXT:    .cfi_offset f31, -8
3999 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4000 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4001 ; PC64LE-NEXT:    std 0, 16(1)
4002 ; PC64LE-NEXT:    stdu 1, -48(1)
4003 ; PC64LE-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
4004 ; PC64LE-NEXT:    lfs 1, .LCPI62_0@toc@l(3)
4005 ; PC64LE-NEXT:    bl logf
4006 ; PC64LE-NEXT:    nop
4007 ; PC64LE-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
4008 ; PC64LE-NEXT:    fmr 31, 1
4009 ; PC64LE-NEXT:    lfs 1, .LCPI62_1@toc@l(3)
4010 ; PC64LE-NEXT:    bl logf
4011 ; PC64LE-NEXT:    nop
4012 ; PC64LE-NEXT:    addis 3, 2, .LCPI62_2@toc@ha
4013 ; PC64LE-NEXT:    fmr 30, 1
4014 ; PC64LE-NEXT:    lfs 1, .LCPI62_2@toc@l(3)
4015 ; PC64LE-NEXT:    bl logf
4016 ; PC64LE-NEXT:    nop
4017 ; PC64LE-NEXT:    xscvdpspn 0, 30
4018 ; PC64LE-NEXT:    addis 3, 2, .LCPI62_3@toc@ha
4019 ; PC64LE-NEXT:    xscvdpspn 1, 1
4020 ; PC64LE-NEXT:    addi 3, 3, .LCPI62_3@toc@l
4021 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
4022 ; PC64LE-NEXT:    xscvdpspn 0, 31
4023 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
4024 ; PC64LE-NEXT:    vmrglw 2, 2, 3
4025 ; PC64LE-NEXT:    lvx 3, 0, 3
4026 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
4027 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
4028 ; PC64LE-NEXT:    addi 1, 1, 48
4029 ; PC64LE-NEXT:    ld 0, 16(1)
4030 ; PC64LE-NEXT:    mtlr 0
4031 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4032 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4033 ; PC64LE-NEXT:    blr
4035 ; PC64LE9-LABEL: constrained_vector_log_v3f32:
4036 ; PC64LE9:       # %bb.0: # %entry
4037 ; PC64LE9-NEXT:    mflr 0
4038 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
4039 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4040 ; PC64LE9-NEXT:    .cfi_offset f30, -16
4041 ; PC64LE9-NEXT:    .cfi_offset f31, -8
4042 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4043 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4044 ; PC64LE9-NEXT:    std 0, 16(1)
4045 ; PC64LE9-NEXT:    stdu 1, -48(1)
4046 ; PC64LE9-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
4047 ; PC64LE9-NEXT:    lfs 1, .LCPI62_0@toc@l(3)
4048 ; PC64LE9-NEXT:    bl logf
4049 ; PC64LE9-NEXT:    nop
4050 ; PC64LE9-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
4051 ; PC64LE9-NEXT:    fmr 31, 1
4052 ; PC64LE9-NEXT:    lfs 1, .LCPI62_1@toc@l(3)
4053 ; PC64LE9-NEXT:    bl logf
4054 ; PC64LE9-NEXT:    nop
4055 ; PC64LE9-NEXT:    addis 3, 2, .LCPI62_2@toc@ha
4056 ; PC64LE9-NEXT:    fmr 30, 1
4057 ; PC64LE9-NEXT:    lfs 1, .LCPI62_2@toc@l(3)
4058 ; PC64LE9-NEXT:    bl logf
4059 ; PC64LE9-NEXT:    nop
4060 ; PC64LE9-NEXT:    xscvdpspn 0, 1
4061 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
4062 ; PC64LE9-NEXT:    xscvdpspn 0, 30
4063 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
4064 ; PC64LE9-NEXT:    xscvdpspn 0, 31
4065 ; PC64LE9-NEXT:    addis 3, 2, .LCPI62_3@toc@ha
4066 ; PC64LE9-NEXT:    addi 3, 3, .LCPI62_3@toc@l
4067 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
4068 ; PC64LE9-NEXT:    lxvx 35, 0, 3
4069 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
4070 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4071 ; PC64LE9-NEXT:    addi 1, 1, 48
4072 ; PC64LE9-NEXT:    ld 0, 16(1)
4073 ; PC64LE9-NEXT:    mtlr 0
4074 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4075 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4076 ; PC64LE9-NEXT:    blr
4077 entry:
4078   %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
4079                               <3 x float> <float 42.0, float 43.0, float 44.0>,
4080                               metadata !"round.dynamic",
4081                               metadata !"fpexcept.strict")
4082   ret <3 x float> %log
4085 define <3 x double> @constrained_vector_log_v3f64() {
4086 ; PC64LE-LABEL: constrained_vector_log_v3f64:
4087 ; PC64LE:       # %bb.0: # %entry
4088 ; PC64LE-NEXT:    mflr 0
4089 ; PC64LE-NEXT:    std 0, 16(1)
4090 ; PC64LE-NEXT:    stdu 1, -80(1)
4091 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
4092 ; PC64LE-NEXT:    .cfi_offset lr, 16
4093 ; PC64LE-NEXT:    .cfi_offset v31, -16
4094 ; PC64LE-NEXT:    li 3, 64
4095 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4096 ; PC64LE-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
4097 ; PC64LE-NEXT:    lfd 1, .LCPI63_0@toc@l(3)
4098 ; PC64LE-NEXT:    bl log
4099 ; PC64LE-NEXT:    nop
4100 ; PC64LE-NEXT:    li 3, 48
4101 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4102 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4103 ; PC64LE-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
4104 ; PC64LE-NEXT:    lfs 1, .LCPI63_1@toc@l(3)
4105 ; PC64LE-NEXT:    bl log
4106 ; PC64LE-NEXT:    nop
4107 ; PC64LE-NEXT:    li 3, 48
4108 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4109 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4110 ; PC64LE-NEXT:    addis 3, 2, .LCPI63_2@toc@ha
4111 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
4112 ; PC64LE-NEXT:    lfd 1, .LCPI63_2@toc@l(3)
4113 ; PC64LE-NEXT:    bl log
4114 ; PC64LE-NEXT:    nop
4115 ; PC64LE-NEXT:    li 3, 64
4116 ; PC64LE-NEXT:    fmr 3, 1
4117 ; PC64LE-NEXT:    xxlor 1, 63, 63
4118 ; PC64LE-NEXT:    xxlor 2, 63, 63
4119 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4120 ; PC64LE-NEXT:    addi 1, 1, 80
4121 ; PC64LE-NEXT:    ld 0, 16(1)
4122 ; PC64LE-NEXT:    mtlr 0
4123 ; PC64LE-NEXT:    blr
4125 ; PC64LE9-LABEL: constrained_vector_log_v3f64:
4126 ; PC64LE9:       # %bb.0: # %entry
4127 ; PC64LE9-NEXT:    mflr 0
4128 ; PC64LE9-NEXT:    std 0, 16(1)
4129 ; PC64LE9-NEXT:    stdu 1, -64(1)
4130 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
4131 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4132 ; PC64LE9-NEXT:    .cfi_offset v31, -16
4133 ; PC64LE9-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
4134 ; PC64LE9-NEXT:    lfd 1, .LCPI63_0@toc@l(3)
4135 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4136 ; PC64LE9-NEXT:    bl log
4137 ; PC64LE9-NEXT:    nop
4138 ; PC64LE9-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
4139 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4140 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4141 ; PC64LE9-NEXT:    lfs 1, .LCPI63_1@toc@l(3)
4142 ; PC64LE9-NEXT:    bl log
4143 ; PC64LE9-NEXT:    nop
4144 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4145 ; PC64LE9-NEXT:    addis 3, 2, .LCPI63_2@toc@ha
4146 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4147 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
4148 ; PC64LE9-NEXT:    lfd 1, .LCPI63_2@toc@l(3)
4149 ; PC64LE9-NEXT:    bl log
4150 ; PC64LE9-NEXT:    nop
4151 ; PC64LE9-NEXT:    fmr 3, 1
4152 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
4153 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4154 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4155 ; PC64LE9-NEXT:    addi 1, 1, 64
4156 ; PC64LE9-NEXT:    ld 0, 16(1)
4157 ; PC64LE9-NEXT:    mtlr 0
4158 ; PC64LE9-NEXT:    blr
4159 entry:
4160   %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
4161                           <3 x double> <double 42.0, double 42.1, double 42.2>,
4162                           metadata !"round.dynamic",
4163                           metadata !"fpexcept.strict")
4164   ret <3 x double> %log
4167 define <4 x double> @constrained_vector_log_v4f64() {
4168 ; PC64LE-LABEL: constrained_vector_log_v4f64:
4169 ; PC64LE:       # %bb.0: # %entry
4170 ; PC64LE-NEXT:    mflr 0
4171 ; PC64LE-NEXT:    std 0, 16(1)
4172 ; PC64LE-NEXT:    stdu 1, -80(1)
4173 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
4174 ; PC64LE-NEXT:    .cfi_offset lr, 16
4175 ; PC64LE-NEXT:    .cfi_offset v31, -16
4176 ; PC64LE-NEXT:    li 3, 64
4177 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4178 ; PC64LE-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
4179 ; PC64LE-NEXT:    lfd 1, .LCPI64_0@toc@l(3)
4180 ; PC64LE-NEXT:    bl log
4181 ; PC64LE-NEXT:    nop
4182 ; PC64LE-NEXT:    li 3, 48
4183 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4184 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4185 ; PC64LE-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
4186 ; PC64LE-NEXT:    lfd 1, .LCPI64_1@toc@l(3)
4187 ; PC64LE-NEXT:    bl log
4188 ; PC64LE-NEXT:    nop
4189 ; PC64LE-NEXT:    li 3, 48
4190 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4191 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4192 ; PC64LE-NEXT:    addis 3, 2, .LCPI64_2@toc@ha
4193 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
4194 ; PC64LE-NEXT:    lfd 1, .LCPI64_2@toc@l(3)
4195 ; PC64LE-NEXT:    bl log
4196 ; PC64LE-NEXT:    nop
4197 ; PC64LE-NEXT:    li 3, 48
4198 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4199 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4200 ; PC64LE-NEXT:    addis 3, 2, .LCPI64_3@toc@ha
4201 ; PC64LE-NEXT:    lfs 1, .LCPI64_3@toc@l(3)
4202 ; PC64LE-NEXT:    bl log
4203 ; PC64LE-NEXT:    nop
4204 ; PC64LE-NEXT:    li 3, 48
4205 ; PC64LE-NEXT:    vmr 3, 31
4206 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4207 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4208 ; PC64LE-NEXT:    li 3, 64
4209 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4210 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
4211 ; PC64LE-NEXT:    addi 1, 1, 80
4212 ; PC64LE-NEXT:    ld 0, 16(1)
4213 ; PC64LE-NEXT:    mtlr 0
4214 ; PC64LE-NEXT:    blr
4216 ; PC64LE9-LABEL: constrained_vector_log_v4f64:
4217 ; PC64LE9:       # %bb.0: # %entry
4218 ; PC64LE9-NEXT:    mflr 0
4219 ; PC64LE9-NEXT:    std 0, 16(1)
4220 ; PC64LE9-NEXT:    stdu 1, -64(1)
4221 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
4222 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4223 ; PC64LE9-NEXT:    .cfi_offset v31, -16
4224 ; PC64LE9-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
4225 ; PC64LE9-NEXT:    lfd 1, .LCPI64_0@toc@l(3)
4226 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4227 ; PC64LE9-NEXT:    bl log
4228 ; PC64LE9-NEXT:    nop
4229 ; PC64LE9-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
4230 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4231 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4232 ; PC64LE9-NEXT:    lfd 1, .LCPI64_1@toc@l(3)
4233 ; PC64LE9-NEXT:    bl log
4234 ; PC64LE9-NEXT:    nop
4235 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4236 ; PC64LE9-NEXT:    addis 3, 2, .LCPI64_2@toc@ha
4237 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4238 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
4239 ; PC64LE9-NEXT:    lfd 1, .LCPI64_2@toc@l(3)
4240 ; PC64LE9-NEXT:    bl log
4241 ; PC64LE9-NEXT:    nop
4242 ; PC64LE9-NEXT:    addis 3, 2, .LCPI64_3@toc@ha
4243 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4244 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4245 ; PC64LE9-NEXT:    lfs 1, .LCPI64_3@toc@l(3)
4246 ; PC64LE9-NEXT:    bl log
4247 ; PC64LE9-NEXT:    nop
4248 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4249 ; PC64LE9-NEXT:    vmr 3, 31
4250 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4251 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4252 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4253 ; PC64LE9-NEXT:    addi 1, 1, 64
4254 ; PC64LE9-NEXT:    ld 0, 16(1)
4255 ; PC64LE9-NEXT:    mtlr 0
4256 ; PC64LE9-NEXT:    blr
4257 entry:
4258   %log = call <4 x double> @llvm.experimental.constrained.log.v4f64(
4259                              <4 x double> <double 42.0, double 42.1,
4260                                            double 42.2, double 42.3>,
4261                              metadata !"round.dynamic",
4262                              metadata !"fpexcept.strict")
4263   ret <4 x double> %log
4266 define <1 x float> @constrained_vector_log10_v1f32() {
4267 ; PC64LE-LABEL: constrained_vector_log10_v1f32:
4268 ; PC64LE:       # %bb.0: # %entry
4269 ; PC64LE-NEXT:    mflr 0
4270 ; PC64LE-NEXT:    std 0, 16(1)
4271 ; PC64LE-NEXT:    stdu 1, -32(1)
4272 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
4273 ; PC64LE-NEXT:    .cfi_offset lr, 16
4274 ; PC64LE-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
4275 ; PC64LE-NEXT:    lfs 1, .LCPI65_0@toc@l(3)
4276 ; PC64LE-NEXT:    bl log10f
4277 ; PC64LE-NEXT:    nop
4278 ; PC64LE-NEXT:    xscvdpspn 0, 1
4279 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
4280 ; PC64LE-NEXT:    addi 1, 1, 32
4281 ; PC64LE-NEXT:    ld 0, 16(1)
4282 ; PC64LE-NEXT:    mtlr 0
4283 ; PC64LE-NEXT:    blr
4285 ; PC64LE9-LABEL: constrained_vector_log10_v1f32:
4286 ; PC64LE9:       # %bb.0: # %entry
4287 ; PC64LE9-NEXT:    mflr 0
4288 ; PC64LE9-NEXT:    std 0, 16(1)
4289 ; PC64LE9-NEXT:    stdu 1, -32(1)
4290 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
4291 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4292 ; PC64LE9-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
4293 ; PC64LE9-NEXT:    lfs 1, .LCPI65_0@toc@l(3)
4294 ; PC64LE9-NEXT:    bl log10f
4295 ; PC64LE9-NEXT:    nop
4296 ; PC64LE9-NEXT:    xscvdpspn 0, 1
4297 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
4298 ; PC64LE9-NEXT:    addi 1, 1, 32
4299 ; PC64LE9-NEXT:    ld 0, 16(1)
4300 ; PC64LE9-NEXT:    mtlr 0
4301 ; PC64LE9-NEXT:    blr
4302 entry:
4303   %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
4304                              <1 x float> <float 42.0>,
4305                              metadata !"round.dynamic",
4306                              metadata !"fpexcept.strict")
4307   ret <1 x float> %log10
4310 define <2 x double> @constrained_vector_log10_v2f64() {
4311 ; PC64LE-LABEL: constrained_vector_log10_v2f64:
4312 ; PC64LE:       # %bb.0: # %entry
4313 ; PC64LE-NEXT:    mflr 0
4314 ; PC64LE-NEXT:    std 0, 16(1)
4315 ; PC64LE-NEXT:    stdu 1, -64(1)
4316 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
4317 ; PC64LE-NEXT:    .cfi_offset lr, 16
4318 ; PC64LE-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
4319 ; PC64LE-NEXT:    lfd 1, .LCPI66_0@toc@l(3)
4320 ; PC64LE-NEXT:    bl log10
4321 ; PC64LE-NEXT:    nop
4322 ; PC64LE-NEXT:    li 3, 48
4323 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4324 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4325 ; PC64LE-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
4326 ; PC64LE-NEXT:    lfs 1, .LCPI66_1@toc@l(3)
4327 ; PC64LE-NEXT:    bl log10
4328 ; PC64LE-NEXT:    nop
4329 ; PC64LE-NEXT:    li 3, 48
4330 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4331 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4332 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
4333 ; PC64LE-NEXT:    addi 1, 1, 64
4334 ; PC64LE-NEXT:    ld 0, 16(1)
4335 ; PC64LE-NEXT:    mtlr 0
4336 ; PC64LE-NEXT:    blr
4338 ; PC64LE9-LABEL: constrained_vector_log10_v2f64:
4339 ; PC64LE9:       # %bb.0: # %entry
4340 ; PC64LE9-NEXT:    mflr 0
4341 ; PC64LE9-NEXT:    std 0, 16(1)
4342 ; PC64LE9-NEXT:    stdu 1, -48(1)
4343 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
4344 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4345 ; PC64LE9-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
4346 ; PC64LE9-NEXT:    lfd 1, .LCPI66_0@toc@l(3)
4347 ; PC64LE9-NEXT:    bl log10
4348 ; PC64LE9-NEXT:    nop
4349 ; PC64LE9-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
4350 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4351 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4352 ; PC64LE9-NEXT:    lfs 1, .LCPI66_1@toc@l(3)
4353 ; PC64LE9-NEXT:    bl log10
4354 ; PC64LE9-NEXT:    nop
4355 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4356 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4357 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4358 ; PC64LE9-NEXT:    addi 1, 1, 48
4359 ; PC64LE9-NEXT:    ld 0, 16(1)
4360 ; PC64LE9-NEXT:    mtlr 0
4361 ; PC64LE9-NEXT:    blr
4362 entry:
4363   %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
4364                                <2 x double> <double 42.0, double 42.1>,
4365                                metadata !"round.dynamic",
4366                                metadata !"fpexcept.strict")
4367   ret <2 x double> %log10
4370 define <3 x float> @constrained_vector_log10_v3f32() {
4371 ; PC64LE-LABEL: constrained_vector_log10_v3f32:
4372 ; PC64LE:       # %bb.0: # %entry
4373 ; PC64LE-NEXT:    mflr 0
4374 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
4375 ; PC64LE-NEXT:    .cfi_offset lr, 16
4376 ; PC64LE-NEXT:    .cfi_offset f30, -16
4377 ; PC64LE-NEXT:    .cfi_offset f31, -8
4378 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4379 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4380 ; PC64LE-NEXT:    std 0, 16(1)
4381 ; PC64LE-NEXT:    stdu 1, -48(1)
4382 ; PC64LE-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
4383 ; PC64LE-NEXT:    lfs 1, .LCPI67_0@toc@l(3)
4384 ; PC64LE-NEXT:    bl log10f
4385 ; PC64LE-NEXT:    nop
4386 ; PC64LE-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
4387 ; PC64LE-NEXT:    fmr 31, 1
4388 ; PC64LE-NEXT:    lfs 1, .LCPI67_1@toc@l(3)
4389 ; PC64LE-NEXT:    bl log10f
4390 ; PC64LE-NEXT:    nop
4391 ; PC64LE-NEXT:    addis 3, 2, .LCPI67_2@toc@ha
4392 ; PC64LE-NEXT:    fmr 30, 1
4393 ; PC64LE-NEXT:    lfs 1, .LCPI67_2@toc@l(3)
4394 ; PC64LE-NEXT:    bl log10f
4395 ; PC64LE-NEXT:    nop
4396 ; PC64LE-NEXT:    xscvdpspn 0, 30
4397 ; PC64LE-NEXT:    addis 3, 2, .LCPI67_3@toc@ha
4398 ; PC64LE-NEXT:    xscvdpspn 1, 1
4399 ; PC64LE-NEXT:    addi 3, 3, .LCPI67_3@toc@l
4400 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
4401 ; PC64LE-NEXT:    xscvdpspn 0, 31
4402 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
4403 ; PC64LE-NEXT:    vmrglw 2, 2, 3
4404 ; PC64LE-NEXT:    lvx 3, 0, 3
4405 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
4406 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
4407 ; PC64LE-NEXT:    addi 1, 1, 48
4408 ; PC64LE-NEXT:    ld 0, 16(1)
4409 ; PC64LE-NEXT:    mtlr 0
4410 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4411 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4412 ; PC64LE-NEXT:    blr
4414 ; PC64LE9-LABEL: constrained_vector_log10_v3f32:
4415 ; PC64LE9:       # %bb.0: # %entry
4416 ; PC64LE9-NEXT:    mflr 0
4417 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
4418 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4419 ; PC64LE9-NEXT:    .cfi_offset f30, -16
4420 ; PC64LE9-NEXT:    .cfi_offset f31, -8
4421 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4422 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4423 ; PC64LE9-NEXT:    std 0, 16(1)
4424 ; PC64LE9-NEXT:    stdu 1, -48(1)
4425 ; PC64LE9-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
4426 ; PC64LE9-NEXT:    lfs 1, .LCPI67_0@toc@l(3)
4427 ; PC64LE9-NEXT:    bl log10f
4428 ; PC64LE9-NEXT:    nop
4429 ; PC64LE9-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
4430 ; PC64LE9-NEXT:    fmr 31, 1
4431 ; PC64LE9-NEXT:    lfs 1, .LCPI67_1@toc@l(3)
4432 ; PC64LE9-NEXT:    bl log10f
4433 ; PC64LE9-NEXT:    nop
4434 ; PC64LE9-NEXT:    addis 3, 2, .LCPI67_2@toc@ha
4435 ; PC64LE9-NEXT:    fmr 30, 1
4436 ; PC64LE9-NEXT:    lfs 1, .LCPI67_2@toc@l(3)
4437 ; PC64LE9-NEXT:    bl log10f
4438 ; PC64LE9-NEXT:    nop
4439 ; PC64LE9-NEXT:    xscvdpspn 0, 1
4440 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
4441 ; PC64LE9-NEXT:    xscvdpspn 0, 30
4442 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
4443 ; PC64LE9-NEXT:    xscvdpspn 0, 31
4444 ; PC64LE9-NEXT:    addis 3, 2, .LCPI67_3@toc@ha
4445 ; PC64LE9-NEXT:    addi 3, 3, .LCPI67_3@toc@l
4446 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
4447 ; PC64LE9-NEXT:    lxvx 35, 0, 3
4448 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
4449 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4450 ; PC64LE9-NEXT:    addi 1, 1, 48
4451 ; PC64LE9-NEXT:    ld 0, 16(1)
4452 ; PC64LE9-NEXT:    mtlr 0
4453 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4454 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4455 ; PC64LE9-NEXT:    blr
4456 entry:
4457   %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
4458                               <3 x float> <float 42.0, float 43.0, float 44.0>,
4459                               metadata !"round.dynamic",
4460                               metadata !"fpexcept.strict")
4461   ret <3 x float> %log10
4464 define <3 x double> @constrained_vector_log10_v3f64() {
4465 ; PC64LE-LABEL: constrained_vector_log10_v3f64:
4466 ; PC64LE:       # %bb.0: # %entry
4467 ; PC64LE-NEXT:    mflr 0
4468 ; PC64LE-NEXT:    std 0, 16(1)
4469 ; PC64LE-NEXT:    stdu 1, -80(1)
4470 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
4471 ; PC64LE-NEXT:    .cfi_offset lr, 16
4472 ; PC64LE-NEXT:    .cfi_offset v31, -16
4473 ; PC64LE-NEXT:    li 3, 64
4474 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4475 ; PC64LE-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
4476 ; PC64LE-NEXT:    lfd 1, .LCPI68_0@toc@l(3)
4477 ; PC64LE-NEXT:    bl log10
4478 ; PC64LE-NEXT:    nop
4479 ; PC64LE-NEXT:    li 3, 48
4480 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4481 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4482 ; PC64LE-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
4483 ; PC64LE-NEXT:    lfs 1, .LCPI68_1@toc@l(3)
4484 ; PC64LE-NEXT:    bl log10
4485 ; PC64LE-NEXT:    nop
4486 ; PC64LE-NEXT:    li 3, 48
4487 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4488 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4489 ; PC64LE-NEXT:    addis 3, 2, .LCPI68_2@toc@ha
4490 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
4491 ; PC64LE-NEXT:    lfd 1, .LCPI68_2@toc@l(3)
4492 ; PC64LE-NEXT:    bl log10
4493 ; PC64LE-NEXT:    nop
4494 ; PC64LE-NEXT:    li 3, 64
4495 ; PC64LE-NEXT:    fmr 3, 1
4496 ; PC64LE-NEXT:    xxlor 1, 63, 63
4497 ; PC64LE-NEXT:    xxlor 2, 63, 63
4498 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4499 ; PC64LE-NEXT:    addi 1, 1, 80
4500 ; PC64LE-NEXT:    ld 0, 16(1)
4501 ; PC64LE-NEXT:    mtlr 0
4502 ; PC64LE-NEXT:    blr
4504 ; PC64LE9-LABEL: constrained_vector_log10_v3f64:
4505 ; PC64LE9:       # %bb.0: # %entry
4506 ; PC64LE9-NEXT:    mflr 0
4507 ; PC64LE9-NEXT:    std 0, 16(1)
4508 ; PC64LE9-NEXT:    stdu 1, -64(1)
4509 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
4510 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4511 ; PC64LE9-NEXT:    .cfi_offset v31, -16
4512 ; PC64LE9-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
4513 ; PC64LE9-NEXT:    lfd 1, .LCPI68_0@toc@l(3)
4514 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4515 ; PC64LE9-NEXT:    bl log10
4516 ; PC64LE9-NEXT:    nop
4517 ; PC64LE9-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
4518 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4519 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4520 ; PC64LE9-NEXT:    lfs 1, .LCPI68_1@toc@l(3)
4521 ; PC64LE9-NEXT:    bl log10
4522 ; PC64LE9-NEXT:    nop
4523 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4524 ; PC64LE9-NEXT:    addis 3, 2, .LCPI68_2@toc@ha
4525 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4526 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
4527 ; PC64LE9-NEXT:    lfd 1, .LCPI68_2@toc@l(3)
4528 ; PC64LE9-NEXT:    bl log10
4529 ; PC64LE9-NEXT:    nop
4530 ; PC64LE9-NEXT:    fmr 3, 1
4531 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
4532 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4533 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4534 ; PC64LE9-NEXT:    addi 1, 1, 64
4535 ; PC64LE9-NEXT:    ld 0, 16(1)
4536 ; PC64LE9-NEXT:    mtlr 0
4537 ; PC64LE9-NEXT:    blr
4538 entry:
4539   %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
4540                           <3 x double> <double 42.0, double 42.1, double 42.2>,
4541                           metadata !"round.dynamic",
4542                           metadata !"fpexcept.strict")
4543   ret <3 x double> %log10
4546 define <4 x double> @constrained_vector_log10_v4f64() {
4547 ; PC64LE-LABEL: constrained_vector_log10_v4f64:
4548 ; PC64LE:       # %bb.0: # %entry
4549 ; PC64LE-NEXT:    mflr 0
4550 ; PC64LE-NEXT:    std 0, 16(1)
4551 ; PC64LE-NEXT:    stdu 1, -80(1)
4552 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
4553 ; PC64LE-NEXT:    .cfi_offset lr, 16
4554 ; PC64LE-NEXT:    .cfi_offset v31, -16
4555 ; PC64LE-NEXT:    li 3, 64
4556 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4557 ; PC64LE-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
4558 ; PC64LE-NEXT:    lfd 1, .LCPI69_0@toc@l(3)
4559 ; PC64LE-NEXT:    bl log10
4560 ; PC64LE-NEXT:    nop
4561 ; PC64LE-NEXT:    li 3, 48
4562 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4563 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4564 ; PC64LE-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
4565 ; PC64LE-NEXT:    lfd 1, .LCPI69_1@toc@l(3)
4566 ; PC64LE-NEXT:    bl log10
4567 ; PC64LE-NEXT:    nop
4568 ; PC64LE-NEXT:    li 3, 48
4569 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4570 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4571 ; PC64LE-NEXT:    addis 3, 2, .LCPI69_2@toc@ha
4572 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
4573 ; PC64LE-NEXT:    lfd 1, .LCPI69_2@toc@l(3)
4574 ; PC64LE-NEXT:    bl log10
4575 ; PC64LE-NEXT:    nop
4576 ; PC64LE-NEXT:    li 3, 48
4577 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4578 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4579 ; PC64LE-NEXT:    addis 3, 2, .LCPI69_3@toc@ha
4580 ; PC64LE-NEXT:    lfs 1, .LCPI69_3@toc@l(3)
4581 ; PC64LE-NEXT:    bl log10
4582 ; PC64LE-NEXT:    nop
4583 ; PC64LE-NEXT:    li 3, 48
4584 ; PC64LE-NEXT:    vmr 3, 31
4585 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4586 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4587 ; PC64LE-NEXT:    li 3, 64
4588 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4589 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
4590 ; PC64LE-NEXT:    addi 1, 1, 80
4591 ; PC64LE-NEXT:    ld 0, 16(1)
4592 ; PC64LE-NEXT:    mtlr 0
4593 ; PC64LE-NEXT:    blr
4595 ; PC64LE9-LABEL: constrained_vector_log10_v4f64:
4596 ; PC64LE9:       # %bb.0: # %entry
4597 ; PC64LE9-NEXT:    mflr 0
4598 ; PC64LE9-NEXT:    std 0, 16(1)
4599 ; PC64LE9-NEXT:    stdu 1, -64(1)
4600 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
4601 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4602 ; PC64LE9-NEXT:    .cfi_offset v31, -16
4603 ; PC64LE9-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
4604 ; PC64LE9-NEXT:    lfd 1, .LCPI69_0@toc@l(3)
4605 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4606 ; PC64LE9-NEXT:    bl log10
4607 ; PC64LE9-NEXT:    nop
4608 ; PC64LE9-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
4609 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4610 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4611 ; PC64LE9-NEXT:    lfd 1, .LCPI69_1@toc@l(3)
4612 ; PC64LE9-NEXT:    bl log10
4613 ; PC64LE9-NEXT:    nop
4614 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4615 ; PC64LE9-NEXT:    addis 3, 2, .LCPI69_2@toc@ha
4616 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4617 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
4618 ; PC64LE9-NEXT:    lfd 1, .LCPI69_2@toc@l(3)
4619 ; PC64LE9-NEXT:    bl log10
4620 ; PC64LE9-NEXT:    nop
4621 ; PC64LE9-NEXT:    addis 3, 2, .LCPI69_3@toc@ha
4622 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4623 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4624 ; PC64LE9-NEXT:    lfs 1, .LCPI69_3@toc@l(3)
4625 ; PC64LE9-NEXT:    bl log10
4626 ; PC64LE9-NEXT:    nop
4627 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4628 ; PC64LE9-NEXT:    vmr 3, 31
4629 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4630 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4631 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4632 ; PC64LE9-NEXT:    addi 1, 1, 64
4633 ; PC64LE9-NEXT:    ld 0, 16(1)
4634 ; PC64LE9-NEXT:    mtlr 0
4635 ; PC64LE9-NEXT:    blr
4636 entry:
4637   %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64(
4638                                <4 x double> <double 42.0, double 42.1,
4639                                              double 42.2, double 42.3>,
4640                                metadata !"round.dynamic",
4641                                metadata !"fpexcept.strict")
4642   ret <4 x double> %log10
4645 define <1 x float> @constrained_vector_log2_v1f32() {
4646 ; PC64LE-LABEL: constrained_vector_log2_v1f32:
4647 ; PC64LE:       # %bb.0: # %entry
4648 ; PC64LE-NEXT:    mflr 0
4649 ; PC64LE-NEXT:    std 0, 16(1)
4650 ; PC64LE-NEXT:    stdu 1, -32(1)
4651 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
4652 ; PC64LE-NEXT:    .cfi_offset lr, 16
4653 ; PC64LE-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
4654 ; PC64LE-NEXT:    lfs 1, .LCPI70_0@toc@l(3)
4655 ; PC64LE-NEXT:    bl log2f
4656 ; PC64LE-NEXT:    nop
4657 ; PC64LE-NEXT:    xscvdpspn 0, 1
4658 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
4659 ; PC64LE-NEXT:    addi 1, 1, 32
4660 ; PC64LE-NEXT:    ld 0, 16(1)
4661 ; PC64LE-NEXT:    mtlr 0
4662 ; PC64LE-NEXT:    blr
4664 ; PC64LE9-LABEL: constrained_vector_log2_v1f32:
4665 ; PC64LE9:       # %bb.0: # %entry
4666 ; PC64LE9-NEXT:    mflr 0
4667 ; PC64LE9-NEXT:    std 0, 16(1)
4668 ; PC64LE9-NEXT:    stdu 1, -32(1)
4669 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
4670 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4671 ; PC64LE9-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
4672 ; PC64LE9-NEXT:    lfs 1, .LCPI70_0@toc@l(3)
4673 ; PC64LE9-NEXT:    bl log2f
4674 ; PC64LE9-NEXT:    nop
4675 ; PC64LE9-NEXT:    xscvdpspn 0, 1
4676 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
4677 ; PC64LE9-NEXT:    addi 1, 1, 32
4678 ; PC64LE9-NEXT:    ld 0, 16(1)
4679 ; PC64LE9-NEXT:    mtlr 0
4680 ; PC64LE9-NEXT:    blr
4681 entry:
4682   %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
4683                              <1 x float> <float 42.0>,
4684                              metadata !"round.dynamic",
4685                              metadata !"fpexcept.strict")
4686   ret <1 x float> %log2
4689 define <2 x double> @constrained_vector_log2_v2f64() {
4690 ; PC64LE-LABEL: constrained_vector_log2_v2f64:
4691 ; PC64LE:       # %bb.0: # %entry
4692 ; PC64LE-NEXT:    mflr 0
4693 ; PC64LE-NEXT:    std 0, 16(1)
4694 ; PC64LE-NEXT:    stdu 1, -64(1)
4695 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
4696 ; PC64LE-NEXT:    .cfi_offset lr, 16
4697 ; PC64LE-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
4698 ; PC64LE-NEXT:    lfd 1, .LCPI71_0@toc@l(3)
4699 ; PC64LE-NEXT:    bl log2
4700 ; PC64LE-NEXT:    nop
4701 ; PC64LE-NEXT:    li 3, 48
4702 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4703 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4704 ; PC64LE-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
4705 ; PC64LE-NEXT:    lfs 1, .LCPI71_1@toc@l(3)
4706 ; PC64LE-NEXT:    bl log2
4707 ; PC64LE-NEXT:    nop
4708 ; PC64LE-NEXT:    li 3, 48
4709 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4710 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4711 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
4712 ; PC64LE-NEXT:    addi 1, 1, 64
4713 ; PC64LE-NEXT:    ld 0, 16(1)
4714 ; PC64LE-NEXT:    mtlr 0
4715 ; PC64LE-NEXT:    blr
4717 ; PC64LE9-LABEL: constrained_vector_log2_v2f64:
4718 ; PC64LE9:       # %bb.0: # %entry
4719 ; PC64LE9-NEXT:    mflr 0
4720 ; PC64LE9-NEXT:    std 0, 16(1)
4721 ; PC64LE9-NEXT:    stdu 1, -48(1)
4722 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
4723 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4724 ; PC64LE9-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
4725 ; PC64LE9-NEXT:    lfd 1, .LCPI71_0@toc@l(3)
4726 ; PC64LE9-NEXT:    bl log2
4727 ; PC64LE9-NEXT:    nop
4728 ; PC64LE9-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
4729 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4730 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4731 ; PC64LE9-NEXT:    lfs 1, .LCPI71_1@toc@l(3)
4732 ; PC64LE9-NEXT:    bl log2
4733 ; PC64LE9-NEXT:    nop
4734 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4735 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4736 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4737 ; PC64LE9-NEXT:    addi 1, 1, 48
4738 ; PC64LE9-NEXT:    ld 0, 16(1)
4739 ; PC64LE9-NEXT:    mtlr 0
4740 ; PC64LE9-NEXT:    blr
4741 entry:
4742   %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
4743                               <2 x double> <double 42.0, double 42.1>,
4744                               metadata !"round.dynamic",
4745                               metadata !"fpexcept.strict")
4746   ret <2 x double> %log2
4749 define <3 x float> @constrained_vector_log2_v3f32() {
4750 ; PC64LE-LABEL: constrained_vector_log2_v3f32:
4751 ; PC64LE:       # %bb.0: # %entry
4752 ; PC64LE-NEXT:    mflr 0
4753 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
4754 ; PC64LE-NEXT:    .cfi_offset lr, 16
4755 ; PC64LE-NEXT:    .cfi_offset f30, -16
4756 ; PC64LE-NEXT:    .cfi_offset f31, -8
4757 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4758 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4759 ; PC64LE-NEXT:    std 0, 16(1)
4760 ; PC64LE-NEXT:    stdu 1, -48(1)
4761 ; PC64LE-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
4762 ; PC64LE-NEXT:    lfs 1, .LCPI72_0@toc@l(3)
4763 ; PC64LE-NEXT:    bl log2f
4764 ; PC64LE-NEXT:    nop
4765 ; PC64LE-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
4766 ; PC64LE-NEXT:    fmr 31, 1
4767 ; PC64LE-NEXT:    lfs 1, .LCPI72_1@toc@l(3)
4768 ; PC64LE-NEXT:    bl log2f
4769 ; PC64LE-NEXT:    nop
4770 ; PC64LE-NEXT:    addis 3, 2, .LCPI72_2@toc@ha
4771 ; PC64LE-NEXT:    fmr 30, 1
4772 ; PC64LE-NEXT:    lfs 1, .LCPI72_2@toc@l(3)
4773 ; PC64LE-NEXT:    bl log2f
4774 ; PC64LE-NEXT:    nop
4775 ; PC64LE-NEXT:    xscvdpspn 0, 30
4776 ; PC64LE-NEXT:    addis 3, 2, .LCPI72_3@toc@ha
4777 ; PC64LE-NEXT:    xscvdpspn 1, 1
4778 ; PC64LE-NEXT:    addi 3, 3, .LCPI72_3@toc@l
4779 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
4780 ; PC64LE-NEXT:    xscvdpspn 0, 31
4781 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
4782 ; PC64LE-NEXT:    vmrglw 2, 2, 3
4783 ; PC64LE-NEXT:    lvx 3, 0, 3
4784 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
4785 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
4786 ; PC64LE-NEXT:    addi 1, 1, 48
4787 ; PC64LE-NEXT:    ld 0, 16(1)
4788 ; PC64LE-NEXT:    mtlr 0
4789 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4790 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4791 ; PC64LE-NEXT:    blr
4793 ; PC64LE9-LABEL: constrained_vector_log2_v3f32:
4794 ; PC64LE9:       # %bb.0: # %entry
4795 ; PC64LE9-NEXT:    mflr 0
4796 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
4797 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4798 ; PC64LE9-NEXT:    .cfi_offset f30, -16
4799 ; PC64LE9-NEXT:    .cfi_offset f31, -8
4800 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4801 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4802 ; PC64LE9-NEXT:    std 0, 16(1)
4803 ; PC64LE9-NEXT:    stdu 1, -48(1)
4804 ; PC64LE9-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
4805 ; PC64LE9-NEXT:    lfs 1, .LCPI72_0@toc@l(3)
4806 ; PC64LE9-NEXT:    bl log2f
4807 ; PC64LE9-NEXT:    nop
4808 ; PC64LE9-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
4809 ; PC64LE9-NEXT:    fmr 31, 1
4810 ; PC64LE9-NEXT:    lfs 1, .LCPI72_1@toc@l(3)
4811 ; PC64LE9-NEXT:    bl log2f
4812 ; PC64LE9-NEXT:    nop
4813 ; PC64LE9-NEXT:    addis 3, 2, .LCPI72_2@toc@ha
4814 ; PC64LE9-NEXT:    fmr 30, 1
4815 ; PC64LE9-NEXT:    lfs 1, .LCPI72_2@toc@l(3)
4816 ; PC64LE9-NEXT:    bl log2f
4817 ; PC64LE9-NEXT:    nop
4818 ; PC64LE9-NEXT:    xscvdpspn 0, 1
4819 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
4820 ; PC64LE9-NEXT:    xscvdpspn 0, 30
4821 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
4822 ; PC64LE9-NEXT:    xscvdpspn 0, 31
4823 ; PC64LE9-NEXT:    addis 3, 2, .LCPI72_3@toc@ha
4824 ; PC64LE9-NEXT:    addi 3, 3, .LCPI72_3@toc@l
4825 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
4826 ; PC64LE9-NEXT:    lxvx 35, 0, 3
4827 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
4828 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4829 ; PC64LE9-NEXT:    addi 1, 1, 48
4830 ; PC64LE9-NEXT:    ld 0, 16(1)
4831 ; PC64LE9-NEXT:    mtlr 0
4832 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4833 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4834 ; PC64LE9-NEXT:    blr
4835 entry:
4836   %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
4837                               <3 x float> <float 42.0, float 43.0, float 44.0>,
4838                               metadata !"round.dynamic",
4839                               metadata !"fpexcept.strict")
4840   ret <3 x float> %log2
4843 define <3 x double> @constrained_vector_log2_v3f64() {
4844 ; PC64LE-LABEL: constrained_vector_log2_v3f64:
4845 ; PC64LE:       # %bb.0: # %entry
4846 ; PC64LE-NEXT:    mflr 0
4847 ; PC64LE-NEXT:    std 0, 16(1)
4848 ; PC64LE-NEXT:    stdu 1, -80(1)
4849 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
4850 ; PC64LE-NEXT:    .cfi_offset lr, 16
4851 ; PC64LE-NEXT:    .cfi_offset v31, -16
4852 ; PC64LE-NEXT:    li 3, 64
4853 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4854 ; PC64LE-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
4855 ; PC64LE-NEXT:    lfd 1, .LCPI73_0@toc@l(3)
4856 ; PC64LE-NEXT:    bl log2
4857 ; PC64LE-NEXT:    nop
4858 ; PC64LE-NEXT:    li 3, 48
4859 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4860 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4861 ; PC64LE-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
4862 ; PC64LE-NEXT:    lfs 1, .LCPI73_1@toc@l(3)
4863 ; PC64LE-NEXT:    bl log2
4864 ; PC64LE-NEXT:    nop
4865 ; PC64LE-NEXT:    li 3, 48
4866 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4867 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4868 ; PC64LE-NEXT:    addis 3, 2, .LCPI73_2@toc@ha
4869 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
4870 ; PC64LE-NEXT:    lfd 1, .LCPI73_2@toc@l(3)
4871 ; PC64LE-NEXT:    bl log2
4872 ; PC64LE-NEXT:    nop
4873 ; PC64LE-NEXT:    li 3, 64
4874 ; PC64LE-NEXT:    fmr 3, 1
4875 ; PC64LE-NEXT:    xxlor 1, 63, 63
4876 ; PC64LE-NEXT:    xxlor 2, 63, 63
4877 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4878 ; PC64LE-NEXT:    addi 1, 1, 80
4879 ; PC64LE-NEXT:    ld 0, 16(1)
4880 ; PC64LE-NEXT:    mtlr 0
4881 ; PC64LE-NEXT:    blr
4883 ; PC64LE9-LABEL: constrained_vector_log2_v3f64:
4884 ; PC64LE9:       # %bb.0: # %entry
4885 ; PC64LE9-NEXT:    mflr 0
4886 ; PC64LE9-NEXT:    std 0, 16(1)
4887 ; PC64LE9-NEXT:    stdu 1, -64(1)
4888 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
4889 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4890 ; PC64LE9-NEXT:    .cfi_offset v31, -16
4891 ; PC64LE9-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
4892 ; PC64LE9-NEXT:    lfd 1, .LCPI73_0@toc@l(3)
4893 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4894 ; PC64LE9-NEXT:    bl log2
4895 ; PC64LE9-NEXT:    nop
4896 ; PC64LE9-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
4897 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4898 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4899 ; PC64LE9-NEXT:    lfs 1, .LCPI73_1@toc@l(3)
4900 ; PC64LE9-NEXT:    bl log2
4901 ; PC64LE9-NEXT:    nop
4902 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4903 ; PC64LE9-NEXT:    addis 3, 2, .LCPI73_2@toc@ha
4904 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4905 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
4906 ; PC64LE9-NEXT:    lfd 1, .LCPI73_2@toc@l(3)
4907 ; PC64LE9-NEXT:    bl log2
4908 ; PC64LE9-NEXT:    nop
4909 ; PC64LE9-NEXT:    fmr 3, 1
4910 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
4911 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4912 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4913 ; PC64LE9-NEXT:    addi 1, 1, 64
4914 ; PC64LE9-NEXT:    ld 0, 16(1)
4915 ; PC64LE9-NEXT:    mtlr 0
4916 ; PC64LE9-NEXT:    blr
4917 entry:
4918   %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
4919                           <3 x double> <double 42.0, double 42.1, double 42.2>,
4920                           metadata !"round.dynamic",
4921                           metadata !"fpexcept.strict")
4922   ret <3 x double> %log2
4925 define <4 x double> @constrained_vector_log2_v4f64() {
4926 ; PC64LE-LABEL: constrained_vector_log2_v4f64:
4927 ; PC64LE:       # %bb.0: # %entry
4928 ; PC64LE-NEXT:    mflr 0
4929 ; PC64LE-NEXT:    std 0, 16(1)
4930 ; PC64LE-NEXT:    stdu 1, -80(1)
4931 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
4932 ; PC64LE-NEXT:    .cfi_offset lr, 16
4933 ; PC64LE-NEXT:    .cfi_offset v31, -16
4934 ; PC64LE-NEXT:    li 3, 64
4935 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4936 ; PC64LE-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
4937 ; PC64LE-NEXT:    lfd 1, .LCPI74_0@toc@l(3)
4938 ; PC64LE-NEXT:    bl log2
4939 ; PC64LE-NEXT:    nop
4940 ; PC64LE-NEXT:    li 3, 48
4941 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4942 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4943 ; PC64LE-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
4944 ; PC64LE-NEXT:    lfd 1, .LCPI74_1@toc@l(3)
4945 ; PC64LE-NEXT:    bl log2
4946 ; PC64LE-NEXT:    nop
4947 ; PC64LE-NEXT:    li 3, 48
4948 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4949 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4950 ; PC64LE-NEXT:    addis 3, 2, .LCPI74_2@toc@ha
4951 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
4952 ; PC64LE-NEXT:    lfd 1, .LCPI74_2@toc@l(3)
4953 ; PC64LE-NEXT:    bl log2
4954 ; PC64LE-NEXT:    nop
4955 ; PC64LE-NEXT:    li 3, 48
4956 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4957 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4958 ; PC64LE-NEXT:    addis 3, 2, .LCPI74_3@toc@ha
4959 ; PC64LE-NEXT:    lfs 1, .LCPI74_3@toc@l(3)
4960 ; PC64LE-NEXT:    bl log2
4961 ; PC64LE-NEXT:    nop
4962 ; PC64LE-NEXT:    li 3, 48
4963 ; PC64LE-NEXT:    vmr 3, 31
4964 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4965 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4966 ; PC64LE-NEXT:    li 3, 64
4967 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4968 ; PC64LE-NEXT:    xxmrghd 34, 0, 1
4969 ; PC64LE-NEXT:    addi 1, 1, 80
4970 ; PC64LE-NEXT:    ld 0, 16(1)
4971 ; PC64LE-NEXT:    mtlr 0
4972 ; PC64LE-NEXT:    blr
4974 ; PC64LE9-LABEL: constrained_vector_log2_v4f64:
4975 ; PC64LE9:       # %bb.0: # %entry
4976 ; PC64LE9-NEXT:    mflr 0
4977 ; PC64LE9-NEXT:    std 0, 16(1)
4978 ; PC64LE9-NEXT:    stdu 1, -64(1)
4979 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
4980 ; PC64LE9-NEXT:    .cfi_offset lr, 16
4981 ; PC64LE9-NEXT:    .cfi_offset v31, -16
4982 ; PC64LE9-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
4983 ; PC64LE9-NEXT:    lfd 1, .LCPI74_0@toc@l(3)
4984 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4985 ; PC64LE9-NEXT:    bl log2
4986 ; PC64LE9-NEXT:    nop
4987 ; PC64LE9-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
4988 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4989 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4990 ; PC64LE9-NEXT:    lfd 1, .LCPI74_1@toc@l(3)
4991 ; PC64LE9-NEXT:    bl log2
4992 ; PC64LE9-NEXT:    nop
4993 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4994 ; PC64LE9-NEXT:    addis 3, 2, .LCPI74_2@toc@ha
4995 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4996 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
4997 ; PC64LE9-NEXT:    lfd 1, .LCPI74_2@toc@l(3)
4998 ; PC64LE9-NEXT:    bl log2
4999 ; PC64LE9-NEXT:    nop
5000 ; PC64LE9-NEXT:    addis 3, 2, .LCPI74_3@toc@ha
5001 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5002 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5003 ; PC64LE9-NEXT:    lfs 1, .LCPI74_3@toc@l(3)
5004 ; PC64LE9-NEXT:    bl log2
5005 ; PC64LE9-NEXT:    nop
5006 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5007 ; PC64LE9-NEXT:    vmr 3, 31
5008 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
5009 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5010 ; PC64LE9-NEXT:    xxmrghd 34, 0, 1
5011 ; PC64LE9-NEXT:    addi 1, 1, 64
5012 ; PC64LE9-NEXT:    ld 0, 16(1)
5013 ; PC64LE9-NEXT:    mtlr 0
5014 ; PC64LE9-NEXT:    blr
5015 entry:
5016   %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64(
5017                               <4 x double> <double 42.0, double 42.1,
5018                                             double 42.2, double 42.3>,
5019                               metadata !"round.dynamic",
5020                               metadata !"fpexcept.strict")
5021   ret <4 x double> %log2
5024 define <1 x float> @constrained_vector_rint_v1f32() {
5025 ; PC64LE-LABEL: constrained_vector_rint_v1f32:
5026 ; PC64LE:       # %bb.0: # %entry
5027 ; PC64LE-NEXT:    mflr 0
5028 ; PC64LE-NEXT:    std 0, 16(1)
5029 ; PC64LE-NEXT:    stdu 1, -32(1)
5030 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
5031 ; PC64LE-NEXT:    .cfi_offset lr, 16
5032 ; PC64LE-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
5033 ; PC64LE-NEXT:    lfs 1, .LCPI75_0@toc@l(3)
5034 ; PC64LE-NEXT:    bl rintf
5035 ; PC64LE-NEXT:    nop
5036 ; PC64LE-NEXT:    xscvdpspn 0, 1
5037 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
5038 ; PC64LE-NEXT:    addi 1, 1, 32
5039 ; PC64LE-NEXT:    ld 0, 16(1)
5040 ; PC64LE-NEXT:    mtlr 0
5041 ; PC64LE-NEXT:    blr
5043 ; PC64LE9-LABEL: constrained_vector_rint_v1f32:
5044 ; PC64LE9:       # %bb.0: # %entry
5045 ; PC64LE9-NEXT:    mflr 0
5046 ; PC64LE9-NEXT:    std 0, 16(1)
5047 ; PC64LE9-NEXT:    stdu 1, -32(1)
5048 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
5049 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5050 ; PC64LE9-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
5051 ; PC64LE9-NEXT:    lfs 1, .LCPI75_0@toc@l(3)
5052 ; PC64LE9-NEXT:    bl rintf
5053 ; PC64LE9-NEXT:    nop
5054 ; PC64LE9-NEXT:    xscvdpspn 0, 1
5055 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
5056 ; PC64LE9-NEXT:    addi 1, 1, 32
5057 ; PC64LE9-NEXT:    ld 0, 16(1)
5058 ; PC64LE9-NEXT:    mtlr 0
5059 ; PC64LE9-NEXT:    blr
5060 entry:
5061   %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
5062                              <1 x float> <float 42.0>,
5063                              metadata !"round.dynamic",
5064                              metadata !"fpexcept.strict")
5065   ret <1 x float> %rint
5068 define <2 x double> @constrained_vector_rint_v2f64() {
5069 ; PC64LE-LABEL: constrained_vector_rint_v2f64:
5070 ; PC64LE:       # %bb.0: # %entry
5071 ; PC64LE-NEXT:    mflr 0
5072 ; PC64LE-NEXT:    std 0, 16(1)
5073 ; PC64LE-NEXT:    stdu 1, -64(1)
5074 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
5075 ; PC64LE-NEXT:    .cfi_offset lr, 16
5076 ; PC64LE-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
5077 ; PC64LE-NEXT:    lfd 1, .LCPI76_0@toc@l(3)
5078 ; PC64LE-NEXT:    bl rint
5079 ; PC64LE-NEXT:    nop
5080 ; PC64LE-NEXT:    li 3, 48
5081 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5082 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
5083 ; PC64LE-NEXT:    addis 3, 2, .LCPI76_1@toc@ha
5084 ; PC64LE-NEXT:    lfs 1, .LCPI76_1@toc@l(3)
5085 ; PC64LE-NEXT:    bl rint
5086 ; PC64LE-NEXT:    nop
5087 ; PC64LE-NEXT:    li 3, 48
5088 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5089 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
5090 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
5091 ; PC64LE-NEXT:    addi 1, 1, 64
5092 ; PC64LE-NEXT:    ld 0, 16(1)
5093 ; PC64LE-NEXT:    mtlr 0
5094 ; PC64LE-NEXT:    blr
5096 ; PC64LE9-LABEL: constrained_vector_rint_v2f64:
5097 ; PC64LE9:       # %bb.0: # %entry
5098 ; PC64LE9-NEXT:    mflr 0
5099 ; PC64LE9-NEXT:    std 0, 16(1)
5100 ; PC64LE9-NEXT:    stdu 1, -48(1)
5101 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
5102 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5103 ; PC64LE9-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
5104 ; PC64LE9-NEXT:    lfd 1, .LCPI76_0@toc@l(3)
5105 ; PC64LE9-NEXT:    bl rint
5106 ; PC64LE9-NEXT:    nop
5107 ; PC64LE9-NEXT:    addis 3, 2, .LCPI76_1@toc@ha
5108 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5109 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5110 ; PC64LE9-NEXT:    lfs 1, .LCPI76_1@toc@l(3)
5111 ; PC64LE9-NEXT:    bl rint
5112 ; PC64LE9-NEXT:    nop
5113 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5114 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5115 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
5116 ; PC64LE9-NEXT:    addi 1, 1, 48
5117 ; PC64LE9-NEXT:    ld 0, 16(1)
5118 ; PC64LE9-NEXT:    mtlr 0
5119 ; PC64LE9-NEXT:    blr
5120 entry:
5121   %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
5122                         <2 x double> <double 42.1, double 42.0>,
5123                         metadata !"round.dynamic",
5124                         metadata !"fpexcept.strict")
5125   ret <2 x double> %rint
5128 define <3 x float> @constrained_vector_rint_v3f32() {
5129 ; PC64LE-LABEL: constrained_vector_rint_v3f32:
5130 ; PC64LE:       # %bb.0: # %entry
5131 ; PC64LE-NEXT:    mflr 0
5132 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
5133 ; PC64LE-NEXT:    .cfi_offset lr, 16
5134 ; PC64LE-NEXT:    .cfi_offset f30, -16
5135 ; PC64LE-NEXT:    .cfi_offset f31, -8
5136 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5137 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5138 ; PC64LE-NEXT:    std 0, 16(1)
5139 ; PC64LE-NEXT:    stdu 1, -48(1)
5140 ; PC64LE-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
5141 ; PC64LE-NEXT:    lfs 1, .LCPI77_0@toc@l(3)
5142 ; PC64LE-NEXT:    bl rintf
5143 ; PC64LE-NEXT:    nop
5144 ; PC64LE-NEXT:    addis 3, 2, .LCPI77_1@toc@ha
5145 ; PC64LE-NEXT:    fmr 31, 1
5146 ; PC64LE-NEXT:    lfs 1, .LCPI77_1@toc@l(3)
5147 ; PC64LE-NEXT:    bl rintf
5148 ; PC64LE-NEXT:    nop
5149 ; PC64LE-NEXT:    addis 3, 2, .LCPI77_2@toc@ha
5150 ; PC64LE-NEXT:    fmr 30, 1
5151 ; PC64LE-NEXT:    lfs 1, .LCPI77_2@toc@l(3)
5152 ; PC64LE-NEXT:    bl rintf
5153 ; PC64LE-NEXT:    nop
5154 ; PC64LE-NEXT:    xscvdpspn 0, 30
5155 ; PC64LE-NEXT:    addis 3, 2, .LCPI77_3@toc@ha
5156 ; PC64LE-NEXT:    xscvdpspn 1, 1
5157 ; PC64LE-NEXT:    addi 3, 3, .LCPI77_3@toc@l
5158 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
5159 ; PC64LE-NEXT:    xscvdpspn 0, 31
5160 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
5161 ; PC64LE-NEXT:    vmrglw 2, 2, 3
5162 ; PC64LE-NEXT:    lvx 3, 0, 3
5163 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
5164 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
5165 ; PC64LE-NEXT:    addi 1, 1, 48
5166 ; PC64LE-NEXT:    ld 0, 16(1)
5167 ; PC64LE-NEXT:    mtlr 0
5168 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5169 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5170 ; PC64LE-NEXT:    blr
5172 ; PC64LE9-LABEL: constrained_vector_rint_v3f32:
5173 ; PC64LE9:       # %bb.0: # %entry
5174 ; PC64LE9-NEXT:    mflr 0
5175 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
5176 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5177 ; PC64LE9-NEXT:    .cfi_offset f30, -16
5178 ; PC64LE9-NEXT:    .cfi_offset f31, -8
5179 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5180 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5181 ; PC64LE9-NEXT:    std 0, 16(1)
5182 ; PC64LE9-NEXT:    stdu 1, -48(1)
5183 ; PC64LE9-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
5184 ; PC64LE9-NEXT:    lfs 1, .LCPI77_0@toc@l(3)
5185 ; PC64LE9-NEXT:    bl rintf
5186 ; PC64LE9-NEXT:    nop
5187 ; PC64LE9-NEXT:    addis 3, 2, .LCPI77_1@toc@ha
5188 ; PC64LE9-NEXT:    fmr 31, 1
5189 ; PC64LE9-NEXT:    lfs 1, .LCPI77_1@toc@l(3)
5190 ; PC64LE9-NEXT:    bl rintf
5191 ; PC64LE9-NEXT:    nop
5192 ; PC64LE9-NEXT:    addis 3, 2, .LCPI77_2@toc@ha
5193 ; PC64LE9-NEXT:    fmr 30, 1
5194 ; PC64LE9-NEXT:    lfs 1, .LCPI77_2@toc@l(3)
5195 ; PC64LE9-NEXT:    bl rintf
5196 ; PC64LE9-NEXT:    nop
5197 ; PC64LE9-NEXT:    xscvdpspn 0, 1
5198 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
5199 ; PC64LE9-NEXT:    xscvdpspn 0, 30
5200 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
5201 ; PC64LE9-NEXT:    xscvdpspn 0, 31
5202 ; PC64LE9-NEXT:    addis 3, 2, .LCPI77_3@toc@ha
5203 ; PC64LE9-NEXT:    addi 3, 3, .LCPI77_3@toc@l
5204 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
5205 ; PC64LE9-NEXT:    lxvx 35, 0, 3
5206 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
5207 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
5208 ; PC64LE9-NEXT:    addi 1, 1, 48
5209 ; PC64LE9-NEXT:    ld 0, 16(1)
5210 ; PC64LE9-NEXT:    mtlr 0
5211 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5212 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5213 ; PC64LE9-NEXT:    blr
5214  entry:
5215   %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
5216                               <3 x float> <float 42.0, float 43.0, float 44.0>,
5217                               metadata !"round.dynamic",
5218                               metadata !"fpexcept.strict")
5219   ret <3 x float> %rint
5222 define <3 x double> @constrained_vector_rint_v3f64() {
5223 ; PC64LE-LABEL: constrained_vector_rint_v3f64:
5224 ; PC64LE:       # %bb.0: # %entry
5225 ; PC64LE-NEXT:    mflr 0
5226 ; PC64LE-NEXT:    std 0, 16(1)
5227 ; PC64LE-NEXT:    stdu 1, -80(1)
5228 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
5229 ; PC64LE-NEXT:    .cfi_offset lr, 16
5230 ; PC64LE-NEXT:    .cfi_offset v31, -16
5231 ; PC64LE-NEXT:    li 3, 64
5232 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
5233 ; PC64LE-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
5234 ; PC64LE-NEXT:    lfd 1, .LCPI78_0@toc@l(3)
5235 ; PC64LE-NEXT:    bl rint
5236 ; PC64LE-NEXT:    nop
5237 ; PC64LE-NEXT:    li 3, 48
5238 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5239 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
5240 ; PC64LE-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
5241 ; PC64LE-NEXT:    lfs 1, .LCPI78_1@toc@l(3)
5242 ; PC64LE-NEXT:    bl rint
5243 ; PC64LE-NEXT:    nop
5244 ; PC64LE-NEXT:    li 3, 48
5245 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5246 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
5247 ; PC64LE-NEXT:    addis 3, 2, .LCPI78_2@toc@ha
5248 ; PC64LE-NEXT:    xxmrghd 63, 0, 1
5249 ; PC64LE-NEXT:    lfd 1, .LCPI78_2@toc@l(3)
5250 ; PC64LE-NEXT:    bl rint
5251 ; PC64LE-NEXT:    nop
5252 ; PC64LE-NEXT:    li 3, 64
5253 ; PC64LE-NEXT:    fmr 3, 1
5254 ; PC64LE-NEXT:    xxlor 1, 63, 63
5255 ; PC64LE-NEXT:    xxlor 2, 63, 63
5256 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
5257 ; PC64LE-NEXT:    addi 1, 1, 80
5258 ; PC64LE-NEXT:    ld 0, 16(1)
5259 ; PC64LE-NEXT:    mtlr 0
5260 ; PC64LE-NEXT:    blr
5262 ; PC64LE9-LABEL: constrained_vector_rint_v3f64:
5263 ; PC64LE9:       # %bb.0: # %entry
5264 ; PC64LE9-NEXT:    mflr 0
5265 ; PC64LE9-NEXT:    std 0, 16(1)
5266 ; PC64LE9-NEXT:    stdu 1, -64(1)
5267 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
5268 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5269 ; PC64LE9-NEXT:    .cfi_offset v31, -16
5270 ; PC64LE9-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
5271 ; PC64LE9-NEXT:    lfd 1, .LCPI78_0@toc@l(3)
5272 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
5273 ; PC64LE9-NEXT:    bl rint
5274 ; PC64LE9-NEXT:    nop
5275 ; PC64LE9-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
5276 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5277 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5278 ; PC64LE9-NEXT:    lfs 1, .LCPI78_1@toc@l(3)
5279 ; PC64LE9-NEXT:    bl rint
5280 ; PC64LE9-NEXT:    nop
5281 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5282 ; PC64LE9-NEXT:    addis 3, 2, .LCPI78_2@toc@ha
5283 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5284 ; PC64LE9-NEXT:    xxmrghd 63, 0, 1
5285 ; PC64LE9-NEXT:    lfd 1, .LCPI78_2@toc@l(3)
5286 ; PC64LE9-NEXT:    bl rint
5287 ; PC64LE9-NEXT:    nop
5288 ; PC64LE9-NEXT:    fmr 3, 1
5289 ; PC64LE9-NEXT:    xscpsgndp 1, 63, 63
5290 ; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
5291 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
5292 ; PC64LE9-NEXT:    addi 1, 1, 64
5293 ; PC64LE9-NEXT:    ld 0, 16(1)
5294 ; PC64LE9-NEXT:    mtlr 0
5295 ; PC64LE9-NEXT:    blr
5296 entry:
5297   %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
5298                           <3 x double> <double 42.0, double 42.1, double 42.2>,
5299                           metadata !"round.dynamic",
5300                           metadata !"fpexcept.strict")
5301   ret <3 x double> %rint
5304 define <4 x double> @constrained_vector_rint_v4f64() {
5305 ; PC64LE-LABEL: constrained_vector_rint_v4f64:
5306 ; PC64LE:       # %bb.0: # %entry
5307 ; PC64LE-NEXT:    mflr 0
5308 ; PC64LE-NEXT:    std 0, 16(1)
5309 ; PC64LE-NEXT:    stdu 1, -80(1)
5310 ; PC64LE-NEXT:    .cfi_def_cfa_offset 80
5311 ; PC64LE-NEXT:    .cfi_offset lr, 16
5312 ; PC64LE-NEXT:    .cfi_offset v31, -16
5313 ; PC64LE-NEXT:    li 3, 64
5314 ; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
5315 ; PC64LE-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
5316 ; PC64LE-NEXT:    lfd 1, .LCPI79_0@toc@l(3)
5317 ; PC64LE-NEXT:    bl rint
5318 ; PC64LE-NEXT:    nop
5319 ; PC64LE-NEXT:    li 3, 48
5320 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5321 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
5322 ; PC64LE-NEXT:    addis 3, 2, .LCPI79_1@toc@ha
5323 ; PC64LE-NEXT:    lfd 1, .LCPI79_1@toc@l(3)
5324 ; PC64LE-NEXT:    bl rint
5325 ; PC64LE-NEXT:    nop
5326 ; PC64LE-NEXT:    li 3, 48
5327 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5328 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
5329 ; PC64LE-NEXT:    addis 3, 2, .LCPI79_2@toc@ha
5330 ; PC64LE-NEXT:    xxmrghd 63, 1, 0
5331 ; PC64LE-NEXT:    lfd 1, .LCPI79_2@toc@l(3)
5332 ; PC64LE-NEXT:    bl rint
5333 ; PC64LE-NEXT:    nop
5334 ; PC64LE-NEXT:    li 3, 48
5335 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5336 ; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
5337 ; PC64LE-NEXT:    addis 3, 2, .LCPI79_3@toc@ha
5338 ; PC64LE-NEXT:    lfd 1, .LCPI79_3@toc@l(3)
5339 ; PC64LE-NEXT:    bl rint
5340 ; PC64LE-NEXT:    nop
5341 ; PC64LE-NEXT:    li 3, 48
5342 ; PC64LE-NEXT:    vmr 2, 31
5343 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5344 ; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
5345 ; PC64LE-NEXT:    li 3, 64
5346 ; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
5347 ; PC64LE-NEXT:    xxmrghd 35, 1, 0
5348 ; PC64LE-NEXT:    addi 1, 1, 80
5349 ; PC64LE-NEXT:    ld 0, 16(1)
5350 ; PC64LE-NEXT:    mtlr 0
5351 ; PC64LE-NEXT:    blr
5353 ; PC64LE9-LABEL: constrained_vector_rint_v4f64:
5354 ; PC64LE9:       # %bb.0: # %entry
5355 ; PC64LE9-NEXT:    mflr 0
5356 ; PC64LE9-NEXT:    std 0, 16(1)
5357 ; PC64LE9-NEXT:    stdu 1, -64(1)
5358 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
5359 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5360 ; PC64LE9-NEXT:    .cfi_offset v31, -16
5361 ; PC64LE9-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
5362 ; PC64LE9-NEXT:    lfd 1, .LCPI79_0@toc@l(3)
5363 ; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
5364 ; PC64LE9-NEXT:    bl rint
5365 ; PC64LE9-NEXT:    nop
5366 ; PC64LE9-NEXT:    addis 3, 2, .LCPI79_1@toc@ha
5367 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5368 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5369 ; PC64LE9-NEXT:    lfd 1, .LCPI79_1@toc@l(3)
5370 ; PC64LE9-NEXT:    bl rint
5371 ; PC64LE9-NEXT:    nop
5372 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5373 ; PC64LE9-NEXT:    addis 3, 2, .LCPI79_2@toc@ha
5374 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5375 ; PC64LE9-NEXT:    xxmrghd 63, 1, 0
5376 ; PC64LE9-NEXT:    lfd 1, .LCPI79_2@toc@l(3)
5377 ; PC64LE9-NEXT:    bl rint
5378 ; PC64LE9-NEXT:    nop
5379 ; PC64LE9-NEXT:    addis 3, 2, .LCPI79_3@toc@ha
5380 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5381 ; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5382 ; PC64LE9-NEXT:    lfd 1, .LCPI79_3@toc@l(3)
5383 ; PC64LE9-NEXT:    bl rint
5384 ; PC64LE9-NEXT:    nop
5385 ; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5386 ; PC64LE9-NEXT:    vmr 2, 31
5387 ; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
5388 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5389 ; PC64LE9-NEXT:    xxmrghd 35, 1, 0
5390 ; PC64LE9-NEXT:    addi 1, 1, 64
5391 ; PC64LE9-NEXT:    ld 0, 16(1)
5392 ; PC64LE9-NEXT:    mtlr 0
5393 ; PC64LE9-NEXT:    blr
5394 entry:
5395   %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
5396                         <4 x double> <double 42.1, double 42.2,
5397                                       double 42.3, double 42.4>,
5398                         metadata !"round.dynamic",
5399                         metadata !"fpexcept.strict")
5400   ret <4 x double> %rint
5403 define <1 x float> @constrained_vector_nearbyint_v1f32() {
5404 ; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
5405 ; PC64LE:       # %bb.0: # %entry
5406 ; PC64LE-NEXT:    mflr 0
5407 ; PC64LE-NEXT:    std 0, 16(1)
5408 ; PC64LE-NEXT:    stdu 1, -32(1)
5409 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
5410 ; PC64LE-NEXT:    .cfi_offset lr, 16
5411 ; PC64LE-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
5412 ; PC64LE-NEXT:    lfs 1, .LCPI80_0@toc@l(3)
5413 ; PC64LE-NEXT:    bl nearbyintf
5414 ; PC64LE-NEXT:    nop
5415 ; PC64LE-NEXT:    xscvdpspn 0, 1
5416 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
5417 ; PC64LE-NEXT:    addi 1, 1, 32
5418 ; PC64LE-NEXT:    ld 0, 16(1)
5419 ; PC64LE-NEXT:    mtlr 0
5420 ; PC64LE-NEXT:    blr
5422 ; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32:
5423 ; PC64LE9:       # %bb.0: # %entry
5424 ; PC64LE9-NEXT:    mflr 0
5425 ; PC64LE9-NEXT:    std 0, 16(1)
5426 ; PC64LE9-NEXT:    stdu 1, -32(1)
5427 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
5428 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5429 ; PC64LE9-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
5430 ; PC64LE9-NEXT:    lfs 1, .LCPI80_0@toc@l(3)
5431 ; PC64LE9-NEXT:    bl nearbyintf
5432 ; PC64LE9-NEXT:    nop
5433 ; PC64LE9-NEXT:    xscvdpspn 0, 1
5434 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
5435 ; PC64LE9-NEXT:    addi 1, 1, 32
5436 ; PC64LE9-NEXT:    ld 0, 16(1)
5437 ; PC64LE9-NEXT:    mtlr 0
5438 ; PC64LE9-NEXT:    blr
5439 entry:
5440   %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
5441                                <1 x float> <float 42.0>,
5442                                metadata !"round.dynamic",
5443                                metadata !"fpexcept.strict")
5444   ret <1 x float> %nearby
5447 define <2 x double> @constrained_vector_nearbyint_v2f64() {
5448 ; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
5449 ; PC64LE:       # %bb.0: # %entry
5450 ; PC64LE-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
5451 ; PC64LE-NEXT:    addi 3, 3, .LCPI81_0@toc@l
5452 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
5453 ; PC64LE-NEXT:    xxswapd 0, 0
5454 ; PC64LE-NEXT:    xvrdpic 34, 0
5455 ; PC64LE-NEXT:    blr
5457 ; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64:
5458 ; PC64LE9:       # %bb.0: # %entry
5459 ; PC64LE9-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
5460 ; PC64LE9-NEXT:    addi 3, 3, .LCPI81_0@toc@l
5461 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5462 ; PC64LE9-NEXT:    xvrdpic 34, 0
5463 ; PC64LE9-NEXT:    blr
5464 entry:
5465   %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
5466                                 <2 x double> <double 42.1, double 42.0>,
5467                                 metadata !"round.dynamic",
5468                                 metadata !"fpexcept.strict")
5469   ret <2 x double> %nearby
5472 define <3 x float> @constrained_vector_nearbyint_v3f32() {
5473 ; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
5474 ; PC64LE:       # %bb.0: # %entry
5475 ; PC64LE-NEXT:    mflr 0
5476 ; PC64LE-NEXT:    .cfi_def_cfa_offset 48
5477 ; PC64LE-NEXT:    .cfi_offset lr, 16
5478 ; PC64LE-NEXT:    .cfi_offset f30, -16
5479 ; PC64LE-NEXT:    .cfi_offset f31, -8
5480 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5481 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5482 ; PC64LE-NEXT:    std 0, 16(1)
5483 ; PC64LE-NEXT:    stdu 1, -48(1)
5484 ; PC64LE-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
5485 ; PC64LE-NEXT:    lfs 1, .LCPI82_0@toc@l(3)
5486 ; PC64LE-NEXT:    bl nearbyintf
5487 ; PC64LE-NEXT:    nop
5488 ; PC64LE-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
5489 ; PC64LE-NEXT:    fmr 31, 1
5490 ; PC64LE-NEXT:    lfs 1, .LCPI82_1@toc@l(3)
5491 ; PC64LE-NEXT:    bl nearbyintf
5492 ; PC64LE-NEXT:    nop
5493 ; PC64LE-NEXT:    addis 3, 2, .LCPI82_2@toc@ha
5494 ; PC64LE-NEXT:    fmr 30, 1
5495 ; PC64LE-NEXT:    lfs 1, .LCPI82_2@toc@l(3)
5496 ; PC64LE-NEXT:    bl nearbyintf
5497 ; PC64LE-NEXT:    nop
5498 ; PC64LE-NEXT:    xscvdpspn 0, 30
5499 ; PC64LE-NEXT:    addis 3, 2, .LCPI82_3@toc@ha
5500 ; PC64LE-NEXT:    xscvdpspn 1, 1
5501 ; PC64LE-NEXT:    addi 3, 3, .LCPI82_3@toc@l
5502 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
5503 ; PC64LE-NEXT:    xscvdpspn 0, 31
5504 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
5505 ; PC64LE-NEXT:    vmrglw 2, 2, 3
5506 ; PC64LE-NEXT:    lvx 3, 0, 3
5507 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
5508 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
5509 ; PC64LE-NEXT:    addi 1, 1, 48
5510 ; PC64LE-NEXT:    ld 0, 16(1)
5511 ; PC64LE-NEXT:    mtlr 0
5512 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5513 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5514 ; PC64LE-NEXT:    blr
5516 ; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
5517 ; PC64LE9:       # %bb.0: # %entry
5518 ; PC64LE9-NEXT:    mflr 0
5519 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 48
5520 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5521 ; PC64LE9-NEXT:    .cfi_offset f30, -16
5522 ; PC64LE9-NEXT:    .cfi_offset f31, -8
5523 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5524 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5525 ; PC64LE9-NEXT:    std 0, 16(1)
5526 ; PC64LE9-NEXT:    stdu 1, -48(1)
5527 ; PC64LE9-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
5528 ; PC64LE9-NEXT:    lfs 1, .LCPI82_0@toc@l(3)
5529 ; PC64LE9-NEXT:    bl nearbyintf
5530 ; PC64LE9-NEXT:    nop
5531 ; PC64LE9-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
5532 ; PC64LE9-NEXT:    fmr 31, 1
5533 ; PC64LE9-NEXT:    lfs 1, .LCPI82_1@toc@l(3)
5534 ; PC64LE9-NEXT:    bl nearbyintf
5535 ; PC64LE9-NEXT:    nop
5536 ; PC64LE9-NEXT:    addis 3, 2, .LCPI82_2@toc@ha
5537 ; PC64LE9-NEXT:    fmr 30, 1
5538 ; PC64LE9-NEXT:    lfs 1, .LCPI82_2@toc@l(3)
5539 ; PC64LE9-NEXT:    bl nearbyintf
5540 ; PC64LE9-NEXT:    nop
5541 ; PC64LE9-NEXT:    xscvdpspn 0, 1
5542 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
5543 ; PC64LE9-NEXT:    xscvdpspn 0, 30
5544 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
5545 ; PC64LE9-NEXT:    xscvdpspn 0, 31
5546 ; PC64LE9-NEXT:    addis 3, 2, .LCPI82_3@toc@ha
5547 ; PC64LE9-NEXT:    addi 3, 3, .LCPI82_3@toc@l
5548 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
5549 ; PC64LE9-NEXT:    lxvx 35, 0, 3
5550 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
5551 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
5552 ; PC64LE9-NEXT:    addi 1, 1, 48
5553 ; PC64LE9-NEXT:    ld 0, 16(1)
5554 ; PC64LE9-NEXT:    mtlr 0
5555 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5556 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5557 ; PC64LE9-NEXT:    blr
5558 entry:
5559   %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
5560                               <3 x float> <float 42.0, float 43.0, float 44.0>,
5561                               metadata !"round.dynamic",
5562                               metadata !"fpexcept.strict")
5563   ret <3 x float> %nearby
5566 define <3 x double> @constrained_vector_nearby_v3f64() {
5567 ; PC64LE-LABEL: constrained_vector_nearby_v3f64:
5568 ; PC64LE:       # %bb.0: # %entry
5569 ; PC64LE-NEXT:    mflr 0
5570 ; PC64LE-NEXT:    std 0, 16(1)
5571 ; PC64LE-NEXT:    stdu 1, -32(1)
5572 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
5573 ; PC64LE-NEXT:    .cfi_offset lr, 16
5574 ; PC64LE-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
5575 ; PC64LE-NEXT:    lfd 1, .LCPI83_0@toc@l(3)
5576 ; PC64LE-NEXT:    bl nearbyint
5577 ; PC64LE-NEXT:    nop
5578 ; PC64LE-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
5579 ; PC64LE-NEXT:    fmr 3, 1
5580 ; PC64LE-NEXT:    addi 3, 3, .LCPI83_1@toc@l
5581 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
5582 ; PC64LE-NEXT:    xxswapd 0, 0
5583 ; PC64LE-NEXT:    xvrdpic 2, 0
5584 ; PC64LE-NEXT:    xxswapd 0, 2
5585 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5586 ; PC64LE-NEXT:    fmr 1, 0
5587 ; PC64LE-NEXT:    addi 1, 1, 32
5588 ; PC64LE-NEXT:    ld 0, 16(1)
5589 ; PC64LE-NEXT:    mtlr 0
5590 ; PC64LE-NEXT:    blr
5592 ; PC64LE9-LABEL: constrained_vector_nearby_v3f64:
5593 ; PC64LE9:       # %bb.0: # %entry
5594 ; PC64LE9-NEXT:    mflr 0
5595 ; PC64LE9-NEXT:    std 0, 16(1)
5596 ; PC64LE9-NEXT:    stdu 1, -32(1)
5597 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
5598 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5599 ; PC64LE9-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
5600 ; PC64LE9-NEXT:    lfd 1, .LCPI83_0@toc@l(3)
5601 ; PC64LE9-NEXT:    bl nearbyint
5602 ; PC64LE9-NEXT:    nop
5603 ; PC64LE9-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
5604 ; PC64LE9-NEXT:    addi 3, 3, .LCPI83_1@toc@l
5605 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5606 ; PC64LE9-NEXT:    xvrdpic 2, 0
5607 ; PC64LE9-NEXT:    fmr 3, 1
5608 ; PC64LE9-NEXT:    xxswapd 1, 2
5609 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
5610 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5611 ; PC64LE9-NEXT:    addi 1, 1, 32
5612 ; PC64LE9-NEXT:    ld 0, 16(1)
5613 ; PC64LE9-NEXT:    mtlr 0
5614 ; PC64LE9-NEXT:    blr
5615 entry:
5616   %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
5617                           <3 x double> <double 42.0, double 42.1, double 42.2>,
5618                           metadata !"round.dynamic",
5619                           metadata !"fpexcept.strict")
5620   ret <3 x double> %nearby
5623 define <4 x double> @constrained_vector_nearbyint_v4f64() {
5624 ; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
5625 ; PC64LE:       # %bb.0: # %entry
5626 ; PC64LE-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
5627 ; PC64LE-NEXT:    addis 4, 2, .LCPI84_1@toc@ha
5628 ; PC64LE-NEXT:    addi 3, 3, .LCPI84_0@toc@l
5629 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
5630 ; PC64LE-NEXT:    addi 3, 4, .LCPI84_1@toc@l
5631 ; PC64LE-NEXT:    lxvd2x 1, 0, 3
5632 ; PC64LE-NEXT:    xxswapd 0, 0
5633 ; PC64LE-NEXT:    xxswapd 1, 1
5634 ; PC64LE-NEXT:    xvrdpic 34, 0
5635 ; PC64LE-NEXT:    xvrdpic 35, 1
5636 ; PC64LE-NEXT:    blr
5638 ; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64:
5639 ; PC64LE9:       # %bb.0: # %entry
5640 ; PC64LE9-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
5641 ; PC64LE9-NEXT:    addi 3, 3, .LCPI84_0@toc@l
5642 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5643 ; PC64LE9-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
5644 ; PC64LE9-NEXT:    addi 3, 3, .LCPI84_1@toc@l
5645 ; PC64LE9-NEXT:    xvrdpic 34, 0
5646 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5647 ; PC64LE9-NEXT:    xvrdpic 35, 0
5648 ; PC64LE9-NEXT:    blr
5649 entry:
5650   %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
5651                                 <4 x double> <double 42.1, double 42.2,
5652                                               double 42.3, double 42.4>,
5653                                 metadata !"round.dynamic",
5654                                 metadata !"fpexcept.strict")
5655   ret <4 x double> %nearby
5658 define <1 x float> @constrained_vector_maxnum_v1f32() {
5659 ; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
5660 ; PC64LE:       # %bb.0: # %entry
5661 ; PC64LE-NEXT:    mflr 0
5662 ; PC64LE-NEXT:    std 0, 16(1)
5663 ; PC64LE-NEXT:    stdu 1, -32(1)
5664 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
5665 ; PC64LE-NEXT:    .cfi_offset lr, 16
5666 ; PC64LE-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
5667 ; PC64LE-NEXT:    addis 4, 2, .LCPI85_1@toc@ha
5668 ; PC64LE-NEXT:    lfs 1, .LCPI85_0@toc@l(3)
5669 ; PC64LE-NEXT:    lfs 2, .LCPI85_1@toc@l(4)
5670 ; PC64LE-NEXT:    bl fmaxf
5671 ; PC64LE-NEXT:    nop
5672 ; PC64LE-NEXT:    xscvdpspn 0, 1
5673 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
5674 ; PC64LE-NEXT:    addi 1, 1, 32
5675 ; PC64LE-NEXT:    ld 0, 16(1)
5676 ; PC64LE-NEXT:    mtlr 0
5677 ; PC64LE-NEXT:    blr
5679 ; PC64LE9-LABEL: constrained_vector_maxnum_v1f32:
5680 ; PC64LE9:       # %bb.0: # %entry
5681 ; PC64LE9-NEXT:    mflr 0
5682 ; PC64LE9-NEXT:    std 0, 16(1)
5683 ; PC64LE9-NEXT:    stdu 1, -32(1)
5684 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
5685 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5686 ; PC64LE9-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
5687 ; PC64LE9-NEXT:    lfs 1, .LCPI85_0@toc@l(3)
5688 ; PC64LE9-NEXT:    addis 3, 2, .LCPI85_1@toc@ha
5689 ; PC64LE9-NEXT:    lfs 2, .LCPI85_1@toc@l(3)
5690 ; PC64LE9-NEXT:    bl fmaxf
5691 ; PC64LE9-NEXT:    nop
5692 ; PC64LE9-NEXT:    xscvdpspn 0, 1
5693 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
5694 ; PC64LE9-NEXT:    addi 1, 1, 32
5695 ; PC64LE9-NEXT:    ld 0, 16(1)
5696 ; PC64LE9-NEXT:    mtlr 0
5697 ; PC64LE9-NEXT:    blr
5698 entry:
5699   %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
5700                                <1 x float> <float 42.0>, <1 x float> <float 41.0>,
5701                                metadata !"round.dynamic",
5702                                metadata !"fpexcept.strict")
5703   ret <1 x float> %max
5706 define <2 x double> @constrained_vector_maxnum_v2f64() {
5707 ; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
5708 ; PC64LE:       # %bb.0: # %entry
5709 ; PC64LE-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
5710 ; PC64LE-NEXT:    addis 4, 2, .LCPI86_1@toc@ha
5711 ; PC64LE-NEXT:    addi 3, 3, .LCPI86_0@toc@l
5712 ; PC64LE-NEXT:    addi 4, 4, .LCPI86_1@toc@l
5713 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
5714 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
5715 ; PC64LE-NEXT:    xxswapd 0, 0
5716 ; PC64LE-NEXT:    xxswapd 1, 1
5717 ; PC64LE-NEXT:    xvmaxdp 34, 1, 0
5718 ; PC64LE-NEXT:    blr
5720 ; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
5721 ; PC64LE9:       # %bb.0: # %entry
5722 ; PC64LE9-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
5723 ; PC64LE9-NEXT:    addi 3, 3, .LCPI86_0@toc@l
5724 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5725 ; PC64LE9-NEXT:    addis 3, 2, .LCPI86_1@toc@ha
5726 ; PC64LE9-NEXT:    addi 3, 3, .LCPI86_1@toc@l
5727 ; PC64LE9-NEXT:    lxvx 1, 0, 3
5728 ; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
5729 ; PC64LE9-NEXT:    blr
5730 entry:
5731   %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(
5732                                 <2 x double> <double 43.0, double 42.0>,
5733                                 <2 x double> <double 41.0, double 40.0>,
5734                                 metadata !"round.dynamic",
5735                                 metadata !"fpexcept.strict")
5736   ret <2 x double> %max
5739 define <3 x float> @constrained_vector_maxnum_v3f32() {
5740 ; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
5741 ; PC64LE:       # %bb.0: # %entry
5742 ; PC64LE-NEXT:    mflr 0
5743 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
5744 ; PC64LE-NEXT:    .cfi_offset lr, 16
5745 ; PC64LE-NEXT:    .cfi_offset f29, -24
5746 ; PC64LE-NEXT:    .cfi_offset f30, -16
5747 ; PC64LE-NEXT:    .cfi_offset f31, -8
5748 ; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5749 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5750 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5751 ; PC64LE-NEXT:    std 0, 16(1)
5752 ; PC64LE-NEXT:    stdu 1, -64(1)
5753 ; PC64LE-NEXT:    addis 4, 2, .LCPI87_1@toc@ha
5754 ; PC64LE-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
5755 ; PC64LE-NEXT:    lfs 31, .LCPI87_1@toc@l(4)
5756 ; PC64LE-NEXT:    lfs 1, .LCPI87_0@toc@l(3)
5757 ; PC64LE-NEXT:    fmr 2, 31
5758 ; PC64LE-NEXT:    bl fmaxf
5759 ; PC64LE-NEXT:    nop
5760 ; PC64LE-NEXT:    addis 3, 2, .LCPI87_2@toc@ha
5761 ; PC64LE-NEXT:    addis 4, 2, .LCPI87_3@toc@ha
5762 ; PC64LE-NEXT:    fmr 30, 1
5763 ; PC64LE-NEXT:    lfs 1, .LCPI87_2@toc@l(3)
5764 ; PC64LE-NEXT:    lfs 2, .LCPI87_3@toc@l(4)
5765 ; PC64LE-NEXT:    bl fmaxf
5766 ; PC64LE-NEXT:    nop
5767 ; PC64LE-NEXT:    fmr 29, 1
5768 ; PC64LE-NEXT:    addis 3, 2, .LCPI87_4@toc@ha
5769 ; PC64LE-NEXT:    fmr 1, 31
5770 ; PC64LE-NEXT:    lfs 2, .LCPI87_4@toc@l(3)
5771 ; PC64LE-NEXT:    bl fmaxf
5772 ; PC64LE-NEXT:    nop
5773 ; PC64LE-NEXT:    xscvdpspn 0, 29
5774 ; PC64LE-NEXT:    addis 3, 2, .LCPI87_5@toc@ha
5775 ; PC64LE-NEXT:    xscvdpspn 1, 1
5776 ; PC64LE-NEXT:    addi 3, 3, .LCPI87_5@toc@l
5777 ; PC64LE-NEXT:    lvx 4, 0, 3
5778 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
5779 ; PC64LE-NEXT:    xscvdpspn 0, 30
5780 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
5781 ; PC64LE-NEXT:    vmrglw 2, 2, 3
5782 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
5783 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
5784 ; PC64LE-NEXT:    addi 1, 1, 64
5785 ; PC64LE-NEXT:    ld 0, 16(1)
5786 ; PC64LE-NEXT:    mtlr 0
5787 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5788 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5789 ; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5790 ; PC64LE-NEXT:    blr
5792 ; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
5793 ; PC64LE9:       # %bb.0: # %entry
5794 ; PC64LE9-NEXT:    mflr 0
5795 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
5796 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5797 ; PC64LE9-NEXT:    .cfi_offset f29, -24
5798 ; PC64LE9-NEXT:    .cfi_offset f30, -16
5799 ; PC64LE9-NEXT:    .cfi_offset f31, -8
5800 ; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5801 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5802 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5803 ; PC64LE9-NEXT:    std 0, 16(1)
5804 ; PC64LE9-NEXT:    stdu 1, -64(1)
5805 ; PC64LE9-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
5806 ; PC64LE9-NEXT:    lfs 1, .LCPI87_0@toc@l(3)
5807 ; PC64LE9-NEXT:    addis 3, 2, .LCPI87_1@toc@ha
5808 ; PC64LE9-NEXT:    lfs 31, .LCPI87_1@toc@l(3)
5809 ; PC64LE9-NEXT:    fmr 2, 31
5810 ; PC64LE9-NEXT:    bl fmaxf
5811 ; PC64LE9-NEXT:    nop
5812 ; PC64LE9-NEXT:    addis 3, 2, .LCPI87_2@toc@ha
5813 ; PC64LE9-NEXT:    fmr 30, 1
5814 ; PC64LE9-NEXT:    lfs 1, .LCPI87_2@toc@l(3)
5815 ; PC64LE9-NEXT:    addis 3, 2, .LCPI87_3@toc@ha
5816 ; PC64LE9-NEXT:    lfs 2, .LCPI87_3@toc@l(3)
5817 ; PC64LE9-NEXT:    bl fmaxf
5818 ; PC64LE9-NEXT:    nop
5819 ; PC64LE9-NEXT:    addis 3, 2, .LCPI87_4@toc@ha
5820 ; PC64LE9-NEXT:    lfs 2, .LCPI87_4@toc@l(3)
5821 ; PC64LE9-NEXT:    fmr 29, 1
5822 ; PC64LE9-NEXT:    fmr 1, 31
5823 ; PC64LE9-NEXT:    bl fmaxf
5824 ; PC64LE9-NEXT:    nop
5825 ; PC64LE9-NEXT:    xscvdpspn 0, 1
5826 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
5827 ; PC64LE9-NEXT:    xscvdpspn 0, 29
5828 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
5829 ; PC64LE9-NEXT:    xscvdpspn 0, 30
5830 ; PC64LE9-NEXT:    addis 3, 2, .LCPI87_5@toc@ha
5831 ; PC64LE9-NEXT:    addi 3, 3, .LCPI87_5@toc@l
5832 ; PC64LE9-NEXT:    lxvx 36, 0, 3
5833 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
5834 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
5835 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
5836 ; PC64LE9-NEXT:    addi 1, 1, 64
5837 ; PC64LE9-NEXT:    ld 0, 16(1)
5838 ; PC64LE9-NEXT:    mtlr 0
5839 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5840 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5841 ; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5842 ; PC64LE9-NEXT:    blr
5843 entry:
5844   %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32(
5845                               <3 x float> <float 43.0, float 44.0, float 45.0>,
5846                               <3 x float> <float 41.0, float 42.0, float 43.0>,
5847                               metadata !"round.dynamic",
5848                               metadata !"fpexcept.strict")
5849   ret <3 x float> %max
5852 define <3 x double> @constrained_vector_max_v3f64() {
5853 ; PC64LE-LABEL: constrained_vector_max_v3f64:
5854 ; PC64LE:       # %bb.0: # %entry
5855 ; PC64LE-NEXT:    mflr 0
5856 ; PC64LE-NEXT:    std 0, 16(1)
5857 ; PC64LE-NEXT:    stdu 1, -32(1)
5858 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
5859 ; PC64LE-NEXT:    .cfi_offset lr, 16
5860 ; PC64LE-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
5861 ; PC64LE-NEXT:    addis 4, 2, .LCPI88_1@toc@ha
5862 ; PC64LE-NEXT:    lfs 1, .LCPI88_0@toc@l(3)
5863 ; PC64LE-NEXT:    lfs 2, .LCPI88_1@toc@l(4)
5864 ; PC64LE-NEXT:    bl fmax
5865 ; PC64LE-NEXT:    nop
5866 ; PC64LE-NEXT:    addis 3, 2, .LCPI88_2@toc@ha
5867 ; PC64LE-NEXT:    addis 4, 2, .LCPI88_3@toc@ha
5868 ; PC64LE-NEXT:    fmr 3, 1
5869 ; PC64LE-NEXT:    addi 3, 3, .LCPI88_2@toc@l
5870 ; PC64LE-NEXT:    addi 4, 4, .LCPI88_3@toc@l
5871 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
5872 ; PC64LE-NEXT:    lxvd2x 2, 0, 4
5873 ; PC64LE-NEXT:    xxswapd 0, 0
5874 ; PC64LE-NEXT:    xxswapd 2, 2
5875 ; PC64LE-NEXT:    xvmaxdp 2, 2, 0
5876 ; PC64LE-NEXT:    xxswapd 0, 2
5877 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5878 ; PC64LE-NEXT:    fmr 1, 0
5879 ; PC64LE-NEXT:    addi 1, 1, 32
5880 ; PC64LE-NEXT:    ld 0, 16(1)
5881 ; PC64LE-NEXT:    mtlr 0
5882 ; PC64LE-NEXT:    blr
5884 ; PC64LE9-LABEL: constrained_vector_max_v3f64:
5885 ; PC64LE9:       # %bb.0: # %entry
5886 ; PC64LE9-NEXT:    mflr 0
5887 ; PC64LE9-NEXT:    std 0, 16(1)
5888 ; PC64LE9-NEXT:    stdu 1, -32(1)
5889 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
5890 ; PC64LE9-NEXT:    .cfi_offset lr, 16
5891 ; PC64LE9-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
5892 ; PC64LE9-NEXT:    lfs 1, .LCPI88_0@toc@l(3)
5893 ; PC64LE9-NEXT:    addis 3, 2, .LCPI88_1@toc@ha
5894 ; PC64LE9-NEXT:    lfs 2, .LCPI88_1@toc@l(3)
5895 ; PC64LE9-NEXT:    bl fmax
5896 ; PC64LE9-NEXT:    nop
5897 ; PC64LE9-NEXT:    addis 3, 2, .LCPI88_2@toc@ha
5898 ; PC64LE9-NEXT:    addi 3, 3, .LCPI88_2@toc@l
5899 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5900 ; PC64LE9-NEXT:    addis 3, 2, .LCPI88_3@toc@ha
5901 ; PC64LE9-NEXT:    addi 3, 3, .LCPI88_3@toc@l
5902 ; PC64LE9-NEXT:    fmr 3, 1
5903 ; PC64LE9-NEXT:    lxvx 1, 0, 3
5904 ; PC64LE9-NEXT:    xvmaxdp 2, 1, 0
5905 ; PC64LE9-NEXT:    xxswapd 1, 2
5906 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
5907 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5908 ; PC64LE9-NEXT:    addi 1, 1, 32
5909 ; PC64LE9-NEXT:    ld 0, 16(1)
5910 ; PC64LE9-NEXT:    mtlr 0
5911 ; PC64LE9-NEXT:    blr
5912 entry:
5913   %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
5914                           <3 x double> <double 43.0, double 44.0, double 45.0>,
5915                           <3 x double> <double 40.0, double 41.0, double 42.0>,
5916                           metadata !"round.dynamic",
5917                           metadata !"fpexcept.strict")
5918   ret <3 x double> %max
5921 define <4 x double> @constrained_vector_maxnum_v4f64() {
5922 ; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
5923 ; PC64LE:       # %bb.0: # %entry
5924 ; PC64LE-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
5925 ; PC64LE-NEXT:    addis 4, 2, .LCPI89_1@toc@ha
5926 ; PC64LE-NEXT:    addis 5, 2, .LCPI89_2@toc@ha
5927 ; PC64LE-NEXT:    addis 6, 2, .LCPI89_3@toc@ha
5928 ; PC64LE-NEXT:    addi 3, 3, .LCPI89_0@toc@l
5929 ; PC64LE-NEXT:    addi 4, 4, .LCPI89_1@toc@l
5930 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
5931 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
5932 ; PC64LE-NEXT:    addi 3, 5, .LCPI89_2@toc@l
5933 ; PC64LE-NEXT:    addi 4, 6, .LCPI89_3@toc@l
5934 ; PC64LE-NEXT:    lxvd2x 2, 0, 3
5935 ; PC64LE-NEXT:    lxvd2x 3, 0, 4
5936 ; PC64LE-NEXT:    xxswapd 0, 0
5937 ; PC64LE-NEXT:    xxswapd 1, 1
5938 ; PC64LE-NEXT:    xxswapd 2, 2
5939 ; PC64LE-NEXT:    xxswapd 3, 3
5940 ; PC64LE-NEXT:    xvmaxdp 34, 1, 0
5941 ; PC64LE-NEXT:    xvmaxdp 35, 3, 2
5942 ; PC64LE-NEXT:    blr
5944 ; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
5945 ; PC64LE9:       # %bb.0: # %entry
5946 ; PC64LE9-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
5947 ; PC64LE9-NEXT:    addi 3, 3, .LCPI89_0@toc@l
5948 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5949 ; PC64LE9-NEXT:    addis 3, 2, .LCPI89_1@toc@ha
5950 ; PC64LE9-NEXT:    addi 3, 3, .LCPI89_1@toc@l
5951 ; PC64LE9-NEXT:    lxvx 1, 0, 3
5952 ; PC64LE9-NEXT:    addis 3, 2, .LCPI89_2@toc@ha
5953 ; PC64LE9-NEXT:    addi 3, 3, .LCPI89_2@toc@l
5954 ; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
5955 ; PC64LE9-NEXT:    lxvx 0, 0, 3
5956 ; PC64LE9-NEXT:    addis 3, 2, .LCPI89_3@toc@ha
5957 ; PC64LE9-NEXT:    addi 3, 3, .LCPI89_3@toc@l
5958 ; PC64LE9-NEXT:    lxvx 1, 0, 3
5959 ; PC64LE9-NEXT:    xvmaxdp 35, 1, 0
5960 ; PC64LE9-NEXT:    blr
5961 entry:
5962   %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64(
5963                                 <4 x double> <double 44.0, double 45.0,
5964                                               double 46.0, double 47.0>,
5965                                 <4 x double> <double 40.0, double 41.0,
5966                                               double 42.0, double 43.0>,
5967                                 metadata !"round.dynamic",
5968                                 metadata !"fpexcept.strict")
5969   ret <4 x double> %max
5972 define <1 x float> @constrained_vector_minnum_v1f32() {
5973 ; PC64LE-LABEL: constrained_vector_minnum_v1f32:
5974 ; PC64LE:       # %bb.0: # %entry
5975 ; PC64LE-NEXT:    mflr 0
5976 ; PC64LE-NEXT:    std 0, 16(1)
5977 ; PC64LE-NEXT:    stdu 1, -32(1)
5978 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
5979 ; PC64LE-NEXT:    .cfi_offset lr, 16
5980 ; PC64LE-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
5981 ; PC64LE-NEXT:    addis 4, 2, .LCPI90_1@toc@ha
5982 ; PC64LE-NEXT:    lfs 1, .LCPI90_0@toc@l(3)
5983 ; PC64LE-NEXT:    lfs 2, .LCPI90_1@toc@l(4)
5984 ; PC64LE-NEXT:    bl fminf
5985 ; PC64LE-NEXT:    nop
5986 ; PC64LE-NEXT:    xscvdpspn 0, 1
5987 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
5988 ; PC64LE-NEXT:    addi 1, 1, 32
5989 ; PC64LE-NEXT:    ld 0, 16(1)
5990 ; PC64LE-NEXT:    mtlr 0
5991 ; PC64LE-NEXT:    blr
5993 ; PC64LE9-LABEL: constrained_vector_minnum_v1f32:
5994 ; PC64LE9:       # %bb.0: # %entry
5995 ; PC64LE9-NEXT:    mflr 0
5996 ; PC64LE9-NEXT:    std 0, 16(1)
5997 ; PC64LE9-NEXT:    stdu 1, -32(1)
5998 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
5999 ; PC64LE9-NEXT:    .cfi_offset lr, 16
6000 ; PC64LE9-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
6001 ; PC64LE9-NEXT:    lfs 1, .LCPI90_0@toc@l(3)
6002 ; PC64LE9-NEXT:    addis 3, 2, .LCPI90_1@toc@ha
6003 ; PC64LE9-NEXT:    lfs 2, .LCPI90_1@toc@l(3)
6004 ; PC64LE9-NEXT:    bl fminf
6005 ; PC64LE9-NEXT:    nop
6006 ; PC64LE9-NEXT:    xscvdpspn 0, 1
6007 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6008 ; PC64LE9-NEXT:    addi 1, 1, 32
6009 ; PC64LE9-NEXT:    ld 0, 16(1)
6010 ; PC64LE9-NEXT:    mtlr 0
6011 ; PC64LE9-NEXT:    blr
6012  entry:
6013   %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
6014                                <1 x float> <float 42.0>, <1 x float> <float 41.0>,
6015                                metadata !"round.dynamic",
6016                                metadata !"fpexcept.strict")
6017   ret <1 x float> %min
6020 define <2 x double> @constrained_vector_minnum_v2f64() {
6021 ; PC64LE-LABEL: constrained_vector_minnum_v2f64:
6022 ; PC64LE:       # %bb.0: # %entry
6023 ; PC64LE-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
6024 ; PC64LE-NEXT:    addis 4, 2, .LCPI91_1@toc@ha
6025 ; PC64LE-NEXT:    addi 3, 3, .LCPI91_0@toc@l
6026 ; PC64LE-NEXT:    addi 4, 4, .LCPI91_1@toc@l
6027 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6028 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
6029 ; PC64LE-NEXT:    xxswapd 0, 0
6030 ; PC64LE-NEXT:    xxswapd 1, 1
6031 ; PC64LE-NEXT:    xvmindp 34, 1, 0
6032 ; PC64LE-NEXT:    blr
6034 ; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
6035 ; PC64LE9:       # %bb.0: # %entry
6036 ; PC64LE9-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
6037 ; PC64LE9-NEXT:    addi 3, 3, .LCPI91_0@toc@l
6038 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6039 ; PC64LE9-NEXT:    addis 3, 2, .LCPI91_1@toc@ha
6040 ; PC64LE9-NEXT:    addi 3, 3, .LCPI91_1@toc@l
6041 ; PC64LE9-NEXT:    lxvx 1, 0, 3
6042 ; PC64LE9-NEXT:    xvmindp 34, 1, 0
6043 ; PC64LE9-NEXT:    blr
6044 entry:
6045   %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(
6046                                 <2 x double> <double 43.0, double 42.0>,
6047                                 <2 x double> <double 41.0, double 40.0>,
6048                                 metadata !"round.dynamic",
6049                                 metadata !"fpexcept.strict")
6050   ret <2 x double> %min
6053 define <3 x float> @constrained_vector_minnum_v3f32() {
6054 ; PC64LE-LABEL: constrained_vector_minnum_v3f32:
6055 ; PC64LE:       # %bb.0: # %entry
6056 ; PC64LE-NEXT:    mflr 0
6057 ; PC64LE-NEXT:    .cfi_def_cfa_offset 64
6058 ; PC64LE-NEXT:    .cfi_offset lr, 16
6059 ; PC64LE-NEXT:    .cfi_offset f29, -24
6060 ; PC64LE-NEXT:    .cfi_offset f30, -16
6061 ; PC64LE-NEXT:    .cfi_offset f31, -8
6062 ; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
6063 ; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
6064 ; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
6065 ; PC64LE-NEXT:    std 0, 16(1)
6066 ; PC64LE-NEXT:    stdu 1, -64(1)
6067 ; PC64LE-NEXT:    addis 4, 2, .LCPI92_1@toc@ha
6068 ; PC64LE-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
6069 ; PC64LE-NEXT:    lfs 31, .LCPI92_1@toc@l(4)
6070 ; PC64LE-NEXT:    lfs 1, .LCPI92_0@toc@l(3)
6071 ; PC64LE-NEXT:    fmr 2, 31
6072 ; PC64LE-NEXT:    bl fminf
6073 ; PC64LE-NEXT:    nop
6074 ; PC64LE-NEXT:    addis 3, 2, .LCPI92_2@toc@ha
6075 ; PC64LE-NEXT:    addis 4, 2, .LCPI92_3@toc@ha
6076 ; PC64LE-NEXT:    fmr 30, 1
6077 ; PC64LE-NEXT:    lfs 1, .LCPI92_2@toc@l(3)
6078 ; PC64LE-NEXT:    lfs 2, .LCPI92_3@toc@l(4)
6079 ; PC64LE-NEXT:    bl fminf
6080 ; PC64LE-NEXT:    nop
6081 ; PC64LE-NEXT:    fmr 29, 1
6082 ; PC64LE-NEXT:    addis 3, 2, .LCPI92_4@toc@ha
6083 ; PC64LE-NEXT:    fmr 1, 31
6084 ; PC64LE-NEXT:    lfs 2, .LCPI92_4@toc@l(3)
6085 ; PC64LE-NEXT:    bl fminf
6086 ; PC64LE-NEXT:    nop
6087 ; PC64LE-NEXT:    xscvdpspn 0, 29
6088 ; PC64LE-NEXT:    addis 3, 2, .LCPI92_5@toc@ha
6089 ; PC64LE-NEXT:    xscvdpspn 1, 1
6090 ; PC64LE-NEXT:    addi 3, 3, .LCPI92_5@toc@l
6091 ; PC64LE-NEXT:    lvx 4, 0, 3
6092 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6093 ; PC64LE-NEXT:    xscvdpspn 0, 30
6094 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
6095 ; PC64LE-NEXT:    vmrglw 2, 2, 3
6096 ; PC64LE-NEXT:    xxsldwi 35, 0, 0, 1
6097 ; PC64LE-NEXT:    vperm 2, 3, 2, 4
6098 ; PC64LE-NEXT:    addi 1, 1, 64
6099 ; PC64LE-NEXT:    ld 0, 16(1)
6100 ; PC64LE-NEXT:    mtlr 0
6101 ; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
6102 ; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
6103 ; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
6104 ; PC64LE-NEXT:    blr
6106 ; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
6107 ; PC64LE9:       # %bb.0: # %entry
6108 ; PC64LE9-NEXT:    mflr 0
6109 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 64
6110 ; PC64LE9-NEXT:    .cfi_offset lr, 16
6111 ; PC64LE9-NEXT:    .cfi_offset f29, -24
6112 ; PC64LE9-NEXT:    .cfi_offset f30, -16
6113 ; PC64LE9-NEXT:    .cfi_offset f31, -8
6114 ; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
6115 ; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
6116 ; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
6117 ; PC64LE9-NEXT:    std 0, 16(1)
6118 ; PC64LE9-NEXT:    stdu 1, -64(1)
6119 ; PC64LE9-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
6120 ; PC64LE9-NEXT:    lfs 1, .LCPI92_0@toc@l(3)
6121 ; PC64LE9-NEXT:    addis 3, 2, .LCPI92_1@toc@ha
6122 ; PC64LE9-NEXT:    lfs 31, .LCPI92_1@toc@l(3)
6123 ; PC64LE9-NEXT:    fmr 2, 31
6124 ; PC64LE9-NEXT:    bl fminf
6125 ; PC64LE9-NEXT:    nop
6126 ; PC64LE9-NEXT:    addis 3, 2, .LCPI92_2@toc@ha
6127 ; PC64LE9-NEXT:    fmr 30, 1
6128 ; PC64LE9-NEXT:    lfs 1, .LCPI92_2@toc@l(3)
6129 ; PC64LE9-NEXT:    addis 3, 2, .LCPI92_3@toc@ha
6130 ; PC64LE9-NEXT:    lfs 2, .LCPI92_3@toc@l(3)
6131 ; PC64LE9-NEXT:    bl fminf
6132 ; PC64LE9-NEXT:    nop
6133 ; PC64LE9-NEXT:    addis 3, 2, .LCPI92_4@toc@ha
6134 ; PC64LE9-NEXT:    lfs 2, .LCPI92_4@toc@l(3)
6135 ; PC64LE9-NEXT:    fmr 29, 1
6136 ; PC64LE9-NEXT:    fmr 1, 31
6137 ; PC64LE9-NEXT:    bl fminf
6138 ; PC64LE9-NEXT:    nop
6139 ; PC64LE9-NEXT:    xscvdpspn 0, 1
6140 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6141 ; PC64LE9-NEXT:    xscvdpspn 0, 29
6142 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
6143 ; PC64LE9-NEXT:    xscvdpspn 0, 30
6144 ; PC64LE9-NEXT:    addis 3, 2, .LCPI92_5@toc@ha
6145 ; PC64LE9-NEXT:    addi 3, 3, .LCPI92_5@toc@l
6146 ; PC64LE9-NEXT:    lxvx 36, 0, 3
6147 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
6148 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
6149 ; PC64LE9-NEXT:    vperm 2, 3, 2, 4
6150 ; PC64LE9-NEXT:    addi 1, 1, 64
6151 ; PC64LE9-NEXT:    ld 0, 16(1)
6152 ; PC64LE9-NEXT:    mtlr 0
6153 ; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
6154 ; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
6155 ; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
6156 ; PC64LE9-NEXT:    blr
6157 entry:
6158   %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32(
6159                               <3 x float> <float 43.0, float 44.0, float 45.0>,
6160                               <3 x float> <float 41.0, float 42.0, float 43.0>,
6161                               metadata !"round.dynamic",
6162                               metadata !"fpexcept.strict")
6163   ret <3 x float> %min
6166 define <3 x double> @constrained_vector_min_v3f64() {
6167 ; PC64LE-LABEL: constrained_vector_min_v3f64:
6168 ; PC64LE:       # %bb.0: # %entry
6169 ; PC64LE-NEXT:    mflr 0
6170 ; PC64LE-NEXT:    std 0, 16(1)
6171 ; PC64LE-NEXT:    stdu 1, -32(1)
6172 ; PC64LE-NEXT:    .cfi_def_cfa_offset 32
6173 ; PC64LE-NEXT:    .cfi_offset lr, 16
6174 ; PC64LE-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
6175 ; PC64LE-NEXT:    addis 4, 2, .LCPI93_1@toc@ha
6176 ; PC64LE-NEXT:    lfs 1, .LCPI93_0@toc@l(3)
6177 ; PC64LE-NEXT:    lfs 2, .LCPI93_1@toc@l(4)
6178 ; PC64LE-NEXT:    bl fmin
6179 ; PC64LE-NEXT:    nop
6180 ; PC64LE-NEXT:    addis 3, 2, .LCPI93_2@toc@ha
6181 ; PC64LE-NEXT:    addis 4, 2, .LCPI93_3@toc@ha
6182 ; PC64LE-NEXT:    fmr 3, 1
6183 ; PC64LE-NEXT:    addi 3, 3, .LCPI93_2@toc@l
6184 ; PC64LE-NEXT:    addi 4, 4, .LCPI93_3@toc@l
6185 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6186 ; PC64LE-NEXT:    lxvd2x 2, 0, 4
6187 ; PC64LE-NEXT:    xxswapd 0, 0
6188 ; PC64LE-NEXT:    xxswapd 2, 2
6189 ; PC64LE-NEXT:    xvmindp 2, 2, 0
6190 ; PC64LE-NEXT:    xxswapd 0, 2
6191 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6192 ; PC64LE-NEXT:    fmr 1, 0
6193 ; PC64LE-NEXT:    addi 1, 1, 32
6194 ; PC64LE-NEXT:    ld 0, 16(1)
6195 ; PC64LE-NEXT:    mtlr 0
6196 ; PC64LE-NEXT:    blr
6198 ; PC64LE9-LABEL: constrained_vector_min_v3f64:
6199 ; PC64LE9:       # %bb.0: # %entry
6200 ; PC64LE9-NEXT:    mflr 0
6201 ; PC64LE9-NEXT:    std 0, 16(1)
6202 ; PC64LE9-NEXT:    stdu 1, -32(1)
6203 ; PC64LE9-NEXT:    .cfi_def_cfa_offset 32
6204 ; PC64LE9-NEXT:    .cfi_offset lr, 16
6205 ; PC64LE9-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
6206 ; PC64LE9-NEXT:    lfs 1, .LCPI93_0@toc@l(3)
6207 ; PC64LE9-NEXT:    addis 3, 2, .LCPI93_1@toc@ha
6208 ; PC64LE9-NEXT:    lfs 2, .LCPI93_1@toc@l(3)
6209 ; PC64LE9-NEXT:    bl fmin
6210 ; PC64LE9-NEXT:    nop
6211 ; PC64LE9-NEXT:    addis 3, 2, .LCPI93_2@toc@ha
6212 ; PC64LE9-NEXT:    addi 3, 3, .LCPI93_2@toc@l
6213 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6214 ; PC64LE9-NEXT:    addis 3, 2, .LCPI93_3@toc@ha
6215 ; PC64LE9-NEXT:    addi 3, 3, .LCPI93_3@toc@l
6216 ; PC64LE9-NEXT:    fmr 3, 1
6217 ; PC64LE9-NEXT:    lxvx 1, 0, 3
6218 ; PC64LE9-NEXT:    xvmindp 2, 1, 0
6219 ; PC64LE9-NEXT:    xxswapd 1, 2
6220 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
6221 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6222 ; PC64LE9-NEXT:    addi 1, 1, 32
6223 ; PC64LE9-NEXT:    ld 0, 16(1)
6224 ; PC64LE9-NEXT:    mtlr 0
6225 ; PC64LE9-NEXT:    blr
6226 entry:
6227  %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
6228                           <3 x double> <double 43.0, double 44.0, double 45.0>,
6229                           <3 x double> <double 40.0, double 41.0, double 42.0>,
6230                           metadata !"round.dynamic",
6231                           metadata !"fpexcept.strict")
6232   ret <3 x double> %min
6235 define <4 x double> @constrained_vector_minnum_v4f64() {
6236 ; PC64LE-LABEL: constrained_vector_minnum_v4f64:
6237 ; PC64LE:       # %bb.0: # %entry
6238 ; PC64LE-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
6239 ; PC64LE-NEXT:    addis 4, 2, .LCPI94_1@toc@ha
6240 ; PC64LE-NEXT:    addis 5, 2, .LCPI94_2@toc@ha
6241 ; PC64LE-NEXT:    addis 6, 2, .LCPI94_3@toc@ha
6242 ; PC64LE-NEXT:    addi 3, 3, .LCPI94_0@toc@l
6243 ; PC64LE-NEXT:    addi 4, 4, .LCPI94_1@toc@l
6244 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6245 ; PC64LE-NEXT:    lxvd2x 1, 0, 4
6246 ; PC64LE-NEXT:    addi 3, 5, .LCPI94_2@toc@l
6247 ; PC64LE-NEXT:    addi 4, 6, .LCPI94_3@toc@l
6248 ; PC64LE-NEXT:    lxvd2x 2, 0, 3
6249 ; PC64LE-NEXT:    lxvd2x 3, 0, 4
6250 ; PC64LE-NEXT:    xxswapd 0, 0
6251 ; PC64LE-NEXT:    xxswapd 1, 1
6252 ; PC64LE-NEXT:    xxswapd 2, 2
6253 ; PC64LE-NEXT:    xxswapd 3, 3
6254 ; PC64LE-NEXT:    xvmindp 34, 1, 0
6255 ; PC64LE-NEXT:    xvmindp 35, 3, 2
6256 ; PC64LE-NEXT:    blr
6258 ; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
6259 ; PC64LE9:       # %bb.0: # %entry
6260 ; PC64LE9-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
6261 ; PC64LE9-NEXT:    addi 3, 3, .LCPI94_0@toc@l
6262 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6263 ; PC64LE9-NEXT:    addis 3, 2, .LCPI94_1@toc@ha
6264 ; PC64LE9-NEXT:    addi 3, 3, .LCPI94_1@toc@l
6265 ; PC64LE9-NEXT:    lxvx 1, 0, 3
6266 ; PC64LE9-NEXT:    addis 3, 2, .LCPI94_2@toc@ha
6267 ; PC64LE9-NEXT:    addi 3, 3, .LCPI94_2@toc@l
6268 ; PC64LE9-NEXT:    xvmindp 34, 1, 0
6269 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6270 ; PC64LE9-NEXT:    addis 3, 2, .LCPI94_3@toc@ha
6271 ; PC64LE9-NEXT:    addi 3, 3, .LCPI94_3@toc@l
6272 ; PC64LE9-NEXT:    lxvx 1, 0, 3
6273 ; PC64LE9-NEXT:    xvmindp 35, 1, 0
6274 ; PC64LE9-NEXT:    blr
6275 entry:
6276   %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64(
6277                                 <4 x double> <double 44.0, double 45.0,
6278                                               double 46.0, double 47.0>,
6279                                 <4 x double> <double 40.0, double 41.0,
6280                                               double 42.0, double 43.0>,
6281                                 metadata !"round.dynamic",
6282                                 metadata !"fpexcept.strict")
6283   ret <4 x double> %min
6286 define <1 x float> @constrained_vector_fptrunc_v1f64() {
6287 ; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
6288 ; PC64LE:       # %bb.0: # %entry
6289 ; PC64LE-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
6290 ; PC64LE-NEXT:    lfd 0, .LCPI95_0@toc@l(3)
6291 ; PC64LE-NEXT:    frsp 0, 0
6292 ; PC64LE-NEXT:    xscvdpspn 0, 0
6293 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6294 ; PC64LE-NEXT:    blr
6296 ; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
6297 ; PC64LE9:       # %bb.0: # %entry
6298 ; PC64LE9-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
6299 ; PC64LE9-NEXT:    lfd 0, .LCPI95_0@toc@l(3)
6300 ; PC64LE9-NEXT:    frsp 0, 0
6301 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6302 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6303 ; PC64LE9-NEXT:    blr
6304 entry:
6305   %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
6306                                 <1 x double><double 42.1>,
6307                                 metadata !"round.dynamic",
6308                                 metadata !"fpexcept.strict")
6309   ret <1 x float> %result
6312 define <2 x float> @constrained_vector_fptrunc_v2f64() {
6313 ; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
6314 ; PC64LE:       # %bb.0: # %entry
6315 ; PC64LE-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
6316 ; PC64LE-NEXT:    addis 4, 2, .LCPI96_1@toc@ha
6317 ; PC64LE-NEXT:    lfd 0, .LCPI96_0@toc@l(3)
6318 ; PC64LE-NEXT:    lfd 1, .LCPI96_1@toc@l(4)
6319 ; PC64LE-NEXT:    frsp 0, 0
6320 ; PC64LE-NEXT:    frsp 1, 1
6321 ; PC64LE-NEXT:    xscvdpspn 0, 0
6322 ; PC64LE-NEXT:    xscvdpspn 1, 1
6323 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6324 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
6325 ; PC64LE-NEXT:    vmrglw 2, 3, 2
6326 ; PC64LE-NEXT:    blr
6328 ; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
6329 ; PC64LE9:       # %bb.0: # %entry
6330 ; PC64LE9-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
6331 ; PC64LE9-NEXT:    lfd 0, .LCPI96_0@toc@l(3)
6332 ; PC64LE9-NEXT:    addis 3, 2, .LCPI96_1@toc@ha
6333 ; PC64LE9-NEXT:    frsp 0, 0
6334 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6335 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6336 ; PC64LE9-NEXT:    lfd 0, .LCPI96_1@toc@l(3)
6337 ; PC64LE9-NEXT:    frsp 0, 0
6338 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6339 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
6340 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
6341 ; PC64LE9-NEXT:    blr
6342 entry:
6343   %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
6344                                 <2 x double><double 42.1, double 42.2>,
6345                                 metadata !"round.dynamic",
6346                                 metadata !"fpexcept.strict")
6347   ret <2 x float> %result
6350 define <3 x float> @constrained_vector_fptrunc_v3f64() {
6351 ; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
6352 ; PC64LE:       # %bb.0: # %entry
6353 ; PC64LE-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
6354 ; PC64LE-NEXT:    addis 4, 2, .LCPI97_1@toc@ha
6355 ; PC64LE-NEXT:    lfd 0, .LCPI97_0@toc@l(3)
6356 ; PC64LE-NEXT:    lfd 1, .LCPI97_1@toc@l(4)
6357 ; PC64LE-NEXT:    addis 3, 2, .LCPI97_3@toc@ha
6358 ; PC64LE-NEXT:    frsp 0, 0
6359 ; PC64LE-NEXT:    lfd 2, .LCPI97_3@toc@l(3)
6360 ; PC64LE-NEXT:    addis 3, 2, .LCPI97_2@toc@ha
6361 ; PC64LE-NEXT:    frsp 1, 1
6362 ; PC64LE-NEXT:    addi 3, 3, .LCPI97_2@toc@l
6363 ; PC64LE-NEXT:    frsp 2, 2
6364 ; PC64LE-NEXT:    xscvdpspn 0, 0
6365 ; PC64LE-NEXT:    xscvdpspn 1, 1
6366 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6367 ; PC64LE-NEXT:    xscvdpspn 0, 2
6368 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
6369 ; PC64LE-NEXT:    vmrglw 2, 3, 2
6370 ; PC64LE-NEXT:    lvx 3, 0, 3
6371 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
6372 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
6373 ; PC64LE-NEXT:    blr
6375 ; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
6376 ; PC64LE9:       # %bb.0: # %entry
6377 ; PC64LE9-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
6378 ; PC64LE9-NEXT:    lfd 0, .LCPI97_0@toc@l(3)
6379 ; PC64LE9-NEXT:    addis 3, 2, .LCPI97_1@toc@ha
6380 ; PC64LE9-NEXT:    frsp 0, 0
6381 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6382 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6383 ; PC64LE9-NEXT:    lfd 0, .LCPI97_1@toc@l(3)
6384 ; PC64LE9-NEXT:    addis 3, 2, .LCPI97_2@toc@ha
6385 ; PC64LE9-NEXT:    addi 3, 3, .LCPI97_2@toc@l
6386 ; PC64LE9-NEXT:    frsp 0, 0
6387 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6388 ; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 1
6389 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
6390 ; PC64LE9-NEXT:    lxvx 35, 0, 3
6391 ; PC64LE9-NEXT:    addis 3, 2, .LCPI97_3@toc@ha
6392 ; PC64LE9-NEXT:    lfd 0, .LCPI97_3@toc@l(3)
6393 ; PC64LE9-NEXT:    frsp 0, 0
6394 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6395 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
6396 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6397 ; PC64LE9-NEXT:    blr
6398 entry:
6399   %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
6400                                 <3 x double><double 42.1, double 42.2,
6401                                              double 42.3>,
6402                                 metadata !"round.dynamic",
6403                                 metadata !"fpexcept.strict")
6404   ret <3 x float> %result
6407 define <4 x float> @constrained_vector_fptrunc_v4f64() {
6408 ; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
6409 ; PC64LE:       # %bb.0: # %entry
6410 ; PC64LE-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
6411 ; PC64LE-NEXT:    addis 4, 2, .LCPI98_1@toc@ha
6412 ; PC64LE-NEXT:    addis 5, 2, .LCPI98_2@toc@ha
6413 ; PC64LE-NEXT:    addis 6, 2, .LCPI98_3@toc@ha
6414 ; PC64LE-NEXT:    lfd 0, .LCPI98_0@toc@l(3)
6415 ; PC64LE-NEXT:    lfd 1, .LCPI98_1@toc@l(4)
6416 ; PC64LE-NEXT:    lfd 2, .LCPI98_2@toc@l(5)
6417 ; PC64LE-NEXT:    lfd 3, .LCPI98_3@toc@l(6)
6418 ; PC64LE-NEXT:    xxmrghd 0, 1, 0
6419 ; PC64LE-NEXT:    xxmrghd 1, 3, 2
6420 ; PC64LE-NEXT:    xvcvdpsp 34, 0
6421 ; PC64LE-NEXT:    xvcvdpsp 35, 1
6422 ; PC64LE-NEXT:    vmrgew 2, 3, 2
6423 ; PC64LE-NEXT:    blr
6425 ; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
6426 ; PC64LE9:       # %bb.0: # %entry
6427 ; PC64LE9-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
6428 ; PC64LE9-NEXT:    lfd 0, .LCPI98_0@toc@l(3)
6429 ; PC64LE9-NEXT:    addis 3, 2, .LCPI98_1@toc@ha
6430 ; PC64LE9-NEXT:    lfd 1, .LCPI98_1@toc@l(3)
6431 ; PC64LE9-NEXT:    addis 3, 2, .LCPI98_2@toc@ha
6432 ; PC64LE9-NEXT:    xxmrghd 0, 1, 0
6433 ; PC64LE9-NEXT:    xvcvdpsp 34, 0
6434 ; PC64LE9-NEXT:    lfd 0, .LCPI98_2@toc@l(3)
6435 ; PC64LE9-NEXT:    addis 3, 2, .LCPI98_3@toc@ha
6436 ; PC64LE9-NEXT:    lfd 1, .LCPI98_3@toc@l(3)
6437 ; PC64LE9-NEXT:    xxmrghd 0, 1, 0
6438 ; PC64LE9-NEXT:    xvcvdpsp 35, 0
6439 ; PC64LE9-NEXT:    vmrgew 2, 3, 2
6440 ; PC64LE9-NEXT:    blr
6441 entry:
6442   %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(
6443                                 <4 x double><double 42.1, double 42.2,
6444                                              double 42.3, double 42.4>,
6445                                 metadata !"round.dynamic",
6446                                 metadata !"fpexcept.strict")
6447   ret <4 x float> %result
6450 define <1 x double> @constrained_vector_fpext_v1f32() {
6451 ; PC64LE-LABEL: constrained_vector_fpext_v1f32:
6452 ; PC64LE:       # %bb.0: # %entry
6453 ; PC64LE-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
6454 ; PC64LE-NEXT:    lfs 0, .LCPI99_0@toc@l(3)
6455 ; PC64LE-NEXT:    xxspltd 34, 0, 0
6456 ; PC64LE-NEXT:    blr
6458 ; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
6459 ; PC64LE9:       # %bb.0: # %entry
6460 ; PC64LE9-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
6461 ; PC64LE9-NEXT:    lfs 0, .LCPI99_0@toc@l(3)
6462 ; PC64LE9-NEXT:    xxspltd 34, 0, 0
6463 ; PC64LE9-NEXT:    blr
6464 entry:
6465   %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
6466                                 <1 x float><float 42.0>,
6467                                 metadata !"fpexcept.strict")
6468   ret <1 x double> %result
6471 define <2 x double> @constrained_vector_fpext_v2f32() {
6472 ; PC64LE-LABEL: constrained_vector_fpext_v2f32:
6473 ; PC64LE:       # %bb.0: # %entry
6474 ; PC64LE-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
6475 ; PC64LE-NEXT:    addis 4, 2, .LCPI100_1@toc@ha
6476 ; PC64LE-NEXT:    lfs 0, .LCPI100_0@toc@l(3)
6477 ; PC64LE-NEXT:    lfs 1, .LCPI100_1@toc@l(4)
6478 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
6479 ; PC64LE-NEXT:    blr
6481 ; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
6482 ; PC64LE9:       # %bb.0: # %entry
6483 ; PC64LE9-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
6484 ; PC64LE9-NEXT:    lfs 0, .LCPI100_0@toc@l(3)
6485 ; PC64LE9-NEXT:    addis 3, 2, .LCPI100_1@toc@ha
6486 ; PC64LE9-NEXT:    lfs 1, .LCPI100_1@toc@l(3)
6487 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
6488 ; PC64LE9-NEXT:    blr
6489 entry:
6490   %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
6491                                 <2 x float><float 42.0, float 43.0>,
6492                                 metadata !"fpexcept.strict")
6493   ret <2 x double> %result
6496 define <3 x double> @constrained_vector_fpext_v3f32() {
6497 ; PC64LE-LABEL: constrained_vector_fpext_v3f32:
6498 ; PC64LE:       # %bb.0: # %entry
6499 ; PC64LE-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
6500 ; PC64LE-NEXT:    addis 4, 2, .LCPI101_1@toc@ha
6501 ; PC64LE-NEXT:    addis 5, 2, .LCPI101_2@toc@ha
6502 ; PC64LE-NEXT:    lfs 1, .LCPI101_0@toc@l(3)
6503 ; PC64LE-NEXT:    lfs 2, .LCPI101_1@toc@l(4)
6504 ; PC64LE-NEXT:    lfs 3, .LCPI101_2@toc@l(5)
6505 ; PC64LE-NEXT:    blr
6507 ; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
6508 ; PC64LE9:       # %bb.0: # %entry
6509 ; PC64LE9-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
6510 ; PC64LE9-NEXT:    lfs 1, .LCPI101_0@toc@l(3)
6511 ; PC64LE9-NEXT:    addis 3, 2, .LCPI101_1@toc@ha
6512 ; PC64LE9-NEXT:    lfs 2, .LCPI101_1@toc@l(3)
6513 ; PC64LE9-NEXT:    addis 3, 2, .LCPI101_2@toc@ha
6514 ; PC64LE9-NEXT:    lfs 3, .LCPI101_2@toc@l(3)
6515 ; PC64LE9-NEXT:    blr
6516 entry:
6517   %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
6518                                 <3 x float><float 42.0, float 43.0,
6519                                             float 44.0>,
6520                                 metadata !"fpexcept.strict")
6521   ret <3 x double> %result
6524 define <4 x double> @constrained_vector_fpext_v4f32() {
6525 ; PC64LE-LABEL: constrained_vector_fpext_v4f32:
6526 ; PC64LE:       # %bb.0: # %entry
6527 ; PC64LE-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
6528 ; PC64LE-NEXT:    addis 4, 2, .LCPI102_1@toc@ha
6529 ; PC64LE-NEXT:    addis 5, 2, .LCPI102_2@toc@ha
6530 ; PC64LE-NEXT:    addis 6, 2, .LCPI102_3@toc@ha
6531 ; PC64LE-NEXT:    lfs 0, .LCPI102_0@toc@l(3)
6532 ; PC64LE-NEXT:    lfs 1, .LCPI102_1@toc@l(4)
6533 ; PC64LE-NEXT:    lfs 2, .LCPI102_2@toc@l(5)
6534 ; PC64LE-NEXT:    lfs 3, .LCPI102_3@toc@l(6)
6535 ; PC64LE-NEXT:    xxmrghd 34, 1, 0
6536 ; PC64LE-NEXT:    xxmrghd 35, 3, 2
6537 ; PC64LE-NEXT:    blr
6539 ; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
6540 ; PC64LE9:       # %bb.0: # %entry
6541 ; PC64LE9-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
6542 ; PC64LE9-NEXT:    lfs 0, .LCPI102_0@toc@l(3)
6543 ; PC64LE9-NEXT:    addis 3, 2, .LCPI102_1@toc@ha
6544 ; PC64LE9-NEXT:    lfs 1, .LCPI102_1@toc@l(3)
6545 ; PC64LE9-NEXT:    addis 3, 2, .LCPI102_2@toc@ha
6546 ; PC64LE9-NEXT:    xxmrghd 34, 1, 0
6547 ; PC64LE9-NEXT:    lfs 0, .LCPI102_2@toc@l(3)
6548 ; PC64LE9-NEXT:    addis 3, 2, .LCPI102_3@toc@ha
6549 ; PC64LE9-NEXT:    lfs 1, .LCPI102_3@toc@l(3)
6550 ; PC64LE9-NEXT:    xxmrghd 35, 1, 0
6551 ; PC64LE9-NEXT:    blr
6552 entry:
6553   %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(
6554                                 <4 x float><float 42.0, float 43.0,
6555                                             float 44.0, float 45.0>,
6556                                 metadata !"fpexcept.strict")
6557   ret <4 x double> %result
6560 define <1 x float> @constrained_vector_ceil_v1f32() {
6561 ; PC64LE-LABEL: constrained_vector_ceil_v1f32:
6562 ; PC64LE:       # %bb.0: # %entry
6563 ; PC64LE-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
6564 ; PC64LE-NEXT:    lfs 0, .LCPI103_0@toc@l(3)
6565 ; PC64LE-NEXT:    frip 0, 0
6566 ; PC64LE-NEXT:    xscvdpspn 0, 0
6567 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6568 ; PC64LE-NEXT:    blr
6570 ; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
6571 ; PC64LE9:       # %bb.0: # %entry
6572 ; PC64LE9-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
6573 ; PC64LE9-NEXT:    lfs 0, .LCPI103_0@toc@l(3)
6574 ; PC64LE9-NEXT:    frip 0, 0
6575 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6576 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6577 ; PC64LE9-NEXT:    blr
6578 entry:
6579   %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
6580                                <1 x float> <float 1.5>,
6581                                metadata !"round.dynamic",
6582                                metadata !"fpexcept.strict")
6583   ret <1 x float> %ceil
6586 define <2 x double> @constrained_vector_ceil_v2f64() {
6587 ; PC64LE-LABEL: constrained_vector_ceil_v2f64:
6588 ; PC64LE:       # %bb.0: # %entry
6589 ; PC64LE-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
6590 ; PC64LE-NEXT:    addi 3, 3, .LCPI104_0@toc@l
6591 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6592 ; PC64LE-NEXT:    xxswapd 0, 0
6593 ; PC64LE-NEXT:    xvrdpip 34, 0
6594 ; PC64LE-NEXT:    blr
6596 ; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
6597 ; PC64LE9:       # %bb.0: # %entry
6598 ; PC64LE9-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
6599 ; PC64LE9-NEXT:    addi 3, 3, .LCPI104_0@toc@l
6600 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6601 ; PC64LE9-NEXT:    xvrdpip 34, 0
6602 ; PC64LE9-NEXT:    blr
6603 entry:
6604   %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
6605                                 <2 x double> <double 1.1, double 1.9>,
6606                                 metadata !"round.dynamic",
6607                                 metadata !"fpexcept.strict")
6608   ret <2 x double> %ceil
6611 define <3 x float> @constrained_vector_ceil_v3f32() {
6612 ; PC64LE-LABEL: constrained_vector_ceil_v3f32:
6613 ; PC64LE:       # %bb.0: # %entry
6614 ; PC64LE-NEXT:    addis 3, 2, .LCPI105_2@toc@ha
6615 ; PC64LE-NEXT:    addis 4, 2, .LCPI105_1@toc@ha
6616 ; PC64LE-NEXT:    lfs 0, .LCPI105_2@toc@l(3)
6617 ; PC64LE-NEXT:    lfs 1, .LCPI105_1@toc@l(4)
6618 ; PC64LE-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
6619 ; PC64LE-NEXT:    frip 0, 0
6620 ; PC64LE-NEXT:    lfs 2, .LCPI105_0@toc@l(3)
6621 ; PC64LE-NEXT:    addis 3, 2, .LCPI105_3@toc@ha
6622 ; PC64LE-NEXT:    frip 1, 1
6623 ; PC64LE-NEXT:    addi 3, 3, .LCPI105_3@toc@l
6624 ; PC64LE-NEXT:    frip 2, 2
6625 ; PC64LE-NEXT:    xscvdpspn 0, 0
6626 ; PC64LE-NEXT:    xscvdpspn 1, 1
6627 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6628 ; PC64LE-NEXT:    xscvdpspn 0, 2
6629 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
6630 ; PC64LE-NEXT:    vmrglw 2, 3, 2
6631 ; PC64LE-NEXT:    lvx 3, 0, 3
6632 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
6633 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
6634 ; PC64LE-NEXT:    blr
6636 ; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
6637 ; PC64LE9:       # %bb.0: # %entry
6638 ; PC64LE9-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
6639 ; PC64LE9-NEXT:    lfs 0, .LCPI105_0@toc@l(3)
6640 ; PC64LE9-NEXT:    addis 3, 2, .LCPI105_1@toc@ha
6641 ; PC64LE9-NEXT:    lfs 1, .LCPI105_1@toc@l(3)
6642 ; PC64LE9-NEXT:    addis 3, 2, .LCPI105_2@toc@ha
6643 ; PC64LE9-NEXT:    frip 0, 0
6644 ; PC64LE9-NEXT:    lfs 2, .LCPI105_2@toc@l(3)
6645 ; PC64LE9-NEXT:    addis 3, 2, .LCPI105_3@toc@ha
6646 ; PC64LE9-NEXT:    addi 3, 3, .LCPI105_3@toc@l
6647 ; PC64LE9-NEXT:    frip 1, 1
6648 ; PC64LE9-NEXT:    frip 2, 2
6649 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6650 ; PC64LE9-NEXT:    xscvdpspn 1, 1
6651 ; PC64LE9-NEXT:    xscvdpspn 2, 2
6652 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
6653 ; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 1
6654 ; PC64LE9-NEXT:    xxsldwi 34, 2, 2, 1
6655 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
6656 ; PC64LE9-NEXT:    lxvx 35, 0, 3
6657 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6658 ; PC64LE9-NEXT:    blr
6659 entry:
6660   %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
6661                               <3 x float> <float 1.5, float 2.5, float 3.5>,
6662                               metadata !"round.dynamic",
6663                               metadata !"fpexcept.strict")
6664   ret <3 x float> %ceil
6667 define <3 x double> @constrained_vector_ceil_v3f64() {
6668 ; PC64LE-LABEL: constrained_vector_ceil_v3f64:
6669 ; PC64LE:       # %bb.0: # %entry
6670 ; PC64LE-NEXT:    addis 3, 2, .LCPI106_1@toc@ha
6671 ; PC64LE-NEXT:    addi 3, 3, .LCPI106_1@toc@l
6672 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6673 ; PC64LE-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
6674 ; PC64LE-NEXT:    lfs 1, .LCPI106_0@toc@l(3)
6675 ; PC64LE-NEXT:    xxswapd 0, 0
6676 ; PC64LE-NEXT:    xsrdpip 3, 1
6677 ; PC64LE-NEXT:    xvrdpip 2, 0
6678 ; PC64LE-NEXT:    xxswapd 1, 2
6679 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6680 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
6681 ; PC64LE-NEXT:    blr
6683 ; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
6684 ; PC64LE9:       # %bb.0: # %entry
6685 ; PC64LE9-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
6686 ; PC64LE9-NEXT:    lfs 0, .LCPI106_0@toc@l(3)
6687 ; PC64LE9-NEXT:    addis 3, 2, .LCPI106_1@toc@ha
6688 ; PC64LE9-NEXT:    addi 3, 3, .LCPI106_1@toc@l
6689 ; PC64LE9-NEXT:    xsrdpip 3, 0
6690 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6691 ; PC64LE9-NEXT:    xvrdpip 2, 0
6692 ; PC64LE9-NEXT:    xxswapd 1, 2
6693 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
6694 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6695 ; PC64LE9-NEXT:    blr
6696 entry:
6697   %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
6698                           <3 x double> <double 1.1, double 1.9, double 1.5>,
6699                           metadata !"round.dynamic",
6700                           metadata !"fpexcept.strict")
6701   ret <3 x double> %ceil
6704 define <1 x float> @constrained_vector_floor_v1f32() {
6705 ; PC64LE-LABEL: constrained_vector_floor_v1f32:
6706 ; PC64LE:       # %bb.0: # %entry
6707 ; PC64LE-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
6708 ; PC64LE-NEXT:    lfs 0, .LCPI107_0@toc@l(3)
6709 ; PC64LE-NEXT:    frim 0, 0
6710 ; PC64LE-NEXT:    xscvdpspn 0, 0
6711 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6712 ; PC64LE-NEXT:    blr
6714 ; PC64LE9-LABEL: constrained_vector_floor_v1f32:
6715 ; PC64LE9:       # %bb.0: # %entry
6716 ; PC64LE9-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
6717 ; PC64LE9-NEXT:    lfs 0, .LCPI107_0@toc@l(3)
6718 ; PC64LE9-NEXT:    frim 0, 0
6719 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6720 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6721 ; PC64LE9-NEXT:    blr
6722 entry:
6723   %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
6724                                <1 x float> <float 1.5>,
6725                                metadata !"round.dynamic",
6726                                metadata !"fpexcept.strict")
6727   ret <1 x float> %floor
6731 define <2 x double> @constrained_vector_floor_v2f64() {
6732 ; PC64LE-LABEL: constrained_vector_floor_v2f64:
6733 ; PC64LE:       # %bb.0: # %entry
6734 ; PC64LE-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
6735 ; PC64LE-NEXT:    addi 3, 3, .LCPI108_0@toc@l
6736 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6737 ; PC64LE-NEXT:    xxswapd 0, 0
6738 ; PC64LE-NEXT:    xvrdpim 34, 0
6739 ; PC64LE-NEXT:    blr
6741 ; PC64LE9-LABEL: constrained_vector_floor_v2f64:
6742 ; PC64LE9:       # %bb.0: # %entry
6743 ; PC64LE9-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
6744 ; PC64LE9-NEXT:    addi 3, 3, .LCPI108_0@toc@l
6745 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6746 ; PC64LE9-NEXT:    xvrdpim 34, 0
6747 ; PC64LE9-NEXT:    blr
6748 entry:
6749   %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
6750                                 <2 x double> <double 1.1, double 1.9>,
6751                                 metadata !"round.dynamic",
6752                                 metadata !"fpexcept.strict")
6753   ret <2 x double> %floor
6756 define <3 x float> @constrained_vector_floor_v3f32() {
6757 ; PC64LE-LABEL: constrained_vector_floor_v3f32:
6758 ; PC64LE:       # %bb.0: # %entry
6759 ; PC64LE-NEXT:    addis 3, 2, .LCPI109_2@toc@ha
6760 ; PC64LE-NEXT:    addis 4, 2, .LCPI109_1@toc@ha
6761 ; PC64LE-NEXT:    lfs 0, .LCPI109_2@toc@l(3)
6762 ; PC64LE-NEXT:    lfs 1, .LCPI109_1@toc@l(4)
6763 ; PC64LE-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
6764 ; PC64LE-NEXT:    frim 0, 0
6765 ; PC64LE-NEXT:    lfs 2, .LCPI109_0@toc@l(3)
6766 ; PC64LE-NEXT:    addis 3, 2, .LCPI109_3@toc@ha
6767 ; PC64LE-NEXT:    frim 1, 1
6768 ; PC64LE-NEXT:    addi 3, 3, .LCPI109_3@toc@l
6769 ; PC64LE-NEXT:    frim 2, 2
6770 ; PC64LE-NEXT:    xscvdpspn 0, 0
6771 ; PC64LE-NEXT:    xscvdpspn 1, 1
6772 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6773 ; PC64LE-NEXT:    xscvdpspn 0, 2
6774 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
6775 ; PC64LE-NEXT:    vmrglw 2, 3, 2
6776 ; PC64LE-NEXT:    lvx 3, 0, 3
6777 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
6778 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
6779 ; PC64LE-NEXT:    blr
6781 ; PC64LE9-LABEL: constrained_vector_floor_v3f32:
6782 ; PC64LE9:       # %bb.0: # %entry
6783 ; PC64LE9-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
6784 ; PC64LE9-NEXT:    lfs 0, .LCPI109_0@toc@l(3)
6785 ; PC64LE9-NEXT:    addis 3, 2, .LCPI109_1@toc@ha
6786 ; PC64LE9-NEXT:    lfs 1, .LCPI109_1@toc@l(3)
6787 ; PC64LE9-NEXT:    addis 3, 2, .LCPI109_2@toc@ha
6788 ; PC64LE9-NEXT:    frim 0, 0
6789 ; PC64LE9-NEXT:    lfs 2, .LCPI109_2@toc@l(3)
6790 ; PC64LE9-NEXT:    addis 3, 2, .LCPI109_3@toc@ha
6791 ; PC64LE9-NEXT:    addi 3, 3, .LCPI109_3@toc@l
6792 ; PC64LE9-NEXT:    frim 1, 1
6793 ; PC64LE9-NEXT:    frim 2, 2
6794 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6795 ; PC64LE9-NEXT:    xscvdpspn 1, 1
6796 ; PC64LE9-NEXT:    xscvdpspn 2, 2
6797 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
6798 ; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 1
6799 ; PC64LE9-NEXT:    xxsldwi 34, 2, 2, 1
6800 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
6801 ; PC64LE9-NEXT:    lxvx 35, 0, 3
6802 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6803 ; PC64LE9-NEXT:    blr
6804 entry:
6805   %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
6806                               <3 x float> <float 1.5, float 2.5, float 3.5>,
6807                               metadata !"round.dynamic",
6808                               metadata !"fpexcept.strict")
6809   ret <3 x float> %floor
6812 define <3 x double> @constrained_vector_floor_v3f64() {
6813 ; PC64LE-LABEL: constrained_vector_floor_v3f64:
6814 ; PC64LE:       # %bb.0: # %entry
6815 ; PC64LE-NEXT:    addis 3, 2, .LCPI110_1@toc@ha
6816 ; PC64LE-NEXT:    addi 3, 3, .LCPI110_1@toc@l
6817 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6818 ; PC64LE-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
6819 ; PC64LE-NEXT:    lfs 1, .LCPI110_0@toc@l(3)
6820 ; PC64LE-NEXT:    xxswapd 0, 0
6821 ; PC64LE-NEXT:    xsrdpim 3, 1
6822 ; PC64LE-NEXT:    xvrdpim 2, 0
6823 ; PC64LE-NEXT:    xxswapd 1, 2
6824 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6825 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
6826 ; PC64LE-NEXT:    blr
6828 ; PC64LE9-LABEL: constrained_vector_floor_v3f64:
6829 ; PC64LE9:       # %bb.0: # %entry
6830 ; PC64LE9-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
6831 ; PC64LE9-NEXT:    lfs 0, .LCPI110_0@toc@l(3)
6832 ; PC64LE9-NEXT:    addis 3, 2, .LCPI110_1@toc@ha
6833 ; PC64LE9-NEXT:    addi 3, 3, .LCPI110_1@toc@l
6834 ; PC64LE9-NEXT:    xsrdpim 3, 0
6835 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6836 ; PC64LE9-NEXT:    xvrdpim 2, 0
6837 ; PC64LE9-NEXT:    xxswapd 1, 2
6838 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
6839 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6840 ; PC64LE9-NEXT:    blr
6841 entry:
6842   %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
6843                           <3 x double> <double 1.1, double 1.9, double 1.5>,
6844                           metadata !"round.dynamic",
6845                           metadata !"fpexcept.strict")
6846   ret <3 x double> %floor
6849 define <1 x float> @constrained_vector_round_v1f32() {
6850 ; PC64LE-LABEL: constrained_vector_round_v1f32:
6851 ; PC64LE:       # %bb.0: # %entry
6852 ; PC64LE-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
6853 ; PC64LE-NEXT:    lfs 0, .LCPI111_0@toc@l(3)
6854 ; PC64LE-NEXT:    frin 0, 0
6855 ; PC64LE-NEXT:    xscvdpspn 0, 0
6856 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6857 ; PC64LE-NEXT:    blr
6859 ; PC64LE9-LABEL: constrained_vector_round_v1f32:
6860 ; PC64LE9:       # %bb.0: # %entry
6861 ; PC64LE9-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
6862 ; PC64LE9-NEXT:    lfs 0, .LCPI111_0@toc@l(3)
6863 ; PC64LE9-NEXT:    frin 0, 0
6864 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6865 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
6866 ; PC64LE9-NEXT:    blr
6867 entry:
6868   %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
6869                                <1 x float> <float 1.5>,
6870                                metadata !"round.dynamic",
6871                                metadata !"fpexcept.strict")
6872   ret <1 x float> %round
6875 define <2 x double> @constrained_vector_round_v2f64() {
6876 ; PC64LE-LABEL: constrained_vector_round_v2f64:
6877 ; PC64LE:       # %bb.0: # %entry
6878 ; PC64LE-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
6879 ; PC64LE-NEXT:    addi 3, 3, .LCPI112_0@toc@l
6880 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6881 ; PC64LE-NEXT:    xxswapd 0, 0
6882 ; PC64LE-NEXT:    xvrdpi 34, 0
6883 ; PC64LE-NEXT:    blr
6885 ; PC64LE9-LABEL: constrained_vector_round_v2f64:
6886 ; PC64LE9:       # %bb.0: # %entry
6887 ; PC64LE9-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
6888 ; PC64LE9-NEXT:    addi 3, 3, .LCPI112_0@toc@l
6889 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6890 ; PC64LE9-NEXT:    xvrdpi 34, 0
6891 ; PC64LE9-NEXT:    blr
6892 entry:
6893   %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
6894                                 <2 x double> <double 1.1, double 1.9>,
6895                                 metadata !"round.dynamic",
6896                                 metadata !"fpexcept.strict")
6897   ret <2 x double> %round
6900 define <3 x float> @constrained_vector_round_v3f32() {
6901 ; PC64LE-LABEL: constrained_vector_round_v3f32:
6902 ; PC64LE:       # %bb.0: # %entry
6903 ; PC64LE-NEXT:    addis 3, 2, .LCPI113_2@toc@ha
6904 ; PC64LE-NEXT:    addis 4, 2, .LCPI113_1@toc@ha
6905 ; PC64LE-NEXT:    lfs 0, .LCPI113_2@toc@l(3)
6906 ; PC64LE-NEXT:    lfs 1, .LCPI113_1@toc@l(4)
6907 ; PC64LE-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
6908 ; PC64LE-NEXT:    frin 0, 0
6909 ; PC64LE-NEXT:    lfs 2, .LCPI113_0@toc@l(3)
6910 ; PC64LE-NEXT:    addis 3, 2, .LCPI113_3@toc@ha
6911 ; PC64LE-NEXT:    frin 1, 1
6912 ; PC64LE-NEXT:    addi 3, 3, .LCPI113_3@toc@l
6913 ; PC64LE-NEXT:    frin 2, 2
6914 ; PC64LE-NEXT:    xscvdpspn 0, 0
6915 ; PC64LE-NEXT:    xscvdpspn 1, 1
6916 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
6917 ; PC64LE-NEXT:    xscvdpspn 0, 2
6918 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
6919 ; PC64LE-NEXT:    vmrglw 2, 3, 2
6920 ; PC64LE-NEXT:    lvx 3, 0, 3
6921 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
6922 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
6923 ; PC64LE-NEXT:    blr
6925 ; PC64LE9-LABEL: constrained_vector_round_v3f32:
6926 ; PC64LE9:       # %bb.0: # %entry
6927 ; PC64LE9-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
6928 ; PC64LE9-NEXT:    lfs 0, .LCPI113_0@toc@l(3)
6929 ; PC64LE9-NEXT:    addis 3, 2, .LCPI113_1@toc@ha
6930 ; PC64LE9-NEXT:    lfs 1, .LCPI113_1@toc@l(3)
6931 ; PC64LE9-NEXT:    addis 3, 2, .LCPI113_2@toc@ha
6932 ; PC64LE9-NEXT:    frin 0, 0
6933 ; PC64LE9-NEXT:    lfs 2, .LCPI113_2@toc@l(3)
6934 ; PC64LE9-NEXT:    addis 3, 2, .LCPI113_3@toc@ha
6935 ; PC64LE9-NEXT:    addi 3, 3, .LCPI113_3@toc@l
6936 ; PC64LE9-NEXT:    frin 1, 1
6937 ; PC64LE9-NEXT:    frin 2, 2
6938 ; PC64LE9-NEXT:    xscvdpspn 0, 0
6939 ; PC64LE9-NEXT:    xscvdpspn 1, 1
6940 ; PC64LE9-NEXT:    xscvdpspn 2, 2
6941 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
6942 ; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 1
6943 ; PC64LE9-NEXT:    xxsldwi 34, 2, 2, 1
6944 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
6945 ; PC64LE9-NEXT:    lxvx 35, 0, 3
6946 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6947 ; PC64LE9-NEXT:    blr
6948 entry:
6949   %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
6950                               <3 x float> <float 1.5, float 2.5, float 3.5>,
6951                               metadata !"round.dynamic",
6952                               metadata !"fpexcept.strict")
6953   ret <3 x float> %round
6957 define <3 x double> @constrained_vector_round_v3f64() {
6958 ; PC64LE-LABEL: constrained_vector_round_v3f64:
6959 ; PC64LE:       # %bb.0: # %entry
6960 ; PC64LE-NEXT:    addis 3, 2, .LCPI114_1@toc@ha
6961 ; PC64LE-NEXT:    addi 3, 3, .LCPI114_1@toc@l
6962 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
6963 ; PC64LE-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
6964 ; PC64LE-NEXT:    lfs 1, .LCPI114_0@toc@l(3)
6965 ; PC64LE-NEXT:    xxswapd 0, 0
6966 ; PC64LE-NEXT:    xsrdpi 3, 1
6967 ; PC64LE-NEXT:    xvrdpi 2, 0
6968 ; PC64LE-NEXT:    xxswapd 1, 2
6969 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6970 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
6971 ; PC64LE-NEXT:    blr
6973 ; PC64LE9-LABEL: constrained_vector_round_v3f64:
6974 ; PC64LE9:       # %bb.0: # %entry
6975 ; PC64LE9-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
6976 ; PC64LE9-NEXT:    lfs 0, .LCPI114_0@toc@l(3)
6977 ; PC64LE9-NEXT:    addis 3, 2, .LCPI114_1@toc@ha
6978 ; PC64LE9-NEXT:    addi 3, 3, .LCPI114_1@toc@l
6979 ; PC64LE9-NEXT:    xsrdpi 3, 0
6980 ; PC64LE9-NEXT:    lxvx 0, 0, 3
6981 ; PC64LE9-NEXT:    xvrdpi 2, 0
6982 ; PC64LE9-NEXT:    xxswapd 1, 2
6983 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
6984 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
6985 ; PC64LE9-NEXT:    blr
6986 entry:
6987   %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
6988                           <3 x double> <double 1.1, double 1.9, double 1.5>,
6989                           metadata !"round.dynamic",
6990                           metadata !"fpexcept.strict")
6991   ret <3 x double> %round
6994 define <1 x float> @constrained_vector_trunc_v1f32() {
6995 ; PC64LE-LABEL: constrained_vector_trunc_v1f32:
6996 ; PC64LE:       # %bb.0: # %entry
6997 ; PC64LE-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
6998 ; PC64LE-NEXT:    lfs 0, .LCPI115_0@toc@l(3)
6999 ; PC64LE-NEXT:    friz 0, 0
7000 ; PC64LE-NEXT:    xscvdpspn 0, 0
7001 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
7002 ; PC64LE-NEXT:    blr
7004 ; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
7005 ; PC64LE9:       # %bb.0: # %entry
7006 ; PC64LE9-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
7007 ; PC64LE9-NEXT:    lfs 0, .LCPI115_0@toc@l(3)
7008 ; PC64LE9-NEXT:    friz 0, 0
7009 ; PC64LE9-NEXT:    xscvdpspn 0, 0
7010 ; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 1
7011 ; PC64LE9-NEXT:    blr
7012 entry:
7013   %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
7014                                <1 x float> <float 1.5>,
7015                                metadata !"round.dynamic",
7016                                metadata !"fpexcept.strict")
7017   ret <1 x float> %trunc
7020 define <2 x double> @constrained_vector_trunc_v2f64() {
7021 ; PC64LE-LABEL: constrained_vector_trunc_v2f64:
7022 ; PC64LE:       # %bb.0: # %entry
7023 ; PC64LE-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
7024 ; PC64LE-NEXT:    addi 3, 3, .LCPI116_0@toc@l
7025 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
7026 ; PC64LE-NEXT:    xxswapd 0, 0
7027 ; PC64LE-NEXT:    xvrdpiz 34, 0
7028 ; PC64LE-NEXT:    blr
7030 ; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
7031 ; PC64LE9:       # %bb.0: # %entry
7032 ; PC64LE9-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
7033 ; PC64LE9-NEXT:    addi 3, 3, .LCPI116_0@toc@l
7034 ; PC64LE9-NEXT:    lxvx 0, 0, 3
7035 ; PC64LE9-NEXT:    xvrdpiz 34, 0
7036 ; PC64LE9-NEXT:    blr
7037 entry:
7038   %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
7039                                 <2 x double> <double 1.1, double 1.9>,
7040                                 metadata !"round.dynamic",
7041                                 metadata !"fpexcept.strict")
7042   ret <2 x double> %trunc
7045 define <3 x float> @constrained_vector_trunc_v3f32() {
7046 ; PC64LE-LABEL: constrained_vector_trunc_v3f32:
7047 ; PC64LE:       # %bb.0: # %entry
7048 ; PC64LE-NEXT:    addis 3, 2, .LCPI117_2@toc@ha
7049 ; PC64LE-NEXT:    addis 4, 2, .LCPI117_1@toc@ha
7050 ; PC64LE-NEXT:    lfs 0, .LCPI117_2@toc@l(3)
7051 ; PC64LE-NEXT:    lfs 1, .LCPI117_1@toc@l(4)
7052 ; PC64LE-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
7053 ; PC64LE-NEXT:    friz 0, 0
7054 ; PC64LE-NEXT:    lfs 2, .LCPI117_0@toc@l(3)
7055 ; PC64LE-NEXT:    addis 3, 2, .LCPI117_3@toc@ha
7056 ; PC64LE-NEXT:    friz 1, 1
7057 ; PC64LE-NEXT:    addi 3, 3, .LCPI117_3@toc@l
7058 ; PC64LE-NEXT:    friz 2, 2
7059 ; PC64LE-NEXT:    xscvdpspn 0, 0
7060 ; PC64LE-NEXT:    xscvdpspn 1, 1
7061 ; PC64LE-NEXT:    xxsldwi 34, 0, 0, 1
7062 ; PC64LE-NEXT:    xscvdpspn 0, 2
7063 ; PC64LE-NEXT:    xxsldwi 35, 1, 1, 1
7064 ; PC64LE-NEXT:    vmrglw 2, 3, 2
7065 ; PC64LE-NEXT:    lvx 3, 0, 3
7066 ; PC64LE-NEXT:    xxsldwi 36, 0, 0, 1
7067 ; PC64LE-NEXT:    vperm 2, 4, 2, 3
7068 ; PC64LE-NEXT:    blr
7070 ; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
7071 ; PC64LE9:       # %bb.0: # %entry
7072 ; PC64LE9-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
7073 ; PC64LE9-NEXT:    lfs 0, .LCPI117_0@toc@l(3)
7074 ; PC64LE9-NEXT:    addis 3, 2, .LCPI117_1@toc@ha
7075 ; PC64LE9-NEXT:    lfs 1, .LCPI117_1@toc@l(3)
7076 ; PC64LE9-NEXT:    addis 3, 2, .LCPI117_2@toc@ha
7077 ; PC64LE9-NEXT:    friz 0, 0
7078 ; PC64LE9-NEXT:    lfs 2, .LCPI117_2@toc@l(3)
7079 ; PC64LE9-NEXT:    addis 3, 2, .LCPI117_3@toc@ha
7080 ; PC64LE9-NEXT:    addi 3, 3, .LCPI117_3@toc@l
7081 ; PC64LE9-NEXT:    friz 1, 1
7082 ; PC64LE9-NEXT:    friz 2, 2
7083 ; PC64LE9-NEXT:    xscvdpspn 0, 0
7084 ; PC64LE9-NEXT:    xscvdpspn 1, 1
7085 ; PC64LE9-NEXT:    xscvdpspn 2, 2
7086 ; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 1
7087 ; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 1
7088 ; PC64LE9-NEXT:    xxsldwi 34, 2, 2, 1
7089 ; PC64LE9-NEXT:    vmrglw 2, 3, 2
7090 ; PC64LE9-NEXT:    lxvx 35, 0, 3
7091 ; PC64LE9-NEXT:    vperm 2, 4, 2, 3
7092 ; PC64LE9-NEXT:    blr
7093 entry:
7094   %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
7095                               <3 x float> <float 1.5, float 2.5, float 3.5>,
7096                               metadata !"round.dynamic",
7097                               metadata !"fpexcept.strict")
7098   ret <3 x float> %trunc
7101 define <3 x double> @constrained_vector_trunc_v3f64() {
7102 ; PC64LE-LABEL: constrained_vector_trunc_v3f64:
7103 ; PC64LE:       # %bb.0: # %entry
7104 ; PC64LE-NEXT:    addis 3, 2, .LCPI118_1@toc@ha
7105 ; PC64LE-NEXT:    addi 3, 3, .LCPI118_1@toc@l
7106 ; PC64LE-NEXT:    lxvd2x 0, 0, 3
7107 ; PC64LE-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
7108 ; PC64LE-NEXT:    lfs 1, .LCPI118_0@toc@l(3)
7109 ; PC64LE-NEXT:    xxswapd 0, 0
7110 ; PC64LE-NEXT:    xsrdpiz 3, 1
7111 ; PC64LE-NEXT:    xvrdpiz 2, 0
7112 ; PC64LE-NEXT:    xxswapd 1, 2
7113 ; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
7114 ; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
7115 ; PC64LE-NEXT:    blr
7117 ; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
7118 ; PC64LE9:       # %bb.0: # %entry
7119 ; PC64LE9-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
7120 ; PC64LE9-NEXT:    lfs 0, .LCPI118_0@toc@l(3)
7121 ; PC64LE9-NEXT:    addis 3, 2, .LCPI118_1@toc@ha
7122 ; PC64LE9-NEXT:    addi 3, 3, .LCPI118_1@toc@l
7123 ; PC64LE9-NEXT:    xsrdpiz 3, 0
7124 ; PC64LE9-NEXT:    lxvx 0, 0, 3
7125 ; PC64LE9-NEXT:    xvrdpiz 2, 0
7126 ; PC64LE9-NEXT:    xxswapd 1, 2
7127 ; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
7128 ; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
7129 ; PC64LE9-NEXT:    blr
7130 entry:
7131   %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
7132                           <3 x double> <double 1.1, double 1.9, double 1.5>,
7133                           metadata !"round.dynamic",
7134                           metadata !"fpexcept.strict")
7135   ret <3 x double> %trunc
7139 ; Single width declarations
7140 declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7141 declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7142 declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7143 declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7144 declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7145 declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
7146 declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7147 declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
7148 declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
7149 declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
7150 declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
7151 declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
7152 declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
7153 declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
7154 declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
7155 declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
7156 declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
7157 declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7158 declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata, metadata)
7159 declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
7160 declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
7161 declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata, metadata)
7162 declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata, metadata)
7163 declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata, metadata)
7164 declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata, metadata)
7166 ; Scalar width declarations
7167 declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7168 declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7169 declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7170 declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7171 declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7172 declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
7173 declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7174 declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
7175 declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
7176 declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
7177 declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
7178 declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
7179 declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
7180 declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
7181 declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
7182 declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
7183 declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
7184 declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7185 declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata, metadata)
7186 declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
7187 declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
7188 declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata, metadata)
7189 declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata, metadata)
7190 declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata, metadata)
7191 declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata, metadata)
7193 ; Illegal width declarations
7194 declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7195 declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7196 declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7197 declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7198 declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7199 declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7200 declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7201 declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7202 declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7203 declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7204 declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
7205 declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
7206 declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7207 declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7208 declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
7209 declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
7210 declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
7211 declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
7212 declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
7213 declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
7214 declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
7215 declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
7216 declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
7217 declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
7218 declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
7219 declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
7220 declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
7221 declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
7222 declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
7223 declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
7224 declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
7225 declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
7226 declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
7227 declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
7228 declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7229 declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7230 declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata, metadata)
7231 declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata, metadata)
7232 declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
7233 declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
7234 declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata, metadata)
7235 declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata, metadata)
7236 declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata, metadata)
7237 declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata, metadata)
7238 declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata, metadata)
7239 declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata, metadata)
7240 declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata, metadata)
7241 declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata, metadata)
7243 ; Double width declarations
7244 declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7245 declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7246 declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7247 declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7248 declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7249 declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
7250 declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7251 declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
7252 declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
7253 declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
7254 declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
7255 declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
7256 declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
7257 declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
7258 declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
7259 declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
7260 declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
7261 declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7262 declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata, metadata)
7263 declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
7264 declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
7265 declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata, metadata)
7266 declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata, metadata)
7267 declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata, metadata)
7268 declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata, metadata)