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() #0 {
6; PC64LE-LABEL: constrained_vector_fdiv_v1f32:
7; PC64LE:       # %bb.0: # %entry
8; PC64LE-NEXT:    addis 3, 2, .LCPI0_0@toc@ha
9; PC64LE-NEXT:    addis 4, 2, .LCPI0_1@toc@ha
10; PC64LE-NEXT:    lfs 0, .LCPI0_0@toc@l(3)
11; PC64LE-NEXT:    lfs 1, .LCPI0_1@toc@l(4)
12; PC64LE-NEXT:    xsdivsp 1, 1, 0
13; PC64LE-NEXT:    blr
14;
15; PC64LE9-LABEL: constrained_vector_fdiv_v1f32:
16; PC64LE9:       # %bb.0: # %entry
17; PC64LE9-NEXT:    addis 3, 2, .LCPI0_0@toc@ha
18; PC64LE9-NEXT:    lfs 0, .LCPI0_0@toc@l(3)
19; PC64LE9-NEXT:    addis 3, 2, .LCPI0_1@toc@ha
20; PC64LE9-NEXT:    lfs 1, .LCPI0_1@toc@l(3)
21; PC64LE9-NEXT:    xsdivsp 1, 1, 0
22; PC64LE9-NEXT:    blr
23entry:
24  %div = call <1 x float> @llvm.experimental.constrained.fdiv.v1f32(
25           <1 x float> <float 1.000000e+00>,
26           <1 x float> <float 1.000000e+01>,
27           metadata !"round.dynamic",
28           metadata !"fpexcept.strict") #1
29  ret <1 x float> %div
30}
31
32define <2 x double> @constrained_vector_fdiv_v2f64() #0 {
33; PC64LE-LABEL: constrained_vector_fdiv_v2f64:
34; PC64LE:       # %bb.0: # %entry
35; PC64LE-NEXT:    addis 3, 2, .LCPI1_0@toc@ha
36; PC64LE-NEXT:    addis 4, 2, .LCPI1_1@toc@ha
37; PC64LE-NEXT:    addi 3, 3, .LCPI1_0@toc@l
38; PC64LE-NEXT:    addi 4, 4, .LCPI1_1@toc@l
39; PC64LE-NEXT:    lxvd2x 0, 0, 3
40; PC64LE-NEXT:    lxvd2x 1, 0, 4
41; PC64LE-NEXT:    xxswapd 0, 0
42; PC64LE-NEXT:    xxswapd 1, 1
43; PC64LE-NEXT:    xvdivdp 34, 1, 0
44; PC64LE-NEXT:    blr
45;
46; PC64LE9-LABEL: constrained_vector_fdiv_v2f64:
47; PC64LE9:       # %bb.0: # %entry
48; PC64LE9-NEXT:    addis 3, 2, .LCPI1_0@toc@ha
49; PC64LE9-NEXT:    addi 3, 3, .LCPI1_0@toc@l
50; PC64LE9-NEXT:    lxvx 0, 0, 3
51; PC64LE9-NEXT:    addis 3, 2, .LCPI1_1@toc@ha
52; PC64LE9-NEXT:    addi 3, 3, .LCPI1_1@toc@l
53; PC64LE9-NEXT:    lxvx 1, 0, 3
54; PC64LE9-NEXT:    xvdivdp 34, 1, 0
55; PC64LE9-NEXT:    blr
56entry:
57  %div = call <2 x double> @llvm.experimental.constrained.fdiv.v2f64(
58           <2 x double> <double 1.000000e+00, double 2.000000e+00>,
59           <2 x double> <double 1.000000e+01, double 1.000000e+01>,
60           metadata !"round.dynamic",
61           metadata !"fpexcept.strict") #1
62  ret <2 x double> %div
63}
64
65define <3 x float> @constrained_vector_fdiv_v3f32() #0 {
66; PC64LE-LABEL: constrained_vector_fdiv_v3f32:
67; PC64LE:       # %bb.0: # %entry
68; PC64LE-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
69; PC64LE-NEXT:    addis 4, 2, .LCPI2_3@toc@ha
70; PC64LE-NEXT:    addis 5, 2, .LCPI2_2@toc@ha
71; PC64LE-NEXT:    lfs 0, .LCPI2_0@toc@l(3)
72; PC64LE-NEXT:    lfs 1, .LCPI2_3@toc@l(4)
73; PC64LE-NEXT:    lfs 2, .LCPI2_2@toc@l(5)
74; PC64LE-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
75; PC64LE-NEXT:    xsdivsp 1, 1, 0
76; PC64LE-NEXT:    lfs 3, .LCPI2_1@toc@l(3)
77; PC64LE-NEXT:    addis 3, 2, .LCPI2_4@toc@ha
78; PC64LE-NEXT:    xsdivsp 2, 2, 0
79; PC64LE-NEXT:    addi 3, 3, .LCPI2_4@toc@l
80; PC64LE-NEXT:    lvx 4, 0, 3
81; PC64LE-NEXT:    xsdivsp 0, 3, 0
82; PC64LE-NEXT:    xscvdpspn 34, 1
83; PC64LE-NEXT:    xscvdpspn 35, 2
84; PC64LE-NEXT:    vmrghw 2, 3, 2
85; PC64LE-NEXT:    xscvdpspn 35, 0
86; PC64LE-NEXT:    vperm 2, 3, 2, 4
87; PC64LE-NEXT:    blr
88;
89; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
90; PC64LE9:       # %bb.0: # %entry
91; PC64LE9-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
92; PC64LE9-NEXT:    lfs 0, .LCPI2_0@toc@l(3)
93; PC64LE9-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
94; PC64LE9-NEXT:    lfs 1, .LCPI2_1@toc@l(3)
95; PC64LE9-NEXT:    addis 3, 2, .LCPI2_2@toc@ha
96; PC64LE9-NEXT:    xsdivsp 1, 1, 0
97; PC64LE9-NEXT:    lfs 2, .LCPI2_2@toc@l(3)
98; PC64LE9-NEXT:    addis 3, 2, .LCPI2_3@toc@ha
99; PC64LE9-NEXT:    lfs 3, .LCPI2_3@toc@l(3)
100; PC64LE9-NEXT:    addis 3, 2, .LCPI2_4@toc@ha
101; PC64LE9-NEXT:    addi 3, 3, .LCPI2_4@toc@l
102; PC64LE9-NEXT:    lxvx 36, 0, 3
103; PC64LE9-NEXT:    xsdivsp 2, 2, 0
104; PC64LE9-NEXT:    xsdivsp 0, 3, 0
105; PC64LE9-NEXT:    xscvdpspn 35, 2
106; PC64LE9-NEXT:    xscvdpspn 34, 0
107; PC64LE9-NEXT:    vmrghw 2, 3, 2
108; PC64LE9-NEXT:    xscvdpspn 35, 1
109; PC64LE9-NEXT:    vperm 2, 3, 2, 4
110; PC64LE9-NEXT:    blr
111entry:
112  %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32(
113           <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
114           <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
115           metadata !"round.dynamic",
116           metadata !"fpexcept.strict") #1
117  ret <3 x float> %div
118}
119
120define <3 x double> @constrained_vector_fdiv_v3f64() #0 {
121; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
122; PC64LE:       # %bb.0: # %entry
123; PC64LE-NEXT:    addis 3, 2, .LCPI3_2@toc@ha
124; PC64LE-NEXT:    addis 4, 2, .LCPI3_3@toc@ha
125; PC64LE-NEXT:    addi 3, 3, .LCPI3_2@toc@l
126; PC64LE-NEXT:    addi 4, 4, .LCPI3_3@toc@l
127; PC64LE-NEXT:    lxvd2x 0, 0, 3
128; PC64LE-NEXT:    lxvd2x 1, 0, 4
129; PC64LE-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
130; PC64LE-NEXT:    addis 4, 2, .LCPI3_1@toc@ha
131; PC64LE-NEXT:    lfs 3, .LCPI3_0@toc@l(3)
132; PC64LE-NEXT:    xxswapd 0, 0
133; PC64LE-NEXT:    xxswapd 1, 1
134; PC64LE-NEXT:    xvdivdp 2, 1, 0
135; PC64LE-NEXT:    lfs 0, .LCPI3_1@toc@l(4)
136; PC64LE-NEXT:    xsdivdp 3, 0, 3
137; PC64LE-NEXT:    xxswapd 1, 2
138; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
139; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
140; PC64LE-NEXT:    blr
141;
142; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
143; PC64LE9:       # %bb.0: # %entry
144; PC64LE9-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
145; PC64LE9-NEXT:    lfs 0, .LCPI3_0@toc@l(3)
146; PC64LE9-NEXT:    addis 3, 2, .LCPI3_1@toc@ha
147; PC64LE9-NEXT:    lfs 1, .LCPI3_1@toc@l(3)
148; PC64LE9-NEXT:    addis 3, 2, .LCPI3_2@toc@ha
149; PC64LE9-NEXT:    addi 3, 3, .LCPI3_2@toc@l
150; PC64LE9-NEXT:    xsdivdp 3, 1, 0
151; PC64LE9-NEXT:    lxvx 0, 0, 3
152; PC64LE9-NEXT:    addis 3, 2, .LCPI3_3@toc@ha
153; PC64LE9-NEXT:    addi 3, 3, .LCPI3_3@toc@l
154; PC64LE9-NEXT:    lxvx 1, 0, 3
155; PC64LE9-NEXT:    xvdivdp 2, 1, 0
156; PC64LE9-NEXT:    xxswapd 1, 2
157; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
158; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
159; PC64LE9-NEXT:    blr
160entry:
161  %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64(
162           <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
163           <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
164           metadata !"round.dynamic",
165           metadata !"fpexcept.strict") #1
166  ret <3 x double> %div
167}
168
169define <4 x double> @constrained_vector_fdiv_v4f64() #0 {
170; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
171; PC64LE:       # %bb.0: # %entry
172; PC64LE-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
173; PC64LE-NEXT:    addis 4, 2, .LCPI4_1@toc@ha
174; PC64LE-NEXT:    addis 5, 2, .LCPI4_2@toc@ha
175; PC64LE-NEXT:    addi 3, 3, .LCPI4_0@toc@l
176; PC64LE-NEXT:    lxvd2x 0, 0, 3
177; PC64LE-NEXT:    addi 3, 4, .LCPI4_1@toc@l
178; PC64LE-NEXT:    addi 4, 5, .LCPI4_2@toc@l
179; PC64LE-NEXT:    lxvd2x 1, 0, 3
180; PC64LE-NEXT:    lxvd2x 2, 0, 4
181; PC64LE-NEXT:    xxswapd 0, 0
182; PC64LE-NEXT:    xxswapd 1, 1
183; PC64LE-NEXT:    xxswapd 2, 2
184; PC64LE-NEXT:    xvdivdp 35, 1, 0
185; PC64LE-NEXT:    xvdivdp 34, 2, 0
186; PC64LE-NEXT:    blr
187;
188; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
189; PC64LE9:       # %bb.0: # %entry
190; PC64LE9-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
191; PC64LE9-NEXT:    addi 3, 3, .LCPI4_0@toc@l
192; PC64LE9-NEXT:    lxvx 0, 0, 3
193; PC64LE9-NEXT:    addis 3, 2, .LCPI4_1@toc@ha
194; PC64LE9-NEXT:    addi 3, 3, .LCPI4_1@toc@l
195; PC64LE9-NEXT:    lxvx 1, 0, 3
196; PC64LE9-NEXT:    addis 3, 2, .LCPI4_2@toc@ha
197; PC64LE9-NEXT:    addi 3, 3, .LCPI4_2@toc@l
198; PC64LE9-NEXT:    xvdivdp 35, 1, 0
199; PC64LE9-NEXT:    lxvx 1, 0, 3
200; PC64LE9-NEXT:    xvdivdp 34, 1, 0
201; PC64LE9-NEXT:    blr
202entry:
203  %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64(
204           <4 x double> <double 1.000000e+00, double 2.000000e+00,
205                         double 3.000000e+00, double 4.000000e+00>,
206           <4 x double> <double 1.000000e+01, double 1.000000e+01,
207                         double 1.000000e+01, double 1.000000e+01>,
208           metadata !"round.dynamic",
209           metadata !"fpexcept.strict") #1
210  ret <4 x double> %div
211}
212
213define <1 x float> @constrained_vector_frem_v1f32() #0 {
214; PC64LE-LABEL: constrained_vector_frem_v1f32:
215; PC64LE:       # %bb.0: # %entry
216; PC64LE-NEXT:    mflr 0
217; PC64LE-NEXT:    std 0, 16(1)
218; PC64LE-NEXT:    stdu 1, -32(1)
219; PC64LE-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
220; PC64LE-NEXT:    addis 4, 2, .LCPI5_1@toc@ha
221; PC64LE-NEXT:    lfs 1, .LCPI5_0@toc@l(3)
222; PC64LE-NEXT:    lfs 2, .LCPI5_1@toc@l(4)
223; PC64LE-NEXT:    bl fmodf
224; PC64LE-NEXT:    nop
225; PC64LE-NEXT:    addi 1, 1, 32
226; PC64LE-NEXT:    ld 0, 16(1)
227; PC64LE-NEXT:    mtlr 0
228; PC64LE-NEXT:    blr
229;
230; PC64LE9-LABEL: constrained_vector_frem_v1f32:
231; PC64LE9:       # %bb.0: # %entry
232; PC64LE9-NEXT:    mflr 0
233; PC64LE9-NEXT:    std 0, 16(1)
234; PC64LE9-NEXT:    stdu 1, -32(1)
235; PC64LE9-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
236; PC64LE9-NEXT:    lfs 1, .LCPI5_0@toc@l(3)
237; PC64LE9-NEXT:    addis 3, 2, .LCPI5_1@toc@ha
238; PC64LE9-NEXT:    lfs 2, .LCPI5_1@toc@l(3)
239; PC64LE9-NEXT:    bl fmodf
240; PC64LE9-NEXT:    nop
241; PC64LE9-NEXT:    addi 1, 1, 32
242; PC64LE9-NEXT:    ld 0, 16(1)
243; PC64LE9-NEXT:    mtlr 0
244; PC64LE9-NEXT:    blr
245entry:
246  %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32(
247           <1 x float> <float 1.000000e+00>,
248           <1 x float> <float 1.000000e+01>,
249           metadata !"round.dynamic",
250           metadata !"fpexcept.strict") #1
251  ret <1 x float> %rem
252}
253
254define <2 x double> @constrained_vector_frem_v2f64() #0 {
255; PC64LE-LABEL: constrained_vector_frem_v2f64:
256; PC64LE:       # %bb.0: # %entry
257; PC64LE-NEXT:    mflr 0
258; PC64LE-NEXT:    std 0, 16(1)
259; PC64LE-NEXT:    stdu 1, -80(1)
260; PC64LE-NEXT:    addis 4, 2, .LCPI6_1@toc@ha
261; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
262; PC64LE-NEXT:    li 3, 48
263; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
264; PC64LE-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
265; PC64LE-NEXT:    lfs 31, .LCPI6_1@toc@l(4)
266; PC64LE-NEXT:    lfs 1, .LCPI6_0@toc@l(3)
267; PC64LE-NEXT:    fmr 2, 31
268; PC64LE-NEXT:    bl fmod
269; PC64LE-NEXT:    nop
270; PC64LE-NEXT:    addis 3, 2, .LCPI6_2@toc@ha
271; PC64LE-NEXT:    fmr 2, 31
272; PC64LE-NEXT:    xxlor 63, 1, 1
273; PC64LE-NEXT:    lfs 1, .LCPI6_2@toc@l(3)
274; PC64LE-NEXT:    bl fmod
275; PC64LE-NEXT:    nop
276; PC64LE-NEXT:    li 3, 48
277; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
278; PC64LE-NEXT:    xxmrghd 34, 1, 63
279; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
280; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
281; PC64LE-NEXT:    addi 1, 1, 80
282; PC64LE-NEXT:    ld 0, 16(1)
283; PC64LE-NEXT:    mtlr 0
284; PC64LE-NEXT:    blr
285;
286; PC64LE9-LABEL: constrained_vector_frem_v2f64:
287; PC64LE9:       # %bb.0: # %entry
288; PC64LE9-NEXT:    mflr 0
289; PC64LE9-NEXT:    std 0, 16(1)
290; PC64LE9-NEXT:    stdu 1, -64(1)
291; PC64LE9-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
292; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
293; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
294; PC64LE9-NEXT:    lfs 1, .LCPI6_0@toc@l(3)
295; PC64LE9-NEXT:    addis 3, 2, .LCPI6_1@toc@ha
296; PC64LE9-NEXT:    lfs 31, .LCPI6_1@toc@l(3)
297; PC64LE9-NEXT:    fmr 2, 31
298; PC64LE9-NEXT:    bl fmod
299; PC64LE9-NEXT:    nop
300; PC64LE9-NEXT:    addis 3, 2, .LCPI6_2@toc@ha
301; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
302; PC64LE9-NEXT:    fmr 2, 31
303; PC64LE9-NEXT:    lfs 1, .LCPI6_2@toc@l(3)
304; PC64LE9-NEXT:    bl fmod
305; PC64LE9-NEXT:    nop
306; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
307; PC64LE9-NEXT:    xxmrghd 34, 1, 63
308; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
309; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
310; PC64LE9-NEXT:    addi 1, 1, 64
311; PC64LE9-NEXT:    ld 0, 16(1)
312; PC64LE9-NEXT:    mtlr 0
313; PC64LE9-NEXT:    blr
314entry:
315  %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64(
316           <2 x double> <double 1.000000e+00, double 2.000000e+00>,
317           <2 x double> <double 1.000000e+01, double 1.000000e+01>,
318           metadata !"round.dynamic",
319           metadata !"fpexcept.strict") #1
320  ret <2 x double> %rem
321}
322
323define <3 x float> @constrained_vector_frem_v3f32() #0 {
324; PC64LE-LABEL: constrained_vector_frem_v3f32:
325; PC64LE:       # %bb.0: # %entry
326; PC64LE-NEXT:    mflr 0
327; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
328; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
329; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
330; PC64LE-NEXT:    std 0, 16(1)
331; PC64LE-NEXT:    stdu 1, -64(1)
332; PC64LE-NEXT:    addis 4, 2, .LCPI7_1@toc@ha
333; PC64LE-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
334; PC64LE-NEXT:    lfs 31, .LCPI7_1@toc@l(4)
335; PC64LE-NEXT:    lfs 1, .LCPI7_0@toc@l(3)
336; PC64LE-NEXT:    fmr 2, 31
337; PC64LE-NEXT:    bl fmodf
338; PC64LE-NEXT:    nop
339; PC64LE-NEXT:    addis 3, 2, .LCPI7_2@toc@ha
340; PC64LE-NEXT:    fmr 2, 31
341; PC64LE-NEXT:    fmr 30, 1
342; PC64LE-NEXT:    lfs 1, .LCPI7_2@toc@l(3)
343; PC64LE-NEXT:    bl fmodf
344; PC64LE-NEXT:    nop
345; PC64LE-NEXT:    addis 3, 2, .LCPI7_3@toc@ha
346; PC64LE-NEXT:    fmr 2, 31
347; PC64LE-NEXT:    fmr 29, 1
348; PC64LE-NEXT:    lfs 1, .LCPI7_3@toc@l(3)
349; PC64LE-NEXT:    bl fmodf
350; PC64LE-NEXT:    nop
351; PC64LE-NEXT:    xscvdpspn 34, 29
352; PC64LE-NEXT:    addis 3, 2, .LCPI7_4@toc@ha
353; PC64LE-NEXT:    xscvdpspn 35, 1
354; PC64LE-NEXT:    addi 3, 3, .LCPI7_4@toc@l
355; PC64LE-NEXT:    lvx 4, 0, 3
356; PC64LE-NEXT:    vmrghw 2, 2, 3
357; PC64LE-NEXT:    xscvdpspn 35, 30
358; PC64LE-NEXT:    vperm 2, 3, 2, 4
359; PC64LE-NEXT:    addi 1, 1, 64
360; PC64LE-NEXT:    ld 0, 16(1)
361; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
362; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
363; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
364; PC64LE-NEXT:    mtlr 0
365; PC64LE-NEXT:    blr
366;
367; PC64LE9-LABEL: constrained_vector_frem_v3f32:
368; PC64LE9:       # %bb.0: # %entry
369; PC64LE9-NEXT:    mflr 0
370; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
371; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
372; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
373; PC64LE9-NEXT:    std 0, 16(1)
374; PC64LE9-NEXT:    stdu 1, -64(1)
375; PC64LE9-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
376; PC64LE9-NEXT:    lfs 1, .LCPI7_0@toc@l(3)
377; PC64LE9-NEXT:    addis 3, 2, .LCPI7_1@toc@ha
378; PC64LE9-NEXT:    lfs 31, .LCPI7_1@toc@l(3)
379; PC64LE9-NEXT:    fmr 2, 31
380; PC64LE9-NEXT:    bl fmodf
381; PC64LE9-NEXT:    nop
382; PC64LE9-NEXT:    addis 3, 2, .LCPI7_2@toc@ha
383; PC64LE9-NEXT:    fmr 30, 1
384; PC64LE9-NEXT:    fmr 2, 31
385; PC64LE9-NEXT:    lfs 1, .LCPI7_2@toc@l(3)
386; PC64LE9-NEXT:    bl fmodf
387; PC64LE9-NEXT:    nop
388; PC64LE9-NEXT:    addis 3, 2, .LCPI7_3@toc@ha
389; PC64LE9-NEXT:    fmr 29, 1
390; PC64LE9-NEXT:    fmr 2, 31
391; PC64LE9-NEXT:    lfs 1, .LCPI7_3@toc@l(3)
392; PC64LE9-NEXT:    bl fmodf
393; PC64LE9-NEXT:    nop
394; PC64LE9-NEXT:    xscvdpspn 34, 1
395; PC64LE9-NEXT:    xscvdpspn 35, 29
396; PC64LE9-NEXT:    addis 3, 2, .LCPI7_4@toc@ha
397; PC64LE9-NEXT:    addi 3, 3, .LCPI7_4@toc@l
398; PC64LE9-NEXT:    lxvx 36, 0, 3
399; PC64LE9-NEXT:    vmrghw 2, 3, 2
400; PC64LE9-NEXT:    xscvdpspn 35, 30
401; PC64LE9-NEXT:    vperm 2, 3, 2, 4
402; PC64LE9-NEXT:    addi 1, 1, 64
403; PC64LE9-NEXT:    ld 0, 16(1)
404; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
405; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
406; PC64LE9-NEXT:    mtlr 0
407; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
408; PC64LE9-NEXT:    blr
409entry:
410  %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32(
411           <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
412           <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
413           metadata !"round.dynamic",
414           metadata !"fpexcept.strict") #1
415  ret <3 x float> %rem
416}
417
418define <3 x double> @constrained_vector_frem_v3f64() #0 {
419; PC64LE-LABEL: constrained_vector_frem_v3f64:
420; PC64LE:       # %bb.0: # %entry
421; PC64LE-NEXT:    mflr 0
422; PC64LE-NEXT:    std 0, 16(1)
423; PC64LE-NEXT:    stdu 1, -80(1)
424; PC64LE-NEXT:    addis 4, 2, .LCPI8_1@toc@ha
425; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
426; PC64LE-NEXT:    li 3, 48
427; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
428; PC64LE-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
429; PC64LE-NEXT:    lfs 31, .LCPI8_1@toc@l(4)
430; PC64LE-NEXT:    lfs 1, .LCPI8_0@toc@l(3)
431; PC64LE-NEXT:    fmr 2, 31
432; PC64LE-NEXT:    bl fmod
433; PC64LE-NEXT:    nop
434; PC64LE-NEXT:    addis 3, 2, .LCPI8_2@toc@ha
435; PC64LE-NEXT:    fmr 2, 31
436; PC64LE-NEXT:    xxlor 63, 1, 1
437; PC64LE-NEXT:    lfs 1, .LCPI8_2@toc@l(3)
438; PC64LE-NEXT:    bl fmod
439; PC64LE-NEXT:    nop
440; PC64LE-NEXT:    addis 3, 2, .LCPI8_3@toc@ha
441; PC64LE-NEXT:    fmr 2, 31
442; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
443; PC64LE-NEXT:    xxmrghd 63, 1, 63
444; PC64LE-NEXT:    lfs 1, .LCPI8_3@toc@l(3)
445; PC64LE-NEXT:    bl fmod
446; PC64LE-NEXT:    nop
447; PC64LE-NEXT:    xxswapd 0, 63
448; PC64LE-NEXT:    li 3, 48
449; PC64LE-NEXT:    xxlor 2, 63, 63
450; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
451; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
452; PC64LE-NEXT:    fmr 3, 1
453; PC64LE-NEXT:    fmr 1, 0
454; PC64LE-NEXT:    addi 1, 1, 80
455; PC64LE-NEXT:    ld 0, 16(1)
456; PC64LE-NEXT:    mtlr 0
457; PC64LE-NEXT:    blr
458;
459; PC64LE9-LABEL: constrained_vector_frem_v3f64:
460; PC64LE9:       # %bb.0: # %entry
461; PC64LE9-NEXT:    mflr 0
462; PC64LE9-NEXT:    std 0, 16(1)
463; PC64LE9-NEXT:    stdu 1, -64(1)
464; PC64LE9-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
465; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
466; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
467; PC64LE9-NEXT:    lfs 1, .LCPI8_0@toc@l(3)
468; PC64LE9-NEXT:    addis 3, 2, .LCPI8_1@toc@ha
469; PC64LE9-NEXT:    lfs 31, .LCPI8_1@toc@l(3)
470; PC64LE9-NEXT:    fmr 2, 31
471; PC64LE9-NEXT:    bl fmod
472; PC64LE9-NEXT:    nop
473; PC64LE9-NEXT:    addis 3, 2, .LCPI8_2@toc@ha
474; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
475; PC64LE9-NEXT:    fmr 2, 31
476; PC64LE9-NEXT:    lfs 1, .LCPI8_2@toc@l(3)
477; PC64LE9-NEXT:    bl fmod
478; PC64LE9-NEXT:    nop
479; PC64LE9-NEXT:    addis 3, 2, .LCPI8_3@toc@ha
480; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
481; PC64LE9-NEXT:    xxmrghd 63, 1, 63
482; PC64LE9-NEXT:    fmr 2, 31
483; PC64LE9-NEXT:    lfs 1, .LCPI8_3@toc@l(3)
484; PC64LE9-NEXT:    bl fmod
485; PC64LE9-NEXT:    nop
486; PC64LE9-NEXT:    fmr 3, 1
487; PC64LE9-NEXT:    xxswapd 1, 63
488; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
489; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
490; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
491; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
492; PC64LE9-NEXT:    addi 1, 1, 64
493; PC64LE9-NEXT:    ld 0, 16(1)
494; PC64LE9-NEXT:    mtlr 0
495; PC64LE9-NEXT:    blr
496entry:
497  %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64(
498           <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
499           <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
500           metadata !"round.dynamic",
501           metadata !"fpexcept.strict") #1
502  ret <3 x double> %rem
503}
504
505define <4 x double> @constrained_vector_frem_v4f64() #0 {
506; PC64LE-LABEL: constrained_vector_frem_v4f64:
507; PC64LE:       # %bb.0:
508; PC64LE-NEXT:    mflr 0
509; PC64LE-NEXT:    std 0, 16(1)
510; PC64LE-NEXT:    stdu 1, -96(1)
511; PC64LE-NEXT:    addis 4, 2, .LCPI9_1@toc@ha
512; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
513; PC64LE-NEXT:    li 3, 48
514; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
515; PC64LE-NEXT:    li 3, 64
516; PC64LE-NEXT:    lfs 31, .LCPI9_1@toc@l(4)
517; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
518; PC64LE-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
519; PC64LE-NEXT:    lfs 1, .LCPI9_0@toc@l(3)
520; PC64LE-NEXT:    fmr 2, 31
521; PC64LE-NEXT:    bl fmod
522; PC64LE-NEXT:    nop
523; PC64LE-NEXT:    addis 3, 2, .LCPI9_2@toc@ha
524; PC64LE-NEXT:    fmr 2, 31
525; PC64LE-NEXT:    xxlor 63, 1, 1
526; PC64LE-NEXT:    lfs 1, .LCPI9_2@toc@l(3)
527; PC64LE-NEXT:    bl fmod
528; PC64LE-NEXT:    nop
529; PC64LE-NEXT:    addis 3, 2, .LCPI9_3@toc@ha
530; PC64LE-NEXT:    fmr 2, 31
531; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
532; PC64LE-NEXT:    xxmrghd 63, 1, 63
533; PC64LE-NEXT:    lfs 1, .LCPI9_3@toc@l(3)
534; PC64LE-NEXT:    bl fmod
535; PC64LE-NEXT:    nop
536; PC64LE-NEXT:    addis 3, 2, .LCPI9_4@toc@ha
537; PC64LE-NEXT:    fmr 2, 31
538; PC64LE-NEXT:    xxlor 62, 1, 1
539; PC64LE-NEXT:    lfs 1, .LCPI9_4@toc@l(3)
540; PC64LE-NEXT:    bl fmod
541; PC64LE-NEXT:    nop
542; PC64LE-NEXT:    li 3, 64
543; PC64LE-NEXT:    vmr 2, 31
544; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
545; PC64LE-NEXT:    xxmrghd 35, 1, 62
546; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
547; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
548; PC64LE-NEXT:    li 3, 48
549; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
550; PC64LE-NEXT:    addi 1, 1, 96
551; PC64LE-NEXT:    ld 0, 16(1)
552; PC64LE-NEXT:    mtlr 0
553; PC64LE-NEXT:    blr
554;
555; PC64LE9-LABEL: constrained_vector_frem_v4f64:
556; PC64LE9:       # %bb.0:
557; PC64LE9-NEXT:    mflr 0
558; PC64LE9-NEXT:    std 0, 16(1)
559; PC64LE9-NEXT:    stdu 1, -80(1)
560; PC64LE9-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
561; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
562; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
563; PC64LE9-NEXT:    lfs 1, .LCPI9_0@toc@l(3)
564; PC64LE9-NEXT:    addis 3, 2, .LCPI9_1@toc@ha
565; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
566; PC64LE9-NEXT:    lfs 31, .LCPI9_1@toc@l(3)
567; PC64LE9-NEXT:    fmr 2, 31
568; PC64LE9-NEXT:    bl fmod
569; PC64LE9-NEXT:    nop
570; PC64LE9-NEXT:    addis 3, 2, .LCPI9_2@toc@ha
571; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
572; PC64LE9-NEXT:    fmr 2, 31
573; PC64LE9-NEXT:    lfs 1, .LCPI9_2@toc@l(3)
574; PC64LE9-NEXT:    bl fmod
575; PC64LE9-NEXT:    nop
576; PC64LE9-NEXT:    addis 3, 2, .LCPI9_3@toc@ha
577; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
578; PC64LE9-NEXT:    xxmrghd 63, 1, 63
579; PC64LE9-NEXT:    fmr 2, 31
580; PC64LE9-NEXT:    lfs 1, .LCPI9_3@toc@l(3)
581; PC64LE9-NEXT:    bl fmod
582; PC64LE9-NEXT:    nop
583; PC64LE9-NEXT:    addis 3, 2, .LCPI9_4@toc@ha
584; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
585; PC64LE9-NEXT:    fmr 2, 31
586; PC64LE9-NEXT:    lfs 1, .LCPI9_4@toc@l(3)
587; PC64LE9-NEXT:    bl fmod
588; PC64LE9-NEXT:    nop
589; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
590; PC64LE9-NEXT:    xxmrghd 35, 1, 62
591; PC64LE9-NEXT:    vmr 2, 31
592; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
593; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
594; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
595; PC64LE9-NEXT:    addi 1, 1, 80
596; PC64LE9-NEXT:    ld 0, 16(1)
597; PC64LE9-NEXT:    mtlr 0
598; PC64LE9-NEXT:    blr
599  %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64(
600           <4 x double> <double 1.000000e+00, double 2.000000e+00,
601                         double 3.000000e+00, double 4.000000e+00>,
602           <4 x double> <double 1.000000e+01, double 1.000000e+01,
603                         double 1.000000e+01, double 1.000000e+01>,
604           metadata !"round.dynamic",
605           metadata !"fpexcept.strict") #1
606  ret <4 x double> %rem
607}
608
609define <1 x float> @constrained_vector_fmul_v1f32() #0 {
610; PC64LE-LABEL: constrained_vector_fmul_v1f32:
611; PC64LE:       # %bb.0: # %entry
612; PC64LE-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
613; PC64LE-NEXT:    addis 4, 2, .LCPI10_1@toc@ha
614; PC64LE-NEXT:    lfs 0, .LCPI10_0@toc@l(3)
615; PC64LE-NEXT:    lfs 1, .LCPI10_1@toc@l(4)
616; PC64LE-NEXT:    xsmulsp 1, 1, 0
617; PC64LE-NEXT:    blr
618;
619; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
620; PC64LE9:       # %bb.0: # %entry
621; PC64LE9-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
622; PC64LE9-NEXT:    lfs 0, .LCPI10_0@toc@l(3)
623; PC64LE9-NEXT:    addis 3, 2, .LCPI10_1@toc@ha
624; PC64LE9-NEXT:    lfs 1, .LCPI10_1@toc@l(3)
625; PC64LE9-NEXT:    xsmulsp 1, 1, 0
626; PC64LE9-NEXT:    blr
627entry:
628  %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
629           <1 x float> <float 0x7FF0000000000000>,
630           <1 x float> <float 2.000000e+00>,
631           metadata !"round.dynamic",
632           metadata !"fpexcept.strict") #1
633  ret <1 x float> %mul
634}
635
636define <2 x double> @constrained_vector_fmul_v2f64() #0 {
637; PC64LE-LABEL: constrained_vector_fmul_v2f64:
638; PC64LE:       # %bb.0: # %entry
639; PC64LE-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
640; PC64LE-NEXT:    addis 4, 2, .LCPI11_1@toc@ha
641; PC64LE-NEXT:    addi 3, 3, .LCPI11_0@toc@l
642; PC64LE-NEXT:    addi 4, 4, .LCPI11_1@toc@l
643; PC64LE-NEXT:    lxvd2x 0, 0, 3
644; PC64LE-NEXT:    lxvd2x 1, 0, 4
645; PC64LE-NEXT:    xxswapd 0, 0
646; PC64LE-NEXT:    xxswapd 1, 1
647; PC64LE-NEXT:    xvmuldp 34, 1, 0
648; PC64LE-NEXT:    blr
649;
650; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
651; PC64LE9:       # %bb.0: # %entry
652; PC64LE9-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
653; PC64LE9-NEXT:    addi 3, 3, .LCPI11_0@toc@l
654; PC64LE9-NEXT:    lxvx 0, 0, 3
655; PC64LE9-NEXT:    addis 3, 2, .LCPI11_1@toc@ha
656; PC64LE9-NEXT:    addi 3, 3, .LCPI11_1@toc@l
657; PC64LE9-NEXT:    lxvx 1, 0, 3
658; PC64LE9-NEXT:    xvmuldp 34, 1, 0
659; PC64LE9-NEXT:    blr
660entry:
661  %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(
662           <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
663           <2 x double> <double 2.000000e+00, double 3.000000e+00>,
664           metadata !"round.dynamic",
665           metadata !"fpexcept.strict") #1
666  ret <2 x double> %mul
667}
668
669define <3 x float> @constrained_vector_fmul_v3f32() #0 {
670; PC64LE-LABEL: constrained_vector_fmul_v3f32:
671; PC64LE:       # %bb.0: # %entry
672; PC64LE-NEXT:    addis 3, 2, .LCPI12_1@toc@ha
673; PC64LE-NEXT:    addis 4, 2, .LCPI12_3@toc@ha
674; PC64LE-NEXT:    addis 5, 2, .LCPI12_2@toc@ha
675; PC64LE-NEXT:    lfs 0, .LCPI12_1@toc@l(3)
676; PC64LE-NEXT:    lfs 1, .LCPI12_3@toc@l(4)
677; PC64LE-NEXT:    lfs 2, .LCPI12_2@toc@l(5)
678; PC64LE-NEXT:    addis 3, 2, .LCPI12_0@toc@ha
679; PC64LE-NEXT:    xsmulsp 1, 0, 1
680; PC64LE-NEXT:    lfs 3, .LCPI12_0@toc@l(3)
681; PC64LE-NEXT:    addis 3, 2, .LCPI12_4@toc@ha
682; PC64LE-NEXT:    xsmulsp 2, 0, 2
683; PC64LE-NEXT:    addi 3, 3, .LCPI12_4@toc@l
684; PC64LE-NEXT:    lvx 4, 0, 3
685; PC64LE-NEXT:    xsmulsp 0, 0, 3
686; PC64LE-NEXT:    xscvdpspn 34, 1
687; PC64LE-NEXT:    xscvdpspn 35, 2
688; PC64LE-NEXT:    vmrghw 2, 3, 2
689; PC64LE-NEXT:    xscvdpspn 35, 0
690; PC64LE-NEXT:    vperm 2, 3, 2, 4
691; PC64LE-NEXT:    blr
692;
693; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
694; PC64LE9:       # %bb.0: # %entry
695; PC64LE9-NEXT:    addis 3, 2, .LCPI12_0@toc@ha
696; PC64LE9-NEXT:    lfs 0, .LCPI12_0@toc@l(3)
697; PC64LE9-NEXT:    addis 3, 2, .LCPI12_1@toc@ha
698; PC64LE9-NEXT:    lfs 1, .LCPI12_1@toc@l(3)
699; PC64LE9-NEXT:    addis 3, 2, .LCPI12_2@toc@ha
700; PC64LE9-NEXT:    xsmulsp 0, 1, 0
701; PC64LE9-NEXT:    lfs 2, .LCPI12_2@toc@l(3)
702; PC64LE9-NEXT:    addis 3, 2, .LCPI12_3@toc@ha
703; PC64LE9-NEXT:    lfs 3, .LCPI12_3@toc@l(3)
704; PC64LE9-NEXT:    addis 3, 2, .LCPI12_4@toc@ha
705; PC64LE9-NEXT:    addi 3, 3, .LCPI12_4@toc@l
706; PC64LE9-NEXT:    lxvx 36, 0, 3
707; PC64LE9-NEXT:    xsmulsp 2, 1, 2
708; PC64LE9-NEXT:    xsmulsp 1, 1, 3
709; PC64LE9-NEXT:    xscvdpspn 35, 2
710; PC64LE9-NEXT:    xscvdpspn 34, 1
711; PC64LE9-NEXT:    vmrghw 2, 3, 2
712; PC64LE9-NEXT:    xscvdpspn 35, 0
713; PC64LE9-NEXT:    vperm 2, 3, 2, 4
714; PC64LE9-NEXT:    blr
715entry:
716  %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32(
717           <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000,
718                        float 0x7FF0000000000000>,
719           <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>,
720           metadata !"round.dynamic",
721           metadata !"fpexcept.strict") #1
722  ret <3 x float> %mul
723}
724
725define <3 x double> @constrained_vector_fmul_v3f64() #0 {
726; PC64LE-LABEL: constrained_vector_fmul_v3f64:
727; PC64LE:       # %bb.0: # %entry
728; PC64LE-NEXT:    addis 3, 2, .LCPI13_2@toc@ha
729; PC64LE-NEXT:    addis 4, 2, .LCPI13_3@toc@ha
730; PC64LE-NEXT:    addi 3, 3, .LCPI13_2@toc@l
731; PC64LE-NEXT:    addi 4, 4, .LCPI13_3@toc@l
732; PC64LE-NEXT:    lxvd2x 0, 0, 3
733; PC64LE-NEXT:    lxvd2x 1, 0, 4
734; PC64LE-NEXT:    addis 3, 2, .LCPI13_0@toc@ha
735; PC64LE-NEXT:    addis 4, 2, .LCPI13_1@toc@ha
736; PC64LE-NEXT:    lfd 3, .LCPI13_0@toc@l(3)
737; PC64LE-NEXT:    xxswapd 0, 0
738; PC64LE-NEXT:    xxswapd 1, 1
739; PC64LE-NEXT:    xvmuldp 2, 1, 0
740; PC64LE-NEXT:    lfs 0, .LCPI13_1@toc@l(4)
741; PC64LE-NEXT:    xsmuldp 3, 3, 0
742; PC64LE-NEXT:    xxswapd 1, 2
743; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
744; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
745; PC64LE-NEXT:    blr
746;
747; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
748; PC64LE9:       # %bb.0: # %entry
749; PC64LE9-NEXT:    addis 3, 2, .LCPI13_0@toc@ha
750; PC64LE9-NEXT:    lfd 0, .LCPI13_0@toc@l(3)
751; PC64LE9-NEXT:    addis 3, 2, .LCPI13_1@toc@ha
752; PC64LE9-NEXT:    lfs 1, .LCPI13_1@toc@l(3)
753; PC64LE9-NEXT:    addis 3, 2, .LCPI13_2@toc@ha
754; PC64LE9-NEXT:    addi 3, 3, .LCPI13_2@toc@l
755; PC64LE9-NEXT:    xsmuldp 3, 0, 1
756; PC64LE9-NEXT:    lxvx 0, 0, 3
757; PC64LE9-NEXT:    addis 3, 2, .LCPI13_3@toc@ha
758; PC64LE9-NEXT:    addi 3, 3, .LCPI13_3@toc@l
759; PC64LE9-NEXT:    lxvx 1, 0, 3
760; PC64LE9-NEXT:    xvmuldp 2, 1, 0
761; PC64LE9-NEXT:    xxswapd 1, 2
762; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
763; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
764; PC64LE9-NEXT:    blr
765entry:
766  %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
767           <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
768                         double 0x7FEFFFFFFFFFFFFF>,
769           <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>,
770           metadata !"round.dynamic",
771           metadata !"fpexcept.strict") #1
772  ret <3 x double> %mul
773}
774
775define <4 x double> @constrained_vector_fmul_v4f64() #0 {
776; PC64LE-LABEL: constrained_vector_fmul_v4f64:
777; PC64LE:       # %bb.0: # %entry
778; PC64LE-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
779; PC64LE-NEXT:    addis 4, 2, .LCPI14_1@toc@ha
780; PC64LE-NEXT:    addis 5, 2, .LCPI14_2@toc@ha
781; PC64LE-NEXT:    addi 3, 3, .LCPI14_0@toc@l
782; PC64LE-NEXT:    addi 4, 4, .LCPI14_1@toc@l
783; PC64LE-NEXT:    lxvd2x 0, 0, 3
784; PC64LE-NEXT:    addi 3, 5, .LCPI14_2@toc@l
785; PC64LE-NEXT:    lxvd2x 1, 0, 4
786; PC64LE-NEXT:    lxvd2x 2, 0, 3
787; PC64LE-NEXT:    xxswapd 0, 0
788; PC64LE-NEXT:    xxswapd 1, 1
789; PC64LE-NEXT:    xxswapd 2, 2
790; PC64LE-NEXT:    xvmuldp 35, 1, 0
791; PC64LE-NEXT:    xvmuldp 34, 1, 2
792; PC64LE-NEXT:    blr
793;
794; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
795; PC64LE9:       # %bb.0: # %entry
796; PC64LE9-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
797; PC64LE9-NEXT:    addi 3, 3, .LCPI14_0@toc@l
798; PC64LE9-NEXT:    lxvx 0, 0, 3
799; PC64LE9-NEXT:    addis 3, 2, .LCPI14_1@toc@ha
800; PC64LE9-NEXT:    addi 3, 3, .LCPI14_1@toc@l
801; PC64LE9-NEXT:    lxvx 1, 0, 3
802; PC64LE9-NEXT:    addis 3, 2, .LCPI14_2@toc@ha
803; PC64LE9-NEXT:    addi 3, 3, .LCPI14_2@toc@l
804; PC64LE9-NEXT:    xvmuldp 35, 1, 0
805; PC64LE9-NEXT:    lxvx 0, 0, 3
806; PC64LE9-NEXT:    xvmuldp 34, 1, 0
807; PC64LE9-NEXT:    blr
808entry:
809  %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(
810           <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
811                         double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
812           <4 x double> <double 2.000000e+00, double 3.000000e+00,
813                         double 4.000000e+00, double 5.000000e+00>,
814           metadata !"round.dynamic",
815           metadata !"fpexcept.strict") #1
816  ret <4 x double> %mul
817}
818
819define <1 x float> @constrained_vector_fadd_v1f32() #0 {
820; PC64LE-LABEL: constrained_vector_fadd_v1f32:
821; PC64LE:       # %bb.0: # %entry
822; PC64LE-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
823; PC64LE-NEXT:    addis 4, 2, .LCPI15_1@toc@ha
824; PC64LE-NEXT:    lfs 0, .LCPI15_0@toc@l(3)
825; PC64LE-NEXT:    lfs 1, .LCPI15_1@toc@l(4)
826; PC64LE-NEXT:    xsaddsp 1, 1, 0
827; PC64LE-NEXT:    blr
828;
829; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
830; PC64LE9:       # %bb.0: # %entry
831; PC64LE9-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
832; PC64LE9-NEXT:    lfs 0, .LCPI15_0@toc@l(3)
833; PC64LE9-NEXT:    addis 3, 2, .LCPI15_1@toc@ha
834; PC64LE9-NEXT:    lfs 1, .LCPI15_1@toc@l(3)
835; PC64LE9-NEXT:    xsaddsp 1, 1, 0
836; PC64LE9-NEXT:    blr
837entry:
838  %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
839           <1 x float> <float 0x7FF0000000000000>,
840           <1 x float> <float 1.0>,
841           metadata !"round.dynamic",
842           metadata !"fpexcept.strict") #1
843  ret <1 x float> %add
844}
845
846define <2 x double> @constrained_vector_fadd_v2f64() #0 {
847; PC64LE-LABEL: constrained_vector_fadd_v2f64:
848; PC64LE:       # %bb.0: # %entry
849; PC64LE-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
850; PC64LE-NEXT:    addis 4, 2, .LCPI16_1@toc@ha
851; PC64LE-NEXT:    addi 3, 3, .LCPI16_0@toc@l
852; PC64LE-NEXT:    addi 4, 4, .LCPI16_1@toc@l
853; PC64LE-NEXT:    lxvd2x 0, 0, 3
854; PC64LE-NEXT:    lxvd2x 1, 0, 4
855; PC64LE-NEXT:    xxswapd 0, 0
856; PC64LE-NEXT:    xxswapd 1, 1
857; PC64LE-NEXT:    xvadddp 34, 1, 0
858; PC64LE-NEXT:    blr
859;
860; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
861; PC64LE9:       # %bb.0: # %entry
862; PC64LE9-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
863; PC64LE9-NEXT:    addi 3, 3, .LCPI16_0@toc@l
864; PC64LE9-NEXT:    lxvx 0, 0, 3
865; PC64LE9-NEXT:    addis 3, 2, .LCPI16_1@toc@ha
866; PC64LE9-NEXT:    addi 3, 3, .LCPI16_1@toc@l
867; PC64LE9-NEXT:    lxvx 1, 0, 3
868; PC64LE9-NEXT:    xvadddp 34, 1, 0
869; PC64LE9-NEXT:    blr
870entry:
871  %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(
872           <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
873           <2 x double> <double 1.000000e+00, double 1.000000e-01>,
874           metadata !"round.dynamic",
875           metadata !"fpexcept.strict") #1
876  ret <2 x double> %add
877}
878
879define <3 x float> @constrained_vector_fadd_v3f32() #0 {
880; PC64LE-LABEL: constrained_vector_fadd_v3f32:
881; PC64LE:       # %bb.0: # %entry
882; PC64LE-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
883; PC64LE-NEXT:    addis 4, 2, .LCPI17_2@toc@ha
884; PC64LE-NEXT:    addis 5, 2, .LCPI17_1@toc@ha
885; PC64LE-NEXT:    xxlxor 3, 3, 3
886; PC64LE-NEXT:    lfs 0, .LCPI17_0@toc@l(3)
887; PC64LE-NEXT:    lfs 1, .LCPI17_2@toc@l(4)
888; PC64LE-NEXT:    lfs 2, .LCPI17_1@toc@l(5)
889; PC64LE-NEXT:    addis 3, 2, .LCPI17_3@toc@ha
890; PC64LE-NEXT:    addi 3, 3, .LCPI17_3@toc@l
891; PC64LE-NEXT:    xsaddsp 1, 0, 1
892; PC64LE-NEXT:    lvx 4, 0, 3
893; PC64LE-NEXT:    xsaddsp 2, 0, 2
894; PC64LE-NEXT:    xsaddsp 0, 0, 3
895; PC64LE-NEXT:    xscvdpspn 34, 1
896; PC64LE-NEXT:    xscvdpspn 35, 2
897; PC64LE-NEXT:    vmrghw 2, 3, 2
898; PC64LE-NEXT:    xscvdpspn 35, 0
899; PC64LE-NEXT:    vperm 2, 3, 2, 4
900; PC64LE-NEXT:    blr
901;
902; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
903; PC64LE9:       # %bb.0: # %entry
904; PC64LE9-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
905; PC64LE9-NEXT:    xxlxor 1, 1, 1
906; PC64LE9-NEXT:    lfs 0, .LCPI17_0@toc@l(3)
907; PC64LE9-NEXT:    addis 3, 2, .LCPI17_1@toc@ha
908; PC64LE9-NEXT:    lfs 2, .LCPI17_1@toc@l(3)
909; PC64LE9-NEXT:    addis 3, 2, .LCPI17_2@toc@ha
910; PC64LE9-NEXT:    lfs 3, .LCPI17_2@toc@l(3)
911; PC64LE9-NEXT:    addis 3, 2, .LCPI17_3@toc@ha
912; PC64LE9-NEXT:    addi 3, 3, .LCPI17_3@toc@l
913; PC64LE9-NEXT:    xsaddsp 1, 0, 1
914; PC64LE9-NEXT:    lxvx 36, 0, 3
915; PC64LE9-NEXT:    xsaddsp 2, 0, 2
916; PC64LE9-NEXT:    xsaddsp 0, 0, 3
917; PC64LE9-NEXT:    xscvdpspn 35, 2
918; PC64LE9-NEXT:    xscvdpspn 34, 0
919; PC64LE9-NEXT:    vmrghw 2, 3, 2
920; PC64LE9-NEXT:    xscvdpspn 35, 1
921; PC64LE9-NEXT:    vperm 2, 3, 2, 4
922; PC64LE9-NEXT:    blr
923entry:
924  %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32(
925           <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
926                        float 0xFFFFFFFFE0000000>,
927           <3 x float> <float 2.0, float 1.0, float 0.0>,
928           metadata !"round.dynamic",
929           metadata !"fpexcept.strict") #1
930  ret <3 x float> %add
931}
932
933define <3 x double> @constrained_vector_fadd_v3f64() #0 {
934; PC64LE-LABEL: constrained_vector_fadd_v3f64:
935; PC64LE:       # %bb.0: # %entry
936; PC64LE-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
937; PC64LE-NEXT:    addis 4, 2, .LCPI18_2@toc@ha
938; PC64LE-NEXT:    addi 3, 3, .LCPI18_1@toc@l
939; PC64LE-NEXT:    addi 4, 4, .LCPI18_2@toc@l
940; PC64LE-NEXT:    lxvd2x 0, 0, 3
941; PC64LE-NEXT:    lxvd2x 1, 0, 4
942; PC64LE-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
943; PC64LE-NEXT:    lfd 3, .LCPI18_0@toc@l(3)
944; PC64LE-NEXT:    xxswapd 0, 0
945; PC64LE-NEXT:    xxswapd 1, 1
946; PC64LE-NEXT:    xvadddp 2, 1, 0
947; PC64LE-NEXT:    xxlxor 0, 0, 0
948; PC64LE-NEXT:    xsadddp 3, 3, 0
949; PC64LE-NEXT:    xxswapd 1, 2
950; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
951; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
952; PC64LE-NEXT:    blr
953;
954; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
955; PC64LE9:       # %bb.0: # %entry
956; PC64LE9-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
957; PC64LE9-NEXT:    xxlxor 1, 1, 1
958; PC64LE9-NEXT:    lfd 0, .LCPI18_0@toc@l(3)
959; PC64LE9-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
960; PC64LE9-NEXT:    addi 3, 3, .LCPI18_1@toc@l
961; PC64LE9-NEXT:    xsadddp 3, 0, 1
962; PC64LE9-NEXT:    lxvx 0, 0, 3
963; PC64LE9-NEXT:    addis 3, 2, .LCPI18_2@toc@ha
964; PC64LE9-NEXT:    addi 3, 3, .LCPI18_2@toc@l
965; PC64LE9-NEXT:    lxvx 1, 0, 3
966; PC64LE9-NEXT:    xvadddp 2, 1, 0
967; PC64LE9-NEXT:    xxswapd 1, 2
968; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
969; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
970; PC64LE9-NEXT:    blr
971entry:
972  %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
973           <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
974                         double 0x7FEFFFFFFFFFFFFF>,
975           <3 x double> <double 2.0, double 1.0, double 0.0>,
976           metadata !"round.dynamic",
977           metadata !"fpexcept.strict") #1
978  ret <3 x double> %add
979}
980
981define <4 x double> @constrained_vector_fadd_v4f64() #0 {
982; PC64LE-LABEL: constrained_vector_fadd_v4f64:
983; PC64LE:       # %bb.0: # %entry
984; PC64LE-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
985; PC64LE-NEXT:    addis 4, 2, .LCPI19_1@toc@ha
986; PC64LE-NEXT:    addis 5, 2, .LCPI19_2@toc@ha
987; PC64LE-NEXT:    addi 3, 3, .LCPI19_0@toc@l
988; PC64LE-NEXT:    addi 4, 4, .LCPI19_1@toc@l
989; PC64LE-NEXT:    lxvd2x 0, 0, 3
990; PC64LE-NEXT:    addi 3, 5, .LCPI19_2@toc@l
991; PC64LE-NEXT:    lxvd2x 1, 0, 4
992; PC64LE-NEXT:    lxvd2x 2, 0, 3
993; PC64LE-NEXT:    xxswapd 0, 0
994; PC64LE-NEXT:    xxswapd 1, 1
995; PC64LE-NEXT:    xxswapd 2, 2
996; PC64LE-NEXT:    xvadddp 35, 1, 0
997; PC64LE-NEXT:    xvadddp 34, 1, 2
998; PC64LE-NEXT:    blr
999;
1000; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
1001; PC64LE9:       # %bb.0: # %entry
1002; PC64LE9-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1003; PC64LE9-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1004; PC64LE9-NEXT:    lxvx 0, 0, 3
1005; PC64LE9-NEXT:    addis 3, 2, .LCPI19_1@toc@ha
1006; PC64LE9-NEXT:    addi 3, 3, .LCPI19_1@toc@l
1007; PC64LE9-NEXT:    lxvx 1, 0, 3
1008; PC64LE9-NEXT:    addis 3, 2, .LCPI19_2@toc@ha
1009; PC64LE9-NEXT:    addi 3, 3, .LCPI19_2@toc@l
1010; PC64LE9-NEXT:    xvadddp 35, 1, 0
1011; PC64LE9-NEXT:    lxvx 0, 0, 3
1012; PC64LE9-NEXT:    xvadddp 34, 1, 0
1013; PC64LE9-NEXT:    blr
1014entry:
1015  %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64(
1016           <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
1017                         double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
1018           <4 x double> <double 1.000000e+00, double 1.000000e-01,
1019                         double 2.000000e+00, double 2.000000e-01>,
1020           metadata !"round.dynamic",
1021           metadata !"fpexcept.strict") #1
1022  ret <4 x double> %add
1023}
1024
1025define <1 x float> @constrained_vector_fsub_v1f32() #0 {
1026; PC64LE-LABEL: constrained_vector_fsub_v1f32:
1027; PC64LE:       # %bb.0: # %entry
1028; PC64LE-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1029; PC64LE-NEXT:    addis 4, 2, .LCPI20_1@toc@ha
1030; PC64LE-NEXT:    lfs 0, .LCPI20_0@toc@l(3)
1031; PC64LE-NEXT:    lfs 1, .LCPI20_1@toc@l(4)
1032; PC64LE-NEXT:    xssubsp 1, 1, 0
1033; PC64LE-NEXT:    blr
1034;
1035; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
1036; PC64LE9:       # %bb.0: # %entry
1037; PC64LE9-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1038; PC64LE9-NEXT:    lfs 0, .LCPI20_0@toc@l(3)
1039; PC64LE9-NEXT:    addis 3, 2, .LCPI20_1@toc@ha
1040; PC64LE9-NEXT:    lfs 1, .LCPI20_1@toc@l(3)
1041; PC64LE9-NEXT:    xssubsp 1, 1, 0
1042; PC64LE9-NEXT:    blr
1043entry:
1044  %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
1045           <1 x float> <float 0x7FF0000000000000>,
1046           <1 x float> <float 1.000000e+00>,
1047           metadata !"round.dynamic",
1048           metadata !"fpexcept.strict") #1
1049  ret <1 x float> %sub
1050}
1051
1052define <2 x double> @constrained_vector_fsub_v2f64() #0 {
1053; PC64LE-LABEL: constrained_vector_fsub_v2f64:
1054; PC64LE:       # %bb.0: # %entry
1055; PC64LE-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1056; PC64LE-NEXT:    addis 4, 2, .LCPI21_1@toc@ha
1057; PC64LE-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1058; PC64LE-NEXT:    addi 4, 4, .LCPI21_1@toc@l
1059; PC64LE-NEXT:    lxvd2x 0, 0, 3
1060; PC64LE-NEXT:    lxvd2x 1, 0, 4
1061; PC64LE-NEXT:    xxswapd 0, 0
1062; PC64LE-NEXT:    xxswapd 1, 1
1063; PC64LE-NEXT:    xvsubdp 34, 1, 0
1064; PC64LE-NEXT:    blr
1065;
1066; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
1067; PC64LE9:       # %bb.0: # %entry
1068; PC64LE9-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1069; PC64LE9-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1070; PC64LE9-NEXT:    lxvx 0, 0, 3
1071; PC64LE9-NEXT:    addis 3, 2, .LCPI21_1@toc@ha
1072; PC64LE9-NEXT:    addi 3, 3, .LCPI21_1@toc@l
1073; PC64LE9-NEXT:    lxvx 1, 0, 3
1074; PC64LE9-NEXT:    xvsubdp 34, 1, 0
1075; PC64LE9-NEXT:    blr
1076entry:
1077  %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(
1078           <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1079           <2 x double> <double 1.000000e+00, double 1.000000e-01>,
1080           metadata !"round.dynamic",
1081           metadata !"fpexcept.strict") #1
1082  ret <2 x double> %sub
1083}
1084
1085define <3 x float> @constrained_vector_fsub_v3f32() #0 {
1086; PC64LE-LABEL: constrained_vector_fsub_v3f32:
1087; PC64LE:       # %bb.0: # %entry
1088; PC64LE-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
1089; PC64LE-NEXT:    addis 4, 2, .LCPI22_2@toc@ha
1090; PC64LE-NEXT:    addis 5, 2, .LCPI22_1@toc@ha
1091; PC64LE-NEXT:    xxlxor 3, 3, 3
1092; PC64LE-NEXT:    lfs 0, .LCPI22_0@toc@l(3)
1093; PC64LE-NEXT:    lfs 1, .LCPI22_2@toc@l(4)
1094; PC64LE-NEXT:    lfs 2, .LCPI22_1@toc@l(5)
1095; PC64LE-NEXT:    addis 3, 2, .LCPI22_3@toc@ha
1096; PC64LE-NEXT:    addi 3, 3, .LCPI22_3@toc@l
1097; PC64LE-NEXT:    xssubsp 1, 0, 1
1098; PC64LE-NEXT:    lvx 4, 0, 3
1099; PC64LE-NEXT:    xssubsp 2, 0, 2
1100; PC64LE-NEXT:    xssubsp 0, 0, 3
1101; PC64LE-NEXT:    xscvdpspn 34, 1
1102; PC64LE-NEXT:    xscvdpspn 35, 2
1103; PC64LE-NEXT:    vmrghw 2, 3, 2
1104; PC64LE-NEXT:    xscvdpspn 35, 0
1105; PC64LE-NEXT:    vperm 2, 3, 2, 4
1106; PC64LE-NEXT:    blr
1107;
1108; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
1109; PC64LE9:       # %bb.0: # %entry
1110; PC64LE9-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
1111; PC64LE9-NEXT:    xxlxor 1, 1, 1
1112; PC64LE9-NEXT:    lfs 0, .LCPI22_0@toc@l(3)
1113; PC64LE9-NEXT:    addis 3, 2, .LCPI22_1@toc@ha
1114; PC64LE9-NEXT:    lfs 2, .LCPI22_1@toc@l(3)
1115; PC64LE9-NEXT:    addis 3, 2, .LCPI22_2@toc@ha
1116; PC64LE9-NEXT:    lfs 3, .LCPI22_2@toc@l(3)
1117; PC64LE9-NEXT:    addis 3, 2, .LCPI22_3@toc@ha
1118; PC64LE9-NEXT:    addi 3, 3, .LCPI22_3@toc@l
1119; PC64LE9-NEXT:    xssubsp 1, 0, 1
1120; PC64LE9-NEXT:    lxvx 36, 0, 3
1121; PC64LE9-NEXT:    xssubsp 2, 0, 2
1122; PC64LE9-NEXT:    xssubsp 0, 0, 3
1123; PC64LE9-NEXT:    xscvdpspn 35, 2
1124; PC64LE9-NEXT:    xscvdpspn 34, 0
1125; PC64LE9-NEXT:    vmrghw 2, 3, 2
1126; PC64LE9-NEXT:    xscvdpspn 35, 1
1127; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1128; PC64LE9-NEXT:    blr
1129entry:
1130  %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(
1131           <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
1132                        float 0xFFFFFFFFE0000000>,
1133           <3 x float> <float 2.0, float 1.0, float 0.0>,
1134           metadata !"round.dynamic",
1135           metadata !"fpexcept.strict") #1
1136  ret <3 x float> %sub
1137}
1138
1139define <3 x double> @constrained_vector_fsub_v3f64() #0 {
1140; PC64LE-LABEL: constrained_vector_fsub_v3f64:
1141; PC64LE:       # %bb.0: # %entry
1142; PC64LE-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
1143; PC64LE-NEXT:    addis 4, 2, .LCPI23_2@toc@ha
1144; PC64LE-NEXT:    addi 3, 3, .LCPI23_1@toc@l
1145; PC64LE-NEXT:    addi 4, 4, .LCPI23_2@toc@l
1146; PC64LE-NEXT:    lxvd2x 0, 0, 3
1147; PC64LE-NEXT:    lxvd2x 1, 0, 4
1148; PC64LE-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
1149; PC64LE-NEXT:    lfd 3, .LCPI23_0@toc@l(3)
1150; PC64LE-NEXT:    xxswapd 0, 0
1151; PC64LE-NEXT:    xxswapd 1, 1
1152; PC64LE-NEXT:    xvsubdp 2, 1, 0
1153; PC64LE-NEXT:    xxlxor 0, 0, 0
1154; PC64LE-NEXT:    xssubdp 3, 3, 0
1155; PC64LE-NEXT:    xxswapd 1, 2
1156; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1157; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1158; PC64LE-NEXT:    blr
1159;
1160; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
1161; PC64LE9:       # %bb.0: # %entry
1162; PC64LE9-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
1163; PC64LE9-NEXT:    xxlxor 1, 1, 1
1164; PC64LE9-NEXT:    lfd 0, .LCPI23_0@toc@l(3)
1165; PC64LE9-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
1166; PC64LE9-NEXT:    addi 3, 3, .LCPI23_1@toc@l
1167; PC64LE9-NEXT:    xssubdp 3, 0, 1
1168; PC64LE9-NEXT:    lxvx 0, 0, 3
1169; PC64LE9-NEXT:    addis 3, 2, .LCPI23_2@toc@ha
1170; PC64LE9-NEXT:    addi 3, 3, .LCPI23_2@toc@l
1171; PC64LE9-NEXT:    lxvx 1, 0, 3
1172; PC64LE9-NEXT:    xvsubdp 2, 1, 0
1173; PC64LE9-NEXT:    xxswapd 1, 2
1174; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1175; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1176; PC64LE9-NEXT:    blr
1177entry:
1178  %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
1179           <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1180                         double 0xFFEFFFFFFFFFFFFF>,
1181           <3 x double> <double 2.0, double 1.0, double 0.0>,
1182           metadata !"round.dynamic",
1183           metadata !"fpexcept.strict") #1
1184  ret <3 x double> %sub
1185}
1186
1187define <4 x double> @constrained_vector_fsub_v4f64() #0 {
1188; PC64LE-LABEL: constrained_vector_fsub_v4f64:
1189; PC64LE:       # %bb.0: # %entry
1190; PC64LE-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
1191; PC64LE-NEXT:    addis 4, 2, .LCPI24_1@toc@ha
1192; PC64LE-NEXT:    addis 5, 2, .LCPI24_2@toc@ha
1193; PC64LE-NEXT:    addi 3, 3, .LCPI24_0@toc@l
1194; PC64LE-NEXT:    addi 4, 4, .LCPI24_1@toc@l
1195; PC64LE-NEXT:    lxvd2x 0, 0, 3
1196; PC64LE-NEXT:    addi 3, 5, .LCPI24_2@toc@l
1197; PC64LE-NEXT:    lxvd2x 1, 0, 4
1198; PC64LE-NEXT:    lxvd2x 2, 0, 3
1199; PC64LE-NEXT:    xxswapd 0, 0
1200; PC64LE-NEXT:    xxswapd 1, 1
1201; PC64LE-NEXT:    xxswapd 2, 2
1202; PC64LE-NEXT:    xvsubdp 35, 1, 0
1203; PC64LE-NEXT:    xvsubdp 34, 1, 2
1204; PC64LE-NEXT:    blr
1205;
1206; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
1207; PC64LE9:       # %bb.0: # %entry
1208; PC64LE9-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
1209; PC64LE9-NEXT:    addi 3, 3, .LCPI24_0@toc@l
1210; PC64LE9-NEXT:    lxvx 0, 0, 3
1211; PC64LE9-NEXT:    addis 3, 2, .LCPI24_1@toc@ha
1212; PC64LE9-NEXT:    addi 3, 3, .LCPI24_1@toc@l
1213; PC64LE9-NEXT:    lxvx 1, 0, 3
1214; PC64LE9-NEXT:    addis 3, 2, .LCPI24_2@toc@ha
1215; PC64LE9-NEXT:    addi 3, 3, .LCPI24_2@toc@l
1216; PC64LE9-NEXT:    xvsubdp 35, 1, 0
1217; PC64LE9-NEXT:    lxvx 0, 0, 3
1218; PC64LE9-NEXT:    xvsubdp 34, 1, 0
1219; PC64LE9-NEXT:    blr
1220entry:
1221  %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(
1222           <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1223                         double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1224           <4 x double> <double 1.000000e+00, double 1.000000e-01,
1225                         double 2.000000e+00, double 2.000000e-01>,
1226           metadata !"round.dynamic",
1227           metadata !"fpexcept.strict") #1
1228  ret <4 x double> %sub
1229}
1230
1231define <1 x float> @constrained_vector_sqrt_v1f32() #0 {
1232; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
1233; PC64LE:       # %bb.0: # %entry
1234; PC64LE-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
1235; PC64LE-NEXT:    lfs 0, .LCPI25_0@toc@l(3)
1236; PC64LE-NEXT:    xssqrtsp 1, 0
1237; PC64LE-NEXT:    blr
1238;
1239; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
1240; PC64LE9:       # %bb.0: # %entry
1241; PC64LE9-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
1242; PC64LE9-NEXT:    lfs 0, .LCPI25_0@toc@l(3)
1243; PC64LE9-NEXT:    xssqrtsp 1, 0
1244; PC64LE9-NEXT:    blr
1245entry:
1246  %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
1247                              <1 x float> <float 42.0>,
1248                              metadata !"round.dynamic",
1249                              metadata !"fpexcept.strict") #1
1250  ret <1 x float> %sqrt
1251}
1252
1253define <2 x double> @constrained_vector_sqrt_v2f64() #0 {
1254; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
1255; PC64LE:       # %bb.0: # %entry
1256; PC64LE-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
1257; PC64LE-NEXT:    addi 3, 3, .LCPI26_0@toc@l
1258; PC64LE-NEXT:    lxvd2x 0, 0, 3
1259; PC64LE-NEXT:    xxswapd 0, 0
1260; PC64LE-NEXT:    xvsqrtdp 34, 0
1261; PC64LE-NEXT:    blr
1262;
1263; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
1264; PC64LE9:       # %bb.0: # %entry
1265; PC64LE9-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
1266; PC64LE9-NEXT:    addi 3, 3, .LCPI26_0@toc@l
1267; PC64LE9-NEXT:    lxvx 0, 0, 3
1268; PC64LE9-NEXT:    xvsqrtdp 34, 0
1269; PC64LE9-NEXT:    blr
1270entry:
1271  %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
1272                              <2 x double> <double 42.0, double 42.1>,
1273                              metadata !"round.dynamic",
1274                              metadata !"fpexcept.strict") #1
1275  ret <2 x double> %sqrt
1276}
1277
1278define <3 x float> @constrained_vector_sqrt_v3f32() #0 {
1279; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
1280; PC64LE:       # %bb.0: # %entry
1281; PC64LE-NEXT:    addis 3, 2, .LCPI27_2@toc@ha
1282; PC64LE-NEXT:    addis 4, 2, .LCPI27_1@toc@ha
1283; PC64LE-NEXT:    lfs 0, .LCPI27_2@toc@l(3)
1284; PC64LE-NEXT:    lfs 1, .LCPI27_1@toc@l(4)
1285; PC64LE-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
1286; PC64LE-NEXT:    xssqrtsp 0, 0
1287; PC64LE-NEXT:    lfs 2, .LCPI27_0@toc@l(3)
1288; PC64LE-NEXT:    addis 3, 2, .LCPI27_3@toc@ha
1289; PC64LE-NEXT:    xssqrtsp 1, 1
1290; PC64LE-NEXT:    addi 3, 3, .LCPI27_3@toc@l
1291; PC64LE-NEXT:    lvx 4, 0, 3
1292; PC64LE-NEXT:    xssqrtsp 2, 2
1293; PC64LE-NEXT:    xscvdpspn 34, 0
1294; PC64LE-NEXT:    xscvdpspn 35, 1
1295; PC64LE-NEXT:    vmrghw 2, 3, 2
1296; PC64LE-NEXT:    xscvdpspn 35, 2
1297; PC64LE-NEXT:    vperm 2, 3, 2, 4
1298; PC64LE-NEXT:    blr
1299;
1300; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
1301; PC64LE9:       # %bb.0: # %entry
1302; PC64LE9-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
1303; PC64LE9-NEXT:    lfs 0, .LCPI27_0@toc@l(3)
1304; PC64LE9-NEXT:    addis 3, 2, .LCPI27_1@toc@ha
1305; PC64LE9-NEXT:    lfs 1, .LCPI27_1@toc@l(3)
1306; PC64LE9-NEXT:    addis 3, 2, .LCPI27_2@toc@ha
1307; PC64LE9-NEXT:    xssqrtsp 0, 0
1308; PC64LE9-NEXT:    lfs 2, .LCPI27_2@toc@l(3)
1309; PC64LE9-NEXT:    addis 3, 2, .LCPI27_3@toc@ha
1310; PC64LE9-NEXT:    addi 3, 3, .LCPI27_3@toc@l
1311; PC64LE9-NEXT:    xssqrtsp 1, 1
1312; PC64LE9-NEXT:    xssqrtsp 2, 2
1313; PC64LE9-NEXT:    xscvdpspn 36, 0
1314; PC64LE9-NEXT:    xscvdpspn 35, 1
1315; PC64LE9-NEXT:    xscvdpspn 34, 2
1316; PC64LE9-NEXT:    vmrghw 2, 3, 2
1317; PC64LE9-NEXT:    lxvx 35, 0, 3
1318; PC64LE9-NEXT:    vperm 2, 4, 2, 3
1319; PC64LE9-NEXT:    blr
1320entry:
1321  %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
1322                              <3 x float> <float 42.0, float 43.0, float 44.0>,
1323                              metadata !"round.dynamic",
1324                              metadata !"fpexcept.strict") #1
1325  ret <3 x float> %sqrt
1326}
1327
1328define <3 x double> @constrained_vector_sqrt_v3f64() #0 {
1329; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
1330; PC64LE:       # %bb.0: # %entry
1331; PC64LE-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
1332; PC64LE-NEXT:    addi 3, 3, .LCPI28_1@toc@l
1333; PC64LE-NEXT:    lxvd2x 0, 0, 3
1334; PC64LE-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
1335; PC64LE-NEXT:    lfd 1, .LCPI28_0@toc@l(3)
1336; PC64LE-NEXT:    xxswapd 0, 0
1337; PC64LE-NEXT:    xssqrtdp 3, 1
1338; PC64LE-NEXT:    xvsqrtdp 2, 0
1339; PC64LE-NEXT:    xxswapd 1, 2
1340; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1341; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1342; PC64LE-NEXT:    blr
1343;
1344; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
1345; PC64LE9:       # %bb.0: # %entry
1346; PC64LE9-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
1347; PC64LE9-NEXT:    lfd 0, .LCPI28_0@toc@l(3)
1348; PC64LE9-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
1349; PC64LE9-NEXT:    addi 3, 3, .LCPI28_1@toc@l
1350; PC64LE9-NEXT:    xssqrtdp 3, 0
1351; PC64LE9-NEXT:    lxvx 0, 0, 3
1352; PC64LE9-NEXT:    xvsqrtdp 2, 0
1353; PC64LE9-NEXT:    xxswapd 1, 2
1354; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1355; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1356; PC64LE9-NEXT:    blr
1357entry:
1358  %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
1359                          <3 x double> <double 42.0, double 42.1, double 42.2>,
1360                          metadata !"round.dynamic",
1361                          metadata !"fpexcept.strict") #1
1362  ret <3 x double> %sqrt
1363}
1364
1365define <4 x double> @constrained_vector_sqrt_v4f64() #0 {
1366; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
1367; PC64LE:       # %bb.0: # %entry
1368; PC64LE-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
1369; PC64LE-NEXT:    addis 4, 2, .LCPI29_1@toc@ha
1370; PC64LE-NEXT:    addi 3, 3, .LCPI29_0@toc@l
1371; PC64LE-NEXT:    addi 4, 4, .LCPI29_1@toc@l
1372; PC64LE-NEXT:    lxvd2x 0, 0, 3
1373; PC64LE-NEXT:    lxvd2x 1, 0, 4
1374; PC64LE-NEXT:    xxswapd 0, 0
1375; PC64LE-NEXT:    xxswapd 1, 1
1376; PC64LE-NEXT:    xvsqrtdp 35, 0
1377; PC64LE-NEXT:    xvsqrtdp 34, 1
1378; PC64LE-NEXT:    blr
1379;
1380; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
1381; PC64LE9:       # %bb.0: # %entry
1382; PC64LE9-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
1383; PC64LE9-NEXT:    addi 3, 3, .LCPI29_0@toc@l
1384; PC64LE9-NEXT:    lxvx 0, 0, 3
1385; PC64LE9-NEXT:    addis 3, 2, .LCPI29_1@toc@ha
1386; PC64LE9-NEXT:    addi 3, 3, .LCPI29_1@toc@l
1387; PC64LE9-NEXT:    xvsqrtdp 35, 0
1388; PC64LE9-NEXT:    lxvx 0, 0, 3
1389; PC64LE9-NEXT:    xvsqrtdp 34, 0
1390; PC64LE9-NEXT:    blr
1391 entry:
1392  %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(
1393                              <4 x double> <double 42.0, double 42.1,
1394                                            double 42.2, double 42.3>,
1395                              metadata !"round.dynamic",
1396                              metadata !"fpexcept.strict") #1
1397  ret <4 x double> %sqrt
1398}
1399
1400define <1 x float> @constrained_vector_pow_v1f32() #0 {
1401; PC64LE-LABEL: constrained_vector_pow_v1f32:
1402; PC64LE:       # %bb.0: # %entry
1403; PC64LE-NEXT:    mflr 0
1404; PC64LE-NEXT:    std 0, 16(1)
1405; PC64LE-NEXT:    stdu 1, -32(1)
1406; PC64LE-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
1407; PC64LE-NEXT:    addis 4, 2, .LCPI30_1@toc@ha
1408; PC64LE-NEXT:    lfs 1, .LCPI30_0@toc@l(3)
1409; PC64LE-NEXT:    lfs 2, .LCPI30_1@toc@l(4)
1410; PC64LE-NEXT:    bl powf
1411; PC64LE-NEXT:    nop
1412; PC64LE-NEXT:    addi 1, 1, 32
1413; PC64LE-NEXT:    ld 0, 16(1)
1414; PC64LE-NEXT:    mtlr 0
1415; PC64LE-NEXT:    blr
1416;
1417; PC64LE9-LABEL: constrained_vector_pow_v1f32:
1418; PC64LE9:       # %bb.0: # %entry
1419; PC64LE9-NEXT:    mflr 0
1420; PC64LE9-NEXT:    std 0, 16(1)
1421; PC64LE9-NEXT:    stdu 1, -32(1)
1422; PC64LE9-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
1423; PC64LE9-NEXT:    lfs 1, .LCPI30_0@toc@l(3)
1424; PC64LE9-NEXT:    addis 3, 2, .LCPI30_1@toc@ha
1425; PC64LE9-NEXT:    lfs 2, .LCPI30_1@toc@l(3)
1426; PC64LE9-NEXT:    bl powf
1427; PC64LE9-NEXT:    nop
1428; PC64LE9-NEXT:    addi 1, 1, 32
1429; PC64LE9-NEXT:    ld 0, 16(1)
1430; PC64LE9-NEXT:    mtlr 0
1431; PC64LE9-NEXT:    blr
1432entry:
1433  %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
1434                             <1 x float> <float 42.0>,
1435                             <1 x float> <float 3.0>,
1436                             metadata !"round.dynamic",
1437                             metadata !"fpexcept.strict") #1
1438  ret <1 x float> %pow
1439}
1440
1441define <2 x double> @constrained_vector_pow_v2f64() #0 {
1442; PC64LE-LABEL: constrained_vector_pow_v2f64:
1443; PC64LE:       # %bb.0: # %entry
1444; PC64LE-NEXT:    mflr 0
1445; PC64LE-NEXT:    std 0, 16(1)
1446; PC64LE-NEXT:    stdu 1, -80(1)
1447; PC64LE-NEXT:    addis 4, 2, .LCPI31_1@toc@ha
1448; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
1449; PC64LE-NEXT:    li 3, 48
1450; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1451; PC64LE-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
1452; PC64LE-NEXT:    lfs 31, .LCPI31_1@toc@l(4)
1453; PC64LE-NEXT:    lfd 1, .LCPI31_0@toc@l(3)
1454; PC64LE-NEXT:    fmr 2, 31
1455; PC64LE-NEXT:    bl pow
1456; PC64LE-NEXT:    nop
1457; PC64LE-NEXT:    addis 3, 2, .LCPI31_2@toc@ha
1458; PC64LE-NEXT:    fmr 2, 31
1459; PC64LE-NEXT:    xxlor 63, 1, 1
1460; PC64LE-NEXT:    lfd 1, .LCPI31_2@toc@l(3)
1461; PC64LE-NEXT:    bl pow
1462; PC64LE-NEXT:    nop
1463; PC64LE-NEXT:    li 3, 48
1464; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1465; PC64LE-NEXT:    xxmrghd 34, 1, 63
1466; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
1467; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1468; PC64LE-NEXT:    addi 1, 1, 80
1469; PC64LE-NEXT:    ld 0, 16(1)
1470; PC64LE-NEXT:    mtlr 0
1471; PC64LE-NEXT:    blr
1472;
1473; PC64LE9-LABEL: constrained_vector_pow_v2f64:
1474; PC64LE9:       # %bb.0: # %entry
1475; PC64LE9-NEXT:    mflr 0
1476; PC64LE9-NEXT:    std 0, 16(1)
1477; PC64LE9-NEXT:    stdu 1, -64(1)
1478; PC64LE9-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
1479; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
1480; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
1481; PC64LE9-NEXT:    lfd 1, .LCPI31_0@toc@l(3)
1482; PC64LE9-NEXT:    addis 3, 2, .LCPI31_1@toc@ha
1483; PC64LE9-NEXT:    lfs 31, .LCPI31_1@toc@l(3)
1484; PC64LE9-NEXT:    fmr 2, 31
1485; PC64LE9-NEXT:    bl pow
1486; PC64LE9-NEXT:    nop
1487; PC64LE9-NEXT:    addis 3, 2, .LCPI31_2@toc@ha
1488; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
1489; PC64LE9-NEXT:    fmr 2, 31
1490; PC64LE9-NEXT:    lfd 1, .LCPI31_2@toc@l(3)
1491; PC64LE9-NEXT:    bl pow
1492; PC64LE9-NEXT:    nop
1493; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1494; PC64LE9-NEXT:    xxmrghd 34, 1, 63
1495; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
1496; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
1497; PC64LE9-NEXT:    addi 1, 1, 64
1498; PC64LE9-NEXT:    ld 0, 16(1)
1499; PC64LE9-NEXT:    mtlr 0
1500; PC64LE9-NEXT:    blr
1501entry:
1502  %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64(
1503                             <2 x double> <double 42.1, double 42.2>,
1504                             <2 x double> <double 3.0, double 3.0>,
1505                             metadata !"round.dynamic",
1506                             metadata !"fpexcept.strict") #1
1507  ret <2 x double> %pow
1508}
1509
1510define <3 x float> @constrained_vector_pow_v3f32() #0 {
1511; PC64LE-LABEL: constrained_vector_pow_v3f32:
1512; PC64LE:       # %bb.0: # %entry
1513; PC64LE-NEXT:    mflr 0
1514; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
1515; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1516; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1517; PC64LE-NEXT:    std 0, 16(1)
1518; PC64LE-NEXT:    stdu 1, -64(1)
1519; PC64LE-NEXT:    addis 4, 2, .LCPI32_1@toc@ha
1520; PC64LE-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
1521; PC64LE-NEXT:    lfs 31, .LCPI32_1@toc@l(4)
1522; PC64LE-NEXT:    lfs 1, .LCPI32_0@toc@l(3)
1523; PC64LE-NEXT:    fmr 2, 31
1524; PC64LE-NEXT:    bl powf
1525; PC64LE-NEXT:    nop
1526; PC64LE-NEXT:    addis 3, 2, .LCPI32_2@toc@ha
1527; PC64LE-NEXT:    fmr 2, 31
1528; PC64LE-NEXT:    fmr 30, 1
1529; PC64LE-NEXT:    lfs 1, .LCPI32_2@toc@l(3)
1530; PC64LE-NEXT:    bl powf
1531; PC64LE-NEXT:    nop
1532; PC64LE-NEXT:    addis 3, 2, .LCPI32_3@toc@ha
1533; PC64LE-NEXT:    fmr 2, 31
1534; PC64LE-NEXT:    fmr 29, 1
1535; PC64LE-NEXT:    lfs 1, .LCPI32_3@toc@l(3)
1536; PC64LE-NEXT:    bl powf
1537; PC64LE-NEXT:    nop
1538; PC64LE-NEXT:    xscvdpspn 34, 29
1539; PC64LE-NEXT:    addis 3, 2, .LCPI32_4@toc@ha
1540; PC64LE-NEXT:    xscvdpspn 35, 1
1541; PC64LE-NEXT:    addi 3, 3, .LCPI32_4@toc@l
1542; PC64LE-NEXT:    lvx 4, 0, 3
1543; PC64LE-NEXT:    vmrghw 2, 2, 3
1544; PC64LE-NEXT:    xscvdpspn 35, 30
1545; PC64LE-NEXT:    vperm 2, 3, 2, 4
1546; PC64LE-NEXT:    addi 1, 1, 64
1547; PC64LE-NEXT:    ld 0, 16(1)
1548; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1549; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1550; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
1551; PC64LE-NEXT:    mtlr 0
1552; PC64LE-NEXT:    blr
1553;
1554; PC64LE9-LABEL: constrained_vector_pow_v3f32:
1555; PC64LE9:       # %bb.0: # %entry
1556; PC64LE9-NEXT:    mflr 0
1557; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
1558; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1559; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1560; PC64LE9-NEXT:    std 0, 16(1)
1561; PC64LE9-NEXT:    stdu 1, -64(1)
1562; PC64LE9-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
1563; PC64LE9-NEXT:    lfs 1, .LCPI32_0@toc@l(3)
1564; PC64LE9-NEXT:    addis 3, 2, .LCPI32_1@toc@ha
1565; PC64LE9-NEXT:    lfs 31, .LCPI32_1@toc@l(3)
1566; PC64LE9-NEXT:    fmr 2, 31
1567; PC64LE9-NEXT:    bl powf
1568; PC64LE9-NEXT:    nop
1569; PC64LE9-NEXT:    addis 3, 2, .LCPI32_2@toc@ha
1570; PC64LE9-NEXT:    fmr 30, 1
1571; PC64LE9-NEXT:    fmr 2, 31
1572; PC64LE9-NEXT:    lfs 1, .LCPI32_2@toc@l(3)
1573; PC64LE9-NEXT:    bl powf
1574; PC64LE9-NEXT:    nop
1575; PC64LE9-NEXT:    addis 3, 2, .LCPI32_3@toc@ha
1576; PC64LE9-NEXT:    fmr 29, 1
1577; PC64LE9-NEXT:    fmr 2, 31
1578; PC64LE9-NEXT:    lfs 1, .LCPI32_3@toc@l(3)
1579; PC64LE9-NEXT:    bl powf
1580; PC64LE9-NEXT:    nop
1581; PC64LE9-NEXT:    xscvdpspn 34, 1
1582; PC64LE9-NEXT:    xscvdpspn 35, 29
1583; PC64LE9-NEXT:    addis 3, 2, .LCPI32_4@toc@ha
1584; PC64LE9-NEXT:    addi 3, 3, .LCPI32_4@toc@l
1585; PC64LE9-NEXT:    lxvx 36, 0, 3
1586; PC64LE9-NEXT:    vmrghw 2, 3, 2
1587; PC64LE9-NEXT:    xscvdpspn 35, 30
1588; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1589; PC64LE9-NEXT:    addi 1, 1, 64
1590; PC64LE9-NEXT:    ld 0, 16(1)
1591; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1592; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1593; PC64LE9-NEXT:    mtlr 0
1594; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
1595; PC64LE9-NEXT:    blr
1596entry:
1597  %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32(
1598                             <3 x float> <float 42.0, float 43.0, float 44.0>,
1599                             <3 x float> <float 3.0, float 3.0, float 3.0>,
1600                             metadata !"round.dynamic",
1601                             metadata !"fpexcept.strict") #1
1602  ret <3 x float> %pow
1603}
1604
1605define <3 x double> @constrained_vector_pow_v3f64() #0 {
1606; PC64LE-LABEL: constrained_vector_pow_v3f64:
1607; PC64LE:       # %bb.0: # %entry
1608; PC64LE-NEXT:    mflr 0
1609; PC64LE-NEXT:    std 0, 16(1)
1610; PC64LE-NEXT:    stdu 1, -80(1)
1611; PC64LE-NEXT:    addis 4, 2, .LCPI33_1@toc@ha
1612; PC64LE-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
1613; PC64LE-NEXT:    li 3, 48
1614; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1615; PC64LE-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
1616; PC64LE-NEXT:    lfs 31, .LCPI33_1@toc@l(4)
1617; PC64LE-NEXT:    lfs 1, .LCPI33_0@toc@l(3)
1618; PC64LE-NEXT:    fmr 2, 31
1619; PC64LE-NEXT:    bl pow
1620; PC64LE-NEXT:    nop
1621; PC64LE-NEXT:    addis 3, 2, .LCPI33_2@toc@ha
1622; PC64LE-NEXT:    fmr 2, 31
1623; PC64LE-NEXT:    xxlor 63, 1, 1
1624; PC64LE-NEXT:    lfd 1, .LCPI33_2@toc@l(3)
1625; PC64LE-NEXT:    bl pow
1626; PC64LE-NEXT:    nop
1627; PC64LE-NEXT:    addis 3, 2, .LCPI33_3@toc@ha
1628; PC64LE-NEXT:    fmr 2, 31
1629; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1630; PC64LE-NEXT:    xxmrghd 63, 1, 63
1631; PC64LE-NEXT:    lfd 1, .LCPI33_3@toc@l(3)
1632; PC64LE-NEXT:    bl pow
1633; PC64LE-NEXT:    nop
1634; PC64LE-NEXT:    xxswapd 0, 63
1635; PC64LE-NEXT:    li 3, 48
1636; PC64LE-NEXT:    xxlor 2, 63, 63
1637; PC64LE-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
1638; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1639; PC64LE-NEXT:    fmr 3, 1
1640; PC64LE-NEXT:    fmr 1, 0
1641; PC64LE-NEXT:    addi 1, 1, 80
1642; PC64LE-NEXT:    ld 0, 16(1)
1643; PC64LE-NEXT:    mtlr 0
1644; PC64LE-NEXT:    blr
1645;
1646; PC64LE9-LABEL: constrained_vector_pow_v3f64:
1647; PC64LE9:       # %bb.0: # %entry
1648; PC64LE9-NEXT:    mflr 0
1649; PC64LE9-NEXT:    std 0, 16(1)
1650; PC64LE9-NEXT:    stdu 1, -64(1)
1651; PC64LE9-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
1652; PC64LE9-NEXT:    stfd 31, 56(1) # 8-byte Folded Spill
1653; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
1654; PC64LE9-NEXT:    lfs 1, .LCPI33_0@toc@l(3)
1655; PC64LE9-NEXT:    addis 3, 2, .LCPI33_1@toc@ha
1656; PC64LE9-NEXT:    lfs 31, .LCPI33_1@toc@l(3)
1657; PC64LE9-NEXT:    fmr 2, 31
1658; PC64LE9-NEXT:    bl pow
1659; PC64LE9-NEXT:    nop
1660; PC64LE9-NEXT:    addis 3, 2, .LCPI33_2@toc@ha
1661; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
1662; PC64LE9-NEXT:    fmr 2, 31
1663; PC64LE9-NEXT:    lfd 1, .LCPI33_2@toc@l(3)
1664; PC64LE9-NEXT:    bl pow
1665; PC64LE9-NEXT:    nop
1666; PC64LE9-NEXT:    addis 3, 2, .LCPI33_3@toc@ha
1667; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1668; PC64LE9-NEXT:    xxmrghd 63, 1, 63
1669; PC64LE9-NEXT:    fmr 2, 31
1670; PC64LE9-NEXT:    lfd 1, .LCPI33_3@toc@l(3)
1671; PC64LE9-NEXT:    bl pow
1672; PC64LE9-NEXT:    nop
1673; PC64LE9-NEXT:    fmr 3, 1
1674; PC64LE9-NEXT:    xxswapd 1, 63
1675; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
1676; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
1677; PC64LE9-NEXT:    lfd 31, 56(1) # 8-byte Folded Reload
1678; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1679; PC64LE9-NEXT:    addi 1, 1, 64
1680; PC64LE9-NEXT:    ld 0, 16(1)
1681; PC64LE9-NEXT:    mtlr 0
1682; PC64LE9-NEXT:    blr
1683entry:
1684  %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
1685                          <3 x double> <double 42.0, double 42.1, double 42.2>,
1686                          <3 x double> <double 3.0, double 3.0, double 3.0>,
1687                          metadata !"round.dynamic",
1688                          metadata !"fpexcept.strict") #1
1689  ret <3 x double> %pow
1690}
1691
1692define <4 x double> @constrained_vector_pow_v4f64() #0 {
1693; PC64LE-LABEL: constrained_vector_pow_v4f64:
1694; PC64LE:       # %bb.0: # %entry
1695; PC64LE-NEXT:    mflr 0
1696; PC64LE-NEXT:    std 0, 16(1)
1697; PC64LE-NEXT:    stdu 1, -96(1)
1698; PC64LE-NEXT:    addis 4, 2, .LCPI34_1@toc@ha
1699; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
1700; PC64LE-NEXT:    li 3, 48
1701; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
1702; PC64LE-NEXT:    li 3, 64
1703; PC64LE-NEXT:    lfs 31, .LCPI34_1@toc@l(4)
1704; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1705; PC64LE-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
1706; PC64LE-NEXT:    lfd 1, .LCPI34_0@toc@l(3)
1707; PC64LE-NEXT:    fmr 2, 31
1708; PC64LE-NEXT:    bl pow
1709; PC64LE-NEXT:    nop
1710; PC64LE-NEXT:    addis 3, 2, .LCPI34_2@toc@ha
1711; PC64LE-NEXT:    fmr 2, 31
1712; PC64LE-NEXT:    xxlor 63, 1, 1
1713; PC64LE-NEXT:    lfd 1, .LCPI34_2@toc@l(3)
1714; PC64LE-NEXT:    bl pow
1715; PC64LE-NEXT:    nop
1716; PC64LE-NEXT:    addis 3, 2, .LCPI34_3@toc@ha
1717; PC64LE-NEXT:    fmr 2, 31
1718; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1719; PC64LE-NEXT:    xxmrghd 63, 1, 63
1720; PC64LE-NEXT:    lfd 1, .LCPI34_3@toc@l(3)
1721; PC64LE-NEXT:    bl pow
1722; PC64LE-NEXT:    nop
1723; PC64LE-NEXT:    addis 3, 2, .LCPI34_4@toc@ha
1724; PC64LE-NEXT:    fmr 2, 31
1725; PC64LE-NEXT:    xxlor 62, 1, 1
1726; PC64LE-NEXT:    lfd 1, .LCPI34_4@toc@l(3)
1727; PC64LE-NEXT:    bl pow
1728; PC64LE-NEXT:    nop
1729; PC64LE-NEXT:    li 3, 64
1730; PC64LE-NEXT:    vmr 2, 31
1731; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1732; PC64LE-NEXT:    xxmrghd 35, 1, 62
1733; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
1734; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1735; PC64LE-NEXT:    li 3, 48
1736; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
1737; PC64LE-NEXT:    addi 1, 1, 96
1738; PC64LE-NEXT:    ld 0, 16(1)
1739; PC64LE-NEXT:    mtlr 0
1740; PC64LE-NEXT:    blr
1741;
1742; PC64LE9-LABEL: constrained_vector_pow_v4f64:
1743; PC64LE9:       # %bb.0: # %entry
1744; PC64LE9-NEXT:    mflr 0
1745; PC64LE9-NEXT:    std 0, 16(1)
1746; PC64LE9-NEXT:    stdu 1, -80(1)
1747; PC64LE9-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
1748; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
1749; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
1750; PC64LE9-NEXT:    lfd 1, .LCPI34_0@toc@l(3)
1751; PC64LE9-NEXT:    addis 3, 2, .LCPI34_1@toc@ha
1752; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
1753; PC64LE9-NEXT:    lfs 31, .LCPI34_1@toc@l(3)
1754; PC64LE9-NEXT:    fmr 2, 31
1755; PC64LE9-NEXT:    bl pow
1756; PC64LE9-NEXT:    nop
1757; PC64LE9-NEXT:    addis 3, 2, .LCPI34_2@toc@ha
1758; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
1759; PC64LE9-NEXT:    fmr 2, 31
1760; PC64LE9-NEXT:    lfd 1, .LCPI34_2@toc@l(3)
1761; PC64LE9-NEXT:    bl pow
1762; PC64LE9-NEXT:    nop
1763; PC64LE9-NEXT:    addis 3, 2, .LCPI34_3@toc@ha
1764; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1765; PC64LE9-NEXT:    xxmrghd 63, 1, 63
1766; PC64LE9-NEXT:    fmr 2, 31
1767; PC64LE9-NEXT:    lfd 1, .LCPI34_3@toc@l(3)
1768; PC64LE9-NEXT:    bl pow
1769; PC64LE9-NEXT:    nop
1770; PC64LE9-NEXT:    addis 3, 2, .LCPI34_4@toc@ha
1771; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
1772; PC64LE9-NEXT:    fmr 2, 31
1773; PC64LE9-NEXT:    lfd 1, .LCPI34_4@toc@l(3)
1774; PC64LE9-NEXT:    bl pow
1775; PC64LE9-NEXT:    nop
1776; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1777; PC64LE9-NEXT:    xxmrghd 35, 1, 62
1778; PC64LE9-NEXT:    vmr 2, 31
1779; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
1780; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
1781; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
1782; PC64LE9-NEXT:    addi 1, 1, 80
1783; PC64LE9-NEXT:    ld 0, 16(1)
1784; PC64LE9-NEXT:    mtlr 0
1785; PC64LE9-NEXT:    blr
1786entry:
1787  %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64(
1788                             <4 x double> <double 42.1, double 42.2,
1789                                           double 42.3, double 42.4>,
1790                             <4 x double> <double 3.0, double 3.0,
1791                                           double 3.0, double 3.0>,
1792                             metadata !"round.dynamic",
1793                             metadata !"fpexcept.strict") #1
1794  ret <4 x double> %pow
1795}
1796
1797define <1 x float> @constrained_vector_powi_v1f32() #0 {
1798; PC64LE-LABEL: constrained_vector_powi_v1f32:
1799; PC64LE:       # %bb.0: # %entry
1800; PC64LE-NEXT:    mflr 0
1801; PC64LE-NEXT:    std 0, 16(1)
1802; PC64LE-NEXT:    stdu 1, -32(1)
1803; PC64LE-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
1804; PC64LE-NEXT:    li 4, 3
1805; PC64LE-NEXT:    lfs 1, .LCPI35_0@toc@l(3)
1806; PC64LE-NEXT:    bl __powisf2
1807; PC64LE-NEXT:    nop
1808; PC64LE-NEXT:    addi 1, 1, 32
1809; PC64LE-NEXT:    ld 0, 16(1)
1810; PC64LE-NEXT:    mtlr 0
1811; PC64LE-NEXT:    blr
1812;
1813; PC64LE9-LABEL: constrained_vector_powi_v1f32:
1814; PC64LE9:       # %bb.0: # %entry
1815; PC64LE9-NEXT:    mflr 0
1816; PC64LE9-NEXT:    std 0, 16(1)
1817; PC64LE9-NEXT:    stdu 1, -32(1)
1818; PC64LE9-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
1819; PC64LE9-NEXT:    li 4, 3
1820; PC64LE9-NEXT:    lfs 1, .LCPI35_0@toc@l(3)
1821; PC64LE9-NEXT:    bl __powisf2
1822; PC64LE9-NEXT:    nop
1823; PC64LE9-NEXT:    addi 1, 1, 32
1824; PC64LE9-NEXT:    ld 0, 16(1)
1825; PC64LE9-NEXT:    mtlr 0
1826; PC64LE9-NEXT:    blr
1827entry:
1828  %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
1829                              <1 x float> <float 42.0>,
1830                              i32 3,
1831                              metadata !"round.dynamic",
1832                              metadata !"fpexcept.strict") #1
1833  ret <1 x float> %powi
1834}
1835
1836define <2 x double> @constrained_vector_powi_v2f64() #0 {
1837; PC64LE-LABEL: constrained_vector_powi_v2f64:
1838; PC64LE:       # %bb.0: # %entry
1839; PC64LE-NEXT:    mflr 0
1840; PC64LE-NEXT:    std 0, 16(1)
1841; PC64LE-NEXT:    stdu 1, -64(1)
1842; PC64LE-NEXT:    li 3, 48
1843; PC64LE-NEXT:    li 4, 3
1844; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1845; PC64LE-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
1846; PC64LE-NEXT:    lfd 1, .LCPI36_0@toc@l(3)
1847; PC64LE-NEXT:    bl __powidf2
1848; PC64LE-NEXT:    nop
1849; PC64LE-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
1850; PC64LE-NEXT:    xxlor 63, 1, 1
1851; PC64LE-NEXT:    li 4, 3
1852; PC64LE-NEXT:    lfd 1, .LCPI36_1@toc@l(3)
1853; PC64LE-NEXT:    bl __powidf2
1854; PC64LE-NEXT:    nop
1855; PC64LE-NEXT:    li 3, 48
1856; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1857; PC64LE-NEXT:    xxmrghd 34, 1, 63
1858; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1859; PC64LE-NEXT:    addi 1, 1, 64
1860; PC64LE-NEXT:    ld 0, 16(1)
1861; PC64LE-NEXT:    mtlr 0
1862; PC64LE-NEXT:    blr
1863;
1864; PC64LE9-LABEL: constrained_vector_powi_v2f64:
1865; PC64LE9:       # %bb.0: # %entry
1866; PC64LE9-NEXT:    mflr 0
1867; PC64LE9-NEXT:    std 0, 16(1)
1868; PC64LE9-NEXT:    stdu 1, -48(1)
1869; PC64LE9-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
1870; PC64LE9-NEXT:    li 4, 3
1871; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
1872; PC64LE9-NEXT:    lfd 1, .LCPI36_0@toc@l(3)
1873; PC64LE9-NEXT:    bl __powidf2
1874; PC64LE9-NEXT:    nop
1875; PC64LE9-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
1876; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
1877; PC64LE9-NEXT:    li 4, 3
1878; PC64LE9-NEXT:    lfd 1, .LCPI36_1@toc@l(3)
1879; PC64LE9-NEXT:    bl __powidf2
1880; PC64LE9-NEXT:    nop
1881; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1882; PC64LE9-NEXT:    xxmrghd 34, 1, 63
1883; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
1884; PC64LE9-NEXT:    addi 1, 1, 48
1885; PC64LE9-NEXT:    ld 0, 16(1)
1886; PC64LE9-NEXT:    mtlr 0
1887; PC64LE9-NEXT:    blr
1888entry:
1889  %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
1890                              <2 x double> <double 42.1, double 42.2>,
1891                              i32 3,
1892                              metadata !"round.dynamic",
1893                              metadata !"fpexcept.strict") #1
1894  ret <2 x double> %powi
1895}
1896
1897define <3 x float> @constrained_vector_powi_v3f32() #0 {
1898;
1899;
1900; PC64LE-LABEL: constrained_vector_powi_v3f32:
1901; PC64LE:       # %bb.0: # %entry
1902; PC64LE-NEXT:    mflr 0
1903; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1904; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1905; PC64LE-NEXT:    std 0, 16(1)
1906; PC64LE-NEXT:    stdu 1, -48(1)
1907; PC64LE-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
1908; PC64LE-NEXT:    li 4, 3
1909; PC64LE-NEXT:    lfs 1, .LCPI37_0@toc@l(3)
1910; PC64LE-NEXT:    bl __powisf2
1911; PC64LE-NEXT:    nop
1912; PC64LE-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
1913; PC64LE-NEXT:    fmr 31, 1
1914; PC64LE-NEXT:    li 4, 3
1915; PC64LE-NEXT:    lfs 1, .LCPI37_1@toc@l(3)
1916; PC64LE-NEXT:    bl __powisf2
1917; PC64LE-NEXT:    nop
1918; PC64LE-NEXT:    addis 3, 2, .LCPI37_2@toc@ha
1919; PC64LE-NEXT:    fmr 30, 1
1920; PC64LE-NEXT:    li 4, 3
1921; PC64LE-NEXT:    lfs 1, .LCPI37_2@toc@l(3)
1922; PC64LE-NEXT:    bl __powisf2
1923; PC64LE-NEXT:    nop
1924; PC64LE-NEXT:    xscvdpspn 34, 30
1925; PC64LE-NEXT:    addis 3, 2, .LCPI37_3@toc@ha
1926; PC64LE-NEXT:    xscvdpspn 35, 1
1927; PC64LE-NEXT:    addi 3, 3, .LCPI37_3@toc@l
1928; PC64LE-NEXT:    lvx 4, 0, 3
1929; PC64LE-NEXT:    vmrghw 2, 2, 3
1930; PC64LE-NEXT:    xscvdpspn 35, 31
1931; PC64LE-NEXT:    vperm 2, 3, 2, 4
1932; PC64LE-NEXT:    addi 1, 1, 48
1933; PC64LE-NEXT:    ld 0, 16(1)
1934; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1935; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1936; PC64LE-NEXT:    mtlr 0
1937; PC64LE-NEXT:    blr
1938;
1939; PC64LE9-LABEL: constrained_vector_powi_v3f32:
1940; PC64LE9:       # %bb.0: # %entry
1941; PC64LE9-NEXT:    mflr 0
1942; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1943; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1944; PC64LE9-NEXT:    std 0, 16(1)
1945; PC64LE9-NEXT:    stdu 1, -48(1)
1946; PC64LE9-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
1947; PC64LE9-NEXT:    li 4, 3
1948; PC64LE9-NEXT:    lfs 1, .LCPI37_0@toc@l(3)
1949; PC64LE9-NEXT:    bl __powisf2
1950; PC64LE9-NEXT:    nop
1951; PC64LE9-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
1952; PC64LE9-NEXT:    fmr 31, 1
1953; PC64LE9-NEXT:    li 4, 3
1954; PC64LE9-NEXT:    lfs 1, .LCPI37_1@toc@l(3)
1955; PC64LE9-NEXT:    bl __powisf2
1956; PC64LE9-NEXT:    nop
1957; PC64LE9-NEXT:    addis 3, 2, .LCPI37_2@toc@ha
1958; PC64LE9-NEXT:    fmr 30, 1
1959; PC64LE9-NEXT:    li 4, 3
1960; PC64LE9-NEXT:    lfs 1, .LCPI37_2@toc@l(3)
1961; PC64LE9-NEXT:    bl __powisf2
1962; PC64LE9-NEXT:    nop
1963; PC64LE9-NEXT:    xscvdpspn 34, 1
1964; PC64LE9-NEXT:    xscvdpspn 35, 30
1965; PC64LE9-NEXT:    addis 3, 2, .LCPI37_3@toc@ha
1966; PC64LE9-NEXT:    addi 3, 3, .LCPI37_3@toc@l
1967; PC64LE9-NEXT:    lxvx 36, 0, 3
1968; PC64LE9-NEXT:    vmrghw 2, 3, 2
1969; PC64LE9-NEXT:    xscvdpspn 35, 31
1970; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1971; PC64LE9-NEXT:    addi 1, 1, 48
1972; PC64LE9-NEXT:    ld 0, 16(1)
1973; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1974; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1975; PC64LE9-NEXT:    mtlr 0
1976; PC64LE9-NEXT:    blr
1977entry:
1978  %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32(
1979                              <3 x float> <float 42.0, float 43.0, float 44.0>,
1980                              i32 3,
1981                              metadata !"round.dynamic",
1982                              metadata !"fpexcept.strict") #1
1983  ret <3 x float> %powi
1984}
1985
1986define <3 x double> @constrained_vector_powi_v3f64() #0 {
1987; PC64LE-LABEL: constrained_vector_powi_v3f64:
1988; PC64LE:       # %bb.0: # %entry
1989; PC64LE-NEXT:    mflr 0
1990; PC64LE-NEXT:    std 0, 16(1)
1991; PC64LE-NEXT:    stdu 1, -64(1)
1992; PC64LE-NEXT:    li 3, 48
1993; PC64LE-NEXT:    li 4, 3
1994; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1995; PC64LE-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
1996; PC64LE-NEXT:    lfd 1, .LCPI38_0@toc@l(3)
1997; PC64LE-NEXT:    bl __powidf2
1998; PC64LE-NEXT:    nop
1999; PC64LE-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
2000; PC64LE-NEXT:    xxlor 63, 1, 1
2001; PC64LE-NEXT:    li 4, 3
2002; PC64LE-NEXT:    lfs 1, .LCPI38_1@toc@l(3)
2003; PC64LE-NEXT:    bl __powidf2
2004; PC64LE-NEXT:    nop
2005; PC64LE-NEXT:    addis 3, 2, .LCPI38_2@toc@ha
2006; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2007; PC64LE-NEXT:    xxmrghd 63, 63, 1
2008; PC64LE-NEXT:    li 4, 3
2009; PC64LE-NEXT:    lfd 1, .LCPI38_2@toc@l(3)
2010; PC64LE-NEXT:    bl __powidf2
2011; PC64LE-NEXT:    nop
2012; PC64LE-NEXT:    xxswapd 0, 63
2013; PC64LE-NEXT:    li 3, 48
2014; PC64LE-NEXT:    xxlor 2, 63, 63
2015; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2016; PC64LE-NEXT:    fmr 3, 1
2017; PC64LE-NEXT:    fmr 1, 0
2018; PC64LE-NEXT:    addi 1, 1, 64
2019; PC64LE-NEXT:    ld 0, 16(1)
2020; PC64LE-NEXT:    mtlr 0
2021; PC64LE-NEXT:    blr
2022;
2023; PC64LE9-LABEL: constrained_vector_powi_v3f64:
2024; PC64LE9:       # %bb.0: # %entry
2025; PC64LE9-NEXT:    mflr 0
2026; PC64LE9-NEXT:    std 0, 16(1)
2027; PC64LE9-NEXT:    stdu 1, -48(1)
2028; PC64LE9-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
2029; PC64LE9-NEXT:    li 4, 3
2030; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
2031; PC64LE9-NEXT:    lfd 1, .LCPI38_0@toc@l(3)
2032; PC64LE9-NEXT:    bl __powidf2
2033; PC64LE9-NEXT:    nop
2034; PC64LE9-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
2035; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2036; PC64LE9-NEXT:    li 4, 3
2037; PC64LE9-NEXT:    lfs 1, .LCPI38_1@toc@l(3)
2038; PC64LE9-NEXT:    bl __powidf2
2039; PC64LE9-NEXT:    nop
2040; PC64LE9-NEXT:    addis 3, 2, .LCPI38_2@toc@ha
2041; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2042; PC64LE9-NEXT:    xxmrghd 63, 63, 1
2043; PC64LE9-NEXT:    li 4, 3
2044; PC64LE9-NEXT:    lfd 1, .LCPI38_2@toc@l(3)
2045; PC64LE9-NEXT:    bl __powidf2
2046; PC64LE9-NEXT:    nop
2047; PC64LE9-NEXT:    fmr 3, 1
2048; PC64LE9-NEXT:    xxswapd 1, 63
2049; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2050; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
2051; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2052; PC64LE9-NEXT:    addi 1, 1, 48
2053; PC64LE9-NEXT:    ld 0, 16(1)
2054; PC64LE9-NEXT:    mtlr 0
2055; PC64LE9-NEXT:    blr
2056entry:
2057  %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
2058                          <3 x double> <double 42.0, double 42.1, double 42.2>,
2059                          i32 3,
2060                          metadata !"round.dynamic",
2061                          metadata !"fpexcept.strict") #1
2062  ret <3 x double> %powi
2063}
2064
2065define <4 x double> @constrained_vector_powi_v4f64() #0 {
2066; PC64LE-LABEL: constrained_vector_powi_v4f64:
2067; PC64LE:       # %bb.0: # %entry
2068; PC64LE-NEXT:    mflr 0
2069; PC64LE-NEXT:    std 0, 16(1)
2070; PC64LE-NEXT:    stdu 1, -80(1)
2071; PC64LE-NEXT:    li 3, 48
2072; PC64LE-NEXT:    li 4, 3
2073; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
2074; PC64LE-NEXT:    li 3, 64
2075; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2076; PC64LE-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
2077; PC64LE-NEXT:    lfd 1, .LCPI39_0@toc@l(3)
2078; PC64LE-NEXT:    bl __powidf2
2079; PC64LE-NEXT:    nop
2080; PC64LE-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
2081; PC64LE-NEXT:    xxlor 63, 1, 1
2082; PC64LE-NEXT:    li 4, 3
2083; PC64LE-NEXT:    lfd 1, .LCPI39_1@toc@l(3)
2084; PC64LE-NEXT:    bl __powidf2
2085; PC64LE-NEXT:    nop
2086; PC64LE-NEXT:    addis 3, 2, .LCPI39_2@toc@ha
2087; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2088; PC64LE-NEXT:    xxmrghd 63, 1, 63
2089; PC64LE-NEXT:    li 4, 3
2090; PC64LE-NEXT:    lfd 1, .LCPI39_2@toc@l(3)
2091; PC64LE-NEXT:    bl __powidf2
2092; PC64LE-NEXT:    nop
2093; PC64LE-NEXT:    addis 3, 2, .LCPI39_3@toc@ha
2094; PC64LE-NEXT:    xxlor 62, 1, 1
2095; PC64LE-NEXT:    li 4, 3
2096; PC64LE-NEXT:    lfd 1, .LCPI39_3@toc@l(3)
2097; PC64LE-NEXT:    bl __powidf2
2098; PC64LE-NEXT:    nop
2099; PC64LE-NEXT:    li 3, 64
2100; PC64LE-NEXT:    vmr 2, 31
2101; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2102; PC64LE-NEXT:    xxmrghd 35, 1, 62
2103; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2104; PC64LE-NEXT:    li 3, 48
2105; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
2106; PC64LE-NEXT:    addi 1, 1, 80
2107; PC64LE-NEXT:    ld 0, 16(1)
2108; PC64LE-NEXT:    mtlr 0
2109; PC64LE-NEXT:    blr
2110;
2111; PC64LE9-LABEL: constrained_vector_powi_v4f64:
2112; PC64LE9:       # %bb.0: # %entry
2113; PC64LE9-NEXT:    mflr 0
2114; PC64LE9-NEXT:    std 0, 16(1)
2115; PC64LE9-NEXT:    stdu 1, -64(1)
2116; PC64LE9-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
2117; PC64LE9-NEXT:    li 4, 3
2118; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
2119; PC64LE9-NEXT:    lfd 1, .LCPI39_0@toc@l(3)
2120; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2121; PC64LE9-NEXT:    bl __powidf2
2122; PC64LE9-NEXT:    nop
2123; PC64LE9-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
2124; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2125; PC64LE9-NEXT:    li 4, 3
2126; PC64LE9-NEXT:    lfd 1, .LCPI39_1@toc@l(3)
2127; PC64LE9-NEXT:    bl __powidf2
2128; PC64LE9-NEXT:    nop
2129; PC64LE9-NEXT:    addis 3, 2, .LCPI39_2@toc@ha
2130; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2131; PC64LE9-NEXT:    xxmrghd 63, 1, 63
2132; PC64LE9-NEXT:    li 4, 3
2133; PC64LE9-NEXT:    lfd 1, .LCPI39_2@toc@l(3)
2134; PC64LE9-NEXT:    bl __powidf2
2135; PC64LE9-NEXT:    nop
2136; PC64LE9-NEXT:    addis 3, 2, .LCPI39_3@toc@ha
2137; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
2138; PC64LE9-NEXT:    li 4, 3
2139; PC64LE9-NEXT:    lfd 1, .LCPI39_3@toc@l(3)
2140; PC64LE9-NEXT:    bl __powidf2
2141; PC64LE9-NEXT:    nop
2142; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2143; PC64LE9-NEXT:    xxmrghd 35, 1, 62
2144; PC64LE9-NEXT:    vmr 2, 31
2145; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2146; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
2147; PC64LE9-NEXT:    addi 1, 1, 64
2148; PC64LE9-NEXT:    ld 0, 16(1)
2149; PC64LE9-NEXT:    mtlr 0
2150; PC64LE9-NEXT:    blr
2151entry:
2152  %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64(
2153                              <4 x double> <double 42.1, double 42.2,
2154                                            double 42.3, double 42.4>,
2155                              i32 3,
2156                              metadata !"round.dynamic",
2157                              metadata !"fpexcept.strict") #1
2158  ret <4 x double> %powi
2159}
2160
2161define <1 x float> @constrained_vector_sin_v1f32() #0 {
2162; PC64LE-LABEL: constrained_vector_sin_v1f32:
2163; PC64LE:       # %bb.0: # %entry
2164; PC64LE-NEXT:    mflr 0
2165; PC64LE-NEXT:    std 0, 16(1)
2166; PC64LE-NEXT:    stdu 1, -32(1)
2167; PC64LE-NEXT:    addis 3, 2, .LCPI40_0@toc@ha
2168; PC64LE-NEXT:    lfs 1, .LCPI40_0@toc@l(3)
2169; PC64LE-NEXT:    bl sinf
2170; PC64LE-NEXT:    nop
2171; PC64LE-NEXT:    addi 1, 1, 32
2172; PC64LE-NEXT:    ld 0, 16(1)
2173; PC64LE-NEXT:    mtlr 0
2174; PC64LE-NEXT:    blr
2175;
2176; PC64LE9-LABEL: constrained_vector_sin_v1f32:
2177; PC64LE9:       # %bb.0: # %entry
2178; PC64LE9-NEXT:    mflr 0
2179; PC64LE9-NEXT:    std 0, 16(1)
2180; PC64LE9-NEXT:    stdu 1, -32(1)
2181; PC64LE9-NEXT:    addis 3, 2, .LCPI40_0@toc@ha
2182; PC64LE9-NEXT:    lfs 1, .LCPI40_0@toc@l(3)
2183; PC64LE9-NEXT:    bl sinf
2184; PC64LE9-NEXT:    nop
2185; PC64LE9-NEXT:    addi 1, 1, 32
2186; PC64LE9-NEXT:    ld 0, 16(1)
2187; PC64LE9-NEXT:    mtlr 0
2188; PC64LE9-NEXT:    blr
2189entry:
2190  %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
2191                             <1 x float> <float 42.0>,
2192                             metadata !"round.dynamic",
2193                             metadata !"fpexcept.strict") #1
2194  ret <1 x float> %sin
2195}
2196
2197define <2 x double> @constrained_vector_sin_v2f64() #0 {
2198; PC64LE-LABEL: constrained_vector_sin_v2f64:
2199; PC64LE:       # %bb.0: # %entry
2200; PC64LE-NEXT:    mflr 0
2201; PC64LE-NEXT:    std 0, 16(1)
2202; PC64LE-NEXT:    stdu 1, -64(1)
2203; PC64LE-NEXT:    li 3, 48
2204; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2205; PC64LE-NEXT:    addis 3, 2, .LCPI41_0@toc@ha
2206; PC64LE-NEXT:    lfd 1, .LCPI41_0@toc@l(3)
2207; PC64LE-NEXT:    bl sin
2208; PC64LE-NEXT:    nop
2209; PC64LE-NEXT:    addis 3, 2, .LCPI41_1@toc@ha
2210; PC64LE-NEXT:    xxlor 63, 1, 1
2211; PC64LE-NEXT:    lfs 1, .LCPI41_1@toc@l(3)
2212; PC64LE-NEXT:    bl sin
2213; PC64LE-NEXT:    nop
2214; PC64LE-NEXT:    li 3, 48
2215; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2216; PC64LE-NEXT:    xxmrghd 34, 63, 1
2217; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2218; PC64LE-NEXT:    addi 1, 1, 64
2219; PC64LE-NEXT:    ld 0, 16(1)
2220; PC64LE-NEXT:    mtlr 0
2221; PC64LE-NEXT:    blr
2222;
2223; PC64LE9-LABEL: constrained_vector_sin_v2f64:
2224; PC64LE9:       # %bb.0: # %entry
2225; PC64LE9-NEXT:    mflr 0
2226; PC64LE9-NEXT:    std 0, 16(1)
2227; PC64LE9-NEXT:    stdu 1, -48(1)
2228; PC64LE9-NEXT:    addis 3, 2, .LCPI41_0@toc@ha
2229; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
2230; PC64LE9-NEXT:    lfd 1, .LCPI41_0@toc@l(3)
2231; PC64LE9-NEXT:    bl sin
2232; PC64LE9-NEXT:    nop
2233; PC64LE9-NEXT:    addis 3, 2, .LCPI41_1@toc@ha
2234; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2235; PC64LE9-NEXT:    lfs 1, .LCPI41_1@toc@l(3)
2236; PC64LE9-NEXT:    bl sin
2237; PC64LE9-NEXT:    nop
2238; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2239; PC64LE9-NEXT:    xxmrghd 34, 63, 1
2240; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
2241; PC64LE9-NEXT:    addi 1, 1, 48
2242; PC64LE9-NEXT:    ld 0, 16(1)
2243; PC64LE9-NEXT:    mtlr 0
2244; PC64LE9-NEXT:    blr
2245entry:
2246  %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
2247                             <2 x double> <double 42.0, double 42.1>,
2248                             metadata !"round.dynamic",
2249                             metadata !"fpexcept.strict") #1
2250  ret <2 x double> %sin
2251}
2252
2253define <3 x float> @constrained_vector_sin_v3f32() #0 {
2254; PC64LE-LABEL: constrained_vector_sin_v3f32:
2255; PC64LE:       # %bb.0: # %entry
2256; PC64LE-NEXT:    mflr 0
2257; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2258; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2259; PC64LE-NEXT:    std 0, 16(1)
2260; PC64LE-NEXT:    stdu 1, -48(1)
2261; PC64LE-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
2262; PC64LE-NEXT:    lfs 1, .LCPI42_0@toc@l(3)
2263; PC64LE-NEXT:    bl sinf
2264; PC64LE-NEXT:    nop
2265; PC64LE-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
2266; PC64LE-NEXT:    fmr 31, 1
2267; PC64LE-NEXT:    lfs 1, .LCPI42_1@toc@l(3)
2268; PC64LE-NEXT:    bl sinf
2269; PC64LE-NEXT:    nop
2270; PC64LE-NEXT:    addis 3, 2, .LCPI42_2@toc@ha
2271; PC64LE-NEXT:    fmr 30, 1
2272; PC64LE-NEXT:    lfs 1, .LCPI42_2@toc@l(3)
2273; PC64LE-NEXT:    bl sinf
2274; PC64LE-NEXT:    nop
2275; PC64LE-NEXT:    xscvdpspn 34, 30
2276; PC64LE-NEXT:    addis 3, 2, .LCPI42_3@toc@ha
2277; PC64LE-NEXT:    xscvdpspn 35, 1
2278; PC64LE-NEXT:    addi 3, 3, .LCPI42_3@toc@l
2279; PC64LE-NEXT:    lvx 4, 0, 3
2280; PC64LE-NEXT:    vmrghw 2, 2, 3
2281; PC64LE-NEXT:    xscvdpspn 35, 31
2282; PC64LE-NEXT:    vperm 2, 3, 2, 4
2283; PC64LE-NEXT:    addi 1, 1, 48
2284; PC64LE-NEXT:    ld 0, 16(1)
2285; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2286; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2287; PC64LE-NEXT:    mtlr 0
2288; PC64LE-NEXT:    blr
2289;
2290; PC64LE9-LABEL: constrained_vector_sin_v3f32:
2291; PC64LE9:       # %bb.0: # %entry
2292; PC64LE9-NEXT:    mflr 0
2293; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2294; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2295; PC64LE9-NEXT:    std 0, 16(1)
2296; PC64LE9-NEXT:    stdu 1, -48(1)
2297; PC64LE9-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
2298; PC64LE9-NEXT:    lfs 1, .LCPI42_0@toc@l(3)
2299; PC64LE9-NEXT:    bl sinf
2300; PC64LE9-NEXT:    nop
2301; PC64LE9-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
2302; PC64LE9-NEXT:    fmr 31, 1
2303; PC64LE9-NEXT:    lfs 1, .LCPI42_1@toc@l(3)
2304; PC64LE9-NEXT:    bl sinf
2305; PC64LE9-NEXT:    nop
2306; PC64LE9-NEXT:    addis 3, 2, .LCPI42_2@toc@ha
2307; PC64LE9-NEXT:    fmr 30, 1
2308; PC64LE9-NEXT:    lfs 1, .LCPI42_2@toc@l(3)
2309; PC64LE9-NEXT:    bl sinf
2310; PC64LE9-NEXT:    nop
2311; PC64LE9-NEXT:    xscvdpspn 34, 1
2312; PC64LE9-NEXT:    xscvdpspn 35, 30
2313; PC64LE9-NEXT:    addis 3, 2, .LCPI42_3@toc@ha
2314; PC64LE9-NEXT:    xscvdpspn 36, 31
2315; PC64LE9-NEXT:    addi 3, 3, .LCPI42_3@toc@l
2316; PC64LE9-NEXT:    vmrghw 2, 3, 2
2317; PC64LE9-NEXT:    lxvx 35, 0, 3
2318; PC64LE9-NEXT:    vperm 2, 4, 2, 3
2319; PC64LE9-NEXT:    addi 1, 1, 48
2320; PC64LE9-NEXT:    ld 0, 16(1)
2321; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2322; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2323; PC64LE9-NEXT:    mtlr 0
2324; PC64LE9-NEXT:    blr
2325entry:
2326  %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
2327                              <3 x float> <float 42.0, float 43.0, float 44.0>,
2328                              metadata !"round.dynamic",
2329                              metadata !"fpexcept.strict") #1
2330  ret <3 x float> %sin
2331}
2332
2333define <3 x double> @constrained_vector_sin_v3f64() #0 {
2334; PC64LE-LABEL: constrained_vector_sin_v3f64:
2335; PC64LE:       # %bb.0: # %entry
2336; PC64LE-NEXT:    mflr 0
2337; PC64LE-NEXT:    std 0, 16(1)
2338; PC64LE-NEXT:    stdu 1, -64(1)
2339; PC64LE-NEXT:    li 3, 48
2340; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2341; PC64LE-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
2342; PC64LE-NEXT:    lfd 1, .LCPI43_0@toc@l(3)
2343; PC64LE-NEXT:    bl sin
2344; PC64LE-NEXT:    nop
2345; PC64LE-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
2346; PC64LE-NEXT:    xxlor 63, 1, 1
2347; PC64LE-NEXT:    lfs 1, .LCPI43_1@toc@l(3)
2348; PC64LE-NEXT:    bl sin
2349; PC64LE-NEXT:    nop
2350; PC64LE-NEXT:    addis 3, 2, .LCPI43_2@toc@ha
2351; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2352; PC64LE-NEXT:    xxmrghd 63, 63, 1
2353; PC64LE-NEXT:    lfd 1, .LCPI43_2@toc@l(3)
2354; PC64LE-NEXT:    bl sin
2355; PC64LE-NEXT:    nop
2356; PC64LE-NEXT:    xxswapd 0, 63
2357; PC64LE-NEXT:    li 3, 48
2358; PC64LE-NEXT:    xxlor 2, 63, 63
2359; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2360; PC64LE-NEXT:    fmr 3, 1
2361; PC64LE-NEXT:    fmr 1, 0
2362; PC64LE-NEXT:    addi 1, 1, 64
2363; PC64LE-NEXT:    ld 0, 16(1)
2364; PC64LE-NEXT:    mtlr 0
2365; PC64LE-NEXT:    blr
2366;
2367; PC64LE9-LABEL: constrained_vector_sin_v3f64:
2368; PC64LE9:       # %bb.0: # %entry
2369; PC64LE9-NEXT:    mflr 0
2370; PC64LE9-NEXT:    std 0, 16(1)
2371; PC64LE9-NEXT:    stdu 1, -48(1)
2372; PC64LE9-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
2373; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
2374; PC64LE9-NEXT:    lfd 1, .LCPI43_0@toc@l(3)
2375; PC64LE9-NEXT:    bl sin
2376; PC64LE9-NEXT:    nop
2377; PC64LE9-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
2378; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2379; PC64LE9-NEXT:    lfs 1, .LCPI43_1@toc@l(3)
2380; PC64LE9-NEXT:    bl sin
2381; PC64LE9-NEXT:    nop
2382; PC64LE9-NEXT:    addis 3, 2, .LCPI43_2@toc@ha
2383; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2384; PC64LE9-NEXT:    xxmrghd 63, 63, 1
2385; PC64LE9-NEXT:    lfd 1, .LCPI43_2@toc@l(3)
2386; PC64LE9-NEXT:    bl sin
2387; PC64LE9-NEXT:    nop
2388; PC64LE9-NEXT:    fmr 3, 1
2389; PC64LE9-NEXT:    xxswapd 1, 63
2390; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2391; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
2392; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2393; PC64LE9-NEXT:    addi 1, 1, 48
2394; PC64LE9-NEXT:    ld 0, 16(1)
2395; PC64LE9-NEXT:    mtlr 0
2396; PC64LE9-NEXT:    blr
2397entry:
2398  %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
2399                          <3 x double> <double 42.0, double 42.1, double 42.2>,
2400                          metadata !"round.dynamic",
2401                          metadata !"fpexcept.strict") #1
2402  ret <3 x double> %sin
2403}
2404
2405define <4 x double> @constrained_vector_sin_v4f64() #0 {
2406; PC64LE-LABEL: constrained_vector_sin_v4f64:
2407; PC64LE:       # %bb.0: # %entry
2408; PC64LE-NEXT:    mflr 0
2409; PC64LE-NEXT:    std 0, 16(1)
2410; PC64LE-NEXT:    stdu 1, -80(1)
2411; PC64LE-NEXT:    li 3, 48
2412; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
2413; PC64LE-NEXT:    li 3, 64
2414; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2415; PC64LE-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
2416; PC64LE-NEXT:    lfd 1, .LCPI44_0@toc@l(3)
2417; PC64LE-NEXT:    bl sin
2418; PC64LE-NEXT:    nop
2419; PC64LE-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
2420; PC64LE-NEXT:    xxlor 63, 1, 1
2421; PC64LE-NEXT:    lfd 1, .LCPI44_1@toc@l(3)
2422; PC64LE-NEXT:    bl sin
2423; PC64LE-NEXT:    nop
2424; PC64LE-NEXT:    addis 3, 2, .LCPI44_2@toc@ha
2425; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2426; PC64LE-NEXT:    xxmrghd 63, 1, 63
2427; PC64LE-NEXT:    lfd 1, .LCPI44_2@toc@l(3)
2428; PC64LE-NEXT:    bl sin
2429; PC64LE-NEXT:    nop
2430; PC64LE-NEXT:    addis 3, 2, .LCPI44_3@toc@ha
2431; PC64LE-NEXT:    xxlor 62, 1, 1
2432; PC64LE-NEXT:    lfs 1, .LCPI44_3@toc@l(3)
2433; PC64LE-NEXT:    bl sin
2434; PC64LE-NEXT:    nop
2435; PC64LE-NEXT:    li 3, 64
2436; PC64LE-NEXT:    vmr 3, 31
2437; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2438; PC64LE-NEXT:    xxmrghd 34, 62, 1
2439; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2440; PC64LE-NEXT:    li 3, 48
2441; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
2442; PC64LE-NEXT:    addi 1, 1, 80
2443; PC64LE-NEXT:    ld 0, 16(1)
2444; PC64LE-NEXT:    mtlr 0
2445; PC64LE-NEXT:    blr
2446;
2447; PC64LE9-LABEL: constrained_vector_sin_v4f64:
2448; PC64LE9:       # %bb.0: # %entry
2449; PC64LE9-NEXT:    mflr 0
2450; PC64LE9-NEXT:    std 0, 16(1)
2451; PC64LE9-NEXT:    stdu 1, -64(1)
2452; PC64LE9-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
2453; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
2454; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2455; PC64LE9-NEXT:    lfd 1, .LCPI44_0@toc@l(3)
2456; PC64LE9-NEXT:    bl sin
2457; PC64LE9-NEXT:    nop
2458; PC64LE9-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
2459; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2460; PC64LE9-NEXT:    lfd 1, .LCPI44_1@toc@l(3)
2461; PC64LE9-NEXT:    bl sin
2462; PC64LE9-NEXT:    nop
2463; PC64LE9-NEXT:    addis 3, 2, .LCPI44_2@toc@ha
2464; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2465; PC64LE9-NEXT:    xxmrghd 63, 1, 63
2466; PC64LE9-NEXT:    lfd 1, .LCPI44_2@toc@l(3)
2467; PC64LE9-NEXT:    bl sin
2468; PC64LE9-NEXT:    nop
2469; PC64LE9-NEXT:    addis 3, 2, .LCPI44_3@toc@ha
2470; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
2471; PC64LE9-NEXT:    lfs 1, .LCPI44_3@toc@l(3)
2472; PC64LE9-NEXT:    bl sin
2473; PC64LE9-NEXT:    nop
2474; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2475; PC64LE9-NEXT:    xxmrghd 34, 62, 1
2476; PC64LE9-NEXT:    vmr 3, 31
2477; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2478; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
2479; PC64LE9-NEXT:    addi 1, 1, 64
2480; PC64LE9-NEXT:    ld 0, 16(1)
2481; PC64LE9-NEXT:    mtlr 0
2482; PC64LE9-NEXT:    blr
2483entry:
2484  %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64(
2485                             <4 x double> <double 42.0, double 42.1,
2486                                           double 42.2, double 42.3>,
2487                             metadata !"round.dynamic",
2488                             metadata !"fpexcept.strict") #1
2489  ret <4 x double> %sin
2490}
2491
2492define <1 x float> @constrained_vector_cos_v1f32() #0 {
2493; PC64LE-LABEL: constrained_vector_cos_v1f32:
2494; PC64LE:       # %bb.0: # %entry
2495; PC64LE-NEXT:    mflr 0
2496; PC64LE-NEXT:    std 0, 16(1)
2497; PC64LE-NEXT:    stdu 1, -32(1)
2498; PC64LE-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
2499; PC64LE-NEXT:    lfs 1, .LCPI45_0@toc@l(3)
2500; PC64LE-NEXT:    bl cosf
2501; PC64LE-NEXT:    nop
2502; PC64LE-NEXT:    addi 1, 1, 32
2503; PC64LE-NEXT:    ld 0, 16(1)
2504; PC64LE-NEXT:    mtlr 0
2505; PC64LE-NEXT:    blr
2506;
2507; PC64LE9-LABEL: constrained_vector_cos_v1f32:
2508; PC64LE9:       # %bb.0: # %entry
2509; PC64LE9-NEXT:    mflr 0
2510; PC64LE9-NEXT:    std 0, 16(1)
2511; PC64LE9-NEXT:    stdu 1, -32(1)
2512; PC64LE9-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
2513; PC64LE9-NEXT:    lfs 1, .LCPI45_0@toc@l(3)
2514; PC64LE9-NEXT:    bl cosf
2515; PC64LE9-NEXT:    nop
2516; PC64LE9-NEXT:    addi 1, 1, 32
2517; PC64LE9-NEXT:    ld 0, 16(1)
2518; PC64LE9-NEXT:    mtlr 0
2519; PC64LE9-NEXT:    blr
2520entry:
2521  %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
2522                             <1 x float> <float 42.0>,
2523                             metadata !"round.dynamic",
2524                             metadata !"fpexcept.strict") #1
2525  ret <1 x float> %cos
2526}
2527
2528define <2 x double> @constrained_vector_cos_v2f64() #0 {
2529; PC64LE-LABEL: constrained_vector_cos_v2f64:
2530; PC64LE:       # %bb.0: # %entry
2531; PC64LE-NEXT:    mflr 0
2532; PC64LE-NEXT:    std 0, 16(1)
2533; PC64LE-NEXT:    stdu 1, -64(1)
2534; PC64LE-NEXT:    li 3, 48
2535; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2536; PC64LE-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
2537; PC64LE-NEXT:    lfd 1, .LCPI46_0@toc@l(3)
2538; PC64LE-NEXT:    bl cos
2539; PC64LE-NEXT:    nop
2540; PC64LE-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
2541; PC64LE-NEXT:    xxlor 63, 1, 1
2542; PC64LE-NEXT:    lfs 1, .LCPI46_1@toc@l(3)
2543; PC64LE-NEXT:    bl cos
2544; PC64LE-NEXT:    nop
2545; PC64LE-NEXT:    li 3, 48
2546; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2547; PC64LE-NEXT:    xxmrghd 34, 63, 1
2548; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2549; PC64LE-NEXT:    addi 1, 1, 64
2550; PC64LE-NEXT:    ld 0, 16(1)
2551; PC64LE-NEXT:    mtlr 0
2552; PC64LE-NEXT:    blr
2553;
2554; PC64LE9-LABEL: constrained_vector_cos_v2f64:
2555; PC64LE9:       # %bb.0: # %entry
2556; PC64LE9-NEXT:    mflr 0
2557; PC64LE9-NEXT:    std 0, 16(1)
2558; PC64LE9-NEXT:    stdu 1, -48(1)
2559; PC64LE9-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
2560; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
2561; PC64LE9-NEXT:    lfd 1, .LCPI46_0@toc@l(3)
2562; PC64LE9-NEXT:    bl cos
2563; PC64LE9-NEXT:    nop
2564; PC64LE9-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
2565; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2566; PC64LE9-NEXT:    lfs 1, .LCPI46_1@toc@l(3)
2567; PC64LE9-NEXT:    bl cos
2568; PC64LE9-NEXT:    nop
2569; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2570; PC64LE9-NEXT:    xxmrghd 34, 63, 1
2571; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
2572; PC64LE9-NEXT:    addi 1, 1, 48
2573; PC64LE9-NEXT:    ld 0, 16(1)
2574; PC64LE9-NEXT:    mtlr 0
2575; PC64LE9-NEXT:    blr
2576entry:
2577  %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
2578                             <2 x double> <double 42.0, double 42.1>,
2579                             metadata !"round.dynamic",
2580                             metadata !"fpexcept.strict") #1
2581  ret <2 x double> %cos
2582}
2583
2584define <3 x float> @constrained_vector_cos_v3f32() #0 {
2585; PC64LE-LABEL: constrained_vector_cos_v3f32:
2586; PC64LE:       # %bb.0: # %entry
2587; PC64LE-NEXT:    mflr 0
2588; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2589; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2590; PC64LE-NEXT:    std 0, 16(1)
2591; PC64LE-NEXT:    stdu 1, -48(1)
2592; PC64LE-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
2593; PC64LE-NEXT:    lfs 1, .LCPI47_0@toc@l(3)
2594; PC64LE-NEXT:    bl cosf
2595; PC64LE-NEXT:    nop
2596; PC64LE-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
2597; PC64LE-NEXT:    fmr 31, 1
2598; PC64LE-NEXT:    lfs 1, .LCPI47_1@toc@l(3)
2599; PC64LE-NEXT:    bl cosf
2600; PC64LE-NEXT:    nop
2601; PC64LE-NEXT:    addis 3, 2, .LCPI47_2@toc@ha
2602; PC64LE-NEXT:    fmr 30, 1
2603; PC64LE-NEXT:    lfs 1, .LCPI47_2@toc@l(3)
2604; PC64LE-NEXT:    bl cosf
2605; PC64LE-NEXT:    nop
2606; PC64LE-NEXT:    xscvdpspn 34, 30
2607; PC64LE-NEXT:    addis 3, 2, .LCPI47_3@toc@ha
2608; PC64LE-NEXT:    xscvdpspn 35, 1
2609; PC64LE-NEXT:    addi 3, 3, .LCPI47_3@toc@l
2610; PC64LE-NEXT:    lvx 4, 0, 3
2611; PC64LE-NEXT:    vmrghw 2, 2, 3
2612; PC64LE-NEXT:    xscvdpspn 35, 31
2613; PC64LE-NEXT:    vperm 2, 3, 2, 4
2614; PC64LE-NEXT:    addi 1, 1, 48
2615; PC64LE-NEXT:    ld 0, 16(1)
2616; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2617; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2618; PC64LE-NEXT:    mtlr 0
2619; PC64LE-NEXT:    blr
2620;
2621; PC64LE9-LABEL: constrained_vector_cos_v3f32:
2622; PC64LE9:       # %bb.0: # %entry
2623; PC64LE9-NEXT:    mflr 0
2624; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2625; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2626; PC64LE9-NEXT:    std 0, 16(1)
2627; PC64LE9-NEXT:    stdu 1, -48(1)
2628; PC64LE9-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
2629; PC64LE9-NEXT:    lfs 1, .LCPI47_0@toc@l(3)
2630; PC64LE9-NEXT:    bl cosf
2631; PC64LE9-NEXT:    nop
2632; PC64LE9-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
2633; PC64LE9-NEXT:    fmr 31, 1
2634; PC64LE9-NEXT:    lfs 1, .LCPI47_1@toc@l(3)
2635; PC64LE9-NEXT:    bl cosf
2636; PC64LE9-NEXT:    nop
2637; PC64LE9-NEXT:    addis 3, 2, .LCPI47_2@toc@ha
2638; PC64LE9-NEXT:    fmr 30, 1
2639; PC64LE9-NEXT:    lfs 1, .LCPI47_2@toc@l(3)
2640; PC64LE9-NEXT:    bl cosf
2641; PC64LE9-NEXT:    nop
2642; PC64LE9-NEXT:    xscvdpspn 34, 1
2643; PC64LE9-NEXT:    xscvdpspn 35, 30
2644; PC64LE9-NEXT:    addis 3, 2, .LCPI47_3@toc@ha
2645; PC64LE9-NEXT:    xscvdpspn 36, 31
2646; PC64LE9-NEXT:    addi 3, 3, .LCPI47_3@toc@l
2647; PC64LE9-NEXT:    vmrghw 2, 3, 2
2648; PC64LE9-NEXT:    lxvx 35, 0, 3
2649; PC64LE9-NEXT:    vperm 2, 4, 2, 3
2650; PC64LE9-NEXT:    addi 1, 1, 48
2651; PC64LE9-NEXT:    ld 0, 16(1)
2652; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2653; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2654; PC64LE9-NEXT:    mtlr 0
2655; PC64LE9-NEXT:    blr
2656entry:
2657  %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
2658                              <3 x float> <float 42.0, float 43.0, float 44.0>,
2659                              metadata !"round.dynamic",
2660                              metadata !"fpexcept.strict") #1
2661  ret <3 x float> %cos
2662}
2663
2664define <3 x double> @constrained_vector_cos_v3f64() #0 {
2665; PC64LE-LABEL: constrained_vector_cos_v3f64:
2666; PC64LE:       # %bb.0: # %entry
2667; PC64LE-NEXT:    mflr 0
2668; PC64LE-NEXT:    std 0, 16(1)
2669; PC64LE-NEXT:    stdu 1, -64(1)
2670; PC64LE-NEXT:    li 3, 48
2671; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2672; PC64LE-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
2673; PC64LE-NEXT:    lfd 1, .LCPI48_0@toc@l(3)
2674; PC64LE-NEXT:    bl cos
2675; PC64LE-NEXT:    nop
2676; PC64LE-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
2677; PC64LE-NEXT:    xxlor 63, 1, 1
2678; PC64LE-NEXT:    lfs 1, .LCPI48_1@toc@l(3)
2679; PC64LE-NEXT:    bl cos
2680; PC64LE-NEXT:    nop
2681; PC64LE-NEXT:    addis 3, 2, .LCPI48_2@toc@ha
2682; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2683; PC64LE-NEXT:    xxmrghd 63, 63, 1
2684; PC64LE-NEXT:    lfd 1, .LCPI48_2@toc@l(3)
2685; PC64LE-NEXT:    bl cos
2686; PC64LE-NEXT:    nop
2687; PC64LE-NEXT:    xxswapd 0, 63
2688; PC64LE-NEXT:    li 3, 48
2689; PC64LE-NEXT:    xxlor 2, 63, 63
2690; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2691; PC64LE-NEXT:    fmr 3, 1
2692; PC64LE-NEXT:    fmr 1, 0
2693; PC64LE-NEXT:    addi 1, 1, 64
2694; PC64LE-NEXT:    ld 0, 16(1)
2695; PC64LE-NEXT:    mtlr 0
2696; PC64LE-NEXT:    blr
2697;
2698; PC64LE9-LABEL: constrained_vector_cos_v3f64:
2699; PC64LE9:       # %bb.0: # %entry
2700; PC64LE9-NEXT:    mflr 0
2701; PC64LE9-NEXT:    std 0, 16(1)
2702; PC64LE9-NEXT:    stdu 1, -48(1)
2703; PC64LE9-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
2704; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
2705; PC64LE9-NEXT:    lfd 1, .LCPI48_0@toc@l(3)
2706; PC64LE9-NEXT:    bl cos
2707; PC64LE9-NEXT:    nop
2708; PC64LE9-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
2709; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2710; PC64LE9-NEXT:    lfs 1, .LCPI48_1@toc@l(3)
2711; PC64LE9-NEXT:    bl cos
2712; PC64LE9-NEXT:    nop
2713; PC64LE9-NEXT:    addis 3, 2, .LCPI48_2@toc@ha
2714; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2715; PC64LE9-NEXT:    xxmrghd 63, 63, 1
2716; PC64LE9-NEXT:    lfd 1, .LCPI48_2@toc@l(3)
2717; PC64LE9-NEXT:    bl cos
2718; PC64LE9-NEXT:    nop
2719; PC64LE9-NEXT:    fmr 3, 1
2720; PC64LE9-NEXT:    xxswapd 1, 63
2721; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2722; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
2723; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2724; PC64LE9-NEXT:    addi 1, 1, 48
2725; PC64LE9-NEXT:    ld 0, 16(1)
2726; PC64LE9-NEXT:    mtlr 0
2727; PC64LE9-NEXT:    blr
2728entry:
2729  %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
2730                          <3 x double> <double 42.0, double 42.1, double 42.2>,
2731                          metadata !"round.dynamic",
2732                          metadata !"fpexcept.strict") #1
2733  ret <3 x double> %cos
2734}
2735
2736define <4 x double> @constrained_vector_cos_v4f64() #0 {
2737; PC64LE-LABEL: constrained_vector_cos_v4f64:
2738; PC64LE:       # %bb.0: # %entry
2739; PC64LE-NEXT:    mflr 0
2740; PC64LE-NEXT:    std 0, 16(1)
2741; PC64LE-NEXT:    stdu 1, -80(1)
2742; PC64LE-NEXT:    li 3, 48
2743; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
2744; PC64LE-NEXT:    li 3, 64
2745; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2746; PC64LE-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
2747; PC64LE-NEXT:    lfd 1, .LCPI49_0@toc@l(3)
2748; PC64LE-NEXT:    bl cos
2749; PC64LE-NEXT:    nop
2750; PC64LE-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
2751; PC64LE-NEXT:    xxlor 63, 1, 1
2752; PC64LE-NEXT:    lfd 1, .LCPI49_1@toc@l(3)
2753; PC64LE-NEXT:    bl cos
2754; PC64LE-NEXT:    nop
2755; PC64LE-NEXT:    addis 3, 2, .LCPI49_2@toc@ha
2756; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2757; PC64LE-NEXT:    xxmrghd 63, 1, 63
2758; PC64LE-NEXT:    lfd 1, .LCPI49_2@toc@l(3)
2759; PC64LE-NEXT:    bl cos
2760; PC64LE-NEXT:    nop
2761; PC64LE-NEXT:    addis 3, 2, .LCPI49_3@toc@ha
2762; PC64LE-NEXT:    xxlor 62, 1, 1
2763; PC64LE-NEXT:    lfs 1, .LCPI49_3@toc@l(3)
2764; PC64LE-NEXT:    bl cos
2765; PC64LE-NEXT:    nop
2766; PC64LE-NEXT:    li 3, 64
2767; PC64LE-NEXT:    vmr 3, 31
2768; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2769; PC64LE-NEXT:    xxmrghd 34, 62, 1
2770; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2771; PC64LE-NEXT:    li 3, 48
2772; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
2773; PC64LE-NEXT:    addi 1, 1, 80
2774; PC64LE-NEXT:    ld 0, 16(1)
2775; PC64LE-NEXT:    mtlr 0
2776; PC64LE-NEXT:    blr
2777;
2778; PC64LE9-LABEL: constrained_vector_cos_v4f64:
2779; PC64LE9:       # %bb.0: # %entry
2780; PC64LE9-NEXT:    mflr 0
2781; PC64LE9-NEXT:    std 0, 16(1)
2782; PC64LE9-NEXT:    stdu 1, -64(1)
2783; PC64LE9-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
2784; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
2785; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2786; PC64LE9-NEXT:    lfd 1, .LCPI49_0@toc@l(3)
2787; PC64LE9-NEXT:    bl cos
2788; PC64LE9-NEXT:    nop
2789; PC64LE9-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
2790; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2791; PC64LE9-NEXT:    lfd 1, .LCPI49_1@toc@l(3)
2792; PC64LE9-NEXT:    bl cos
2793; PC64LE9-NEXT:    nop
2794; PC64LE9-NEXT:    addis 3, 2, .LCPI49_2@toc@ha
2795; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2796; PC64LE9-NEXT:    xxmrghd 63, 1, 63
2797; PC64LE9-NEXT:    lfd 1, .LCPI49_2@toc@l(3)
2798; PC64LE9-NEXT:    bl cos
2799; PC64LE9-NEXT:    nop
2800; PC64LE9-NEXT:    addis 3, 2, .LCPI49_3@toc@ha
2801; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
2802; PC64LE9-NEXT:    lfs 1, .LCPI49_3@toc@l(3)
2803; PC64LE9-NEXT:    bl cos
2804; PC64LE9-NEXT:    nop
2805; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2806; PC64LE9-NEXT:    xxmrghd 34, 62, 1
2807; PC64LE9-NEXT:    vmr 3, 31
2808; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2809; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
2810; PC64LE9-NEXT:    addi 1, 1, 64
2811; PC64LE9-NEXT:    ld 0, 16(1)
2812; PC64LE9-NEXT:    mtlr 0
2813; PC64LE9-NEXT:    blr
2814entry:
2815  %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64(
2816                             <4 x double> <double 42.0, double 42.1,
2817                                           double 42.2, double 42.3>,
2818                             metadata !"round.dynamic",
2819                             metadata !"fpexcept.strict") #1
2820  ret <4 x double> %cos
2821}
2822
2823define <1 x float> @constrained_vector_exp_v1f32() #0 {
2824; PC64LE-LABEL: constrained_vector_exp_v1f32:
2825; PC64LE:       # %bb.0: # %entry
2826; PC64LE-NEXT:    mflr 0
2827; PC64LE-NEXT:    std 0, 16(1)
2828; PC64LE-NEXT:    stdu 1, -32(1)
2829; PC64LE-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
2830; PC64LE-NEXT:    lfs 1, .LCPI50_0@toc@l(3)
2831; PC64LE-NEXT:    bl expf
2832; PC64LE-NEXT:    nop
2833; PC64LE-NEXT:    addi 1, 1, 32
2834; PC64LE-NEXT:    ld 0, 16(1)
2835; PC64LE-NEXT:    mtlr 0
2836; PC64LE-NEXT:    blr
2837;
2838; PC64LE9-LABEL: constrained_vector_exp_v1f32:
2839; PC64LE9:       # %bb.0: # %entry
2840; PC64LE9-NEXT:    mflr 0
2841; PC64LE9-NEXT:    std 0, 16(1)
2842; PC64LE9-NEXT:    stdu 1, -32(1)
2843; PC64LE9-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
2844; PC64LE9-NEXT:    lfs 1, .LCPI50_0@toc@l(3)
2845; PC64LE9-NEXT:    bl expf
2846; PC64LE9-NEXT:    nop
2847; PC64LE9-NEXT:    addi 1, 1, 32
2848; PC64LE9-NEXT:    ld 0, 16(1)
2849; PC64LE9-NEXT:    mtlr 0
2850; PC64LE9-NEXT:    blr
2851entry:
2852  %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
2853                             <1 x float> <float 42.0>,
2854                             metadata !"round.dynamic",
2855                             metadata !"fpexcept.strict") #1
2856  ret <1 x float> %exp
2857}
2858
2859define <2 x double> @constrained_vector_exp_v2f64() #0 {
2860; PC64LE-LABEL: constrained_vector_exp_v2f64:
2861; PC64LE:       # %bb.0: # %entry
2862; PC64LE-NEXT:    mflr 0
2863; PC64LE-NEXT:    std 0, 16(1)
2864; PC64LE-NEXT:    stdu 1, -64(1)
2865; PC64LE-NEXT:    li 3, 48
2866; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2867; PC64LE-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
2868; PC64LE-NEXT:    lfd 1, .LCPI51_0@toc@l(3)
2869; PC64LE-NEXT:    bl exp
2870; PC64LE-NEXT:    nop
2871; PC64LE-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
2872; PC64LE-NEXT:    xxlor 63, 1, 1
2873; PC64LE-NEXT:    lfs 1, .LCPI51_1@toc@l(3)
2874; PC64LE-NEXT:    bl exp
2875; PC64LE-NEXT:    nop
2876; PC64LE-NEXT:    li 3, 48
2877; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2878; PC64LE-NEXT:    xxmrghd 34, 63, 1
2879; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2880; PC64LE-NEXT:    addi 1, 1, 64
2881; PC64LE-NEXT:    ld 0, 16(1)
2882; PC64LE-NEXT:    mtlr 0
2883; PC64LE-NEXT:    blr
2884;
2885; PC64LE9-LABEL: constrained_vector_exp_v2f64:
2886; PC64LE9:       # %bb.0: # %entry
2887; PC64LE9-NEXT:    mflr 0
2888; PC64LE9-NEXT:    std 0, 16(1)
2889; PC64LE9-NEXT:    stdu 1, -48(1)
2890; PC64LE9-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
2891; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
2892; PC64LE9-NEXT:    lfd 1, .LCPI51_0@toc@l(3)
2893; PC64LE9-NEXT:    bl exp
2894; PC64LE9-NEXT:    nop
2895; PC64LE9-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
2896; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
2897; PC64LE9-NEXT:    lfs 1, .LCPI51_1@toc@l(3)
2898; PC64LE9-NEXT:    bl exp
2899; PC64LE9-NEXT:    nop
2900; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2901; PC64LE9-NEXT:    xxmrghd 34, 63, 1
2902; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
2903; PC64LE9-NEXT:    addi 1, 1, 48
2904; PC64LE9-NEXT:    ld 0, 16(1)
2905; PC64LE9-NEXT:    mtlr 0
2906; PC64LE9-NEXT:    blr
2907entry:
2908  %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
2909                             <2 x double> <double 42.0, double 42.1>,
2910                             metadata !"round.dynamic",
2911                             metadata !"fpexcept.strict") #1
2912  ret <2 x double> %exp
2913}
2914
2915define <3 x float> @constrained_vector_exp_v3f32() #0 {
2916; PC64LE-LABEL: constrained_vector_exp_v3f32:
2917; PC64LE:       # %bb.0: # %entry
2918; PC64LE-NEXT:    mflr 0
2919; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2920; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2921; PC64LE-NEXT:    std 0, 16(1)
2922; PC64LE-NEXT:    stdu 1, -48(1)
2923; PC64LE-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
2924; PC64LE-NEXT:    lfs 1, .LCPI52_0@toc@l(3)
2925; PC64LE-NEXT:    bl expf
2926; PC64LE-NEXT:    nop
2927; PC64LE-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
2928; PC64LE-NEXT:    fmr 31, 1
2929; PC64LE-NEXT:    lfs 1, .LCPI52_1@toc@l(3)
2930; PC64LE-NEXT:    bl expf
2931; PC64LE-NEXT:    nop
2932; PC64LE-NEXT:    addis 3, 2, .LCPI52_2@toc@ha
2933; PC64LE-NEXT:    fmr 30, 1
2934; PC64LE-NEXT:    lfs 1, .LCPI52_2@toc@l(3)
2935; PC64LE-NEXT:    bl expf
2936; PC64LE-NEXT:    nop
2937; PC64LE-NEXT:    xscvdpspn 34, 30
2938; PC64LE-NEXT:    addis 3, 2, .LCPI52_3@toc@ha
2939; PC64LE-NEXT:    xscvdpspn 35, 1
2940; PC64LE-NEXT:    addi 3, 3, .LCPI52_3@toc@l
2941; PC64LE-NEXT:    lvx 4, 0, 3
2942; PC64LE-NEXT:    vmrghw 2, 2, 3
2943; PC64LE-NEXT:    xscvdpspn 35, 31
2944; PC64LE-NEXT:    vperm 2, 3, 2, 4
2945; PC64LE-NEXT:    addi 1, 1, 48
2946; PC64LE-NEXT:    ld 0, 16(1)
2947; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2948; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2949; PC64LE-NEXT:    mtlr 0
2950; PC64LE-NEXT:    blr
2951;
2952; PC64LE9-LABEL: constrained_vector_exp_v3f32:
2953; PC64LE9:       # %bb.0: # %entry
2954; PC64LE9-NEXT:    mflr 0
2955; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2956; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2957; PC64LE9-NEXT:    std 0, 16(1)
2958; PC64LE9-NEXT:    stdu 1, -48(1)
2959; PC64LE9-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
2960; PC64LE9-NEXT:    lfs 1, .LCPI52_0@toc@l(3)
2961; PC64LE9-NEXT:    bl expf
2962; PC64LE9-NEXT:    nop
2963; PC64LE9-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
2964; PC64LE9-NEXT:    fmr 31, 1
2965; PC64LE9-NEXT:    lfs 1, .LCPI52_1@toc@l(3)
2966; PC64LE9-NEXT:    bl expf
2967; PC64LE9-NEXT:    nop
2968; PC64LE9-NEXT:    addis 3, 2, .LCPI52_2@toc@ha
2969; PC64LE9-NEXT:    fmr 30, 1
2970; PC64LE9-NEXT:    lfs 1, .LCPI52_2@toc@l(3)
2971; PC64LE9-NEXT:    bl expf
2972; PC64LE9-NEXT:    nop
2973; PC64LE9-NEXT:    xscvdpspn 34, 1
2974; PC64LE9-NEXT:    xscvdpspn 35, 30
2975; PC64LE9-NEXT:    addis 3, 2, .LCPI52_3@toc@ha
2976; PC64LE9-NEXT:    xscvdpspn 36, 31
2977; PC64LE9-NEXT:    addi 3, 3, .LCPI52_3@toc@l
2978; PC64LE9-NEXT:    vmrghw 2, 3, 2
2979; PC64LE9-NEXT:    lxvx 35, 0, 3
2980; PC64LE9-NEXT:    vperm 2, 4, 2, 3
2981; PC64LE9-NEXT:    addi 1, 1, 48
2982; PC64LE9-NEXT:    ld 0, 16(1)
2983; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2984; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2985; PC64LE9-NEXT:    mtlr 0
2986; PC64LE9-NEXT:    blr
2987entry:
2988  %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
2989                              <3 x float> <float 42.0, float 43.0, float 44.0>,
2990                              metadata !"round.dynamic",
2991                              metadata !"fpexcept.strict") #1
2992  ret <3 x float> %exp
2993}
2994
2995define <3 x double> @constrained_vector_exp_v3f64() #0 {
2996; PC64LE-LABEL: constrained_vector_exp_v3f64:
2997; PC64LE:       # %bb.0: # %entry
2998; PC64LE-NEXT:    mflr 0
2999; PC64LE-NEXT:    std 0, 16(1)
3000; PC64LE-NEXT:    stdu 1, -64(1)
3001; PC64LE-NEXT:    li 3, 48
3002; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3003; PC64LE-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
3004; PC64LE-NEXT:    lfd 1, .LCPI53_0@toc@l(3)
3005; PC64LE-NEXT:    bl exp
3006; PC64LE-NEXT:    nop
3007; PC64LE-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
3008; PC64LE-NEXT:    xxlor 63, 1, 1
3009; PC64LE-NEXT:    lfs 1, .LCPI53_1@toc@l(3)
3010; PC64LE-NEXT:    bl exp
3011; PC64LE-NEXT:    nop
3012; PC64LE-NEXT:    addis 3, 2, .LCPI53_2@toc@ha
3013; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3014; PC64LE-NEXT:    xxmrghd 63, 63, 1
3015; PC64LE-NEXT:    lfd 1, .LCPI53_2@toc@l(3)
3016; PC64LE-NEXT:    bl exp
3017; PC64LE-NEXT:    nop
3018; PC64LE-NEXT:    xxswapd 0, 63
3019; PC64LE-NEXT:    li 3, 48
3020; PC64LE-NEXT:    xxlor 2, 63, 63
3021; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3022; PC64LE-NEXT:    fmr 3, 1
3023; PC64LE-NEXT:    fmr 1, 0
3024; PC64LE-NEXT:    addi 1, 1, 64
3025; PC64LE-NEXT:    ld 0, 16(1)
3026; PC64LE-NEXT:    mtlr 0
3027; PC64LE-NEXT:    blr
3028;
3029; PC64LE9-LABEL: constrained_vector_exp_v3f64:
3030; PC64LE9:       # %bb.0: # %entry
3031; PC64LE9-NEXT:    mflr 0
3032; PC64LE9-NEXT:    std 0, 16(1)
3033; PC64LE9-NEXT:    stdu 1, -48(1)
3034; PC64LE9-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
3035; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
3036; PC64LE9-NEXT:    lfd 1, .LCPI53_0@toc@l(3)
3037; PC64LE9-NEXT:    bl exp
3038; PC64LE9-NEXT:    nop
3039; PC64LE9-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
3040; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3041; PC64LE9-NEXT:    lfs 1, .LCPI53_1@toc@l(3)
3042; PC64LE9-NEXT:    bl exp
3043; PC64LE9-NEXT:    nop
3044; PC64LE9-NEXT:    addis 3, 2, .LCPI53_2@toc@ha
3045; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3046; PC64LE9-NEXT:    xxmrghd 63, 63, 1
3047; PC64LE9-NEXT:    lfd 1, .LCPI53_2@toc@l(3)
3048; PC64LE9-NEXT:    bl exp
3049; PC64LE9-NEXT:    nop
3050; PC64LE9-NEXT:    fmr 3, 1
3051; PC64LE9-NEXT:    xxswapd 1, 63
3052; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3053; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
3054; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3055; PC64LE9-NEXT:    addi 1, 1, 48
3056; PC64LE9-NEXT:    ld 0, 16(1)
3057; PC64LE9-NEXT:    mtlr 0
3058; PC64LE9-NEXT:    blr
3059entry:
3060  %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
3061                          <3 x double> <double 42.0, double 42.1, double 42.2>,
3062                          metadata !"round.dynamic",
3063                          metadata !"fpexcept.strict") #1
3064  ret <3 x double> %exp
3065}
3066
3067define <4 x double> @constrained_vector_exp_v4f64() #0 {
3068; PC64LE-LABEL: constrained_vector_exp_v4f64:
3069; PC64LE:       # %bb.0: # %entry
3070; PC64LE-NEXT:    mflr 0
3071; PC64LE-NEXT:    std 0, 16(1)
3072; PC64LE-NEXT:    stdu 1, -80(1)
3073; PC64LE-NEXT:    li 3, 48
3074; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
3075; PC64LE-NEXT:    li 3, 64
3076; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3077; PC64LE-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
3078; PC64LE-NEXT:    lfd 1, .LCPI54_0@toc@l(3)
3079; PC64LE-NEXT:    bl exp
3080; PC64LE-NEXT:    nop
3081; PC64LE-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
3082; PC64LE-NEXT:    xxlor 63, 1, 1
3083; PC64LE-NEXT:    lfd 1, .LCPI54_1@toc@l(3)
3084; PC64LE-NEXT:    bl exp
3085; PC64LE-NEXT:    nop
3086; PC64LE-NEXT:    addis 3, 2, .LCPI54_2@toc@ha
3087; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3088; PC64LE-NEXT:    xxmrghd 63, 1, 63
3089; PC64LE-NEXT:    lfd 1, .LCPI54_2@toc@l(3)
3090; PC64LE-NEXT:    bl exp
3091; PC64LE-NEXT:    nop
3092; PC64LE-NEXT:    addis 3, 2, .LCPI54_3@toc@ha
3093; PC64LE-NEXT:    xxlor 62, 1, 1
3094; PC64LE-NEXT:    lfs 1, .LCPI54_3@toc@l(3)
3095; PC64LE-NEXT:    bl exp
3096; PC64LE-NEXT:    nop
3097; PC64LE-NEXT:    li 3, 64
3098; PC64LE-NEXT:    vmr 3, 31
3099; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3100; PC64LE-NEXT:    xxmrghd 34, 62, 1
3101; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3102; PC64LE-NEXT:    li 3, 48
3103; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
3104; PC64LE-NEXT:    addi 1, 1, 80
3105; PC64LE-NEXT:    ld 0, 16(1)
3106; PC64LE-NEXT:    mtlr 0
3107; PC64LE-NEXT:    blr
3108;
3109; PC64LE9-LABEL: constrained_vector_exp_v4f64:
3110; PC64LE9:       # %bb.0: # %entry
3111; PC64LE9-NEXT:    mflr 0
3112; PC64LE9-NEXT:    std 0, 16(1)
3113; PC64LE9-NEXT:    stdu 1, -64(1)
3114; PC64LE9-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
3115; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
3116; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3117; PC64LE9-NEXT:    lfd 1, .LCPI54_0@toc@l(3)
3118; PC64LE9-NEXT:    bl exp
3119; PC64LE9-NEXT:    nop
3120; PC64LE9-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
3121; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3122; PC64LE9-NEXT:    lfd 1, .LCPI54_1@toc@l(3)
3123; PC64LE9-NEXT:    bl exp
3124; PC64LE9-NEXT:    nop
3125; PC64LE9-NEXT:    addis 3, 2, .LCPI54_2@toc@ha
3126; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3127; PC64LE9-NEXT:    xxmrghd 63, 1, 63
3128; PC64LE9-NEXT:    lfd 1, .LCPI54_2@toc@l(3)
3129; PC64LE9-NEXT:    bl exp
3130; PC64LE9-NEXT:    nop
3131; PC64LE9-NEXT:    addis 3, 2, .LCPI54_3@toc@ha
3132; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
3133; PC64LE9-NEXT:    lfs 1, .LCPI54_3@toc@l(3)
3134; PC64LE9-NEXT:    bl exp
3135; PC64LE9-NEXT:    nop
3136; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3137; PC64LE9-NEXT:    xxmrghd 34, 62, 1
3138; PC64LE9-NEXT:    vmr 3, 31
3139; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3140; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
3141; PC64LE9-NEXT:    addi 1, 1, 64
3142; PC64LE9-NEXT:    ld 0, 16(1)
3143; PC64LE9-NEXT:    mtlr 0
3144; PC64LE9-NEXT:    blr
3145entry:
3146  %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64(
3147                             <4 x double> <double 42.0, double 42.1,
3148                                           double 42.2, double 42.3>,
3149                             metadata !"round.dynamic",
3150                             metadata !"fpexcept.strict") #1
3151  ret <4 x double> %exp
3152}
3153
3154define <1 x float> @constrained_vector_exp2_v1f32() #0 {
3155; PC64LE-LABEL: constrained_vector_exp2_v1f32:
3156; PC64LE:       # %bb.0: # %entry
3157; PC64LE-NEXT:    mflr 0
3158; PC64LE-NEXT:    std 0, 16(1)
3159; PC64LE-NEXT:    stdu 1, -32(1)
3160; PC64LE-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
3161; PC64LE-NEXT:    lfs 1, .LCPI55_0@toc@l(3)
3162; PC64LE-NEXT:    bl exp2f
3163; PC64LE-NEXT:    nop
3164; PC64LE-NEXT:    addi 1, 1, 32
3165; PC64LE-NEXT:    ld 0, 16(1)
3166; PC64LE-NEXT:    mtlr 0
3167; PC64LE-NEXT:    blr
3168;
3169; PC64LE9-LABEL: constrained_vector_exp2_v1f32:
3170; PC64LE9:       # %bb.0: # %entry
3171; PC64LE9-NEXT:    mflr 0
3172; PC64LE9-NEXT:    std 0, 16(1)
3173; PC64LE9-NEXT:    stdu 1, -32(1)
3174; PC64LE9-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
3175; PC64LE9-NEXT:    lfs 1, .LCPI55_0@toc@l(3)
3176; PC64LE9-NEXT:    bl exp2f
3177; PC64LE9-NEXT:    nop
3178; PC64LE9-NEXT:    addi 1, 1, 32
3179; PC64LE9-NEXT:    ld 0, 16(1)
3180; PC64LE9-NEXT:    mtlr 0
3181; PC64LE9-NEXT:    blr
3182entry:
3183  %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
3184                             <1 x float> <float 42.0>,
3185                             metadata !"round.dynamic",
3186                             metadata !"fpexcept.strict") #1
3187  ret <1 x float> %exp2
3188}
3189
3190define <2 x double> @constrained_vector_exp2_v2f64() #0 {
3191; PC64LE-LABEL: constrained_vector_exp2_v2f64:
3192; PC64LE:       # %bb.0: # %entry
3193; PC64LE-NEXT:    mflr 0
3194; PC64LE-NEXT:    std 0, 16(1)
3195; PC64LE-NEXT:    stdu 1, -64(1)
3196; PC64LE-NEXT:    li 3, 48
3197; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3198; PC64LE-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
3199; PC64LE-NEXT:    lfd 1, .LCPI56_0@toc@l(3)
3200; PC64LE-NEXT:    bl exp2
3201; PC64LE-NEXT:    nop
3202; PC64LE-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
3203; PC64LE-NEXT:    xxlor 63, 1, 1
3204; PC64LE-NEXT:    lfs 1, .LCPI56_1@toc@l(3)
3205; PC64LE-NEXT:    bl exp2
3206; PC64LE-NEXT:    nop
3207; PC64LE-NEXT:    li 3, 48
3208; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3209; PC64LE-NEXT:    xxmrghd 34, 1, 63
3210; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3211; PC64LE-NEXT:    addi 1, 1, 64
3212; PC64LE-NEXT:    ld 0, 16(1)
3213; PC64LE-NEXT:    mtlr 0
3214; PC64LE-NEXT:    blr
3215;
3216; PC64LE9-LABEL: constrained_vector_exp2_v2f64:
3217; PC64LE9:       # %bb.0: # %entry
3218; PC64LE9-NEXT:    mflr 0
3219; PC64LE9-NEXT:    std 0, 16(1)
3220; PC64LE9-NEXT:    stdu 1, -48(1)
3221; PC64LE9-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
3222; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
3223; PC64LE9-NEXT:    lfd 1, .LCPI56_0@toc@l(3)
3224; PC64LE9-NEXT:    bl exp2
3225; PC64LE9-NEXT:    nop
3226; PC64LE9-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
3227; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3228; PC64LE9-NEXT:    lfs 1, .LCPI56_1@toc@l(3)
3229; PC64LE9-NEXT:    bl exp2
3230; PC64LE9-NEXT:    nop
3231; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3232; PC64LE9-NEXT:    xxmrghd 34, 1, 63
3233; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
3234; PC64LE9-NEXT:    addi 1, 1, 48
3235; PC64LE9-NEXT:    ld 0, 16(1)
3236; PC64LE9-NEXT:    mtlr 0
3237; PC64LE9-NEXT:    blr
3238entry:
3239  %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
3240                              <2 x double> <double 42.1, double 42.0>,
3241                              metadata !"round.dynamic",
3242                              metadata !"fpexcept.strict") #1
3243  ret <2 x double> %exp2
3244}
3245
3246define <3 x float> @constrained_vector_exp2_v3f32() #0 {
3247; PC64LE-LABEL: constrained_vector_exp2_v3f32:
3248; PC64LE:       # %bb.0: # %entry
3249; PC64LE-NEXT:    mflr 0
3250; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3251; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3252; PC64LE-NEXT:    std 0, 16(1)
3253; PC64LE-NEXT:    stdu 1, -48(1)
3254; PC64LE-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
3255; PC64LE-NEXT:    lfs 1, .LCPI57_0@toc@l(3)
3256; PC64LE-NEXT:    bl exp2f
3257; PC64LE-NEXT:    nop
3258; PC64LE-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
3259; PC64LE-NEXT:    fmr 31, 1
3260; PC64LE-NEXT:    lfs 1, .LCPI57_1@toc@l(3)
3261; PC64LE-NEXT:    bl exp2f
3262; PC64LE-NEXT:    nop
3263; PC64LE-NEXT:    addis 3, 2, .LCPI57_2@toc@ha
3264; PC64LE-NEXT:    fmr 30, 1
3265; PC64LE-NEXT:    lfs 1, .LCPI57_2@toc@l(3)
3266; PC64LE-NEXT:    bl exp2f
3267; PC64LE-NEXT:    nop
3268; PC64LE-NEXT:    xscvdpspn 34, 30
3269; PC64LE-NEXT:    addis 3, 2, .LCPI57_3@toc@ha
3270; PC64LE-NEXT:    xscvdpspn 35, 1
3271; PC64LE-NEXT:    addi 3, 3, .LCPI57_3@toc@l
3272; PC64LE-NEXT:    lvx 4, 0, 3
3273; PC64LE-NEXT:    vmrghw 2, 2, 3
3274; PC64LE-NEXT:    xscvdpspn 35, 31
3275; PC64LE-NEXT:    vperm 2, 3, 2, 4
3276; PC64LE-NEXT:    addi 1, 1, 48
3277; PC64LE-NEXT:    ld 0, 16(1)
3278; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3279; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3280; PC64LE-NEXT:    mtlr 0
3281; PC64LE-NEXT:    blr
3282;
3283; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
3284; PC64LE9:       # %bb.0: # %entry
3285; PC64LE9-NEXT:    mflr 0
3286; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3287; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3288; PC64LE9-NEXT:    std 0, 16(1)
3289; PC64LE9-NEXT:    stdu 1, -48(1)
3290; PC64LE9-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
3291; PC64LE9-NEXT:    lfs 1, .LCPI57_0@toc@l(3)
3292; PC64LE9-NEXT:    bl exp2f
3293; PC64LE9-NEXT:    nop
3294; PC64LE9-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
3295; PC64LE9-NEXT:    fmr 31, 1
3296; PC64LE9-NEXT:    lfs 1, .LCPI57_1@toc@l(3)
3297; PC64LE9-NEXT:    bl exp2f
3298; PC64LE9-NEXT:    nop
3299; PC64LE9-NEXT:    addis 3, 2, .LCPI57_2@toc@ha
3300; PC64LE9-NEXT:    fmr 30, 1
3301; PC64LE9-NEXT:    lfs 1, .LCPI57_2@toc@l(3)
3302; PC64LE9-NEXT:    bl exp2f
3303; PC64LE9-NEXT:    nop
3304; PC64LE9-NEXT:    xscvdpspn 34, 1
3305; PC64LE9-NEXT:    xscvdpspn 35, 30
3306; PC64LE9-NEXT:    addis 3, 2, .LCPI57_3@toc@ha
3307; PC64LE9-NEXT:    xscvdpspn 36, 31
3308; PC64LE9-NEXT:    addi 3, 3, .LCPI57_3@toc@l
3309; PC64LE9-NEXT:    vmrghw 2, 3, 2
3310; PC64LE9-NEXT:    lxvx 35, 0, 3
3311; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3312; PC64LE9-NEXT:    addi 1, 1, 48
3313; PC64LE9-NEXT:    ld 0, 16(1)
3314; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3315; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3316; PC64LE9-NEXT:    mtlr 0
3317; PC64LE9-NEXT:    blr
3318entry:
3319  %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
3320                              <3 x float> <float 42.0, float 43.0, float 44.0>,
3321                              metadata !"round.dynamic",
3322                              metadata !"fpexcept.strict") #1
3323  ret <3 x float> %exp2
3324}
3325
3326define <3 x double> @constrained_vector_exp2_v3f64() #0 {
3327; PC64LE-LABEL: constrained_vector_exp2_v3f64:
3328; PC64LE:       # %bb.0: # %entry
3329; PC64LE-NEXT:    mflr 0
3330; PC64LE-NEXT:    std 0, 16(1)
3331; PC64LE-NEXT:    stdu 1, -64(1)
3332; PC64LE-NEXT:    li 3, 48
3333; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3334; PC64LE-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
3335; PC64LE-NEXT:    lfd 1, .LCPI58_0@toc@l(3)
3336; PC64LE-NEXT:    bl exp2
3337; PC64LE-NEXT:    nop
3338; PC64LE-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
3339; PC64LE-NEXT:    xxlor 63, 1, 1
3340; PC64LE-NEXT:    lfs 1, .LCPI58_1@toc@l(3)
3341; PC64LE-NEXT:    bl exp2
3342; PC64LE-NEXT:    nop
3343; PC64LE-NEXT:    addis 3, 2, .LCPI58_2@toc@ha
3344; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3345; PC64LE-NEXT:    xxmrghd 63, 63, 1
3346; PC64LE-NEXT:    lfd 1, .LCPI58_2@toc@l(3)
3347; PC64LE-NEXT:    bl exp2
3348; PC64LE-NEXT:    nop
3349; PC64LE-NEXT:    xxswapd 0, 63
3350; PC64LE-NEXT:    li 3, 48
3351; PC64LE-NEXT:    xxlor 2, 63, 63
3352; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3353; PC64LE-NEXT:    fmr 3, 1
3354; PC64LE-NEXT:    fmr 1, 0
3355; PC64LE-NEXT:    addi 1, 1, 64
3356; PC64LE-NEXT:    ld 0, 16(1)
3357; PC64LE-NEXT:    mtlr 0
3358; PC64LE-NEXT:    blr
3359;
3360; PC64LE9-LABEL: constrained_vector_exp2_v3f64:
3361; PC64LE9:       # %bb.0: # %entry
3362; PC64LE9-NEXT:    mflr 0
3363; PC64LE9-NEXT:    std 0, 16(1)
3364; PC64LE9-NEXT:    stdu 1, -48(1)
3365; PC64LE9-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
3366; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
3367; PC64LE9-NEXT:    lfd 1, .LCPI58_0@toc@l(3)
3368; PC64LE9-NEXT:    bl exp2
3369; PC64LE9-NEXT:    nop
3370; PC64LE9-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
3371; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3372; PC64LE9-NEXT:    lfs 1, .LCPI58_1@toc@l(3)
3373; PC64LE9-NEXT:    bl exp2
3374; PC64LE9-NEXT:    nop
3375; PC64LE9-NEXT:    addis 3, 2, .LCPI58_2@toc@ha
3376; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3377; PC64LE9-NEXT:    xxmrghd 63, 63, 1
3378; PC64LE9-NEXT:    lfd 1, .LCPI58_2@toc@l(3)
3379; PC64LE9-NEXT:    bl exp2
3380; PC64LE9-NEXT:    nop
3381; PC64LE9-NEXT:    fmr 3, 1
3382; PC64LE9-NEXT:    xxswapd 1, 63
3383; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3384; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
3385; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3386; PC64LE9-NEXT:    addi 1, 1, 48
3387; PC64LE9-NEXT:    ld 0, 16(1)
3388; PC64LE9-NEXT:    mtlr 0
3389; PC64LE9-NEXT:    blr
3390entry:
3391  %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
3392                          <3 x double> <double 42.0, double 42.1, double 42.2>,
3393                          metadata !"round.dynamic",
3394                          metadata !"fpexcept.strict") #1
3395  ret <3 x double> %exp2
3396}
3397
3398define <4 x double> @constrained_vector_exp2_v4f64() #0 {
3399; PC64LE-LABEL: constrained_vector_exp2_v4f64:
3400; PC64LE:       # %bb.0: # %entry
3401; PC64LE-NEXT:    mflr 0
3402; PC64LE-NEXT:    std 0, 16(1)
3403; PC64LE-NEXT:    stdu 1, -80(1)
3404; PC64LE-NEXT:    li 3, 48
3405; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
3406; PC64LE-NEXT:    li 3, 64
3407; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3408; PC64LE-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
3409; PC64LE-NEXT:    lfd 1, .LCPI59_0@toc@l(3)
3410; PC64LE-NEXT:    bl exp2
3411; PC64LE-NEXT:    nop
3412; PC64LE-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
3413; PC64LE-NEXT:    xxlor 63, 1, 1
3414; PC64LE-NEXT:    lfd 1, .LCPI59_1@toc@l(3)
3415; PC64LE-NEXT:    bl exp2
3416; PC64LE-NEXT:    nop
3417; PC64LE-NEXT:    addis 3, 2, .LCPI59_2@toc@ha
3418; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3419; PC64LE-NEXT:    xxmrghd 63, 1, 63
3420; PC64LE-NEXT:    lfd 1, .LCPI59_2@toc@l(3)
3421; PC64LE-NEXT:    bl exp2
3422; PC64LE-NEXT:    nop
3423; PC64LE-NEXT:    addis 3, 2, .LCPI59_3@toc@ha
3424; PC64LE-NEXT:    xxlor 62, 1, 1
3425; PC64LE-NEXT:    lfd 1, .LCPI59_3@toc@l(3)
3426; PC64LE-NEXT:    bl exp2
3427; PC64LE-NEXT:    nop
3428; PC64LE-NEXT:    li 3, 64
3429; PC64LE-NEXT:    vmr 2, 31
3430; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3431; PC64LE-NEXT:    xxmrghd 35, 1, 62
3432; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3433; PC64LE-NEXT:    li 3, 48
3434; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
3435; PC64LE-NEXT:    addi 1, 1, 80
3436; PC64LE-NEXT:    ld 0, 16(1)
3437; PC64LE-NEXT:    mtlr 0
3438; PC64LE-NEXT:    blr
3439;
3440; PC64LE9-LABEL: constrained_vector_exp2_v4f64:
3441; PC64LE9:       # %bb.0: # %entry
3442; PC64LE9-NEXT:    mflr 0
3443; PC64LE9-NEXT:    std 0, 16(1)
3444; PC64LE9-NEXT:    stdu 1, -64(1)
3445; PC64LE9-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
3446; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
3447; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3448; PC64LE9-NEXT:    lfd 1, .LCPI59_0@toc@l(3)
3449; PC64LE9-NEXT:    bl exp2
3450; PC64LE9-NEXT:    nop
3451; PC64LE9-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
3452; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3453; PC64LE9-NEXT:    lfd 1, .LCPI59_1@toc@l(3)
3454; PC64LE9-NEXT:    bl exp2
3455; PC64LE9-NEXT:    nop
3456; PC64LE9-NEXT:    addis 3, 2, .LCPI59_2@toc@ha
3457; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3458; PC64LE9-NEXT:    xxmrghd 63, 1, 63
3459; PC64LE9-NEXT:    lfd 1, .LCPI59_2@toc@l(3)
3460; PC64LE9-NEXT:    bl exp2
3461; PC64LE9-NEXT:    nop
3462; PC64LE9-NEXT:    addis 3, 2, .LCPI59_3@toc@ha
3463; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
3464; PC64LE9-NEXT:    lfd 1, .LCPI59_3@toc@l(3)
3465; PC64LE9-NEXT:    bl exp2
3466; PC64LE9-NEXT:    nop
3467; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3468; PC64LE9-NEXT:    xxmrghd 35, 1, 62
3469; PC64LE9-NEXT:    vmr 2, 31
3470; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3471; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
3472; PC64LE9-NEXT:    addi 1, 1, 64
3473; PC64LE9-NEXT:    ld 0, 16(1)
3474; PC64LE9-NEXT:    mtlr 0
3475; PC64LE9-NEXT:    blr
3476entry:
3477  %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64(
3478                              <4 x double> <double 42.1, double 42.2,
3479                                            double 42.3, double 42.4>,
3480                              metadata !"round.dynamic",
3481                              metadata !"fpexcept.strict") #1
3482  ret <4 x double> %exp2
3483}
3484
3485define <1 x float> @constrained_vector_log_v1f32() #0 {
3486; PC64LE-LABEL: constrained_vector_log_v1f32:
3487; PC64LE:       # %bb.0: # %entry
3488; PC64LE-NEXT:    mflr 0
3489; PC64LE-NEXT:    std 0, 16(1)
3490; PC64LE-NEXT:    stdu 1, -32(1)
3491; PC64LE-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
3492; PC64LE-NEXT:    lfs 1, .LCPI60_0@toc@l(3)
3493; PC64LE-NEXT:    bl logf
3494; PC64LE-NEXT:    nop
3495; PC64LE-NEXT:    addi 1, 1, 32
3496; PC64LE-NEXT:    ld 0, 16(1)
3497; PC64LE-NEXT:    mtlr 0
3498; PC64LE-NEXT:    blr
3499;
3500; PC64LE9-LABEL: constrained_vector_log_v1f32:
3501; PC64LE9:       # %bb.0: # %entry
3502; PC64LE9-NEXT:    mflr 0
3503; PC64LE9-NEXT:    std 0, 16(1)
3504; PC64LE9-NEXT:    stdu 1, -32(1)
3505; PC64LE9-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
3506; PC64LE9-NEXT:    lfs 1, .LCPI60_0@toc@l(3)
3507; PC64LE9-NEXT:    bl logf
3508; PC64LE9-NEXT:    nop
3509; PC64LE9-NEXT:    addi 1, 1, 32
3510; PC64LE9-NEXT:    ld 0, 16(1)
3511; PC64LE9-NEXT:    mtlr 0
3512; PC64LE9-NEXT:    blr
3513entry:
3514  %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
3515                             <1 x float> <float 42.0>,
3516                             metadata !"round.dynamic",
3517                             metadata !"fpexcept.strict") #1
3518  ret <1 x float> %log
3519}
3520
3521define <2 x double> @constrained_vector_log_v2f64() #0 {
3522; PC64LE-LABEL: constrained_vector_log_v2f64:
3523; PC64LE:       # %bb.0: # %entry
3524; PC64LE-NEXT:    mflr 0
3525; PC64LE-NEXT:    std 0, 16(1)
3526; PC64LE-NEXT:    stdu 1, -64(1)
3527; PC64LE-NEXT:    li 3, 48
3528; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3529; PC64LE-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
3530; PC64LE-NEXT:    lfd 1, .LCPI61_0@toc@l(3)
3531; PC64LE-NEXT:    bl log
3532; PC64LE-NEXT:    nop
3533; PC64LE-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
3534; PC64LE-NEXT:    xxlor 63, 1, 1
3535; PC64LE-NEXT:    lfs 1, .LCPI61_1@toc@l(3)
3536; PC64LE-NEXT:    bl log
3537; PC64LE-NEXT:    nop
3538; PC64LE-NEXT:    li 3, 48
3539; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3540; PC64LE-NEXT:    xxmrghd 34, 63, 1
3541; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3542; PC64LE-NEXT:    addi 1, 1, 64
3543; PC64LE-NEXT:    ld 0, 16(1)
3544; PC64LE-NEXT:    mtlr 0
3545; PC64LE-NEXT:    blr
3546;
3547; PC64LE9-LABEL: constrained_vector_log_v2f64:
3548; PC64LE9:       # %bb.0: # %entry
3549; PC64LE9-NEXT:    mflr 0
3550; PC64LE9-NEXT:    std 0, 16(1)
3551; PC64LE9-NEXT:    stdu 1, -48(1)
3552; PC64LE9-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
3553; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
3554; PC64LE9-NEXT:    lfd 1, .LCPI61_0@toc@l(3)
3555; PC64LE9-NEXT:    bl log
3556; PC64LE9-NEXT:    nop
3557; PC64LE9-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
3558; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3559; PC64LE9-NEXT:    lfs 1, .LCPI61_1@toc@l(3)
3560; PC64LE9-NEXT:    bl log
3561; PC64LE9-NEXT:    nop
3562; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3563; PC64LE9-NEXT:    xxmrghd 34, 63, 1
3564; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
3565; PC64LE9-NEXT:    addi 1, 1, 48
3566; PC64LE9-NEXT:    ld 0, 16(1)
3567; PC64LE9-NEXT:    mtlr 0
3568; PC64LE9-NEXT:    blr
3569entry:
3570  %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
3571                             <2 x double> <double 42.0, double 42.1>,
3572                             metadata !"round.dynamic",
3573                             metadata !"fpexcept.strict") #1
3574  ret <2 x double> %log
3575}
3576
3577define <3 x float> @constrained_vector_log_v3f32() #0 {
3578; PC64LE-LABEL: constrained_vector_log_v3f32:
3579; PC64LE:       # %bb.0: # %entry
3580; PC64LE-NEXT:    mflr 0
3581; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3582; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3583; PC64LE-NEXT:    std 0, 16(1)
3584; PC64LE-NEXT:    stdu 1, -48(1)
3585; PC64LE-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
3586; PC64LE-NEXT:    lfs 1, .LCPI62_0@toc@l(3)
3587; PC64LE-NEXT:    bl logf
3588; PC64LE-NEXT:    nop
3589; PC64LE-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
3590; PC64LE-NEXT:    fmr 31, 1
3591; PC64LE-NEXT:    lfs 1, .LCPI62_1@toc@l(3)
3592; PC64LE-NEXT:    bl logf
3593; PC64LE-NEXT:    nop
3594; PC64LE-NEXT:    addis 3, 2, .LCPI62_2@toc@ha
3595; PC64LE-NEXT:    fmr 30, 1
3596; PC64LE-NEXT:    lfs 1, .LCPI62_2@toc@l(3)
3597; PC64LE-NEXT:    bl logf
3598; PC64LE-NEXT:    nop
3599; PC64LE-NEXT:    xscvdpspn 34, 30
3600; PC64LE-NEXT:    addis 3, 2, .LCPI62_3@toc@ha
3601; PC64LE-NEXT:    xscvdpspn 35, 1
3602; PC64LE-NEXT:    addi 3, 3, .LCPI62_3@toc@l
3603; PC64LE-NEXT:    lvx 4, 0, 3
3604; PC64LE-NEXT:    vmrghw 2, 2, 3
3605; PC64LE-NEXT:    xscvdpspn 35, 31
3606; PC64LE-NEXT:    vperm 2, 3, 2, 4
3607; PC64LE-NEXT:    addi 1, 1, 48
3608; PC64LE-NEXT:    ld 0, 16(1)
3609; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3610; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3611; PC64LE-NEXT:    mtlr 0
3612; PC64LE-NEXT:    blr
3613;
3614; PC64LE9-LABEL: constrained_vector_log_v3f32:
3615; PC64LE9:       # %bb.0: # %entry
3616; PC64LE9-NEXT:    mflr 0
3617; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3618; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3619; PC64LE9-NEXT:    std 0, 16(1)
3620; PC64LE9-NEXT:    stdu 1, -48(1)
3621; PC64LE9-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
3622; PC64LE9-NEXT:    lfs 1, .LCPI62_0@toc@l(3)
3623; PC64LE9-NEXT:    bl logf
3624; PC64LE9-NEXT:    nop
3625; PC64LE9-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
3626; PC64LE9-NEXT:    fmr 31, 1
3627; PC64LE9-NEXT:    lfs 1, .LCPI62_1@toc@l(3)
3628; PC64LE9-NEXT:    bl logf
3629; PC64LE9-NEXT:    nop
3630; PC64LE9-NEXT:    addis 3, 2, .LCPI62_2@toc@ha
3631; PC64LE9-NEXT:    fmr 30, 1
3632; PC64LE9-NEXT:    lfs 1, .LCPI62_2@toc@l(3)
3633; PC64LE9-NEXT:    bl logf
3634; PC64LE9-NEXT:    nop
3635; PC64LE9-NEXT:    xscvdpspn 34, 1
3636; PC64LE9-NEXT:    xscvdpspn 35, 30
3637; PC64LE9-NEXT:    addis 3, 2, .LCPI62_3@toc@ha
3638; PC64LE9-NEXT:    xscvdpspn 36, 31
3639; PC64LE9-NEXT:    addi 3, 3, .LCPI62_3@toc@l
3640; PC64LE9-NEXT:    vmrghw 2, 3, 2
3641; PC64LE9-NEXT:    lxvx 35, 0, 3
3642; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3643; PC64LE9-NEXT:    addi 1, 1, 48
3644; PC64LE9-NEXT:    ld 0, 16(1)
3645; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3646; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3647; PC64LE9-NEXT:    mtlr 0
3648; PC64LE9-NEXT:    blr
3649entry:
3650  %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
3651                              <3 x float> <float 42.0, float 43.0, float 44.0>,
3652                              metadata !"round.dynamic",
3653                              metadata !"fpexcept.strict") #1
3654  ret <3 x float> %log
3655}
3656
3657define <3 x double> @constrained_vector_log_v3f64() #0 {
3658; PC64LE-LABEL: constrained_vector_log_v3f64:
3659; PC64LE:       # %bb.0: # %entry
3660; PC64LE-NEXT:    mflr 0
3661; PC64LE-NEXT:    std 0, 16(1)
3662; PC64LE-NEXT:    stdu 1, -64(1)
3663; PC64LE-NEXT:    li 3, 48
3664; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3665; PC64LE-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
3666; PC64LE-NEXT:    lfd 1, .LCPI63_0@toc@l(3)
3667; PC64LE-NEXT:    bl log
3668; PC64LE-NEXT:    nop
3669; PC64LE-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
3670; PC64LE-NEXT:    xxlor 63, 1, 1
3671; PC64LE-NEXT:    lfs 1, .LCPI63_1@toc@l(3)
3672; PC64LE-NEXT:    bl log
3673; PC64LE-NEXT:    nop
3674; PC64LE-NEXT:    addis 3, 2, .LCPI63_2@toc@ha
3675; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3676; PC64LE-NEXT:    xxmrghd 63, 63, 1
3677; PC64LE-NEXT:    lfd 1, .LCPI63_2@toc@l(3)
3678; PC64LE-NEXT:    bl log
3679; PC64LE-NEXT:    nop
3680; PC64LE-NEXT:    xxswapd 0, 63
3681; PC64LE-NEXT:    li 3, 48
3682; PC64LE-NEXT:    xxlor 2, 63, 63
3683; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3684; PC64LE-NEXT:    fmr 3, 1
3685; PC64LE-NEXT:    fmr 1, 0
3686; PC64LE-NEXT:    addi 1, 1, 64
3687; PC64LE-NEXT:    ld 0, 16(1)
3688; PC64LE-NEXT:    mtlr 0
3689; PC64LE-NEXT:    blr
3690;
3691; PC64LE9-LABEL: constrained_vector_log_v3f64:
3692; PC64LE9:       # %bb.0: # %entry
3693; PC64LE9-NEXT:    mflr 0
3694; PC64LE9-NEXT:    std 0, 16(1)
3695; PC64LE9-NEXT:    stdu 1, -48(1)
3696; PC64LE9-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
3697; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
3698; PC64LE9-NEXT:    lfd 1, .LCPI63_0@toc@l(3)
3699; PC64LE9-NEXT:    bl log
3700; PC64LE9-NEXT:    nop
3701; PC64LE9-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
3702; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3703; PC64LE9-NEXT:    lfs 1, .LCPI63_1@toc@l(3)
3704; PC64LE9-NEXT:    bl log
3705; PC64LE9-NEXT:    nop
3706; PC64LE9-NEXT:    addis 3, 2, .LCPI63_2@toc@ha
3707; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3708; PC64LE9-NEXT:    xxmrghd 63, 63, 1
3709; PC64LE9-NEXT:    lfd 1, .LCPI63_2@toc@l(3)
3710; PC64LE9-NEXT:    bl log
3711; PC64LE9-NEXT:    nop
3712; PC64LE9-NEXT:    fmr 3, 1
3713; PC64LE9-NEXT:    xxswapd 1, 63
3714; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3715; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
3716; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3717; PC64LE9-NEXT:    addi 1, 1, 48
3718; PC64LE9-NEXT:    ld 0, 16(1)
3719; PC64LE9-NEXT:    mtlr 0
3720; PC64LE9-NEXT:    blr
3721entry:
3722  %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
3723                          <3 x double> <double 42.0, double 42.1, double 42.2>,
3724                          metadata !"round.dynamic",
3725                          metadata !"fpexcept.strict") #1
3726  ret <3 x double> %log
3727}
3728
3729define <4 x double> @constrained_vector_log_v4f64() #0 {
3730; PC64LE-LABEL: constrained_vector_log_v4f64:
3731; PC64LE:       # %bb.0: # %entry
3732; PC64LE-NEXT:    mflr 0
3733; PC64LE-NEXT:    std 0, 16(1)
3734; PC64LE-NEXT:    stdu 1, -80(1)
3735; PC64LE-NEXT:    li 3, 48
3736; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
3737; PC64LE-NEXT:    li 3, 64
3738; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3739; PC64LE-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
3740; PC64LE-NEXT:    lfd 1, .LCPI64_0@toc@l(3)
3741; PC64LE-NEXT:    bl log
3742; PC64LE-NEXT:    nop
3743; PC64LE-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
3744; PC64LE-NEXT:    xxlor 63, 1, 1
3745; PC64LE-NEXT:    lfd 1, .LCPI64_1@toc@l(3)
3746; PC64LE-NEXT:    bl log
3747; PC64LE-NEXT:    nop
3748; PC64LE-NEXT:    addis 3, 2, .LCPI64_2@toc@ha
3749; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3750; PC64LE-NEXT:    xxmrghd 63, 1, 63
3751; PC64LE-NEXT:    lfd 1, .LCPI64_2@toc@l(3)
3752; PC64LE-NEXT:    bl log
3753; PC64LE-NEXT:    nop
3754; PC64LE-NEXT:    addis 3, 2, .LCPI64_3@toc@ha
3755; PC64LE-NEXT:    xxlor 62, 1, 1
3756; PC64LE-NEXT:    lfs 1, .LCPI64_3@toc@l(3)
3757; PC64LE-NEXT:    bl log
3758; PC64LE-NEXT:    nop
3759; PC64LE-NEXT:    li 3, 64
3760; PC64LE-NEXT:    vmr 3, 31
3761; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3762; PC64LE-NEXT:    xxmrghd 34, 62, 1
3763; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3764; PC64LE-NEXT:    li 3, 48
3765; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
3766; PC64LE-NEXT:    addi 1, 1, 80
3767; PC64LE-NEXT:    ld 0, 16(1)
3768; PC64LE-NEXT:    mtlr 0
3769; PC64LE-NEXT:    blr
3770;
3771; PC64LE9-LABEL: constrained_vector_log_v4f64:
3772; PC64LE9:       # %bb.0: # %entry
3773; PC64LE9-NEXT:    mflr 0
3774; PC64LE9-NEXT:    std 0, 16(1)
3775; PC64LE9-NEXT:    stdu 1, -64(1)
3776; PC64LE9-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
3777; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
3778; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3779; PC64LE9-NEXT:    lfd 1, .LCPI64_0@toc@l(3)
3780; PC64LE9-NEXT:    bl log
3781; PC64LE9-NEXT:    nop
3782; PC64LE9-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
3783; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3784; PC64LE9-NEXT:    lfd 1, .LCPI64_1@toc@l(3)
3785; PC64LE9-NEXT:    bl log
3786; PC64LE9-NEXT:    nop
3787; PC64LE9-NEXT:    addis 3, 2, .LCPI64_2@toc@ha
3788; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3789; PC64LE9-NEXT:    xxmrghd 63, 1, 63
3790; PC64LE9-NEXT:    lfd 1, .LCPI64_2@toc@l(3)
3791; PC64LE9-NEXT:    bl log
3792; PC64LE9-NEXT:    nop
3793; PC64LE9-NEXT:    addis 3, 2, .LCPI64_3@toc@ha
3794; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
3795; PC64LE9-NEXT:    lfs 1, .LCPI64_3@toc@l(3)
3796; PC64LE9-NEXT:    bl log
3797; PC64LE9-NEXT:    nop
3798; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3799; PC64LE9-NEXT:    xxmrghd 34, 62, 1
3800; PC64LE9-NEXT:    vmr 3, 31
3801; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3802; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
3803; PC64LE9-NEXT:    addi 1, 1, 64
3804; PC64LE9-NEXT:    ld 0, 16(1)
3805; PC64LE9-NEXT:    mtlr 0
3806; PC64LE9-NEXT:    blr
3807entry:
3808  %log = call <4 x double> @llvm.experimental.constrained.log.v4f64(
3809                             <4 x double> <double 42.0, double 42.1,
3810                                           double 42.2, double 42.3>,
3811                             metadata !"round.dynamic",
3812                             metadata !"fpexcept.strict") #1
3813  ret <4 x double> %log
3814}
3815
3816define <1 x float> @constrained_vector_log10_v1f32() #0 {
3817; PC64LE-LABEL: constrained_vector_log10_v1f32:
3818; PC64LE:       # %bb.0: # %entry
3819; PC64LE-NEXT:    mflr 0
3820; PC64LE-NEXT:    std 0, 16(1)
3821; PC64LE-NEXT:    stdu 1, -32(1)
3822; PC64LE-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
3823; PC64LE-NEXT:    lfs 1, .LCPI65_0@toc@l(3)
3824; PC64LE-NEXT:    bl log10f
3825; PC64LE-NEXT:    nop
3826; PC64LE-NEXT:    addi 1, 1, 32
3827; PC64LE-NEXT:    ld 0, 16(1)
3828; PC64LE-NEXT:    mtlr 0
3829; PC64LE-NEXT:    blr
3830;
3831; PC64LE9-LABEL: constrained_vector_log10_v1f32:
3832; PC64LE9:       # %bb.0: # %entry
3833; PC64LE9-NEXT:    mflr 0
3834; PC64LE9-NEXT:    std 0, 16(1)
3835; PC64LE9-NEXT:    stdu 1, -32(1)
3836; PC64LE9-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
3837; PC64LE9-NEXT:    lfs 1, .LCPI65_0@toc@l(3)
3838; PC64LE9-NEXT:    bl log10f
3839; PC64LE9-NEXT:    nop
3840; PC64LE9-NEXT:    addi 1, 1, 32
3841; PC64LE9-NEXT:    ld 0, 16(1)
3842; PC64LE9-NEXT:    mtlr 0
3843; PC64LE9-NEXT:    blr
3844entry:
3845  %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
3846                             <1 x float> <float 42.0>,
3847                             metadata !"round.dynamic",
3848                             metadata !"fpexcept.strict") #1
3849  ret <1 x float> %log10
3850}
3851
3852define <2 x double> @constrained_vector_log10_v2f64() #0 {
3853; PC64LE-LABEL: constrained_vector_log10_v2f64:
3854; PC64LE:       # %bb.0: # %entry
3855; PC64LE-NEXT:    mflr 0
3856; PC64LE-NEXT:    std 0, 16(1)
3857; PC64LE-NEXT:    stdu 1, -64(1)
3858; PC64LE-NEXT:    li 3, 48
3859; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3860; PC64LE-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
3861; PC64LE-NEXT:    lfd 1, .LCPI66_0@toc@l(3)
3862; PC64LE-NEXT:    bl log10
3863; PC64LE-NEXT:    nop
3864; PC64LE-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
3865; PC64LE-NEXT:    xxlor 63, 1, 1
3866; PC64LE-NEXT:    lfs 1, .LCPI66_1@toc@l(3)
3867; PC64LE-NEXT:    bl log10
3868; PC64LE-NEXT:    nop
3869; PC64LE-NEXT:    li 3, 48
3870; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3871; PC64LE-NEXT:    xxmrghd 34, 63, 1
3872; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3873; PC64LE-NEXT:    addi 1, 1, 64
3874; PC64LE-NEXT:    ld 0, 16(1)
3875; PC64LE-NEXT:    mtlr 0
3876; PC64LE-NEXT:    blr
3877;
3878; PC64LE9-LABEL: constrained_vector_log10_v2f64:
3879; PC64LE9:       # %bb.0: # %entry
3880; PC64LE9-NEXT:    mflr 0
3881; PC64LE9-NEXT:    std 0, 16(1)
3882; PC64LE9-NEXT:    stdu 1, -48(1)
3883; PC64LE9-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
3884; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
3885; PC64LE9-NEXT:    lfd 1, .LCPI66_0@toc@l(3)
3886; PC64LE9-NEXT:    bl log10
3887; PC64LE9-NEXT:    nop
3888; PC64LE9-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
3889; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
3890; PC64LE9-NEXT:    lfs 1, .LCPI66_1@toc@l(3)
3891; PC64LE9-NEXT:    bl log10
3892; PC64LE9-NEXT:    nop
3893; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3894; PC64LE9-NEXT:    xxmrghd 34, 63, 1
3895; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
3896; PC64LE9-NEXT:    addi 1, 1, 48
3897; PC64LE9-NEXT:    ld 0, 16(1)
3898; PC64LE9-NEXT:    mtlr 0
3899; PC64LE9-NEXT:    blr
3900entry:
3901  %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
3902                               <2 x double> <double 42.0, double 42.1>,
3903                               metadata !"round.dynamic",
3904                               metadata !"fpexcept.strict") #1
3905  ret <2 x double> %log10
3906}
3907
3908define <3 x float> @constrained_vector_log10_v3f32() #0 {
3909; PC64LE-LABEL: constrained_vector_log10_v3f32:
3910; PC64LE:       # %bb.0: # %entry
3911; PC64LE-NEXT:    mflr 0
3912; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3913; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3914; PC64LE-NEXT:    std 0, 16(1)
3915; PC64LE-NEXT:    stdu 1, -48(1)
3916; PC64LE-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
3917; PC64LE-NEXT:    lfs 1, .LCPI67_0@toc@l(3)
3918; PC64LE-NEXT:    bl log10f
3919; PC64LE-NEXT:    nop
3920; PC64LE-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
3921; PC64LE-NEXT:    fmr 31, 1
3922; PC64LE-NEXT:    lfs 1, .LCPI67_1@toc@l(3)
3923; PC64LE-NEXT:    bl log10f
3924; PC64LE-NEXT:    nop
3925; PC64LE-NEXT:    addis 3, 2, .LCPI67_2@toc@ha
3926; PC64LE-NEXT:    fmr 30, 1
3927; PC64LE-NEXT:    lfs 1, .LCPI67_2@toc@l(3)
3928; PC64LE-NEXT:    bl log10f
3929; PC64LE-NEXT:    nop
3930; PC64LE-NEXT:    xscvdpspn 34, 30
3931; PC64LE-NEXT:    addis 3, 2, .LCPI67_3@toc@ha
3932; PC64LE-NEXT:    xscvdpspn 35, 1
3933; PC64LE-NEXT:    addi 3, 3, .LCPI67_3@toc@l
3934; PC64LE-NEXT:    lvx 4, 0, 3
3935; PC64LE-NEXT:    vmrghw 2, 2, 3
3936; PC64LE-NEXT:    xscvdpspn 35, 31
3937; PC64LE-NEXT:    vperm 2, 3, 2, 4
3938; PC64LE-NEXT:    addi 1, 1, 48
3939; PC64LE-NEXT:    ld 0, 16(1)
3940; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3941; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3942; PC64LE-NEXT:    mtlr 0
3943; PC64LE-NEXT:    blr
3944;
3945; PC64LE9-LABEL: constrained_vector_log10_v3f32:
3946; PC64LE9:       # %bb.0: # %entry
3947; PC64LE9-NEXT:    mflr 0
3948; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3949; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3950; PC64LE9-NEXT:    std 0, 16(1)
3951; PC64LE9-NEXT:    stdu 1, -48(1)
3952; PC64LE9-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
3953; PC64LE9-NEXT:    lfs 1, .LCPI67_0@toc@l(3)
3954; PC64LE9-NEXT:    bl log10f
3955; PC64LE9-NEXT:    nop
3956; PC64LE9-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
3957; PC64LE9-NEXT:    fmr 31, 1
3958; PC64LE9-NEXT:    lfs 1, .LCPI67_1@toc@l(3)
3959; PC64LE9-NEXT:    bl log10f
3960; PC64LE9-NEXT:    nop
3961; PC64LE9-NEXT:    addis 3, 2, .LCPI67_2@toc@ha
3962; PC64LE9-NEXT:    fmr 30, 1
3963; PC64LE9-NEXT:    lfs 1, .LCPI67_2@toc@l(3)
3964; PC64LE9-NEXT:    bl log10f
3965; PC64LE9-NEXT:    nop
3966; PC64LE9-NEXT:    xscvdpspn 34, 1
3967; PC64LE9-NEXT:    xscvdpspn 35, 30
3968; PC64LE9-NEXT:    addis 3, 2, .LCPI67_3@toc@ha
3969; PC64LE9-NEXT:    xscvdpspn 36, 31
3970; PC64LE9-NEXT:    addi 3, 3, .LCPI67_3@toc@l
3971; PC64LE9-NEXT:    vmrghw 2, 3, 2
3972; PC64LE9-NEXT:    lxvx 35, 0, 3
3973; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3974; PC64LE9-NEXT:    addi 1, 1, 48
3975; PC64LE9-NEXT:    ld 0, 16(1)
3976; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3977; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3978; PC64LE9-NEXT:    mtlr 0
3979; PC64LE9-NEXT:    blr
3980entry:
3981  %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
3982                              <3 x float> <float 42.0, float 43.0, float 44.0>,
3983                              metadata !"round.dynamic",
3984                              metadata !"fpexcept.strict") #1
3985  ret <3 x float> %log10
3986}
3987
3988define <3 x double> @constrained_vector_log10_v3f64() #0 {
3989; PC64LE-LABEL: constrained_vector_log10_v3f64:
3990; PC64LE:       # %bb.0: # %entry
3991; PC64LE-NEXT:    mflr 0
3992; PC64LE-NEXT:    std 0, 16(1)
3993; PC64LE-NEXT:    stdu 1, -64(1)
3994; PC64LE-NEXT:    li 3, 48
3995; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3996; PC64LE-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
3997; PC64LE-NEXT:    lfd 1, .LCPI68_0@toc@l(3)
3998; PC64LE-NEXT:    bl log10
3999; PC64LE-NEXT:    nop
4000; PC64LE-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
4001; PC64LE-NEXT:    xxlor 63, 1, 1
4002; PC64LE-NEXT:    lfs 1, .LCPI68_1@toc@l(3)
4003; PC64LE-NEXT:    bl log10
4004; PC64LE-NEXT:    nop
4005; PC64LE-NEXT:    addis 3, 2, .LCPI68_2@toc@ha
4006; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4007; PC64LE-NEXT:    xxmrghd 63, 63, 1
4008; PC64LE-NEXT:    lfd 1, .LCPI68_2@toc@l(3)
4009; PC64LE-NEXT:    bl log10
4010; PC64LE-NEXT:    nop
4011; PC64LE-NEXT:    xxswapd 0, 63
4012; PC64LE-NEXT:    li 3, 48
4013; PC64LE-NEXT:    xxlor 2, 63, 63
4014; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4015; PC64LE-NEXT:    fmr 3, 1
4016; PC64LE-NEXT:    fmr 1, 0
4017; PC64LE-NEXT:    addi 1, 1, 64
4018; PC64LE-NEXT:    ld 0, 16(1)
4019; PC64LE-NEXT:    mtlr 0
4020; PC64LE-NEXT:    blr
4021;
4022; PC64LE9-LABEL: constrained_vector_log10_v3f64:
4023; PC64LE9:       # %bb.0: # %entry
4024; PC64LE9-NEXT:    mflr 0
4025; PC64LE9-NEXT:    std 0, 16(1)
4026; PC64LE9-NEXT:    stdu 1, -48(1)
4027; PC64LE9-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
4028; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
4029; PC64LE9-NEXT:    lfd 1, .LCPI68_0@toc@l(3)
4030; PC64LE9-NEXT:    bl log10
4031; PC64LE9-NEXT:    nop
4032; PC64LE9-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
4033; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4034; PC64LE9-NEXT:    lfs 1, .LCPI68_1@toc@l(3)
4035; PC64LE9-NEXT:    bl log10
4036; PC64LE9-NEXT:    nop
4037; PC64LE9-NEXT:    addis 3, 2, .LCPI68_2@toc@ha
4038; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4039; PC64LE9-NEXT:    xxmrghd 63, 63, 1
4040; PC64LE9-NEXT:    lfd 1, .LCPI68_2@toc@l(3)
4041; PC64LE9-NEXT:    bl log10
4042; PC64LE9-NEXT:    nop
4043; PC64LE9-NEXT:    fmr 3, 1
4044; PC64LE9-NEXT:    xxswapd 1, 63
4045; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4046; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
4047; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4048; PC64LE9-NEXT:    addi 1, 1, 48
4049; PC64LE9-NEXT:    ld 0, 16(1)
4050; PC64LE9-NEXT:    mtlr 0
4051; PC64LE9-NEXT:    blr
4052entry:
4053  %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
4054                          <3 x double> <double 42.0, double 42.1, double 42.2>,
4055                          metadata !"round.dynamic",
4056                          metadata !"fpexcept.strict") #1
4057  ret <3 x double> %log10
4058}
4059
4060define <4 x double> @constrained_vector_log10_v4f64() #0 {
4061; PC64LE-LABEL: constrained_vector_log10_v4f64:
4062; PC64LE:       # %bb.0: # %entry
4063; PC64LE-NEXT:    mflr 0
4064; PC64LE-NEXT:    std 0, 16(1)
4065; PC64LE-NEXT:    stdu 1, -80(1)
4066; PC64LE-NEXT:    li 3, 48
4067; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
4068; PC64LE-NEXT:    li 3, 64
4069; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4070; PC64LE-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
4071; PC64LE-NEXT:    lfd 1, .LCPI69_0@toc@l(3)
4072; PC64LE-NEXT:    bl log10
4073; PC64LE-NEXT:    nop
4074; PC64LE-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
4075; PC64LE-NEXT:    xxlor 63, 1, 1
4076; PC64LE-NEXT:    lfd 1, .LCPI69_1@toc@l(3)
4077; PC64LE-NEXT:    bl log10
4078; PC64LE-NEXT:    nop
4079; PC64LE-NEXT:    addis 3, 2, .LCPI69_2@toc@ha
4080; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4081; PC64LE-NEXT:    xxmrghd 63, 1, 63
4082; PC64LE-NEXT:    lfd 1, .LCPI69_2@toc@l(3)
4083; PC64LE-NEXT:    bl log10
4084; PC64LE-NEXT:    nop
4085; PC64LE-NEXT:    addis 3, 2, .LCPI69_3@toc@ha
4086; PC64LE-NEXT:    xxlor 62, 1, 1
4087; PC64LE-NEXT:    lfs 1, .LCPI69_3@toc@l(3)
4088; PC64LE-NEXT:    bl log10
4089; PC64LE-NEXT:    nop
4090; PC64LE-NEXT:    li 3, 64
4091; PC64LE-NEXT:    vmr 3, 31
4092; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4093; PC64LE-NEXT:    xxmrghd 34, 62, 1
4094; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4095; PC64LE-NEXT:    li 3, 48
4096; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
4097; PC64LE-NEXT:    addi 1, 1, 80
4098; PC64LE-NEXT:    ld 0, 16(1)
4099; PC64LE-NEXT:    mtlr 0
4100; PC64LE-NEXT:    blr
4101;
4102; PC64LE9-LABEL: constrained_vector_log10_v4f64:
4103; PC64LE9:       # %bb.0: # %entry
4104; PC64LE9-NEXT:    mflr 0
4105; PC64LE9-NEXT:    std 0, 16(1)
4106; PC64LE9-NEXT:    stdu 1, -64(1)
4107; PC64LE9-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
4108; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
4109; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4110; PC64LE9-NEXT:    lfd 1, .LCPI69_0@toc@l(3)
4111; PC64LE9-NEXT:    bl log10
4112; PC64LE9-NEXT:    nop
4113; PC64LE9-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
4114; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4115; PC64LE9-NEXT:    lfd 1, .LCPI69_1@toc@l(3)
4116; PC64LE9-NEXT:    bl log10
4117; PC64LE9-NEXT:    nop
4118; PC64LE9-NEXT:    addis 3, 2, .LCPI69_2@toc@ha
4119; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4120; PC64LE9-NEXT:    xxmrghd 63, 1, 63
4121; PC64LE9-NEXT:    lfd 1, .LCPI69_2@toc@l(3)
4122; PC64LE9-NEXT:    bl log10
4123; PC64LE9-NEXT:    nop
4124; PC64LE9-NEXT:    addis 3, 2, .LCPI69_3@toc@ha
4125; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
4126; PC64LE9-NEXT:    lfs 1, .LCPI69_3@toc@l(3)
4127; PC64LE9-NEXT:    bl log10
4128; PC64LE9-NEXT:    nop
4129; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4130; PC64LE9-NEXT:    xxmrghd 34, 62, 1
4131; PC64LE9-NEXT:    vmr 3, 31
4132; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4133; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
4134; PC64LE9-NEXT:    addi 1, 1, 64
4135; PC64LE9-NEXT:    ld 0, 16(1)
4136; PC64LE9-NEXT:    mtlr 0
4137; PC64LE9-NEXT:    blr
4138entry:
4139  %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64(
4140                               <4 x double> <double 42.0, double 42.1,
4141                                             double 42.2, double 42.3>,
4142                               metadata !"round.dynamic",
4143                               metadata !"fpexcept.strict") #1
4144  ret <4 x double> %log10
4145}
4146
4147define <1 x float> @constrained_vector_log2_v1f32() #0 {
4148; PC64LE-LABEL: constrained_vector_log2_v1f32:
4149; PC64LE:       # %bb.0: # %entry
4150; PC64LE-NEXT:    mflr 0
4151; PC64LE-NEXT:    std 0, 16(1)
4152; PC64LE-NEXT:    stdu 1, -32(1)
4153; PC64LE-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
4154; PC64LE-NEXT:    lfs 1, .LCPI70_0@toc@l(3)
4155; PC64LE-NEXT:    bl log2f
4156; PC64LE-NEXT:    nop
4157; PC64LE-NEXT:    addi 1, 1, 32
4158; PC64LE-NEXT:    ld 0, 16(1)
4159; PC64LE-NEXT:    mtlr 0
4160; PC64LE-NEXT:    blr
4161;
4162; PC64LE9-LABEL: constrained_vector_log2_v1f32:
4163; PC64LE9:       # %bb.0: # %entry
4164; PC64LE9-NEXT:    mflr 0
4165; PC64LE9-NEXT:    std 0, 16(1)
4166; PC64LE9-NEXT:    stdu 1, -32(1)
4167; PC64LE9-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
4168; PC64LE9-NEXT:    lfs 1, .LCPI70_0@toc@l(3)
4169; PC64LE9-NEXT:    bl log2f
4170; PC64LE9-NEXT:    nop
4171; PC64LE9-NEXT:    addi 1, 1, 32
4172; PC64LE9-NEXT:    ld 0, 16(1)
4173; PC64LE9-NEXT:    mtlr 0
4174; PC64LE9-NEXT:    blr
4175entry:
4176  %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
4177                             <1 x float> <float 42.0>,
4178                             metadata !"round.dynamic",
4179                             metadata !"fpexcept.strict") #1
4180  ret <1 x float> %log2
4181}
4182
4183define <2 x double> @constrained_vector_log2_v2f64() #0 {
4184; PC64LE-LABEL: constrained_vector_log2_v2f64:
4185; PC64LE:       # %bb.0: # %entry
4186; PC64LE-NEXT:    mflr 0
4187; PC64LE-NEXT:    std 0, 16(1)
4188; PC64LE-NEXT:    stdu 1, -64(1)
4189; PC64LE-NEXT:    li 3, 48
4190; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4191; PC64LE-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
4192; PC64LE-NEXT:    lfd 1, .LCPI71_0@toc@l(3)
4193; PC64LE-NEXT:    bl log2
4194; PC64LE-NEXT:    nop
4195; PC64LE-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
4196; PC64LE-NEXT:    xxlor 63, 1, 1
4197; PC64LE-NEXT:    lfs 1, .LCPI71_1@toc@l(3)
4198; PC64LE-NEXT:    bl log2
4199; PC64LE-NEXT:    nop
4200; PC64LE-NEXT:    li 3, 48
4201; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4202; PC64LE-NEXT:    xxmrghd 34, 63, 1
4203; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4204; PC64LE-NEXT:    addi 1, 1, 64
4205; PC64LE-NEXT:    ld 0, 16(1)
4206; PC64LE-NEXT:    mtlr 0
4207; PC64LE-NEXT:    blr
4208;
4209; PC64LE9-LABEL: constrained_vector_log2_v2f64:
4210; PC64LE9:       # %bb.0: # %entry
4211; PC64LE9-NEXT:    mflr 0
4212; PC64LE9-NEXT:    std 0, 16(1)
4213; PC64LE9-NEXT:    stdu 1, -48(1)
4214; PC64LE9-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
4215; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
4216; PC64LE9-NEXT:    lfd 1, .LCPI71_0@toc@l(3)
4217; PC64LE9-NEXT:    bl log2
4218; PC64LE9-NEXT:    nop
4219; PC64LE9-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
4220; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4221; PC64LE9-NEXT:    lfs 1, .LCPI71_1@toc@l(3)
4222; PC64LE9-NEXT:    bl log2
4223; PC64LE9-NEXT:    nop
4224; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4225; PC64LE9-NEXT:    xxmrghd 34, 63, 1
4226; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
4227; PC64LE9-NEXT:    addi 1, 1, 48
4228; PC64LE9-NEXT:    ld 0, 16(1)
4229; PC64LE9-NEXT:    mtlr 0
4230; PC64LE9-NEXT:    blr
4231entry:
4232  %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
4233                              <2 x double> <double 42.0, double 42.1>,
4234                              metadata !"round.dynamic",
4235                              metadata !"fpexcept.strict") #1
4236  ret <2 x double> %log2
4237}
4238
4239define <3 x float> @constrained_vector_log2_v3f32() #0 {
4240; PC64LE-LABEL: constrained_vector_log2_v3f32:
4241; PC64LE:       # %bb.0: # %entry
4242; PC64LE-NEXT:    mflr 0
4243; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4244; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4245; PC64LE-NEXT:    std 0, 16(1)
4246; PC64LE-NEXT:    stdu 1, -48(1)
4247; PC64LE-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
4248; PC64LE-NEXT:    lfs 1, .LCPI72_0@toc@l(3)
4249; PC64LE-NEXT:    bl log2f
4250; PC64LE-NEXT:    nop
4251; PC64LE-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
4252; PC64LE-NEXT:    fmr 31, 1
4253; PC64LE-NEXT:    lfs 1, .LCPI72_1@toc@l(3)
4254; PC64LE-NEXT:    bl log2f
4255; PC64LE-NEXT:    nop
4256; PC64LE-NEXT:    addis 3, 2, .LCPI72_2@toc@ha
4257; PC64LE-NEXT:    fmr 30, 1
4258; PC64LE-NEXT:    lfs 1, .LCPI72_2@toc@l(3)
4259; PC64LE-NEXT:    bl log2f
4260; PC64LE-NEXT:    nop
4261; PC64LE-NEXT:    xscvdpspn 34, 30
4262; PC64LE-NEXT:    addis 3, 2, .LCPI72_3@toc@ha
4263; PC64LE-NEXT:    xscvdpspn 35, 1
4264; PC64LE-NEXT:    addi 3, 3, .LCPI72_3@toc@l
4265; PC64LE-NEXT:    lvx 4, 0, 3
4266; PC64LE-NEXT:    vmrghw 2, 2, 3
4267; PC64LE-NEXT:    xscvdpspn 35, 31
4268; PC64LE-NEXT:    vperm 2, 3, 2, 4
4269; PC64LE-NEXT:    addi 1, 1, 48
4270; PC64LE-NEXT:    ld 0, 16(1)
4271; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4272; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4273; PC64LE-NEXT:    mtlr 0
4274; PC64LE-NEXT:    blr
4275;
4276; PC64LE9-LABEL: constrained_vector_log2_v3f32:
4277; PC64LE9:       # %bb.0: # %entry
4278; PC64LE9-NEXT:    mflr 0
4279; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4280; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4281; PC64LE9-NEXT:    std 0, 16(1)
4282; PC64LE9-NEXT:    stdu 1, -48(1)
4283; PC64LE9-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
4284; PC64LE9-NEXT:    lfs 1, .LCPI72_0@toc@l(3)
4285; PC64LE9-NEXT:    bl log2f
4286; PC64LE9-NEXT:    nop
4287; PC64LE9-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
4288; PC64LE9-NEXT:    fmr 31, 1
4289; PC64LE9-NEXT:    lfs 1, .LCPI72_1@toc@l(3)
4290; PC64LE9-NEXT:    bl log2f
4291; PC64LE9-NEXT:    nop
4292; PC64LE9-NEXT:    addis 3, 2, .LCPI72_2@toc@ha
4293; PC64LE9-NEXT:    fmr 30, 1
4294; PC64LE9-NEXT:    lfs 1, .LCPI72_2@toc@l(3)
4295; PC64LE9-NEXT:    bl log2f
4296; PC64LE9-NEXT:    nop
4297; PC64LE9-NEXT:    xscvdpspn 34, 1
4298; PC64LE9-NEXT:    xscvdpspn 35, 30
4299; PC64LE9-NEXT:    addis 3, 2, .LCPI72_3@toc@ha
4300; PC64LE9-NEXT:    xscvdpspn 36, 31
4301; PC64LE9-NEXT:    addi 3, 3, .LCPI72_3@toc@l
4302; PC64LE9-NEXT:    vmrghw 2, 3, 2
4303; PC64LE9-NEXT:    lxvx 35, 0, 3
4304; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4305; PC64LE9-NEXT:    addi 1, 1, 48
4306; PC64LE9-NEXT:    ld 0, 16(1)
4307; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4308; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4309; PC64LE9-NEXT:    mtlr 0
4310; PC64LE9-NEXT:    blr
4311entry:
4312  %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
4313                              <3 x float> <float 42.0, float 43.0, float 44.0>,
4314                              metadata !"round.dynamic",
4315                              metadata !"fpexcept.strict") #1
4316  ret <3 x float> %log2
4317}
4318
4319define <3 x double> @constrained_vector_log2_v3f64() #0 {
4320; PC64LE-LABEL: constrained_vector_log2_v3f64:
4321; PC64LE:       # %bb.0: # %entry
4322; PC64LE-NEXT:    mflr 0
4323; PC64LE-NEXT:    std 0, 16(1)
4324; PC64LE-NEXT:    stdu 1, -64(1)
4325; PC64LE-NEXT:    li 3, 48
4326; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4327; PC64LE-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
4328; PC64LE-NEXT:    lfd 1, .LCPI73_0@toc@l(3)
4329; PC64LE-NEXT:    bl log2
4330; PC64LE-NEXT:    nop
4331; PC64LE-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
4332; PC64LE-NEXT:    xxlor 63, 1, 1
4333; PC64LE-NEXT:    lfs 1, .LCPI73_1@toc@l(3)
4334; PC64LE-NEXT:    bl log2
4335; PC64LE-NEXT:    nop
4336; PC64LE-NEXT:    addis 3, 2, .LCPI73_2@toc@ha
4337; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4338; PC64LE-NEXT:    xxmrghd 63, 63, 1
4339; PC64LE-NEXT:    lfd 1, .LCPI73_2@toc@l(3)
4340; PC64LE-NEXT:    bl log2
4341; PC64LE-NEXT:    nop
4342; PC64LE-NEXT:    xxswapd 0, 63
4343; PC64LE-NEXT:    li 3, 48
4344; PC64LE-NEXT:    xxlor 2, 63, 63
4345; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4346; PC64LE-NEXT:    fmr 3, 1
4347; PC64LE-NEXT:    fmr 1, 0
4348; PC64LE-NEXT:    addi 1, 1, 64
4349; PC64LE-NEXT:    ld 0, 16(1)
4350; PC64LE-NEXT:    mtlr 0
4351; PC64LE-NEXT:    blr
4352;
4353; PC64LE9-LABEL: constrained_vector_log2_v3f64:
4354; PC64LE9:       # %bb.0: # %entry
4355; PC64LE9-NEXT:    mflr 0
4356; PC64LE9-NEXT:    std 0, 16(1)
4357; PC64LE9-NEXT:    stdu 1, -48(1)
4358; PC64LE9-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
4359; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
4360; PC64LE9-NEXT:    lfd 1, .LCPI73_0@toc@l(3)
4361; PC64LE9-NEXT:    bl log2
4362; PC64LE9-NEXT:    nop
4363; PC64LE9-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
4364; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4365; PC64LE9-NEXT:    lfs 1, .LCPI73_1@toc@l(3)
4366; PC64LE9-NEXT:    bl log2
4367; PC64LE9-NEXT:    nop
4368; PC64LE9-NEXT:    addis 3, 2, .LCPI73_2@toc@ha
4369; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4370; PC64LE9-NEXT:    xxmrghd 63, 63, 1
4371; PC64LE9-NEXT:    lfd 1, .LCPI73_2@toc@l(3)
4372; PC64LE9-NEXT:    bl log2
4373; PC64LE9-NEXT:    nop
4374; PC64LE9-NEXT:    fmr 3, 1
4375; PC64LE9-NEXT:    xxswapd 1, 63
4376; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4377; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
4378; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4379; PC64LE9-NEXT:    addi 1, 1, 48
4380; PC64LE9-NEXT:    ld 0, 16(1)
4381; PC64LE9-NEXT:    mtlr 0
4382; PC64LE9-NEXT:    blr
4383entry:
4384  %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
4385                          <3 x double> <double 42.0, double 42.1, double 42.2>,
4386                          metadata !"round.dynamic",
4387                          metadata !"fpexcept.strict") #1
4388  ret <3 x double> %log2
4389}
4390
4391define <4 x double> @constrained_vector_log2_v4f64() #0 {
4392; PC64LE-LABEL: constrained_vector_log2_v4f64:
4393; PC64LE:       # %bb.0: # %entry
4394; PC64LE-NEXT:    mflr 0
4395; PC64LE-NEXT:    std 0, 16(1)
4396; PC64LE-NEXT:    stdu 1, -80(1)
4397; PC64LE-NEXT:    li 3, 48
4398; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
4399; PC64LE-NEXT:    li 3, 64
4400; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4401; PC64LE-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
4402; PC64LE-NEXT:    lfd 1, .LCPI74_0@toc@l(3)
4403; PC64LE-NEXT:    bl log2
4404; PC64LE-NEXT:    nop
4405; PC64LE-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
4406; PC64LE-NEXT:    xxlor 63, 1, 1
4407; PC64LE-NEXT:    lfd 1, .LCPI74_1@toc@l(3)
4408; PC64LE-NEXT:    bl log2
4409; PC64LE-NEXT:    nop
4410; PC64LE-NEXT:    addis 3, 2, .LCPI74_2@toc@ha
4411; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4412; PC64LE-NEXT:    xxmrghd 63, 1, 63
4413; PC64LE-NEXT:    lfd 1, .LCPI74_2@toc@l(3)
4414; PC64LE-NEXT:    bl log2
4415; PC64LE-NEXT:    nop
4416; PC64LE-NEXT:    addis 3, 2, .LCPI74_3@toc@ha
4417; PC64LE-NEXT:    xxlor 62, 1, 1
4418; PC64LE-NEXT:    lfs 1, .LCPI74_3@toc@l(3)
4419; PC64LE-NEXT:    bl log2
4420; PC64LE-NEXT:    nop
4421; PC64LE-NEXT:    li 3, 64
4422; PC64LE-NEXT:    vmr 3, 31
4423; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4424; PC64LE-NEXT:    xxmrghd 34, 62, 1
4425; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4426; PC64LE-NEXT:    li 3, 48
4427; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
4428; PC64LE-NEXT:    addi 1, 1, 80
4429; PC64LE-NEXT:    ld 0, 16(1)
4430; PC64LE-NEXT:    mtlr 0
4431; PC64LE-NEXT:    blr
4432;
4433; PC64LE9-LABEL: constrained_vector_log2_v4f64:
4434; PC64LE9:       # %bb.0: # %entry
4435; PC64LE9-NEXT:    mflr 0
4436; PC64LE9-NEXT:    std 0, 16(1)
4437; PC64LE9-NEXT:    stdu 1, -64(1)
4438; PC64LE9-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
4439; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
4440; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4441; PC64LE9-NEXT:    lfd 1, .LCPI74_0@toc@l(3)
4442; PC64LE9-NEXT:    bl log2
4443; PC64LE9-NEXT:    nop
4444; PC64LE9-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
4445; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4446; PC64LE9-NEXT:    lfd 1, .LCPI74_1@toc@l(3)
4447; PC64LE9-NEXT:    bl log2
4448; PC64LE9-NEXT:    nop
4449; PC64LE9-NEXT:    addis 3, 2, .LCPI74_2@toc@ha
4450; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4451; PC64LE9-NEXT:    xxmrghd 63, 1, 63
4452; PC64LE9-NEXT:    lfd 1, .LCPI74_2@toc@l(3)
4453; PC64LE9-NEXT:    bl log2
4454; PC64LE9-NEXT:    nop
4455; PC64LE9-NEXT:    addis 3, 2, .LCPI74_3@toc@ha
4456; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
4457; PC64LE9-NEXT:    lfs 1, .LCPI74_3@toc@l(3)
4458; PC64LE9-NEXT:    bl log2
4459; PC64LE9-NEXT:    nop
4460; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4461; PC64LE9-NEXT:    xxmrghd 34, 62, 1
4462; PC64LE9-NEXT:    vmr 3, 31
4463; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4464; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
4465; PC64LE9-NEXT:    addi 1, 1, 64
4466; PC64LE9-NEXT:    ld 0, 16(1)
4467; PC64LE9-NEXT:    mtlr 0
4468; PC64LE9-NEXT:    blr
4469entry:
4470  %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64(
4471                              <4 x double> <double 42.0, double 42.1,
4472                                            double 42.2, double 42.3>,
4473                              metadata !"round.dynamic",
4474                              metadata !"fpexcept.strict") #1
4475  ret <4 x double> %log2
4476}
4477
4478define <1 x float> @constrained_vector_rint_v1f32() #0 {
4479; PC64LE-LABEL: constrained_vector_rint_v1f32:
4480; PC64LE:       # %bb.0: # %entry
4481; PC64LE-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
4482; PC64LE-NEXT:    lfs 0, .LCPI75_0@toc@l(3)
4483; PC64LE-NEXT:    xsrdpic 1, 0
4484; PC64LE-NEXT:    blr
4485;
4486; PC64LE9-LABEL: constrained_vector_rint_v1f32:
4487; PC64LE9:       # %bb.0: # %entry
4488; PC64LE9-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
4489; PC64LE9-NEXT:    lfs 0, .LCPI75_0@toc@l(3)
4490; PC64LE9-NEXT:    xsrdpic 1, 0
4491; PC64LE9-NEXT:    blr
4492entry:
4493  %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
4494                             <1 x float> <float 42.0>,
4495                             metadata !"round.dynamic",
4496                             metadata !"fpexcept.strict") #1
4497  ret <1 x float> %rint
4498}
4499
4500define <2 x double> @constrained_vector_rint_v2f64() #0 {
4501; PC64LE-LABEL: constrained_vector_rint_v2f64:
4502; PC64LE:       # %bb.0: # %entry
4503; PC64LE-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
4504; PC64LE-NEXT:    addi 3, 3, .LCPI76_0@toc@l
4505; PC64LE-NEXT:    lxvd2x 0, 0, 3
4506; PC64LE-NEXT:    xxswapd 0, 0
4507; PC64LE-NEXT:    xvrdpic 34, 0
4508; PC64LE-NEXT:    blr
4509;
4510; PC64LE9-LABEL: constrained_vector_rint_v2f64:
4511; PC64LE9:       # %bb.0: # %entry
4512; PC64LE9-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
4513; PC64LE9-NEXT:    addi 3, 3, .LCPI76_0@toc@l
4514; PC64LE9-NEXT:    lxvx 0, 0, 3
4515; PC64LE9-NEXT:    xvrdpic 34, 0
4516; PC64LE9-NEXT:    blr
4517entry:
4518  %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
4519                        <2 x double> <double 42.1, double 42.0>,
4520                        metadata !"round.dynamic",
4521                        metadata !"fpexcept.strict") #1
4522  ret <2 x double> %rint
4523}
4524
4525define <3 x float> @constrained_vector_rint_v3f32() #0 {
4526; PC64LE-LABEL: constrained_vector_rint_v3f32:
4527; PC64LE:       # %bb.0: # %entry
4528; PC64LE-NEXT:    addis 3, 2, .LCPI77_2@toc@ha
4529; PC64LE-NEXT:    addis 4, 2, .LCPI77_1@toc@ha
4530; PC64LE-NEXT:    lfs 0, .LCPI77_2@toc@l(3)
4531; PC64LE-NEXT:    lfs 1, .LCPI77_1@toc@l(4)
4532; PC64LE-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
4533; PC64LE-NEXT:    xsrdpic 0, 0
4534; PC64LE-NEXT:    lfs 2, .LCPI77_0@toc@l(3)
4535; PC64LE-NEXT:    addis 3, 2, .LCPI77_3@toc@ha
4536; PC64LE-NEXT:    xsrdpic 1, 1
4537; PC64LE-NEXT:    addi 3, 3, .LCPI77_3@toc@l
4538; PC64LE-NEXT:    lvx 4, 0, 3
4539; PC64LE-NEXT:    xscvdpspn 34, 0
4540; PC64LE-NEXT:    xscvdpspn 35, 1
4541; PC64LE-NEXT:    xsrdpic 0, 2
4542; PC64LE-NEXT:    vmrghw 2, 3, 2
4543; PC64LE-NEXT:    xscvdpspn 35, 0
4544; PC64LE-NEXT:    vperm 2, 3, 2, 4
4545; PC64LE-NEXT:    blr
4546;
4547; PC64LE9-LABEL: constrained_vector_rint_v3f32:
4548; PC64LE9:       # %bb.0: # %entry
4549; PC64LE9-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
4550; PC64LE9-NEXT:    lfs 0, .LCPI77_0@toc@l(3)
4551; PC64LE9-NEXT:    addis 3, 2, .LCPI77_1@toc@ha
4552; PC64LE9-NEXT:    lfs 1, .LCPI77_1@toc@l(3)
4553; PC64LE9-NEXT:    addis 3, 2, .LCPI77_2@toc@ha
4554; PC64LE9-NEXT:    xsrdpic 0, 0
4555; PC64LE9-NEXT:    lfs 2, .LCPI77_2@toc@l(3)
4556; PC64LE9-NEXT:    addis 3, 2, .LCPI77_3@toc@ha
4557; PC64LE9-NEXT:    addi 3, 3, .LCPI77_3@toc@l
4558; PC64LE9-NEXT:    xsrdpic 1, 1
4559; PC64LE9-NEXT:    xsrdpic 2, 2
4560; PC64LE9-NEXT:    xscvdpspn 36, 0
4561; PC64LE9-NEXT:    xscvdpspn 35, 1
4562; PC64LE9-NEXT:    xscvdpspn 34, 2
4563; PC64LE9-NEXT:    vmrghw 2, 3, 2
4564; PC64LE9-NEXT:    lxvx 35, 0, 3
4565; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4566; PC64LE9-NEXT:    blr
4567 entry:
4568  %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
4569                              <3 x float> <float 42.0, float 43.0, float 44.0>,
4570                              metadata !"round.dynamic",
4571                              metadata !"fpexcept.strict") #1
4572  ret <3 x float> %rint
4573}
4574
4575define <3 x double> @constrained_vector_rint_v3f64() #0 {
4576; PC64LE-LABEL: constrained_vector_rint_v3f64:
4577; PC64LE:       # %bb.0: # %entry
4578; PC64LE-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
4579; PC64LE-NEXT:    addi 3, 3, .LCPI78_1@toc@l
4580; PC64LE-NEXT:    lxvd2x 0, 0, 3
4581; PC64LE-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
4582; PC64LE-NEXT:    lfd 1, .LCPI78_0@toc@l(3)
4583; PC64LE-NEXT:    xxswapd 0, 0
4584; PC64LE-NEXT:    xsrdpic 3, 1
4585; PC64LE-NEXT:    xvrdpic 2, 0
4586; PC64LE-NEXT:    xxswapd 1, 2
4587; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4588; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4589; PC64LE-NEXT:    blr
4590;
4591; PC64LE9-LABEL: constrained_vector_rint_v3f64:
4592; PC64LE9:       # %bb.0: # %entry
4593; PC64LE9-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
4594; PC64LE9-NEXT:    lfd 0, .LCPI78_0@toc@l(3)
4595; PC64LE9-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
4596; PC64LE9-NEXT:    addi 3, 3, .LCPI78_1@toc@l
4597; PC64LE9-NEXT:    xsrdpic 3, 0
4598; PC64LE9-NEXT:    lxvx 0, 0, 3
4599; PC64LE9-NEXT:    xvrdpic 2, 0
4600; PC64LE9-NEXT:    xxswapd 1, 2
4601; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4602; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4603; PC64LE9-NEXT:    blr
4604entry:
4605  %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
4606                          <3 x double> <double 42.0, double 42.1, double 42.2>,
4607                          metadata !"round.dynamic",
4608                          metadata !"fpexcept.strict") #1
4609  ret <3 x double> %rint
4610}
4611
4612define <4 x double> @constrained_vector_rint_v4f64() #0 {
4613; PC64LE-LABEL: constrained_vector_rint_v4f64:
4614; PC64LE:       # %bb.0: # %entry
4615; PC64LE-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
4616; PC64LE-NEXT:    addis 4, 2, .LCPI79_1@toc@ha
4617; PC64LE-NEXT:    addi 3, 3, .LCPI79_0@toc@l
4618; PC64LE-NEXT:    lxvd2x 0, 0, 3
4619; PC64LE-NEXT:    addi 3, 4, .LCPI79_1@toc@l
4620; PC64LE-NEXT:    lxvd2x 1, 0, 3
4621; PC64LE-NEXT:    xxswapd 0, 0
4622; PC64LE-NEXT:    xxswapd 1, 1
4623; PC64LE-NEXT:    xvrdpic 34, 0
4624; PC64LE-NEXT:    xvrdpic 35, 1
4625; PC64LE-NEXT:    blr
4626;
4627; PC64LE9-LABEL: constrained_vector_rint_v4f64:
4628; PC64LE9:       # %bb.0: # %entry
4629; PC64LE9-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
4630; PC64LE9-NEXT:    addi 3, 3, .LCPI79_0@toc@l
4631; PC64LE9-NEXT:    lxvx 0, 0, 3
4632; PC64LE9-NEXT:    addis 3, 2, .LCPI79_1@toc@ha
4633; PC64LE9-NEXT:    addi 3, 3, .LCPI79_1@toc@l
4634; PC64LE9-NEXT:    xvrdpic 34, 0
4635; PC64LE9-NEXT:    lxvx 0, 0, 3
4636; PC64LE9-NEXT:    xvrdpic 35, 0
4637; PC64LE9-NEXT:    blr
4638entry:
4639  %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
4640                        <4 x double> <double 42.1, double 42.2,
4641                                      double 42.3, double 42.4>,
4642                        metadata !"round.dynamic",
4643                        metadata !"fpexcept.strict") #1
4644  ret <4 x double> %rint
4645}
4646
4647define <1 x float> @constrained_vector_nearbyint_v1f32() #0 {
4648; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
4649; PC64LE:       # %bb.0: # %entry
4650; PC64LE-NEXT:    mflr 0
4651; PC64LE-NEXT:    std 0, 16(1)
4652; PC64LE-NEXT:    stdu 1, -32(1)
4653; PC64LE-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
4654; PC64LE-NEXT:    lfs 1, .LCPI80_0@toc@l(3)
4655; PC64LE-NEXT:    bl nearbyintf
4656; PC64LE-NEXT:    nop
4657; PC64LE-NEXT:    addi 1, 1, 32
4658; PC64LE-NEXT:    ld 0, 16(1)
4659; PC64LE-NEXT:    mtlr 0
4660; PC64LE-NEXT:    blr
4661;
4662; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32:
4663; PC64LE9:       # %bb.0: # %entry
4664; PC64LE9-NEXT:    mflr 0
4665; PC64LE9-NEXT:    std 0, 16(1)
4666; PC64LE9-NEXT:    stdu 1, -32(1)
4667; PC64LE9-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
4668; PC64LE9-NEXT:    lfs 1, .LCPI80_0@toc@l(3)
4669; PC64LE9-NEXT:    bl nearbyintf
4670; PC64LE9-NEXT:    nop
4671; PC64LE9-NEXT:    addi 1, 1, 32
4672; PC64LE9-NEXT:    ld 0, 16(1)
4673; PC64LE9-NEXT:    mtlr 0
4674; PC64LE9-NEXT:    blr
4675entry:
4676  %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
4677                               <1 x float> <float 42.0>,
4678                               metadata !"round.dynamic",
4679                               metadata !"fpexcept.strict") #1
4680  ret <1 x float> %nearby
4681}
4682
4683define <2 x double> @constrained_vector_nearbyint_v2f64() #0 {
4684; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
4685; PC64LE:       # %bb.0: # %entry
4686; PC64LE-NEXT:    mflr 0
4687; PC64LE-NEXT:    std 0, 16(1)
4688; PC64LE-NEXT:    stdu 1, -64(1)
4689; PC64LE-NEXT:    li 3, 48
4690; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4691; PC64LE-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
4692; PC64LE-NEXT:    lfd 1, .LCPI81_0@toc@l(3)
4693; PC64LE-NEXT:    bl nearbyint
4694; PC64LE-NEXT:    nop
4695; PC64LE-NEXT:    addis 3, 2, .LCPI81_1@toc@ha
4696; PC64LE-NEXT:    xxlor 63, 1, 1
4697; PC64LE-NEXT:    lfs 1, .LCPI81_1@toc@l(3)
4698; PC64LE-NEXT:    bl nearbyint
4699; PC64LE-NEXT:    nop
4700; PC64LE-NEXT:    li 3, 48
4701; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4702; PC64LE-NEXT:    xxmrghd 34, 1, 63
4703; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4704; PC64LE-NEXT:    addi 1, 1, 64
4705; PC64LE-NEXT:    ld 0, 16(1)
4706; PC64LE-NEXT:    mtlr 0
4707; PC64LE-NEXT:    blr
4708;
4709; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64:
4710; PC64LE9:       # %bb.0: # %entry
4711; PC64LE9-NEXT:    mflr 0
4712; PC64LE9-NEXT:    std 0, 16(1)
4713; PC64LE9-NEXT:    stdu 1, -48(1)
4714; PC64LE9-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
4715; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
4716; PC64LE9-NEXT:    lfd 1, .LCPI81_0@toc@l(3)
4717; PC64LE9-NEXT:    bl nearbyint
4718; PC64LE9-NEXT:    nop
4719; PC64LE9-NEXT:    addis 3, 2, .LCPI81_1@toc@ha
4720; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4721; PC64LE9-NEXT:    lfs 1, .LCPI81_1@toc@l(3)
4722; PC64LE9-NEXT:    bl nearbyint
4723; PC64LE9-NEXT:    nop
4724; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4725; PC64LE9-NEXT:    xxmrghd 34, 1, 63
4726; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
4727; PC64LE9-NEXT:    addi 1, 1, 48
4728; PC64LE9-NEXT:    ld 0, 16(1)
4729; PC64LE9-NEXT:    mtlr 0
4730; PC64LE9-NEXT:    blr
4731entry:
4732  %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
4733                                <2 x double> <double 42.1, double 42.0>,
4734                                metadata !"round.dynamic",
4735                                metadata !"fpexcept.strict") #1
4736  ret <2 x double> %nearby
4737}
4738
4739define <3 x float> @constrained_vector_nearbyint_v3f32() #0 {
4740; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
4741; PC64LE:       # %bb.0: # %entry
4742; PC64LE-NEXT:    mflr 0
4743; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4744; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4745; PC64LE-NEXT:    std 0, 16(1)
4746; PC64LE-NEXT:    stdu 1, -48(1)
4747; PC64LE-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
4748; PC64LE-NEXT:    lfs 1, .LCPI82_0@toc@l(3)
4749; PC64LE-NEXT:    bl nearbyintf
4750; PC64LE-NEXT:    nop
4751; PC64LE-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
4752; PC64LE-NEXT:    fmr 31, 1
4753; PC64LE-NEXT:    lfs 1, .LCPI82_1@toc@l(3)
4754; PC64LE-NEXT:    bl nearbyintf
4755; PC64LE-NEXT:    nop
4756; PC64LE-NEXT:    addis 3, 2, .LCPI82_2@toc@ha
4757; PC64LE-NEXT:    fmr 30, 1
4758; PC64LE-NEXT:    lfs 1, .LCPI82_2@toc@l(3)
4759; PC64LE-NEXT:    bl nearbyintf
4760; PC64LE-NEXT:    nop
4761; PC64LE-NEXT:    xscvdpspn 34, 30
4762; PC64LE-NEXT:    addis 3, 2, .LCPI82_3@toc@ha
4763; PC64LE-NEXT:    xscvdpspn 35, 1
4764; PC64LE-NEXT:    addi 3, 3, .LCPI82_3@toc@l
4765; PC64LE-NEXT:    lvx 4, 0, 3
4766; PC64LE-NEXT:    vmrghw 2, 2, 3
4767; PC64LE-NEXT:    xscvdpspn 35, 31
4768; PC64LE-NEXT:    vperm 2, 3, 2, 4
4769; PC64LE-NEXT:    addi 1, 1, 48
4770; PC64LE-NEXT:    ld 0, 16(1)
4771; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4772; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4773; PC64LE-NEXT:    mtlr 0
4774; PC64LE-NEXT:    blr
4775;
4776; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
4777; PC64LE9:       # %bb.0: # %entry
4778; PC64LE9-NEXT:    mflr 0
4779; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4780; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4781; PC64LE9-NEXT:    std 0, 16(1)
4782; PC64LE9-NEXT:    stdu 1, -48(1)
4783; PC64LE9-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
4784; PC64LE9-NEXT:    lfs 1, .LCPI82_0@toc@l(3)
4785; PC64LE9-NEXT:    bl nearbyintf
4786; PC64LE9-NEXT:    nop
4787; PC64LE9-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
4788; PC64LE9-NEXT:    fmr 31, 1
4789; PC64LE9-NEXT:    lfs 1, .LCPI82_1@toc@l(3)
4790; PC64LE9-NEXT:    bl nearbyintf
4791; PC64LE9-NEXT:    nop
4792; PC64LE9-NEXT:    addis 3, 2, .LCPI82_2@toc@ha
4793; PC64LE9-NEXT:    fmr 30, 1
4794; PC64LE9-NEXT:    lfs 1, .LCPI82_2@toc@l(3)
4795; PC64LE9-NEXT:    bl nearbyintf
4796; PC64LE9-NEXT:    nop
4797; PC64LE9-NEXT:    xscvdpspn 34, 1
4798; PC64LE9-NEXT:    xscvdpspn 35, 30
4799; PC64LE9-NEXT:    addis 3, 2, .LCPI82_3@toc@ha
4800; PC64LE9-NEXT:    xscvdpspn 36, 31
4801; PC64LE9-NEXT:    addi 3, 3, .LCPI82_3@toc@l
4802; PC64LE9-NEXT:    vmrghw 2, 3, 2
4803; PC64LE9-NEXT:    lxvx 35, 0, 3
4804; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4805; PC64LE9-NEXT:    addi 1, 1, 48
4806; PC64LE9-NEXT:    ld 0, 16(1)
4807; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4808; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4809; PC64LE9-NEXT:    mtlr 0
4810; PC64LE9-NEXT:    blr
4811entry:
4812  %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
4813                              <3 x float> <float 42.0, float 43.0, float 44.0>,
4814                              metadata !"round.dynamic",
4815                              metadata !"fpexcept.strict") #1
4816  ret <3 x float> %nearby
4817}
4818
4819define <3 x double> @constrained_vector_nearby_v3f64() #0 {
4820; PC64LE-LABEL: constrained_vector_nearby_v3f64:
4821; PC64LE:       # %bb.0: # %entry
4822; PC64LE-NEXT:    mflr 0
4823; PC64LE-NEXT:    std 0, 16(1)
4824; PC64LE-NEXT:    stdu 1, -64(1)
4825; PC64LE-NEXT:    li 3, 48
4826; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4827; PC64LE-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
4828; PC64LE-NEXT:    lfd 1, .LCPI83_0@toc@l(3)
4829; PC64LE-NEXT:    bl nearbyint
4830; PC64LE-NEXT:    nop
4831; PC64LE-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
4832; PC64LE-NEXT:    xxlor 63, 1, 1
4833; PC64LE-NEXT:    lfs 1, .LCPI83_1@toc@l(3)
4834; PC64LE-NEXT:    bl nearbyint
4835; PC64LE-NEXT:    nop
4836; PC64LE-NEXT:    addis 3, 2, .LCPI83_2@toc@ha
4837; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4838; PC64LE-NEXT:    xxmrghd 63, 63, 1
4839; PC64LE-NEXT:    lfd 1, .LCPI83_2@toc@l(3)
4840; PC64LE-NEXT:    bl nearbyint
4841; PC64LE-NEXT:    nop
4842; PC64LE-NEXT:    xxswapd 0, 63
4843; PC64LE-NEXT:    li 3, 48
4844; PC64LE-NEXT:    xxlor 2, 63, 63
4845; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4846; PC64LE-NEXT:    fmr 3, 1
4847; PC64LE-NEXT:    fmr 1, 0
4848; PC64LE-NEXT:    addi 1, 1, 64
4849; PC64LE-NEXT:    ld 0, 16(1)
4850; PC64LE-NEXT:    mtlr 0
4851; PC64LE-NEXT:    blr
4852;
4853; PC64LE9-LABEL: constrained_vector_nearby_v3f64:
4854; PC64LE9:       # %bb.0: # %entry
4855; PC64LE9-NEXT:    mflr 0
4856; PC64LE9-NEXT:    std 0, 16(1)
4857; PC64LE9-NEXT:    stdu 1, -48(1)
4858; PC64LE9-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
4859; PC64LE9-NEXT:    stxv 63, 32(1) # 16-byte Folded Spill
4860; PC64LE9-NEXT:    lfd 1, .LCPI83_0@toc@l(3)
4861; PC64LE9-NEXT:    bl nearbyint
4862; PC64LE9-NEXT:    nop
4863; PC64LE9-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
4864; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4865; PC64LE9-NEXT:    lfs 1, .LCPI83_1@toc@l(3)
4866; PC64LE9-NEXT:    bl nearbyint
4867; PC64LE9-NEXT:    nop
4868; PC64LE9-NEXT:    addis 3, 2, .LCPI83_2@toc@ha
4869; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4870; PC64LE9-NEXT:    xxmrghd 63, 63, 1
4871; PC64LE9-NEXT:    lfd 1, .LCPI83_2@toc@l(3)
4872; PC64LE9-NEXT:    bl nearbyint
4873; PC64LE9-NEXT:    nop
4874; PC64LE9-NEXT:    fmr 3, 1
4875; PC64LE9-NEXT:    xxswapd 1, 63
4876; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4877; PC64LE9-NEXT:    lxv 63, 32(1) # 16-byte Folded Reload
4878; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4879; PC64LE9-NEXT:    addi 1, 1, 48
4880; PC64LE9-NEXT:    ld 0, 16(1)
4881; PC64LE9-NEXT:    mtlr 0
4882; PC64LE9-NEXT:    blr
4883entry:
4884  %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
4885                          <3 x double> <double 42.0, double 42.1, double 42.2>,
4886                          metadata !"round.dynamic",
4887                          metadata !"fpexcept.strict") #1
4888  ret <3 x double> %nearby
4889}
4890
4891define <4 x double> @constrained_vector_nearbyint_v4f64() #0 {
4892; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
4893; PC64LE:       # %bb.0: # %entry
4894; PC64LE-NEXT:    mflr 0
4895; PC64LE-NEXT:    std 0, 16(1)
4896; PC64LE-NEXT:    stdu 1, -80(1)
4897; PC64LE-NEXT:    li 3, 48
4898; PC64LE-NEXT:    stxvd2x 62, 1, 3 # 16-byte Folded Spill
4899; PC64LE-NEXT:    li 3, 64
4900; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4901; PC64LE-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
4902; PC64LE-NEXT:    lfd 1, .LCPI84_0@toc@l(3)
4903; PC64LE-NEXT:    bl nearbyint
4904; PC64LE-NEXT:    nop
4905; PC64LE-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
4906; PC64LE-NEXT:    xxlor 63, 1, 1
4907; PC64LE-NEXT:    lfd 1, .LCPI84_1@toc@l(3)
4908; PC64LE-NEXT:    bl nearbyint
4909; PC64LE-NEXT:    nop
4910; PC64LE-NEXT:    addis 3, 2, .LCPI84_2@toc@ha
4911; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4912; PC64LE-NEXT:    xxmrghd 63, 1, 63
4913; PC64LE-NEXT:    lfd 1, .LCPI84_2@toc@l(3)
4914; PC64LE-NEXT:    bl nearbyint
4915; PC64LE-NEXT:    nop
4916; PC64LE-NEXT:    addis 3, 2, .LCPI84_3@toc@ha
4917; PC64LE-NEXT:    xxlor 62, 1, 1
4918; PC64LE-NEXT:    lfd 1, .LCPI84_3@toc@l(3)
4919; PC64LE-NEXT:    bl nearbyint
4920; PC64LE-NEXT:    nop
4921; PC64LE-NEXT:    li 3, 64
4922; PC64LE-NEXT:    vmr 2, 31
4923; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4924; PC64LE-NEXT:    xxmrghd 35, 1, 62
4925; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4926; PC64LE-NEXT:    li 3, 48
4927; PC64LE-NEXT:    lxvd2x 62, 1, 3 # 16-byte Folded Reload
4928; PC64LE-NEXT:    addi 1, 1, 80
4929; PC64LE-NEXT:    ld 0, 16(1)
4930; PC64LE-NEXT:    mtlr 0
4931; PC64LE-NEXT:    blr
4932;
4933; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64:
4934; PC64LE9:       # %bb.0: # %entry
4935; PC64LE9-NEXT:    mflr 0
4936; PC64LE9-NEXT:    std 0, 16(1)
4937; PC64LE9-NEXT:    stdu 1, -64(1)
4938; PC64LE9-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
4939; PC64LE9-NEXT:    stxv 62, 32(1) # 16-byte Folded Spill
4940; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4941; PC64LE9-NEXT:    lfd 1, .LCPI84_0@toc@l(3)
4942; PC64LE9-NEXT:    bl nearbyint
4943; PC64LE9-NEXT:    nop
4944; PC64LE9-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
4945; PC64LE9-NEXT:    xscpsgndp 63, 1, 1
4946; PC64LE9-NEXT:    lfd 1, .LCPI84_1@toc@l(3)
4947; PC64LE9-NEXT:    bl nearbyint
4948; PC64LE9-NEXT:    nop
4949; PC64LE9-NEXT:    addis 3, 2, .LCPI84_2@toc@ha
4950; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4951; PC64LE9-NEXT:    xxmrghd 63, 1, 63
4952; PC64LE9-NEXT:    lfd 1, .LCPI84_2@toc@l(3)
4953; PC64LE9-NEXT:    bl nearbyint
4954; PC64LE9-NEXT:    nop
4955; PC64LE9-NEXT:    addis 3, 2, .LCPI84_3@toc@ha
4956; PC64LE9-NEXT:    xscpsgndp 62, 1, 1
4957; PC64LE9-NEXT:    lfd 1, .LCPI84_3@toc@l(3)
4958; PC64LE9-NEXT:    bl nearbyint
4959; PC64LE9-NEXT:    nop
4960; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4961; PC64LE9-NEXT:    xxmrghd 35, 1, 62
4962; PC64LE9-NEXT:    vmr 2, 31
4963; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4964; PC64LE9-NEXT:    lxv 62, 32(1) # 16-byte Folded Reload
4965; PC64LE9-NEXT:    addi 1, 1, 64
4966; PC64LE9-NEXT:    ld 0, 16(1)
4967; PC64LE9-NEXT:    mtlr 0
4968; PC64LE9-NEXT:    blr
4969entry:
4970  %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
4971                                <4 x double> <double 42.1, double 42.2,
4972                                              double 42.3, double 42.4>,
4973                                metadata !"round.dynamic",
4974                                metadata !"fpexcept.strict") #1
4975  ret <4 x double> %nearby
4976}
4977
4978define <1 x float> @constrained_vector_maxnum_v1f32() #0 {
4979; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
4980; PC64LE:       # %bb.0: # %entry
4981; PC64LE-NEXT:    mflr 0
4982; PC64LE-NEXT:    std 0, 16(1)
4983; PC64LE-NEXT:    stdu 1, -32(1)
4984; PC64LE-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
4985; PC64LE-NEXT:    addis 4, 2, .LCPI85_1@toc@ha
4986; PC64LE-NEXT:    lfs 1, .LCPI85_0@toc@l(3)
4987; PC64LE-NEXT:    lfs 2, .LCPI85_1@toc@l(4)
4988; PC64LE-NEXT:    bl fmaxf
4989; PC64LE-NEXT:    nop
4990; PC64LE-NEXT:    addi 1, 1, 32
4991; PC64LE-NEXT:    ld 0, 16(1)
4992; PC64LE-NEXT:    mtlr 0
4993; PC64LE-NEXT:    blr
4994;
4995; PC64LE9-LABEL: constrained_vector_maxnum_v1f32:
4996; PC64LE9:       # %bb.0: # %entry
4997; PC64LE9-NEXT:    mflr 0
4998; PC64LE9-NEXT:    std 0, 16(1)
4999; PC64LE9-NEXT:    stdu 1, -32(1)
5000; PC64LE9-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
5001; PC64LE9-NEXT:    lfs 1, .LCPI85_0@toc@l(3)
5002; PC64LE9-NEXT:    addis 3, 2, .LCPI85_1@toc@ha
5003; PC64LE9-NEXT:    lfs 2, .LCPI85_1@toc@l(3)
5004; PC64LE9-NEXT:    bl fmaxf
5005; PC64LE9-NEXT:    nop
5006; PC64LE9-NEXT:    addi 1, 1, 32
5007; PC64LE9-NEXT:    ld 0, 16(1)
5008; PC64LE9-NEXT:    mtlr 0
5009; PC64LE9-NEXT:    blr
5010entry:
5011  %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
5012                               <1 x float> <float 42.0>, <1 x float> <float 41.0>,
5013                               metadata !"fpexcept.strict") #1
5014  ret <1 x float> %max
5015}
5016
5017define <2 x double> @constrained_vector_maxnum_v2f64() #0 {
5018; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
5019; PC64LE:       # %bb.0: # %entry
5020; PC64LE-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
5021; PC64LE-NEXT:    addis 4, 2, .LCPI86_1@toc@ha
5022; PC64LE-NEXT:    addi 3, 3, .LCPI86_0@toc@l
5023; PC64LE-NEXT:    addi 4, 4, .LCPI86_1@toc@l
5024; PC64LE-NEXT:    lxvd2x 0, 0, 3
5025; PC64LE-NEXT:    lxvd2x 1, 0, 4
5026; PC64LE-NEXT:    xxswapd 0, 0
5027; PC64LE-NEXT:    xxswapd 1, 1
5028; PC64LE-NEXT:    xvmaxdp 34, 1, 0
5029; PC64LE-NEXT:    blr
5030;
5031; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
5032; PC64LE9:       # %bb.0: # %entry
5033; PC64LE9-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
5034; PC64LE9-NEXT:    addi 3, 3, .LCPI86_0@toc@l
5035; PC64LE9-NEXT:    lxvx 0, 0, 3
5036; PC64LE9-NEXT:    addis 3, 2, .LCPI86_1@toc@ha
5037; PC64LE9-NEXT:    addi 3, 3, .LCPI86_1@toc@l
5038; PC64LE9-NEXT:    lxvx 1, 0, 3
5039; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
5040; PC64LE9-NEXT:    blr
5041entry:
5042  %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(
5043                                <2 x double> <double 43.0, double 42.0>,
5044                                <2 x double> <double 41.0, double 40.0>,
5045                                metadata !"fpexcept.strict") #1
5046  ret <2 x double> %max
5047}
5048
5049define <3 x float> @constrained_vector_maxnum_v3f32() #0 {
5050; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
5051; PC64LE:       # %bb.0: # %entry
5052; PC64LE-NEXT:    mflr 0
5053; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5054; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5055; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5056; PC64LE-NEXT:    std 0, 16(1)
5057; PC64LE-NEXT:    stdu 1, -64(1)
5058; PC64LE-NEXT:    addis 4, 2, .LCPI87_1@toc@ha
5059; PC64LE-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
5060; PC64LE-NEXT:    lfs 31, .LCPI87_1@toc@l(4)
5061; PC64LE-NEXT:    lfs 1, .LCPI87_0@toc@l(3)
5062; PC64LE-NEXT:    fmr 2, 31
5063; PC64LE-NEXT:    bl fmaxf
5064; PC64LE-NEXT:    nop
5065; PC64LE-NEXT:    addis 3, 2, .LCPI87_2@toc@ha
5066; PC64LE-NEXT:    addis 4, 2, .LCPI87_3@toc@ha
5067; PC64LE-NEXT:    fmr 30, 1
5068; PC64LE-NEXT:    lfs 1, .LCPI87_2@toc@l(3)
5069; PC64LE-NEXT:    lfs 2, .LCPI87_3@toc@l(4)
5070; PC64LE-NEXT:    bl fmaxf
5071; PC64LE-NEXT:    nop
5072; PC64LE-NEXT:    fmr 29, 1
5073; PC64LE-NEXT:    addis 3, 2, .LCPI87_4@toc@ha
5074; PC64LE-NEXT:    fmr 1, 31
5075; PC64LE-NEXT:    lfs 2, .LCPI87_4@toc@l(3)
5076; PC64LE-NEXT:    bl fmaxf
5077; PC64LE-NEXT:    nop
5078; PC64LE-NEXT:    xscvdpspn 34, 29
5079; PC64LE-NEXT:    addis 3, 2, .LCPI87_5@toc@ha
5080; PC64LE-NEXT:    xscvdpspn 35, 1
5081; PC64LE-NEXT:    addi 3, 3, .LCPI87_5@toc@l
5082; PC64LE-NEXT:    lvx 4, 0, 3
5083; PC64LE-NEXT:    vmrghw 2, 2, 3
5084; PC64LE-NEXT:    xscvdpspn 35, 30
5085; PC64LE-NEXT:    vperm 2, 3, 2, 4
5086; PC64LE-NEXT:    addi 1, 1, 64
5087; PC64LE-NEXT:    ld 0, 16(1)
5088; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5089; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5090; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5091; PC64LE-NEXT:    mtlr 0
5092; PC64LE-NEXT:    blr
5093;
5094; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
5095; PC64LE9:       # %bb.0: # %entry
5096; PC64LE9-NEXT:    mflr 0
5097; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5098; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5099; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5100; PC64LE9-NEXT:    std 0, 16(1)
5101; PC64LE9-NEXT:    stdu 1, -64(1)
5102; PC64LE9-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
5103; PC64LE9-NEXT:    lfs 1, .LCPI87_0@toc@l(3)
5104; PC64LE9-NEXT:    addis 3, 2, .LCPI87_1@toc@ha
5105; PC64LE9-NEXT:    lfs 31, .LCPI87_1@toc@l(3)
5106; PC64LE9-NEXT:    fmr 2, 31
5107; PC64LE9-NEXT:    bl fmaxf
5108; PC64LE9-NEXT:    nop
5109; PC64LE9-NEXT:    addis 3, 2, .LCPI87_2@toc@ha
5110; PC64LE9-NEXT:    fmr 30, 1
5111; PC64LE9-NEXT:    lfs 1, .LCPI87_2@toc@l(3)
5112; PC64LE9-NEXT:    addis 3, 2, .LCPI87_3@toc@ha
5113; PC64LE9-NEXT:    lfs 2, .LCPI87_3@toc@l(3)
5114; PC64LE9-NEXT:    bl fmaxf
5115; PC64LE9-NEXT:    nop
5116; PC64LE9-NEXT:    addis 3, 2, .LCPI87_4@toc@ha
5117; PC64LE9-NEXT:    fmr 29, 1
5118; PC64LE9-NEXT:    fmr 1, 31
5119; PC64LE9-NEXT:    lfs 2, .LCPI87_4@toc@l(3)
5120; PC64LE9-NEXT:    bl fmaxf
5121; PC64LE9-NEXT:    nop
5122; PC64LE9-NEXT:    xscvdpspn 34, 1
5123; PC64LE9-NEXT:    xscvdpspn 35, 29
5124; PC64LE9-NEXT:    addis 3, 2, .LCPI87_5@toc@ha
5125; PC64LE9-NEXT:    addi 3, 3, .LCPI87_5@toc@l
5126; PC64LE9-NEXT:    lxvx 36, 0, 3
5127; PC64LE9-NEXT:    vmrghw 2, 3, 2
5128; PC64LE9-NEXT:    xscvdpspn 35, 30
5129; PC64LE9-NEXT:    vperm 2, 3, 2, 4
5130; PC64LE9-NEXT:    addi 1, 1, 64
5131; PC64LE9-NEXT:    ld 0, 16(1)
5132; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5133; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5134; PC64LE9-NEXT:    mtlr 0
5135; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5136; PC64LE9-NEXT:    blr
5137entry:
5138  %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32(
5139                              <3 x float> <float 43.0, float 44.0, float 45.0>,
5140                              <3 x float> <float 41.0, float 42.0, float 43.0>,
5141                              metadata !"fpexcept.strict") #1
5142  ret <3 x float> %max
5143}
5144
5145define <3 x double> @constrained_vector_max_v3f64() #0 {
5146; PC64LE-LABEL: constrained_vector_max_v3f64:
5147; PC64LE:       # %bb.0: # %entry
5148; PC64LE-NEXT:    mflr 0
5149; PC64LE-NEXT:    std 0, 16(1)
5150; PC64LE-NEXT:    stdu 1, -32(1)
5151; PC64LE-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
5152; PC64LE-NEXT:    addis 4, 2, .LCPI88_1@toc@ha
5153; PC64LE-NEXT:    lfs 1, .LCPI88_0@toc@l(3)
5154; PC64LE-NEXT:    lfs 2, .LCPI88_1@toc@l(4)
5155; PC64LE-NEXT:    bl fmax
5156; PC64LE-NEXT:    nop
5157; PC64LE-NEXT:    addis 3, 2, .LCPI88_2@toc@ha
5158; PC64LE-NEXT:    addis 4, 2, .LCPI88_3@toc@ha
5159; PC64LE-NEXT:    fmr 3, 1
5160; PC64LE-NEXT:    addi 3, 3, .LCPI88_2@toc@l
5161; PC64LE-NEXT:    addi 4, 4, .LCPI88_3@toc@l
5162; PC64LE-NEXT:    lxvd2x 0, 0, 3
5163; PC64LE-NEXT:    lxvd2x 2, 0, 4
5164; PC64LE-NEXT:    xxswapd 0, 0
5165; PC64LE-NEXT:    xxswapd 2, 2
5166; PC64LE-NEXT:    xvmaxdp 2, 2, 0
5167; PC64LE-NEXT:    xxswapd 0, 2
5168; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5169; PC64LE-NEXT:    fmr 1, 0
5170; PC64LE-NEXT:    addi 1, 1, 32
5171; PC64LE-NEXT:    ld 0, 16(1)
5172; PC64LE-NEXT:    mtlr 0
5173; PC64LE-NEXT:    blr
5174;
5175; PC64LE9-LABEL: constrained_vector_max_v3f64:
5176; PC64LE9:       # %bb.0: # %entry
5177; PC64LE9-NEXT:    mflr 0
5178; PC64LE9-NEXT:    std 0, 16(1)
5179; PC64LE9-NEXT:    stdu 1, -32(1)
5180; PC64LE9-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
5181; PC64LE9-NEXT:    lfs 1, .LCPI88_0@toc@l(3)
5182; PC64LE9-NEXT:    addis 3, 2, .LCPI88_1@toc@ha
5183; PC64LE9-NEXT:    lfs 2, .LCPI88_1@toc@l(3)
5184; PC64LE9-NEXT:    bl fmax
5185; PC64LE9-NEXT:    nop
5186; PC64LE9-NEXT:    addis 3, 2, .LCPI88_2@toc@ha
5187; PC64LE9-NEXT:    fmr 3, 1
5188; PC64LE9-NEXT:    addi 3, 3, .LCPI88_2@toc@l
5189; PC64LE9-NEXT:    lxvx 0, 0, 3
5190; PC64LE9-NEXT:    addis 3, 2, .LCPI88_3@toc@ha
5191; PC64LE9-NEXT:    addi 3, 3, .LCPI88_3@toc@l
5192; PC64LE9-NEXT:    lxvx 1, 0, 3
5193; PC64LE9-NEXT:    xvmaxdp 2, 1, 0
5194; PC64LE9-NEXT:    xxswapd 1, 2
5195; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
5196; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5197; PC64LE9-NEXT:    addi 1, 1, 32
5198; PC64LE9-NEXT:    ld 0, 16(1)
5199; PC64LE9-NEXT:    mtlr 0
5200; PC64LE9-NEXT:    blr
5201entry:
5202  %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
5203                          <3 x double> <double 43.0, double 44.0, double 45.0>,
5204                          <3 x double> <double 40.0, double 41.0, double 42.0>,
5205                          metadata !"fpexcept.strict") #1
5206  ret <3 x double> %max
5207}
5208
5209define <4 x double> @constrained_vector_maxnum_v4f64() #0 {
5210; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
5211; PC64LE:       # %bb.0: # %entry
5212; PC64LE-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
5213; PC64LE-NEXT:    addis 4, 2, .LCPI89_1@toc@ha
5214; PC64LE-NEXT:    addis 5, 2, .LCPI89_2@toc@ha
5215; PC64LE-NEXT:    addis 6, 2, .LCPI89_3@toc@ha
5216; PC64LE-NEXT:    addi 3, 3, .LCPI89_0@toc@l
5217; PC64LE-NEXT:    addi 4, 4, .LCPI89_1@toc@l
5218; PC64LE-NEXT:    lxvd2x 0, 0, 3
5219; PC64LE-NEXT:    lxvd2x 1, 0, 4
5220; PC64LE-NEXT:    addi 3, 5, .LCPI89_2@toc@l
5221; PC64LE-NEXT:    addi 4, 6, .LCPI89_3@toc@l
5222; PC64LE-NEXT:    lxvd2x 2, 0, 3
5223; PC64LE-NEXT:    lxvd2x 3, 0, 4
5224; PC64LE-NEXT:    xxswapd 0, 0
5225; PC64LE-NEXT:    xxswapd 1, 1
5226; PC64LE-NEXT:    xxswapd 2, 2
5227; PC64LE-NEXT:    xxswapd 3, 3
5228; PC64LE-NEXT:    xvmaxdp 34, 1, 0
5229; PC64LE-NEXT:    xvmaxdp 35, 3, 2
5230; PC64LE-NEXT:    blr
5231;
5232; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
5233; PC64LE9:       # %bb.0: # %entry
5234; PC64LE9-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
5235; PC64LE9-NEXT:    addi 3, 3, .LCPI89_0@toc@l
5236; PC64LE9-NEXT:    lxvx 0, 0, 3
5237; PC64LE9-NEXT:    addis 3, 2, .LCPI89_1@toc@ha
5238; PC64LE9-NEXT:    addi 3, 3, .LCPI89_1@toc@l
5239; PC64LE9-NEXT:    lxvx 1, 0, 3
5240; PC64LE9-NEXT:    addis 3, 2, .LCPI89_2@toc@ha
5241; PC64LE9-NEXT:    addi 3, 3, .LCPI89_2@toc@l
5242; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
5243; PC64LE9-NEXT:    lxvx 0, 0, 3
5244; PC64LE9-NEXT:    addis 3, 2, .LCPI89_3@toc@ha
5245; PC64LE9-NEXT:    addi 3, 3, .LCPI89_3@toc@l
5246; PC64LE9-NEXT:    lxvx 1, 0, 3
5247; PC64LE9-NEXT:    xvmaxdp 35, 1, 0
5248; PC64LE9-NEXT:    blr
5249entry:
5250  %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64(
5251                                <4 x double> <double 44.0, double 45.0,
5252                                              double 46.0, double 47.0>,
5253                                <4 x double> <double 40.0, double 41.0,
5254                                              double 42.0, double 43.0>,
5255                                metadata !"fpexcept.strict") #1
5256  ret <4 x double> %max
5257}
5258
5259define <1 x float> @constrained_vector_minnum_v1f32() #0 {
5260; PC64LE-LABEL: constrained_vector_minnum_v1f32:
5261; PC64LE:       # %bb.0: # %entry
5262; PC64LE-NEXT:    mflr 0
5263; PC64LE-NEXT:    std 0, 16(1)
5264; PC64LE-NEXT:    stdu 1, -32(1)
5265; PC64LE-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
5266; PC64LE-NEXT:    addis 4, 2, .LCPI90_1@toc@ha
5267; PC64LE-NEXT:    lfs 1, .LCPI90_0@toc@l(3)
5268; PC64LE-NEXT:    lfs 2, .LCPI90_1@toc@l(4)
5269; PC64LE-NEXT:    bl fminf
5270; PC64LE-NEXT:    nop
5271; PC64LE-NEXT:    addi 1, 1, 32
5272; PC64LE-NEXT:    ld 0, 16(1)
5273; PC64LE-NEXT:    mtlr 0
5274; PC64LE-NEXT:    blr
5275;
5276; PC64LE9-LABEL: constrained_vector_minnum_v1f32:
5277; PC64LE9:       # %bb.0: # %entry
5278; PC64LE9-NEXT:    mflr 0
5279; PC64LE9-NEXT:    std 0, 16(1)
5280; PC64LE9-NEXT:    stdu 1, -32(1)
5281; PC64LE9-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
5282; PC64LE9-NEXT:    lfs 1, .LCPI90_0@toc@l(3)
5283; PC64LE9-NEXT:    addis 3, 2, .LCPI90_1@toc@ha
5284; PC64LE9-NEXT:    lfs 2, .LCPI90_1@toc@l(3)
5285; PC64LE9-NEXT:    bl fminf
5286; PC64LE9-NEXT:    nop
5287; PC64LE9-NEXT:    addi 1, 1, 32
5288; PC64LE9-NEXT:    ld 0, 16(1)
5289; PC64LE9-NEXT:    mtlr 0
5290; PC64LE9-NEXT:    blr
5291 entry:
5292  %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
5293                               <1 x float> <float 42.0>, <1 x float> <float 41.0>,
5294                               metadata !"fpexcept.strict") #1
5295  ret <1 x float> %min
5296}
5297
5298define <2 x double> @constrained_vector_minnum_v2f64() #0 {
5299; PC64LE-LABEL: constrained_vector_minnum_v2f64:
5300; PC64LE:       # %bb.0: # %entry
5301; PC64LE-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
5302; PC64LE-NEXT:    addis 4, 2, .LCPI91_1@toc@ha
5303; PC64LE-NEXT:    addi 3, 3, .LCPI91_0@toc@l
5304; PC64LE-NEXT:    addi 4, 4, .LCPI91_1@toc@l
5305; PC64LE-NEXT:    lxvd2x 0, 0, 3
5306; PC64LE-NEXT:    lxvd2x 1, 0, 4
5307; PC64LE-NEXT:    xxswapd 0, 0
5308; PC64LE-NEXT:    xxswapd 1, 1
5309; PC64LE-NEXT:    xvmindp 34, 1, 0
5310; PC64LE-NEXT:    blr
5311;
5312; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
5313; PC64LE9:       # %bb.0: # %entry
5314; PC64LE9-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
5315; PC64LE9-NEXT:    addi 3, 3, .LCPI91_0@toc@l
5316; PC64LE9-NEXT:    lxvx 0, 0, 3
5317; PC64LE9-NEXT:    addis 3, 2, .LCPI91_1@toc@ha
5318; PC64LE9-NEXT:    addi 3, 3, .LCPI91_1@toc@l
5319; PC64LE9-NEXT:    lxvx 1, 0, 3
5320; PC64LE9-NEXT:    xvmindp 34, 1, 0
5321; PC64LE9-NEXT:    blr
5322entry:
5323  %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(
5324                                <2 x double> <double 43.0, double 42.0>,
5325                                <2 x double> <double 41.0, double 40.0>,
5326                                metadata !"fpexcept.strict") #1
5327  ret <2 x double> %min
5328}
5329
5330define <3 x float> @constrained_vector_minnum_v3f32() #0 {
5331; PC64LE-LABEL: constrained_vector_minnum_v3f32:
5332; PC64LE:       # %bb.0: # %entry
5333; PC64LE-NEXT:    mflr 0
5334; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5335; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5336; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5337; PC64LE-NEXT:    std 0, 16(1)
5338; PC64LE-NEXT:    stdu 1, -64(1)
5339; PC64LE-NEXT:    addis 4, 2, .LCPI92_1@toc@ha
5340; PC64LE-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
5341; PC64LE-NEXT:    lfs 31, .LCPI92_1@toc@l(4)
5342; PC64LE-NEXT:    lfs 1, .LCPI92_0@toc@l(3)
5343; PC64LE-NEXT:    fmr 2, 31
5344; PC64LE-NEXT:    bl fminf
5345; PC64LE-NEXT:    nop
5346; PC64LE-NEXT:    addis 3, 2, .LCPI92_2@toc@ha
5347; PC64LE-NEXT:    addis 4, 2, .LCPI92_3@toc@ha
5348; PC64LE-NEXT:    fmr 30, 1
5349; PC64LE-NEXT:    lfs 1, .LCPI92_2@toc@l(3)
5350; PC64LE-NEXT:    lfs 2, .LCPI92_3@toc@l(4)
5351; PC64LE-NEXT:    bl fminf
5352; PC64LE-NEXT:    nop
5353; PC64LE-NEXT:    fmr 29, 1
5354; PC64LE-NEXT:    addis 3, 2, .LCPI92_4@toc@ha
5355; PC64LE-NEXT:    fmr 1, 31
5356; PC64LE-NEXT:    lfs 2, .LCPI92_4@toc@l(3)
5357; PC64LE-NEXT:    bl fminf
5358; PC64LE-NEXT:    nop
5359; PC64LE-NEXT:    xscvdpspn 34, 29
5360; PC64LE-NEXT:    addis 3, 2, .LCPI92_5@toc@ha
5361; PC64LE-NEXT:    xscvdpspn 35, 1
5362; PC64LE-NEXT:    addi 3, 3, .LCPI92_5@toc@l
5363; PC64LE-NEXT:    lvx 4, 0, 3
5364; PC64LE-NEXT:    vmrghw 2, 2, 3
5365; PC64LE-NEXT:    xscvdpspn 35, 30
5366; PC64LE-NEXT:    vperm 2, 3, 2, 4
5367; PC64LE-NEXT:    addi 1, 1, 64
5368; PC64LE-NEXT:    ld 0, 16(1)
5369; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5370; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5371; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5372; PC64LE-NEXT:    mtlr 0
5373; PC64LE-NEXT:    blr
5374;
5375; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
5376; PC64LE9:       # %bb.0: # %entry
5377; PC64LE9-NEXT:    mflr 0
5378; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5379; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5380; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5381; PC64LE9-NEXT:    std 0, 16(1)
5382; PC64LE9-NEXT:    stdu 1, -64(1)
5383; PC64LE9-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
5384; PC64LE9-NEXT:    lfs 1, .LCPI92_0@toc@l(3)
5385; PC64LE9-NEXT:    addis 3, 2, .LCPI92_1@toc@ha
5386; PC64LE9-NEXT:    lfs 31, .LCPI92_1@toc@l(3)
5387; PC64LE9-NEXT:    fmr 2, 31
5388; PC64LE9-NEXT:    bl fminf
5389; PC64LE9-NEXT:    nop
5390; PC64LE9-NEXT:    addis 3, 2, .LCPI92_2@toc@ha
5391; PC64LE9-NEXT:    fmr 30, 1
5392; PC64LE9-NEXT:    lfs 1, .LCPI92_2@toc@l(3)
5393; PC64LE9-NEXT:    addis 3, 2, .LCPI92_3@toc@ha
5394; PC64LE9-NEXT:    lfs 2, .LCPI92_3@toc@l(3)
5395; PC64LE9-NEXT:    bl fminf
5396; PC64LE9-NEXT:    nop
5397; PC64LE9-NEXT:    addis 3, 2, .LCPI92_4@toc@ha
5398; PC64LE9-NEXT:    fmr 29, 1
5399; PC64LE9-NEXT:    fmr 1, 31
5400; PC64LE9-NEXT:    lfs 2, .LCPI92_4@toc@l(3)
5401; PC64LE9-NEXT:    bl fminf
5402; PC64LE9-NEXT:    nop
5403; PC64LE9-NEXT:    xscvdpspn 34, 1
5404; PC64LE9-NEXT:    xscvdpspn 35, 29
5405; PC64LE9-NEXT:    addis 3, 2, .LCPI92_5@toc@ha
5406; PC64LE9-NEXT:    addi 3, 3, .LCPI92_5@toc@l
5407; PC64LE9-NEXT:    lxvx 36, 0, 3
5408; PC64LE9-NEXT:    vmrghw 2, 3, 2
5409; PC64LE9-NEXT:    xscvdpspn 35, 30
5410; PC64LE9-NEXT:    vperm 2, 3, 2, 4
5411; PC64LE9-NEXT:    addi 1, 1, 64
5412; PC64LE9-NEXT:    ld 0, 16(1)
5413; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5414; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5415; PC64LE9-NEXT:    mtlr 0
5416; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5417; PC64LE9-NEXT:    blr
5418entry:
5419  %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32(
5420                              <3 x float> <float 43.0, float 44.0, float 45.0>,
5421                              <3 x float> <float 41.0, float 42.0, float 43.0>,
5422                              metadata !"fpexcept.strict") #1
5423  ret <3 x float> %min
5424}
5425
5426define <3 x double> @constrained_vector_min_v3f64() #0 {
5427; PC64LE-LABEL: constrained_vector_min_v3f64:
5428; PC64LE:       # %bb.0: # %entry
5429; PC64LE-NEXT:    mflr 0
5430; PC64LE-NEXT:    std 0, 16(1)
5431; PC64LE-NEXT:    stdu 1, -32(1)
5432; PC64LE-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
5433; PC64LE-NEXT:    addis 4, 2, .LCPI93_1@toc@ha
5434; PC64LE-NEXT:    lfs 1, .LCPI93_0@toc@l(3)
5435; PC64LE-NEXT:    lfs 2, .LCPI93_1@toc@l(4)
5436; PC64LE-NEXT:    bl fmin
5437; PC64LE-NEXT:    nop
5438; PC64LE-NEXT:    addis 3, 2, .LCPI93_2@toc@ha
5439; PC64LE-NEXT:    addis 4, 2, .LCPI93_3@toc@ha
5440; PC64LE-NEXT:    fmr 3, 1
5441; PC64LE-NEXT:    addi 3, 3, .LCPI93_2@toc@l
5442; PC64LE-NEXT:    addi 4, 4, .LCPI93_3@toc@l
5443; PC64LE-NEXT:    lxvd2x 0, 0, 3
5444; PC64LE-NEXT:    lxvd2x 2, 0, 4
5445; PC64LE-NEXT:    xxswapd 0, 0
5446; PC64LE-NEXT:    xxswapd 2, 2
5447; PC64LE-NEXT:    xvmindp 2, 2, 0
5448; PC64LE-NEXT:    xxswapd 0, 2
5449; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5450; PC64LE-NEXT:    fmr 1, 0
5451; PC64LE-NEXT:    addi 1, 1, 32
5452; PC64LE-NEXT:    ld 0, 16(1)
5453; PC64LE-NEXT:    mtlr 0
5454; PC64LE-NEXT:    blr
5455;
5456; PC64LE9-LABEL: constrained_vector_min_v3f64:
5457; PC64LE9:       # %bb.0: # %entry
5458; PC64LE9-NEXT:    mflr 0
5459; PC64LE9-NEXT:    std 0, 16(1)
5460; PC64LE9-NEXT:    stdu 1, -32(1)
5461; PC64LE9-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
5462; PC64LE9-NEXT:    lfs 1, .LCPI93_0@toc@l(3)
5463; PC64LE9-NEXT:    addis 3, 2, .LCPI93_1@toc@ha
5464; PC64LE9-NEXT:    lfs 2, .LCPI93_1@toc@l(3)
5465; PC64LE9-NEXT:    bl fmin
5466; PC64LE9-NEXT:    nop
5467; PC64LE9-NEXT:    addis 3, 2, .LCPI93_2@toc@ha
5468; PC64LE9-NEXT:    fmr 3, 1
5469; PC64LE9-NEXT:    addi 3, 3, .LCPI93_2@toc@l
5470; PC64LE9-NEXT:    lxvx 0, 0, 3
5471; PC64LE9-NEXT:    addis 3, 2, .LCPI93_3@toc@ha
5472; PC64LE9-NEXT:    addi 3, 3, .LCPI93_3@toc@l
5473; PC64LE9-NEXT:    lxvx 1, 0, 3
5474; PC64LE9-NEXT:    xvmindp 2, 1, 0
5475; PC64LE9-NEXT:    xxswapd 1, 2
5476; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
5477; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5478; PC64LE9-NEXT:    addi 1, 1, 32
5479; PC64LE9-NEXT:    ld 0, 16(1)
5480; PC64LE9-NEXT:    mtlr 0
5481; PC64LE9-NEXT:    blr
5482entry:
5483 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
5484                          <3 x double> <double 43.0, double 44.0, double 45.0>,
5485                          <3 x double> <double 40.0, double 41.0, double 42.0>,
5486                          metadata !"fpexcept.strict") #1
5487  ret <3 x double> %min
5488}
5489
5490define <4 x double> @constrained_vector_minnum_v4f64() #0 {
5491; PC64LE-LABEL: constrained_vector_minnum_v4f64:
5492; PC64LE:       # %bb.0: # %entry
5493; PC64LE-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
5494; PC64LE-NEXT:    addis 4, 2, .LCPI94_1@toc@ha
5495; PC64LE-NEXT:    addis 5, 2, .LCPI94_2@toc@ha
5496; PC64LE-NEXT:    addis 6, 2, .LCPI94_3@toc@ha
5497; PC64LE-NEXT:    addi 3, 3, .LCPI94_0@toc@l
5498; PC64LE-NEXT:    addi 4, 4, .LCPI94_1@toc@l
5499; PC64LE-NEXT:    lxvd2x 0, 0, 3
5500; PC64LE-NEXT:    lxvd2x 1, 0, 4
5501; PC64LE-NEXT:    addi 3, 5, .LCPI94_2@toc@l
5502; PC64LE-NEXT:    addi 4, 6, .LCPI94_3@toc@l
5503; PC64LE-NEXT:    lxvd2x 2, 0, 3
5504; PC64LE-NEXT:    lxvd2x 3, 0, 4
5505; PC64LE-NEXT:    xxswapd 0, 0
5506; PC64LE-NEXT:    xxswapd 1, 1
5507; PC64LE-NEXT:    xxswapd 2, 2
5508; PC64LE-NEXT:    xxswapd 3, 3
5509; PC64LE-NEXT:    xvmindp 34, 1, 0
5510; PC64LE-NEXT:    xvmindp 35, 3, 2
5511; PC64LE-NEXT:    blr
5512;
5513; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
5514; PC64LE9:       # %bb.0: # %entry
5515; PC64LE9-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
5516; PC64LE9-NEXT:    addi 3, 3, .LCPI94_0@toc@l
5517; PC64LE9-NEXT:    lxvx 0, 0, 3
5518; PC64LE9-NEXT:    addis 3, 2, .LCPI94_1@toc@ha
5519; PC64LE9-NEXT:    addi 3, 3, .LCPI94_1@toc@l
5520; PC64LE9-NEXT:    lxvx 1, 0, 3
5521; PC64LE9-NEXT:    addis 3, 2, .LCPI94_2@toc@ha
5522; PC64LE9-NEXT:    addi 3, 3, .LCPI94_2@toc@l
5523; PC64LE9-NEXT:    xvmindp 34, 1, 0
5524; PC64LE9-NEXT:    lxvx 0, 0, 3
5525; PC64LE9-NEXT:    addis 3, 2, .LCPI94_3@toc@ha
5526; PC64LE9-NEXT:    addi 3, 3, .LCPI94_3@toc@l
5527; PC64LE9-NEXT:    lxvx 1, 0, 3
5528; PC64LE9-NEXT:    xvmindp 35, 1, 0
5529; PC64LE9-NEXT:    blr
5530entry:
5531  %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64(
5532                                <4 x double> <double 44.0, double 45.0,
5533                                              double 46.0, double 47.0>,
5534                                <4 x double> <double 40.0, double 41.0,
5535                                              double 42.0, double 43.0>,
5536                                metadata !"fpexcept.strict") #1
5537  ret <4 x double> %min
5538}
5539
5540define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32() #0 {
5541; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5542; PC64LE:       # %bb.0: # %entry
5543; PC64LE-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
5544; PC64LE-NEXT:    lfs 0, .LCPI95_0@toc@l(3)
5545; PC64LE-NEXT:    xscvdpsxws 0, 0
5546; PC64LE-NEXT:    mffprwz 3, 0
5547; PC64LE-NEXT:    blr
5548;
5549; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5550; PC64LE9:       # %bb.0: # %entry
5551; PC64LE9-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
5552; PC64LE9-NEXT:    lfs 0, .LCPI95_0@toc@l(3)
5553; PC64LE9-NEXT:    xscvdpsxws 0, 0
5554; PC64LE9-NEXT:    mffprwz 3, 0
5555; PC64LE9-NEXT:    blr
5556entry:
5557  %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(
5558                               <1 x float><float 42.0>,
5559                               metadata !"fpexcept.strict") #0
5560  ret <1 x i32> %result
5561}
5562
5563define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32() #0 {
5564; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5565; PC64LE:       # %bb.0: # %entry
5566; PC64LE-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
5567; PC64LE-NEXT:    addis 4, 2, .LCPI96_1@toc@ha
5568; PC64LE-NEXT:    lfs 0, .LCPI96_0@toc@l(3)
5569; PC64LE-NEXT:    lfs 1, .LCPI96_1@toc@l(4)
5570; PC64LE-NEXT:    xscvdpsxws 0, 0
5571; PC64LE-NEXT:    xscvdpsxws 1, 1
5572; PC64LE-NEXT:    mffprwz 3, 0
5573; PC64LE-NEXT:    mffprwz 4, 1
5574; PC64LE-NEXT:    mtvsrwz 34, 3
5575; PC64LE-NEXT:    mtvsrwz 35, 4
5576; PC64LE-NEXT:    vmrghw 2, 3, 2
5577; PC64LE-NEXT:    blr
5578;
5579; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5580; PC64LE9:       # %bb.0: # %entry
5581; PC64LE9-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
5582; PC64LE9-NEXT:    lfs 0, .LCPI96_0@toc@l(3)
5583; PC64LE9-NEXT:    xscvdpsxws 0, 0
5584; PC64LE9-NEXT:    mffprwz 3, 0
5585; PC64LE9-NEXT:    mtvsrwz 34, 3
5586; PC64LE9-NEXT:    addis 3, 2, .LCPI96_1@toc@ha
5587; PC64LE9-NEXT:    lfs 0, .LCPI96_1@toc@l(3)
5588; PC64LE9-NEXT:    xscvdpsxws 0, 0
5589; PC64LE9-NEXT:    mffprwz 3, 0
5590; PC64LE9-NEXT:    mtvsrwz 35, 3
5591; PC64LE9-NEXT:    vmrghw 2, 3, 2
5592; PC64LE9-NEXT:    blr
5593entry:
5594  %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(
5595                                <2 x float><float 42.0, float 43.0>,
5596                                metadata !"fpexcept.strict") #0
5597  ret <2 x i32> %result
5598}
5599
5600define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 {
5601; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5602; PC64LE:       # %bb.0: # %entry
5603; PC64LE-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
5604; PC64LE-NEXT:    addis 4, 2, .LCPI97_1@toc@ha
5605; PC64LE-NEXT:    lfs 0, .LCPI97_0@toc@l(3)
5606; PC64LE-NEXT:    lfs 1, .LCPI97_1@toc@l(4)
5607; PC64LE-NEXT:    addis 3, 2, .LCPI97_3@toc@ha
5608; PC64LE-NEXT:    lfs 2, .LCPI97_3@toc@l(3)
5609; PC64LE-NEXT:    xscvdpsxws 0, 0
5610; PC64LE-NEXT:    xscvdpsxws 1, 1
5611; PC64LE-NEXT:    xscvdpsxws 2, 2
5612; PC64LE-NEXT:    mffprwz 3, 0
5613; PC64LE-NEXT:    mffprwz 4, 1
5614; PC64LE-NEXT:    mtvsrwz 34, 3
5615; PC64LE-NEXT:    addis 3, 2, .LCPI97_2@toc@ha
5616; PC64LE-NEXT:    mtvsrwz 35, 4
5617; PC64LE-NEXT:    addi 3, 3, .LCPI97_2@toc@l
5618; PC64LE-NEXT:    mffprwz 4, 2
5619; PC64LE-NEXT:    vmrghw 2, 3, 2
5620; PC64LE-NEXT:    lvx 3, 0, 3
5621; PC64LE-NEXT:    mtvsrwz 36, 4
5622; PC64LE-NEXT:    vperm 2, 4, 2, 3
5623; PC64LE-NEXT:    blr
5624;
5625; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5626; PC64LE9:       # %bb.0: # %entry
5627; PC64LE9-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
5628; PC64LE9-NEXT:    lfs 0, .LCPI97_0@toc@l(3)
5629; PC64LE9-NEXT:    addis 3, 2, .LCPI97_1@toc@ha
5630; PC64LE9-NEXT:    lfs 1, .LCPI97_1@toc@l(3)
5631; PC64LE9-NEXT:    xscvdpsxws 0, 0
5632; PC64LE9-NEXT:    mffprwz 3, 0
5633; PC64LE9-NEXT:    xscvdpsxws 0, 1
5634; PC64LE9-NEXT:    mtvsrwz 34, 3
5635; PC64LE9-NEXT:    mffprwz 3, 0
5636; PC64LE9-NEXT:    mtvsrwz 35, 3
5637; PC64LE9-NEXT:    addis 3, 2, .LCPI97_2@toc@ha
5638; PC64LE9-NEXT:    addi 3, 3, .LCPI97_2@toc@l
5639; PC64LE9-NEXT:    vmrghw 2, 3, 2
5640; PC64LE9-NEXT:    lxvx 35, 0, 3
5641; PC64LE9-NEXT:    addis 3, 2, .LCPI97_3@toc@ha
5642; PC64LE9-NEXT:    lfs 0, .LCPI97_3@toc@l(3)
5643; PC64LE9-NEXT:    xscvdpsxws 0, 0
5644; PC64LE9-NEXT:    mffprwz 3, 0
5645; PC64LE9-NEXT:    mtvsrwz 36, 3
5646; PC64LE9-NEXT:    vperm 2, 4, 2, 3
5647; PC64LE9-NEXT:    blr
5648entry:
5649  %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(
5650                                <3 x float><float 42.0, float 43.0,
5651                                            float 44.0>,
5652                                metadata !"fpexcept.strict") #0
5653  ret <3 x i32> %result
5654}
5655
5656define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32() #0 {
5657; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5658; PC64LE:       # %bb.0: # %entry
5659; PC64LE-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
5660; PC64LE-NEXT:    addi 3, 3, .LCPI98_0@toc@l
5661; PC64LE-NEXT:    lvx 2, 0, 3
5662; PC64LE-NEXT:    xvcvspsxws 34, 34
5663; PC64LE-NEXT:    blr
5664;
5665; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5666; PC64LE9:       # %bb.0: # %entry
5667; PC64LE9-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
5668; PC64LE9-NEXT:    addi 3, 3, .LCPI98_0@toc@l
5669; PC64LE9-NEXT:    lxvx 0, 0, 3
5670; PC64LE9-NEXT:    xvcvspsxws 34, 0
5671; PC64LE9-NEXT:    blr
5672entry:
5673  %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(
5674                                <4 x float><float 42.0, float 43.0,
5675                                            float 44.0, float 45.0>,
5676                                metadata !"fpexcept.strict") #0
5677  ret <4 x i32> %result
5678}
5679
5680define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32() #0 {
5681; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5682; PC64LE:       # %bb.0: # %entry
5683; PC64LE-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
5684; PC64LE-NEXT:    lfs 0, .LCPI99_0@toc@l(3)
5685; PC64LE-NEXT:    xscvdpsxds 0, 0
5686; PC64LE-NEXT:    mffprd 3, 0
5687; PC64LE-NEXT:    blr
5688;
5689; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5690; PC64LE9:       # %bb.0: # %entry
5691; PC64LE9-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
5692; PC64LE9-NEXT:    lfs 0, .LCPI99_0@toc@l(3)
5693; PC64LE9-NEXT:    xscvdpsxds 0, 0
5694; PC64LE9-NEXT:    mffprd 3, 0
5695; PC64LE9-NEXT:    blr
5696entry:
5697  %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(
5698                               <1 x float><float 42.0>,
5699                               metadata !"fpexcept.strict") #0
5700  ret <1 x i64> %result
5701}
5702
5703define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32() #0 {
5704; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5705; PC64LE:       # %bb.0: # %entry
5706; PC64LE-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
5707; PC64LE-NEXT:    addis 4, 2, .LCPI100_1@toc@ha
5708; PC64LE-NEXT:    lfs 0, .LCPI100_0@toc@l(3)
5709; PC64LE-NEXT:    lfs 1, .LCPI100_1@toc@l(4)
5710; PC64LE-NEXT:    xscvdpsxds 0, 0
5711; PC64LE-NEXT:    xscvdpsxds 1, 1
5712; PC64LE-NEXT:    mffprd 3, 0
5713; PC64LE-NEXT:    mffprd 4, 1
5714; PC64LE-NEXT:    mtfprd 0, 3
5715; PC64LE-NEXT:    mtfprd 1, 4
5716; PC64LE-NEXT:    xxmrghd 34, 1, 0
5717; PC64LE-NEXT:    blr
5718;
5719; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5720; PC64LE9:       # %bb.0: # %entry
5721; PC64LE9-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
5722; PC64LE9-NEXT:    addis 4, 2, .LCPI100_1@toc@ha
5723; PC64LE9-NEXT:    lfs 0, .LCPI100_0@toc@l(3)
5724; PC64LE9-NEXT:    xscvdpsxds 0, 0
5725; PC64LE9-NEXT:    mffprd 3, 0
5726; PC64LE9-NEXT:    lfs 0, .LCPI100_1@toc@l(4)
5727; PC64LE9-NEXT:    xscvdpsxds 0, 0
5728; PC64LE9-NEXT:    mffprd 4, 0
5729; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
5730; PC64LE9-NEXT:    blr
5731entry:
5732  %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(
5733                                <2 x float><float 42.0, float 43.0>,
5734                                metadata !"fpexcept.strict") #0
5735  ret <2 x i64> %result
5736}
5737
5738define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 {
5739; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5740; PC64LE:       # %bb.0: # %entry
5741; PC64LE-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
5742; PC64LE-NEXT:    addis 4, 2, .LCPI101_1@toc@ha
5743; PC64LE-NEXT:    addis 5, 2, .LCPI101_2@toc@ha
5744; PC64LE-NEXT:    lfs 0, .LCPI101_0@toc@l(3)
5745; PC64LE-NEXT:    lfs 1, .LCPI101_1@toc@l(4)
5746; PC64LE-NEXT:    lfs 2, .LCPI101_2@toc@l(5)
5747; PC64LE-NEXT:    xscvdpsxds 0, 0
5748; PC64LE-NEXT:    xscvdpsxds 1, 1
5749; PC64LE-NEXT:    xscvdpsxds 2, 2
5750; PC64LE-NEXT:    mffprd 3, 0
5751; PC64LE-NEXT:    mffprd 4, 1
5752; PC64LE-NEXT:    mffprd 5, 2
5753; PC64LE-NEXT:    blr
5754;
5755; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5756; PC64LE9:       # %bb.0: # %entry
5757; PC64LE9-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
5758; PC64LE9-NEXT:    addis 4, 2, .LCPI101_1@toc@ha
5759; PC64LE9-NEXT:    addis 5, 2, .LCPI101_2@toc@ha
5760; PC64LE9-NEXT:    lfs 0, .LCPI101_0@toc@l(3)
5761; PC64LE9-NEXT:    xscvdpsxds 0, 0
5762; PC64LE9-NEXT:    mffprd 3, 0
5763; PC64LE9-NEXT:    lfs 0, .LCPI101_1@toc@l(4)
5764; PC64LE9-NEXT:    xscvdpsxds 0, 0
5765; PC64LE9-NEXT:    mffprd 4, 0
5766; PC64LE9-NEXT:    lfs 0, .LCPI101_2@toc@l(5)
5767; PC64LE9-NEXT:    xscvdpsxds 0, 0
5768; PC64LE9-NEXT:    mffprd 5, 0
5769; PC64LE9-NEXT:    blr
5770entry:
5771  %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(
5772                                <3 x float><float 42.0, float 43.0,
5773                                            float 44.0>,
5774                                metadata !"fpexcept.strict") #0
5775  ret <3 x i64> %result
5776}
5777
5778define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32() #0 {
5779; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5780; PC64LE:       # %bb.0: # %entry
5781; PC64LE-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
5782; PC64LE-NEXT:    addis 4, 2, .LCPI102_1@toc@ha
5783; PC64LE-NEXT:    lfs 0, .LCPI102_0@toc@l(3)
5784; PC64LE-NEXT:    addis 3, 2, .LCPI102_2@toc@ha
5785; PC64LE-NEXT:    lfs 1, .LCPI102_1@toc@l(4)
5786; PC64LE-NEXT:    addis 4, 2, .LCPI102_3@toc@ha
5787; PC64LE-NEXT:    lfs 2, .LCPI102_2@toc@l(3)
5788; PC64LE-NEXT:    lfs 3, .LCPI102_3@toc@l(4)
5789; PC64LE-NEXT:    xscvdpsxds 0, 0
5790; PC64LE-NEXT:    xscvdpsxds 1, 1
5791; PC64LE-NEXT:    xscvdpsxds 2, 2
5792; PC64LE-NEXT:    xscvdpsxds 3, 3
5793; PC64LE-NEXT:    mffprd 3, 0
5794; PC64LE-NEXT:    mffprd 4, 1
5795; PC64LE-NEXT:    mtfprd 0, 3
5796; PC64LE-NEXT:    mffprd 3, 2
5797; PC64LE-NEXT:    mtfprd 1, 4
5798; PC64LE-NEXT:    mffprd 4, 3
5799; PC64LE-NEXT:    mtfprd 2, 3
5800; PC64LE-NEXT:    xxmrghd 34, 1, 0
5801; PC64LE-NEXT:    mtfprd 3, 4
5802; PC64LE-NEXT:    xxmrghd 35, 3, 2
5803; PC64LE-NEXT:    blr
5804;
5805; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32:
5806; PC64LE9:       # %bb.0: # %entry
5807; PC64LE9-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
5808; PC64LE9-NEXT:    addis 4, 2, .LCPI102_1@toc@ha
5809; PC64LE9-NEXT:    lfs 0, .LCPI102_0@toc@l(3)
5810; PC64LE9-NEXT:    xscvdpsxds 0, 0
5811; PC64LE9-NEXT:    mffprd 3, 0
5812; PC64LE9-NEXT:    lfs 0, .LCPI102_1@toc@l(4)
5813; PC64LE9-NEXT:    xscvdpsxds 0, 0
5814; PC64LE9-NEXT:    mffprd 4, 0
5815; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
5816; PC64LE9-NEXT:    addis 3, 2, .LCPI102_2@toc@ha
5817; PC64LE9-NEXT:    addis 4, 2, .LCPI102_3@toc@ha
5818; PC64LE9-NEXT:    lfs 0, .LCPI102_2@toc@l(3)
5819; PC64LE9-NEXT:    xscvdpsxds 0, 0
5820; PC64LE9-NEXT:    mffprd 3, 0
5821; PC64LE9-NEXT:    lfs 0, .LCPI102_3@toc@l(4)
5822; PC64LE9-NEXT:    xscvdpsxds 0, 0
5823; PC64LE9-NEXT:    mffprd 4, 0
5824; PC64LE9-NEXT:    mtvsrdd 35, 4, 3
5825; PC64LE9-NEXT:    blr
5826entry:
5827  %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(
5828                                <4 x float><float 42.0, float 43.0,
5829                                            float 44.0, float 45.0>,
5830                                metadata !"fpexcept.strict") #0
5831  ret <4 x i64> %result
5832}
5833
5834define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64() #0 {
5835; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5836; PC64LE:       # %bb.0: # %entry
5837; PC64LE-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
5838; PC64LE-NEXT:    lfd 0, .LCPI103_0@toc@l(3)
5839; PC64LE-NEXT:    xscvdpsxws 0, 0
5840; PC64LE-NEXT:    mffprwz 3, 0
5841; PC64LE-NEXT:    blr
5842;
5843; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64:
5844; PC64LE9:       # %bb.0: # %entry
5845; PC64LE9-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
5846; PC64LE9-NEXT:    lfd 0, .LCPI103_0@toc@l(3)
5847; PC64LE9-NEXT:    xscvdpsxws 0, 0
5848; PC64LE9-NEXT:    mffprwz 3, 0
5849; PC64LE9-NEXT:    blr
5850entry:
5851  %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(
5852                               <1 x double><double 42.1>,
5853                               metadata !"fpexcept.strict") #0
5854  ret <1 x i32> %result
5855}
5856
5857
5858define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64() #0 {
5859; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5860; PC64LE:       # %bb.0: # %entry
5861; PC64LE-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
5862; PC64LE-NEXT:    addis 4, 2, .LCPI104_1@toc@ha
5863; PC64LE-NEXT:    lfd 0, .LCPI104_0@toc@l(3)
5864; PC64LE-NEXT:    lfd 1, .LCPI104_1@toc@l(4)
5865; PC64LE-NEXT:    xscvdpsxws 0, 0
5866; PC64LE-NEXT:    xscvdpsxws 1, 1
5867; PC64LE-NEXT:    mffprwz 3, 0
5868; PC64LE-NEXT:    mffprwz 4, 1
5869; PC64LE-NEXT:    mtvsrwz 34, 3
5870; PC64LE-NEXT:    mtvsrwz 35, 4
5871; PC64LE-NEXT:    vmrghw 2, 3, 2
5872; PC64LE-NEXT:    blr
5873;
5874; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64:
5875; PC64LE9:       # %bb.0: # %entry
5876; PC64LE9-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
5877; PC64LE9-NEXT:    lfd 0, .LCPI104_0@toc@l(3)
5878; PC64LE9-NEXT:    xscvdpsxws 0, 0
5879; PC64LE9-NEXT:    mffprwz 3, 0
5880; PC64LE9-NEXT:    mtvsrwz 34, 3
5881; PC64LE9-NEXT:    addis 3, 2, .LCPI104_1@toc@ha
5882; PC64LE9-NEXT:    lfd 0, .LCPI104_1@toc@l(3)
5883; PC64LE9-NEXT:    xscvdpsxws 0, 0
5884; PC64LE9-NEXT:    mffprwz 3, 0
5885; PC64LE9-NEXT:    mtvsrwz 35, 3
5886; PC64LE9-NEXT:    vmrghw 2, 3, 2
5887; PC64LE9-NEXT:    blr
5888entry:
5889  %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(
5890                                <2 x double><double 42.1, double 42.2>,
5891                                metadata !"fpexcept.strict") #0
5892  ret <2 x i32> %result
5893}
5894
5895define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 {
5896; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5897; PC64LE:       # %bb.0: # %entry
5898; PC64LE-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
5899; PC64LE-NEXT:    addis 4, 2, .LCPI105_1@toc@ha
5900; PC64LE-NEXT:    lfd 0, .LCPI105_0@toc@l(3)
5901; PC64LE-NEXT:    lfd 1, .LCPI105_1@toc@l(4)
5902; PC64LE-NEXT:    addis 3, 2, .LCPI105_3@toc@ha
5903; PC64LE-NEXT:    lfd 2, .LCPI105_3@toc@l(3)
5904; PC64LE-NEXT:    xscvdpsxws 0, 0
5905; PC64LE-NEXT:    xscvdpsxws 1, 1
5906; PC64LE-NEXT:    xscvdpsxws 2, 2
5907; PC64LE-NEXT:    mffprwz 3, 0
5908; PC64LE-NEXT:    mffprwz 4, 1
5909; PC64LE-NEXT:    mtvsrwz 34, 3
5910; PC64LE-NEXT:    addis 3, 2, .LCPI105_2@toc@ha
5911; PC64LE-NEXT:    mtvsrwz 35, 4
5912; PC64LE-NEXT:    addi 3, 3, .LCPI105_2@toc@l
5913; PC64LE-NEXT:    mffprwz 4, 2
5914; PC64LE-NEXT:    vmrghw 2, 3, 2
5915; PC64LE-NEXT:    lvx 3, 0, 3
5916; PC64LE-NEXT:    mtvsrwz 36, 4
5917; PC64LE-NEXT:    vperm 2, 4, 2, 3
5918; PC64LE-NEXT:    blr
5919;
5920; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64:
5921; PC64LE9:       # %bb.0: # %entry
5922; PC64LE9-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
5923; PC64LE9-NEXT:    lfd 0, .LCPI105_0@toc@l(3)
5924; PC64LE9-NEXT:    xscvdpsxws 0, 0
5925; PC64LE9-NEXT:    mffprwz 3, 0
5926; PC64LE9-NEXT:    mtvsrwz 34, 3
5927; PC64LE9-NEXT:    addis 3, 2, .LCPI105_1@toc@ha
5928; PC64LE9-NEXT:    lfd 0, .LCPI105_1@toc@l(3)
5929; PC64LE9-NEXT:    xscvdpsxws 0, 0
5930; PC64LE9-NEXT:    mffprwz 3, 0
5931; PC64LE9-NEXT:    mtvsrwz 35, 3
5932; PC64LE9-NEXT:    addis 3, 2, .LCPI105_2@toc@ha
5933; PC64LE9-NEXT:    addi 3, 3, .LCPI105_2@toc@l
5934; PC64LE9-NEXT:    vmrghw 2, 3, 2
5935; PC64LE9-NEXT:    lxvx 35, 0, 3
5936; PC64LE9-NEXT:    addis 3, 2, .LCPI105_3@toc@ha
5937; PC64LE9-NEXT:    lfd 0, .LCPI105_3@toc@l(3)
5938; PC64LE9-NEXT:    xscvdpsxws 0, 0
5939; PC64LE9-NEXT:    mffprwz 3, 0
5940; PC64LE9-NEXT:    mtvsrwz 36, 3
5941; PC64LE9-NEXT:    vperm 2, 4, 2, 3
5942; PC64LE9-NEXT:    blr
5943entry:
5944  %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(
5945                                <3 x double><double 42.1, double 42.2,
5946                                             double 42.3>,
5947                                metadata !"fpexcept.strict") #0
5948  ret <3 x i32> %result
5949}
5950
5951define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64() #0 {
5952; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5953; PC64LE:       # %bb.0: # %entry
5954; PC64LE-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
5955; PC64LE-NEXT:    addis 4, 2, .LCPI106_1@toc@ha
5956; PC64LE-NEXT:    addis 5, 2, .LCPI106_2@toc@ha
5957; PC64LE-NEXT:    lfd 0, .LCPI106_0@toc@l(3)
5958; PC64LE-NEXT:    addis 3, 2, .LCPI106_3@toc@ha
5959; PC64LE-NEXT:    lfd 1, .LCPI106_1@toc@l(4)
5960; PC64LE-NEXT:    lfd 2, .LCPI106_2@toc@l(5)
5961; PC64LE-NEXT:    lfd 3, .LCPI106_3@toc@l(3)
5962; PC64LE-NEXT:    xscvdpsxws 0, 0
5963; PC64LE-NEXT:    xscvdpsxws 1, 1
5964; PC64LE-NEXT:    xscvdpsxws 2, 2
5965; PC64LE-NEXT:    xscvdpsxws 3, 3
5966; PC64LE-NEXT:    mffprwz 3, 0
5967; PC64LE-NEXT:    mffprwz 4, 1
5968; PC64LE-NEXT:    mffprwz 5, 2
5969; PC64LE-NEXT:    mffprwz 6, 3
5970; PC64LE-NEXT:    rldimi 4, 3, 32, 0
5971; PC64LE-NEXT:    mtfprd 0, 4
5972; PC64LE-NEXT:    rldimi 6, 5, 32, 0
5973; PC64LE-NEXT:    mtfprd 1, 6
5974; PC64LE-NEXT:    xxmrghd 34, 1, 0
5975; PC64LE-NEXT:    blr
5976;
5977; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64:
5978; PC64LE9:       # %bb.0: # %entry
5979; PC64LE9-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
5980; PC64LE9-NEXT:    addis 4, 2, .LCPI106_1@toc@ha
5981; PC64LE9-NEXT:    addis 5, 2, .LCPI106_3@toc@ha
5982; PC64LE9-NEXT:    lfd 0, .LCPI106_0@toc@l(3)
5983; PC64LE9-NEXT:    xscvdpsxws 0, 0
5984; PC64LE9-NEXT:    mffprwz 3, 0
5985; PC64LE9-NEXT:    lfd 0, .LCPI106_1@toc@l(4)
5986; PC64LE9-NEXT:    xscvdpsxws 0, 0
5987; PC64LE9-NEXT:    mffprwz 4, 0
5988; PC64LE9-NEXT:    rldimi 4, 3, 32, 0
5989; PC64LE9-NEXT:    addis 3, 2, .LCPI106_2@toc@ha
5990; PC64LE9-NEXT:    lfd 0, .LCPI106_2@toc@l(3)
5991; PC64LE9-NEXT:    xscvdpsxws 0, 0
5992; PC64LE9-NEXT:    mffprwz 3, 0
5993; PC64LE9-NEXT:    lfd 0, .LCPI106_3@toc@l(5)
5994; PC64LE9-NEXT:    xscvdpsxws 0, 0
5995; PC64LE9-NEXT:    mffprwz 5, 0
5996; PC64LE9-NEXT:    rldimi 5, 3, 32, 0
5997; PC64LE9-NEXT:    mtvsrdd 34, 5, 4
5998; PC64LE9-NEXT:    blr
5999entry:
6000  %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(
6001                                <4 x double><double 42.1, double 42.2,
6002                                             double 42.3, double 42.4>,
6003                                metadata !"fpexcept.strict") #0
6004  ret <4 x i32> %result
6005}
6006
6007define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64() #0 {
6008; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64:
6009; PC64LE:       # %bb.0: # %entry
6010; PC64LE-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
6011; PC64LE-NEXT:    lfd 0, .LCPI107_0@toc@l(3)
6012; PC64LE-NEXT:    xscvdpsxds 0, 0
6013; PC64LE-NEXT:    mffprd 3, 0
6014; PC64LE-NEXT:    blr
6015;
6016; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64:
6017; PC64LE9:       # %bb.0: # %entry
6018; PC64LE9-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
6019; PC64LE9-NEXT:    lfd 0, .LCPI107_0@toc@l(3)
6020; PC64LE9-NEXT:    xscvdpsxds 0, 0
6021; PC64LE9-NEXT:    mffprd 3, 0
6022; PC64LE9-NEXT:    blr
6023entry:
6024  %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(
6025                               <1 x double><double 42.1>,
6026                               metadata !"fpexcept.strict") #0
6027  ret <1 x i64> %result
6028}
6029
6030define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64() #0 {
6031; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64:
6032; PC64LE:       # %bb.0: # %entry
6033; PC64LE-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
6034; PC64LE-NEXT:    addi 3, 3, .LCPI108_0@toc@l
6035; PC64LE-NEXT:    lxvd2x 0, 0, 3
6036; PC64LE-NEXT:    xxswapd 0, 0
6037; PC64LE-NEXT:    xvcvdpsxds 34, 0
6038; PC64LE-NEXT:    blr
6039;
6040; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64:
6041; PC64LE9:       # %bb.0: # %entry
6042; PC64LE9-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
6043; PC64LE9-NEXT:    addi 3, 3, .LCPI108_0@toc@l
6044; PC64LE9-NEXT:    lxvx 0, 0, 3
6045; PC64LE9-NEXT:    xvcvdpsxds 34, 0
6046; PC64LE9-NEXT:    blr
6047entry:
6048  %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(
6049                                <2 x double><double 42.1, double 42.2>,
6050                                metadata !"fpexcept.strict") #0
6051  ret <2 x i64> %result
6052}
6053
6054define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 {
6055; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64:
6056; PC64LE:       # %bb.0: # %entry
6057; PC64LE-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
6058; PC64LE-NEXT:    addis 4, 2, .LCPI109_1@toc@ha
6059; PC64LE-NEXT:    addis 5, 2, .LCPI109_2@toc@ha
6060; PC64LE-NEXT:    lfd 0, .LCPI109_0@toc@l(3)
6061; PC64LE-NEXT:    lfd 1, .LCPI109_1@toc@l(4)
6062; PC64LE-NEXT:    lfd 2, .LCPI109_2@toc@l(5)
6063; PC64LE-NEXT:    xscvdpsxds 0, 0
6064; PC64LE-NEXT:    xscvdpsxds 1, 1
6065; PC64LE-NEXT:    xscvdpsxds 2, 2
6066; PC64LE-NEXT:    mffprd 3, 0
6067; PC64LE-NEXT:    mffprd 4, 1
6068; PC64LE-NEXT:    mffprd 5, 2
6069; PC64LE-NEXT:    blr
6070;
6071; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64:
6072; PC64LE9:       # %bb.0: # %entry
6073; PC64LE9-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
6074; PC64LE9-NEXT:    addis 4, 2, .LCPI109_1@toc@ha
6075; PC64LE9-NEXT:    addis 5, 2, .LCPI109_2@toc@ha
6076; PC64LE9-NEXT:    lfd 0, .LCPI109_0@toc@l(3)
6077; PC64LE9-NEXT:    xscvdpsxds 0, 0
6078; PC64LE9-NEXT:    mffprd 3, 0
6079; PC64LE9-NEXT:    lfd 0, .LCPI109_1@toc@l(4)
6080; PC64LE9-NEXT:    xscvdpsxds 0, 0
6081; PC64LE9-NEXT:    mffprd 4, 0
6082; PC64LE9-NEXT:    lfd 0, .LCPI109_2@toc@l(5)
6083; PC64LE9-NEXT:    xscvdpsxds 0, 0
6084; PC64LE9-NEXT:    mffprd 5, 0
6085; PC64LE9-NEXT:    blr
6086entry:
6087  %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(
6088                                <3 x double><double 42.1, double 42.2,
6089                                             double 42.3>,
6090                                metadata !"fpexcept.strict") #0
6091  ret <3 x i64> %result
6092}
6093
6094define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64() #0 {
6095; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64:
6096; PC64LE:       # %bb.0: # %entry
6097; PC64LE-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
6098; PC64LE-NEXT:    addis 4, 2, .LCPI110_1@toc@ha
6099; PC64LE-NEXT:    addi 3, 3, .LCPI110_0@toc@l
6100; PC64LE-NEXT:    lxvd2x 0, 0, 3
6101; PC64LE-NEXT:    addi 3, 4, .LCPI110_1@toc@l
6102; PC64LE-NEXT:    lxvd2x 1, 0, 3
6103; PC64LE-NEXT:    xxswapd 0, 0
6104; PC64LE-NEXT:    xxswapd 1, 1
6105; PC64LE-NEXT:    xvcvdpsxds 35, 0
6106; PC64LE-NEXT:    xvcvdpsxds 34, 1
6107; PC64LE-NEXT:    blr
6108;
6109; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64:
6110; PC64LE9:       # %bb.0: # %entry
6111; PC64LE9-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
6112; PC64LE9-NEXT:    addi 3, 3, .LCPI110_0@toc@l
6113; PC64LE9-NEXT:    lxvx 0, 0, 3
6114; PC64LE9-NEXT:    addis 3, 2, .LCPI110_1@toc@ha
6115; PC64LE9-NEXT:    addi 3, 3, .LCPI110_1@toc@l
6116; PC64LE9-NEXT:    xvcvdpsxds 35, 0
6117; PC64LE9-NEXT:    lxvx 0, 0, 3
6118; PC64LE9-NEXT:    xvcvdpsxds 34, 0
6119; PC64LE9-NEXT:    blr
6120entry:
6121  %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(
6122                                <4 x double><double 42.1, double 42.2,
6123                                             double 42.3, double 42.4>,
6124                                metadata !"fpexcept.strict") #0
6125  ret <4 x i64> %result
6126}
6127
6128define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32() #0 {
6129; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32:
6130; PC64LE:       # %bb.0: # %entry
6131; PC64LE-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
6132; PC64LE-NEXT:    lfs 0, .LCPI111_0@toc@l(3)
6133; PC64LE-NEXT:    xscvdpuxws 0, 0
6134; PC64LE-NEXT:    mffprwz 3, 0
6135; PC64LE-NEXT:    blr
6136;
6137; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32:
6138; PC64LE9:       # %bb.0: # %entry
6139; PC64LE9-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
6140; PC64LE9-NEXT:    lfs 0, .LCPI111_0@toc@l(3)
6141; PC64LE9-NEXT:    xscvdpuxws 0, 0
6142; PC64LE9-NEXT:    mffprwz 3, 0
6143; PC64LE9-NEXT:    blr
6144entry:
6145  %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(
6146                               <1 x float><float 42.0>,
6147                               metadata !"fpexcept.strict") #0
6148  ret <1 x i32> %result
6149}
6150
6151define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32() #0 {
6152; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32:
6153; PC64LE:       # %bb.0: # %entry
6154; PC64LE-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
6155; PC64LE-NEXT:    addis 4, 2, .LCPI112_1@toc@ha
6156; PC64LE-NEXT:    lfs 0, .LCPI112_0@toc@l(3)
6157; PC64LE-NEXT:    lfs 1, .LCPI112_1@toc@l(4)
6158; PC64LE-NEXT:    xscvdpuxws 0, 0
6159; PC64LE-NEXT:    xscvdpuxws 1, 1
6160; PC64LE-NEXT:    mffprwz 3, 0
6161; PC64LE-NEXT:    mffprwz 4, 1
6162; PC64LE-NEXT:    mtvsrwz 34, 3
6163; PC64LE-NEXT:    mtvsrwz 35, 4
6164; PC64LE-NEXT:    vmrghw 2, 3, 2
6165; PC64LE-NEXT:    blr
6166;
6167; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32:
6168; PC64LE9:       # %bb.0: # %entry
6169; PC64LE9-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
6170; PC64LE9-NEXT:    lfs 0, .LCPI112_0@toc@l(3)
6171; PC64LE9-NEXT:    xscvdpuxws 0, 0
6172; PC64LE9-NEXT:    mffprwz 3, 0
6173; PC64LE9-NEXT:    mtvsrwz 34, 3
6174; PC64LE9-NEXT:    addis 3, 2, .LCPI112_1@toc@ha
6175; PC64LE9-NEXT:    lfs 0, .LCPI112_1@toc@l(3)
6176; PC64LE9-NEXT:    xscvdpuxws 0, 0
6177; PC64LE9-NEXT:    mffprwz 3, 0
6178; PC64LE9-NEXT:    mtvsrwz 35, 3
6179; PC64LE9-NEXT:    vmrghw 2, 3, 2
6180; PC64LE9-NEXT:    blr
6181entry:
6182  %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(
6183                                <2 x float><float 42.0, float 43.0>,
6184                                metadata !"fpexcept.strict") #0
6185  ret <2 x i32> %result
6186}
6187
6188define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 {
6189; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6190; PC64LE:       # %bb.0: # %entry
6191; PC64LE-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
6192; PC64LE-NEXT:    addis 4, 2, .LCPI113_1@toc@ha
6193; PC64LE-NEXT:    lfs 0, .LCPI113_0@toc@l(3)
6194; PC64LE-NEXT:    lfs 1, .LCPI113_1@toc@l(4)
6195; PC64LE-NEXT:    addis 3, 2, .LCPI113_3@toc@ha
6196; PC64LE-NEXT:    lfs 2, .LCPI113_3@toc@l(3)
6197; PC64LE-NEXT:    xscvdpuxws 0, 0
6198; PC64LE-NEXT:    xscvdpuxws 1, 1
6199; PC64LE-NEXT:    xscvdpuxws 2, 2
6200; PC64LE-NEXT:    mffprwz 3, 0
6201; PC64LE-NEXT:    mffprwz 4, 1
6202; PC64LE-NEXT:    mtvsrwz 34, 3
6203; PC64LE-NEXT:    addis 3, 2, .LCPI113_2@toc@ha
6204; PC64LE-NEXT:    mtvsrwz 35, 4
6205; PC64LE-NEXT:    addi 3, 3, .LCPI113_2@toc@l
6206; PC64LE-NEXT:    mffprwz 4, 2
6207; PC64LE-NEXT:    vmrghw 2, 3, 2
6208; PC64LE-NEXT:    lvx 3, 0, 3
6209; PC64LE-NEXT:    mtvsrwz 36, 4
6210; PC64LE-NEXT:    vperm 2, 4, 2, 3
6211; PC64LE-NEXT:    blr
6212;
6213; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6214; PC64LE9:       # %bb.0: # %entry
6215; PC64LE9-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
6216; PC64LE9-NEXT:    lfs 0, .LCPI113_0@toc@l(3)
6217; PC64LE9-NEXT:    addis 3, 2, .LCPI113_1@toc@ha
6218; PC64LE9-NEXT:    lfs 1, .LCPI113_1@toc@l(3)
6219; PC64LE9-NEXT:    xscvdpuxws 0, 0
6220; PC64LE9-NEXT:    mffprwz 3, 0
6221; PC64LE9-NEXT:    xscvdpuxws 0, 1
6222; PC64LE9-NEXT:    mtvsrwz 34, 3
6223; PC64LE9-NEXT:    mffprwz 3, 0
6224; PC64LE9-NEXT:    mtvsrwz 35, 3
6225; PC64LE9-NEXT:    addis 3, 2, .LCPI113_2@toc@ha
6226; PC64LE9-NEXT:    addi 3, 3, .LCPI113_2@toc@l
6227; PC64LE9-NEXT:    vmrghw 2, 3, 2
6228; PC64LE9-NEXT:    lxvx 35, 0, 3
6229; PC64LE9-NEXT:    addis 3, 2, .LCPI113_3@toc@ha
6230; PC64LE9-NEXT:    lfs 0, .LCPI113_3@toc@l(3)
6231; PC64LE9-NEXT:    xscvdpuxws 0, 0
6232; PC64LE9-NEXT:    mffprwz 3, 0
6233; PC64LE9-NEXT:    mtvsrwz 36, 3
6234; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6235; PC64LE9-NEXT:    blr
6236entry:
6237  %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(
6238                                <3 x float><float 42.0, float 43.0,
6239                                            float 44.0>,
6240                                metadata !"fpexcept.strict") #0
6241  ret <3 x i32> %result
6242}
6243
6244define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32() #0 {
6245; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6246; PC64LE:       # %bb.0: # %entry
6247; PC64LE-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
6248; PC64LE-NEXT:    addi 3, 3, .LCPI114_0@toc@l
6249; PC64LE-NEXT:    lvx 2, 0, 3
6250; PC64LE-NEXT:    xvcvspuxws 34, 34
6251; PC64LE-NEXT:    blr
6252;
6253; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6254; PC64LE9:       # %bb.0: # %entry
6255; PC64LE9-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
6256; PC64LE9-NEXT:    addi 3, 3, .LCPI114_0@toc@l
6257; PC64LE9-NEXT:    lxvx 0, 0, 3
6258; PC64LE9-NEXT:    xvcvspuxws 34, 0
6259; PC64LE9-NEXT:    blr
6260entry:
6261  %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(
6262                                <4 x float><float 42.0, float 43.0,
6263                                            float 44.0, float 45.0>,
6264                                metadata !"fpexcept.strict") #0
6265  ret <4 x i32> %result
6266}
6267
6268define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32() #0 {
6269; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6270; PC64LE:       # %bb.0: # %entry
6271; PC64LE-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
6272; PC64LE-NEXT:    lfs 0, .LCPI115_0@toc@l(3)
6273; PC64LE-NEXT:    xscvdpuxds 0, 0
6274; PC64LE-NEXT:    mffprd 3, 0
6275; PC64LE-NEXT:    blr
6276;
6277; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6278; PC64LE9:       # %bb.0: # %entry
6279; PC64LE9-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
6280; PC64LE9-NEXT:    lfs 0, .LCPI115_0@toc@l(3)
6281; PC64LE9-NEXT:    xscvdpuxds 0, 0
6282; PC64LE9-NEXT:    mffprd 3, 0
6283; PC64LE9-NEXT:    blr
6284entry:
6285  %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(
6286                               <1 x float><float 42.0>,
6287                               metadata !"fpexcept.strict") #0
6288  ret <1 x i64> %result
6289}
6290
6291define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32() #0 {
6292; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6293; PC64LE:       # %bb.0: # %entry
6294; PC64LE-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
6295; PC64LE-NEXT:    addis 4, 2, .LCPI116_1@toc@ha
6296; PC64LE-NEXT:    lfs 0, .LCPI116_0@toc@l(3)
6297; PC64LE-NEXT:    lfs 1, .LCPI116_1@toc@l(4)
6298; PC64LE-NEXT:    xscvdpuxds 0, 0
6299; PC64LE-NEXT:    xscvdpuxds 1, 1
6300; PC64LE-NEXT:    mffprd 3, 0
6301; PC64LE-NEXT:    mffprd 4, 1
6302; PC64LE-NEXT:    mtfprd 0, 3
6303; PC64LE-NEXT:    mtfprd 1, 4
6304; PC64LE-NEXT:    xxmrghd 34, 1, 0
6305; PC64LE-NEXT:    blr
6306;
6307; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6308; PC64LE9:       # %bb.0: # %entry
6309; PC64LE9-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
6310; PC64LE9-NEXT:    addis 4, 2, .LCPI116_1@toc@ha
6311; PC64LE9-NEXT:    lfs 0, .LCPI116_0@toc@l(3)
6312; PC64LE9-NEXT:    xscvdpuxds 0, 0
6313; PC64LE9-NEXT:    mffprd 3, 0
6314; PC64LE9-NEXT:    lfs 0, .LCPI116_1@toc@l(4)
6315; PC64LE9-NEXT:    xscvdpuxds 0, 0
6316; PC64LE9-NEXT:    mffprd 4, 0
6317; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
6318; PC64LE9-NEXT:    blr
6319entry:
6320  %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(
6321                                <2 x float><float 42.0, float 43.0>,
6322                                metadata !"fpexcept.strict") #0
6323  ret <2 x i64> %result
6324}
6325
6326define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 {
6327; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6328; PC64LE:       # %bb.0: # %entry
6329; PC64LE-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
6330; PC64LE-NEXT:    addis 4, 2, .LCPI117_1@toc@ha
6331; PC64LE-NEXT:    addis 5, 2, .LCPI117_2@toc@ha
6332; PC64LE-NEXT:    lfs 0, .LCPI117_0@toc@l(3)
6333; PC64LE-NEXT:    lfs 1, .LCPI117_1@toc@l(4)
6334; PC64LE-NEXT:    lfs 2, .LCPI117_2@toc@l(5)
6335; PC64LE-NEXT:    xscvdpuxds 0, 0
6336; PC64LE-NEXT:    xscvdpuxds 1, 1
6337; PC64LE-NEXT:    xscvdpuxds 2, 2
6338; PC64LE-NEXT:    mffprd 3, 0
6339; PC64LE-NEXT:    mffprd 4, 1
6340; PC64LE-NEXT:    mffprd 5, 2
6341; PC64LE-NEXT:    blr
6342;
6343; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6344; PC64LE9:       # %bb.0: # %entry
6345; PC64LE9-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
6346; PC64LE9-NEXT:    addis 4, 2, .LCPI117_1@toc@ha
6347; PC64LE9-NEXT:    addis 5, 2, .LCPI117_2@toc@ha
6348; PC64LE9-NEXT:    lfs 0, .LCPI117_0@toc@l(3)
6349; PC64LE9-NEXT:    xscvdpuxds 0, 0
6350; PC64LE9-NEXT:    mffprd 3, 0
6351; PC64LE9-NEXT:    lfs 0, .LCPI117_1@toc@l(4)
6352; PC64LE9-NEXT:    xscvdpuxds 0, 0
6353; PC64LE9-NEXT:    mffprd 4, 0
6354; PC64LE9-NEXT:    lfs 0, .LCPI117_2@toc@l(5)
6355; PC64LE9-NEXT:    xscvdpuxds 0, 0
6356; PC64LE9-NEXT:    mffprd 5, 0
6357; PC64LE9-NEXT:    blr
6358entry:
6359  %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(
6360                                <3 x float><float 42.0, float 43.0,
6361                                            float 44.0>,
6362                                metadata !"fpexcept.strict") #0
6363  ret <3 x i64> %result
6364}
6365
6366define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32() #0 {
6367; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6368; PC64LE:       # %bb.0: # %entry
6369; PC64LE-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
6370; PC64LE-NEXT:    addis 4, 2, .LCPI118_1@toc@ha
6371; PC64LE-NEXT:    lfs 0, .LCPI118_0@toc@l(3)
6372; PC64LE-NEXT:    addis 3, 2, .LCPI118_2@toc@ha
6373; PC64LE-NEXT:    lfs 1, .LCPI118_1@toc@l(4)
6374; PC64LE-NEXT:    addis 4, 2, .LCPI118_3@toc@ha
6375; PC64LE-NEXT:    lfs 2, .LCPI118_2@toc@l(3)
6376; PC64LE-NEXT:    lfs 3, .LCPI118_3@toc@l(4)
6377; PC64LE-NEXT:    xscvdpuxds 0, 0
6378; PC64LE-NEXT:    xscvdpuxds 1, 1
6379; PC64LE-NEXT:    xscvdpuxds 2, 2
6380; PC64LE-NEXT:    xscvdpuxds 3, 3
6381; PC64LE-NEXT:    mffprd 3, 0
6382; PC64LE-NEXT:    mffprd 4, 1
6383; PC64LE-NEXT:    mtfprd 0, 3
6384; PC64LE-NEXT:    mffprd 3, 2
6385; PC64LE-NEXT:    mtfprd 1, 4
6386; PC64LE-NEXT:    mffprd 4, 3
6387; PC64LE-NEXT:    mtfprd 2, 3
6388; PC64LE-NEXT:    xxmrghd 34, 1, 0
6389; PC64LE-NEXT:    mtfprd 3, 4
6390; PC64LE-NEXT:    xxmrghd 35, 3, 2
6391; PC64LE-NEXT:    blr
6392;
6393; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6394; PC64LE9:       # %bb.0: # %entry
6395; PC64LE9-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
6396; PC64LE9-NEXT:    addis 4, 2, .LCPI118_1@toc@ha
6397; PC64LE9-NEXT:    lfs 0, .LCPI118_0@toc@l(3)
6398; PC64LE9-NEXT:    xscvdpuxds 0, 0
6399; PC64LE9-NEXT:    mffprd 3, 0
6400; PC64LE9-NEXT:    lfs 0, .LCPI118_1@toc@l(4)
6401; PC64LE9-NEXT:    xscvdpuxds 0, 0
6402; PC64LE9-NEXT:    mffprd 4, 0
6403; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
6404; PC64LE9-NEXT:    addis 3, 2, .LCPI118_2@toc@ha
6405; PC64LE9-NEXT:    addis 4, 2, .LCPI118_3@toc@ha
6406; PC64LE9-NEXT:    lfs 0, .LCPI118_2@toc@l(3)
6407; PC64LE9-NEXT:    xscvdpuxds 0, 0
6408; PC64LE9-NEXT:    mffprd 3, 0
6409; PC64LE9-NEXT:    lfs 0, .LCPI118_3@toc@l(4)
6410; PC64LE9-NEXT:    xscvdpuxds 0, 0
6411; PC64LE9-NEXT:    mffprd 4, 0
6412; PC64LE9-NEXT:    mtvsrdd 35, 4, 3
6413; PC64LE9-NEXT:    blr
6414entry:
6415  %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(
6416                                <4 x float><float 42.0, float 43.0,
6417                                            float 44.0, float 45.0>,
6418                                metadata !"fpexcept.strict") #0
6419  ret <4 x i64> %result
6420}
6421
6422define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64() #0 {
6423; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6424; PC64LE:       # %bb.0: # %entry
6425; PC64LE-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
6426; PC64LE-NEXT:    lfd 0, .LCPI119_0@toc@l(3)
6427; PC64LE-NEXT:    xscvdpuxws 0, 0
6428; PC64LE-NEXT:    mffprwz 3, 0
6429; PC64LE-NEXT:    blr
6430;
6431; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6432; PC64LE9:       # %bb.0: # %entry
6433; PC64LE9-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
6434; PC64LE9-NEXT:    lfd 0, .LCPI119_0@toc@l(3)
6435; PC64LE9-NEXT:    xscvdpuxws 0, 0
6436; PC64LE9-NEXT:    mffprwz 3, 0
6437; PC64LE9-NEXT:    blr
6438entry:
6439  %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(
6440                               <1 x double><double 42.1>,
6441                               metadata !"fpexcept.strict") #0
6442  ret <1 x i32> %result
6443}
6444
6445define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64() #0 {
6446; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6447; PC64LE:       # %bb.0: # %entry
6448; PC64LE-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
6449; PC64LE-NEXT:    addis 4, 2, .LCPI120_1@toc@ha
6450; PC64LE-NEXT:    lfd 0, .LCPI120_0@toc@l(3)
6451; PC64LE-NEXT:    lfd 1, .LCPI120_1@toc@l(4)
6452; PC64LE-NEXT:    xscvdpuxws 0, 0
6453; PC64LE-NEXT:    xscvdpuxws 1, 1
6454; PC64LE-NEXT:    mffprwz 3, 0
6455; PC64LE-NEXT:    mffprwz 4, 1
6456; PC64LE-NEXT:    mtvsrwz 34, 3
6457; PC64LE-NEXT:    mtvsrwz 35, 4
6458; PC64LE-NEXT:    vmrghw 2, 3, 2
6459; PC64LE-NEXT:    blr
6460;
6461; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6462; PC64LE9:       # %bb.0: # %entry
6463; PC64LE9-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
6464; PC64LE9-NEXT:    lfd 0, .LCPI120_0@toc@l(3)
6465; PC64LE9-NEXT:    xscvdpuxws 0, 0
6466; PC64LE9-NEXT:    mffprwz 3, 0
6467; PC64LE9-NEXT:    mtvsrwz 34, 3
6468; PC64LE9-NEXT:    addis 3, 2, .LCPI120_1@toc@ha
6469; PC64LE9-NEXT:    lfd 0, .LCPI120_1@toc@l(3)
6470; PC64LE9-NEXT:    xscvdpuxws 0, 0
6471; PC64LE9-NEXT:    mffprwz 3, 0
6472; PC64LE9-NEXT:    mtvsrwz 35, 3
6473; PC64LE9-NEXT:    vmrghw 2, 3, 2
6474; PC64LE9-NEXT:    blr
6475entry:
6476  %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(
6477                                <2 x double><double 42.1, double 42.2>,
6478                                metadata !"fpexcept.strict") #0
6479  ret <2 x i32> %result
6480}
6481
6482define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 {
6483; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6484; PC64LE:       # %bb.0: # %entry
6485; PC64LE-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
6486; PC64LE-NEXT:    addis 4, 2, .LCPI121_1@toc@ha
6487; PC64LE-NEXT:    lfd 0, .LCPI121_0@toc@l(3)
6488; PC64LE-NEXT:    lfd 1, .LCPI121_1@toc@l(4)
6489; PC64LE-NEXT:    addis 3, 2, .LCPI121_3@toc@ha
6490; PC64LE-NEXT:    lfd 2, .LCPI121_3@toc@l(3)
6491; PC64LE-NEXT:    xscvdpuxws 0, 0
6492; PC64LE-NEXT:    xscvdpuxws 1, 1
6493; PC64LE-NEXT:    xscvdpuxws 2, 2
6494; PC64LE-NEXT:    mffprwz 3, 0
6495; PC64LE-NEXT:    mffprwz 4, 1
6496; PC64LE-NEXT:    mtvsrwz 34, 3
6497; PC64LE-NEXT:    addis 3, 2, .LCPI121_2@toc@ha
6498; PC64LE-NEXT:    mtvsrwz 35, 4
6499; PC64LE-NEXT:    addi 3, 3, .LCPI121_2@toc@l
6500; PC64LE-NEXT:    mffprwz 4, 2
6501; PC64LE-NEXT:    vmrghw 2, 3, 2
6502; PC64LE-NEXT:    lvx 3, 0, 3
6503; PC64LE-NEXT:    mtvsrwz 36, 4
6504; PC64LE-NEXT:    vperm 2, 4, 2, 3
6505; PC64LE-NEXT:    blr
6506;
6507; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6508; PC64LE9:       # %bb.0: # %entry
6509; PC64LE9-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
6510; PC64LE9-NEXT:    lfd 0, .LCPI121_0@toc@l(3)
6511; PC64LE9-NEXT:    xscvdpuxws 0, 0
6512; PC64LE9-NEXT:    mffprwz 3, 0
6513; PC64LE9-NEXT:    mtvsrwz 34, 3
6514; PC64LE9-NEXT:    addis 3, 2, .LCPI121_1@toc@ha
6515; PC64LE9-NEXT:    lfd 0, .LCPI121_1@toc@l(3)
6516; PC64LE9-NEXT:    xscvdpuxws 0, 0
6517; PC64LE9-NEXT:    mffprwz 3, 0
6518; PC64LE9-NEXT:    mtvsrwz 35, 3
6519; PC64LE9-NEXT:    addis 3, 2, .LCPI121_2@toc@ha
6520; PC64LE9-NEXT:    addi 3, 3, .LCPI121_2@toc@l
6521; PC64LE9-NEXT:    vmrghw 2, 3, 2
6522; PC64LE9-NEXT:    lxvx 35, 0, 3
6523; PC64LE9-NEXT:    addis 3, 2, .LCPI121_3@toc@ha
6524; PC64LE9-NEXT:    lfd 0, .LCPI121_3@toc@l(3)
6525; PC64LE9-NEXT:    xscvdpuxws 0, 0
6526; PC64LE9-NEXT:    mffprwz 3, 0
6527; PC64LE9-NEXT:    mtvsrwz 36, 3
6528; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6529; PC64LE9-NEXT:    blr
6530entry:
6531  %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(
6532                                <3 x double><double 42.1, double 42.2,
6533                                             double 42.3>,
6534                                metadata !"fpexcept.strict") #0
6535  ret <3 x i32> %result
6536}
6537
6538define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64() #0 {
6539; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6540; PC64LE:       # %bb.0: # %entry
6541; PC64LE-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
6542; PC64LE-NEXT:    addis 4, 2, .LCPI122_1@toc@ha
6543; PC64LE-NEXT:    addis 5, 2, .LCPI122_2@toc@ha
6544; PC64LE-NEXT:    lfd 0, .LCPI122_0@toc@l(3)
6545; PC64LE-NEXT:    addis 3, 2, .LCPI122_3@toc@ha
6546; PC64LE-NEXT:    lfd 1, .LCPI122_1@toc@l(4)
6547; PC64LE-NEXT:    lfd 2, .LCPI122_2@toc@l(5)
6548; PC64LE-NEXT:    lfd 3, .LCPI122_3@toc@l(3)
6549; PC64LE-NEXT:    xscvdpuxws 0, 0
6550; PC64LE-NEXT:    xscvdpuxws 1, 1
6551; PC64LE-NEXT:    xscvdpuxws 2, 2
6552; PC64LE-NEXT:    xscvdpuxws 3, 3
6553; PC64LE-NEXT:    mffprwz 3, 0
6554; PC64LE-NEXT:    mffprwz 4, 1
6555; PC64LE-NEXT:    mffprwz 5, 2
6556; PC64LE-NEXT:    mffprwz 6, 3
6557; PC64LE-NEXT:    rldimi 4, 3, 32, 0
6558; PC64LE-NEXT:    mtfprd 0, 4
6559; PC64LE-NEXT:    rldimi 6, 5, 32, 0
6560; PC64LE-NEXT:    mtfprd 1, 6
6561; PC64LE-NEXT:    xxmrghd 34, 1, 0
6562; PC64LE-NEXT:    blr
6563;
6564; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6565; PC64LE9:       # %bb.0: # %entry
6566; PC64LE9-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
6567; PC64LE9-NEXT:    addis 4, 2, .LCPI122_1@toc@ha
6568; PC64LE9-NEXT:    addis 5, 2, .LCPI122_3@toc@ha
6569; PC64LE9-NEXT:    lfd 0, .LCPI122_0@toc@l(3)
6570; PC64LE9-NEXT:    xscvdpuxws 0, 0
6571; PC64LE9-NEXT:    mffprwz 3, 0
6572; PC64LE9-NEXT:    lfd 0, .LCPI122_1@toc@l(4)
6573; PC64LE9-NEXT:    xscvdpuxws 0, 0
6574; PC64LE9-NEXT:    mffprwz 4, 0
6575; PC64LE9-NEXT:    rldimi 4, 3, 32, 0
6576; PC64LE9-NEXT:    addis 3, 2, .LCPI122_2@toc@ha
6577; PC64LE9-NEXT:    lfd 0, .LCPI122_2@toc@l(3)
6578; PC64LE9-NEXT:    xscvdpuxws 0, 0
6579; PC64LE9-NEXT:    mffprwz 3, 0
6580; PC64LE9-NEXT:    lfd 0, .LCPI122_3@toc@l(5)
6581; PC64LE9-NEXT:    xscvdpuxws 0, 0
6582; PC64LE9-NEXT:    mffprwz 5, 0
6583; PC64LE9-NEXT:    rldimi 5, 3, 32, 0
6584; PC64LE9-NEXT:    mtvsrdd 34, 5, 4
6585; PC64LE9-NEXT:    blr
6586entry:
6587  %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(
6588                                <4 x double><double 42.1, double 42.2,
6589                                             double 42.3, double 42.4>,
6590                                metadata !"fpexcept.strict") #0
6591  ret <4 x i32> %result
6592}
6593
6594define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64() #0 {
6595; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6596; PC64LE:       # %bb.0: # %entry
6597; PC64LE-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
6598; PC64LE-NEXT:    lfd 0, .LCPI123_0@toc@l(3)
6599; PC64LE-NEXT:    xscvdpuxds 0, 0
6600; PC64LE-NEXT:    mffprd 3, 0
6601; PC64LE-NEXT:    blr
6602;
6603; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6604; PC64LE9:       # %bb.0: # %entry
6605; PC64LE9-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
6606; PC64LE9-NEXT:    lfd 0, .LCPI123_0@toc@l(3)
6607; PC64LE9-NEXT:    xscvdpuxds 0, 0
6608; PC64LE9-NEXT:    mffprd 3, 0
6609; PC64LE9-NEXT:    blr
6610entry:
6611  %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(
6612                               <1 x double><double 42.1>,
6613                               metadata !"fpexcept.strict") #0
6614  ret <1 x i64> %result
6615}
6616
6617define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64() #0 {
6618; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6619; PC64LE:       # %bb.0: # %entry
6620; PC64LE-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
6621; PC64LE-NEXT:    addi 3, 3, .LCPI124_0@toc@l
6622; PC64LE-NEXT:    lxvd2x 0, 0, 3
6623; PC64LE-NEXT:    xxswapd 0, 0
6624; PC64LE-NEXT:    xvcvdpuxds 34, 0
6625; PC64LE-NEXT:    blr
6626;
6627; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6628; PC64LE9:       # %bb.0: # %entry
6629; PC64LE9-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
6630; PC64LE9-NEXT:    addi 3, 3, .LCPI124_0@toc@l
6631; PC64LE9-NEXT:    lxvx 0, 0, 3
6632; PC64LE9-NEXT:    xvcvdpuxds 34, 0
6633; PC64LE9-NEXT:    blr
6634entry:
6635  %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(
6636                                <2 x double><double 42.1, double 42.2>,
6637                                metadata !"fpexcept.strict") #0
6638  ret <2 x i64> %result
6639}
6640
6641define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 {
6642; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6643; PC64LE:       # %bb.0: # %entry
6644; PC64LE-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
6645; PC64LE-NEXT:    addis 4, 2, .LCPI125_1@toc@ha
6646; PC64LE-NEXT:    addis 5, 2, .LCPI125_2@toc@ha
6647; PC64LE-NEXT:    lfd 0, .LCPI125_0@toc@l(3)
6648; PC64LE-NEXT:    lfd 1, .LCPI125_1@toc@l(4)
6649; PC64LE-NEXT:    lfd 2, .LCPI125_2@toc@l(5)
6650; PC64LE-NEXT:    xscvdpuxds 0, 0
6651; PC64LE-NEXT:    xscvdpuxds 1, 1
6652; PC64LE-NEXT:    xscvdpuxds 2, 2
6653; PC64LE-NEXT:    mffprd 3, 0
6654; PC64LE-NEXT:    mffprd 4, 1
6655; PC64LE-NEXT:    mffprd 5, 2
6656; PC64LE-NEXT:    blr
6657;
6658; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6659; PC64LE9:       # %bb.0: # %entry
6660; PC64LE9-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
6661; PC64LE9-NEXT:    addis 4, 2, .LCPI125_1@toc@ha
6662; PC64LE9-NEXT:    addis 5, 2, .LCPI125_2@toc@ha
6663; PC64LE9-NEXT:    lfd 0, .LCPI125_0@toc@l(3)
6664; PC64LE9-NEXT:    xscvdpuxds 0, 0
6665; PC64LE9-NEXT:    mffprd 3, 0
6666; PC64LE9-NEXT:    lfd 0, .LCPI125_1@toc@l(4)
6667; PC64LE9-NEXT:    xscvdpuxds 0, 0
6668; PC64LE9-NEXT:    mffprd 4, 0
6669; PC64LE9-NEXT:    lfd 0, .LCPI125_2@toc@l(5)
6670; PC64LE9-NEXT:    xscvdpuxds 0, 0
6671; PC64LE9-NEXT:    mffprd 5, 0
6672; PC64LE9-NEXT:    blr
6673entry:
6674  %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(
6675                                <3 x double><double 42.1, double 42.2,
6676                                             double 42.3>,
6677                                metadata !"fpexcept.strict") #0
6678  ret <3 x i64> %result
6679}
6680
6681define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64() #0 {
6682; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6683; PC64LE:       # %bb.0: # %entry
6684; PC64LE-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
6685; PC64LE-NEXT:    addis 4, 2, .LCPI126_1@toc@ha
6686; PC64LE-NEXT:    addi 3, 3, .LCPI126_0@toc@l
6687; PC64LE-NEXT:    lxvd2x 0, 0, 3
6688; PC64LE-NEXT:    addi 3, 4, .LCPI126_1@toc@l
6689; PC64LE-NEXT:    lxvd2x 1, 0, 3
6690; PC64LE-NEXT:    xxswapd 0, 0
6691; PC64LE-NEXT:    xxswapd 1, 1
6692; PC64LE-NEXT:    xvcvdpuxds 35, 0
6693; PC64LE-NEXT:    xvcvdpuxds 34, 1
6694; PC64LE-NEXT:    blr
6695;
6696; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6697; PC64LE9:       # %bb.0: # %entry
6698; PC64LE9-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
6699; PC64LE9-NEXT:    addi 3, 3, .LCPI126_0@toc@l
6700; PC64LE9-NEXT:    lxvx 0, 0, 3
6701; PC64LE9-NEXT:    addis 3, 2, .LCPI126_1@toc@ha
6702; PC64LE9-NEXT:    addi 3, 3, .LCPI126_1@toc@l
6703; PC64LE9-NEXT:    xvcvdpuxds 35, 0
6704; PC64LE9-NEXT:    lxvx 0, 0, 3
6705; PC64LE9-NEXT:    xvcvdpuxds 34, 0
6706; PC64LE9-NEXT:    blr
6707entry:
6708  %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(
6709                                <4 x double><double 42.1, double 42.2,
6710                                             double 42.3, double 42.4>,
6711                                metadata !"fpexcept.strict") #0
6712  ret <4 x i64> %result
6713}
6714
6715define <1 x float> @constrained_vector_fptrunc_v1f64() #0 {
6716; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
6717; PC64LE:       # %bb.0: # %entry
6718; PC64LE-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
6719; PC64LE-NEXT:    lfd 0, .LCPI127_0@toc@l(3)
6720; PC64LE-NEXT:    xsrsp 1, 0
6721; PC64LE-NEXT:    blr
6722;
6723; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
6724; PC64LE9:       # %bb.0: # %entry
6725; PC64LE9-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
6726; PC64LE9-NEXT:    lfd 0, .LCPI127_0@toc@l(3)
6727; PC64LE9-NEXT:    xsrsp 1, 0
6728; PC64LE9-NEXT:    blr
6729entry:
6730  %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
6731                                <1 x double><double 42.1>,
6732                                metadata !"round.dynamic",
6733                                metadata !"fpexcept.strict") #1
6734  ret <1 x float> %result
6735}
6736
6737define <2 x float> @constrained_vector_fptrunc_v2f64() #0 {
6738; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
6739; PC64LE:       # %bb.0: # %entry
6740; PC64LE-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
6741; PC64LE-NEXT:    addis 4, 2, .LCPI128_1@toc@ha
6742; PC64LE-NEXT:    lfd 0, .LCPI128_0@toc@l(3)
6743; PC64LE-NEXT:    lfd 1, .LCPI128_1@toc@l(4)
6744; PC64LE-NEXT:    xsrsp 0, 0
6745; PC64LE-NEXT:    xsrsp 1, 1
6746; PC64LE-NEXT:    xscvdpspn 34, 0
6747; PC64LE-NEXT:    xscvdpspn 35, 1
6748; PC64LE-NEXT:    vmrghw 2, 3, 2
6749; PC64LE-NEXT:    blr
6750;
6751; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
6752; PC64LE9:       # %bb.0: # %entry
6753; PC64LE9-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
6754; PC64LE9-NEXT:    lfd 0, .LCPI128_0@toc@l(3)
6755; PC64LE9-NEXT:    addis 3, 2, .LCPI128_1@toc@ha
6756; PC64LE9-NEXT:    xsrsp 0, 0
6757; PC64LE9-NEXT:    xscvdpspn 34, 0
6758; PC64LE9-NEXT:    lfd 0, .LCPI128_1@toc@l(3)
6759; PC64LE9-NEXT:    xsrsp 0, 0
6760; PC64LE9-NEXT:    xscvdpspn 35, 0
6761; PC64LE9-NEXT:    vmrghw 2, 3, 2
6762; PC64LE9-NEXT:    blr
6763entry:
6764  %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
6765                                <2 x double><double 42.1, double 42.2>,
6766                                metadata !"round.dynamic",
6767                                metadata !"fpexcept.strict") #1
6768  ret <2 x float> %result
6769}
6770
6771define <3 x float> @constrained_vector_fptrunc_v3f64() #0 {
6772; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
6773; PC64LE:       # %bb.0: # %entry
6774; PC64LE-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
6775; PC64LE-NEXT:    addis 4, 2, .LCPI129_1@toc@ha
6776; PC64LE-NEXT:    lfd 0, .LCPI129_0@toc@l(3)
6777; PC64LE-NEXT:    lfd 1, .LCPI129_1@toc@l(4)
6778; PC64LE-NEXT:    addis 3, 2, .LCPI129_3@toc@ha
6779; PC64LE-NEXT:    xsrsp 0, 0
6780; PC64LE-NEXT:    lfd 2, .LCPI129_3@toc@l(3)
6781; PC64LE-NEXT:    addis 3, 2, .LCPI129_2@toc@ha
6782; PC64LE-NEXT:    xsrsp 1, 1
6783; PC64LE-NEXT:    addi 3, 3, .LCPI129_2@toc@l
6784; PC64LE-NEXT:    lvx 4, 0, 3
6785; PC64LE-NEXT:    xscvdpspn 34, 0
6786; PC64LE-NEXT:    xscvdpspn 35, 1
6787; PC64LE-NEXT:    xsrsp 0, 2
6788; PC64LE-NEXT:    vmrghw 2, 3, 2
6789; PC64LE-NEXT:    xscvdpspn 35, 0
6790; PC64LE-NEXT:    vperm 2, 3, 2, 4
6791; PC64LE-NEXT:    blr
6792;
6793; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
6794; PC64LE9:       # %bb.0: # %entry
6795; PC64LE9-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
6796; PC64LE9-NEXT:    lfd 0, .LCPI129_0@toc@l(3)
6797; PC64LE9-NEXT:    addis 3, 2, .LCPI129_1@toc@ha
6798; PC64LE9-NEXT:    xsrsp 0, 0
6799; PC64LE9-NEXT:    xscvdpspn 34, 0
6800; PC64LE9-NEXT:    lfd 0, .LCPI129_1@toc@l(3)
6801; PC64LE9-NEXT:    addis 3, 2, .LCPI129_2@toc@ha
6802; PC64LE9-NEXT:    addi 3, 3, .LCPI129_2@toc@l
6803; PC64LE9-NEXT:    xsrsp 0, 0
6804; PC64LE9-NEXT:    xscvdpspn 35, 0
6805; PC64LE9-NEXT:    vmrghw 2, 3, 2
6806; PC64LE9-NEXT:    lxvx 35, 0, 3
6807; PC64LE9-NEXT:    addis 3, 2, .LCPI129_3@toc@ha
6808; PC64LE9-NEXT:    lfd 0, .LCPI129_3@toc@l(3)
6809; PC64LE9-NEXT:    xsrsp 0, 0
6810; PC64LE9-NEXT:    xscvdpspn 36, 0
6811; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6812; PC64LE9-NEXT:    blr
6813entry:
6814  %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
6815                                <3 x double><double 42.1, double 42.2,
6816                                             double 42.3>,
6817                                metadata !"round.dynamic",
6818                                metadata !"fpexcept.strict") #1
6819  ret <3 x float> %result
6820}
6821
6822define <4 x float> @constrained_vector_fptrunc_v4f64() #0 {
6823; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
6824; PC64LE:       # %bb.0: # %entry
6825; PC64LE-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
6826; PC64LE-NEXT:    addis 4, 2, .LCPI130_1@toc@ha
6827; PC64LE-NEXT:    addis 5, 2, .LCPI130_2@toc@ha
6828; PC64LE-NEXT:    addis 6, 2, .LCPI130_3@toc@ha
6829; PC64LE-NEXT:    lfd 0, .LCPI130_0@toc@l(3)
6830; PC64LE-NEXT:    lfd 1, .LCPI130_1@toc@l(4)
6831; PC64LE-NEXT:    lfd 2, .LCPI130_2@toc@l(5)
6832; PC64LE-NEXT:    lfd 3, .LCPI130_3@toc@l(6)
6833; PC64LE-NEXT:    xxmrghd 0, 1, 0
6834; PC64LE-NEXT:    xxmrghd 1, 3, 2
6835; PC64LE-NEXT:    xvcvdpsp 34, 0
6836; PC64LE-NEXT:    xvcvdpsp 35, 1
6837; PC64LE-NEXT:    vmrgew 2, 3, 2
6838; PC64LE-NEXT:    blr
6839;
6840; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
6841; PC64LE9:       # %bb.0: # %entry
6842; PC64LE9-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
6843; PC64LE9-NEXT:    lfd 0, .LCPI130_0@toc@l(3)
6844; PC64LE9-NEXT:    addis 3, 2, .LCPI130_1@toc@ha
6845; PC64LE9-NEXT:    lfd 1, .LCPI130_1@toc@l(3)
6846; PC64LE9-NEXT:    addis 3, 2, .LCPI130_2@toc@ha
6847; PC64LE9-NEXT:    xxmrghd 0, 1, 0
6848; PC64LE9-NEXT:    xvcvdpsp 34, 0
6849; PC64LE9-NEXT:    lfd 0, .LCPI130_2@toc@l(3)
6850; PC64LE9-NEXT:    addis 3, 2, .LCPI130_3@toc@ha
6851; PC64LE9-NEXT:    lfd 1, .LCPI130_3@toc@l(3)
6852; PC64LE9-NEXT:    xxmrghd 0, 1, 0
6853; PC64LE9-NEXT:    xvcvdpsp 35, 0
6854; PC64LE9-NEXT:    vmrgew 2, 3, 2
6855; PC64LE9-NEXT:    blr
6856entry:
6857  %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(
6858                                <4 x double><double 42.1, double 42.2,
6859                                             double 42.3, double 42.4>,
6860                                metadata !"round.dynamic",
6861                                metadata !"fpexcept.strict") #1
6862  ret <4 x float> %result
6863}
6864
6865define <1 x double> @constrained_vector_fpext_v1f32() #0 {
6866; PC64LE-LABEL: constrained_vector_fpext_v1f32:
6867; PC64LE:       # %bb.0: # %entry
6868; PC64LE-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
6869; PC64LE-NEXT:    lfs 1, .LCPI131_0@toc@l(3)
6870; PC64LE-NEXT:    blr
6871;
6872; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
6873; PC64LE9:       # %bb.0: # %entry
6874; PC64LE9-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
6875; PC64LE9-NEXT:    lfs 1, .LCPI131_0@toc@l(3)
6876; PC64LE9-NEXT:    blr
6877entry:
6878  %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
6879                                <1 x float><float 42.0>,
6880                                metadata !"fpexcept.strict") #1
6881  ret <1 x double> %result
6882}
6883
6884define <2 x double> @constrained_vector_fpext_v2f32() #0 {
6885; PC64LE-LABEL: constrained_vector_fpext_v2f32:
6886; PC64LE:       # %bb.0: # %entry
6887; PC64LE-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
6888; PC64LE-NEXT:    addis 4, 2, .LCPI132_1@toc@ha
6889; PC64LE-NEXT:    lfs 0, .LCPI132_0@toc@l(3)
6890; PC64LE-NEXT:    lfs 1, .LCPI132_1@toc@l(4)
6891; PC64LE-NEXT:    xxmrghd 34, 1, 0
6892; PC64LE-NEXT:    blr
6893;
6894; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
6895; PC64LE9:       # %bb.0: # %entry
6896; PC64LE9-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
6897; PC64LE9-NEXT:    lfs 0, .LCPI132_0@toc@l(3)
6898; PC64LE9-NEXT:    addis 3, 2, .LCPI132_1@toc@ha
6899; PC64LE9-NEXT:    lfs 1, .LCPI132_1@toc@l(3)
6900; PC64LE9-NEXT:    xxmrghd 34, 1, 0
6901; PC64LE9-NEXT:    blr
6902entry:
6903  %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
6904                                <2 x float><float 42.0, float 43.0>,
6905                                metadata !"fpexcept.strict") #1
6906  ret <2 x double> %result
6907}
6908
6909define <3 x double> @constrained_vector_fpext_v3f32() #0 {
6910; PC64LE-LABEL: constrained_vector_fpext_v3f32:
6911; PC64LE:       # %bb.0: # %entry
6912; PC64LE-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
6913; PC64LE-NEXT:    addis 4, 2, .LCPI133_1@toc@ha
6914; PC64LE-NEXT:    addis 5, 2, .LCPI133_2@toc@ha
6915; PC64LE-NEXT:    lfs 3, .LCPI133_0@toc@l(3)
6916; PC64LE-NEXT:    lfs 2, .LCPI133_1@toc@l(4)
6917; PC64LE-NEXT:    lfs 1, .LCPI133_2@toc@l(5)
6918; PC64LE-NEXT:    blr
6919;
6920; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
6921; PC64LE9:       # %bb.0: # %entry
6922; PC64LE9-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
6923; PC64LE9-NEXT:    lfs 3, .LCPI133_0@toc@l(3)
6924; PC64LE9-NEXT:    addis 3, 2, .LCPI133_1@toc@ha
6925; PC64LE9-NEXT:    lfs 2, .LCPI133_1@toc@l(3)
6926; PC64LE9-NEXT:    addis 3, 2, .LCPI133_2@toc@ha
6927; PC64LE9-NEXT:    lfs 1, .LCPI133_2@toc@l(3)
6928; PC64LE9-NEXT:    blr
6929entry:
6930  %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
6931                                <3 x float><float 42.0, float 43.0,
6932                                            float 44.0>,
6933                                metadata !"fpexcept.strict") #1
6934  ret <3 x double> %result
6935}
6936
6937define <4 x double> @constrained_vector_fpext_v4f32() #0 {
6938; PC64LE-LABEL: constrained_vector_fpext_v4f32:
6939; PC64LE:       # %bb.0: # %entry
6940; PC64LE-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
6941; PC64LE-NEXT:    addis 4, 2, .LCPI134_1@toc@ha
6942; PC64LE-NEXT:    addis 5, 2, .LCPI134_2@toc@ha
6943; PC64LE-NEXT:    addis 6, 2, .LCPI134_3@toc@ha
6944; PC64LE-NEXT:    lfs 0, .LCPI134_0@toc@l(3)
6945; PC64LE-NEXT:    lfs 1, .LCPI134_1@toc@l(4)
6946; PC64LE-NEXT:    lfs 2, .LCPI134_2@toc@l(5)
6947; PC64LE-NEXT:    lfs 3, .LCPI134_3@toc@l(6)
6948; PC64LE-NEXT:    xxmrghd 34, 1, 0
6949; PC64LE-NEXT:    xxmrghd 35, 3, 2
6950; PC64LE-NEXT:    blr
6951;
6952; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
6953; PC64LE9:       # %bb.0: # %entry
6954; PC64LE9-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
6955; PC64LE9-NEXT:    lfs 0, .LCPI134_0@toc@l(3)
6956; PC64LE9-NEXT:    addis 3, 2, .LCPI134_1@toc@ha
6957; PC64LE9-NEXT:    lfs 1, .LCPI134_1@toc@l(3)
6958; PC64LE9-NEXT:    addis 3, 2, .LCPI134_2@toc@ha
6959; PC64LE9-NEXT:    xxmrghd 34, 1, 0
6960; PC64LE9-NEXT:    lfs 0, .LCPI134_2@toc@l(3)
6961; PC64LE9-NEXT:    addis 3, 2, .LCPI134_3@toc@ha
6962; PC64LE9-NEXT:    lfs 1, .LCPI134_3@toc@l(3)
6963; PC64LE9-NEXT:    xxmrghd 35, 1, 0
6964; PC64LE9-NEXT:    blr
6965entry:
6966  %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(
6967                                <4 x float><float 42.0, float 43.0,
6968                                            float 44.0, float 45.0>,
6969                                metadata !"fpexcept.strict") #1
6970  ret <4 x double> %result
6971}
6972
6973define <1 x float> @constrained_vector_ceil_v1f32() #0 {
6974; PC64LE-LABEL: constrained_vector_ceil_v1f32:
6975; PC64LE:       # %bb.0: # %entry
6976; PC64LE-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
6977; PC64LE-NEXT:    lfs 0, .LCPI135_0@toc@l(3)
6978; PC64LE-NEXT:    addis 3, 2, .LCPI135_1@toc@ha
6979; PC64LE-NEXT:    lfs 1, .LCPI135_1@toc@l(3)
6980; PC64LE-NEXT:    xsrdpip 0, 0
6981; PC64LE-NEXT:    blr
6982;
6983; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
6984; PC64LE9:       # %bb.0: # %entry
6985; PC64LE9-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
6986; PC64LE9-NEXT:    lfs 0, .LCPI135_0@toc@l(3)
6987; PC64LE9-NEXT:    addis 3, 2, .LCPI135_1@toc@ha
6988; PC64LE9-NEXT:    lfs 1, .LCPI135_1@toc@l(3)
6989; PC64LE9-NEXT:    xsrdpip 0, 0
6990; PC64LE9-NEXT:    blr
6991entry:
6992  %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
6993                               <1 x float> <float 1.5>,
6994                               metadata !"fpexcept.strict") #1
6995  ret <1 x float> %ceil
6996}
6997
6998define <2 x double> @constrained_vector_ceil_v2f64() #0 {
6999; PC64LE-LABEL: constrained_vector_ceil_v2f64:
7000; PC64LE:       # %bb.0: # %entry
7001; PC64LE-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
7002; PC64LE-NEXT:    addis 4, 2, .LCPI136_1@toc@ha
7003; PC64LE-NEXT:    addi 3, 3, .LCPI136_0@toc@l
7004; PC64LE-NEXT:    lxvd2x 0, 0, 3
7005; PC64LE-NEXT:    addi 3, 4, .LCPI136_1@toc@l
7006; PC64LE-NEXT:    lxvd2x 1, 0, 3
7007; PC64LE-NEXT:    xvrdpip 0, 0
7008; PC64LE-NEXT:    xxswapd 34, 1
7009; PC64LE-NEXT:    blr
7010;
7011; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
7012; PC64LE9:       # %bb.0: # %entry
7013; PC64LE9-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
7014; PC64LE9-NEXT:    addi 3, 3, .LCPI136_0@toc@l
7015; PC64LE9-NEXT:    lxvx 0, 0, 3
7016; PC64LE9-NEXT:    addis 3, 2, .LCPI136_1@toc@ha
7017; PC64LE9-NEXT:    addi 3, 3, .LCPI136_1@toc@l
7018; PC64LE9-NEXT:    lxvx 34, 0, 3
7019; PC64LE9-NEXT:    xvrdpip 0, 0
7020; PC64LE9-NEXT:    blr
7021entry:
7022  %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
7023                                <2 x double> <double 1.1, double 1.9>,
7024                                metadata !"fpexcept.strict") #1
7025  ret <2 x double> %ceil
7026}
7027
7028define <3 x float> @constrained_vector_ceil_v3f32() #0 {
7029; PC64LE-LABEL: constrained_vector_ceil_v3f32:
7030; PC64LE:       # %bb.0: # %entry
7031; PC64LE-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
7032; PC64LE-NEXT:    addis 4, 2, .LCPI137_1@toc@ha
7033; PC64LE-NEXT:    lfs 0, .LCPI137_0@toc@l(3)
7034; PC64LE-NEXT:    addis 3, 2, .LCPI137_2@toc@ha
7035; PC64LE-NEXT:    lfs 1, .LCPI137_1@toc@l(4)
7036; PC64LE-NEXT:    lfs 2, .LCPI137_2@toc@l(3)
7037; PC64LE-NEXT:    addis 3, 2, .LCPI137_3@toc@ha
7038; PC64LE-NEXT:    addi 3, 3, .LCPI137_3@toc@l
7039; PC64LE-NEXT:    xsrdpip 0, 0
7040; PC64LE-NEXT:    lvx 2, 0, 3
7041; PC64LE-NEXT:    xsrdpip 0, 1
7042; PC64LE-NEXT:    xsrdpip 0, 2
7043; PC64LE-NEXT:    blr
7044;
7045; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
7046; PC64LE9:       # %bb.0: # %entry
7047; PC64LE9-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
7048; PC64LE9-NEXT:    lfs 0, .LCPI137_0@toc@l(3)
7049; PC64LE9-NEXT:    addis 3, 2, .LCPI137_1@toc@ha
7050; PC64LE9-NEXT:    xsrdpip 0, 0
7051; PC64LE9-NEXT:    lfs 0, .LCPI137_1@toc@l(3)
7052; PC64LE9-NEXT:    addis 3, 2, .LCPI137_2@toc@ha
7053; PC64LE9-NEXT:    xsrdpip 0, 0
7054; PC64LE9-NEXT:    lfs 0, .LCPI137_2@toc@l(3)
7055; PC64LE9-NEXT:    addis 3, 2, .LCPI137_3@toc@ha
7056; PC64LE9-NEXT:    addi 3, 3, .LCPI137_3@toc@l
7057; PC64LE9-NEXT:    lxvx 34, 0, 3
7058; PC64LE9-NEXT:    xsrdpip 0, 0
7059; PC64LE9-NEXT:    blr
7060entry:
7061  %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
7062                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7063                              metadata !"fpexcept.strict") #1
7064  ret <3 x float> %ceil
7065}
7066
7067define <3 x double> @constrained_vector_ceil_v3f64() #0 {
7068; PC64LE-LABEL: constrained_vector_ceil_v3f64:
7069; PC64LE:       # %bb.0: # %entry
7070; PC64LE-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
7071; PC64LE-NEXT:    addis 4, 2, .LCPI138_1@toc@ha
7072; PC64LE-NEXT:    lfs 0, .LCPI138_0@toc@l(3)
7073; PC64LE-NEXT:    addi 3, 4, .LCPI138_1@toc@l
7074; PC64LE-NEXT:    lxvd2x 1, 0, 3
7075; PC64LE-NEXT:    addis 3, 2, .LCPI138_2@toc@ha
7076; PC64LE-NEXT:    xsrdpip 0, 0
7077; PC64LE-NEXT:    xvrdpip 0, 1
7078; PC64LE-NEXT:    lfs 1, .LCPI138_2@toc@l(3)
7079; PC64LE-NEXT:    fmr 2, 1
7080; PC64LE-NEXT:    fmr 3, 1
7081; PC64LE-NEXT:    blr
7082;
7083; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
7084; PC64LE9:       # %bb.0: # %entry
7085; PC64LE9-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
7086; PC64LE9-NEXT:    lfs 0, .LCPI138_0@toc@l(3)
7087; PC64LE9-NEXT:    addis 3, 2, .LCPI138_1@toc@ha
7088; PC64LE9-NEXT:    addi 3, 3, .LCPI138_1@toc@l
7089; PC64LE9-NEXT:    xsrdpip 0, 0
7090; PC64LE9-NEXT:    lxvx 0, 0, 3
7091; PC64LE9-NEXT:    addis 3, 2, .LCPI138_2@toc@ha
7092; PC64LE9-NEXT:    lfs 1, .LCPI138_2@toc@l(3)
7093; PC64LE9-NEXT:    xvrdpip 0, 0
7094; PC64LE9-NEXT:    fmr 2, 1
7095; PC64LE9-NEXT:    fmr 3, 1
7096; PC64LE9-NEXT:    blr
7097entry:
7098  %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
7099                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7100                          metadata !"fpexcept.strict") #1
7101  ret <3 x double> %ceil
7102}
7103
7104define <1 x float> @constrained_vector_floor_v1f32() #0 {
7105; PC64LE-LABEL: constrained_vector_floor_v1f32:
7106; PC64LE:       # %bb.0: # %entry
7107; PC64LE-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
7108; PC64LE-NEXT:    lfs 0, .LCPI139_0@toc@l(3)
7109; PC64LE-NEXT:    addis 3, 2, .LCPI139_1@toc@ha
7110; PC64LE-NEXT:    lfs 1, .LCPI139_1@toc@l(3)
7111; PC64LE-NEXT:    xsrdpim 0, 0
7112; PC64LE-NEXT:    blr
7113;
7114; PC64LE9-LABEL: constrained_vector_floor_v1f32:
7115; PC64LE9:       # %bb.0: # %entry
7116; PC64LE9-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
7117; PC64LE9-NEXT:    lfs 0, .LCPI139_0@toc@l(3)
7118; PC64LE9-NEXT:    addis 3, 2, .LCPI139_1@toc@ha
7119; PC64LE9-NEXT:    lfs 1, .LCPI139_1@toc@l(3)
7120; PC64LE9-NEXT:    xsrdpim 0, 0
7121; PC64LE9-NEXT:    blr
7122entry:
7123  %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
7124                               <1 x float> <float 1.5>,
7125                               metadata !"fpexcept.strict") #1
7126  ret <1 x float> %floor
7127}
7128
7129
7130define <2 x double> @constrained_vector_floor_v2f64() #0 {
7131; PC64LE-LABEL: constrained_vector_floor_v2f64:
7132; PC64LE:       # %bb.0: # %entry
7133; PC64LE-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
7134; PC64LE-NEXT:    addis 4, 2, .LCPI140_1@toc@ha
7135; PC64LE-NEXT:    addi 3, 3, .LCPI140_0@toc@l
7136; PC64LE-NEXT:    lxvd2x 0, 0, 3
7137; PC64LE-NEXT:    addi 3, 4, .LCPI140_1@toc@l
7138; PC64LE-NEXT:    lxvd2x 1, 0, 3
7139; PC64LE-NEXT:    xvrdpim 0, 0
7140; PC64LE-NEXT:    xxswapd 34, 1
7141; PC64LE-NEXT:    blr
7142;
7143; PC64LE9-LABEL: constrained_vector_floor_v2f64:
7144; PC64LE9:       # %bb.0: # %entry
7145; PC64LE9-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
7146; PC64LE9-NEXT:    addi 3, 3, .LCPI140_0@toc@l
7147; PC64LE9-NEXT:    lxvx 0, 0, 3
7148; PC64LE9-NEXT:    addis 3, 2, .LCPI140_1@toc@ha
7149; PC64LE9-NEXT:    addi 3, 3, .LCPI140_1@toc@l
7150; PC64LE9-NEXT:    lxvx 34, 0, 3
7151; PC64LE9-NEXT:    xvrdpim 0, 0
7152; PC64LE9-NEXT:    blr
7153entry:
7154  %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
7155                                <2 x double> <double 1.1, double 1.9>,
7156                                metadata !"fpexcept.strict") #1
7157  ret <2 x double> %floor
7158}
7159
7160define <3 x float> @constrained_vector_floor_v3f32() #0 {
7161; PC64LE-LABEL: constrained_vector_floor_v3f32:
7162; PC64LE:       # %bb.0: # %entry
7163; PC64LE-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
7164; PC64LE-NEXT:    addis 4, 2, .LCPI141_1@toc@ha
7165; PC64LE-NEXT:    lfs 0, .LCPI141_0@toc@l(3)
7166; PC64LE-NEXT:    addis 3, 2, .LCPI141_2@toc@ha
7167; PC64LE-NEXT:    lfs 1, .LCPI141_1@toc@l(4)
7168; PC64LE-NEXT:    lfs 2, .LCPI141_2@toc@l(3)
7169; PC64LE-NEXT:    addis 3, 2, .LCPI141_3@toc@ha
7170; PC64LE-NEXT:    addi 3, 3, .LCPI141_3@toc@l
7171; PC64LE-NEXT:    xsrdpim 0, 0
7172; PC64LE-NEXT:    lvx 2, 0, 3
7173; PC64LE-NEXT:    xsrdpim 0, 1
7174; PC64LE-NEXT:    xsrdpim 0, 2
7175; PC64LE-NEXT:    blr
7176;
7177; PC64LE9-LABEL: constrained_vector_floor_v3f32:
7178; PC64LE9:       # %bb.0: # %entry
7179; PC64LE9-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
7180; PC64LE9-NEXT:    lfs 0, .LCPI141_0@toc@l(3)
7181; PC64LE9-NEXT:    addis 3, 2, .LCPI141_1@toc@ha
7182; PC64LE9-NEXT:    xsrdpim 0, 0
7183; PC64LE9-NEXT:    lfs 0, .LCPI141_1@toc@l(3)
7184; PC64LE9-NEXT:    addis 3, 2, .LCPI141_2@toc@ha
7185; PC64LE9-NEXT:    xsrdpim 0, 0
7186; PC64LE9-NEXT:    lfs 0, .LCPI141_2@toc@l(3)
7187; PC64LE9-NEXT:    addis 3, 2, .LCPI141_3@toc@ha
7188; PC64LE9-NEXT:    addi 3, 3, .LCPI141_3@toc@l
7189; PC64LE9-NEXT:    lxvx 34, 0, 3
7190; PC64LE9-NEXT:    xsrdpim 0, 0
7191; PC64LE9-NEXT:    blr
7192entry:
7193  %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
7194                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7195                              metadata !"fpexcept.strict") #1
7196  ret <3 x float> %floor
7197}
7198
7199define <3 x double> @constrained_vector_floor_v3f64() #0 {
7200; PC64LE-LABEL: constrained_vector_floor_v3f64:
7201; PC64LE:       # %bb.0: # %entry
7202; PC64LE-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
7203; PC64LE-NEXT:    addis 4, 2, .LCPI142_1@toc@ha
7204; PC64LE-NEXT:    lfs 0, .LCPI142_0@toc@l(3)
7205; PC64LE-NEXT:    addi 3, 4, .LCPI142_1@toc@l
7206; PC64LE-NEXT:    lxvd2x 1, 0, 3
7207; PC64LE-NEXT:    addis 3, 2, .LCPI142_2@toc@ha
7208; PC64LE-NEXT:    xsrdpim 0, 0
7209; PC64LE-NEXT:    xvrdpim 0, 1
7210; PC64LE-NEXT:    lfs 1, .LCPI142_2@toc@l(3)
7211; PC64LE-NEXT:    fmr 2, 1
7212; PC64LE-NEXT:    fmr 3, 1
7213; PC64LE-NEXT:    blr
7214;
7215; PC64LE9-LABEL: constrained_vector_floor_v3f64:
7216; PC64LE9:       # %bb.0: # %entry
7217; PC64LE9-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
7218; PC64LE9-NEXT:    lfs 0, .LCPI142_0@toc@l(3)
7219; PC64LE9-NEXT:    addis 3, 2, .LCPI142_1@toc@ha
7220; PC64LE9-NEXT:    addi 3, 3, .LCPI142_1@toc@l
7221; PC64LE9-NEXT:    xsrdpim 0, 0
7222; PC64LE9-NEXT:    lxvx 0, 0, 3
7223; PC64LE9-NEXT:    addis 3, 2, .LCPI142_2@toc@ha
7224; PC64LE9-NEXT:    lfs 1, .LCPI142_2@toc@l(3)
7225; PC64LE9-NEXT:    xvrdpim 0, 0
7226; PC64LE9-NEXT:    fmr 2, 1
7227; PC64LE9-NEXT:    fmr 3, 1
7228; PC64LE9-NEXT:    blr
7229entry:
7230  %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
7231                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7232                          metadata !"fpexcept.strict") #1
7233  ret <3 x double> %floor
7234}
7235
7236define <1 x float> @constrained_vector_round_v1f32() #0 {
7237; PC64LE-LABEL: constrained_vector_round_v1f32:
7238; PC64LE:       # %bb.0: # %entry
7239; PC64LE-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
7240; PC64LE-NEXT:    lfs 0, .LCPI143_0@toc@l(3)
7241; PC64LE-NEXT:    addis 3, 2, .LCPI143_1@toc@ha
7242; PC64LE-NEXT:    lfs 1, .LCPI143_1@toc@l(3)
7243; PC64LE-NEXT:    xsrdpi 0, 0
7244; PC64LE-NEXT:    blr
7245;
7246; PC64LE9-LABEL: constrained_vector_round_v1f32:
7247; PC64LE9:       # %bb.0: # %entry
7248; PC64LE9-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
7249; PC64LE9-NEXT:    lfs 0, .LCPI143_0@toc@l(3)
7250; PC64LE9-NEXT:    addis 3, 2, .LCPI143_1@toc@ha
7251; PC64LE9-NEXT:    lfs 1, .LCPI143_1@toc@l(3)
7252; PC64LE9-NEXT:    xsrdpi 0, 0
7253; PC64LE9-NEXT:    blr
7254entry:
7255  %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
7256                               <1 x float> <float 1.5>,
7257                               metadata !"fpexcept.strict") #1
7258  ret <1 x float> %round
7259}
7260
7261define <2 x double> @constrained_vector_round_v2f64() #0 {
7262; PC64LE-LABEL: constrained_vector_round_v2f64:
7263; PC64LE:       # %bb.0: # %entry
7264; PC64LE-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
7265; PC64LE-NEXT:    addis 4, 2, .LCPI144_1@toc@ha
7266; PC64LE-NEXT:    addi 3, 3, .LCPI144_0@toc@l
7267; PC64LE-NEXT:    lxvd2x 0, 0, 3
7268; PC64LE-NEXT:    addi 3, 4, .LCPI144_1@toc@l
7269; PC64LE-NEXT:    lxvd2x 1, 0, 3
7270; PC64LE-NEXT:    xvrdpi 0, 0
7271; PC64LE-NEXT:    xxswapd 34, 1
7272; PC64LE-NEXT:    blr
7273;
7274; PC64LE9-LABEL: constrained_vector_round_v2f64:
7275; PC64LE9:       # %bb.0: # %entry
7276; PC64LE9-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
7277; PC64LE9-NEXT:    addi 3, 3, .LCPI144_0@toc@l
7278; PC64LE9-NEXT:    lxvx 0, 0, 3
7279; PC64LE9-NEXT:    addis 3, 2, .LCPI144_1@toc@ha
7280; PC64LE9-NEXT:    addi 3, 3, .LCPI144_1@toc@l
7281; PC64LE9-NEXT:    lxvx 34, 0, 3
7282; PC64LE9-NEXT:    xvrdpi 0, 0
7283; PC64LE9-NEXT:    blr
7284entry:
7285  %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
7286                                <2 x double> <double 1.1, double 1.9>,
7287                                metadata !"fpexcept.strict") #1
7288  ret <2 x double> %round
7289}
7290
7291define <3 x float> @constrained_vector_round_v3f32() #0 {
7292; PC64LE-LABEL: constrained_vector_round_v3f32:
7293; PC64LE:       # %bb.0: # %entry
7294; PC64LE-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
7295; PC64LE-NEXT:    addis 4, 2, .LCPI145_1@toc@ha
7296; PC64LE-NEXT:    lfs 0, .LCPI145_0@toc@l(3)
7297; PC64LE-NEXT:    addis 3, 2, .LCPI145_2@toc@ha
7298; PC64LE-NEXT:    lfs 1, .LCPI145_1@toc@l(4)
7299; PC64LE-NEXT:    lfs 2, .LCPI145_2@toc@l(3)
7300; PC64LE-NEXT:    addis 3, 2, .LCPI145_3@toc@ha
7301; PC64LE-NEXT:    addi 3, 3, .LCPI145_3@toc@l
7302; PC64LE-NEXT:    xsrdpi 0, 0
7303; PC64LE-NEXT:    lvx 2, 0, 3
7304; PC64LE-NEXT:    xsrdpi 0, 1
7305; PC64LE-NEXT:    xsrdpi 0, 2
7306; PC64LE-NEXT:    blr
7307;
7308; PC64LE9-LABEL: constrained_vector_round_v3f32:
7309; PC64LE9:       # %bb.0: # %entry
7310; PC64LE9-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
7311; PC64LE9-NEXT:    lfs 0, .LCPI145_0@toc@l(3)
7312; PC64LE9-NEXT:    addis 3, 2, .LCPI145_1@toc@ha
7313; PC64LE9-NEXT:    xsrdpi 0, 0
7314; PC64LE9-NEXT:    lfs 0, .LCPI145_1@toc@l(3)
7315; PC64LE9-NEXT:    addis 3, 2, .LCPI145_2@toc@ha
7316; PC64LE9-NEXT:    xsrdpi 0, 0
7317; PC64LE9-NEXT:    lfs 0, .LCPI145_2@toc@l(3)
7318; PC64LE9-NEXT:    addis 3, 2, .LCPI145_3@toc@ha
7319; PC64LE9-NEXT:    addi 3, 3, .LCPI145_3@toc@l
7320; PC64LE9-NEXT:    lxvx 34, 0, 3
7321; PC64LE9-NEXT:    xsrdpi 0, 0
7322; PC64LE9-NEXT:    blr
7323entry:
7324  %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
7325                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7326                              metadata !"fpexcept.strict") #1
7327  ret <3 x float> %round
7328}
7329
7330
7331define <3 x double> @constrained_vector_round_v3f64() #0 {
7332; PC64LE-LABEL: constrained_vector_round_v3f64:
7333; PC64LE:       # %bb.0: # %entry
7334; PC64LE-NEXT:    addis 4, 2, .LCPI146_1@toc@ha
7335; PC64LE-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
7336; PC64LE-NEXT:    addi 4, 4, .LCPI146_1@toc@l
7337; PC64LE-NEXT:    lxvd2x 1, 0, 4
7338; PC64LE-NEXT:    addis 4, 2, .LCPI146_3@toc@ha
7339; PC64LE-NEXT:    lfs 0, .LCPI146_0@toc@l(3)
7340; PC64LE-NEXT:    addis 3, 2, .LCPI146_2@toc@ha
7341; PC64LE-NEXT:    lfs 2, .LCPI146_3@toc@l(4)
7342; PC64LE-NEXT:    xsrdpi 0, 0
7343; PC64LE-NEXT:    xvrdpi 0, 1
7344; PC64LE-NEXT:    lfs 1, .LCPI146_2@toc@l(3)
7345; PC64LE-NEXT:    fmr 3, 2
7346; PC64LE-NEXT:    blr
7347;
7348; PC64LE9-LABEL: constrained_vector_round_v3f64:
7349; PC64LE9:       # %bb.0: # %entry
7350; PC64LE9-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
7351; PC64LE9-NEXT:    lfs 0, .LCPI146_0@toc@l(3)
7352; PC64LE9-NEXT:    addis 3, 2, .LCPI146_1@toc@ha
7353; PC64LE9-NEXT:    addi 3, 3, .LCPI146_1@toc@l
7354; PC64LE9-NEXT:    xsrdpi 0, 0
7355; PC64LE9-NEXT:    lxvx 0, 0, 3
7356; PC64LE9-NEXT:    addis 3, 2, .LCPI146_2@toc@ha
7357; PC64LE9-NEXT:    lfs 1, .LCPI146_2@toc@l(3)
7358; PC64LE9-NEXT:    addis 3, 2, .LCPI146_3@toc@ha
7359; PC64LE9-NEXT:    lfs 2, .LCPI146_3@toc@l(3)
7360; PC64LE9-NEXT:    xvrdpi 0, 0
7361; PC64LE9-NEXT:    fmr 3, 2
7362; PC64LE9-NEXT:    blr
7363entry:
7364  %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
7365                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7366                          metadata !"fpexcept.strict") #1
7367  ret <3 x double> %round
7368}
7369
7370define <1 x float> @constrained_vector_trunc_v1f32() #0 {
7371; PC64LE-LABEL: constrained_vector_trunc_v1f32:
7372; PC64LE:       # %bb.0: # %entry
7373; PC64LE-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
7374; PC64LE-NEXT:    lfs 0, .LCPI147_0@toc@l(3)
7375; PC64LE-NEXT:    addis 3, 2, .LCPI147_1@toc@ha
7376; PC64LE-NEXT:    lfs 1, .LCPI147_1@toc@l(3)
7377; PC64LE-NEXT:    xsrdpiz 0, 0
7378; PC64LE-NEXT:    blr
7379;
7380; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
7381; PC64LE9:       # %bb.0: # %entry
7382; PC64LE9-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
7383; PC64LE9-NEXT:    lfs 0, .LCPI147_0@toc@l(3)
7384; PC64LE9-NEXT:    addis 3, 2, .LCPI147_1@toc@ha
7385; PC64LE9-NEXT:    lfs 1, .LCPI147_1@toc@l(3)
7386; PC64LE9-NEXT:    xsrdpiz 0, 0
7387; PC64LE9-NEXT:    blr
7388entry:
7389  %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
7390                               <1 x float> <float 1.5>,
7391                               metadata !"fpexcept.strict") #1
7392  ret <1 x float> %trunc
7393}
7394
7395define <2 x double> @constrained_vector_trunc_v2f64() #0 {
7396; PC64LE-LABEL: constrained_vector_trunc_v2f64:
7397; PC64LE:       # %bb.0: # %entry
7398; PC64LE-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
7399; PC64LE-NEXT:    addis 4, 2, .LCPI148_1@toc@ha
7400; PC64LE-NEXT:    addi 3, 3, .LCPI148_0@toc@l
7401; PC64LE-NEXT:    lxvd2x 0, 0, 3
7402; PC64LE-NEXT:    addi 3, 4, .LCPI148_1@toc@l
7403; PC64LE-NEXT:    lxvd2x 1, 0, 3
7404; PC64LE-NEXT:    xvrdpiz 0, 0
7405; PC64LE-NEXT:    xxswapd 34, 1
7406; PC64LE-NEXT:    blr
7407;
7408; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
7409; PC64LE9:       # %bb.0: # %entry
7410; PC64LE9-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
7411; PC64LE9-NEXT:    addi 3, 3, .LCPI148_0@toc@l
7412; PC64LE9-NEXT:    lxvx 0, 0, 3
7413; PC64LE9-NEXT:    addis 3, 2, .LCPI148_1@toc@ha
7414; PC64LE9-NEXT:    addi 3, 3, .LCPI148_1@toc@l
7415; PC64LE9-NEXT:    lxvx 34, 0, 3
7416; PC64LE9-NEXT:    xvrdpiz 0, 0
7417; PC64LE9-NEXT:    blr
7418entry:
7419  %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
7420                                <2 x double> <double 1.1, double 1.9>,
7421                                metadata !"fpexcept.strict") #1
7422  ret <2 x double> %trunc
7423}
7424
7425define <3 x float> @constrained_vector_trunc_v3f32() #0 {
7426; PC64LE-LABEL: constrained_vector_trunc_v3f32:
7427; PC64LE:       # %bb.0: # %entry
7428; PC64LE-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
7429; PC64LE-NEXT:    addis 4, 2, .LCPI149_1@toc@ha
7430; PC64LE-NEXT:    lfs 0, .LCPI149_0@toc@l(3)
7431; PC64LE-NEXT:    addis 3, 2, .LCPI149_2@toc@ha
7432; PC64LE-NEXT:    lfs 1, .LCPI149_1@toc@l(4)
7433; PC64LE-NEXT:    lfs 2, .LCPI149_2@toc@l(3)
7434; PC64LE-NEXT:    addis 3, 2, .LCPI149_3@toc@ha
7435; PC64LE-NEXT:    addi 3, 3, .LCPI149_3@toc@l
7436; PC64LE-NEXT:    xsrdpiz 0, 0
7437; PC64LE-NEXT:    lvx 2, 0, 3
7438; PC64LE-NEXT:    xsrdpiz 0, 1
7439; PC64LE-NEXT:    xsrdpiz 0, 2
7440; PC64LE-NEXT:    blr
7441;
7442; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
7443; PC64LE9:       # %bb.0: # %entry
7444; PC64LE9-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
7445; PC64LE9-NEXT:    lfs 0, .LCPI149_0@toc@l(3)
7446; PC64LE9-NEXT:    addis 3, 2, .LCPI149_1@toc@ha
7447; PC64LE9-NEXT:    xsrdpiz 0, 0
7448; PC64LE9-NEXT:    lfs 0, .LCPI149_1@toc@l(3)
7449; PC64LE9-NEXT:    addis 3, 2, .LCPI149_2@toc@ha
7450; PC64LE9-NEXT:    xsrdpiz 0, 0
7451; PC64LE9-NEXT:    lfs 0, .LCPI149_2@toc@l(3)
7452; PC64LE9-NEXT:    addis 3, 2, .LCPI149_3@toc@ha
7453; PC64LE9-NEXT:    addi 3, 3, .LCPI149_3@toc@l
7454; PC64LE9-NEXT:    lxvx 34, 0, 3
7455; PC64LE9-NEXT:    xsrdpiz 0, 0
7456; PC64LE9-NEXT:    blr
7457entry:
7458  %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
7459                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7460                              metadata !"fpexcept.strict") #1
7461  ret <3 x float> %trunc
7462}
7463
7464define <3 x double> @constrained_vector_trunc_v3f64() #0 {
7465; PC64LE-LABEL: constrained_vector_trunc_v3f64:
7466; PC64LE:       # %bb.0: # %entry
7467; PC64LE-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
7468; PC64LE-NEXT:    addis 4, 2, .LCPI150_1@toc@ha
7469; PC64LE-NEXT:    lfs 0, .LCPI150_0@toc@l(3)
7470; PC64LE-NEXT:    addi 3, 4, .LCPI150_1@toc@l
7471; PC64LE-NEXT:    lxvd2x 1, 0, 3
7472; PC64LE-NEXT:    addis 3, 2, .LCPI150_2@toc@ha
7473; PC64LE-NEXT:    xsrdpiz 0, 0
7474; PC64LE-NEXT:    xvrdpiz 0, 1
7475; PC64LE-NEXT:    lfs 1, .LCPI150_2@toc@l(3)
7476; PC64LE-NEXT:    fmr 2, 1
7477; PC64LE-NEXT:    fmr 3, 1
7478; PC64LE-NEXT:    blr
7479;
7480; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
7481; PC64LE9:       # %bb.0: # %entry
7482; PC64LE9-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
7483; PC64LE9-NEXT:    lfs 0, .LCPI150_0@toc@l(3)
7484; PC64LE9-NEXT:    addis 3, 2, .LCPI150_1@toc@ha
7485; PC64LE9-NEXT:    addi 3, 3, .LCPI150_1@toc@l
7486; PC64LE9-NEXT:    xsrdpiz 0, 0
7487; PC64LE9-NEXT:    lxvx 0, 0, 3
7488; PC64LE9-NEXT:    addis 3, 2, .LCPI150_2@toc@ha
7489; PC64LE9-NEXT:    lfs 1, .LCPI150_2@toc@l(3)
7490; PC64LE9-NEXT:    xvrdpiz 0, 0
7491; PC64LE9-NEXT:    fmr 2, 1
7492; PC64LE9-NEXT:    fmr 3, 1
7493; PC64LE9-NEXT:    blr
7494entry:
7495  %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
7496                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7497                          metadata !"fpexcept.strict") #1
7498  ret <3 x double> %trunc
7499}
7500
7501define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 {
7502; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7503; PC64LE:       # %bb.0: # %entry
7504; PC64LE-NEXT:    mtfprwa 0, 3
7505; PC64LE-NEXT:    xscvsxddp 1, 0
7506; PC64LE-NEXT:    blr
7507;
7508; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7509; PC64LE9:       # %bb.0: # %entry
7510; PC64LE9-NEXT:    mtfprwa 0, 3
7511; PC64LE9-NEXT:    xscvsxddp 1, 0
7512; PC64LE9-NEXT:    blr
7513entry:
7514  %result = call <1 x double>
7515           @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x,
7516                                               metadata !"round.dynamic",
7517                                               metadata !"fpexcept.strict") #0
7518  ret <1 x double> %result
7519}
7520
7521define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 {
7522; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7523; PC64LE:       # %bb.0: # %entry
7524; PC64LE-NEXT:    mtfprwa 0, 3
7525; PC64LE-NEXT:    xscvsxdsp 1, 0
7526; PC64LE-NEXT:    blr
7527;
7528; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7529; PC64LE9:       # %bb.0: # %entry
7530; PC64LE9-NEXT:    mtfprwa 0, 3
7531; PC64LE9-NEXT:    xscvsxdsp 1, 0
7532; PC64LE9-NEXT:    blr
7533entry:
7534  %result = call <1 x float>
7535           @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x,
7536                                               metadata !"round.dynamic",
7537                                               metadata !"fpexcept.strict") #0
7538  ret <1 x float> %result
7539}
7540
7541define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 {
7542; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7543; PC64LE:       # %bb.0: # %entry
7544; PC64LE-NEXT:    mtfprd 0, 3
7545; PC64LE-NEXT:    xscvsxddp 1, 0
7546; PC64LE-NEXT:    blr
7547;
7548; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7549; PC64LE9:       # %bb.0: # %entry
7550; PC64LE9-NEXT:    mtfprd 0, 3
7551; PC64LE9-NEXT:    xscvsxddp 1, 0
7552; PC64LE9-NEXT:    blr
7553entry:
7554  %result = call <1 x double>
7555           @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x,
7556                                               metadata !"round.dynamic",
7557                                               metadata !"fpexcept.strict") #0
7558  ret <1 x double> %result
7559}
7560
7561define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 {
7562; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7563; PC64LE:       # %bb.0: # %entry
7564; PC64LE-NEXT:    mtfprd 0, 3
7565; PC64LE-NEXT:    xscvsxdsp 1, 0
7566; PC64LE-NEXT:    blr
7567;
7568; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7569; PC64LE9:       # %bb.0: # %entry
7570; PC64LE9-NEXT:    mtfprd 0, 3
7571; PC64LE9-NEXT:    xscvsxdsp 1, 0
7572; PC64LE9-NEXT:    blr
7573entry:
7574  %result = call <1 x float>
7575           @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x,
7576                                               metadata !"round.dynamic",
7577                                               metadata !"fpexcept.strict") #0
7578  ret <1 x float> %result
7579}
7580
7581define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 {
7582; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7583; PC64LE:       # %bb.0: # %entry
7584; PC64LE-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
7585; PC64LE-NEXT:    addi 3, 3, .LCPI155_0@toc@l
7586; PC64LE-NEXT:    lvx 3, 0, 3
7587; PC64LE-NEXT:    addis 3, 2, .LCPI155_1@toc@ha
7588; PC64LE-NEXT:    addi 3, 3, .LCPI155_1@toc@l
7589; PC64LE-NEXT:    lxvd2x 0, 0, 3
7590; PC64LE-NEXT:    vperm 2, 2, 2, 3
7591; PC64LE-NEXT:    xxswapd 35, 0
7592; PC64LE-NEXT:    vsld 2, 2, 3
7593; PC64LE-NEXT:    vsrad 2, 2, 3
7594; PC64LE-NEXT:    xvcvsxddp 34, 34
7595; PC64LE-NEXT:    blr
7596;
7597; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7598; PC64LE9:       # %bb.0: # %entry
7599; PC64LE9-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
7600; PC64LE9-NEXT:    addi 3, 3, .LCPI155_0@toc@l
7601; PC64LE9-NEXT:    lxvx 35, 0, 3
7602; PC64LE9-NEXT:    vperm 2, 2, 2, 3
7603; PC64LE9-NEXT:    vextsh2d 2, 2
7604; PC64LE9-NEXT:    xvcvsxddp 34, 34
7605; PC64LE9-NEXT:    blr
7606entry:
7607  %result = call <2 x double>
7608           @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x,
7609                                                metadata !"round.dynamic",
7610                                                metadata !"fpexcept.strict") #0
7611  ret <2 x double> %result
7612}
7613
7614define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 {
7615; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7616; PC64LE:       # %bb.0: # %entry
7617; PC64LE-NEXT:    xxswapd 0, 34
7618; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
7619; PC64LE-NEXT:    mffprwz 3, 0
7620; PC64LE-NEXT:    mffprwz 4, 1
7621; PC64LE-NEXT:    mtfprwa 0, 3
7622; PC64LE-NEXT:    mtfprwa 1, 4
7623; PC64LE-NEXT:    xscvsxddp 0, 0
7624; PC64LE-NEXT:    xscvsxddp 1, 1
7625; PC64LE-NEXT:    xxmrghd 34, 1, 0
7626; PC64LE-NEXT:    blr
7627;
7628; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7629; PC64LE9:       # %bb.0: # %entry
7630; PC64LE9-NEXT:    li 3, 0
7631; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7632; PC64LE9-NEXT:    mtfprwa 0, 3
7633; PC64LE9-NEXT:    li 3, 4
7634; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7635; PC64LE9-NEXT:    xscvsxddp 0, 0
7636; PC64LE9-NEXT:    mtfprwa 1, 3
7637; PC64LE9-NEXT:    xscvsxddp 1, 1
7638; PC64LE9-NEXT:    xxmrghd 34, 1, 0
7639; PC64LE9-NEXT:    blr
7640entry:
7641  %result = call <2 x double>
7642           @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x,
7643                                               metadata !"round.dynamic",
7644                                               metadata !"fpexcept.strict") #0
7645  ret <2 x double> %result
7646}
7647
7648define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7649; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7650; PC64LE:       # %bb.0: # %entry
7651; PC64LE-NEXT:    xxswapd 0, 34
7652; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
7653; PC64LE-NEXT:    mffprwz 3, 0
7654; PC64LE-NEXT:    mffprwz 4, 1
7655; PC64LE-NEXT:    mtfprwa 0, 3
7656; PC64LE-NEXT:    mtfprwa 1, 4
7657; PC64LE-NEXT:    xscvsxdsp 0, 0
7658; PC64LE-NEXT:    xscvsxdsp 1, 1
7659; PC64LE-NEXT:    xscvdpspn 34, 0
7660; PC64LE-NEXT:    xscvdpspn 35, 1
7661; PC64LE-NEXT:    vmrghw 2, 3, 2
7662; PC64LE-NEXT:    blr
7663;
7664; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7665; PC64LE9:       # %bb.0: # %entry
7666; PC64LE9-NEXT:    li 3, 0
7667; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7668; PC64LE9-NEXT:    mtfprwa 0, 3
7669; PC64LE9-NEXT:    li 3, 4
7670; PC64LE9-NEXT:    xscvsxdsp 0, 0
7671; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7672; PC64LE9-NEXT:    xscvdpspn 35, 0
7673; PC64LE9-NEXT:    mtfprwa 0, 3
7674; PC64LE9-NEXT:    xscvsxdsp 0, 0
7675; PC64LE9-NEXT:    xscvdpspn 34, 0
7676; PC64LE9-NEXT:    vmrghw 2, 2, 3
7677; PC64LE9-NEXT:    blr
7678entry:
7679  %result = call <2 x float>
7680           @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x,
7681                                               metadata !"round.dynamic",
7682                                               metadata !"fpexcept.strict") #0
7683  ret <2 x float> %result
7684}
7685
7686define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7687; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7688; PC64LE:       # %bb.0: # %entry
7689; PC64LE-NEXT:    xvcvsxddp 34, 34
7690; PC64LE-NEXT:    blr
7691;
7692; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7693; PC64LE9:       # %bb.0: # %entry
7694; PC64LE9-NEXT:    xvcvsxddp 34, 34
7695; PC64LE9-NEXT:    blr
7696entry:
7697  %result = call <2 x double>
7698           @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x,
7699                                               metadata !"round.dynamic",
7700                                               metadata !"fpexcept.strict") #0
7701  ret <2 x double> %result
7702}
7703
7704define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7705; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7706; PC64LE:       # %bb.0: # %entry
7707; PC64LE-NEXT:    xxswapd 0, 34
7708; PC64LE-NEXT:    mfvsrd 3, 34
7709; PC64LE-NEXT:    mffprd 4, 0
7710; PC64LE-NEXT:    mtfprd 0, 3
7711; PC64LE-NEXT:    mtfprd 1, 4
7712; PC64LE-NEXT:    xscvsxdsp 0, 0
7713; PC64LE-NEXT:    xscvsxdsp 1, 1
7714; PC64LE-NEXT:    xscvdpspn 34, 0
7715; PC64LE-NEXT:    xscvdpspn 35, 1
7716; PC64LE-NEXT:    vmrghw 2, 2, 3
7717; PC64LE-NEXT:    blr
7718;
7719; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7720; PC64LE9:       # %bb.0: # %entry
7721; PC64LE9-NEXT:    mfvsrld 3, 34
7722; PC64LE9-NEXT:    mtfprd 0, 3
7723; PC64LE9-NEXT:    mfvsrd 3, 34
7724; PC64LE9-NEXT:    xscvsxdsp 0, 0
7725; PC64LE9-NEXT:    xscvdpspn 35, 0
7726; PC64LE9-NEXT:    mtfprd 0, 3
7727; PC64LE9-NEXT:    xscvsxdsp 0, 0
7728; PC64LE9-NEXT:    xscvdpspn 34, 0
7729; PC64LE9-NEXT:    vmrghw 2, 2, 3
7730; PC64LE9-NEXT:    blr
7731entry:
7732  %result = call <2 x float>
7733           @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x,
7734                                               metadata !"round.dynamic",
7735                                               metadata !"fpexcept.strict") #0
7736  ret <2 x float> %result
7737}
7738
7739define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 {
7740; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7741; PC64LE:       # %bb.0: # %entry
7742; PC64LE-NEXT:    xxswapd 0, 34
7743; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
7744; PC64LE-NEXT:    mfvsrwz 3, 34
7745; PC64LE-NEXT:    mtfprwa 3, 3
7746; PC64LE-NEXT:    mffprwz 3, 0
7747; PC64LE-NEXT:    mffprwz 4, 1
7748; PC64LE-NEXT:    mtfprwa 0, 3
7749; PC64LE-NEXT:    mtfprwa 2, 4
7750; PC64LE-NEXT:    xscvsxddp 1, 0
7751; PC64LE-NEXT:    xscvsxddp 2, 2
7752; PC64LE-NEXT:    xscvsxddp 3, 3
7753; PC64LE-NEXT:    blr
7754;
7755; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32:
7756; PC64LE9:       # %bb.0: # %entry
7757; PC64LE9-NEXT:    li 3, 0
7758; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7759; PC64LE9-NEXT:    mtfprwa 0, 3
7760; PC64LE9-NEXT:    li 3, 4
7761; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7762; PC64LE9-NEXT:    xscvsxddp 1, 0
7763; PC64LE9-NEXT:    mtfprwa 0, 3
7764; PC64LE9-NEXT:    mfvsrwz 3, 34
7765; PC64LE9-NEXT:    xscvsxddp 2, 0
7766; PC64LE9-NEXT:    mtfprwa 0, 3
7767; PC64LE9-NEXT:    xscvsxddp 3, 0
7768; PC64LE9-NEXT:    blr
7769entry:
7770  %result = call <3 x double>
7771           @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x,
7772                                               metadata !"round.dynamic",
7773                                               metadata !"fpexcept.strict") #0
7774  ret <3 x double> %result
7775}
7776
7777define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 {
7778; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7779; PC64LE:       # %bb.0: # %entry
7780; PC64LE-NEXT:    xxswapd 0, 34
7781; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
7782; PC64LE-NEXT:    mffprwz 3, 0
7783; PC64LE-NEXT:    mffprwz 4, 1
7784; PC64LE-NEXT:    mtfprwa 0, 3
7785; PC64LE-NEXT:    mtfprwa 1, 4
7786; PC64LE-NEXT:    xscvsxdsp 0, 0
7787; PC64LE-NEXT:    xscvsxdsp 1, 1
7788; PC64LE-NEXT:    mfvsrwz 3, 34
7789; PC64LE-NEXT:    mtfprwa 2, 3
7790; PC64LE-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
7791; PC64LE-NEXT:    addi 3, 3, .LCPI161_0@toc@l
7792; PC64LE-NEXT:    xscvdpspn 34, 0
7793; PC64LE-NEXT:    lvx 4, 0, 3
7794; PC64LE-NEXT:    xscvdpspn 35, 1
7795; PC64LE-NEXT:    xscvsxdsp 0, 2
7796; PC64LE-NEXT:    vmrghw 2, 3, 2
7797; PC64LE-NEXT:    xscvdpspn 35, 0
7798; PC64LE-NEXT:    vperm 2, 3, 2, 4
7799; PC64LE-NEXT:    blr
7800;
7801; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32:
7802; PC64LE9:       # %bb.0: # %entry
7803; PC64LE9-NEXT:    li 3, 0
7804; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7805; PC64LE9-NEXT:    mtfprwa 0, 3
7806; PC64LE9-NEXT:    li 3, 4
7807; PC64LE9-NEXT:    xscvsxdsp 0, 0
7808; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7809; PC64LE9-NEXT:    xscvdpspn 35, 0
7810; PC64LE9-NEXT:    mtfprwa 0, 3
7811; PC64LE9-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
7812; PC64LE9-NEXT:    xscvsxdsp 0, 0
7813; PC64LE9-NEXT:    addi 3, 3, .LCPI161_0@toc@l
7814; PC64LE9-NEXT:    xscvdpspn 36, 0
7815; PC64LE9-NEXT:    vmrghw 3, 4, 3
7816; PC64LE9-NEXT:    lxvx 36, 0, 3
7817; PC64LE9-NEXT:    mfvsrwz 3, 34
7818; PC64LE9-NEXT:    mtfprwa 0, 3
7819; PC64LE9-NEXT:    xscvsxdsp 0, 0
7820; PC64LE9-NEXT:    xscvdpspn 34, 0
7821; PC64LE9-NEXT:    vperm 2, 2, 3, 4
7822; PC64LE9-NEXT:    blr
7823entry:
7824  %result = call <3 x float>
7825           @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x,
7826                                               metadata !"round.dynamic",
7827                                               metadata !"fpexcept.strict") #0
7828  ret <3 x float> %result
7829}
7830
7831define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 {
7832; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7833; PC64LE:       # %bb.0: # %entry
7834; PC64LE-NEXT:    mtfprd 0, 3
7835; PC64LE-NEXT:    mtfprd 2, 4
7836; PC64LE-NEXT:    mtfprd 3, 5
7837; PC64LE-NEXT:    xscvsxddp 1, 0
7838; PC64LE-NEXT:    xscvsxddp 2, 2
7839; PC64LE-NEXT:    xscvsxddp 3, 3
7840; PC64LE-NEXT:    blr
7841;
7842; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64:
7843; PC64LE9:       # %bb.0: # %entry
7844; PC64LE9-NEXT:    mtfprd 0, 3
7845; PC64LE9-NEXT:    xscvsxddp 1, 0
7846; PC64LE9-NEXT:    mtfprd 0, 4
7847; PC64LE9-NEXT:    xscvsxddp 2, 0
7848; PC64LE9-NEXT:    mtfprd 0, 5
7849; PC64LE9-NEXT:    xscvsxddp 3, 0
7850; PC64LE9-NEXT:    blr
7851entry:
7852  %result = call <3 x double>
7853           @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x,
7854                                               metadata !"round.dynamic",
7855                                               metadata !"fpexcept.strict") #0
7856  ret <3 x double> %result
7857}
7858
7859define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 {
7860; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7861; PC64LE:       # %bb.0: # %entry
7862; PC64LE-NEXT:    mtfprd 0, 3
7863; PC64LE-NEXT:    addis 3, 2, .LCPI163_0@toc@ha
7864; PC64LE-NEXT:    mtfprd 1, 4
7865; PC64LE-NEXT:    addi 3, 3, .LCPI163_0@toc@l
7866; PC64LE-NEXT:    xscvsxdsp 0, 0
7867; PC64LE-NEXT:    lvx 4, 0, 3
7868; PC64LE-NEXT:    xscvsxdsp 1, 1
7869; PC64LE-NEXT:    mtfprd 2, 5
7870; PC64LE-NEXT:    xscvdpspn 34, 0
7871; PC64LE-NEXT:    xscvdpspn 35, 1
7872; PC64LE-NEXT:    xscvsxdsp 0, 2
7873; PC64LE-NEXT:    vmrghw 2, 3, 2
7874; PC64LE-NEXT:    xscvdpspn 35, 0
7875; PC64LE-NEXT:    vperm 2, 3, 2, 4
7876; PC64LE-NEXT:    blr
7877;
7878; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64:
7879; PC64LE9:       # %bb.0: # %entry
7880; PC64LE9-NEXT:    mtfprd 0, 3
7881; PC64LE9-NEXT:    addis 3, 2, .LCPI163_0@toc@ha
7882; PC64LE9-NEXT:    xscvsxdsp 0, 0
7883; PC64LE9-NEXT:    addi 3, 3, .LCPI163_0@toc@l
7884; PC64LE9-NEXT:    xscvdpspn 34, 0
7885; PC64LE9-NEXT:    mtfprd 0, 4
7886; PC64LE9-NEXT:    xscvsxdsp 0, 0
7887; PC64LE9-NEXT:    xscvdpspn 35, 0
7888; PC64LE9-NEXT:    mtfprd 0, 5
7889; PC64LE9-NEXT:    xscvsxdsp 0, 0
7890; PC64LE9-NEXT:    vmrghw 2, 3, 2
7891; PC64LE9-NEXT:    lxvx 35, 0, 3
7892; PC64LE9-NEXT:    xscvdpspn 36, 0
7893; PC64LE9-NEXT:    vperm 2, 4, 2, 3
7894; PC64LE9-NEXT:    blr
7895entry:
7896  %result = call <3 x float>
7897           @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x,
7898                                               metadata !"round.dynamic",
7899                                               metadata !"fpexcept.strict") #0
7900  ret <3 x float> %result
7901}
7902
7903define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 {
7904; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7905; PC64LE:       # %bb.0: # %entry
7906; PC64LE-NEXT:    xxswapd 0, 34
7907; PC64LE-NEXT:    mfvsrwz 3, 34
7908; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
7909; PC64LE-NEXT:    mtfprwa 2, 3
7910; PC64LE-NEXT:    mffprwz 3, 0
7911; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
7912; PC64LE-NEXT:    mffprwz 4, 1
7913; PC64LE-NEXT:    mtfprwa 1, 3
7914; PC64LE-NEXT:    mffprwz 3, 0
7915; PC64LE-NEXT:    mtfprwa 3, 4
7916; PC64LE-NEXT:    xscvsxddp 0, 2
7917; PC64LE-NEXT:    mtfprwa 2, 3
7918; PC64LE-NEXT:    xscvsxddp 1, 1
7919; PC64LE-NEXT:    xscvsxddp 3, 3
7920; PC64LE-NEXT:    xscvsxddp 2, 2
7921; PC64LE-NEXT:    xxmrghd 34, 3, 1
7922; PC64LE-NEXT:    xxmrghd 35, 2, 0
7923; PC64LE-NEXT:    blr
7924;
7925; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32:
7926; PC64LE9:       # %bb.0: # %entry
7927; PC64LE9-NEXT:    li 3, 0
7928; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7929; PC64LE9-NEXT:    mtfprwa 0, 3
7930; PC64LE9-NEXT:    li 3, 4
7931; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7932; PC64LE9-NEXT:    xscvsxddp 0, 0
7933; PC64LE9-NEXT:    mtfprwa 1, 3
7934; PC64LE9-NEXT:    li 3, 12
7935; PC64LE9-NEXT:    xscvsxddp 1, 1
7936; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7937; PC64LE9-NEXT:    xxmrghd 0, 1, 0
7938; PC64LE9-NEXT:    mtfprwa 1, 3
7939; PC64LE9-NEXT:    mfvsrwz 3, 34
7940; PC64LE9-NEXT:    mtfprwa 2, 3
7941; PC64LE9-NEXT:    xscvsxddp 1, 1
7942; PC64LE9-NEXT:    xscvsxddp 2, 2
7943; PC64LE9-NEXT:    xxlor 34, 0, 0
7944; PC64LE9-NEXT:    xxmrghd 35, 1, 2
7945; PC64LE9-NEXT:    blr
7946entry:
7947  %result = call <4 x double>
7948           @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x,
7949                                               metadata !"round.dynamic",
7950                                               metadata !"fpexcept.strict") #0
7951  ret <4 x double> %result
7952}
7953
7954define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 {
7955; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7956; PC64LE:       # %bb.0: # %entry
7957; PC64LE-NEXT:    vmrglh 2, 2, 2
7958; PC64LE-NEXT:    vspltisw 3, 8
7959; PC64LE-NEXT:    vadduwm 3, 3, 3
7960; PC64LE-NEXT:    vslw 2, 2, 3
7961; PC64LE-NEXT:    vsraw 2, 2, 3
7962; PC64LE-NEXT:    xvcvsxwsp 34, 34
7963; PC64LE-NEXT:    blr
7964;
7965; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16:
7966; PC64LE9:       # %bb.0: # %entry
7967; PC64LE9-NEXT:    vmrglh 2, 2, 2
7968; PC64LE9-NEXT:    vextsh2w 2, 2
7969; PC64LE9-NEXT:    xvcvsxwsp 34, 34
7970; PC64LE9-NEXT:    blr
7971entry:
7972  %result = call <4 x float>
7973         @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x,
7974                                               metadata !"round.dynamic",
7975                                               metadata !"fpexcept.strict") #0
7976  ret <4 x float> %result
7977}
7978
7979define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 {
7980; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7981; PC64LE:       # %bb.0: # %entry
7982; PC64LE-NEXT:    xvcvsxwsp 34, 34
7983; PC64LE-NEXT:    blr
7984;
7985; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32:
7986; PC64LE9:       # %bb.0: # %entry
7987; PC64LE9-NEXT:    xvcvsxwsp 34, 34
7988; PC64LE9-NEXT:    blr
7989entry:
7990  %result = call <4 x float>
7991           @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x,
7992                                               metadata !"round.dynamic",
7993                                               metadata !"fpexcept.strict") #0
7994  ret <4 x float> %result
7995}
7996
7997define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 {
7998; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64:
7999; PC64LE:       # %bb.0: # %entry
8000; PC64LE-NEXT:    xvcvsxddp 35, 35
8001; PC64LE-NEXT:    xvcvsxddp 34, 34
8002; PC64LE-NEXT:    blr
8003;
8004; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64:
8005; PC64LE9:       # %bb.0: # %entry
8006; PC64LE9-NEXT:    xvcvsxddp 35, 35
8007; PC64LE9-NEXT:    xvcvsxddp 34, 34
8008; PC64LE9-NEXT:    blr
8009entry:
8010  %result = call <4 x double>
8011           @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x,
8012                                               metadata !"round.dynamic",
8013                                               metadata !"fpexcept.strict") #0
8014  ret <4 x double> %result
8015}
8016
8017define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 {
8018; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64:
8019; PC64LE:       # %bb.0: # %entry
8020; PC64LE-NEXT:    xxswapd 0, 34
8021; PC64LE-NEXT:    mfvsrd 3, 34
8022; PC64LE-NEXT:    xxswapd 2, 35
8023; PC64LE-NEXT:    mfvsrd 4, 35
8024; PC64LE-NEXT:    mtfprd 1, 3
8025; PC64LE-NEXT:    mffprd 3, 0
8026; PC64LE-NEXT:    mtfprd 0, 4
8027; PC64LE-NEXT:    mtfprd 3, 3
8028; PC64LE-NEXT:    mffprd 3, 2
8029; PC64LE-NEXT:    xscvsxdsp 1, 1
8030; PC64LE-NEXT:    mtfprd 2, 3
8031; PC64LE-NEXT:    xscvsxdsp 0, 0
8032; PC64LE-NEXT:    xscvsxdsp 3, 3
8033; PC64LE-NEXT:    xscvsxdsp 2, 2
8034; PC64LE-NEXT:    xxmrghd 0, 0, 1
8035; PC64LE-NEXT:    xxmrghd 1, 2, 3
8036; PC64LE-NEXT:    xvcvdpsp 34, 0
8037; PC64LE-NEXT:    xvcvdpsp 35, 1
8038; PC64LE-NEXT:    vmrgew 2, 2, 3
8039; PC64LE-NEXT:    blr
8040;
8041; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64:
8042; PC64LE9:       # %bb.0: # %entry
8043; PC64LE9-NEXT:    mfvsrld 3, 34
8044; PC64LE9-NEXT:    mtfprd 0, 3
8045; PC64LE9-NEXT:    mfvsrld 3, 35
8046; PC64LE9-NEXT:    xscvsxdsp 0, 0
8047; PC64LE9-NEXT:    mtfprd 1, 3
8048; PC64LE9-NEXT:    mfvsrd 3, 34
8049; PC64LE9-NEXT:    xscvsxdsp 1, 1
8050; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8051; PC64LE9-NEXT:    xvcvdpsp 36, 0
8052; PC64LE9-NEXT:    mtfprd 0, 3
8053; PC64LE9-NEXT:    mfvsrd 3, 35
8054; PC64LE9-NEXT:    mtfprd 1, 3
8055; PC64LE9-NEXT:    xscvsxdsp 0, 0
8056; PC64LE9-NEXT:    xscvsxdsp 1, 1
8057; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8058; PC64LE9-NEXT:    xvcvdpsp 34, 0
8059; PC64LE9-NEXT:    vmrgew 2, 2, 4
8060; PC64LE9-NEXT:    blr
8061entry:
8062  %result = call <4 x float>
8063           @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x,
8064                                               metadata !"round.dynamic",
8065                                               metadata !"fpexcept.strict") #0
8066  ret <4 x float> %result
8067}
8068
8069define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 {
8070; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32:
8071; PC64LE:       # %bb.0: # %entry
8072; PC64LE-NEXT:    mtfprwz 0, 3
8073; PC64LE-NEXT:    xscvuxddp 1, 0
8074; PC64LE-NEXT:    blr
8075;
8076; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32:
8077; PC64LE9:       # %bb.0: # %entry
8078; PC64LE9-NEXT:    mtfprwz 0, 3
8079; PC64LE9-NEXT:    xscvuxddp 1, 0
8080; PC64LE9-NEXT:    blr
8081entry:
8082  %result = call <1 x double>
8083           @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x,
8084                                               metadata !"round.dynamic",
8085                                               metadata !"fpexcept.strict") #0
8086  ret <1 x double> %result
8087}
8088
8089define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 {
8090; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32:
8091; PC64LE:       # %bb.0: # %entry
8092; PC64LE-NEXT:    mtfprwz 0, 3
8093; PC64LE-NEXT:    xscvuxdsp 1, 0
8094; PC64LE-NEXT:    blr
8095;
8096; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32:
8097; PC64LE9:       # %bb.0: # %entry
8098; PC64LE9-NEXT:    mtfprwz 0, 3
8099; PC64LE9-NEXT:    xscvuxdsp 1, 0
8100; PC64LE9-NEXT:    blr
8101entry:
8102  %result = call <1 x float>
8103           @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x,
8104                                               metadata !"round.dynamic",
8105                                               metadata !"fpexcept.strict") #0
8106  ret <1 x float> %result
8107}
8108
8109define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 {
8110; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64:
8111; PC64LE:       # %bb.0: # %entry
8112; PC64LE-NEXT:    mtfprd 0, 3
8113; PC64LE-NEXT:    xscvuxddp 1, 0
8114; PC64LE-NEXT:    blr
8115;
8116; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64:
8117; PC64LE9:       # %bb.0: # %entry
8118; PC64LE9-NEXT:    mtfprd 0, 3
8119; PC64LE9-NEXT:    xscvuxddp 1, 0
8120; PC64LE9-NEXT:    blr
8121entry:
8122  %result = call <1 x double>
8123           @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x,
8124                                               metadata !"round.dynamic",
8125                                               metadata !"fpexcept.strict") #0
8126  ret <1 x double> %result
8127}
8128
8129define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 {
8130; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64:
8131; PC64LE:       # %bb.0: # %entry
8132; PC64LE-NEXT:    mtfprd 0, 3
8133; PC64LE-NEXT:    xscvuxdsp 1, 0
8134; PC64LE-NEXT:    blr
8135;
8136; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64:
8137; PC64LE9:       # %bb.0: # %entry
8138; PC64LE9-NEXT:    mtfprd 0, 3
8139; PC64LE9-NEXT:    xscvuxdsp 1, 0
8140; PC64LE9-NEXT:    blr
8141entry:
8142  %result = call <1 x float>
8143           @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x,
8144                                               metadata !"round.dynamic",
8145                                               metadata !"fpexcept.strict") #0
8146  ret <1 x float> %result
8147}
8148
8149define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 {
8150; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16:
8151; PC64LE:       # %bb.0: # %entry
8152; PC64LE-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
8153; PC64LE-NEXT:    xxlxor 36, 36, 36
8154; PC64LE-NEXT:    addi 3, 3, .LCPI173_0@toc@l
8155; PC64LE-NEXT:    lvx 3, 0, 3
8156; PC64LE-NEXT:    vperm 2, 4, 2, 3
8157; PC64LE-NEXT:    xvcvuxddp 34, 34
8158; PC64LE-NEXT:    blr
8159;
8160; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16:
8161; PC64LE9:       # %bb.0: # %entry
8162; PC64LE9-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
8163; PC64LE9-NEXT:    xxlxor 36, 36, 36
8164; PC64LE9-NEXT:    addi 3, 3, .LCPI173_0@toc@l
8165; PC64LE9-NEXT:    lxvx 35, 0, 3
8166; PC64LE9-NEXT:    vperm 2, 4, 2, 3
8167; PC64LE9-NEXT:    xvcvuxddp 34, 34
8168; PC64LE9-NEXT:    blr
8169entry:
8170  %result = call <2 x double>
8171           @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x,
8172                                               metadata !"round.dynamic",
8173                                               metadata !"fpexcept.strict") #0
8174  ret <2 x double> %result
8175}
8176
8177define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 {
8178; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32:
8179; PC64LE:       # %bb.0: # %entry
8180; PC64LE-NEXT:    xxswapd 0, 34
8181; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8182; PC64LE-NEXT:    mffprwz 3, 0
8183; PC64LE-NEXT:    mffprwz 4, 1
8184; PC64LE-NEXT:    mtfprwz 0, 3
8185; PC64LE-NEXT:    mtfprwz 1, 4
8186; PC64LE-NEXT:    xscvuxddp 0, 0
8187; PC64LE-NEXT:    xscvuxddp 1, 1
8188; PC64LE-NEXT:    xxmrghd 34, 1, 0
8189; PC64LE-NEXT:    blr
8190;
8191; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32:
8192; PC64LE9:       # %bb.0: # %entry
8193; PC64LE9-NEXT:    li 3, 0
8194; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8195; PC64LE9-NEXT:    mtfprwz 0, 3
8196; PC64LE9-NEXT:    li 3, 4
8197; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8198; PC64LE9-NEXT:    xscvuxddp 0, 0
8199; PC64LE9-NEXT:    mtfprwz 1, 3
8200; PC64LE9-NEXT:    xscvuxddp 1, 1
8201; PC64LE9-NEXT:    xxmrghd 34, 1, 0
8202; PC64LE9-NEXT:    blr
8203entry:
8204  %result = call <2 x double>
8205           @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x,
8206                                               metadata !"round.dynamic",
8207                                               metadata !"fpexcept.strict") #0
8208  ret <2 x double> %result
8209}
8210
8211define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 {
8212; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32:
8213; PC64LE:       # %bb.0: # %entry
8214; PC64LE-NEXT:    xxswapd 0, 34
8215; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8216; PC64LE-NEXT:    mffprwz 3, 0
8217; PC64LE-NEXT:    mffprwz 4, 1
8218; PC64LE-NEXT:    mtfprwz 0, 3
8219; PC64LE-NEXT:    mtfprwz 1, 4
8220; PC64LE-NEXT:    xscvuxdsp 0, 0
8221; PC64LE-NEXT:    xscvuxdsp 1, 1
8222; PC64LE-NEXT:    xscvdpspn 34, 0
8223; PC64LE-NEXT:    xscvdpspn 35, 1
8224; PC64LE-NEXT:    vmrghw 2, 3, 2
8225; PC64LE-NEXT:    blr
8226;
8227; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32:
8228; PC64LE9:       # %bb.0: # %entry
8229; PC64LE9-NEXT:    li 3, 0
8230; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8231; PC64LE9-NEXT:    mtfprwz 0, 3
8232; PC64LE9-NEXT:    li 3, 4
8233; PC64LE9-NEXT:    xscvuxdsp 0, 0
8234; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8235; PC64LE9-NEXT:    xscvdpspn 35, 0
8236; PC64LE9-NEXT:    mtfprwz 0, 3
8237; PC64LE9-NEXT:    xscvuxdsp 0, 0
8238; PC64LE9-NEXT:    xscvdpspn 34, 0
8239; PC64LE9-NEXT:    vmrghw 2, 2, 3
8240; PC64LE9-NEXT:    blr
8241entry:
8242  %result = call <2 x float>
8243           @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x,
8244                                               metadata !"round.dynamic",
8245                                               metadata !"fpexcept.strict") #0
8246  ret <2 x float> %result
8247}
8248
8249define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 {
8250; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64:
8251; PC64LE:       # %bb.0: # %entry
8252; PC64LE-NEXT:    xvcvuxddp 34, 34
8253; PC64LE-NEXT:    blr
8254;
8255; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64:
8256; PC64LE9:       # %bb.0: # %entry
8257; PC64LE9-NEXT:    xvcvuxddp 34, 34
8258; PC64LE9-NEXT:    blr
8259entry:
8260  %result = call <2 x double>
8261           @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x,
8262                                               metadata !"round.dynamic",
8263                                               metadata !"fpexcept.strict") #0
8264  ret <2 x double> %result
8265}
8266
8267define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 {
8268; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64:
8269; PC64LE:       # %bb.0: # %entry
8270; PC64LE-NEXT:    xxswapd 0, 34
8271; PC64LE-NEXT:    mfvsrd 3, 34
8272; PC64LE-NEXT:    mffprd 4, 0
8273; PC64LE-NEXT:    mtfprd 0, 3
8274; PC64LE-NEXT:    mtfprd 1, 4
8275; PC64LE-NEXT:    xscvuxdsp 0, 0
8276; PC64LE-NEXT:    xscvuxdsp 1, 1
8277; PC64LE-NEXT:    xscvdpspn 34, 0
8278; PC64LE-NEXT:    xscvdpspn 35, 1
8279; PC64LE-NEXT:    vmrghw 2, 2, 3
8280; PC64LE-NEXT:    blr
8281;
8282; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64:
8283; PC64LE9:       # %bb.0: # %entry
8284; PC64LE9-NEXT:    mfvsrld 3, 34
8285; PC64LE9-NEXT:    mtfprd 0, 3
8286; PC64LE9-NEXT:    mfvsrd 3, 34
8287; PC64LE9-NEXT:    xscvuxdsp 0, 0
8288; PC64LE9-NEXT:    xscvdpspn 35, 0
8289; PC64LE9-NEXT:    mtfprd 0, 3
8290; PC64LE9-NEXT:    xscvuxdsp 0, 0
8291; PC64LE9-NEXT:    xscvdpspn 34, 0
8292; PC64LE9-NEXT:    vmrghw 2, 2, 3
8293; PC64LE9-NEXT:    blr
8294entry:
8295  %result = call <2 x float>
8296           @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x,
8297                                               metadata !"round.dynamic",
8298                                               metadata !"fpexcept.strict") #0
8299  ret <2 x float> %result
8300}
8301
8302define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 {
8303; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32:
8304; PC64LE:       # %bb.0: # %entry
8305; PC64LE-NEXT:    xxswapd 0, 34
8306; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8307; PC64LE-NEXT:    mfvsrwz 3, 34
8308; PC64LE-NEXT:    mtfprwz 3, 3
8309; PC64LE-NEXT:    mffprwz 3, 0
8310; PC64LE-NEXT:    mffprwz 4, 1
8311; PC64LE-NEXT:    mtfprwz 0, 3
8312; PC64LE-NEXT:    mtfprwz 2, 4
8313; PC64LE-NEXT:    xscvuxddp 1, 0
8314; PC64LE-NEXT:    xscvuxddp 2, 2
8315; PC64LE-NEXT:    xscvuxddp 3, 3
8316; PC64LE-NEXT:    blr
8317;
8318; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32:
8319; PC64LE9:       # %bb.0: # %entry
8320; PC64LE9-NEXT:    li 3, 0
8321; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8322; PC64LE9-NEXT:    mtfprwz 0, 3
8323; PC64LE9-NEXT:    li 3, 4
8324; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8325; PC64LE9-NEXT:    xscvuxddp 1, 0
8326; PC64LE9-NEXT:    mtfprwz 0, 3
8327; PC64LE9-NEXT:    mfvsrwz 3, 34
8328; PC64LE9-NEXT:    xscvuxddp 2, 0
8329; PC64LE9-NEXT:    mtfprwz 0, 3
8330; PC64LE9-NEXT:    xscvuxddp 3, 0
8331; PC64LE9-NEXT:    blr
8332entry:
8333  %result = call <3 x double>
8334           @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x,
8335                                               metadata !"round.dynamic",
8336                                               metadata !"fpexcept.strict") #0
8337  ret <3 x double> %result
8338}
8339
8340define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 {
8341; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32:
8342; PC64LE:       # %bb.0: # %entry
8343; PC64LE-NEXT:    xxswapd 0, 34
8344; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8345; PC64LE-NEXT:    mffprwz 3, 0
8346; PC64LE-NEXT:    mffprwz 4, 1
8347; PC64LE-NEXT:    mtfprwz 0, 3
8348; PC64LE-NEXT:    mtfprwz 1, 4
8349; PC64LE-NEXT:    xscvuxdsp 0, 0
8350; PC64LE-NEXT:    xscvuxdsp 1, 1
8351; PC64LE-NEXT:    mfvsrwz 3, 34
8352; PC64LE-NEXT:    mtfprwz 2, 3
8353; PC64LE-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
8354; PC64LE-NEXT:    addi 3, 3, .LCPI179_0@toc@l
8355; PC64LE-NEXT:    xscvdpspn 34, 0
8356; PC64LE-NEXT:    lvx 4, 0, 3
8357; PC64LE-NEXT:    xscvdpspn 35, 1
8358; PC64LE-NEXT:    xscvuxdsp 0, 2
8359; PC64LE-NEXT:    vmrghw 2, 3, 2
8360; PC64LE-NEXT:    xscvdpspn 35, 0
8361; PC64LE-NEXT:    vperm 2, 3, 2, 4
8362; PC64LE-NEXT:    blr
8363;
8364; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32:
8365; PC64LE9:       # %bb.0: # %entry
8366; PC64LE9-NEXT:    li 3, 0
8367; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8368; PC64LE9-NEXT:    mtfprwz 0, 3
8369; PC64LE9-NEXT:    li 3, 4
8370; PC64LE9-NEXT:    xscvuxdsp 0, 0
8371; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8372; PC64LE9-NEXT:    xscvdpspn 35, 0
8373; PC64LE9-NEXT:    mtfprwz 0, 3
8374; PC64LE9-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
8375; PC64LE9-NEXT:    xscvuxdsp 0, 0
8376; PC64LE9-NEXT:    addi 3, 3, .LCPI179_0@toc@l
8377; PC64LE9-NEXT:    xscvdpspn 36, 0
8378; PC64LE9-NEXT:    vmrghw 3, 4, 3
8379; PC64LE9-NEXT:    lxvx 36, 0, 3
8380; PC64LE9-NEXT:    mfvsrwz 3, 34
8381; PC64LE9-NEXT:    mtfprwz 0, 3
8382; PC64LE9-NEXT:    xscvuxdsp 0, 0
8383; PC64LE9-NEXT:    xscvdpspn 34, 0
8384; PC64LE9-NEXT:    vperm 2, 2, 3, 4
8385; PC64LE9-NEXT:    blr
8386entry:
8387  %result = call <3 x float>
8388           @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x,
8389                                               metadata !"round.dynamic",
8390                                               metadata !"fpexcept.strict") #0
8391  ret <3 x float> %result
8392}
8393
8394define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 {
8395; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8396; PC64LE:       # %bb.0: # %entry
8397; PC64LE-NEXT:    mtfprd 0, 3
8398; PC64LE-NEXT:    mtfprd 2, 4
8399; PC64LE-NEXT:    mtfprd 3, 5
8400; PC64LE-NEXT:    xscvuxddp 1, 0
8401; PC64LE-NEXT:    xscvuxddp 2, 2
8402; PC64LE-NEXT:    xscvuxddp 3, 3
8403; PC64LE-NEXT:    blr
8404;
8405; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8406; PC64LE9:       # %bb.0: # %entry
8407; PC64LE9-NEXT:    mtfprd 0, 3
8408; PC64LE9-NEXT:    xscvuxddp 1, 0
8409; PC64LE9-NEXT:    mtfprd 0, 4
8410; PC64LE9-NEXT:    xscvuxddp 2, 0
8411; PC64LE9-NEXT:    mtfprd 0, 5
8412; PC64LE9-NEXT:    xscvuxddp 3, 0
8413; PC64LE9-NEXT:    blr
8414entry:
8415  %result = call <3 x double>
8416           @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x,
8417                                               metadata !"round.dynamic",
8418                                               metadata !"fpexcept.strict") #0
8419  ret <3 x double> %result
8420}
8421
8422define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 {
8423; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8424; PC64LE:       # %bb.0: # %entry
8425; PC64LE-NEXT:    mtfprd 0, 3
8426; PC64LE-NEXT:    addis 3, 2, .LCPI181_0@toc@ha
8427; PC64LE-NEXT:    mtfprd 1, 4
8428; PC64LE-NEXT:    addi 3, 3, .LCPI181_0@toc@l
8429; PC64LE-NEXT:    xscvuxdsp 0, 0
8430; PC64LE-NEXT:    lvx 4, 0, 3
8431; PC64LE-NEXT:    xscvuxdsp 1, 1
8432; PC64LE-NEXT:    mtfprd 2, 5
8433; PC64LE-NEXT:    xscvdpspn 34, 0
8434; PC64LE-NEXT:    xscvdpspn 35, 1
8435; PC64LE-NEXT:    xscvuxdsp 0, 2
8436; PC64LE-NEXT:    vmrghw 2, 3, 2
8437; PC64LE-NEXT:    xscvdpspn 35, 0
8438; PC64LE-NEXT:    vperm 2, 3, 2, 4
8439; PC64LE-NEXT:    blr
8440;
8441; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8442; PC64LE9:       # %bb.0: # %entry
8443; PC64LE9-NEXT:    mtfprd 0, 3
8444; PC64LE9-NEXT:    addis 3, 2, .LCPI181_0@toc@ha
8445; PC64LE9-NEXT:    xscvuxdsp 0, 0
8446; PC64LE9-NEXT:    addi 3, 3, .LCPI181_0@toc@l
8447; PC64LE9-NEXT:    xscvdpspn 34, 0
8448; PC64LE9-NEXT:    mtfprd 0, 4
8449; PC64LE9-NEXT:    xscvuxdsp 0, 0
8450; PC64LE9-NEXT:    xscvdpspn 35, 0
8451; PC64LE9-NEXT:    mtfprd 0, 5
8452; PC64LE9-NEXT:    xscvuxdsp 0, 0
8453; PC64LE9-NEXT:    vmrghw 2, 3, 2
8454; PC64LE9-NEXT:    lxvx 35, 0, 3
8455; PC64LE9-NEXT:    xscvdpspn 36, 0
8456; PC64LE9-NEXT:    vperm 2, 4, 2, 3
8457; PC64LE9-NEXT:    blr
8458entry:
8459  %result = call <3 x float>
8460           @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x,
8461                                               metadata !"round.dynamic",
8462                                               metadata !"fpexcept.strict") #0
8463  ret <3 x float> %result
8464}
8465
8466define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 {
8467; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8468; PC64LE:       # %bb.0: # %entry
8469; PC64LE-NEXT:    xxswapd 0, 34
8470; PC64LE-NEXT:    mfvsrwz 3, 34
8471; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8472; PC64LE-NEXT:    mtfprwz 2, 3
8473; PC64LE-NEXT:    mffprwz 3, 0
8474; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
8475; PC64LE-NEXT:    mffprwz 4, 1
8476; PC64LE-NEXT:    mtfprwz 1, 3
8477; PC64LE-NEXT:    mffprwz 3, 0
8478; PC64LE-NEXT:    mtfprwz 3, 4
8479; PC64LE-NEXT:    xscvuxddp 0, 2
8480; PC64LE-NEXT:    mtfprwz 2, 3
8481; PC64LE-NEXT:    xscvuxddp 1, 1
8482; PC64LE-NEXT:    xscvuxddp 3, 3
8483; PC64LE-NEXT:    xscvuxddp 2, 2
8484; PC64LE-NEXT:    xxmrghd 34, 3, 1
8485; PC64LE-NEXT:    xxmrghd 35, 2, 0
8486; PC64LE-NEXT:    blr
8487;
8488; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8489; PC64LE9:       # %bb.0: # %entry
8490; PC64LE9-NEXT:    li 3, 0
8491; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8492; PC64LE9-NEXT:    mtfprwz 0, 3
8493; PC64LE9-NEXT:    li 3, 4
8494; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8495; PC64LE9-NEXT:    xscvuxddp 0, 0
8496; PC64LE9-NEXT:    mtfprwz 1, 3
8497; PC64LE9-NEXT:    li 3, 12
8498; PC64LE9-NEXT:    xscvuxddp 1, 1
8499; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8500; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8501; PC64LE9-NEXT:    mtfprwz 1, 3
8502; PC64LE9-NEXT:    mfvsrwz 3, 34
8503; PC64LE9-NEXT:    mtfprwz 2, 3
8504; PC64LE9-NEXT:    xscvuxddp 1, 1
8505; PC64LE9-NEXT:    xscvuxddp 2, 2
8506; PC64LE9-NEXT:    xxlor 34, 0, 0
8507; PC64LE9-NEXT:    xxmrghd 35, 1, 2
8508; PC64LE9-NEXT:    blr
8509entry:
8510  %result = call <4 x double>
8511           @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x,
8512                                               metadata !"round.dynamic",
8513                                               metadata !"fpexcept.strict") #0
8514  ret <4 x double> %result
8515}
8516
8517define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 {
8518; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8519; PC64LE:       # %bb.0: # %entry
8520; PC64LE-NEXT:    xxlxor 35, 35, 35
8521; PC64LE-NEXT:    vmrglh 2, 3, 2
8522; PC64LE-NEXT:    xvcvuxwsp 34, 34
8523; PC64LE-NEXT:    blr
8524;
8525; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8526; PC64LE9:       # %bb.0: # %entry
8527; PC64LE9-NEXT:    xxlxor 35, 35, 35
8528; PC64LE9-NEXT:    vmrglh 2, 3, 2
8529; PC64LE9-NEXT:    xvcvuxwsp 34, 34
8530; PC64LE9-NEXT:    blr
8531entry:
8532  %result = call <4 x float>
8533         @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x,
8534                                               metadata !"round.dynamic",
8535                                               metadata !"fpexcept.strict") #0
8536  ret <4 x float> %result
8537}
8538
8539define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 {
8540; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8541; PC64LE:       # %bb.0: # %entry
8542; PC64LE-NEXT:    xvcvuxwsp 34, 34
8543; PC64LE-NEXT:    blr
8544;
8545; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8546; PC64LE9:       # %bb.0: # %entry
8547; PC64LE9-NEXT:    xvcvuxwsp 34, 34
8548; PC64LE9-NEXT:    blr
8549entry:
8550  %result = call <4 x float>
8551           @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x,
8552                                               metadata !"round.dynamic",
8553                                               metadata !"fpexcept.strict") #0
8554  ret <4 x float> %result
8555}
8556
8557define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 {
8558; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8559; PC64LE:       # %bb.0: # %entry
8560; PC64LE-NEXT:    xvcvuxddp 35, 35
8561; PC64LE-NEXT:    xvcvuxddp 34, 34
8562; PC64LE-NEXT:    blr
8563;
8564; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8565; PC64LE9:       # %bb.0: # %entry
8566; PC64LE9-NEXT:    xvcvuxddp 35, 35
8567; PC64LE9-NEXT:    xvcvuxddp 34, 34
8568; PC64LE9-NEXT:    blr
8569entry:
8570  %result = call <4 x double>
8571           @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x,
8572                                               metadata !"round.dynamic",
8573                                               metadata !"fpexcept.strict") #0
8574  ret <4 x double> %result
8575}
8576
8577define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 {
8578; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8579; PC64LE:       # %bb.0: # %entry
8580; PC64LE-NEXT:    xxswapd 0, 34
8581; PC64LE-NEXT:    mfvsrd 3, 34
8582; PC64LE-NEXT:    xxswapd 2, 35
8583; PC64LE-NEXT:    mfvsrd 4, 35
8584; PC64LE-NEXT:    mtfprd 1, 3
8585; PC64LE-NEXT:    mffprd 3, 0
8586; PC64LE-NEXT:    mtfprd 0, 4
8587; PC64LE-NEXT:    mtfprd 3, 3
8588; PC64LE-NEXT:    mffprd 3, 2
8589; PC64LE-NEXT:    xscvuxdsp 1, 1
8590; PC64LE-NEXT:    mtfprd 2, 3
8591; PC64LE-NEXT:    xscvuxdsp 0, 0
8592; PC64LE-NEXT:    xscvuxdsp 3, 3
8593; PC64LE-NEXT:    xscvuxdsp 2, 2
8594; PC64LE-NEXT:    xxmrghd 0, 0, 1
8595; PC64LE-NEXT:    xxmrghd 1, 2, 3
8596; PC64LE-NEXT:    xvcvdpsp 34, 0
8597; PC64LE-NEXT:    xvcvdpsp 35, 1
8598; PC64LE-NEXT:    vmrgew 2, 2, 3
8599; PC64LE-NEXT:    blr
8600;
8601; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8602; PC64LE9:       # %bb.0: # %entry
8603; PC64LE9-NEXT:    mfvsrld 3, 34
8604; PC64LE9-NEXT:    mtfprd 0, 3
8605; PC64LE9-NEXT:    mfvsrld 3, 35
8606; PC64LE9-NEXT:    xscvuxdsp 0, 0
8607; PC64LE9-NEXT:    mtfprd 1, 3
8608; PC64LE9-NEXT:    mfvsrd 3, 34
8609; PC64LE9-NEXT:    xscvuxdsp 1, 1
8610; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8611; PC64LE9-NEXT:    xvcvdpsp 36, 0
8612; PC64LE9-NEXT:    mtfprd 0, 3
8613; PC64LE9-NEXT:    mfvsrd 3, 35
8614; PC64LE9-NEXT:    mtfprd 1, 3
8615; PC64LE9-NEXT:    xscvuxdsp 0, 0
8616; PC64LE9-NEXT:    xscvuxdsp 1, 1
8617; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8618; PC64LE9-NEXT:    xvcvdpsp 34, 0
8619; PC64LE9-NEXT:    vmrgew 2, 2, 4
8620; PC64LE9-NEXT:    blr
8621entry:
8622  %result = call <4 x float>
8623           @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x,
8624                                               metadata !"round.dynamic",
8625                                               metadata !"fpexcept.strict") #0
8626  ret <4 x float> %result
8627}
8628
8629attributes #0 = { nounwind strictfp noimplicitfloat }
8630attributes #1 = { strictfp }
8631
8632; Single width declarations
8633declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8634declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8635declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8636declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8637declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8638declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
8639declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8640declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
8641declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
8642declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
8643declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
8644declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
8645declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
8646declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
8647declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
8648declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
8649declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
8650declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata)
8651declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata)
8652declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata)
8653declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata)
8654declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata)
8655declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata)
8656declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata)
8657declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata)
8658declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata)
8659declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata)
8660declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
8661declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
8662declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)
8663declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)
8664declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)
8665declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
8666declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8667declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8668declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8669declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8670declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8671declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8672declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8673declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8674declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8675declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8676
8677; Scalar width declarations
8678declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8679declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8680declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8681declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8682declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8683declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
8684declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8685declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
8686declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
8687declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
8688declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
8689declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
8690declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
8691declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
8692declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
8693declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
8694declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
8695declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata)
8696declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata)
8697declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata)
8698declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata)
8699declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata)
8700declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata)
8701declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata)
8702declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata)
8703declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata)
8704declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata)
8705declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
8706declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
8707declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata)
8708declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata)
8709declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata)
8710declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata)
8711declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8712declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8713declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8714declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8715declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
8716declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
8717declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
8718declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
8719
8720; Illegal width declarations
8721declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8722declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8723declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8724declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8725declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8726declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8727declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8728declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8729declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8730declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8731declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
8732declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
8733declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
8734declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
8735declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
8736declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
8737declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
8738declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
8739declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
8740declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
8741declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
8742declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
8743declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
8744declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
8745declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
8746declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
8747declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
8748declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
8749declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
8750declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
8751declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
8752declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
8753declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
8754declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
8755declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata)
8756declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata)
8757declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata)
8758declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata)
8759declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata)
8760declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata)
8761declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata)
8762declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata)
8763declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata)
8764declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata)
8765declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata)
8766declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata)
8767declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
8768declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
8769declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata)
8770declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata)
8771declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata)
8772declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata)
8773declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata)
8774declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata)
8775declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata)
8776declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata)
8777declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8778declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8779declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8780declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8781declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
8782declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
8783declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
8784declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
8785
8786; Double width declarations
8787declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8788declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8789declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8790declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8791declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8792declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
8793declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
8794declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
8795declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
8796declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
8797declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
8798declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
8799declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
8800declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
8801declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
8802declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
8803declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
8804declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata)
8805declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata)
8806declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)
8807declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata)
8808declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata)
8809declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata)
8810declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)
8811declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata)
8812declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata)
8813declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata)
8814declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
8815declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
8816declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata)
8817declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata)
8818declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata)
8819declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata)
8820declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8821declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8822declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8823declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8824declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)
8825declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
8826declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
8827declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
8828declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
8829declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)
8830