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