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