• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 1, 1
83; PC64LE-NEXT:    xscvdpspn 2, 2
84; PC64LE-NEXT:    xscvdpspn 0, 0
85; PC64LE-NEXT:    xxsldwi 34, 1, 1, 3
86; PC64LE-NEXT:    xxsldwi 35, 2, 2, 3
87; PC64LE-NEXT:    vmrghw 2, 3, 2
88; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
89; PC64LE-NEXT:    vperm 2, 3, 2, 4
90; PC64LE-NEXT:    blr
91;
92; PC64LE9-LABEL: constrained_vector_fdiv_v3f32:
93; PC64LE9:       # %bb.0: # %entry
94; PC64LE9-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
95; PC64LE9-NEXT:    lfs 0, .LCPI2_0@toc@l(3)
96; PC64LE9-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
97; PC64LE9-NEXT:    lfs 1, .LCPI2_1@toc@l(3)
98; PC64LE9-NEXT:    addis 3, 2, .LCPI2_2@toc@ha
99; PC64LE9-NEXT:    xsdivsp 1, 1, 0
100; PC64LE9-NEXT:    lfs 2, .LCPI2_2@toc@l(3)
101; PC64LE9-NEXT:    addis 3, 2, .LCPI2_3@toc@ha
102; PC64LE9-NEXT:    lfs 3, .LCPI2_3@toc@l(3)
103; PC64LE9-NEXT:    addis 3, 2, .LCPI2_4@toc@ha
104; PC64LE9-NEXT:    addi 3, 3, .LCPI2_4@toc@l
105; PC64LE9-NEXT:    lxvx 36, 0, 3
106; PC64LE9-NEXT:    xsdivsp 2, 2, 0
107; PC64LE9-NEXT:    xsdivsp 0, 3, 0
108; PC64LE9-NEXT:    xscvdpspn 0, 0
109; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
110; PC64LE9-NEXT:    xscvdpspn 0, 2
111; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
112; PC64LE9-NEXT:    xscvdpspn 0, 1
113; PC64LE9-NEXT:    vmrghw 2, 3, 2
114; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
115; PC64LE9-NEXT:    vperm 2, 3, 2, 4
116; PC64LE9-NEXT:    blr
117entry:
118  %div = call <3 x float> @llvm.experimental.constrained.fdiv.v3f32(
119           <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
120           <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
121           metadata !"round.dynamic",
122           metadata !"fpexcept.strict") #1
123  ret <3 x float> %div
124}
125
126define <3 x double> @constrained_vector_fdiv_v3f64() #0 {
127; PC64LE-LABEL: constrained_vector_fdiv_v3f64:
128; PC64LE:       # %bb.0: # %entry
129; PC64LE-NEXT:    addis 3, 2, .LCPI3_2@toc@ha
130; PC64LE-NEXT:    addis 4, 2, .LCPI3_3@toc@ha
131; PC64LE-NEXT:    addi 3, 3, .LCPI3_2@toc@l
132; PC64LE-NEXT:    addi 4, 4, .LCPI3_3@toc@l
133; PC64LE-NEXT:    lxvd2x 0, 0, 3
134; PC64LE-NEXT:    lxvd2x 1, 0, 4
135; PC64LE-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
136; PC64LE-NEXT:    addis 4, 2, .LCPI3_1@toc@ha
137; PC64LE-NEXT:    lfs 3, .LCPI3_0@toc@l(3)
138; PC64LE-NEXT:    xxswapd 0, 0
139; PC64LE-NEXT:    xxswapd 1, 1
140; PC64LE-NEXT:    xvdivdp 2, 1, 0
141; PC64LE-NEXT:    lfs 0, .LCPI3_1@toc@l(4)
142; PC64LE-NEXT:    xsdivdp 3, 0, 3
143; PC64LE-NEXT:    xxswapd 1, 2
144; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
145; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
146; PC64LE-NEXT:    blr
147;
148; PC64LE9-LABEL: constrained_vector_fdiv_v3f64:
149; PC64LE9:       # %bb.0: # %entry
150; PC64LE9-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
151; PC64LE9-NEXT:    lfs 0, .LCPI3_0@toc@l(3)
152; PC64LE9-NEXT:    addis 3, 2, .LCPI3_1@toc@ha
153; PC64LE9-NEXT:    lfs 1, .LCPI3_1@toc@l(3)
154; PC64LE9-NEXT:    addis 3, 2, .LCPI3_2@toc@ha
155; PC64LE9-NEXT:    addi 3, 3, .LCPI3_2@toc@l
156; PC64LE9-NEXT:    xsdivdp 3, 1, 0
157; PC64LE9-NEXT:    lxvx 0, 0, 3
158; PC64LE9-NEXT:    addis 3, 2, .LCPI3_3@toc@ha
159; PC64LE9-NEXT:    addi 3, 3, .LCPI3_3@toc@l
160; PC64LE9-NEXT:    lxvx 1, 0, 3
161; PC64LE9-NEXT:    xvdivdp 2, 1, 0
162; PC64LE9-NEXT:    xxswapd 1, 2
163; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
164; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
165; PC64LE9-NEXT:    blr
166entry:
167  %div = call <3 x double> @llvm.experimental.constrained.fdiv.v3f64(
168           <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
169           <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
170           metadata !"round.dynamic",
171           metadata !"fpexcept.strict") #1
172  ret <3 x double> %div
173}
174
175define <4 x double> @constrained_vector_fdiv_v4f64() #0 {
176; PC64LE-LABEL: constrained_vector_fdiv_v4f64:
177; PC64LE:       # %bb.0: # %entry
178; PC64LE-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
179; PC64LE-NEXT:    addis 4, 2, .LCPI4_1@toc@ha
180; PC64LE-NEXT:    addis 5, 2, .LCPI4_2@toc@ha
181; PC64LE-NEXT:    addi 3, 3, .LCPI4_0@toc@l
182; PC64LE-NEXT:    lxvd2x 0, 0, 3
183; PC64LE-NEXT:    addi 3, 4, .LCPI4_1@toc@l
184; PC64LE-NEXT:    addi 4, 5, .LCPI4_2@toc@l
185; PC64LE-NEXT:    lxvd2x 1, 0, 3
186; PC64LE-NEXT:    lxvd2x 2, 0, 4
187; PC64LE-NEXT:    xxswapd 0, 0
188; PC64LE-NEXT:    xxswapd 1, 1
189; PC64LE-NEXT:    xxswapd 2, 2
190; PC64LE-NEXT:    xvdivdp 35, 1, 0
191; PC64LE-NEXT:    xvdivdp 34, 2, 0
192; PC64LE-NEXT:    blr
193;
194; PC64LE9-LABEL: constrained_vector_fdiv_v4f64:
195; PC64LE9:       # %bb.0: # %entry
196; PC64LE9-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
197; PC64LE9-NEXT:    addi 3, 3, .LCPI4_0@toc@l
198; PC64LE9-NEXT:    lxvx 0, 0, 3
199; PC64LE9-NEXT:    addis 3, 2, .LCPI4_1@toc@ha
200; PC64LE9-NEXT:    addi 3, 3, .LCPI4_1@toc@l
201; PC64LE9-NEXT:    lxvx 1, 0, 3
202; PC64LE9-NEXT:    addis 3, 2, .LCPI4_2@toc@ha
203; PC64LE9-NEXT:    addi 3, 3, .LCPI4_2@toc@l
204; PC64LE9-NEXT:    xvdivdp 35, 1, 0
205; PC64LE9-NEXT:    lxvx 1, 0, 3
206; PC64LE9-NEXT:    xvdivdp 34, 1, 0
207; PC64LE9-NEXT:    blr
208entry:
209  %div = call <4 x double> @llvm.experimental.constrained.fdiv.v4f64(
210           <4 x double> <double 1.000000e+00, double 2.000000e+00,
211                         double 3.000000e+00, double 4.000000e+00>,
212           <4 x double> <double 1.000000e+01, double 1.000000e+01,
213                         double 1.000000e+01, double 1.000000e+01>,
214           metadata !"round.dynamic",
215           metadata !"fpexcept.strict") #1
216  ret <4 x double> %div
217}
218
219define <1 x float> @constrained_vector_frem_v1f32() #0 {
220; PC64LE-LABEL: constrained_vector_frem_v1f32:
221; PC64LE:       # %bb.0: # %entry
222; PC64LE-NEXT:    mflr 0
223; PC64LE-NEXT:    std 0, 16(1)
224; PC64LE-NEXT:    stdu 1, -32(1)
225; PC64LE-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
226; PC64LE-NEXT:    addis 4, 2, .LCPI5_1@toc@ha
227; PC64LE-NEXT:    lfs 1, .LCPI5_0@toc@l(3)
228; PC64LE-NEXT:    lfs 2, .LCPI5_1@toc@l(4)
229; PC64LE-NEXT:    bl fmodf
230; PC64LE-NEXT:    nop
231; PC64LE-NEXT:    addi 1, 1, 32
232; PC64LE-NEXT:    ld 0, 16(1)
233; PC64LE-NEXT:    mtlr 0
234; PC64LE-NEXT:    blr
235;
236; PC64LE9-LABEL: constrained_vector_frem_v1f32:
237; PC64LE9:       # %bb.0: # %entry
238; PC64LE9-NEXT:    mflr 0
239; PC64LE9-NEXT:    std 0, 16(1)
240; PC64LE9-NEXT:    stdu 1, -32(1)
241; PC64LE9-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
242; PC64LE9-NEXT:    lfs 1, .LCPI5_0@toc@l(3)
243; PC64LE9-NEXT:    addis 3, 2, .LCPI5_1@toc@ha
244; PC64LE9-NEXT:    lfs 2, .LCPI5_1@toc@l(3)
245; PC64LE9-NEXT:    bl fmodf
246; PC64LE9-NEXT:    nop
247; PC64LE9-NEXT:    addi 1, 1, 32
248; PC64LE9-NEXT:    ld 0, 16(1)
249; PC64LE9-NEXT:    mtlr 0
250; PC64LE9-NEXT:    blr
251entry:
252  %rem = call <1 x float> @llvm.experimental.constrained.frem.v1f32(
253           <1 x float> <float 1.000000e+00>,
254           <1 x float> <float 1.000000e+01>,
255           metadata !"round.dynamic",
256           metadata !"fpexcept.strict") #1
257  ret <1 x float> %rem
258}
259
260define <2 x double> @constrained_vector_frem_v2f64() #0 {
261; PC64LE-LABEL: constrained_vector_frem_v2f64:
262; PC64LE:       # %bb.0: # %entry
263; PC64LE-NEXT:    mflr 0
264; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
265; PC64LE-NEXT:    std 0, 16(1)
266; PC64LE-NEXT:    stdu 1, -80(1)
267; PC64LE-NEXT:    addis 4, 2, .LCPI6_1@toc@ha
268; PC64LE-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
269; PC64LE-NEXT:    lfs 31, .LCPI6_1@toc@l(4)
270; PC64LE-NEXT:    lfs 1, .LCPI6_0@toc@l(3)
271; PC64LE-NEXT:    fmr 2, 31
272; PC64LE-NEXT:    bl fmod
273; PC64LE-NEXT:    nop
274; PC64LE-NEXT:    li 3, 48
275; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
276; PC64LE-NEXT:    fmr 2, 31
277; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
278; PC64LE-NEXT:    addis 3, 2, .LCPI6_2@toc@ha
279; PC64LE-NEXT:    lfs 1, .LCPI6_2@toc@l(3)
280; PC64LE-NEXT:    bl fmod
281; PC64LE-NEXT:    nop
282; PC64LE-NEXT:    li 3, 48
283; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
284; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
285; PC64LE-NEXT:    xxmrghd 34, 1, 0
286; PC64LE-NEXT:    addi 1, 1, 80
287; PC64LE-NEXT:    ld 0, 16(1)
288; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
289; PC64LE-NEXT:    mtlr 0
290; PC64LE-NEXT:    blr
291;
292; PC64LE9-LABEL: constrained_vector_frem_v2f64:
293; PC64LE9:       # %bb.0: # %entry
294; PC64LE9-NEXT:    mflr 0
295; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
296; PC64LE9-NEXT:    std 0, 16(1)
297; PC64LE9-NEXT:    stdu 1, -64(1)
298; PC64LE9-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
299; PC64LE9-NEXT:    lfs 1, .LCPI6_0@toc@l(3)
300; PC64LE9-NEXT:    addis 3, 2, .LCPI6_1@toc@ha
301; PC64LE9-NEXT:    lfs 31, .LCPI6_1@toc@l(3)
302; PC64LE9-NEXT:    fmr 2, 31
303; PC64LE9-NEXT:    bl fmod
304; PC64LE9-NEXT:    nop
305; PC64LE9-NEXT:    addis 3, 2, .LCPI6_2@toc@ha
306; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
307; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
308; PC64LE9-NEXT:    fmr 2, 31
309; PC64LE9-NEXT:    lfs 1, .LCPI6_2@toc@l(3)
310; PC64LE9-NEXT:    bl fmod
311; PC64LE9-NEXT:    nop
312; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
313; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
314; PC64LE9-NEXT:    xxmrghd 34, 1, 0
315; PC64LE9-NEXT:    addi 1, 1, 64
316; PC64LE9-NEXT:    ld 0, 16(1)
317; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
318; PC64LE9-NEXT:    mtlr 0
319; PC64LE9-NEXT:    blr
320entry:
321  %rem = call <2 x double> @llvm.experimental.constrained.frem.v2f64(
322           <2 x double> <double 1.000000e+00, double 2.000000e+00>,
323           <2 x double> <double 1.000000e+01, double 1.000000e+01>,
324           metadata !"round.dynamic",
325           metadata !"fpexcept.strict") #1
326  ret <2 x double> %rem
327}
328
329define <3 x float> @constrained_vector_frem_v3f32() #0 {
330; PC64LE-LABEL: constrained_vector_frem_v3f32:
331; PC64LE:       # %bb.0: # %entry
332; PC64LE-NEXT:    mflr 0
333; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
334; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
335; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
336; PC64LE-NEXT:    std 0, 16(1)
337; PC64LE-NEXT:    stdu 1, -64(1)
338; PC64LE-NEXT:    addis 4, 2, .LCPI7_1@toc@ha
339; PC64LE-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
340; PC64LE-NEXT:    lfs 31, .LCPI7_1@toc@l(4)
341; PC64LE-NEXT:    lfs 1, .LCPI7_0@toc@l(3)
342; PC64LE-NEXT:    fmr 2, 31
343; PC64LE-NEXT:    bl fmodf
344; PC64LE-NEXT:    nop
345; PC64LE-NEXT:    addis 3, 2, .LCPI7_2@toc@ha
346; PC64LE-NEXT:    fmr 2, 31
347; PC64LE-NEXT:    fmr 30, 1
348; PC64LE-NEXT:    lfs 1, .LCPI7_2@toc@l(3)
349; PC64LE-NEXT:    bl fmodf
350; PC64LE-NEXT:    nop
351; PC64LE-NEXT:    addis 3, 2, .LCPI7_3@toc@ha
352; PC64LE-NEXT:    fmr 2, 31
353; PC64LE-NEXT:    fmr 29, 1
354; PC64LE-NEXT:    lfs 1, .LCPI7_3@toc@l(3)
355; PC64LE-NEXT:    bl fmodf
356; PC64LE-NEXT:    nop
357; PC64LE-NEXT:    xscvdpspn 0, 29
358; PC64LE-NEXT:    addis 3, 2, .LCPI7_4@toc@ha
359; PC64LE-NEXT:    xscvdpspn 1, 1
360; PC64LE-NEXT:    addi 3, 3, .LCPI7_4@toc@l
361; PC64LE-NEXT:    lvx 4, 0, 3
362; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
363; PC64LE-NEXT:    xscvdpspn 0, 30
364; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
365; PC64LE-NEXT:    vmrghw 2, 2, 3
366; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
367; PC64LE-NEXT:    vperm 2, 3, 2, 4
368; PC64LE-NEXT:    addi 1, 1, 64
369; PC64LE-NEXT:    ld 0, 16(1)
370; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
371; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
372; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
373; PC64LE-NEXT:    mtlr 0
374; PC64LE-NEXT:    blr
375;
376; PC64LE9-LABEL: constrained_vector_frem_v3f32:
377; PC64LE9:       # %bb.0: # %entry
378; PC64LE9-NEXT:    mflr 0
379; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
380; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
381; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
382; PC64LE9-NEXT:    std 0, 16(1)
383; PC64LE9-NEXT:    stdu 1, -64(1)
384; PC64LE9-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
385; PC64LE9-NEXT:    lfs 1, .LCPI7_0@toc@l(3)
386; PC64LE9-NEXT:    addis 3, 2, .LCPI7_1@toc@ha
387; PC64LE9-NEXT:    lfs 31, .LCPI7_1@toc@l(3)
388; PC64LE9-NEXT:    fmr 2, 31
389; PC64LE9-NEXT:    bl fmodf
390; PC64LE9-NEXT:    nop
391; PC64LE9-NEXT:    addis 3, 2, .LCPI7_2@toc@ha
392; PC64LE9-NEXT:    fmr 30, 1
393; PC64LE9-NEXT:    fmr 2, 31
394; PC64LE9-NEXT:    lfs 1, .LCPI7_2@toc@l(3)
395; PC64LE9-NEXT:    bl fmodf
396; PC64LE9-NEXT:    nop
397; PC64LE9-NEXT:    addis 3, 2, .LCPI7_3@toc@ha
398; PC64LE9-NEXT:    fmr 29, 1
399; PC64LE9-NEXT:    fmr 2, 31
400; PC64LE9-NEXT:    lfs 1, .LCPI7_3@toc@l(3)
401; PC64LE9-NEXT:    bl fmodf
402; PC64LE9-NEXT:    nop
403; PC64LE9-NEXT:    xscvdpspn 0, 1
404; PC64LE9-NEXT:    addis 3, 2, .LCPI7_4@toc@ha
405; PC64LE9-NEXT:    addi 3, 3, .LCPI7_4@toc@l
406; PC64LE9-NEXT:    lxvx 36, 0, 3
407; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
408; PC64LE9-NEXT:    xscvdpspn 0, 29
409; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
410; PC64LE9-NEXT:    xscvdpspn 0, 30
411; PC64LE9-NEXT:    vmrghw 2, 3, 2
412; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
413; PC64LE9-NEXT:    vperm 2, 3, 2, 4
414; PC64LE9-NEXT:    addi 1, 1, 64
415; PC64LE9-NEXT:    ld 0, 16(1)
416; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
417; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
418; PC64LE9-NEXT:    mtlr 0
419; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
420; PC64LE9-NEXT:    blr
421entry:
422  %rem = call <3 x float> @llvm.experimental.constrained.frem.v3f32(
423           <3 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>,
424           <3 x float> <float 1.000000e+01, float 1.000000e+01, float 1.000000e+01>,
425           metadata !"round.dynamic",
426           metadata !"fpexcept.strict") #1
427  ret <3 x float> %rem
428}
429
430define <3 x double> @constrained_vector_frem_v3f64() #0 {
431; PC64LE-LABEL: constrained_vector_frem_v3f64:
432; PC64LE:       # %bb.0: # %entry
433; PC64LE-NEXT:    mflr 0
434; PC64LE-NEXT:    std 0, 16(1)
435; PC64LE-NEXT:    stdu 1, -96(1)
436; PC64LE-NEXT:    addis 4, 2, .LCPI8_1@toc@ha
437; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
438; PC64LE-NEXT:    li 3, 64
439; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
440; PC64LE-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
441; PC64LE-NEXT:    lfs 31, .LCPI8_1@toc@l(4)
442; PC64LE-NEXT:    lfs 1, .LCPI8_0@toc@l(3)
443; PC64LE-NEXT:    fmr 2, 31
444; PC64LE-NEXT:    bl fmod
445; PC64LE-NEXT:    nop
446; PC64LE-NEXT:    li 3, 48
447; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
448; PC64LE-NEXT:    fmr 2, 31
449; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
450; PC64LE-NEXT:    addis 3, 2, .LCPI8_2@toc@ha
451; PC64LE-NEXT:    lfs 1, .LCPI8_2@toc@l(3)
452; PC64LE-NEXT:    bl fmod
453; PC64LE-NEXT:    nop
454; PC64LE-NEXT:    li 3, 48
455; PC64LE-NEXT:    fmr 2, 31
456; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
457; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
458; PC64LE-NEXT:    addis 3, 2, .LCPI8_3@toc@ha
459; PC64LE-NEXT:    xxmrghd 63, 1, 0
460; PC64LE-NEXT:    lfs 1, .LCPI8_3@toc@l(3)
461; PC64LE-NEXT:    bl fmod
462; PC64LE-NEXT:    nop
463; PC64LE-NEXT:    xxswapd 0, 63
464; PC64LE-NEXT:    li 3, 64
465; PC64LE-NEXT:    xxlor 2, 63, 63
466; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
467; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
468; PC64LE-NEXT:    fmr 3, 1
469; PC64LE-NEXT:    fmr 1, 0
470; PC64LE-NEXT:    addi 1, 1, 96
471; PC64LE-NEXT:    ld 0, 16(1)
472; PC64LE-NEXT:    mtlr 0
473; PC64LE-NEXT:    blr
474;
475; PC64LE9-LABEL: constrained_vector_frem_v3f64:
476; PC64LE9:       # %bb.0: # %entry
477; PC64LE9-NEXT:    mflr 0
478; PC64LE9-NEXT:    std 0, 16(1)
479; PC64LE9-NEXT:    stdu 1, -80(1)
480; PC64LE9-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
481; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
482; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
483; PC64LE9-NEXT:    lfs 1, .LCPI8_0@toc@l(3)
484; PC64LE9-NEXT:    addis 3, 2, .LCPI8_1@toc@ha
485; PC64LE9-NEXT:    lfs 31, .LCPI8_1@toc@l(3)
486; PC64LE9-NEXT:    fmr 2, 31
487; PC64LE9-NEXT:    bl fmod
488; PC64LE9-NEXT:    nop
489; PC64LE9-NEXT:    addis 3, 2, .LCPI8_2@toc@ha
490; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
491; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
492; PC64LE9-NEXT:    fmr 2, 31
493; PC64LE9-NEXT:    lfs 1, .LCPI8_2@toc@l(3)
494; PC64LE9-NEXT:    bl fmod
495; PC64LE9-NEXT:    nop
496; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
497; PC64LE9-NEXT:    addis 3, 2, .LCPI8_3@toc@ha
498; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
499; PC64LE9-NEXT:    fmr 2, 31
500; PC64LE9-NEXT:    xxmrghd 63, 1, 0
501; PC64LE9-NEXT:    lfs 1, .LCPI8_3@toc@l(3)
502; PC64LE9-NEXT:    bl fmod
503; PC64LE9-NEXT:    nop
504; PC64LE9-NEXT:    fmr 3, 1
505; PC64LE9-NEXT:    xxswapd 1, 63
506; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
507; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
508; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
509; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
510; PC64LE9-NEXT:    addi 1, 1, 80
511; PC64LE9-NEXT:    ld 0, 16(1)
512; PC64LE9-NEXT:    mtlr 0
513; PC64LE9-NEXT:    blr
514entry:
515  %rem = call <3 x double> @llvm.experimental.constrained.frem.v3f64(
516           <3 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00>,
517           <3 x double> <double 1.000000e+01, double 1.000000e+01, double 1.000000e+01>,
518           metadata !"round.dynamic",
519           metadata !"fpexcept.strict") #1
520  ret <3 x double> %rem
521}
522
523define <4 x double> @constrained_vector_frem_v4f64() #0 {
524; PC64LE-LABEL: constrained_vector_frem_v4f64:
525; PC64LE:       # %bb.0:
526; PC64LE-NEXT:    mflr 0
527; PC64LE-NEXT:    std 0, 16(1)
528; PC64LE-NEXT:    stdu 1, -96(1)
529; PC64LE-NEXT:    addis 4, 2, .LCPI9_1@toc@ha
530; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
531; PC64LE-NEXT:    li 3, 64
532; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
533; PC64LE-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
534; PC64LE-NEXT:    lfs 31, .LCPI9_1@toc@l(4)
535; PC64LE-NEXT:    lfs 1, .LCPI9_0@toc@l(3)
536; PC64LE-NEXT:    fmr 2, 31
537; PC64LE-NEXT:    bl fmod
538; PC64LE-NEXT:    nop
539; PC64LE-NEXT:    li 3, 48
540; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
541; PC64LE-NEXT:    fmr 2, 31
542; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
543; PC64LE-NEXT:    addis 3, 2, .LCPI9_2@toc@ha
544; PC64LE-NEXT:    lfs 1, .LCPI9_2@toc@l(3)
545; PC64LE-NEXT:    bl fmod
546; PC64LE-NEXT:    nop
547; PC64LE-NEXT:    li 3, 48
548; PC64LE-NEXT:    fmr 2, 31
549; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
550; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
551; PC64LE-NEXT:    addis 3, 2, .LCPI9_3@toc@ha
552; PC64LE-NEXT:    xxmrghd 63, 1, 0
553; PC64LE-NEXT:    lfs 1, .LCPI9_3@toc@l(3)
554; PC64LE-NEXT:    bl fmod
555; PC64LE-NEXT:    nop
556; PC64LE-NEXT:    li 3, 48
557; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
558; PC64LE-NEXT:    fmr 2, 31
559; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
560; PC64LE-NEXT:    addis 3, 2, .LCPI9_4@toc@ha
561; PC64LE-NEXT:    lfs 1, .LCPI9_4@toc@l(3)
562; PC64LE-NEXT:    bl fmod
563; PC64LE-NEXT:    nop
564; PC64LE-NEXT:    li 3, 48
565; PC64LE-NEXT:    vmr 2, 31
566; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
567; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
568; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
569; PC64LE-NEXT:    li 3, 64
570; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
571; PC64LE-NEXT:    xxmrghd 35, 1, 0
572; PC64LE-NEXT:    addi 1, 1, 96
573; PC64LE-NEXT:    ld 0, 16(1)
574; PC64LE-NEXT:    mtlr 0
575; PC64LE-NEXT:    blr
576;
577; PC64LE9-LABEL: constrained_vector_frem_v4f64:
578; PC64LE9:       # %bb.0:
579; PC64LE9-NEXT:    mflr 0
580; PC64LE9-NEXT:    std 0, 16(1)
581; PC64LE9-NEXT:    stdu 1, -80(1)
582; PC64LE9-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
583; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
584; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
585; PC64LE9-NEXT:    lfs 1, .LCPI9_0@toc@l(3)
586; PC64LE9-NEXT:    addis 3, 2, .LCPI9_1@toc@ha
587; PC64LE9-NEXT:    lfs 31, .LCPI9_1@toc@l(3)
588; PC64LE9-NEXT:    fmr 2, 31
589; PC64LE9-NEXT:    bl fmod
590; PC64LE9-NEXT:    nop
591; PC64LE9-NEXT:    addis 3, 2, .LCPI9_2@toc@ha
592; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
593; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
594; PC64LE9-NEXT:    fmr 2, 31
595; PC64LE9-NEXT:    lfs 1, .LCPI9_2@toc@l(3)
596; PC64LE9-NEXT:    bl fmod
597; PC64LE9-NEXT:    nop
598; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
599; PC64LE9-NEXT:    addis 3, 2, .LCPI9_3@toc@ha
600; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
601; PC64LE9-NEXT:    fmr 2, 31
602; PC64LE9-NEXT:    xxmrghd 63, 1, 0
603; PC64LE9-NEXT:    lfs 1, .LCPI9_3@toc@l(3)
604; PC64LE9-NEXT:    bl fmod
605; PC64LE9-NEXT:    nop
606; PC64LE9-NEXT:    addis 3, 2, .LCPI9_4@toc@ha
607; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
608; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
609; PC64LE9-NEXT:    fmr 2, 31
610; PC64LE9-NEXT:    lfs 1, .LCPI9_4@toc@l(3)
611; PC64LE9-NEXT:    bl fmod
612; PC64LE9-NEXT:    nop
613; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
614; PC64LE9-NEXT:    vmr 2, 31
615; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
616; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
617; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
618; PC64LE9-NEXT:    xxmrghd 35, 1, 0
619; PC64LE9-NEXT:    addi 1, 1, 80
620; PC64LE9-NEXT:    ld 0, 16(1)
621; PC64LE9-NEXT:    mtlr 0
622; PC64LE9-NEXT:    blr
623  %rem = call <4 x double> @llvm.experimental.constrained.frem.v4f64(
624           <4 x double> <double 1.000000e+00, double 2.000000e+00,
625                         double 3.000000e+00, double 4.000000e+00>,
626           <4 x double> <double 1.000000e+01, double 1.000000e+01,
627                         double 1.000000e+01, double 1.000000e+01>,
628           metadata !"round.dynamic",
629           metadata !"fpexcept.strict") #1
630  ret <4 x double> %rem
631}
632
633define <1 x float> @constrained_vector_fmul_v1f32() #0 {
634; PC64LE-LABEL: constrained_vector_fmul_v1f32:
635; PC64LE:       # %bb.0: # %entry
636; PC64LE-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
637; PC64LE-NEXT:    addis 4, 2, .LCPI10_1@toc@ha
638; PC64LE-NEXT:    lfs 0, .LCPI10_0@toc@l(3)
639; PC64LE-NEXT:    lfs 1, .LCPI10_1@toc@l(4)
640; PC64LE-NEXT:    xsmulsp 1, 1, 0
641; PC64LE-NEXT:    blr
642;
643; PC64LE9-LABEL: constrained_vector_fmul_v1f32:
644; PC64LE9:       # %bb.0: # %entry
645; PC64LE9-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
646; PC64LE9-NEXT:    lfs 0, .LCPI10_0@toc@l(3)
647; PC64LE9-NEXT:    addis 3, 2, .LCPI10_1@toc@ha
648; PC64LE9-NEXT:    lfs 1, .LCPI10_1@toc@l(3)
649; PC64LE9-NEXT:    xsmulsp 1, 1, 0
650; PC64LE9-NEXT:    blr
651entry:
652  %mul = call <1 x float> @llvm.experimental.constrained.fmul.v1f32(
653           <1 x float> <float 0x7FF0000000000000>,
654           <1 x float> <float 2.000000e+00>,
655           metadata !"round.dynamic",
656           metadata !"fpexcept.strict") #1
657  ret <1 x float> %mul
658}
659
660define <2 x double> @constrained_vector_fmul_v2f64() #0 {
661; PC64LE-LABEL: constrained_vector_fmul_v2f64:
662; PC64LE:       # %bb.0: # %entry
663; PC64LE-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
664; PC64LE-NEXT:    addis 4, 2, .LCPI11_1@toc@ha
665; PC64LE-NEXT:    addi 3, 3, .LCPI11_0@toc@l
666; PC64LE-NEXT:    addi 4, 4, .LCPI11_1@toc@l
667; PC64LE-NEXT:    lxvd2x 0, 0, 3
668; PC64LE-NEXT:    lxvd2x 1, 0, 4
669; PC64LE-NEXT:    xxswapd 0, 0
670; PC64LE-NEXT:    xxswapd 1, 1
671; PC64LE-NEXT:    xvmuldp 34, 1, 0
672; PC64LE-NEXT:    blr
673;
674; PC64LE9-LABEL: constrained_vector_fmul_v2f64:
675; PC64LE9:       # %bb.0: # %entry
676; PC64LE9-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
677; PC64LE9-NEXT:    addi 3, 3, .LCPI11_0@toc@l
678; PC64LE9-NEXT:    lxvx 0, 0, 3
679; PC64LE9-NEXT:    addis 3, 2, .LCPI11_1@toc@ha
680; PC64LE9-NEXT:    addi 3, 3, .LCPI11_1@toc@l
681; PC64LE9-NEXT:    lxvx 1, 0, 3
682; PC64LE9-NEXT:    xvmuldp 34, 1, 0
683; PC64LE9-NEXT:    blr
684entry:
685  %mul = call <2 x double> @llvm.experimental.constrained.fmul.v2f64(
686           <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
687           <2 x double> <double 2.000000e+00, double 3.000000e+00>,
688           metadata !"round.dynamic",
689           metadata !"fpexcept.strict") #1
690  ret <2 x double> %mul
691}
692
693define <3 x float> @constrained_vector_fmul_v3f32() #0 {
694; PC64LE-LABEL: constrained_vector_fmul_v3f32:
695; PC64LE:       # %bb.0: # %entry
696; PC64LE-NEXT:    addis 3, 2, .LCPI12_1@toc@ha
697; PC64LE-NEXT:    addis 4, 2, .LCPI12_3@toc@ha
698; PC64LE-NEXT:    addis 5, 2, .LCPI12_2@toc@ha
699; PC64LE-NEXT:    lfs 0, .LCPI12_1@toc@l(3)
700; PC64LE-NEXT:    lfs 1, .LCPI12_3@toc@l(4)
701; PC64LE-NEXT:    lfs 2, .LCPI12_2@toc@l(5)
702; PC64LE-NEXT:    addis 3, 2, .LCPI12_0@toc@ha
703; PC64LE-NEXT:    xsmulsp 1, 0, 1
704; PC64LE-NEXT:    lfs 3, .LCPI12_0@toc@l(3)
705; PC64LE-NEXT:    addis 3, 2, .LCPI12_4@toc@ha
706; PC64LE-NEXT:    xsmulsp 2, 0, 2
707; PC64LE-NEXT:    addi 3, 3, .LCPI12_4@toc@l
708; PC64LE-NEXT:    lvx 4, 0, 3
709; PC64LE-NEXT:    xsmulsp 0, 0, 3
710; PC64LE-NEXT:    xscvdpspn 1, 1
711; PC64LE-NEXT:    xscvdpspn 2, 2
712; PC64LE-NEXT:    xscvdpspn 0, 0
713; PC64LE-NEXT:    xxsldwi 34, 1, 1, 3
714; PC64LE-NEXT:    xxsldwi 35, 2, 2, 3
715; PC64LE-NEXT:    vmrghw 2, 3, 2
716; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
717; PC64LE-NEXT:    vperm 2, 3, 2, 4
718; PC64LE-NEXT:    blr
719;
720; PC64LE9-LABEL: constrained_vector_fmul_v3f32:
721; PC64LE9:       # %bb.0: # %entry
722; PC64LE9-NEXT:    addis 3, 2, .LCPI12_0@toc@ha
723; PC64LE9-NEXT:    lfs 0, .LCPI12_0@toc@l(3)
724; PC64LE9-NEXT:    addis 3, 2, .LCPI12_1@toc@ha
725; PC64LE9-NEXT:    lfs 1, .LCPI12_1@toc@l(3)
726; PC64LE9-NEXT:    addis 3, 2, .LCPI12_2@toc@ha
727; PC64LE9-NEXT:    xsmulsp 0, 1, 0
728; PC64LE9-NEXT:    lfs 2, .LCPI12_2@toc@l(3)
729; PC64LE9-NEXT:    addis 3, 2, .LCPI12_3@toc@ha
730; PC64LE9-NEXT:    lfs 3, .LCPI12_3@toc@l(3)
731; PC64LE9-NEXT:    addis 3, 2, .LCPI12_4@toc@ha
732; PC64LE9-NEXT:    addi 3, 3, .LCPI12_4@toc@l
733; PC64LE9-NEXT:    lxvx 36, 0, 3
734; PC64LE9-NEXT:    xsmulsp 2, 1, 2
735; PC64LE9-NEXT:    xsmulsp 1, 1, 3
736; PC64LE9-NEXT:    xscvdpspn 0, 0
737; PC64LE9-NEXT:    xscvdpspn 1, 1
738; PC64LE9-NEXT:    xxsldwi 34, 1, 1, 3
739; PC64LE9-NEXT:    xscvdpspn 1, 2
740; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 3
741; PC64LE9-NEXT:    vmrghw 2, 3, 2
742; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
743; PC64LE9-NEXT:    vperm 2, 3, 2, 4
744; PC64LE9-NEXT:    blr
745entry:
746  %mul = call <3 x float> @llvm.experimental.constrained.fmul.v3f32(
747           <3 x float> <float 0x7FF0000000000000, float 0x7FF0000000000000,
748                        float 0x7FF0000000000000>,
749           <3 x float> <float 1.000000e+00, float 1.000000e+01, float 1.000000e+02>,
750           metadata !"round.dynamic",
751           metadata !"fpexcept.strict") #1
752  ret <3 x float> %mul
753}
754
755define <3 x double> @constrained_vector_fmul_v3f64() #0 {
756; PC64LE-LABEL: constrained_vector_fmul_v3f64:
757; PC64LE:       # %bb.0: # %entry
758; PC64LE-NEXT:    addis 3, 2, .LCPI13_2@toc@ha
759; PC64LE-NEXT:    addis 4, 2, .LCPI13_3@toc@ha
760; PC64LE-NEXT:    addi 3, 3, .LCPI13_2@toc@l
761; PC64LE-NEXT:    addi 4, 4, .LCPI13_3@toc@l
762; PC64LE-NEXT:    lxvd2x 0, 0, 3
763; PC64LE-NEXT:    lxvd2x 1, 0, 4
764; PC64LE-NEXT:    addis 3, 2, .LCPI13_0@toc@ha
765; PC64LE-NEXT:    addis 4, 2, .LCPI13_1@toc@ha
766; PC64LE-NEXT:    lfd 3, .LCPI13_0@toc@l(3)
767; PC64LE-NEXT:    xxswapd 0, 0
768; PC64LE-NEXT:    xxswapd 1, 1
769; PC64LE-NEXT:    xvmuldp 2, 1, 0
770; PC64LE-NEXT:    lfs 0, .LCPI13_1@toc@l(4)
771; PC64LE-NEXT:    xsmuldp 3, 3, 0
772; PC64LE-NEXT:    xxswapd 1, 2
773; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
774; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
775; PC64LE-NEXT:    blr
776;
777; PC64LE9-LABEL: constrained_vector_fmul_v3f64:
778; PC64LE9:       # %bb.0: # %entry
779; PC64LE9-NEXT:    addis 3, 2, .LCPI13_0@toc@ha
780; PC64LE9-NEXT:    lfd 0, .LCPI13_0@toc@l(3)
781; PC64LE9-NEXT:    addis 3, 2, .LCPI13_1@toc@ha
782; PC64LE9-NEXT:    lfs 1, .LCPI13_1@toc@l(3)
783; PC64LE9-NEXT:    addis 3, 2, .LCPI13_2@toc@ha
784; PC64LE9-NEXT:    addi 3, 3, .LCPI13_2@toc@l
785; PC64LE9-NEXT:    xsmuldp 3, 0, 1
786; PC64LE9-NEXT:    lxvx 0, 0, 3
787; PC64LE9-NEXT:    addis 3, 2, .LCPI13_3@toc@ha
788; PC64LE9-NEXT:    addi 3, 3, .LCPI13_3@toc@l
789; PC64LE9-NEXT:    lxvx 1, 0, 3
790; PC64LE9-NEXT:    xvmuldp 2, 1, 0
791; PC64LE9-NEXT:    xxswapd 1, 2
792; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
793; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
794; PC64LE9-NEXT:    blr
795entry:
796  %mul = call <3 x double> @llvm.experimental.constrained.fmul.v3f64(
797           <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
798                         double 0x7FEFFFFFFFFFFFFF>,
799           <3 x double> <double 1.000000e+00, double 1.000000e+01, double 1.000000e+02>,
800           metadata !"round.dynamic",
801           metadata !"fpexcept.strict") #1
802  ret <3 x double> %mul
803}
804
805define <4 x double> @constrained_vector_fmul_v4f64() #0 {
806; PC64LE-LABEL: constrained_vector_fmul_v4f64:
807; PC64LE:       # %bb.0: # %entry
808; PC64LE-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
809; PC64LE-NEXT:    addis 4, 2, .LCPI14_1@toc@ha
810; PC64LE-NEXT:    addis 5, 2, .LCPI14_2@toc@ha
811; PC64LE-NEXT:    addi 3, 3, .LCPI14_0@toc@l
812; PC64LE-NEXT:    addi 4, 4, .LCPI14_1@toc@l
813; PC64LE-NEXT:    lxvd2x 0, 0, 3
814; PC64LE-NEXT:    addi 3, 5, .LCPI14_2@toc@l
815; PC64LE-NEXT:    lxvd2x 1, 0, 4
816; PC64LE-NEXT:    lxvd2x 2, 0, 3
817; PC64LE-NEXT:    xxswapd 0, 0
818; PC64LE-NEXT:    xxswapd 1, 1
819; PC64LE-NEXT:    xxswapd 2, 2
820; PC64LE-NEXT:    xvmuldp 35, 1, 0
821; PC64LE-NEXT:    xvmuldp 34, 1, 2
822; PC64LE-NEXT:    blr
823;
824; PC64LE9-LABEL: constrained_vector_fmul_v4f64:
825; PC64LE9:       # %bb.0: # %entry
826; PC64LE9-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
827; PC64LE9-NEXT:    addi 3, 3, .LCPI14_0@toc@l
828; PC64LE9-NEXT:    lxvx 0, 0, 3
829; PC64LE9-NEXT:    addis 3, 2, .LCPI14_1@toc@ha
830; PC64LE9-NEXT:    addi 3, 3, .LCPI14_1@toc@l
831; PC64LE9-NEXT:    lxvx 1, 0, 3
832; PC64LE9-NEXT:    addis 3, 2, .LCPI14_2@toc@ha
833; PC64LE9-NEXT:    addi 3, 3, .LCPI14_2@toc@l
834; PC64LE9-NEXT:    xvmuldp 35, 1, 0
835; PC64LE9-NEXT:    lxvx 0, 0, 3
836; PC64LE9-NEXT:    xvmuldp 34, 1, 0
837; PC64LE9-NEXT:    blr
838entry:
839  %mul = call <4 x double> @llvm.experimental.constrained.fmul.v4f64(
840           <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
841                         double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
842           <4 x double> <double 2.000000e+00, double 3.000000e+00,
843                         double 4.000000e+00, double 5.000000e+00>,
844           metadata !"round.dynamic",
845           metadata !"fpexcept.strict") #1
846  ret <4 x double> %mul
847}
848
849define <1 x float> @constrained_vector_fadd_v1f32() #0 {
850; PC64LE-LABEL: constrained_vector_fadd_v1f32:
851; PC64LE:       # %bb.0: # %entry
852; PC64LE-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
853; PC64LE-NEXT:    addis 4, 2, .LCPI15_1@toc@ha
854; PC64LE-NEXT:    lfs 0, .LCPI15_0@toc@l(3)
855; PC64LE-NEXT:    lfs 1, .LCPI15_1@toc@l(4)
856; PC64LE-NEXT:    xsaddsp 1, 1, 0
857; PC64LE-NEXT:    blr
858;
859; PC64LE9-LABEL: constrained_vector_fadd_v1f32:
860; PC64LE9:       # %bb.0: # %entry
861; PC64LE9-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
862; PC64LE9-NEXT:    lfs 0, .LCPI15_0@toc@l(3)
863; PC64LE9-NEXT:    addis 3, 2, .LCPI15_1@toc@ha
864; PC64LE9-NEXT:    lfs 1, .LCPI15_1@toc@l(3)
865; PC64LE9-NEXT:    xsaddsp 1, 1, 0
866; PC64LE9-NEXT:    blr
867entry:
868  %add = call <1 x float> @llvm.experimental.constrained.fadd.v1f32(
869           <1 x float> <float 0x7FF0000000000000>,
870           <1 x float> <float 1.0>,
871           metadata !"round.dynamic",
872           metadata !"fpexcept.strict") #1
873  ret <1 x float> %add
874}
875
876define <2 x double> @constrained_vector_fadd_v2f64() #0 {
877; PC64LE-LABEL: constrained_vector_fadd_v2f64:
878; PC64LE:       # %bb.0: # %entry
879; PC64LE-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
880; PC64LE-NEXT:    addis 4, 2, .LCPI16_1@toc@ha
881; PC64LE-NEXT:    addi 3, 3, .LCPI16_0@toc@l
882; PC64LE-NEXT:    addi 4, 4, .LCPI16_1@toc@l
883; PC64LE-NEXT:    lxvd2x 0, 0, 3
884; PC64LE-NEXT:    lxvd2x 1, 0, 4
885; PC64LE-NEXT:    xxswapd 0, 0
886; PC64LE-NEXT:    xxswapd 1, 1
887; PC64LE-NEXT:    xvadddp 34, 1, 0
888; PC64LE-NEXT:    blr
889;
890; PC64LE9-LABEL: constrained_vector_fadd_v2f64:
891; PC64LE9:       # %bb.0: # %entry
892; PC64LE9-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
893; PC64LE9-NEXT:    addi 3, 3, .LCPI16_0@toc@l
894; PC64LE9-NEXT:    lxvx 0, 0, 3
895; PC64LE9-NEXT:    addis 3, 2, .LCPI16_1@toc@ha
896; PC64LE9-NEXT:    addi 3, 3, .LCPI16_1@toc@l
897; PC64LE9-NEXT:    lxvx 1, 0, 3
898; PC64LE9-NEXT:    xvadddp 34, 1, 0
899; PC64LE9-NEXT:    blr
900entry:
901  %add = call <2 x double> @llvm.experimental.constrained.fadd.v2f64(
902           <2 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
903           <2 x double> <double 1.000000e+00, double 1.000000e-01>,
904           metadata !"round.dynamic",
905           metadata !"fpexcept.strict") #1
906  ret <2 x double> %add
907}
908
909define <3 x float> @constrained_vector_fadd_v3f32() #0 {
910; PC64LE-LABEL: constrained_vector_fadd_v3f32:
911; PC64LE:       # %bb.0: # %entry
912; PC64LE-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
913; PC64LE-NEXT:    addis 4, 2, .LCPI17_2@toc@ha
914; PC64LE-NEXT:    addis 5, 2, .LCPI17_1@toc@ha
915; PC64LE-NEXT:    xxlxor 3, 3, 3
916; PC64LE-NEXT:    lfs 0, .LCPI17_0@toc@l(3)
917; PC64LE-NEXT:    lfs 1, .LCPI17_2@toc@l(4)
918; PC64LE-NEXT:    lfs 2, .LCPI17_1@toc@l(5)
919; PC64LE-NEXT:    addis 3, 2, .LCPI17_3@toc@ha
920; PC64LE-NEXT:    addi 3, 3, .LCPI17_3@toc@l
921; PC64LE-NEXT:    xsaddsp 1, 0, 1
922; PC64LE-NEXT:    lvx 4, 0, 3
923; PC64LE-NEXT:    xsaddsp 2, 0, 2
924; PC64LE-NEXT:    xsaddsp 0, 0, 3
925; PC64LE-NEXT:    xscvdpspn 1, 1
926; PC64LE-NEXT:    xscvdpspn 2, 2
927; PC64LE-NEXT:    xscvdpspn 0, 0
928; PC64LE-NEXT:    xxsldwi 34, 1, 1, 3
929; PC64LE-NEXT:    xxsldwi 35, 2, 2, 3
930; PC64LE-NEXT:    vmrghw 2, 3, 2
931; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
932; PC64LE-NEXT:    vperm 2, 3, 2, 4
933; PC64LE-NEXT:    blr
934;
935; PC64LE9-LABEL: constrained_vector_fadd_v3f32:
936; PC64LE9:       # %bb.0: # %entry
937; PC64LE9-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
938; PC64LE9-NEXT:    xxlxor 1, 1, 1
939; PC64LE9-NEXT:    lfs 0, .LCPI17_0@toc@l(3)
940; PC64LE9-NEXT:    addis 3, 2, .LCPI17_1@toc@ha
941; PC64LE9-NEXT:    lfs 2, .LCPI17_1@toc@l(3)
942; PC64LE9-NEXT:    addis 3, 2, .LCPI17_2@toc@ha
943; PC64LE9-NEXT:    lfs 3, .LCPI17_2@toc@l(3)
944; PC64LE9-NEXT:    addis 3, 2, .LCPI17_3@toc@ha
945; PC64LE9-NEXT:    addi 3, 3, .LCPI17_3@toc@l
946; PC64LE9-NEXT:    xsaddsp 1, 0, 1
947; PC64LE9-NEXT:    lxvx 36, 0, 3
948; PC64LE9-NEXT:    xsaddsp 2, 0, 2
949; PC64LE9-NEXT:    xsaddsp 0, 0, 3
950; PC64LE9-NEXT:    xscvdpspn 0, 0
951; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
952; PC64LE9-NEXT:    xscvdpspn 0, 2
953; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
954; PC64LE9-NEXT:    xscvdpspn 0, 1
955; PC64LE9-NEXT:    vmrghw 2, 3, 2
956; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
957; PC64LE9-NEXT:    vperm 2, 3, 2, 4
958; PC64LE9-NEXT:    blr
959entry:
960  %add = call <3 x float> @llvm.experimental.constrained.fadd.v3f32(
961           <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
962                        float 0xFFFFFFFFE0000000>,
963           <3 x float> <float 2.0, float 1.0, float 0.0>,
964           metadata !"round.dynamic",
965           metadata !"fpexcept.strict") #1
966  ret <3 x float> %add
967}
968
969define <3 x double> @constrained_vector_fadd_v3f64() #0 {
970; PC64LE-LABEL: constrained_vector_fadd_v3f64:
971; PC64LE:       # %bb.0: # %entry
972; PC64LE-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
973; PC64LE-NEXT:    addis 4, 2, .LCPI18_2@toc@ha
974; PC64LE-NEXT:    addi 3, 3, .LCPI18_1@toc@l
975; PC64LE-NEXT:    addi 4, 4, .LCPI18_2@toc@l
976; PC64LE-NEXT:    lxvd2x 0, 0, 3
977; PC64LE-NEXT:    lxvd2x 1, 0, 4
978; PC64LE-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
979; PC64LE-NEXT:    lfd 3, .LCPI18_0@toc@l(3)
980; PC64LE-NEXT:    xxswapd 0, 0
981; PC64LE-NEXT:    xxswapd 1, 1
982; PC64LE-NEXT:    xvadddp 2, 1, 0
983; PC64LE-NEXT:    xxlxor 0, 0, 0
984; PC64LE-NEXT:    xsadddp 3, 3, 0
985; PC64LE-NEXT:    xxswapd 1, 2
986; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
987; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
988; PC64LE-NEXT:    blr
989;
990; PC64LE9-LABEL: constrained_vector_fadd_v3f64:
991; PC64LE9:       # %bb.0: # %entry
992; PC64LE9-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
993; PC64LE9-NEXT:    xxlxor 1, 1, 1
994; PC64LE9-NEXT:    lfd 0, .LCPI18_0@toc@l(3)
995; PC64LE9-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
996; PC64LE9-NEXT:    addi 3, 3, .LCPI18_1@toc@l
997; PC64LE9-NEXT:    xsadddp 3, 0, 1
998; PC64LE9-NEXT:    lxvx 0, 0, 3
999; PC64LE9-NEXT:    addis 3, 2, .LCPI18_2@toc@ha
1000; PC64LE9-NEXT:    addi 3, 3, .LCPI18_2@toc@l
1001; PC64LE9-NEXT:    lxvx 1, 0, 3
1002; PC64LE9-NEXT:    xvadddp 2, 1, 0
1003; PC64LE9-NEXT:    xxswapd 1, 2
1004; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1005; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1006; PC64LE9-NEXT:    blr
1007entry:
1008  %add = call <3 x double> @llvm.experimental.constrained.fadd.v3f64(
1009           <3 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
1010                         double 0x7FEFFFFFFFFFFFFF>,
1011           <3 x double> <double 2.0, double 1.0, double 0.0>,
1012           metadata !"round.dynamic",
1013           metadata !"fpexcept.strict") #1
1014  ret <3 x double> %add
1015}
1016
1017define <4 x double> @constrained_vector_fadd_v4f64() #0 {
1018; PC64LE-LABEL: constrained_vector_fadd_v4f64:
1019; PC64LE:       # %bb.0: # %entry
1020; PC64LE-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1021; PC64LE-NEXT:    addis 4, 2, .LCPI19_1@toc@ha
1022; PC64LE-NEXT:    addis 5, 2, .LCPI19_2@toc@ha
1023; PC64LE-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1024; PC64LE-NEXT:    addi 4, 4, .LCPI19_1@toc@l
1025; PC64LE-NEXT:    lxvd2x 0, 0, 3
1026; PC64LE-NEXT:    addi 3, 5, .LCPI19_2@toc@l
1027; PC64LE-NEXT:    lxvd2x 1, 0, 4
1028; PC64LE-NEXT:    lxvd2x 2, 0, 3
1029; PC64LE-NEXT:    xxswapd 0, 0
1030; PC64LE-NEXT:    xxswapd 1, 1
1031; PC64LE-NEXT:    xxswapd 2, 2
1032; PC64LE-NEXT:    xvadddp 35, 1, 0
1033; PC64LE-NEXT:    xvadddp 34, 1, 2
1034; PC64LE-NEXT:    blr
1035;
1036; PC64LE9-LABEL: constrained_vector_fadd_v4f64:
1037; PC64LE9:       # %bb.0: # %entry
1038; PC64LE9-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1039; PC64LE9-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1040; PC64LE9-NEXT:    lxvx 0, 0, 3
1041; PC64LE9-NEXT:    addis 3, 2, .LCPI19_1@toc@ha
1042; PC64LE9-NEXT:    addi 3, 3, .LCPI19_1@toc@l
1043; PC64LE9-NEXT:    lxvx 1, 0, 3
1044; PC64LE9-NEXT:    addis 3, 2, .LCPI19_2@toc@ha
1045; PC64LE9-NEXT:    addi 3, 3, .LCPI19_2@toc@l
1046; PC64LE9-NEXT:    xvadddp 35, 1, 0
1047; PC64LE9-NEXT:    lxvx 0, 0, 3
1048; PC64LE9-NEXT:    xvadddp 34, 1, 0
1049; PC64LE9-NEXT:    blr
1050entry:
1051  %add = call <4 x double> @llvm.experimental.constrained.fadd.v4f64(
1052           <4 x double> <double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF,
1053                         double 0x7FEFFFFFFFFFFFFF, double 0x7FEFFFFFFFFFFFFF>,
1054           <4 x double> <double 1.000000e+00, double 1.000000e-01,
1055                         double 2.000000e+00, double 2.000000e-01>,
1056           metadata !"round.dynamic",
1057           metadata !"fpexcept.strict") #1
1058  ret <4 x double> %add
1059}
1060
1061define <1 x float> @constrained_vector_fsub_v1f32() #0 {
1062; PC64LE-LABEL: constrained_vector_fsub_v1f32:
1063; PC64LE:       # %bb.0: # %entry
1064; PC64LE-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1065; PC64LE-NEXT:    addis 4, 2, .LCPI20_1@toc@ha
1066; PC64LE-NEXT:    lfs 0, .LCPI20_0@toc@l(3)
1067; PC64LE-NEXT:    lfs 1, .LCPI20_1@toc@l(4)
1068; PC64LE-NEXT:    xssubsp 1, 1, 0
1069; PC64LE-NEXT:    blr
1070;
1071; PC64LE9-LABEL: constrained_vector_fsub_v1f32:
1072; PC64LE9:       # %bb.0: # %entry
1073; PC64LE9-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1074; PC64LE9-NEXT:    lfs 0, .LCPI20_0@toc@l(3)
1075; PC64LE9-NEXT:    addis 3, 2, .LCPI20_1@toc@ha
1076; PC64LE9-NEXT:    lfs 1, .LCPI20_1@toc@l(3)
1077; PC64LE9-NEXT:    xssubsp 1, 1, 0
1078; PC64LE9-NEXT:    blr
1079entry:
1080  %sub = call <1 x float> @llvm.experimental.constrained.fsub.v1f32(
1081           <1 x float> <float 0x7FF0000000000000>,
1082           <1 x float> <float 1.000000e+00>,
1083           metadata !"round.dynamic",
1084           metadata !"fpexcept.strict") #1
1085  ret <1 x float> %sub
1086}
1087
1088define <2 x double> @constrained_vector_fsub_v2f64() #0 {
1089; PC64LE-LABEL: constrained_vector_fsub_v2f64:
1090; PC64LE:       # %bb.0: # %entry
1091; PC64LE-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1092; PC64LE-NEXT:    addis 4, 2, .LCPI21_1@toc@ha
1093; PC64LE-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1094; PC64LE-NEXT:    addi 4, 4, .LCPI21_1@toc@l
1095; PC64LE-NEXT:    lxvd2x 0, 0, 3
1096; PC64LE-NEXT:    lxvd2x 1, 0, 4
1097; PC64LE-NEXT:    xxswapd 0, 0
1098; PC64LE-NEXT:    xxswapd 1, 1
1099; PC64LE-NEXT:    xvsubdp 34, 1, 0
1100; PC64LE-NEXT:    blr
1101;
1102; PC64LE9-LABEL: constrained_vector_fsub_v2f64:
1103; PC64LE9:       # %bb.0: # %entry
1104; PC64LE9-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1105; PC64LE9-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1106; PC64LE9-NEXT:    lxvx 0, 0, 3
1107; PC64LE9-NEXT:    addis 3, 2, .LCPI21_1@toc@ha
1108; PC64LE9-NEXT:    addi 3, 3, .LCPI21_1@toc@l
1109; PC64LE9-NEXT:    lxvx 1, 0, 3
1110; PC64LE9-NEXT:    xvsubdp 34, 1, 0
1111; PC64LE9-NEXT:    blr
1112entry:
1113  %sub = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(
1114           <2 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1115           <2 x double> <double 1.000000e+00, double 1.000000e-01>,
1116           metadata !"round.dynamic",
1117           metadata !"fpexcept.strict") #1
1118  ret <2 x double> %sub
1119}
1120
1121define <3 x float> @constrained_vector_fsub_v3f32() #0 {
1122; PC64LE-LABEL: constrained_vector_fsub_v3f32:
1123; PC64LE:       # %bb.0: # %entry
1124; PC64LE-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
1125; PC64LE-NEXT:    addis 4, 2, .LCPI22_2@toc@ha
1126; PC64LE-NEXT:    addis 5, 2, .LCPI22_1@toc@ha
1127; PC64LE-NEXT:    xxlxor 3, 3, 3
1128; PC64LE-NEXT:    lfs 0, .LCPI22_0@toc@l(3)
1129; PC64LE-NEXT:    lfs 1, .LCPI22_2@toc@l(4)
1130; PC64LE-NEXT:    lfs 2, .LCPI22_1@toc@l(5)
1131; PC64LE-NEXT:    addis 3, 2, .LCPI22_3@toc@ha
1132; PC64LE-NEXT:    addi 3, 3, .LCPI22_3@toc@l
1133; PC64LE-NEXT:    xssubsp 1, 0, 1
1134; PC64LE-NEXT:    lvx 4, 0, 3
1135; PC64LE-NEXT:    xssubsp 2, 0, 2
1136; PC64LE-NEXT:    xssubsp 0, 0, 3
1137; PC64LE-NEXT:    xscvdpspn 1, 1
1138; PC64LE-NEXT:    xscvdpspn 2, 2
1139; PC64LE-NEXT:    xscvdpspn 0, 0
1140; PC64LE-NEXT:    xxsldwi 34, 1, 1, 3
1141; PC64LE-NEXT:    xxsldwi 35, 2, 2, 3
1142; PC64LE-NEXT:    vmrghw 2, 3, 2
1143; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
1144; PC64LE-NEXT:    vperm 2, 3, 2, 4
1145; PC64LE-NEXT:    blr
1146;
1147; PC64LE9-LABEL: constrained_vector_fsub_v3f32:
1148; PC64LE9:       # %bb.0: # %entry
1149; PC64LE9-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
1150; PC64LE9-NEXT:    xxlxor 1, 1, 1
1151; PC64LE9-NEXT:    lfs 0, .LCPI22_0@toc@l(3)
1152; PC64LE9-NEXT:    addis 3, 2, .LCPI22_1@toc@ha
1153; PC64LE9-NEXT:    lfs 2, .LCPI22_1@toc@l(3)
1154; PC64LE9-NEXT:    addis 3, 2, .LCPI22_2@toc@ha
1155; PC64LE9-NEXT:    lfs 3, .LCPI22_2@toc@l(3)
1156; PC64LE9-NEXT:    addis 3, 2, .LCPI22_3@toc@ha
1157; PC64LE9-NEXT:    addi 3, 3, .LCPI22_3@toc@l
1158; PC64LE9-NEXT:    xssubsp 1, 0, 1
1159; PC64LE9-NEXT:    lxvx 36, 0, 3
1160; PC64LE9-NEXT:    xssubsp 2, 0, 2
1161; PC64LE9-NEXT:    xssubsp 0, 0, 3
1162; PC64LE9-NEXT:    xscvdpspn 0, 0
1163; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
1164; PC64LE9-NEXT:    xscvdpspn 0, 2
1165; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
1166; PC64LE9-NEXT:    xscvdpspn 0, 1
1167; PC64LE9-NEXT:    vmrghw 2, 3, 2
1168; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
1169; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1170; PC64LE9-NEXT:    blr
1171entry:
1172  %sub = call <3 x float> @llvm.experimental.constrained.fsub.v3f32(
1173           <3 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000,
1174                        float 0xFFFFFFFFE0000000>,
1175           <3 x float> <float 2.0, float 1.0, float 0.0>,
1176           metadata !"round.dynamic",
1177           metadata !"fpexcept.strict") #1
1178  ret <3 x float> %sub
1179}
1180
1181define <3 x double> @constrained_vector_fsub_v3f64() #0 {
1182; PC64LE-LABEL: constrained_vector_fsub_v3f64:
1183; PC64LE:       # %bb.0: # %entry
1184; PC64LE-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
1185; PC64LE-NEXT:    addis 4, 2, .LCPI23_2@toc@ha
1186; PC64LE-NEXT:    addi 3, 3, .LCPI23_1@toc@l
1187; PC64LE-NEXT:    addi 4, 4, .LCPI23_2@toc@l
1188; PC64LE-NEXT:    lxvd2x 0, 0, 3
1189; PC64LE-NEXT:    lxvd2x 1, 0, 4
1190; PC64LE-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
1191; PC64LE-NEXT:    lfd 3, .LCPI23_0@toc@l(3)
1192; PC64LE-NEXT:    xxswapd 0, 0
1193; PC64LE-NEXT:    xxswapd 1, 1
1194; PC64LE-NEXT:    xvsubdp 2, 1, 0
1195; PC64LE-NEXT:    xxlxor 0, 0, 0
1196; PC64LE-NEXT:    xssubdp 3, 3, 0
1197; PC64LE-NEXT:    xxswapd 1, 2
1198; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1199; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1200; PC64LE-NEXT:    blr
1201;
1202; PC64LE9-LABEL: constrained_vector_fsub_v3f64:
1203; PC64LE9:       # %bb.0: # %entry
1204; PC64LE9-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
1205; PC64LE9-NEXT:    xxlxor 1, 1, 1
1206; PC64LE9-NEXT:    lfd 0, .LCPI23_0@toc@l(3)
1207; PC64LE9-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
1208; PC64LE9-NEXT:    addi 3, 3, .LCPI23_1@toc@l
1209; PC64LE9-NEXT:    xssubdp 3, 0, 1
1210; PC64LE9-NEXT:    lxvx 0, 0, 3
1211; PC64LE9-NEXT:    addis 3, 2, .LCPI23_2@toc@ha
1212; PC64LE9-NEXT:    addi 3, 3, .LCPI23_2@toc@l
1213; PC64LE9-NEXT:    lxvx 1, 0, 3
1214; PC64LE9-NEXT:    xvsubdp 2, 1, 0
1215; PC64LE9-NEXT:    xxswapd 1, 2
1216; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1217; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1218; PC64LE9-NEXT:    blr
1219entry:
1220  %sub = call <3 x double> @llvm.experimental.constrained.fsub.v3f64(
1221           <3 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1222                         double 0xFFEFFFFFFFFFFFFF>,
1223           <3 x double> <double 2.0, double 1.0, double 0.0>,
1224           metadata !"round.dynamic",
1225           metadata !"fpexcept.strict") #1
1226  ret <3 x double> %sub
1227}
1228
1229define <4 x double> @constrained_vector_fsub_v4f64() #0 {
1230; PC64LE-LABEL: constrained_vector_fsub_v4f64:
1231; PC64LE:       # %bb.0: # %entry
1232; PC64LE-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
1233; PC64LE-NEXT:    addis 4, 2, .LCPI24_1@toc@ha
1234; PC64LE-NEXT:    addis 5, 2, .LCPI24_2@toc@ha
1235; PC64LE-NEXT:    addi 3, 3, .LCPI24_0@toc@l
1236; PC64LE-NEXT:    addi 4, 4, .LCPI24_1@toc@l
1237; PC64LE-NEXT:    lxvd2x 0, 0, 3
1238; PC64LE-NEXT:    addi 3, 5, .LCPI24_2@toc@l
1239; PC64LE-NEXT:    lxvd2x 1, 0, 4
1240; PC64LE-NEXT:    lxvd2x 2, 0, 3
1241; PC64LE-NEXT:    xxswapd 0, 0
1242; PC64LE-NEXT:    xxswapd 1, 1
1243; PC64LE-NEXT:    xxswapd 2, 2
1244; PC64LE-NEXT:    xvsubdp 35, 1, 0
1245; PC64LE-NEXT:    xvsubdp 34, 1, 2
1246; PC64LE-NEXT:    blr
1247;
1248; PC64LE9-LABEL: constrained_vector_fsub_v4f64:
1249; PC64LE9:       # %bb.0: # %entry
1250; PC64LE9-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
1251; PC64LE9-NEXT:    addi 3, 3, .LCPI24_0@toc@l
1252; PC64LE9-NEXT:    lxvx 0, 0, 3
1253; PC64LE9-NEXT:    addis 3, 2, .LCPI24_1@toc@ha
1254; PC64LE9-NEXT:    addi 3, 3, .LCPI24_1@toc@l
1255; PC64LE9-NEXT:    lxvx 1, 0, 3
1256; PC64LE9-NEXT:    addis 3, 2, .LCPI24_2@toc@ha
1257; PC64LE9-NEXT:    addi 3, 3, .LCPI24_2@toc@l
1258; PC64LE9-NEXT:    xvsubdp 35, 1, 0
1259; PC64LE9-NEXT:    lxvx 0, 0, 3
1260; PC64LE9-NEXT:    xvsubdp 34, 1, 0
1261; PC64LE9-NEXT:    blr
1262entry:
1263  %sub = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(
1264           <4 x double> <double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF,
1265                         double 0xFFEFFFFFFFFFFFFF, double 0xFFEFFFFFFFFFFFFF>,
1266           <4 x double> <double 1.000000e+00, double 1.000000e-01,
1267                         double 2.000000e+00, double 2.000000e-01>,
1268           metadata !"round.dynamic",
1269           metadata !"fpexcept.strict") #1
1270  ret <4 x double> %sub
1271}
1272
1273define <1 x float> @constrained_vector_sqrt_v1f32() #0 {
1274; PC64LE-LABEL: constrained_vector_sqrt_v1f32:
1275; PC64LE:       # %bb.0: # %entry
1276; PC64LE-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
1277; PC64LE-NEXT:    lfs 0, .LCPI25_0@toc@l(3)
1278; PC64LE-NEXT:    xssqrtsp 1, 0
1279; PC64LE-NEXT:    blr
1280;
1281; PC64LE9-LABEL: constrained_vector_sqrt_v1f32:
1282; PC64LE9:       # %bb.0: # %entry
1283; PC64LE9-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
1284; PC64LE9-NEXT:    lfs 0, .LCPI25_0@toc@l(3)
1285; PC64LE9-NEXT:    xssqrtsp 1, 0
1286; PC64LE9-NEXT:    blr
1287entry:
1288  %sqrt = call <1 x float> @llvm.experimental.constrained.sqrt.v1f32(
1289                              <1 x float> <float 42.0>,
1290                              metadata !"round.dynamic",
1291                              metadata !"fpexcept.strict") #1
1292  ret <1 x float> %sqrt
1293}
1294
1295define <2 x double> @constrained_vector_sqrt_v2f64() #0 {
1296; PC64LE-LABEL: constrained_vector_sqrt_v2f64:
1297; PC64LE:       # %bb.0: # %entry
1298; PC64LE-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
1299; PC64LE-NEXT:    addi 3, 3, .LCPI26_0@toc@l
1300; PC64LE-NEXT:    lxvd2x 0, 0, 3
1301; PC64LE-NEXT:    xxswapd 0, 0
1302; PC64LE-NEXT:    xvsqrtdp 34, 0
1303; PC64LE-NEXT:    blr
1304;
1305; PC64LE9-LABEL: constrained_vector_sqrt_v2f64:
1306; PC64LE9:       # %bb.0: # %entry
1307; PC64LE9-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
1308; PC64LE9-NEXT:    addi 3, 3, .LCPI26_0@toc@l
1309; PC64LE9-NEXT:    lxvx 0, 0, 3
1310; PC64LE9-NEXT:    xvsqrtdp 34, 0
1311; PC64LE9-NEXT:    blr
1312entry:
1313  %sqrt = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(
1314                              <2 x double> <double 42.0, double 42.1>,
1315                              metadata !"round.dynamic",
1316                              metadata !"fpexcept.strict") #1
1317  ret <2 x double> %sqrt
1318}
1319
1320define <3 x float> @constrained_vector_sqrt_v3f32() #0 {
1321; PC64LE-LABEL: constrained_vector_sqrt_v3f32:
1322; PC64LE:       # %bb.0: # %entry
1323; PC64LE-NEXT:    addis 3, 2, .LCPI27_2@toc@ha
1324; PC64LE-NEXT:    addis 4, 2, .LCPI27_1@toc@ha
1325; PC64LE-NEXT:    lfs 0, .LCPI27_2@toc@l(3)
1326; PC64LE-NEXT:    lfs 1, .LCPI27_1@toc@l(4)
1327; PC64LE-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
1328; PC64LE-NEXT:    xssqrtsp 0, 0
1329; PC64LE-NEXT:    lfs 2, .LCPI27_0@toc@l(3)
1330; PC64LE-NEXT:    addis 3, 2, .LCPI27_3@toc@ha
1331; PC64LE-NEXT:    xssqrtsp 1, 1
1332; PC64LE-NEXT:    addi 3, 3, .LCPI27_3@toc@l
1333; PC64LE-NEXT:    xssqrtsp 2, 2
1334; PC64LE-NEXT:    xscvdpspn 0, 0
1335; PC64LE-NEXT:    xscvdpspn 1, 1
1336; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
1337; PC64LE-NEXT:    xscvdpspn 0, 2
1338; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
1339; PC64LE-NEXT:    vmrghw 2, 3, 2
1340; PC64LE-NEXT:    lvx 3, 0, 3
1341; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
1342; PC64LE-NEXT:    vperm 2, 4, 2, 3
1343; PC64LE-NEXT:    blr
1344;
1345; PC64LE9-LABEL: constrained_vector_sqrt_v3f32:
1346; PC64LE9:       # %bb.0: # %entry
1347; PC64LE9-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
1348; PC64LE9-NEXT:    lfs 0, .LCPI27_0@toc@l(3)
1349; PC64LE9-NEXT:    addis 3, 2, .LCPI27_1@toc@ha
1350; PC64LE9-NEXT:    lfs 1, .LCPI27_1@toc@l(3)
1351; PC64LE9-NEXT:    addis 3, 2, .LCPI27_2@toc@ha
1352; PC64LE9-NEXT:    xssqrtsp 0, 0
1353; PC64LE9-NEXT:    lfs 2, .LCPI27_2@toc@l(3)
1354; PC64LE9-NEXT:    addis 3, 2, .LCPI27_3@toc@ha
1355; PC64LE9-NEXT:    addi 3, 3, .LCPI27_3@toc@l
1356; PC64LE9-NEXT:    xssqrtsp 1, 1
1357; PC64LE9-NEXT:    xssqrtsp 2, 2
1358; PC64LE9-NEXT:    xscvdpspn 0, 0
1359; PC64LE9-NEXT:    xscvdpspn 1, 1
1360; PC64LE9-NEXT:    xscvdpspn 2, 2
1361; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
1362; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 3
1363; PC64LE9-NEXT:    xxsldwi 34, 2, 2, 3
1364; PC64LE9-NEXT:    vmrghw 2, 3, 2
1365; PC64LE9-NEXT:    lxvx 35, 0, 3
1366; PC64LE9-NEXT:    vperm 2, 4, 2, 3
1367; PC64LE9-NEXT:    blr
1368entry:
1369  %sqrt = call <3 x float> @llvm.experimental.constrained.sqrt.v3f32(
1370                              <3 x float> <float 42.0, float 43.0, float 44.0>,
1371                              metadata !"round.dynamic",
1372                              metadata !"fpexcept.strict") #1
1373  ret <3 x float> %sqrt
1374}
1375
1376define <3 x double> @constrained_vector_sqrt_v3f64() #0 {
1377; PC64LE-LABEL: constrained_vector_sqrt_v3f64:
1378; PC64LE:       # %bb.0: # %entry
1379; PC64LE-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
1380; PC64LE-NEXT:    addi 3, 3, .LCPI28_1@toc@l
1381; PC64LE-NEXT:    lxvd2x 0, 0, 3
1382; PC64LE-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
1383; PC64LE-NEXT:    lfd 1, .LCPI28_0@toc@l(3)
1384; PC64LE-NEXT:    xxswapd 0, 0
1385; PC64LE-NEXT:    xssqrtdp 3, 1
1386; PC64LE-NEXT:    xvsqrtdp 2, 0
1387; PC64LE-NEXT:    xxswapd 1, 2
1388; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1389; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1390; PC64LE-NEXT:    blr
1391;
1392; PC64LE9-LABEL: constrained_vector_sqrt_v3f64:
1393; PC64LE9:       # %bb.0: # %entry
1394; PC64LE9-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
1395; PC64LE9-NEXT:    lfd 0, .LCPI28_0@toc@l(3)
1396; PC64LE9-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
1397; PC64LE9-NEXT:    addi 3, 3, .LCPI28_1@toc@l
1398; PC64LE9-NEXT:    xssqrtdp 3, 0
1399; PC64LE9-NEXT:    lxvx 0, 0, 3
1400; PC64LE9-NEXT:    xvsqrtdp 2, 0
1401; PC64LE9-NEXT:    xxswapd 1, 2
1402; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1403; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
1404; PC64LE9-NEXT:    blr
1405entry:
1406  %sqrt = call <3 x double> @llvm.experimental.constrained.sqrt.v3f64(
1407                          <3 x double> <double 42.0, double 42.1, double 42.2>,
1408                          metadata !"round.dynamic",
1409                          metadata !"fpexcept.strict") #1
1410  ret <3 x double> %sqrt
1411}
1412
1413define <4 x double> @constrained_vector_sqrt_v4f64() #0 {
1414; PC64LE-LABEL: constrained_vector_sqrt_v4f64:
1415; PC64LE:       # %bb.0: # %entry
1416; PC64LE-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
1417; PC64LE-NEXT:    addis 4, 2, .LCPI29_1@toc@ha
1418; PC64LE-NEXT:    addi 3, 3, .LCPI29_0@toc@l
1419; PC64LE-NEXT:    addi 4, 4, .LCPI29_1@toc@l
1420; PC64LE-NEXT:    lxvd2x 0, 0, 3
1421; PC64LE-NEXT:    lxvd2x 1, 0, 4
1422; PC64LE-NEXT:    xxswapd 0, 0
1423; PC64LE-NEXT:    xxswapd 1, 1
1424; PC64LE-NEXT:    xvsqrtdp 35, 0
1425; PC64LE-NEXT:    xvsqrtdp 34, 1
1426; PC64LE-NEXT:    blr
1427;
1428; PC64LE9-LABEL: constrained_vector_sqrt_v4f64:
1429; PC64LE9:       # %bb.0: # %entry
1430; PC64LE9-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
1431; PC64LE9-NEXT:    addi 3, 3, .LCPI29_0@toc@l
1432; PC64LE9-NEXT:    lxvx 0, 0, 3
1433; PC64LE9-NEXT:    addis 3, 2, .LCPI29_1@toc@ha
1434; PC64LE9-NEXT:    addi 3, 3, .LCPI29_1@toc@l
1435; PC64LE9-NEXT:    xvsqrtdp 35, 0
1436; PC64LE9-NEXT:    lxvx 0, 0, 3
1437; PC64LE9-NEXT:    xvsqrtdp 34, 0
1438; PC64LE9-NEXT:    blr
1439 entry:
1440  %sqrt = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(
1441                              <4 x double> <double 42.0, double 42.1,
1442                                            double 42.2, double 42.3>,
1443                              metadata !"round.dynamic",
1444                              metadata !"fpexcept.strict") #1
1445  ret <4 x double> %sqrt
1446}
1447
1448define <1 x float> @constrained_vector_pow_v1f32() #0 {
1449; PC64LE-LABEL: constrained_vector_pow_v1f32:
1450; PC64LE:       # %bb.0: # %entry
1451; PC64LE-NEXT:    mflr 0
1452; PC64LE-NEXT:    std 0, 16(1)
1453; PC64LE-NEXT:    stdu 1, -32(1)
1454; PC64LE-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
1455; PC64LE-NEXT:    addis 4, 2, .LCPI30_1@toc@ha
1456; PC64LE-NEXT:    lfs 1, .LCPI30_0@toc@l(3)
1457; PC64LE-NEXT:    lfs 2, .LCPI30_1@toc@l(4)
1458; PC64LE-NEXT:    bl powf
1459; PC64LE-NEXT:    nop
1460; PC64LE-NEXT:    addi 1, 1, 32
1461; PC64LE-NEXT:    ld 0, 16(1)
1462; PC64LE-NEXT:    mtlr 0
1463; PC64LE-NEXT:    blr
1464;
1465; PC64LE9-LABEL: constrained_vector_pow_v1f32:
1466; PC64LE9:       # %bb.0: # %entry
1467; PC64LE9-NEXT:    mflr 0
1468; PC64LE9-NEXT:    std 0, 16(1)
1469; PC64LE9-NEXT:    stdu 1, -32(1)
1470; PC64LE9-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
1471; PC64LE9-NEXT:    lfs 1, .LCPI30_0@toc@l(3)
1472; PC64LE9-NEXT:    addis 3, 2, .LCPI30_1@toc@ha
1473; PC64LE9-NEXT:    lfs 2, .LCPI30_1@toc@l(3)
1474; PC64LE9-NEXT:    bl powf
1475; PC64LE9-NEXT:    nop
1476; PC64LE9-NEXT:    addi 1, 1, 32
1477; PC64LE9-NEXT:    ld 0, 16(1)
1478; PC64LE9-NEXT:    mtlr 0
1479; PC64LE9-NEXT:    blr
1480entry:
1481  %pow = call <1 x float> @llvm.experimental.constrained.pow.v1f32(
1482                             <1 x float> <float 42.0>,
1483                             <1 x float> <float 3.0>,
1484                             metadata !"round.dynamic",
1485                             metadata !"fpexcept.strict") #1
1486  ret <1 x float> %pow
1487}
1488
1489define <2 x double> @constrained_vector_pow_v2f64() #0 {
1490; PC64LE-LABEL: constrained_vector_pow_v2f64:
1491; PC64LE:       # %bb.0: # %entry
1492; PC64LE-NEXT:    mflr 0
1493; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1494; PC64LE-NEXT:    std 0, 16(1)
1495; PC64LE-NEXT:    stdu 1, -80(1)
1496; PC64LE-NEXT:    addis 4, 2, .LCPI31_1@toc@ha
1497; PC64LE-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
1498; PC64LE-NEXT:    lfs 31, .LCPI31_1@toc@l(4)
1499; PC64LE-NEXT:    lfd 1, .LCPI31_0@toc@l(3)
1500; PC64LE-NEXT:    fmr 2, 31
1501; PC64LE-NEXT:    bl pow
1502; PC64LE-NEXT:    nop
1503; PC64LE-NEXT:    li 3, 48
1504; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1505; PC64LE-NEXT:    fmr 2, 31
1506; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1507; PC64LE-NEXT:    addis 3, 2, .LCPI31_2@toc@ha
1508; PC64LE-NEXT:    lfd 1, .LCPI31_2@toc@l(3)
1509; PC64LE-NEXT:    bl pow
1510; PC64LE-NEXT:    nop
1511; PC64LE-NEXT:    li 3, 48
1512; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1513; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1514; PC64LE-NEXT:    xxmrghd 34, 1, 0
1515; PC64LE-NEXT:    addi 1, 1, 80
1516; PC64LE-NEXT:    ld 0, 16(1)
1517; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1518; PC64LE-NEXT:    mtlr 0
1519; PC64LE-NEXT:    blr
1520;
1521; PC64LE9-LABEL: constrained_vector_pow_v2f64:
1522; PC64LE9:       # %bb.0: # %entry
1523; PC64LE9-NEXT:    mflr 0
1524; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1525; PC64LE9-NEXT:    std 0, 16(1)
1526; PC64LE9-NEXT:    stdu 1, -64(1)
1527; PC64LE9-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
1528; PC64LE9-NEXT:    lfd 1, .LCPI31_0@toc@l(3)
1529; PC64LE9-NEXT:    addis 3, 2, .LCPI31_1@toc@ha
1530; PC64LE9-NEXT:    lfs 31, .LCPI31_1@toc@l(3)
1531; PC64LE9-NEXT:    fmr 2, 31
1532; PC64LE9-NEXT:    bl pow
1533; PC64LE9-NEXT:    nop
1534; PC64LE9-NEXT:    addis 3, 2, .LCPI31_2@toc@ha
1535; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1536; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1537; PC64LE9-NEXT:    fmr 2, 31
1538; PC64LE9-NEXT:    lfd 1, .LCPI31_2@toc@l(3)
1539; PC64LE9-NEXT:    bl pow
1540; PC64LE9-NEXT:    nop
1541; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1542; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1543; PC64LE9-NEXT:    xxmrghd 34, 1, 0
1544; PC64LE9-NEXT:    addi 1, 1, 64
1545; PC64LE9-NEXT:    ld 0, 16(1)
1546; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1547; PC64LE9-NEXT:    mtlr 0
1548; PC64LE9-NEXT:    blr
1549entry:
1550  %pow = call <2 x double> @llvm.experimental.constrained.pow.v2f64(
1551                             <2 x double> <double 42.1, double 42.2>,
1552                             <2 x double> <double 3.0, double 3.0>,
1553                             metadata !"round.dynamic",
1554                             metadata !"fpexcept.strict") #1
1555  ret <2 x double> %pow
1556}
1557
1558define <3 x float> @constrained_vector_pow_v3f32() #0 {
1559; PC64LE-LABEL: constrained_vector_pow_v3f32:
1560; PC64LE:       # %bb.0: # %entry
1561; PC64LE-NEXT:    mflr 0
1562; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
1563; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1564; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1565; PC64LE-NEXT:    std 0, 16(1)
1566; PC64LE-NEXT:    stdu 1, -64(1)
1567; PC64LE-NEXT:    addis 4, 2, .LCPI32_1@toc@ha
1568; PC64LE-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
1569; PC64LE-NEXT:    lfs 31, .LCPI32_1@toc@l(4)
1570; PC64LE-NEXT:    lfs 1, .LCPI32_0@toc@l(3)
1571; PC64LE-NEXT:    fmr 2, 31
1572; PC64LE-NEXT:    bl powf
1573; PC64LE-NEXT:    nop
1574; PC64LE-NEXT:    addis 3, 2, .LCPI32_2@toc@ha
1575; PC64LE-NEXT:    fmr 2, 31
1576; PC64LE-NEXT:    fmr 30, 1
1577; PC64LE-NEXT:    lfs 1, .LCPI32_2@toc@l(3)
1578; PC64LE-NEXT:    bl powf
1579; PC64LE-NEXT:    nop
1580; PC64LE-NEXT:    addis 3, 2, .LCPI32_3@toc@ha
1581; PC64LE-NEXT:    fmr 2, 31
1582; PC64LE-NEXT:    fmr 29, 1
1583; PC64LE-NEXT:    lfs 1, .LCPI32_3@toc@l(3)
1584; PC64LE-NEXT:    bl powf
1585; PC64LE-NEXT:    nop
1586; PC64LE-NEXT:    xscvdpspn 0, 29
1587; PC64LE-NEXT:    addis 3, 2, .LCPI32_4@toc@ha
1588; PC64LE-NEXT:    xscvdpspn 1, 1
1589; PC64LE-NEXT:    addi 3, 3, .LCPI32_4@toc@l
1590; PC64LE-NEXT:    lvx 4, 0, 3
1591; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
1592; PC64LE-NEXT:    xscvdpspn 0, 30
1593; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
1594; PC64LE-NEXT:    vmrghw 2, 2, 3
1595; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
1596; PC64LE-NEXT:    vperm 2, 3, 2, 4
1597; PC64LE-NEXT:    addi 1, 1, 64
1598; PC64LE-NEXT:    ld 0, 16(1)
1599; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1600; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1601; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
1602; PC64LE-NEXT:    mtlr 0
1603; PC64LE-NEXT:    blr
1604;
1605; PC64LE9-LABEL: constrained_vector_pow_v3f32:
1606; PC64LE9:       # %bb.0: # %entry
1607; PC64LE9-NEXT:    mflr 0
1608; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
1609; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1610; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1611; PC64LE9-NEXT:    std 0, 16(1)
1612; PC64LE9-NEXT:    stdu 1, -64(1)
1613; PC64LE9-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
1614; PC64LE9-NEXT:    lfs 1, .LCPI32_0@toc@l(3)
1615; PC64LE9-NEXT:    addis 3, 2, .LCPI32_1@toc@ha
1616; PC64LE9-NEXT:    lfs 31, .LCPI32_1@toc@l(3)
1617; PC64LE9-NEXT:    fmr 2, 31
1618; PC64LE9-NEXT:    bl powf
1619; PC64LE9-NEXT:    nop
1620; PC64LE9-NEXT:    addis 3, 2, .LCPI32_2@toc@ha
1621; PC64LE9-NEXT:    fmr 30, 1
1622; PC64LE9-NEXT:    fmr 2, 31
1623; PC64LE9-NEXT:    lfs 1, .LCPI32_2@toc@l(3)
1624; PC64LE9-NEXT:    bl powf
1625; PC64LE9-NEXT:    nop
1626; PC64LE9-NEXT:    addis 3, 2, .LCPI32_3@toc@ha
1627; PC64LE9-NEXT:    fmr 29, 1
1628; PC64LE9-NEXT:    fmr 2, 31
1629; PC64LE9-NEXT:    lfs 1, .LCPI32_3@toc@l(3)
1630; PC64LE9-NEXT:    bl powf
1631; PC64LE9-NEXT:    nop
1632; PC64LE9-NEXT:    xscvdpspn 0, 1
1633; PC64LE9-NEXT:    addis 3, 2, .LCPI32_4@toc@ha
1634; PC64LE9-NEXT:    addi 3, 3, .LCPI32_4@toc@l
1635; PC64LE9-NEXT:    lxvx 36, 0, 3
1636; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
1637; PC64LE9-NEXT:    xscvdpspn 0, 29
1638; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
1639; PC64LE9-NEXT:    xscvdpspn 0, 30
1640; PC64LE9-NEXT:    vmrghw 2, 3, 2
1641; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
1642; PC64LE9-NEXT:    vperm 2, 3, 2, 4
1643; PC64LE9-NEXT:    addi 1, 1, 64
1644; PC64LE9-NEXT:    ld 0, 16(1)
1645; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
1646; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
1647; PC64LE9-NEXT:    mtlr 0
1648; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
1649; PC64LE9-NEXT:    blr
1650entry:
1651  %pow = call <3 x float> @llvm.experimental.constrained.pow.v3f32(
1652                             <3 x float> <float 42.0, float 43.0, float 44.0>,
1653                             <3 x float> <float 3.0, float 3.0, float 3.0>,
1654                             metadata !"round.dynamic",
1655                             metadata !"fpexcept.strict") #1
1656  ret <3 x float> %pow
1657}
1658
1659define <3 x double> @constrained_vector_pow_v3f64() #0 {
1660; PC64LE-LABEL: constrained_vector_pow_v3f64:
1661; PC64LE:       # %bb.0: # %entry
1662; PC64LE-NEXT:    mflr 0
1663; PC64LE-NEXT:    std 0, 16(1)
1664; PC64LE-NEXT:    stdu 1, -96(1)
1665; PC64LE-NEXT:    addis 4, 2, .LCPI33_1@toc@ha
1666; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
1667; PC64LE-NEXT:    li 3, 64
1668; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1669; PC64LE-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
1670; PC64LE-NEXT:    lfs 31, .LCPI33_1@toc@l(4)
1671; PC64LE-NEXT:    lfs 1, .LCPI33_0@toc@l(3)
1672; PC64LE-NEXT:    fmr 2, 31
1673; PC64LE-NEXT:    bl pow
1674; PC64LE-NEXT:    nop
1675; PC64LE-NEXT:    li 3, 48
1676; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1677; PC64LE-NEXT:    fmr 2, 31
1678; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1679; PC64LE-NEXT:    addis 3, 2, .LCPI33_2@toc@ha
1680; PC64LE-NEXT:    lfd 1, .LCPI33_2@toc@l(3)
1681; PC64LE-NEXT:    bl pow
1682; PC64LE-NEXT:    nop
1683; PC64LE-NEXT:    li 3, 48
1684; PC64LE-NEXT:    fmr 2, 31
1685; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1686; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1687; PC64LE-NEXT:    addis 3, 2, .LCPI33_3@toc@ha
1688; PC64LE-NEXT:    xxmrghd 63, 1, 0
1689; PC64LE-NEXT:    lfd 1, .LCPI33_3@toc@l(3)
1690; PC64LE-NEXT:    bl pow
1691; PC64LE-NEXT:    nop
1692; PC64LE-NEXT:    xxswapd 0, 63
1693; PC64LE-NEXT:    li 3, 64
1694; PC64LE-NEXT:    xxlor 2, 63, 63
1695; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
1696; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1697; PC64LE-NEXT:    fmr 3, 1
1698; PC64LE-NEXT:    fmr 1, 0
1699; PC64LE-NEXT:    addi 1, 1, 96
1700; PC64LE-NEXT:    ld 0, 16(1)
1701; PC64LE-NEXT:    mtlr 0
1702; PC64LE-NEXT:    blr
1703;
1704; PC64LE9-LABEL: constrained_vector_pow_v3f64:
1705; PC64LE9:       # %bb.0: # %entry
1706; PC64LE9-NEXT:    mflr 0
1707; PC64LE9-NEXT:    std 0, 16(1)
1708; PC64LE9-NEXT:    stdu 1, -80(1)
1709; PC64LE9-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
1710; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
1711; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
1712; PC64LE9-NEXT:    lfs 1, .LCPI33_0@toc@l(3)
1713; PC64LE9-NEXT:    addis 3, 2, .LCPI33_1@toc@ha
1714; PC64LE9-NEXT:    lfs 31, .LCPI33_1@toc@l(3)
1715; PC64LE9-NEXT:    fmr 2, 31
1716; PC64LE9-NEXT:    bl pow
1717; PC64LE9-NEXT:    nop
1718; PC64LE9-NEXT:    addis 3, 2, .LCPI33_2@toc@ha
1719; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1720; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1721; PC64LE9-NEXT:    fmr 2, 31
1722; PC64LE9-NEXT:    lfd 1, .LCPI33_2@toc@l(3)
1723; PC64LE9-NEXT:    bl pow
1724; PC64LE9-NEXT:    nop
1725; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1726; PC64LE9-NEXT:    addis 3, 2, .LCPI33_3@toc@ha
1727; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1728; PC64LE9-NEXT:    fmr 2, 31
1729; PC64LE9-NEXT:    xxmrghd 63, 1, 0
1730; PC64LE9-NEXT:    lfd 1, .LCPI33_3@toc@l(3)
1731; PC64LE9-NEXT:    bl pow
1732; PC64LE9-NEXT:    nop
1733; PC64LE9-NEXT:    fmr 3, 1
1734; PC64LE9-NEXT:    xxswapd 1, 63
1735; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
1736; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
1737; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
1738; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
1739; PC64LE9-NEXT:    addi 1, 1, 80
1740; PC64LE9-NEXT:    ld 0, 16(1)
1741; PC64LE9-NEXT:    mtlr 0
1742; PC64LE9-NEXT:    blr
1743entry:
1744  %pow = call <3 x double> @llvm.experimental.constrained.pow.v3f64(
1745                          <3 x double> <double 42.0, double 42.1, double 42.2>,
1746                          <3 x double> <double 3.0, double 3.0, double 3.0>,
1747                          metadata !"round.dynamic",
1748                          metadata !"fpexcept.strict") #1
1749  ret <3 x double> %pow
1750}
1751
1752define <4 x double> @constrained_vector_pow_v4f64() #0 {
1753; PC64LE-LABEL: constrained_vector_pow_v4f64:
1754; PC64LE:       # %bb.0: # %entry
1755; PC64LE-NEXT:    mflr 0
1756; PC64LE-NEXT:    std 0, 16(1)
1757; PC64LE-NEXT:    stdu 1, -96(1)
1758; PC64LE-NEXT:    addis 4, 2, .LCPI34_1@toc@ha
1759; PC64LE-NEXT:    stfd 31, 88(1) # 8-byte Folded Spill
1760; PC64LE-NEXT:    li 3, 64
1761; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
1762; PC64LE-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
1763; PC64LE-NEXT:    lfs 31, .LCPI34_1@toc@l(4)
1764; PC64LE-NEXT:    lfd 1, .LCPI34_0@toc@l(3)
1765; PC64LE-NEXT:    fmr 2, 31
1766; PC64LE-NEXT:    bl pow
1767; PC64LE-NEXT:    nop
1768; PC64LE-NEXT:    li 3, 48
1769; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1770; PC64LE-NEXT:    fmr 2, 31
1771; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1772; PC64LE-NEXT:    addis 3, 2, .LCPI34_2@toc@ha
1773; PC64LE-NEXT:    lfd 1, .LCPI34_2@toc@l(3)
1774; PC64LE-NEXT:    bl pow
1775; PC64LE-NEXT:    nop
1776; PC64LE-NEXT:    li 3, 48
1777; PC64LE-NEXT:    fmr 2, 31
1778; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1779; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1780; PC64LE-NEXT:    addis 3, 2, .LCPI34_3@toc@ha
1781; PC64LE-NEXT:    xxmrghd 63, 1, 0
1782; PC64LE-NEXT:    lfd 1, .LCPI34_3@toc@l(3)
1783; PC64LE-NEXT:    bl pow
1784; PC64LE-NEXT:    nop
1785; PC64LE-NEXT:    li 3, 48
1786; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1787; PC64LE-NEXT:    fmr 2, 31
1788; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1789; PC64LE-NEXT:    addis 3, 2, .LCPI34_4@toc@ha
1790; PC64LE-NEXT:    lfd 1, .LCPI34_4@toc@l(3)
1791; PC64LE-NEXT:    bl pow
1792; PC64LE-NEXT:    nop
1793; PC64LE-NEXT:    li 3, 48
1794; PC64LE-NEXT:    vmr 2, 31
1795; PC64LE-NEXT:    lfd 31, 88(1) # 8-byte Folded Reload
1796; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1797; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1798; PC64LE-NEXT:    li 3, 64
1799; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
1800; PC64LE-NEXT:    xxmrghd 35, 1, 0
1801; PC64LE-NEXT:    addi 1, 1, 96
1802; PC64LE-NEXT:    ld 0, 16(1)
1803; PC64LE-NEXT:    mtlr 0
1804; PC64LE-NEXT:    blr
1805;
1806; PC64LE9-LABEL: constrained_vector_pow_v4f64:
1807; PC64LE9:       # %bb.0: # %entry
1808; PC64LE9-NEXT:    mflr 0
1809; PC64LE9-NEXT:    std 0, 16(1)
1810; PC64LE9-NEXT:    stdu 1, -80(1)
1811; PC64LE9-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
1812; PC64LE9-NEXT:    stfd 31, 72(1) # 8-byte Folded Spill
1813; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
1814; PC64LE9-NEXT:    lfd 1, .LCPI34_0@toc@l(3)
1815; PC64LE9-NEXT:    addis 3, 2, .LCPI34_1@toc@ha
1816; PC64LE9-NEXT:    lfs 31, .LCPI34_1@toc@l(3)
1817; PC64LE9-NEXT:    fmr 2, 31
1818; PC64LE9-NEXT:    bl pow
1819; PC64LE9-NEXT:    nop
1820; PC64LE9-NEXT:    addis 3, 2, .LCPI34_2@toc@ha
1821; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1822; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1823; PC64LE9-NEXT:    fmr 2, 31
1824; PC64LE9-NEXT:    lfd 1, .LCPI34_2@toc@l(3)
1825; PC64LE9-NEXT:    bl pow
1826; PC64LE9-NEXT:    nop
1827; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1828; PC64LE9-NEXT:    addis 3, 2, .LCPI34_3@toc@ha
1829; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1830; PC64LE9-NEXT:    fmr 2, 31
1831; PC64LE9-NEXT:    xxmrghd 63, 1, 0
1832; PC64LE9-NEXT:    lfd 1, .LCPI34_3@toc@l(3)
1833; PC64LE9-NEXT:    bl pow
1834; PC64LE9-NEXT:    nop
1835; PC64LE9-NEXT:    addis 3, 2, .LCPI34_4@toc@ha
1836; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1837; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1838; PC64LE9-NEXT:    fmr 2, 31
1839; PC64LE9-NEXT:    lfd 1, .LCPI34_4@toc@l(3)
1840; PC64LE9-NEXT:    bl pow
1841; PC64LE9-NEXT:    nop
1842; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1843; PC64LE9-NEXT:    vmr 2, 31
1844; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
1845; PC64LE9-NEXT:    lfd 31, 72(1) # 8-byte Folded Reload
1846; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1847; PC64LE9-NEXT:    xxmrghd 35, 1, 0
1848; PC64LE9-NEXT:    addi 1, 1, 80
1849; PC64LE9-NEXT:    ld 0, 16(1)
1850; PC64LE9-NEXT:    mtlr 0
1851; PC64LE9-NEXT:    blr
1852entry:
1853  %pow = call <4 x double> @llvm.experimental.constrained.pow.v4f64(
1854                             <4 x double> <double 42.1, double 42.2,
1855                                           double 42.3, double 42.4>,
1856                             <4 x double> <double 3.0, double 3.0,
1857                                           double 3.0, double 3.0>,
1858                             metadata !"round.dynamic",
1859                             metadata !"fpexcept.strict") #1
1860  ret <4 x double> %pow
1861}
1862
1863define <1 x float> @constrained_vector_powi_v1f32() #0 {
1864; PC64LE-LABEL: constrained_vector_powi_v1f32:
1865; PC64LE:       # %bb.0: # %entry
1866; PC64LE-NEXT:    mflr 0
1867; PC64LE-NEXT:    std 0, 16(1)
1868; PC64LE-NEXT:    stdu 1, -32(1)
1869; PC64LE-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
1870; PC64LE-NEXT:    li 4, 3
1871; PC64LE-NEXT:    lfs 1, .LCPI35_0@toc@l(3)
1872; PC64LE-NEXT:    bl __powisf2
1873; PC64LE-NEXT:    nop
1874; PC64LE-NEXT:    addi 1, 1, 32
1875; PC64LE-NEXT:    ld 0, 16(1)
1876; PC64LE-NEXT:    mtlr 0
1877; PC64LE-NEXT:    blr
1878;
1879; PC64LE9-LABEL: constrained_vector_powi_v1f32:
1880; PC64LE9:       # %bb.0: # %entry
1881; PC64LE9-NEXT:    mflr 0
1882; PC64LE9-NEXT:    std 0, 16(1)
1883; PC64LE9-NEXT:    stdu 1, -32(1)
1884; PC64LE9-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
1885; PC64LE9-NEXT:    li 4, 3
1886; PC64LE9-NEXT:    lfs 1, .LCPI35_0@toc@l(3)
1887; PC64LE9-NEXT:    bl __powisf2
1888; PC64LE9-NEXT:    nop
1889; PC64LE9-NEXT:    addi 1, 1, 32
1890; PC64LE9-NEXT:    ld 0, 16(1)
1891; PC64LE9-NEXT:    mtlr 0
1892; PC64LE9-NEXT:    blr
1893entry:
1894  %powi = call <1 x float> @llvm.experimental.constrained.powi.v1f32(
1895                              <1 x float> <float 42.0>,
1896                              i32 3,
1897                              metadata !"round.dynamic",
1898                              metadata !"fpexcept.strict") #1
1899  ret <1 x float> %powi
1900}
1901
1902define <2 x double> @constrained_vector_powi_v2f64() #0 {
1903; PC64LE-LABEL: constrained_vector_powi_v2f64:
1904; PC64LE:       # %bb.0: # %entry
1905; PC64LE-NEXT:    mflr 0
1906; PC64LE-NEXT:    std 0, 16(1)
1907; PC64LE-NEXT:    stdu 1, -64(1)
1908; PC64LE-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
1909; PC64LE-NEXT:    li 4, 3
1910; PC64LE-NEXT:    lfd 1, .LCPI36_0@toc@l(3)
1911; PC64LE-NEXT:    bl __powidf2
1912; PC64LE-NEXT:    nop
1913; PC64LE-NEXT:    li 3, 48
1914; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1915; PC64LE-NEXT:    li 4, 3
1916; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
1917; PC64LE-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
1918; PC64LE-NEXT:    lfd 1, .LCPI36_1@toc@l(3)
1919; PC64LE-NEXT:    bl __powidf2
1920; PC64LE-NEXT:    nop
1921; PC64LE-NEXT:    li 3, 48
1922; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1923; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
1924; PC64LE-NEXT:    xxmrghd 34, 1, 0
1925; PC64LE-NEXT:    addi 1, 1, 64
1926; PC64LE-NEXT:    ld 0, 16(1)
1927; PC64LE-NEXT:    mtlr 0
1928; PC64LE-NEXT:    blr
1929;
1930; PC64LE9-LABEL: constrained_vector_powi_v2f64:
1931; PC64LE9:       # %bb.0: # %entry
1932; PC64LE9-NEXT:    mflr 0
1933; PC64LE9-NEXT:    std 0, 16(1)
1934; PC64LE9-NEXT:    stdu 1, -48(1)
1935; PC64LE9-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
1936; PC64LE9-NEXT:    li 4, 3
1937; PC64LE9-NEXT:    lfd 1, .LCPI36_0@toc@l(3)
1938; PC64LE9-NEXT:    bl __powidf2
1939; PC64LE9-NEXT:    nop
1940; PC64LE9-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
1941; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1942; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
1943; PC64LE9-NEXT:    li 4, 3
1944; PC64LE9-NEXT:    lfd 1, .LCPI36_1@toc@l(3)
1945; PC64LE9-NEXT:    bl __powidf2
1946; PC64LE9-NEXT:    nop
1947; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
1948; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
1949; PC64LE9-NEXT:    xxmrghd 34, 1, 0
1950; PC64LE9-NEXT:    addi 1, 1, 48
1951; PC64LE9-NEXT:    ld 0, 16(1)
1952; PC64LE9-NEXT:    mtlr 0
1953; PC64LE9-NEXT:    blr
1954entry:
1955  %powi = call <2 x double> @llvm.experimental.constrained.powi.v2f64(
1956                              <2 x double> <double 42.1, double 42.2>,
1957                              i32 3,
1958                              metadata !"round.dynamic",
1959                              metadata !"fpexcept.strict") #1
1960  ret <2 x double> %powi
1961}
1962
1963define <3 x float> @constrained_vector_powi_v3f32() #0 {
1964;
1965;
1966; PC64LE-LABEL: constrained_vector_powi_v3f32:
1967; PC64LE:       # %bb.0: # %entry
1968; PC64LE-NEXT:    mflr 0
1969; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
1970; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
1971; PC64LE-NEXT:    std 0, 16(1)
1972; PC64LE-NEXT:    stdu 1, -48(1)
1973; PC64LE-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
1974; PC64LE-NEXT:    li 4, 3
1975; PC64LE-NEXT:    lfs 1, .LCPI37_0@toc@l(3)
1976; PC64LE-NEXT:    bl __powisf2
1977; PC64LE-NEXT:    nop
1978; PC64LE-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
1979; PC64LE-NEXT:    fmr 31, 1
1980; PC64LE-NEXT:    li 4, 3
1981; PC64LE-NEXT:    lfs 1, .LCPI37_1@toc@l(3)
1982; PC64LE-NEXT:    bl __powisf2
1983; PC64LE-NEXT:    nop
1984; PC64LE-NEXT:    addis 3, 2, .LCPI37_2@toc@ha
1985; PC64LE-NEXT:    fmr 30, 1
1986; PC64LE-NEXT:    li 4, 3
1987; PC64LE-NEXT:    lfs 1, .LCPI37_2@toc@l(3)
1988; PC64LE-NEXT:    bl __powisf2
1989; PC64LE-NEXT:    nop
1990; PC64LE-NEXT:    xscvdpspn 0, 30
1991; PC64LE-NEXT:    addis 3, 2, .LCPI37_3@toc@ha
1992; PC64LE-NEXT:    xscvdpspn 1, 1
1993; PC64LE-NEXT:    addi 3, 3, .LCPI37_3@toc@l
1994; PC64LE-NEXT:    lvx 4, 0, 3
1995; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
1996; PC64LE-NEXT:    xscvdpspn 0, 31
1997; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
1998; PC64LE-NEXT:    vmrghw 2, 2, 3
1999; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
2000; PC64LE-NEXT:    vperm 2, 3, 2, 4
2001; PC64LE-NEXT:    addi 1, 1, 48
2002; PC64LE-NEXT:    ld 0, 16(1)
2003; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2004; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2005; PC64LE-NEXT:    mtlr 0
2006; PC64LE-NEXT:    blr
2007;
2008; PC64LE9-LABEL: constrained_vector_powi_v3f32:
2009; PC64LE9:       # %bb.0: # %entry
2010; PC64LE9-NEXT:    mflr 0
2011; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2012; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2013; PC64LE9-NEXT:    std 0, 16(1)
2014; PC64LE9-NEXT:    stdu 1, -48(1)
2015; PC64LE9-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
2016; PC64LE9-NEXT:    li 4, 3
2017; PC64LE9-NEXT:    lfs 1, .LCPI37_0@toc@l(3)
2018; PC64LE9-NEXT:    bl __powisf2
2019; PC64LE9-NEXT:    nop
2020; PC64LE9-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
2021; PC64LE9-NEXT:    fmr 31, 1
2022; PC64LE9-NEXT:    li 4, 3
2023; PC64LE9-NEXT:    lfs 1, .LCPI37_1@toc@l(3)
2024; PC64LE9-NEXT:    bl __powisf2
2025; PC64LE9-NEXT:    nop
2026; PC64LE9-NEXT:    addis 3, 2, .LCPI37_2@toc@ha
2027; PC64LE9-NEXT:    fmr 30, 1
2028; PC64LE9-NEXT:    li 4, 3
2029; PC64LE9-NEXT:    lfs 1, .LCPI37_2@toc@l(3)
2030; PC64LE9-NEXT:    bl __powisf2
2031; PC64LE9-NEXT:    nop
2032; PC64LE9-NEXT:    xscvdpspn 0, 1
2033; PC64LE9-NEXT:    addis 3, 2, .LCPI37_3@toc@ha
2034; PC64LE9-NEXT:    addi 3, 3, .LCPI37_3@toc@l
2035; PC64LE9-NEXT:    lxvx 36, 0, 3
2036; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
2037; PC64LE9-NEXT:    xscvdpspn 0, 30
2038; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
2039; PC64LE9-NEXT:    xscvdpspn 0, 31
2040; PC64LE9-NEXT:    vmrghw 2, 3, 2
2041; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
2042; PC64LE9-NEXT:    vperm 2, 3, 2, 4
2043; PC64LE9-NEXT:    addi 1, 1, 48
2044; PC64LE9-NEXT:    ld 0, 16(1)
2045; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2046; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2047; PC64LE9-NEXT:    mtlr 0
2048; PC64LE9-NEXT:    blr
2049entry:
2050  %powi = call <3 x float> @llvm.experimental.constrained.powi.v3f32(
2051                              <3 x float> <float 42.0, float 43.0, float 44.0>,
2052                              i32 3,
2053                              metadata !"round.dynamic",
2054                              metadata !"fpexcept.strict") #1
2055  ret <3 x float> %powi
2056}
2057
2058define <3 x double> @constrained_vector_powi_v3f64() #0 {
2059; PC64LE-LABEL: constrained_vector_powi_v3f64:
2060; PC64LE:       # %bb.0: # %entry
2061; PC64LE-NEXT:    mflr 0
2062; PC64LE-NEXT:    std 0, 16(1)
2063; PC64LE-NEXT:    stdu 1, -80(1)
2064; PC64LE-NEXT:    li 3, 64
2065; PC64LE-NEXT:    li 4, 3
2066; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2067; PC64LE-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
2068; PC64LE-NEXT:    lfd 1, .LCPI38_0@toc@l(3)
2069; PC64LE-NEXT:    bl __powidf2
2070; PC64LE-NEXT:    nop
2071; PC64LE-NEXT:    li 3, 48
2072; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2073; PC64LE-NEXT:    li 4, 3
2074; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2075; PC64LE-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
2076; PC64LE-NEXT:    lfs 1, .LCPI38_1@toc@l(3)
2077; PC64LE-NEXT:    bl __powidf2
2078; PC64LE-NEXT:    nop
2079; PC64LE-NEXT:    li 3, 48
2080; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2081; PC64LE-NEXT:    li 4, 3
2082; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2083; PC64LE-NEXT:    addis 3, 2, .LCPI38_2@toc@ha
2084; PC64LE-NEXT:    xxmrghd 63, 0, 1
2085; PC64LE-NEXT:    lfd 1, .LCPI38_2@toc@l(3)
2086; PC64LE-NEXT:    bl __powidf2
2087; PC64LE-NEXT:    nop
2088; PC64LE-NEXT:    xxswapd 0, 63
2089; PC64LE-NEXT:    li 3, 64
2090; PC64LE-NEXT:    xxlor 2, 63, 63
2091; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2092; PC64LE-NEXT:    fmr 3, 1
2093; PC64LE-NEXT:    fmr 1, 0
2094; PC64LE-NEXT:    addi 1, 1, 80
2095; PC64LE-NEXT:    ld 0, 16(1)
2096; PC64LE-NEXT:    mtlr 0
2097; PC64LE-NEXT:    blr
2098;
2099; PC64LE9-LABEL: constrained_vector_powi_v3f64:
2100; PC64LE9:       # %bb.0: # %entry
2101; PC64LE9-NEXT:    mflr 0
2102; PC64LE9-NEXT:    std 0, 16(1)
2103; PC64LE9-NEXT:    stdu 1, -64(1)
2104; PC64LE9-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
2105; PC64LE9-NEXT:    li 4, 3
2106; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2107; PC64LE9-NEXT:    lfd 1, .LCPI38_0@toc@l(3)
2108; PC64LE9-NEXT:    bl __powidf2
2109; PC64LE9-NEXT:    nop
2110; PC64LE9-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
2111; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2112; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2113; PC64LE9-NEXT:    li 4, 3
2114; PC64LE9-NEXT:    lfs 1, .LCPI38_1@toc@l(3)
2115; PC64LE9-NEXT:    bl __powidf2
2116; PC64LE9-NEXT:    nop
2117; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2118; PC64LE9-NEXT:    addis 3, 2, .LCPI38_2@toc@ha
2119; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2120; PC64LE9-NEXT:    li 4, 3
2121; PC64LE9-NEXT:    xxmrghd 63, 0, 1
2122; PC64LE9-NEXT:    lfd 1, .LCPI38_2@toc@l(3)
2123; PC64LE9-NEXT:    bl __powidf2
2124; PC64LE9-NEXT:    nop
2125; PC64LE9-NEXT:    fmr 3, 1
2126; PC64LE9-NEXT:    xxswapd 1, 63
2127; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2128; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2129; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2130; PC64LE9-NEXT:    addi 1, 1, 64
2131; PC64LE9-NEXT:    ld 0, 16(1)
2132; PC64LE9-NEXT:    mtlr 0
2133; PC64LE9-NEXT:    blr
2134entry:
2135  %powi = call <3 x double> @llvm.experimental.constrained.powi.v3f64(
2136                          <3 x double> <double 42.0, double 42.1, double 42.2>,
2137                          i32 3,
2138                          metadata !"round.dynamic",
2139                          metadata !"fpexcept.strict") #1
2140  ret <3 x double> %powi
2141}
2142
2143define <4 x double> @constrained_vector_powi_v4f64() #0 {
2144; PC64LE-LABEL: constrained_vector_powi_v4f64:
2145; PC64LE:       # %bb.0: # %entry
2146; PC64LE-NEXT:    mflr 0
2147; PC64LE-NEXT:    std 0, 16(1)
2148; PC64LE-NEXT:    stdu 1, -80(1)
2149; PC64LE-NEXT:    li 3, 64
2150; PC64LE-NEXT:    li 4, 3
2151; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2152; PC64LE-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
2153; PC64LE-NEXT:    lfd 1, .LCPI39_0@toc@l(3)
2154; PC64LE-NEXT:    bl __powidf2
2155; PC64LE-NEXT:    nop
2156; PC64LE-NEXT:    li 3, 48
2157; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2158; PC64LE-NEXT:    li 4, 3
2159; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2160; PC64LE-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
2161; PC64LE-NEXT:    lfd 1, .LCPI39_1@toc@l(3)
2162; PC64LE-NEXT:    bl __powidf2
2163; PC64LE-NEXT:    nop
2164; PC64LE-NEXT:    li 3, 48
2165; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2166; PC64LE-NEXT:    li 4, 3
2167; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2168; PC64LE-NEXT:    addis 3, 2, .LCPI39_2@toc@ha
2169; PC64LE-NEXT:    xxmrghd 63, 1, 0
2170; PC64LE-NEXT:    lfd 1, .LCPI39_2@toc@l(3)
2171; PC64LE-NEXT:    bl __powidf2
2172; PC64LE-NEXT:    nop
2173; PC64LE-NEXT:    li 3, 48
2174; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2175; PC64LE-NEXT:    li 4, 3
2176; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2177; PC64LE-NEXT:    addis 3, 2, .LCPI39_3@toc@ha
2178; PC64LE-NEXT:    lfd 1, .LCPI39_3@toc@l(3)
2179; PC64LE-NEXT:    bl __powidf2
2180; PC64LE-NEXT:    nop
2181; PC64LE-NEXT:    li 3, 48
2182; PC64LE-NEXT:    vmr 2, 31
2183; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2184; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2185; PC64LE-NEXT:    li 3, 64
2186; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2187; PC64LE-NEXT:    xxmrghd 35, 1, 0
2188; PC64LE-NEXT:    addi 1, 1, 80
2189; PC64LE-NEXT:    ld 0, 16(1)
2190; PC64LE-NEXT:    mtlr 0
2191; PC64LE-NEXT:    blr
2192;
2193; PC64LE9-LABEL: constrained_vector_powi_v4f64:
2194; PC64LE9:       # %bb.0: # %entry
2195; PC64LE9-NEXT:    mflr 0
2196; PC64LE9-NEXT:    std 0, 16(1)
2197; PC64LE9-NEXT:    stdu 1, -64(1)
2198; PC64LE9-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
2199; PC64LE9-NEXT:    li 4, 3
2200; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2201; PC64LE9-NEXT:    lfd 1, .LCPI39_0@toc@l(3)
2202; PC64LE9-NEXT:    bl __powidf2
2203; PC64LE9-NEXT:    nop
2204; PC64LE9-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
2205; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2206; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2207; PC64LE9-NEXT:    li 4, 3
2208; PC64LE9-NEXT:    lfd 1, .LCPI39_1@toc@l(3)
2209; PC64LE9-NEXT:    bl __powidf2
2210; PC64LE9-NEXT:    nop
2211; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2212; PC64LE9-NEXT:    addis 3, 2, .LCPI39_2@toc@ha
2213; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2214; PC64LE9-NEXT:    li 4, 3
2215; PC64LE9-NEXT:    xxmrghd 63, 1, 0
2216; PC64LE9-NEXT:    lfd 1, .LCPI39_2@toc@l(3)
2217; PC64LE9-NEXT:    bl __powidf2
2218; PC64LE9-NEXT:    nop
2219; PC64LE9-NEXT:    addis 3, 2, .LCPI39_3@toc@ha
2220; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2221; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2222; PC64LE9-NEXT:    li 4, 3
2223; PC64LE9-NEXT:    lfd 1, .LCPI39_3@toc@l(3)
2224; PC64LE9-NEXT:    bl __powidf2
2225; PC64LE9-NEXT:    nop
2226; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2227; PC64LE9-NEXT:    vmr 2, 31
2228; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2229; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2230; PC64LE9-NEXT:    xxmrghd 35, 1, 0
2231; PC64LE9-NEXT:    addi 1, 1, 64
2232; PC64LE9-NEXT:    ld 0, 16(1)
2233; PC64LE9-NEXT:    mtlr 0
2234; PC64LE9-NEXT:    blr
2235entry:
2236  %powi = call <4 x double> @llvm.experimental.constrained.powi.v4f64(
2237                              <4 x double> <double 42.1, double 42.2,
2238                                            double 42.3, double 42.4>,
2239                              i32 3,
2240                              metadata !"round.dynamic",
2241                              metadata !"fpexcept.strict") #1
2242  ret <4 x double> %powi
2243}
2244
2245define <1 x float> @constrained_vector_sin_v1f32() #0 {
2246; PC64LE-LABEL: constrained_vector_sin_v1f32:
2247; PC64LE:       # %bb.0: # %entry
2248; PC64LE-NEXT:    mflr 0
2249; PC64LE-NEXT:    std 0, 16(1)
2250; PC64LE-NEXT:    stdu 1, -32(1)
2251; PC64LE-NEXT:    addis 3, 2, .LCPI40_0@toc@ha
2252; PC64LE-NEXT:    lfs 1, .LCPI40_0@toc@l(3)
2253; PC64LE-NEXT:    bl sinf
2254; PC64LE-NEXT:    nop
2255; PC64LE-NEXT:    addi 1, 1, 32
2256; PC64LE-NEXT:    ld 0, 16(1)
2257; PC64LE-NEXT:    mtlr 0
2258; PC64LE-NEXT:    blr
2259;
2260; PC64LE9-LABEL: constrained_vector_sin_v1f32:
2261; PC64LE9:       # %bb.0: # %entry
2262; PC64LE9-NEXT:    mflr 0
2263; PC64LE9-NEXT:    std 0, 16(1)
2264; PC64LE9-NEXT:    stdu 1, -32(1)
2265; PC64LE9-NEXT:    addis 3, 2, .LCPI40_0@toc@ha
2266; PC64LE9-NEXT:    lfs 1, .LCPI40_0@toc@l(3)
2267; PC64LE9-NEXT:    bl sinf
2268; PC64LE9-NEXT:    nop
2269; PC64LE9-NEXT:    addi 1, 1, 32
2270; PC64LE9-NEXT:    ld 0, 16(1)
2271; PC64LE9-NEXT:    mtlr 0
2272; PC64LE9-NEXT:    blr
2273entry:
2274  %sin = call <1 x float> @llvm.experimental.constrained.sin.v1f32(
2275                             <1 x float> <float 42.0>,
2276                             metadata !"round.dynamic",
2277                             metadata !"fpexcept.strict") #1
2278  ret <1 x float> %sin
2279}
2280
2281define <2 x double> @constrained_vector_sin_v2f64() #0 {
2282; PC64LE-LABEL: constrained_vector_sin_v2f64:
2283; PC64LE:       # %bb.0: # %entry
2284; PC64LE-NEXT:    mflr 0
2285; PC64LE-NEXT:    std 0, 16(1)
2286; PC64LE-NEXT:    stdu 1, -64(1)
2287; PC64LE-NEXT:    addis 3, 2, .LCPI41_0@toc@ha
2288; PC64LE-NEXT:    lfd 1, .LCPI41_0@toc@l(3)
2289; PC64LE-NEXT:    bl sin
2290; PC64LE-NEXT:    nop
2291; PC64LE-NEXT:    li 3, 48
2292; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2293; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2294; PC64LE-NEXT:    addis 3, 2, .LCPI41_1@toc@ha
2295; PC64LE-NEXT:    lfs 1, .LCPI41_1@toc@l(3)
2296; PC64LE-NEXT:    bl sin
2297; PC64LE-NEXT:    nop
2298; PC64LE-NEXT:    li 3, 48
2299; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2300; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2301; PC64LE-NEXT:    xxmrghd 34, 0, 1
2302; PC64LE-NEXT:    addi 1, 1, 64
2303; PC64LE-NEXT:    ld 0, 16(1)
2304; PC64LE-NEXT:    mtlr 0
2305; PC64LE-NEXT:    blr
2306;
2307; PC64LE9-LABEL: constrained_vector_sin_v2f64:
2308; PC64LE9:       # %bb.0: # %entry
2309; PC64LE9-NEXT:    mflr 0
2310; PC64LE9-NEXT:    std 0, 16(1)
2311; PC64LE9-NEXT:    stdu 1, -48(1)
2312; PC64LE9-NEXT:    addis 3, 2, .LCPI41_0@toc@ha
2313; PC64LE9-NEXT:    lfd 1, .LCPI41_0@toc@l(3)
2314; PC64LE9-NEXT:    bl sin
2315; PC64LE9-NEXT:    nop
2316; PC64LE9-NEXT:    addis 3, 2, .LCPI41_1@toc@ha
2317; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2318; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2319; PC64LE9-NEXT:    lfs 1, .LCPI41_1@toc@l(3)
2320; PC64LE9-NEXT:    bl sin
2321; PC64LE9-NEXT:    nop
2322; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2323; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2324; PC64LE9-NEXT:    xxmrghd 34, 0, 1
2325; PC64LE9-NEXT:    addi 1, 1, 48
2326; PC64LE9-NEXT:    ld 0, 16(1)
2327; PC64LE9-NEXT:    mtlr 0
2328; PC64LE9-NEXT:    blr
2329entry:
2330  %sin = call <2 x double> @llvm.experimental.constrained.sin.v2f64(
2331                             <2 x double> <double 42.0, double 42.1>,
2332                             metadata !"round.dynamic",
2333                             metadata !"fpexcept.strict") #1
2334  ret <2 x double> %sin
2335}
2336
2337define <3 x float> @constrained_vector_sin_v3f32() #0 {
2338; PC64LE-LABEL: constrained_vector_sin_v3f32:
2339; PC64LE:       # %bb.0: # %entry
2340; PC64LE-NEXT:    mflr 0
2341; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2342; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2343; PC64LE-NEXT:    std 0, 16(1)
2344; PC64LE-NEXT:    stdu 1, -48(1)
2345; PC64LE-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
2346; PC64LE-NEXT:    lfs 1, .LCPI42_0@toc@l(3)
2347; PC64LE-NEXT:    bl sinf
2348; PC64LE-NEXT:    nop
2349; PC64LE-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
2350; PC64LE-NEXT:    fmr 31, 1
2351; PC64LE-NEXT:    lfs 1, .LCPI42_1@toc@l(3)
2352; PC64LE-NEXT:    bl sinf
2353; PC64LE-NEXT:    nop
2354; PC64LE-NEXT:    addis 3, 2, .LCPI42_2@toc@ha
2355; PC64LE-NEXT:    fmr 30, 1
2356; PC64LE-NEXT:    lfs 1, .LCPI42_2@toc@l(3)
2357; PC64LE-NEXT:    bl sinf
2358; PC64LE-NEXT:    nop
2359; PC64LE-NEXT:    xscvdpspn 0, 30
2360; PC64LE-NEXT:    addis 3, 2, .LCPI42_3@toc@ha
2361; PC64LE-NEXT:    xscvdpspn 1, 1
2362; PC64LE-NEXT:    addi 3, 3, .LCPI42_3@toc@l
2363; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
2364; PC64LE-NEXT:    xscvdpspn 0, 31
2365; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
2366; PC64LE-NEXT:    vmrghw 2, 2, 3
2367; PC64LE-NEXT:    lvx 3, 0, 3
2368; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
2369; PC64LE-NEXT:    vperm 2, 4, 2, 3
2370; PC64LE-NEXT:    addi 1, 1, 48
2371; PC64LE-NEXT:    ld 0, 16(1)
2372; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2373; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2374; PC64LE-NEXT:    mtlr 0
2375; PC64LE-NEXT:    blr
2376;
2377; PC64LE9-LABEL: constrained_vector_sin_v3f32:
2378; PC64LE9:       # %bb.0: # %entry
2379; PC64LE9-NEXT:    mflr 0
2380; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2381; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2382; PC64LE9-NEXT:    std 0, 16(1)
2383; PC64LE9-NEXT:    stdu 1, -48(1)
2384; PC64LE9-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
2385; PC64LE9-NEXT:    lfs 1, .LCPI42_0@toc@l(3)
2386; PC64LE9-NEXT:    bl sinf
2387; PC64LE9-NEXT:    nop
2388; PC64LE9-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
2389; PC64LE9-NEXT:    fmr 31, 1
2390; PC64LE9-NEXT:    lfs 1, .LCPI42_1@toc@l(3)
2391; PC64LE9-NEXT:    bl sinf
2392; PC64LE9-NEXT:    nop
2393; PC64LE9-NEXT:    addis 3, 2, .LCPI42_2@toc@ha
2394; PC64LE9-NEXT:    fmr 30, 1
2395; PC64LE9-NEXT:    lfs 1, .LCPI42_2@toc@l(3)
2396; PC64LE9-NEXT:    bl sinf
2397; PC64LE9-NEXT:    nop
2398; PC64LE9-NEXT:    xscvdpspn 0, 1
2399; PC64LE9-NEXT:    addis 3, 2, .LCPI42_3@toc@ha
2400; PC64LE9-NEXT:    addi 3, 3, .LCPI42_3@toc@l
2401; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
2402; PC64LE9-NEXT:    xscvdpspn 0, 30
2403; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
2404; PC64LE9-NEXT:    xscvdpspn 0, 31
2405; PC64LE9-NEXT:    vmrghw 2, 3, 2
2406; PC64LE9-NEXT:    lxvx 35, 0, 3
2407; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
2408; PC64LE9-NEXT:    vperm 2, 4, 2, 3
2409; PC64LE9-NEXT:    addi 1, 1, 48
2410; PC64LE9-NEXT:    ld 0, 16(1)
2411; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2412; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2413; PC64LE9-NEXT:    mtlr 0
2414; PC64LE9-NEXT:    blr
2415entry:
2416  %sin = call <3 x float> @llvm.experimental.constrained.sin.v3f32(
2417                              <3 x float> <float 42.0, float 43.0, float 44.0>,
2418                              metadata !"round.dynamic",
2419                              metadata !"fpexcept.strict") #1
2420  ret <3 x float> %sin
2421}
2422
2423define <3 x double> @constrained_vector_sin_v3f64() #0 {
2424; PC64LE-LABEL: constrained_vector_sin_v3f64:
2425; PC64LE:       # %bb.0: # %entry
2426; PC64LE-NEXT:    mflr 0
2427; PC64LE-NEXT:    std 0, 16(1)
2428; PC64LE-NEXT:    stdu 1, -80(1)
2429; PC64LE-NEXT:    li 3, 64
2430; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2431; PC64LE-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
2432; PC64LE-NEXT:    lfd 1, .LCPI43_0@toc@l(3)
2433; PC64LE-NEXT:    bl sin
2434; PC64LE-NEXT:    nop
2435; PC64LE-NEXT:    li 3, 48
2436; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2437; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2438; PC64LE-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
2439; PC64LE-NEXT:    lfs 1, .LCPI43_1@toc@l(3)
2440; PC64LE-NEXT:    bl sin
2441; PC64LE-NEXT:    nop
2442; PC64LE-NEXT:    li 3, 48
2443; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2444; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2445; PC64LE-NEXT:    addis 3, 2, .LCPI43_2@toc@ha
2446; PC64LE-NEXT:    xxmrghd 63, 0, 1
2447; PC64LE-NEXT:    lfd 1, .LCPI43_2@toc@l(3)
2448; PC64LE-NEXT:    bl sin
2449; PC64LE-NEXT:    nop
2450; PC64LE-NEXT:    xxswapd 0, 63
2451; PC64LE-NEXT:    li 3, 64
2452; PC64LE-NEXT:    xxlor 2, 63, 63
2453; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2454; PC64LE-NEXT:    fmr 3, 1
2455; PC64LE-NEXT:    fmr 1, 0
2456; PC64LE-NEXT:    addi 1, 1, 80
2457; PC64LE-NEXT:    ld 0, 16(1)
2458; PC64LE-NEXT:    mtlr 0
2459; PC64LE-NEXT:    blr
2460;
2461; PC64LE9-LABEL: constrained_vector_sin_v3f64:
2462; PC64LE9:       # %bb.0: # %entry
2463; PC64LE9-NEXT:    mflr 0
2464; PC64LE9-NEXT:    std 0, 16(1)
2465; PC64LE9-NEXT:    stdu 1, -64(1)
2466; PC64LE9-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
2467; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2468; PC64LE9-NEXT:    lfd 1, .LCPI43_0@toc@l(3)
2469; PC64LE9-NEXT:    bl sin
2470; PC64LE9-NEXT:    nop
2471; PC64LE9-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
2472; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2473; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2474; PC64LE9-NEXT:    lfs 1, .LCPI43_1@toc@l(3)
2475; PC64LE9-NEXT:    bl sin
2476; PC64LE9-NEXT:    nop
2477; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2478; PC64LE9-NEXT:    addis 3, 2, .LCPI43_2@toc@ha
2479; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2480; PC64LE9-NEXT:    xxmrghd 63, 0, 1
2481; PC64LE9-NEXT:    lfd 1, .LCPI43_2@toc@l(3)
2482; PC64LE9-NEXT:    bl sin
2483; PC64LE9-NEXT:    nop
2484; PC64LE9-NEXT:    fmr 3, 1
2485; PC64LE9-NEXT:    xxswapd 1, 63
2486; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2487; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2488; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2489; PC64LE9-NEXT:    addi 1, 1, 64
2490; PC64LE9-NEXT:    ld 0, 16(1)
2491; PC64LE9-NEXT:    mtlr 0
2492; PC64LE9-NEXT:    blr
2493entry:
2494  %sin = call <3 x double> @llvm.experimental.constrained.sin.v3f64(
2495                          <3 x double> <double 42.0, double 42.1, double 42.2>,
2496                          metadata !"round.dynamic",
2497                          metadata !"fpexcept.strict") #1
2498  ret <3 x double> %sin
2499}
2500
2501define <4 x double> @constrained_vector_sin_v4f64() #0 {
2502; PC64LE-LABEL: constrained_vector_sin_v4f64:
2503; PC64LE:       # %bb.0: # %entry
2504; PC64LE-NEXT:    mflr 0
2505; PC64LE-NEXT:    std 0, 16(1)
2506; PC64LE-NEXT:    stdu 1, -80(1)
2507; PC64LE-NEXT:    li 3, 64
2508; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2509; PC64LE-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
2510; PC64LE-NEXT:    lfd 1, .LCPI44_0@toc@l(3)
2511; PC64LE-NEXT:    bl sin
2512; PC64LE-NEXT:    nop
2513; PC64LE-NEXT:    li 3, 48
2514; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2515; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2516; PC64LE-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
2517; PC64LE-NEXT:    lfd 1, .LCPI44_1@toc@l(3)
2518; PC64LE-NEXT:    bl sin
2519; PC64LE-NEXT:    nop
2520; PC64LE-NEXT:    li 3, 48
2521; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2522; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2523; PC64LE-NEXT:    addis 3, 2, .LCPI44_2@toc@ha
2524; PC64LE-NEXT:    xxmrghd 63, 1, 0
2525; PC64LE-NEXT:    lfd 1, .LCPI44_2@toc@l(3)
2526; PC64LE-NEXT:    bl sin
2527; PC64LE-NEXT:    nop
2528; PC64LE-NEXT:    li 3, 48
2529; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2530; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2531; PC64LE-NEXT:    addis 3, 2, .LCPI44_3@toc@ha
2532; PC64LE-NEXT:    lfs 1, .LCPI44_3@toc@l(3)
2533; PC64LE-NEXT:    bl sin
2534; PC64LE-NEXT:    nop
2535; PC64LE-NEXT:    li 3, 48
2536; PC64LE-NEXT:    vmr 3, 31
2537; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2538; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2539; PC64LE-NEXT:    li 3, 64
2540; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2541; PC64LE-NEXT:    xxmrghd 34, 0, 1
2542; PC64LE-NEXT:    addi 1, 1, 80
2543; PC64LE-NEXT:    ld 0, 16(1)
2544; PC64LE-NEXT:    mtlr 0
2545; PC64LE-NEXT:    blr
2546;
2547; PC64LE9-LABEL: constrained_vector_sin_v4f64:
2548; PC64LE9:       # %bb.0: # %entry
2549; PC64LE9-NEXT:    mflr 0
2550; PC64LE9-NEXT:    std 0, 16(1)
2551; PC64LE9-NEXT:    stdu 1, -64(1)
2552; PC64LE9-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
2553; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2554; PC64LE9-NEXT:    lfd 1, .LCPI44_0@toc@l(3)
2555; PC64LE9-NEXT:    bl sin
2556; PC64LE9-NEXT:    nop
2557; PC64LE9-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
2558; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2559; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2560; PC64LE9-NEXT:    lfd 1, .LCPI44_1@toc@l(3)
2561; PC64LE9-NEXT:    bl sin
2562; PC64LE9-NEXT:    nop
2563; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2564; PC64LE9-NEXT:    addis 3, 2, .LCPI44_2@toc@ha
2565; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2566; PC64LE9-NEXT:    xxmrghd 63, 1, 0
2567; PC64LE9-NEXT:    lfd 1, .LCPI44_2@toc@l(3)
2568; PC64LE9-NEXT:    bl sin
2569; PC64LE9-NEXT:    nop
2570; PC64LE9-NEXT:    addis 3, 2, .LCPI44_3@toc@ha
2571; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2572; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2573; PC64LE9-NEXT:    lfs 1, .LCPI44_3@toc@l(3)
2574; PC64LE9-NEXT:    bl sin
2575; PC64LE9-NEXT:    nop
2576; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2577; PC64LE9-NEXT:    vmr 3, 31
2578; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2579; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2580; PC64LE9-NEXT:    xxmrghd 34, 0, 1
2581; PC64LE9-NEXT:    addi 1, 1, 64
2582; PC64LE9-NEXT:    ld 0, 16(1)
2583; PC64LE9-NEXT:    mtlr 0
2584; PC64LE9-NEXT:    blr
2585entry:
2586  %sin = call <4 x double> @llvm.experimental.constrained.sin.v4f64(
2587                             <4 x double> <double 42.0, double 42.1,
2588                                           double 42.2, double 42.3>,
2589                             metadata !"round.dynamic",
2590                             metadata !"fpexcept.strict") #1
2591  ret <4 x double> %sin
2592}
2593
2594define <1 x float> @constrained_vector_cos_v1f32() #0 {
2595; PC64LE-LABEL: constrained_vector_cos_v1f32:
2596; PC64LE:       # %bb.0: # %entry
2597; PC64LE-NEXT:    mflr 0
2598; PC64LE-NEXT:    std 0, 16(1)
2599; PC64LE-NEXT:    stdu 1, -32(1)
2600; PC64LE-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
2601; PC64LE-NEXT:    lfs 1, .LCPI45_0@toc@l(3)
2602; PC64LE-NEXT:    bl cosf
2603; PC64LE-NEXT:    nop
2604; PC64LE-NEXT:    addi 1, 1, 32
2605; PC64LE-NEXT:    ld 0, 16(1)
2606; PC64LE-NEXT:    mtlr 0
2607; PC64LE-NEXT:    blr
2608;
2609; PC64LE9-LABEL: constrained_vector_cos_v1f32:
2610; PC64LE9:       # %bb.0: # %entry
2611; PC64LE9-NEXT:    mflr 0
2612; PC64LE9-NEXT:    std 0, 16(1)
2613; PC64LE9-NEXT:    stdu 1, -32(1)
2614; PC64LE9-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
2615; PC64LE9-NEXT:    lfs 1, .LCPI45_0@toc@l(3)
2616; PC64LE9-NEXT:    bl cosf
2617; PC64LE9-NEXT:    nop
2618; PC64LE9-NEXT:    addi 1, 1, 32
2619; PC64LE9-NEXT:    ld 0, 16(1)
2620; PC64LE9-NEXT:    mtlr 0
2621; PC64LE9-NEXT:    blr
2622entry:
2623  %cos = call <1 x float> @llvm.experimental.constrained.cos.v1f32(
2624                             <1 x float> <float 42.0>,
2625                             metadata !"round.dynamic",
2626                             metadata !"fpexcept.strict") #1
2627  ret <1 x float> %cos
2628}
2629
2630define <2 x double> @constrained_vector_cos_v2f64() #0 {
2631; PC64LE-LABEL: constrained_vector_cos_v2f64:
2632; PC64LE:       # %bb.0: # %entry
2633; PC64LE-NEXT:    mflr 0
2634; PC64LE-NEXT:    std 0, 16(1)
2635; PC64LE-NEXT:    stdu 1, -64(1)
2636; PC64LE-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
2637; PC64LE-NEXT:    lfd 1, .LCPI46_0@toc@l(3)
2638; PC64LE-NEXT:    bl cos
2639; PC64LE-NEXT:    nop
2640; PC64LE-NEXT:    li 3, 48
2641; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2642; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2643; PC64LE-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
2644; PC64LE-NEXT:    lfs 1, .LCPI46_1@toc@l(3)
2645; PC64LE-NEXT:    bl cos
2646; PC64LE-NEXT:    nop
2647; PC64LE-NEXT:    li 3, 48
2648; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2649; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2650; PC64LE-NEXT:    xxmrghd 34, 0, 1
2651; PC64LE-NEXT:    addi 1, 1, 64
2652; PC64LE-NEXT:    ld 0, 16(1)
2653; PC64LE-NEXT:    mtlr 0
2654; PC64LE-NEXT:    blr
2655;
2656; PC64LE9-LABEL: constrained_vector_cos_v2f64:
2657; PC64LE9:       # %bb.0: # %entry
2658; PC64LE9-NEXT:    mflr 0
2659; PC64LE9-NEXT:    std 0, 16(1)
2660; PC64LE9-NEXT:    stdu 1, -48(1)
2661; PC64LE9-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
2662; PC64LE9-NEXT:    lfd 1, .LCPI46_0@toc@l(3)
2663; PC64LE9-NEXT:    bl cos
2664; PC64LE9-NEXT:    nop
2665; PC64LE9-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
2666; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2667; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2668; PC64LE9-NEXT:    lfs 1, .LCPI46_1@toc@l(3)
2669; PC64LE9-NEXT:    bl cos
2670; PC64LE9-NEXT:    nop
2671; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2672; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2673; PC64LE9-NEXT:    xxmrghd 34, 0, 1
2674; PC64LE9-NEXT:    addi 1, 1, 48
2675; PC64LE9-NEXT:    ld 0, 16(1)
2676; PC64LE9-NEXT:    mtlr 0
2677; PC64LE9-NEXT:    blr
2678entry:
2679  %cos = call <2 x double> @llvm.experimental.constrained.cos.v2f64(
2680                             <2 x double> <double 42.0, double 42.1>,
2681                             metadata !"round.dynamic",
2682                             metadata !"fpexcept.strict") #1
2683  ret <2 x double> %cos
2684}
2685
2686define <3 x float> @constrained_vector_cos_v3f32() #0 {
2687; PC64LE-LABEL: constrained_vector_cos_v3f32:
2688; PC64LE:       # %bb.0: # %entry
2689; PC64LE-NEXT:    mflr 0
2690; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2691; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2692; PC64LE-NEXT:    std 0, 16(1)
2693; PC64LE-NEXT:    stdu 1, -48(1)
2694; PC64LE-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
2695; PC64LE-NEXT:    lfs 1, .LCPI47_0@toc@l(3)
2696; PC64LE-NEXT:    bl cosf
2697; PC64LE-NEXT:    nop
2698; PC64LE-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
2699; PC64LE-NEXT:    fmr 31, 1
2700; PC64LE-NEXT:    lfs 1, .LCPI47_1@toc@l(3)
2701; PC64LE-NEXT:    bl cosf
2702; PC64LE-NEXT:    nop
2703; PC64LE-NEXT:    addis 3, 2, .LCPI47_2@toc@ha
2704; PC64LE-NEXT:    fmr 30, 1
2705; PC64LE-NEXT:    lfs 1, .LCPI47_2@toc@l(3)
2706; PC64LE-NEXT:    bl cosf
2707; PC64LE-NEXT:    nop
2708; PC64LE-NEXT:    xscvdpspn 0, 30
2709; PC64LE-NEXT:    addis 3, 2, .LCPI47_3@toc@ha
2710; PC64LE-NEXT:    xscvdpspn 1, 1
2711; PC64LE-NEXT:    addi 3, 3, .LCPI47_3@toc@l
2712; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
2713; PC64LE-NEXT:    xscvdpspn 0, 31
2714; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
2715; PC64LE-NEXT:    vmrghw 2, 2, 3
2716; PC64LE-NEXT:    lvx 3, 0, 3
2717; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
2718; PC64LE-NEXT:    vperm 2, 4, 2, 3
2719; PC64LE-NEXT:    addi 1, 1, 48
2720; PC64LE-NEXT:    ld 0, 16(1)
2721; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2722; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2723; PC64LE-NEXT:    mtlr 0
2724; PC64LE-NEXT:    blr
2725;
2726; PC64LE9-LABEL: constrained_vector_cos_v3f32:
2727; PC64LE9:       # %bb.0: # %entry
2728; PC64LE9-NEXT:    mflr 0
2729; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
2730; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
2731; PC64LE9-NEXT:    std 0, 16(1)
2732; PC64LE9-NEXT:    stdu 1, -48(1)
2733; PC64LE9-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
2734; PC64LE9-NEXT:    lfs 1, .LCPI47_0@toc@l(3)
2735; PC64LE9-NEXT:    bl cosf
2736; PC64LE9-NEXT:    nop
2737; PC64LE9-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
2738; PC64LE9-NEXT:    fmr 31, 1
2739; PC64LE9-NEXT:    lfs 1, .LCPI47_1@toc@l(3)
2740; PC64LE9-NEXT:    bl cosf
2741; PC64LE9-NEXT:    nop
2742; PC64LE9-NEXT:    addis 3, 2, .LCPI47_2@toc@ha
2743; PC64LE9-NEXT:    fmr 30, 1
2744; PC64LE9-NEXT:    lfs 1, .LCPI47_2@toc@l(3)
2745; PC64LE9-NEXT:    bl cosf
2746; PC64LE9-NEXT:    nop
2747; PC64LE9-NEXT:    xscvdpspn 0, 1
2748; PC64LE9-NEXT:    addis 3, 2, .LCPI47_3@toc@ha
2749; PC64LE9-NEXT:    addi 3, 3, .LCPI47_3@toc@l
2750; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
2751; PC64LE9-NEXT:    xscvdpspn 0, 30
2752; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
2753; PC64LE9-NEXT:    xscvdpspn 0, 31
2754; PC64LE9-NEXT:    vmrghw 2, 3, 2
2755; PC64LE9-NEXT:    lxvx 35, 0, 3
2756; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
2757; PC64LE9-NEXT:    vperm 2, 4, 2, 3
2758; PC64LE9-NEXT:    addi 1, 1, 48
2759; PC64LE9-NEXT:    ld 0, 16(1)
2760; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
2761; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
2762; PC64LE9-NEXT:    mtlr 0
2763; PC64LE9-NEXT:    blr
2764entry:
2765  %cos = call <3 x float> @llvm.experimental.constrained.cos.v3f32(
2766                              <3 x float> <float 42.0, float 43.0, float 44.0>,
2767                              metadata !"round.dynamic",
2768                              metadata !"fpexcept.strict") #1
2769  ret <3 x float> %cos
2770}
2771
2772define <3 x double> @constrained_vector_cos_v3f64() #0 {
2773; PC64LE-LABEL: constrained_vector_cos_v3f64:
2774; PC64LE:       # %bb.0: # %entry
2775; PC64LE-NEXT:    mflr 0
2776; PC64LE-NEXT:    std 0, 16(1)
2777; PC64LE-NEXT:    stdu 1, -80(1)
2778; PC64LE-NEXT:    li 3, 64
2779; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2780; PC64LE-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
2781; PC64LE-NEXT:    lfd 1, .LCPI48_0@toc@l(3)
2782; PC64LE-NEXT:    bl cos
2783; PC64LE-NEXT:    nop
2784; PC64LE-NEXT:    li 3, 48
2785; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2786; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2787; PC64LE-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
2788; PC64LE-NEXT:    lfs 1, .LCPI48_1@toc@l(3)
2789; PC64LE-NEXT:    bl cos
2790; PC64LE-NEXT:    nop
2791; PC64LE-NEXT:    li 3, 48
2792; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2793; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2794; PC64LE-NEXT:    addis 3, 2, .LCPI48_2@toc@ha
2795; PC64LE-NEXT:    xxmrghd 63, 0, 1
2796; PC64LE-NEXT:    lfd 1, .LCPI48_2@toc@l(3)
2797; PC64LE-NEXT:    bl cos
2798; PC64LE-NEXT:    nop
2799; PC64LE-NEXT:    xxswapd 0, 63
2800; PC64LE-NEXT:    li 3, 64
2801; PC64LE-NEXT:    xxlor 2, 63, 63
2802; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2803; PC64LE-NEXT:    fmr 3, 1
2804; PC64LE-NEXT:    fmr 1, 0
2805; PC64LE-NEXT:    addi 1, 1, 80
2806; PC64LE-NEXT:    ld 0, 16(1)
2807; PC64LE-NEXT:    mtlr 0
2808; PC64LE-NEXT:    blr
2809;
2810; PC64LE9-LABEL: constrained_vector_cos_v3f64:
2811; PC64LE9:       # %bb.0: # %entry
2812; PC64LE9-NEXT:    mflr 0
2813; PC64LE9-NEXT:    std 0, 16(1)
2814; PC64LE9-NEXT:    stdu 1, -64(1)
2815; PC64LE9-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
2816; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2817; PC64LE9-NEXT:    lfd 1, .LCPI48_0@toc@l(3)
2818; PC64LE9-NEXT:    bl cos
2819; PC64LE9-NEXT:    nop
2820; PC64LE9-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
2821; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2822; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2823; PC64LE9-NEXT:    lfs 1, .LCPI48_1@toc@l(3)
2824; PC64LE9-NEXT:    bl cos
2825; PC64LE9-NEXT:    nop
2826; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2827; PC64LE9-NEXT:    addis 3, 2, .LCPI48_2@toc@ha
2828; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2829; PC64LE9-NEXT:    xxmrghd 63, 0, 1
2830; PC64LE9-NEXT:    lfd 1, .LCPI48_2@toc@l(3)
2831; PC64LE9-NEXT:    bl cos
2832; PC64LE9-NEXT:    nop
2833; PC64LE9-NEXT:    fmr 3, 1
2834; PC64LE9-NEXT:    xxswapd 1, 63
2835; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
2836; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2837; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
2838; PC64LE9-NEXT:    addi 1, 1, 64
2839; PC64LE9-NEXT:    ld 0, 16(1)
2840; PC64LE9-NEXT:    mtlr 0
2841; PC64LE9-NEXT:    blr
2842entry:
2843  %cos = call <3 x double> @llvm.experimental.constrained.cos.v3f64(
2844                          <3 x double> <double 42.0, double 42.1, double 42.2>,
2845                          metadata !"round.dynamic",
2846                          metadata !"fpexcept.strict") #1
2847  ret <3 x double> %cos
2848}
2849
2850define <4 x double> @constrained_vector_cos_v4f64() #0 {
2851; PC64LE-LABEL: constrained_vector_cos_v4f64:
2852; PC64LE:       # %bb.0: # %entry
2853; PC64LE-NEXT:    mflr 0
2854; PC64LE-NEXT:    std 0, 16(1)
2855; PC64LE-NEXT:    stdu 1, -80(1)
2856; PC64LE-NEXT:    li 3, 64
2857; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
2858; PC64LE-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
2859; PC64LE-NEXT:    lfd 1, .LCPI49_0@toc@l(3)
2860; PC64LE-NEXT:    bl cos
2861; PC64LE-NEXT:    nop
2862; PC64LE-NEXT:    li 3, 48
2863; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2864; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2865; PC64LE-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
2866; PC64LE-NEXT:    lfd 1, .LCPI49_1@toc@l(3)
2867; PC64LE-NEXT:    bl cos
2868; PC64LE-NEXT:    nop
2869; PC64LE-NEXT:    li 3, 48
2870; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2871; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2872; PC64LE-NEXT:    addis 3, 2, .LCPI49_2@toc@ha
2873; PC64LE-NEXT:    xxmrghd 63, 1, 0
2874; PC64LE-NEXT:    lfd 1, .LCPI49_2@toc@l(3)
2875; PC64LE-NEXT:    bl cos
2876; PC64LE-NEXT:    nop
2877; PC64LE-NEXT:    li 3, 48
2878; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2879; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2880; PC64LE-NEXT:    addis 3, 2, .LCPI49_3@toc@ha
2881; PC64LE-NEXT:    lfs 1, .LCPI49_3@toc@l(3)
2882; PC64LE-NEXT:    bl cos
2883; PC64LE-NEXT:    nop
2884; PC64LE-NEXT:    li 3, 48
2885; PC64LE-NEXT:    vmr 3, 31
2886; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2887; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2888; PC64LE-NEXT:    li 3, 64
2889; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
2890; PC64LE-NEXT:    xxmrghd 34, 0, 1
2891; PC64LE-NEXT:    addi 1, 1, 80
2892; PC64LE-NEXT:    ld 0, 16(1)
2893; PC64LE-NEXT:    mtlr 0
2894; PC64LE-NEXT:    blr
2895;
2896; PC64LE9-LABEL: constrained_vector_cos_v4f64:
2897; PC64LE9:       # %bb.0: # %entry
2898; PC64LE9-NEXT:    mflr 0
2899; PC64LE9-NEXT:    std 0, 16(1)
2900; PC64LE9-NEXT:    stdu 1, -64(1)
2901; PC64LE9-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
2902; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
2903; PC64LE9-NEXT:    lfd 1, .LCPI49_0@toc@l(3)
2904; PC64LE9-NEXT:    bl cos
2905; PC64LE9-NEXT:    nop
2906; PC64LE9-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
2907; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2908; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2909; PC64LE9-NEXT:    lfd 1, .LCPI49_1@toc@l(3)
2910; PC64LE9-NEXT:    bl cos
2911; PC64LE9-NEXT:    nop
2912; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2913; PC64LE9-NEXT:    addis 3, 2, .LCPI49_2@toc@ha
2914; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2915; PC64LE9-NEXT:    xxmrghd 63, 1, 0
2916; PC64LE9-NEXT:    lfd 1, .LCPI49_2@toc@l(3)
2917; PC64LE9-NEXT:    bl cos
2918; PC64LE9-NEXT:    nop
2919; PC64LE9-NEXT:    addis 3, 2, .LCPI49_3@toc@ha
2920; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2921; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
2922; PC64LE9-NEXT:    lfs 1, .LCPI49_3@toc@l(3)
2923; PC64LE9-NEXT:    bl cos
2924; PC64LE9-NEXT:    nop
2925; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
2926; PC64LE9-NEXT:    vmr 3, 31
2927; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
2928; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2929; PC64LE9-NEXT:    xxmrghd 34, 0, 1
2930; PC64LE9-NEXT:    addi 1, 1, 64
2931; PC64LE9-NEXT:    ld 0, 16(1)
2932; PC64LE9-NEXT:    mtlr 0
2933; PC64LE9-NEXT:    blr
2934entry:
2935  %cos = call <4 x double> @llvm.experimental.constrained.cos.v4f64(
2936                             <4 x double> <double 42.0, double 42.1,
2937                                           double 42.2, double 42.3>,
2938                             metadata !"round.dynamic",
2939                             metadata !"fpexcept.strict") #1
2940  ret <4 x double> %cos
2941}
2942
2943define <1 x float> @constrained_vector_exp_v1f32() #0 {
2944; PC64LE-LABEL: constrained_vector_exp_v1f32:
2945; PC64LE:       # %bb.0: # %entry
2946; PC64LE-NEXT:    mflr 0
2947; PC64LE-NEXT:    std 0, 16(1)
2948; PC64LE-NEXT:    stdu 1, -32(1)
2949; PC64LE-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
2950; PC64LE-NEXT:    lfs 1, .LCPI50_0@toc@l(3)
2951; PC64LE-NEXT:    bl expf
2952; PC64LE-NEXT:    nop
2953; PC64LE-NEXT:    addi 1, 1, 32
2954; PC64LE-NEXT:    ld 0, 16(1)
2955; PC64LE-NEXT:    mtlr 0
2956; PC64LE-NEXT:    blr
2957;
2958; PC64LE9-LABEL: constrained_vector_exp_v1f32:
2959; PC64LE9:       # %bb.0: # %entry
2960; PC64LE9-NEXT:    mflr 0
2961; PC64LE9-NEXT:    std 0, 16(1)
2962; PC64LE9-NEXT:    stdu 1, -32(1)
2963; PC64LE9-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
2964; PC64LE9-NEXT:    lfs 1, .LCPI50_0@toc@l(3)
2965; PC64LE9-NEXT:    bl expf
2966; PC64LE9-NEXT:    nop
2967; PC64LE9-NEXT:    addi 1, 1, 32
2968; PC64LE9-NEXT:    ld 0, 16(1)
2969; PC64LE9-NEXT:    mtlr 0
2970; PC64LE9-NEXT:    blr
2971entry:
2972  %exp = call <1 x float> @llvm.experimental.constrained.exp.v1f32(
2973                             <1 x float> <float 42.0>,
2974                             metadata !"round.dynamic",
2975                             metadata !"fpexcept.strict") #1
2976  ret <1 x float> %exp
2977}
2978
2979define <2 x double> @constrained_vector_exp_v2f64() #0 {
2980; PC64LE-LABEL: constrained_vector_exp_v2f64:
2981; PC64LE:       # %bb.0: # %entry
2982; PC64LE-NEXT:    mflr 0
2983; PC64LE-NEXT:    std 0, 16(1)
2984; PC64LE-NEXT:    stdu 1, -64(1)
2985; PC64LE-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
2986; PC64LE-NEXT:    lfd 1, .LCPI51_0@toc@l(3)
2987; PC64LE-NEXT:    bl exp
2988; PC64LE-NEXT:    nop
2989; PC64LE-NEXT:    li 3, 48
2990; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2991; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
2992; PC64LE-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
2993; PC64LE-NEXT:    lfs 1, .LCPI51_1@toc@l(3)
2994; PC64LE-NEXT:    bl exp
2995; PC64LE-NEXT:    nop
2996; PC64LE-NEXT:    li 3, 48
2997; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
2998; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
2999; PC64LE-NEXT:    xxmrghd 34, 0, 1
3000; PC64LE-NEXT:    addi 1, 1, 64
3001; PC64LE-NEXT:    ld 0, 16(1)
3002; PC64LE-NEXT:    mtlr 0
3003; PC64LE-NEXT:    blr
3004;
3005; PC64LE9-LABEL: constrained_vector_exp_v2f64:
3006; PC64LE9:       # %bb.0: # %entry
3007; PC64LE9-NEXT:    mflr 0
3008; PC64LE9-NEXT:    std 0, 16(1)
3009; PC64LE9-NEXT:    stdu 1, -48(1)
3010; PC64LE9-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
3011; PC64LE9-NEXT:    lfd 1, .LCPI51_0@toc@l(3)
3012; PC64LE9-NEXT:    bl exp
3013; PC64LE9-NEXT:    nop
3014; PC64LE9-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
3015; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3016; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3017; PC64LE9-NEXT:    lfs 1, .LCPI51_1@toc@l(3)
3018; PC64LE9-NEXT:    bl exp
3019; PC64LE9-NEXT:    nop
3020; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3021; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3022; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3023; PC64LE9-NEXT:    addi 1, 1, 48
3024; PC64LE9-NEXT:    ld 0, 16(1)
3025; PC64LE9-NEXT:    mtlr 0
3026; PC64LE9-NEXT:    blr
3027entry:
3028  %exp = call <2 x double> @llvm.experimental.constrained.exp.v2f64(
3029                             <2 x double> <double 42.0, double 42.1>,
3030                             metadata !"round.dynamic",
3031                             metadata !"fpexcept.strict") #1
3032  ret <2 x double> %exp
3033}
3034
3035define <3 x float> @constrained_vector_exp_v3f32() #0 {
3036; PC64LE-LABEL: constrained_vector_exp_v3f32:
3037; PC64LE:       # %bb.0: # %entry
3038; PC64LE-NEXT:    mflr 0
3039; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3040; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3041; PC64LE-NEXT:    std 0, 16(1)
3042; PC64LE-NEXT:    stdu 1, -48(1)
3043; PC64LE-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
3044; PC64LE-NEXT:    lfs 1, .LCPI52_0@toc@l(3)
3045; PC64LE-NEXT:    bl expf
3046; PC64LE-NEXT:    nop
3047; PC64LE-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
3048; PC64LE-NEXT:    fmr 31, 1
3049; PC64LE-NEXT:    lfs 1, .LCPI52_1@toc@l(3)
3050; PC64LE-NEXT:    bl expf
3051; PC64LE-NEXT:    nop
3052; PC64LE-NEXT:    addis 3, 2, .LCPI52_2@toc@ha
3053; PC64LE-NEXT:    fmr 30, 1
3054; PC64LE-NEXT:    lfs 1, .LCPI52_2@toc@l(3)
3055; PC64LE-NEXT:    bl expf
3056; PC64LE-NEXT:    nop
3057; PC64LE-NEXT:    xscvdpspn 0, 30
3058; PC64LE-NEXT:    addis 3, 2, .LCPI52_3@toc@ha
3059; PC64LE-NEXT:    xscvdpspn 1, 1
3060; PC64LE-NEXT:    addi 3, 3, .LCPI52_3@toc@l
3061; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
3062; PC64LE-NEXT:    xscvdpspn 0, 31
3063; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
3064; PC64LE-NEXT:    vmrghw 2, 2, 3
3065; PC64LE-NEXT:    lvx 3, 0, 3
3066; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
3067; PC64LE-NEXT:    vperm 2, 4, 2, 3
3068; PC64LE-NEXT:    addi 1, 1, 48
3069; PC64LE-NEXT:    ld 0, 16(1)
3070; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3071; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3072; PC64LE-NEXT:    mtlr 0
3073; PC64LE-NEXT:    blr
3074;
3075; PC64LE9-LABEL: constrained_vector_exp_v3f32:
3076; PC64LE9:       # %bb.0: # %entry
3077; PC64LE9-NEXT:    mflr 0
3078; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3079; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3080; PC64LE9-NEXT:    std 0, 16(1)
3081; PC64LE9-NEXT:    stdu 1, -48(1)
3082; PC64LE9-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
3083; PC64LE9-NEXT:    lfs 1, .LCPI52_0@toc@l(3)
3084; PC64LE9-NEXT:    bl expf
3085; PC64LE9-NEXT:    nop
3086; PC64LE9-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
3087; PC64LE9-NEXT:    fmr 31, 1
3088; PC64LE9-NEXT:    lfs 1, .LCPI52_1@toc@l(3)
3089; PC64LE9-NEXT:    bl expf
3090; PC64LE9-NEXT:    nop
3091; PC64LE9-NEXT:    addis 3, 2, .LCPI52_2@toc@ha
3092; PC64LE9-NEXT:    fmr 30, 1
3093; PC64LE9-NEXT:    lfs 1, .LCPI52_2@toc@l(3)
3094; PC64LE9-NEXT:    bl expf
3095; PC64LE9-NEXT:    nop
3096; PC64LE9-NEXT:    xscvdpspn 0, 1
3097; PC64LE9-NEXT:    addis 3, 2, .LCPI52_3@toc@ha
3098; PC64LE9-NEXT:    addi 3, 3, .LCPI52_3@toc@l
3099; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
3100; PC64LE9-NEXT:    xscvdpspn 0, 30
3101; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
3102; PC64LE9-NEXT:    xscvdpspn 0, 31
3103; PC64LE9-NEXT:    vmrghw 2, 3, 2
3104; PC64LE9-NEXT:    lxvx 35, 0, 3
3105; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
3106; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3107; PC64LE9-NEXT:    addi 1, 1, 48
3108; PC64LE9-NEXT:    ld 0, 16(1)
3109; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3110; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3111; PC64LE9-NEXT:    mtlr 0
3112; PC64LE9-NEXT:    blr
3113entry:
3114  %exp = call <3 x float> @llvm.experimental.constrained.exp.v3f32(
3115                              <3 x float> <float 42.0, float 43.0, float 44.0>,
3116                              metadata !"round.dynamic",
3117                              metadata !"fpexcept.strict") #1
3118  ret <3 x float> %exp
3119}
3120
3121define <3 x double> @constrained_vector_exp_v3f64() #0 {
3122; PC64LE-LABEL: constrained_vector_exp_v3f64:
3123; PC64LE:       # %bb.0: # %entry
3124; PC64LE-NEXT:    mflr 0
3125; PC64LE-NEXT:    std 0, 16(1)
3126; PC64LE-NEXT:    stdu 1, -80(1)
3127; PC64LE-NEXT:    li 3, 64
3128; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3129; PC64LE-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
3130; PC64LE-NEXT:    lfd 1, .LCPI53_0@toc@l(3)
3131; PC64LE-NEXT:    bl exp
3132; PC64LE-NEXT:    nop
3133; PC64LE-NEXT:    li 3, 48
3134; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3135; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3136; PC64LE-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
3137; PC64LE-NEXT:    lfs 1, .LCPI53_1@toc@l(3)
3138; PC64LE-NEXT:    bl exp
3139; PC64LE-NEXT:    nop
3140; PC64LE-NEXT:    li 3, 48
3141; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3142; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3143; PC64LE-NEXT:    addis 3, 2, .LCPI53_2@toc@ha
3144; PC64LE-NEXT:    xxmrghd 63, 0, 1
3145; PC64LE-NEXT:    lfd 1, .LCPI53_2@toc@l(3)
3146; PC64LE-NEXT:    bl exp
3147; PC64LE-NEXT:    nop
3148; PC64LE-NEXT:    xxswapd 0, 63
3149; PC64LE-NEXT:    li 3, 64
3150; PC64LE-NEXT:    xxlor 2, 63, 63
3151; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3152; PC64LE-NEXT:    fmr 3, 1
3153; PC64LE-NEXT:    fmr 1, 0
3154; PC64LE-NEXT:    addi 1, 1, 80
3155; PC64LE-NEXT:    ld 0, 16(1)
3156; PC64LE-NEXT:    mtlr 0
3157; PC64LE-NEXT:    blr
3158;
3159; PC64LE9-LABEL: constrained_vector_exp_v3f64:
3160; PC64LE9:       # %bb.0: # %entry
3161; PC64LE9-NEXT:    mflr 0
3162; PC64LE9-NEXT:    std 0, 16(1)
3163; PC64LE9-NEXT:    stdu 1, -64(1)
3164; PC64LE9-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
3165; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3166; PC64LE9-NEXT:    lfd 1, .LCPI53_0@toc@l(3)
3167; PC64LE9-NEXT:    bl exp
3168; PC64LE9-NEXT:    nop
3169; PC64LE9-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
3170; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3171; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3172; PC64LE9-NEXT:    lfs 1, .LCPI53_1@toc@l(3)
3173; PC64LE9-NEXT:    bl exp
3174; PC64LE9-NEXT:    nop
3175; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3176; PC64LE9-NEXT:    addis 3, 2, .LCPI53_2@toc@ha
3177; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3178; PC64LE9-NEXT:    xxmrghd 63, 0, 1
3179; PC64LE9-NEXT:    lfd 1, .LCPI53_2@toc@l(3)
3180; PC64LE9-NEXT:    bl exp
3181; PC64LE9-NEXT:    nop
3182; PC64LE9-NEXT:    fmr 3, 1
3183; PC64LE9-NEXT:    xxswapd 1, 63
3184; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3185; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3186; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3187; PC64LE9-NEXT:    addi 1, 1, 64
3188; PC64LE9-NEXT:    ld 0, 16(1)
3189; PC64LE9-NEXT:    mtlr 0
3190; PC64LE9-NEXT:    blr
3191entry:
3192  %exp = call <3 x double> @llvm.experimental.constrained.exp.v3f64(
3193                          <3 x double> <double 42.0, double 42.1, double 42.2>,
3194                          metadata !"round.dynamic",
3195                          metadata !"fpexcept.strict") #1
3196  ret <3 x double> %exp
3197}
3198
3199define <4 x double> @constrained_vector_exp_v4f64() #0 {
3200; PC64LE-LABEL: constrained_vector_exp_v4f64:
3201; PC64LE:       # %bb.0: # %entry
3202; PC64LE-NEXT:    mflr 0
3203; PC64LE-NEXT:    std 0, 16(1)
3204; PC64LE-NEXT:    stdu 1, -80(1)
3205; PC64LE-NEXT:    li 3, 64
3206; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3207; PC64LE-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
3208; PC64LE-NEXT:    lfd 1, .LCPI54_0@toc@l(3)
3209; PC64LE-NEXT:    bl exp
3210; PC64LE-NEXT:    nop
3211; PC64LE-NEXT:    li 3, 48
3212; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3213; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3214; PC64LE-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
3215; PC64LE-NEXT:    lfd 1, .LCPI54_1@toc@l(3)
3216; PC64LE-NEXT:    bl exp
3217; PC64LE-NEXT:    nop
3218; PC64LE-NEXT:    li 3, 48
3219; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3220; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3221; PC64LE-NEXT:    addis 3, 2, .LCPI54_2@toc@ha
3222; PC64LE-NEXT:    xxmrghd 63, 1, 0
3223; PC64LE-NEXT:    lfd 1, .LCPI54_2@toc@l(3)
3224; PC64LE-NEXT:    bl exp
3225; PC64LE-NEXT:    nop
3226; PC64LE-NEXT:    li 3, 48
3227; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3228; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3229; PC64LE-NEXT:    addis 3, 2, .LCPI54_3@toc@ha
3230; PC64LE-NEXT:    lfs 1, .LCPI54_3@toc@l(3)
3231; PC64LE-NEXT:    bl exp
3232; PC64LE-NEXT:    nop
3233; PC64LE-NEXT:    li 3, 48
3234; PC64LE-NEXT:    vmr 3, 31
3235; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3236; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3237; PC64LE-NEXT:    li 3, 64
3238; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3239; PC64LE-NEXT:    xxmrghd 34, 0, 1
3240; PC64LE-NEXT:    addi 1, 1, 80
3241; PC64LE-NEXT:    ld 0, 16(1)
3242; PC64LE-NEXT:    mtlr 0
3243; PC64LE-NEXT:    blr
3244;
3245; PC64LE9-LABEL: constrained_vector_exp_v4f64:
3246; PC64LE9:       # %bb.0: # %entry
3247; PC64LE9-NEXT:    mflr 0
3248; PC64LE9-NEXT:    std 0, 16(1)
3249; PC64LE9-NEXT:    stdu 1, -64(1)
3250; PC64LE9-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
3251; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3252; PC64LE9-NEXT:    lfd 1, .LCPI54_0@toc@l(3)
3253; PC64LE9-NEXT:    bl exp
3254; PC64LE9-NEXT:    nop
3255; PC64LE9-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
3256; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3257; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3258; PC64LE9-NEXT:    lfd 1, .LCPI54_1@toc@l(3)
3259; PC64LE9-NEXT:    bl exp
3260; PC64LE9-NEXT:    nop
3261; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3262; PC64LE9-NEXT:    addis 3, 2, .LCPI54_2@toc@ha
3263; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3264; PC64LE9-NEXT:    xxmrghd 63, 1, 0
3265; PC64LE9-NEXT:    lfd 1, .LCPI54_2@toc@l(3)
3266; PC64LE9-NEXT:    bl exp
3267; PC64LE9-NEXT:    nop
3268; PC64LE9-NEXT:    addis 3, 2, .LCPI54_3@toc@ha
3269; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3270; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3271; PC64LE9-NEXT:    lfs 1, .LCPI54_3@toc@l(3)
3272; PC64LE9-NEXT:    bl exp
3273; PC64LE9-NEXT:    nop
3274; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3275; PC64LE9-NEXT:    vmr 3, 31
3276; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3277; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3278; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3279; PC64LE9-NEXT:    addi 1, 1, 64
3280; PC64LE9-NEXT:    ld 0, 16(1)
3281; PC64LE9-NEXT:    mtlr 0
3282; PC64LE9-NEXT:    blr
3283entry:
3284  %exp = call <4 x double> @llvm.experimental.constrained.exp.v4f64(
3285                             <4 x double> <double 42.0, double 42.1,
3286                                           double 42.2, double 42.3>,
3287                             metadata !"round.dynamic",
3288                             metadata !"fpexcept.strict") #1
3289  ret <4 x double> %exp
3290}
3291
3292define <1 x float> @constrained_vector_exp2_v1f32() #0 {
3293; PC64LE-LABEL: constrained_vector_exp2_v1f32:
3294; PC64LE:       # %bb.0: # %entry
3295; PC64LE-NEXT:    mflr 0
3296; PC64LE-NEXT:    std 0, 16(1)
3297; PC64LE-NEXT:    stdu 1, -32(1)
3298; PC64LE-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
3299; PC64LE-NEXT:    lfs 1, .LCPI55_0@toc@l(3)
3300; PC64LE-NEXT:    bl exp2f
3301; PC64LE-NEXT:    nop
3302; PC64LE-NEXT:    addi 1, 1, 32
3303; PC64LE-NEXT:    ld 0, 16(1)
3304; PC64LE-NEXT:    mtlr 0
3305; PC64LE-NEXT:    blr
3306;
3307; PC64LE9-LABEL: constrained_vector_exp2_v1f32:
3308; PC64LE9:       # %bb.0: # %entry
3309; PC64LE9-NEXT:    mflr 0
3310; PC64LE9-NEXT:    std 0, 16(1)
3311; PC64LE9-NEXT:    stdu 1, -32(1)
3312; PC64LE9-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
3313; PC64LE9-NEXT:    lfs 1, .LCPI55_0@toc@l(3)
3314; PC64LE9-NEXT:    bl exp2f
3315; PC64LE9-NEXT:    nop
3316; PC64LE9-NEXT:    addi 1, 1, 32
3317; PC64LE9-NEXT:    ld 0, 16(1)
3318; PC64LE9-NEXT:    mtlr 0
3319; PC64LE9-NEXT:    blr
3320entry:
3321  %exp2 = call <1 x float> @llvm.experimental.constrained.exp2.v1f32(
3322                             <1 x float> <float 42.0>,
3323                             metadata !"round.dynamic",
3324                             metadata !"fpexcept.strict") #1
3325  ret <1 x float> %exp2
3326}
3327
3328define <2 x double> @constrained_vector_exp2_v2f64() #0 {
3329; PC64LE-LABEL: constrained_vector_exp2_v2f64:
3330; PC64LE:       # %bb.0: # %entry
3331; PC64LE-NEXT:    mflr 0
3332; PC64LE-NEXT:    std 0, 16(1)
3333; PC64LE-NEXT:    stdu 1, -64(1)
3334; PC64LE-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
3335; PC64LE-NEXT:    lfd 1, .LCPI56_0@toc@l(3)
3336; PC64LE-NEXT:    bl exp2
3337; PC64LE-NEXT:    nop
3338; PC64LE-NEXT:    li 3, 48
3339; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3340; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3341; PC64LE-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
3342; PC64LE-NEXT:    lfs 1, .LCPI56_1@toc@l(3)
3343; PC64LE-NEXT:    bl exp2
3344; PC64LE-NEXT:    nop
3345; PC64LE-NEXT:    li 3, 48
3346; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3347; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3348; PC64LE-NEXT:    xxmrghd 34, 1, 0
3349; PC64LE-NEXT:    addi 1, 1, 64
3350; PC64LE-NEXT:    ld 0, 16(1)
3351; PC64LE-NEXT:    mtlr 0
3352; PC64LE-NEXT:    blr
3353;
3354; PC64LE9-LABEL: constrained_vector_exp2_v2f64:
3355; PC64LE9:       # %bb.0: # %entry
3356; PC64LE9-NEXT:    mflr 0
3357; PC64LE9-NEXT:    std 0, 16(1)
3358; PC64LE9-NEXT:    stdu 1, -48(1)
3359; PC64LE9-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
3360; PC64LE9-NEXT:    lfd 1, .LCPI56_0@toc@l(3)
3361; PC64LE9-NEXT:    bl exp2
3362; PC64LE9-NEXT:    nop
3363; PC64LE9-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
3364; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3365; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3366; PC64LE9-NEXT:    lfs 1, .LCPI56_1@toc@l(3)
3367; PC64LE9-NEXT:    bl exp2
3368; PC64LE9-NEXT:    nop
3369; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3370; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3371; PC64LE9-NEXT:    xxmrghd 34, 1, 0
3372; PC64LE9-NEXT:    addi 1, 1, 48
3373; PC64LE9-NEXT:    ld 0, 16(1)
3374; PC64LE9-NEXT:    mtlr 0
3375; PC64LE9-NEXT:    blr
3376entry:
3377  %exp2 = call <2 x double> @llvm.experimental.constrained.exp2.v2f64(
3378                              <2 x double> <double 42.1, double 42.0>,
3379                              metadata !"round.dynamic",
3380                              metadata !"fpexcept.strict") #1
3381  ret <2 x double> %exp2
3382}
3383
3384define <3 x float> @constrained_vector_exp2_v3f32() #0 {
3385; PC64LE-LABEL: constrained_vector_exp2_v3f32:
3386; PC64LE:       # %bb.0: # %entry
3387; PC64LE-NEXT:    mflr 0
3388; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3389; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3390; PC64LE-NEXT:    std 0, 16(1)
3391; PC64LE-NEXT:    stdu 1, -48(1)
3392; PC64LE-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
3393; PC64LE-NEXT:    lfs 1, .LCPI57_0@toc@l(3)
3394; PC64LE-NEXT:    bl exp2f
3395; PC64LE-NEXT:    nop
3396; PC64LE-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
3397; PC64LE-NEXT:    fmr 31, 1
3398; PC64LE-NEXT:    lfs 1, .LCPI57_1@toc@l(3)
3399; PC64LE-NEXT:    bl exp2f
3400; PC64LE-NEXT:    nop
3401; PC64LE-NEXT:    addis 3, 2, .LCPI57_2@toc@ha
3402; PC64LE-NEXT:    fmr 30, 1
3403; PC64LE-NEXT:    lfs 1, .LCPI57_2@toc@l(3)
3404; PC64LE-NEXT:    bl exp2f
3405; PC64LE-NEXT:    nop
3406; PC64LE-NEXT:    xscvdpspn 0, 30
3407; PC64LE-NEXT:    addis 3, 2, .LCPI57_3@toc@ha
3408; PC64LE-NEXT:    xscvdpspn 1, 1
3409; PC64LE-NEXT:    addi 3, 3, .LCPI57_3@toc@l
3410; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
3411; PC64LE-NEXT:    xscvdpspn 0, 31
3412; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
3413; PC64LE-NEXT:    vmrghw 2, 2, 3
3414; PC64LE-NEXT:    lvx 3, 0, 3
3415; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
3416; PC64LE-NEXT:    vperm 2, 4, 2, 3
3417; PC64LE-NEXT:    addi 1, 1, 48
3418; PC64LE-NEXT:    ld 0, 16(1)
3419; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3420; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3421; PC64LE-NEXT:    mtlr 0
3422; PC64LE-NEXT:    blr
3423;
3424; PC64LE9-LABEL: constrained_vector_exp2_v3f32:
3425; PC64LE9:       # %bb.0: # %entry
3426; PC64LE9-NEXT:    mflr 0
3427; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3428; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3429; PC64LE9-NEXT:    std 0, 16(1)
3430; PC64LE9-NEXT:    stdu 1, -48(1)
3431; PC64LE9-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
3432; PC64LE9-NEXT:    lfs 1, .LCPI57_0@toc@l(3)
3433; PC64LE9-NEXT:    bl exp2f
3434; PC64LE9-NEXT:    nop
3435; PC64LE9-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
3436; PC64LE9-NEXT:    fmr 31, 1
3437; PC64LE9-NEXT:    lfs 1, .LCPI57_1@toc@l(3)
3438; PC64LE9-NEXT:    bl exp2f
3439; PC64LE9-NEXT:    nop
3440; PC64LE9-NEXT:    addis 3, 2, .LCPI57_2@toc@ha
3441; PC64LE9-NEXT:    fmr 30, 1
3442; PC64LE9-NEXT:    lfs 1, .LCPI57_2@toc@l(3)
3443; PC64LE9-NEXT:    bl exp2f
3444; PC64LE9-NEXT:    nop
3445; PC64LE9-NEXT:    xscvdpspn 0, 1
3446; PC64LE9-NEXT:    addis 3, 2, .LCPI57_3@toc@ha
3447; PC64LE9-NEXT:    addi 3, 3, .LCPI57_3@toc@l
3448; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
3449; PC64LE9-NEXT:    xscvdpspn 0, 30
3450; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
3451; PC64LE9-NEXT:    xscvdpspn 0, 31
3452; PC64LE9-NEXT:    vmrghw 2, 3, 2
3453; PC64LE9-NEXT:    lxvx 35, 0, 3
3454; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
3455; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3456; PC64LE9-NEXT:    addi 1, 1, 48
3457; PC64LE9-NEXT:    ld 0, 16(1)
3458; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3459; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3460; PC64LE9-NEXT:    mtlr 0
3461; PC64LE9-NEXT:    blr
3462entry:
3463  %exp2 = call <3 x float> @llvm.experimental.constrained.exp2.v3f32(
3464                              <3 x float> <float 42.0, float 43.0, float 44.0>,
3465                              metadata !"round.dynamic",
3466                              metadata !"fpexcept.strict") #1
3467  ret <3 x float> %exp2
3468}
3469
3470define <3 x double> @constrained_vector_exp2_v3f64() #0 {
3471; PC64LE-LABEL: constrained_vector_exp2_v3f64:
3472; PC64LE:       # %bb.0: # %entry
3473; PC64LE-NEXT:    mflr 0
3474; PC64LE-NEXT:    std 0, 16(1)
3475; PC64LE-NEXT:    stdu 1, -80(1)
3476; PC64LE-NEXT:    li 3, 64
3477; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3478; PC64LE-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
3479; PC64LE-NEXT:    lfd 1, .LCPI58_0@toc@l(3)
3480; PC64LE-NEXT:    bl exp2
3481; PC64LE-NEXT:    nop
3482; PC64LE-NEXT:    li 3, 48
3483; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3484; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3485; PC64LE-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
3486; PC64LE-NEXT:    lfs 1, .LCPI58_1@toc@l(3)
3487; PC64LE-NEXT:    bl exp2
3488; PC64LE-NEXT:    nop
3489; PC64LE-NEXT:    li 3, 48
3490; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3491; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3492; PC64LE-NEXT:    addis 3, 2, .LCPI58_2@toc@ha
3493; PC64LE-NEXT:    xxmrghd 63, 0, 1
3494; PC64LE-NEXT:    lfd 1, .LCPI58_2@toc@l(3)
3495; PC64LE-NEXT:    bl exp2
3496; PC64LE-NEXT:    nop
3497; PC64LE-NEXT:    xxswapd 0, 63
3498; PC64LE-NEXT:    li 3, 64
3499; PC64LE-NEXT:    xxlor 2, 63, 63
3500; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3501; PC64LE-NEXT:    fmr 3, 1
3502; PC64LE-NEXT:    fmr 1, 0
3503; PC64LE-NEXT:    addi 1, 1, 80
3504; PC64LE-NEXT:    ld 0, 16(1)
3505; PC64LE-NEXT:    mtlr 0
3506; PC64LE-NEXT:    blr
3507;
3508; PC64LE9-LABEL: constrained_vector_exp2_v3f64:
3509; PC64LE9:       # %bb.0: # %entry
3510; PC64LE9-NEXT:    mflr 0
3511; PC64LE9-NEXT:    std 0, 16(1)
3512; PC64LE9-NEXT:    stdu 1, -64(1)
3513; PC64LE9-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
3514; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3515; PC64LE9-NEXT:    lfd 1, .LCPI58_0@toc@l(3)
3516; PC64LE9-NEXT:    bl exp2
3517; PC64LE9-NEXT:    nop
3518; PC64LE9-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
3519; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3520; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3521; PC64LE9-NEXT:    lfs 1, .LCPI58_1@toc@l(3)
3522; PC64LE9-NEXT:    bl exp2
3523; PC64LE9-NEXT:    nop
3524; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3525; PC64LE9-NEXT:    addis 3, 2, .LCPI58_2@toc@ha
3526; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3527; PC64LE9-NEXT:    xxmrghd 63, 0, 1
3528; PC64LE9-NEXT:    lfd 1, .LCPI58_2@toc@l(3)
3529; PC64LE9-NEXT:    bl exp2
3530; PC64LE9-NEXT:    nop
3531; PC64LE9-NEXT:    fmr 3, 1
3532; PC64LE9-NEXT:    xxswapd 1, 63
3533; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3534; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3535; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3536; PC64LE9-NEXT:    addi 1, 1, 64
3537; PC64LE9-NEXT:    ld 0, 16(1)
3538; PC64LE9-NEXT:    mtlr 0
3539; PC64LE9-NEXT:    blr
3540entry:
3541  %exp2 = call <3 x double> @llvm.experimental.constrained.exp2.v3f64(
3542                          <3 x double> <double 42.0, double 42.1, double 42.2>,
3543                          metadata !"round.dynamic",
3544                          metadata !"fpexcept.strict") #1
3545  ret <3 x double> %exp2
3546}
3547
3548define <4 x double> @constrained_vector_exp2_v4f64() #0 {
3549; PC64LE-LABEL: constrained_vector_exp2_v4f64:
3550; PC64LE:       # %bb.0: # %entry
3551; PC64LE-NEXT:    mflr 0
3552; PC64LE-NEXT:    std 0, 16(1)
3553; PC64LE-NEXT:    stdu 1, -80(1)
3554; PC64LE-NEXT:    li 3, 64
3555; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3556; PC64LE-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
3557; PC64LE-NEXT:    lfd 1, .LCPI59_0@toc@l(3)
3558; PC64LE-NEXT:    bl exp2
3559; PC64LE-NEXT:    nop
3560; PC64LE-NEXT:    li 3, 48
3561; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3562; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3563; PC64LE-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
3564; PC64LE-NEXT:    lfd 1, .LCPI59_1@toc@l(3)
3565; PC64LE-NEXT:    bl exp2
3566; PC64LE-NEXT:    nop
3567; PC64LE-NEXT:    li 3, 48
3568; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3569; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3570; PC64LE-NEXT:    addis 3, 2, .LCPI59_2@toc@ha
3571; PC64LE-NEXT:    xxmrghd 63, 1, 0
3572; PC64LE-NEXT:    lfd 1, .LCPI59_2@toc@l(3)
3573; PC64LE-NEXT:    bl exp2
3574; PC64LE-NEXT:    nop
3575; PC64LE-NEXT:    li 3, 48
3576; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3577; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3578; PC64LE-NEXT:    addis 3, 2, .LCPI59_3@toc@ha
3579; PC64LE-NEXT:    lfd 1, .LCPI59_3@toc@l(3)
3580; PC64LE-NEXT:    bl exp2
3581; PC64LE-NEXT:    nop
3582; PC64LE-NEXT:    li 3, 48
3583; PC64LE-NEXT:    vmr 2, 31
3584; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3585; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3586; PC64LE-NEXT:    li 3, 64
3587; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3588; PC64LE-NEXT:    xxmrghd 35, 1, 0
3589; PC64LE-NEXT:    addi 1, 1, 80
3590; PC64LE-NEXT:    ld 0, 16(1)
3591; PC64LE-NEXT:    mtlr 0
3592; PC64LE-NEXT:    blr
3593;
3594; PC64LE9-LABEL: constrained_vector_exp2_v4f64:
3595; PC64LE9:       # %bb.0: # %entry
3596; PC64LE9-NEXT:    mflr 0
3597; PC64LE9-NEXT:    std 0, 16(1)
3598; PC64LE9-NEXT:    stdu 1, -64(1)
3599; PC64LE9-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
3600; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3601; PC64LE9-NEXT:    lfd 1, .LCPI59_0@toc@l(3)
3602; PC64LE9-NEXT:    bl exp2
3603; PC64LE9-NEXT:    nop
3604; PC64LE9-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
3605; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3606; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3607; PC64LE9-NEXT:    lfd 1, .LCPI59_1@toc@l(3)
3608; PC64LE9-NEXT:    bl exp2
3609; PC64LE9-NEXT:    nop
3610; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3611; PC64LE9-NEXT:    addis 3, 2, .LCPI59_2@toc@ha
3612; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3613; PC64LE9-NEXT:    xxmrghd 63, 1, 0
3614; PC64LE9-NEXT:    lfd 1, .LCPI59_2@toc@l(3)
3615; PC64LE9-NEXT:    bl exp2
3616; PC64LE9-NEXT:    nop
3617; PC64LE9-NEXT:    addis 3, 2, .LCPI59_3@toc@ha
3618; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3619; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3620; PC64LE9-NEXT:    lfd 1, .LCPI59_3@toc@l(3)
3621; PC64LE9-NEXT:    bl exp2
3622; PC64LE9-NEXT:    nop
3623; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3624; PC64LE9-NEXT:    vmr 2, 31
3625; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3626; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3627; PC64LE9-NEXT:    xxmrghd 35, 1, 0
3628; PC64LE9-NEXT:    addi 1, 1, 64
3629; PC64LE9-NEXT:    ld 0, 16(1)
3630; PC64LE9-NEXT:    mtlr 0
3631; PC64LE9-NEXT:    blr
3632entry:
3633  %exp2 = call <4 x double> @llvm.experimental.constrained.exp2.v4f64(
3634                              <4 x double> <double 42.1, double 42.2,
3635                                            double 42.3, double 42.4>,
3636                              metadata !"round.dynamic",
3637                              metadata !"fpexcept.strict") #1
3638  ret <4 x double> %exp2
3639}
3640
3641define <1 x float> @constrained_vector_log_v1f32() #0 {
3642; PC64LE-LABEL: constrained_vector_log_v1f32:
3643; PC64LE:       # %bb.0: # %entry
3644; PC64LE-NEXT:    mflr 0
3645; PC64LE-NEXT:    std 0, 16(1)
3646; PC64LE-NEXT:    stdu 1, -32(1)
3647; PC64LE-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
3648; PC64LE-NEXT:    lfs 1, .LCPI60_0@toc@l(3)
3649; PC64LE-NEXT:    bl logf
3650; PC64LE-NEXT:    nop
3651; PC64LE-NEXT:    addi 1, 1, 32
3652; PC64LE-NEXT:    ld 0, 16(1)
3653; PC64LE-NEXT:    mtlr 0
3654; PC64LE-NEXT:    blr
3655;
3656; PC64LE9-LABEL: constrained_vector_log_v1f32:
3657; PC64LE9:       # %bb.0: # %entry
3658; PC64LE9-NEXT:    mflr 0
3659; PC64LE9-NEXT:    std 0, 16(1)
3660; PC64LE9-NEXT:    stdu 1, -32(1)
3661; PC64LE9-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
3662; PC64LE9-NEXT:    lfs 1, .LCPI60_0@toc@l(3)
3663; PC64LE9-NEXT:    bl logf
3664; PC64LE9-NEXT:    nop
3665; PC64LE9-NEXT:    addi 1, 1, 32
3666; PC64LE9-NEXT:    ld 0, 16(1)
3667; PC64LE9-NEXT:    mtlr 0
3668; PC64LE9-NEXT:    blr
3669entry:
3670  %log = call <1 x float> @llvm.experimental.constrained.log.v1f32(
3671                             <1 x float> <float 42.0>,
3672                             metadata !"round.dynamic",
3673                             metadata !"fpexcept.strict") #1
3674  ret <1 x float> %log
3675}
3676
3677define <2 x double> @constrained_vector_log_v2f64() #0 {
3678; PC64LE-LABEL: constrained_vector_log_v2f64:
3679; PC64LE:       # %bb.0: # %entry
3680; PC64LE-NEXT:    mflr 0
3681; PC64LE-NEXT:    std 0, 16(1)
3682; PC64LE-NEXT:    stdu 1, -64(1)
3683; PC64LE-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
3684; PC64LE-NEXT:    lfd 1, .LCPI61_0@toc@l(3)
3685; PC64LE-NEXT:    bl log
3686; PC64LE-NEXT:    nop
3687; PC64LE-NEXT:    li 3, 48
3688; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3689; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3690; PC64LE-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
3691; PC64LE-NEXT:    lfs 1, .LCPI61_1@toc@l(3)
3692; PC64LE-NEXT:    bl log
3693; PC64LE-NEXT:    nop
3694; PC64LE-NEXT:    li 3, 48
3695; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3696; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3697; PC64LE-NEXT:    xxmrghd 34, 0, 1
3698; PC64LE-NEXT:    addi 1, 1, 64
3699; PC64LE-NEXT:    ld 0, 16(1)
3700; PC64LE-NEXT:    mtlr 0
3701; PC64LE-NEXT:    blr
3702;
3703; PC64LE9-LABEL: constrained_vector_log_v2f64:
3704; PC64LE9:       # %bb.0: # %entry
3705; PC64LE9-NEXT:    mflr 0
3706; PC64LE9-NEXT:    std 0, 16(1)
3707; PC64LE9-NEXT:    stdu 1, -48(1)
3708; PC64LE9-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
3709; PC64LE9-NEXT:    lfd 1, .LCPI61_0@toc@l(3)
3710; PC64LE9-NEXT:    bl log
3711; PC64LE9-NEXT:    nop
3712; PC64LE9-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
3713; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3714; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3715; PC64LE9-NEXT:    lfs 1, .LCPI61_1@toc@l(3)
3716; PC64LE9-NEXT:    bl log
3717; PC64LE9-NEXT:    nop
3718; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3719; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3720; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3721; PC64LE9-NEXT:    addi 1, 1, 48
3722; PC64LE9-NEXT:    ld 0, 16(1)
3723; PC64LE9-NEXT:    mtlr 0
3724; PC64LE9-NEXT:    blr
3725entry:
3726  %log = call <2 x double> @llvm.experimental.constrained.log.v2f64(
3727                             <2 x double> <double 42.0, double 42.1>,
3728                             metadata !"round.dynamic",
3729                             metadata !"fpexcept.strict") #1
3730  ret <2 x double> %log
3731}
3732
3733define <3 x float> @constrained_vector_log_v3f32() #0 {
3734; PC64LE-LABEL: constrained_vector_log_v3f32:
3735; PC64LE:       # %bb.0: # %entry
3736; PC64LE-NEXT:    mflr 0
3737; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3738; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3739; PC64LE-NEXT:    std 0, 16(1)
3740; PC64LE-NEXT:    stdu 1, -48(1)
3741; PC64LE-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
3742; PC64LE-NEXT:    lfs 1, .LCPI62_0@toc@l(3)
3743; PC64LE-NEXT:    bl logf
3744; PC64LE-NEXT:    nop
3745; PC64LE-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
3746; PC64LE-NEXT:    fmr 31, 1
3747; PC64LE-NEXT:    lfs 1, .LCPI62_1@toc@l(3)
3748; PC64LE-NEXT:    bl logf
3749; PC64LE-NEXT:    nop
3750; PC64LE-NEXT:    addis 3, 2, .LCPI62_2@toc@ha
3751; PC64LE-NEXT:    fmr 30, 1
3752; PC64LE-NEXT:    lfs 1, .LCPI62_2@toc@l(3)
3753; PC64LE-NEXT:    bl logf
3754; PC64LE-NEXT:    nop
3755; PC64LE-NEXT:    xscvdpspn 0, 30
3756; PC64LE-NEXT:    addis 3, 2, .LCPI62_3@toc@ha
3757; PC64LE-NEXT:    xscvdpspn 1, 1
3758; PC64LE-NEXT:    addi 3, 3, .LCPI62_3@toc@l
3759; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
3760; PC64LE-NEXT:    xscvdpspn 0, 31
3761; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
3762; PC64LE-NEXT:    vmrghw 2, 2, 3
3763; PC64LE-NEXT:    lvx 3, 0, 3
3764; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
3765; PC64LE-NEXT:    vperm 2, 4, 2, 3
3766; PC64LE-NEXT:    addi 1, 1, 48
3767; PC64LE-NEXT:    ld 0, 16(1)
3768; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3769; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3770; PC64LE-NEXT:    mtlr 0
3771; PC64LE-NEXT:    blr
3772;
3773; PC64LE9-LABEL: constrained_vector_log_v3f32:
3774; PC64LE9:       # %bb.0: # %entry
3775; PC64LE9-NEXT:    mflr 0
3776; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
3777; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
3778; PC64LE9-NEXT:    std 0, 16(1)
3779; PC64LE9-NEXT:    stdu 1, -48(1)
3780; PC64LE9-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
3781; PC64LE9-NEXT:    lfs 1, .LCPI62_0@toc@l(3)
3782; PC64LE9-NEXT:    bl logf
3783; PC64LE9-NEXT:    nop
3784; PC64LE9-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
3785; PC64LE9-NEXT:    fmr 31, 1
3786; PC64LE9-NEXT:    lfs 1, .LCPI62_1@toc@l(3)
3787; PC64LE9-NEXT:    bl logf
3788; PC64LE9-NEXT:    nop
3789; PC64LE9-NEXT:    addis 3, 2, .LCPI62_2@toc@ha
3790; PC64LE9-NEXT:    fmr 30, 1
3791; PC64LE9-NEXT:    lfs 1, .LCPI62_2@toc@l(3)
3792; PC64LE9-NEXT:    bl logf
3793; PC64LE9-NEXT:    nop
3794; PC64LE9-NEXT:    xscvdpspn 0, 1
3795; PC64LE9-NEXT:    addis 3, 2, .LCPI62_3@toc@ha
3796; PC64LE9-NEXT:    addi 3, 3, .LCPI62_3@toc@l
3797; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
3798; PC64LE9-NEXT:    xscvdpspn 0, 30
3799; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
3800; PC64LE9-NEXT:    xscvdpspn 0, 31
3801; PC64LE9-NEXT:    vmrghw 2, 3, 2
3802; PC64LE9-NEXT:    lxvx 35, 0, 3
3803; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
3804; PC64LE9-NEXT:    vperm 2, 4, 2, 3
3805; PC64LE9-NEXT:    addi 1, 1, 48
3806; PC64LE9-NEXT:    ld 0, 16(1)
3807; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
3808; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
3809; PC64LE9-NEXT:    mtlr 0
3810; PC64LE9-NEXT:    blr
3811entry:
3812  %log = call <3 x float> @llvm.experimental.constrained.log.v3f32(
3813                              <3 x float> <float 42.0, float 43.0, float 44.0>,
3814                              metadata !"round.dynamic",
3815                              metadata !"fpexcept.strict") #1
3816  ret <3 x float> %log
3817}
3818
3819define <3 x double> @constrained_vector_log_v3f64() #0 {
3820; PC64LE-LABEL: constrained_vector_log_v3f64:
3821; PC64LE:       # %bb.0: # %entry
3822; PC64LE-NEXT:    mflr 0
3823; PC64LE-NEXT:    std 0, 16(1)
3824; PC64LE-NEXT:    stdu 1, -80(1)
3825; PC64LE-NEXT:    li 3, 64
3826; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3827; PC64LE-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
3828; PC64LE-NEXT:    lfd 1, .LCPI63_0@toc@l(3)
3829; PC64LE-NEXT:    bl log
3830; PC64LE-NEXT:    nop
3831; PC64LE-NEXT:    li 3, 48
3832; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3833; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3834; PC64LE-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
3835; PC64LE-NEXT:    lfs 1, .LCPI63_1@toc@l(3)
3836; PC64LE-NEXT:    bl log
3837; PC64LE-NEXT:    nop
3838; PC64LE-NEXT:    li 3, 48
3839; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3840; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3841; PC64LE-NEXT:    addis 3, 2, .LCPI63_2@toc@ha
3842; PC64LE-NEXT:    xxmrghd 63, 0, 1
3843; PC64LE-NEXT:    lfd 1, .LCPI63_2@toc@l(3)
3844; PC64LE-NEXT:    bl log
3845; PC64LE-NEXT:    nop
3846; PC64LE-NEXT:    xxswapd 0, 63
3847; PC64LE-NEXT:    li 3, 64
3848; PC64LE-NEXT:    xxlor 2, 63, 63
3849; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3850; PC64LE-NEXT:    fmr 3, 1
3851; PC64LE-NEXT:    fmr 1, 0
3852; PC64LE-NEXT:    addi 1, 1, 80
3853; PC64LE-NEXT:    ld 0, 16(1)
3854; PC64LE-NEXT:    mtlr 0
3855; PC64LE-NEXT:    blr
3856;
3857; PC64LE9-LABEL: constrained_vector_log_v3f64:
3858; PC64LE9:       # %bb.0: # %entry
3859; PC64LE9-NEXT:    mflr 0
3860; PC64LE9-NEXT:    std 0, 16(1)
3861; PC64LE9-NEXT:    stdu 1, -64(1)
3862; PC64LE9-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
3863; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3864; PC64LE9-NEXT:    lfd 1, .LCPI63_0@toc@l(3)
3865; PC64LE9-NEXT:    bl log
3866; PC64LE9-NEXT:    nop
3867; PC64LE9-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
3868; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3869; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3870; PC64LE9-NEXT:    lfs 1, .LCPI63_1@toc@l(3)
3871; PC64LE9-NEXT:    bl log
3872; PC64LE9-NEXT:    nop
3873; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3874; PC64LE9-NEXT:    addis 3, 2, .LCPI63_2@toc@ha
3875; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3876; PC64LE9-NEXT:    xxmrghd 63, 0, 1
3877; PC64LE9-NEXT:    lfd 1, .LCPI63_2@toc@l(3)
3878; PC64LE9-NEXT:    bl log
3879; PC64LE9-NEXT:    nop
3880; PC64LE9-NEXT:    fmr 3, 1
3881; PC64LE9-NEXT:    xxswapd 1, 63
3882; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
3883; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3884; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
3885; PC64LE9-NEXT:    addi 1, 1, 64
3886; PC64LE9-NEXT:    ld 0, 16(1)
3887; PC64LE9-NEXT:    mtlr 0
3888; PC64LE9-NEXT:    blr
3889entry:
3890  %log = call <3 x double> @llvm.experimental.constrained.log.v3f64(
3891                          <3 x double> <double 42.0, double 42.1, double 42.2>,
3892                          metadata !"round.dynamic",
3893                          metadata !"fpexcept.strict") #1
3894  ret <3 x double> %log
3895}
3896
3897define <4 x double> @constrained_vector_log_v4f64() #0 {
3898; PC64LE-LABEL: constrained_vector_log_v4f64:
3899; PC64LE:       # %bb.0: # %entry
3900; PC64LE-NEXT:    mflr 0
3901; PC64LE-NEXT:    std 0, 16(1)
3902; PC64LE-NEXT:    stdu 1, -80(1)
3903; PC64LE-NEXT:    li 3, 64
3904; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
3905; PC64LE-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
3906; PC64LE-NEXT:    lfd 1, .LCPI64_0@toc@l(3)
3907; PC64LE-NEXT:    bl log
3908; PC64LE-NEXT:    nop
3909; PC64LE-NEXT:    li 3, 48
3910; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3911; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3912; PC64LE-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
3913; PC64LE-NEXT:    lfd 1, .LCPI64_1@toc@l(3)
3914; PC64LE-NEXT:    bl log
3915; PC64LE-NEXT:    nop
3916; PC64LE-NEXT:    li 3, 48
3917; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3918; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3919; PC64LE-NEXT:    addis 3, 2, .LCPI64_2@toc@ha
3920; PC64LE-NEXT:    xxmrghd 63, 1, 0
3921; PC64LE-NEXT:    lfd 1, .LCPI64_2@toc@l(3)
3922; PC64LE-NEXT:    bl log
3923; PC64LE-NEXT:    nop
3924; PC64LE-NEXT:    li 3, 48
3925; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3926; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
3927; PC64LE-NEXT:    addis 3, 2, .LCPI64_3@toc@ha
3928; PC64LE-NEXT:    lfs 1, .LCPI64_3@toc@l(3)
3929; PC64LE-NEXT:    bl log
3930; PC64LE-NEXT:    nop
3931; PC64LE-NEXT:    li 3, 48
3932; PC64LE-NEXT:    vmr 3, 31
3933; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3934; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
3935; PC64LE-NEXT:    li 3, 64
3936; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
3937; PC64LE-NEXT:    xxmrghd 34, 0, 1
3938; PC64LE-NEXT:    addi 1, 1, 80
3939; PC64LE-NEXT:    ld 0, 16(1)
3940; PC64LE-NEXT:    mtlr 0
3941; PC64LE-NEXT:    blr
3942;
3943; PC64LE9-LABEL: constrained_vector_log_v4f64:
3944; PC64LE9:       # %bb.0: # %entry
3945; PC64LE9-NEXT:    mflr 0
3946; PC64LE9-NEXT:    std 0, 16(1)
3947; PC64LE9-NEXT:    stdu 1, -64(1)
3948; PC64LE9-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
3949; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
3950; PC64LE9-NEXT:    lfd 1, .LCPI64_0@toc@l(3)
3951; PC64LE9-NEXT:    bl log
3952; PC64LE9-NEXT:    nop
3953; PC64LE9-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
3954; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3955; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3956; PC64LE9-NEXT:    lfd 1, .LCPI64_1@toc@l(3)
3957; PC64LE9-NEXT:    bl log
3958; PC64LE9-NEXT:    nop
3959; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3960; PC64LE9-NEXT:    addis 3, 2, .LCPI64_2@toc@ha
3961; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3962; PC64LE9-NEXT:    xxmrghd 63, 1, 0
3963; PC64LE9-NEXT:    lfd 1, .LCPI64_2@toc@l(3)
3964; PC64LE9-NEXT:    bl log
3965; PC64LE9-NEXT:    nop
3966; PC64LE9-NEXT:    addis 3, 2, .LCPI64_3@toc@ha
3967; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3968; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
3969; PC64LE9-NEXT:    lfs 1, .LCPI64_3@toc@l(3)
3970; PC64LE9-NEXT:    bl log
3971; PC64LE9-NEXT:    nop
3972; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
3973; PC64LE9-NEXT:    vmr 3, 31
3974; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
3975; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
3976; PC64LE9-NEXT:    xxmrghd 34, 0, 1
3977; PC64LE9-NEXT:    addi 1, 1, 64
3978; PC64LE9-NEXT:    ld 0, 16(1)
3979; PC64LE9-NEXT:    mtlr 0
3980; PC64LE9-NEXT:    blr
3981entry:
3982  %log = call <4 x double> @llvm.experimental.constrained.log.v4f64(
3983                             <4 x double> <double 42.0, double 42.1,
3984                                           double 42.2, double 42.3>,
3985                             metadata !"round.dynamic",
3986                             metadata !"fpexcept.strict") #1
3987  ret <4 x double> %log
3988}
3989
3990define <1 x float> @constrained_vector_log10_v1f32() #0 {
3991; PC64LE-LABEL: constrained_vector_log10_v1f32:
3992; PC64LE:       # %bb.0: # %entry
3993; PC64LE-NEXT:    mflr 0
3994; PC64LE-NEXT:    std 0, 16(1)
3995; PC64LE-NEXT:    stdu 1, -32(1)
3996; PC64LE-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
3997; PC64LE-NEXT:    lfs 1, .LCPI65_0@toc@l(3)
3998; PC64LE-NEXT:    bl log10f
3999; PC64LE-NEXT:    nop
4000; PC64LE-NEXT:    addi 1, 1, 32
4001; PC64LE-NEXT:    ld 0, 16(1)
4002; PC64LE-NEXT:    mtlr 0
4003; PC64LE-NEXT:    blr
4004;
4005; PC64LE9-LABEL: constrained_vector_log10_v1f32:
4006; PC64LE9:       # %bb.0: # %entry
4007; PC64LE9-NEXT:    mflr 0
4008; PC64LE9-NEXT:    std 0, 16(1)
4009; PC64LE9-NEXT:    stdu 1, -32(1)
4010; PC64LE9-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
4011; PC64LE9-NEXT:    lfs 1, .LCPI65_0@toc@l(3)
4012; PC64LE9-NEXT:    bl log10f
4013; PC64LE9-NEXT:    nop
4014; PC64LE9-NEXT:    addi 1, 1, 32
4015; PC64LE9-NEXT:    ld 0, 16(1)
4016; PC64LE9-NEXT:    mtlr 0
4017; PC64LE9-NEXT:    blr
4018entry:
4019  %log10 = call <1 x float> @llvm.experimental.constrained.log10.v1f32(
4020                             <1 x float> <float 42.0>,
4021                             metadata !"round.dynamic",
4022                             metadata !"fpexcept.strict") #1
4023  ret <1 x float> %log10
4024}
4025
4026define <2 x double> @constrained_vector_log10_v2f64() #0 {
4027; PC64LE-LABEL: constrained_vector_log10_v2f64:
4028; PC64LE:       # %bb.0: # %entry
4029; PC64LE-NEXT:    mflr 0
4030; PC64LE-NEXT:    std 0, 16(1)
4031; PC64LE-NEXT:    stdu 1, -64(1)
4032; PC64LE-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
4033; PC64LE-NEXT:    lfd 1, .LCPI66_0@toc@l(3)
4034; PC64LE-NEXT:    bl log10
4035; PC64LE-NEXT:    nop
4036; PC64LE-NEXT:    li 3, 48
4037; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4038; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4039; PC64LE-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
4040; PC64LE-NEXT:    lfs 1, .LCPI66_1@toc@l(3)
4041; PC64LE-NEXT:    bl log10
4042; PC64LE-NEXT:    nop
4043; PC64LE-NEXT:    li 3, 48
4044; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4045; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4046; PC64LE-NEXT:    xxmrghd 34, 0, 1
4047; PC64LE-NEXT:    addi 1, 1, 64
4048; PC64LE-NEXT:    ld 0, 16(1)
4049; PC64LE-NEXT:    mtlr 0
4050; PC64LE-NEXT:    blr
4051;
4052; PC64LE9-LABEL: constrained_vector_log10_v2f64:
4053; PC64LE9:       # %bb.0: # %entry
4054; PC64LE9-NEXT:    mflr 0
4055; PC64LE9-NEXT:    std 0, 16(1)
4056; PC64LE9-NEXT:    stdu 1, -48(1)
4057; PC64LE9-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
4058; PC64LE9-NEXT:    lfd 1, .LCPI66_0@toc@l(3)
4059; PC64LE9-NEXT:    bl log10
4060; PC64LE9-NEXT:    nop
4061; PC64LE9-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
4062; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4063; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4064; PC64LE9-NEXT:    lfs 1, .LCPI66_1@toc@l(3)
4065; PC64LE9-NEXT:    bl log10
4066; PC64LE9-NEXT:    nop
4067; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4068; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4069; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4070; PC64LE9-NEXT:    addi 1, 1, 48
4071; PC64LE9-NEXT:    ld 0, 16(1)
4072; PC64LE9-NEXT:    mtlr 0
4073; PC64LE9-NEXT:    blr
4074entry:
4075  %log10 = call <2 x double> @llvm.experimental.constrained.log10.v2f64(
4076                               <2 x double> <double 42.0, double 42.1>,
4077                               metadata !"round.dynamic",
4078                               metadata !"fpexcept.strict") #1
4079  ret <2 x double> %log10
4080}
4081
4082define <3 x float> @constrained_vector_log10_v3f32() #0 {
4083; PC64LE-LABEL: constrained_vector_log10_v3f32:
4084; PC64LE:       # %bb.0: # %entry
4085; PC64LE-NEXT:    mflr 0
4086; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4087; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4088; PC64LE-NEXT:    std 0, 16(1)
4089; PC64LE-NEXT:    stdu 1, -48(1)
4090; PC64LE-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
4091; PC64LE-NEXT:    lfs 1, .LCPI67_0@toc@l(3)
4092; PC64LE-NEXT:    bl log10f
4093; PC64LE-NEXT:    nop
4094; PC64LE-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
4095; PC64LE-NEXT:    fmr 31, 1
4096; PC64LE-NEXT:    lfs 1, .LCPI67_1@toc@l(3)
4097; PC64LE-NEXT:    bl log10f
4098; PC64LE-NEXT:    nop
4099; PC64LE-NEXT:    addis 3, 2, .LCPI67_2@toc@ha
4100; PC64LE-NEXT:    fmr 30, 1
4101; PC64LE-NEXT:    lfs 1, .LCPI67_2@toc@l(3)
4102; PC64LE-NEXT:    bl log10f
4103; PC64LE-NEXT:    nop
4104; PC64LE-NEXT:    xscvdpspn 0, 30
4105; PC64LE-NEXT:    addis 3, 2, .LCPI67_3@toc@ha
4106; PC64LE-NEXT:    xscvdpspn 1, 1
4107; PC64LE-NEXT:    addi 3, 3, .LCPI67_3@toc@l
4108; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
4109; PC64LE-NEXT:    xscvdpspn 0, 31
4110; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
4111; PC64LE-NEXT:    vmrghw 2, 2, 3
4112; PC64LE-NEXT:    lvx 3, 0, 3
4113; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
4114; PC64LE-NEXT:    vperm 2, 4, 2, 3
4115; PC64LE-NEXT:    addi 1, 1, 48
4116; PC64LE-NEXT:    ld 0, 16(1)
4117; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4118; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4119; PC64LE-NEXT:    mtlr 0
4120; PC64LE-NEXT:    blr
4121;
4122; PC64LE9-LABEL: constrained_vector_log10_v3f32:
4123; PC64LE9:       # %bb.0: # %entry
4124; PC64LE9-NEXT:    mflr 0
4125; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4126; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4127; PC64LE9-NEXT:    std 0, 16(1)
4128; PC64LE9-NEXT:    stdu 1, -48(1)
4129; PC64LE9-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
4130; PC64LE9-NEXT:    lfs 1, .LCPI67_0@toc@l(3)
4131; PC64LE9-NEXT:    bl log10f
4132; PC64LE9-NEXT:    nop
4133; PC64LE9-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
4134; PC64LE9-NEXT:    fmr 31, 1
4135; PC64LE9-NEXT:    lfs 1, .LCPI67_1@toc@l(3)
4136; PC64LE9-NEXT:    bl log10f
4137; PC64LE9-NEXT:    nop
4138; PC64LE9-NEXT:    addis 3, 2, .LCPI67_2@toc@ha
4139; PC64LE9-NEXT:    fmr 30, 1
4140; PC64LE9-NEXT:    lfs 1, .LCPI67_2@toc@l(3)
4141; PC64LE9-NEXT:    bl log10f
4142; PC64LE9-NEXT:    nop
4143; PC64LE9-NEXT:    xscvdpspn 0, 1
4144; PC64LE9-NEXT:    addis 3, 2, .LCPI67_3@toc@ha
4145; PC64LE9-NEXT:    addi 3, 3, .LCPI67_3@toc@l
4146; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
4147; PC64LE9-NEXT:    xscvdpspn 0, 30
4148; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
4149; PC64LE9-NEXT:    xscvdpspn 0, 31
4150; PC64LE9-NEXT:    vmrghw 2, 3, 2
4151; PC64LE9-NEXT:    lxvx 35, 0, 3
4152; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
4153; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4154; PC64LE9-NEXT:    addi 1, 1, 48
4155; PC64LE9-NEXT:    ld 0, 16(1)
4156; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4157; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4158; PC64LE9-NEXT:    mtlr 0
4159; PC64LE9-NEXT:    blr
4160entry:
4161  %log10 = call <3 x float> @llvm.experimental.constrained.log10.v3f32(
4162                              <3 x float> <float 42.0, float 43.0, float 44.0>,
4163                              metadata !"round.dynamic",
4164                              metadata !"fpexcept.strict") #1
4165  ret <3 x float> %log10
4166}
4167
4168define <3 x double> @constrained_vector_log10_v3f64() #0 {
4169; PC64LE-LABEL: constrained_vector_log10_v3f64:
4170; PC64LE:       # %bb.0: # %entry
4171; PC64LE-NEXT:    mflr 0
4172; PC64LE-NEXT:    std 0, 16(1)
4173; PC64LE-NEXT:    stdu 1, -80(1)
4174; PC64LE-NEXT:    li 3, 64
4175; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4176; PC64LE-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
4177; PC64LE-NEXT:    lfd 1, .LCPI68_0@toc@l(3)
4178; PC64LE-NEXT:    bl log10
4179; PC64LE-NEXT:    nop
4180; PC64LE-NEXT:    li 3, 48
4181; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4182; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4183; PC64LE-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
4184; PC64LE-NEXT:    lfs 1, .LCPI68_1@toc@l(3)
4185; PC64LE-NEXT:    bl log10
4186; PC64LE-NEXT:    nop
4187; PC64LE-NEXT:    li 3, 48
4188; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4189; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4190; PC64LE-NEXT:    addis 3, 2, .LCPI68_2@toc@ha
4191; PC64LE-NEXT:    xxmrghd 63, 0, 1
4192; PC64LE-NEXT:    lfd 1, .LCPI68_2@toc@l(3)
4193; PC64LE-NEXT:    bl log10
4194; PC64LE-NEXT:    nop
4195; PC64LE-NEXT:    xxswapd 0, 63
4196; PC64LE-NEXT:    li 3, 64
4197; PC64LE-NEXT:    xxlor 2, 63, 63
4198; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4199; PC64LE-NEXT:    fmr 3, 1
4200; PC64LE-NEXT:    fmr 1, 0
4201; PC64LE-NEXT:    addi 1, 1, 80
4202; PC64LE-NEXT:    ld 0, 16(1)
4203; PC64LE-NEXT:    mtlr 0
4204; PC64LE-NEXT:    blr
4205;
4206; PC64LE9-LABEL: constrained_vector_log10_v3f64:
4207; PC64LE9:       # %bb.0: # %entry
4208; PC64LE9-NEXT:    mflr 0
4209; PC64LE9-NEXT:    std 0, 16(1)
4210; PC64LE9-NEXT:    stdu 1, -64(1)
4211; PC64LE9-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
4212; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4213; PC64LE9-NEXT:    lfd 1, .LCPI68_0@toc@l(3)
4214; PC64LE9-NEXT:    bl log10
4215; PC64LE9-NEXT:    nop
4216; PC64LE9-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
4217; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4218; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4219; PC64LE9-NEXT:    lfs 1, .LCPI68_1@toc@l(3)
4220; PC64LE9-NEXT:    bl log10
4221; PC64LE9-NEXT:    nop
4222; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4223; PC64LE9-NEXT:    addis 3, 2, .LCPI68_2@toc@ha
4224; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4225; PC64LE9-NEXT:    xxmrghd 63, 0, 1
4226; PC64LE9-NEXT:    lfd 1, .LCPI68_2@toc@l(3)
4227; PC64LE9-NEXT:    bl log10
4228; PC64LE9-NEXT:    nop
4229; PC64LE9-NEXT:    fmr 3, 1
4230; PC64LE9-NEXT:    xxswapd 1, 63
4231; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4232; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4233; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4234; PC64LE9-NEXT:    addi 1, 1, 64
4235; PC64LE9-NEXT:    ld 0, 16(1)
4236; PC64LE9-NEXT:    mtlr 0
4237; PC64LE9-NEXT:    blr
4238entry:
4239  %log10 = call <3 x double> @llvm.experimental.constrained.log10.v3f64(
4240                          <3 x double> <double 42.0, double 42.1, double 42.2>,
4241                          metadata !"round.dynamic",
4242                          metadata !"fpexcept.strict") #1
4243  ret <3 x double> %log10
4244}
4245
4246define <4 x double> @constrained_vector_log10_v4f64() #0 {
4247; PC64LE-LABEL: constrained_vector_log10_v4f64:
4248; PC64LE:       # %bb.0: # %entry
4249; PC64LE-NEXT:    mflr 0
4250; PC64LE-NEXT:    std 0, 16(1)
4251; PC64LE-NEXT:    stdu 1, -80(1)
4252; PC64LE-NEXT:    li 3, 64
4253; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4254; PC64LE-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
4255; PC64LE-NEXT:    lfd 1, .LCPI69_0@toc@l(3)
4256; PC64LE-NEXT:    bl log10
4257; PC64LE-NEXT:    nop
4258; PC64LE-NEXT:    li 3, 48
4259; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4260; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4261; PC64LE-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
4262; PC64LE-NEXT:    lfd 1, .LCPI69_1@toc@l(3)
4263; PC64LE-NEXT:    bl log10
4264; PC64LE-NEXT:    nop
4265; PC64LE-NEXT:    li 3, 48
4266; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4267; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4268; PC64LE-NEXT:    addis 3, 2, .LCPI69_2@toc@ha
4269; PC64LE-NEXT:    xxmrghd 63, 1, 0
4270; PC64LE-NEXT:    lfd 1, .LCPI69_2@toc@l(3)
4271; PC64LE-NEXT:    bl log10
4272; PC64LE-NEXT:    nop
4273; PC64LE-NEXT:    li 3, 48
4274; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4275; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4276; PC64LE-NEXT:    addis 3, 2, .LCPI69_3@toc@ha
4277; PC64LE-NEXT:    lfs 1, .LCPI69_3@toc@l(3)
4278; PC64LE-NEXT:    bl log10
4279; PC64LE-NEXT:    nop
4280; PC64LE-NEXT:    li 3, 48
4281; PC64LE-NEXT:    vmr 3, 31
4282; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4283; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4284; PC64LE-NEXT:    li 3, 64
4285; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4286; PC64LE-NEXT:    xxmrghd 34, 0, 1
4287; PC64LE-NEXT:    addi 1, 1, 80
4288; PC64LE-NEXT:    ld 0, 16(1)
4289; PC64LE-NEXT:    mtlr 0
4290; PC64LE-NEXT:    blr
4291;
4292; PC64LE9-LABEL: constrained_vector_log10_v4f64:
4293; PC64LE9:       # %bb.0: # %entry
4294; PC64LE9-NEXT:    mflr 0
4295; PC64LE9-NEXT:    std 0, 16(1)
4296; PC64LE9-NEXT:    stdu 1, -64(1)
4297; PC64LE9-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
4298; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4299; PC64LE9-NEXT:    lfd 1, .LCPI69_0@toc@l(3)
4300; PC64LE9-NEXT:    bl log10
4301; PC64LE9-NEXT:    nop
4302; PC64LE9-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
4303; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4304; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4305; PC64LE9-NEXT:    lfd 1, .LCPI69_1@toc@l(3)
4306; PC64LE9-NEXT:    bl log10
4307; PC64LE9-NEXT:    nop
4308; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4309; PC64LE9-NEXT:    addis 3, 2, .LCPI69_2@toc@ha
4310; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4311; PC64LE9-NEXT:    xxmrghd 63, 1, 0
4312; PC64LE9-NEXT:    lfd 1, .LCPI69_2@toc@l(3)
4313; PC64LE9-NEXT:    bl log10
4314; PC64LE9-NEXT:    nop
4315; PC64LE9-NEXT:    addis 3, 2, .LCPI69_3@toc@ha
4316; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4317; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4318; PC64LE9-NEXT:    lfs 1, .LCPI69_3@toc@l(3)
4319; PC64LE9-NEXT:    bl log10
4320; PC64LE9-NEXT:    nop
4321; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4322; PC64LE9-NEXT:    vmr 3, 31
4323; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4324; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4325; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4326; PC64LE9-NEXT:    addi 1, 1, 64
4327; PC64LE9-NEXT:    ld 0, 16(1)
4328; PC64LE9-NEXT:    mtlr 0
4329; PC64LE9-NEXT:    blr
4330entry:
4331  %log10 = call <4 x double> @llvm.experimental.constrained.log10.v4f64(
4332                               <4 x double> <double 42.0, double 42.1,
4333                                             double 42.2, double 42.3>,
4334                               metadata !"round.dynamic",
4335                               metadata !"fpexcept.strict") #1
4336  ret <4 x double> %log10
4337}
4338
4339define <1 x float> @constrained_vector_log2_v1f32() #0 {
4340; PC64LE-LABEL: constrained_vector_log2_v1f32:
4341; PC64LE:       # %bb.0: # %entry
4342; PC64LE-NEXT:    mflr 0
4343; PC64LE-NEXT:    std 0, 16(1)
4344; PC64LE-NEXT:    stdu 1, -32(1)
4345; PC64LE-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
4346; PC64LE-NEXT:    lfs 1, .LCPI70_0@toc@l(3)
4347; PC64LE-NEXT:    bl log2f
4348; PC64LE-NEXT:    nop
4349; PC64LE-NEXT:    addi 1, 1, 32
4350; PC64LE-NEXT:    ld 0, 16(1)
4351; PC64LE-NEXT:    mtlr 0
4352; PC64LE-NEXT:    blr
4353;
4354; PC64LE9-LABEL: constrained_vector_log2_v1f32:
4355; PC64LE9:       # %bb.0: # %entry
4356; PC64LE9-NEXT:    mflr 0
4357; PC64LE9-NEXT:    std 0, 16(1)
4358; PC64LE9-NEXT:    stdu 1, -32(1)
4359; PC64LE9-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
4360; PC64LE9-NEXT:    lfs 1, .LCPI70_0@toc@l(3)
4361; PC64LE9-NEXT:    bl log2f
4362; PC64LE9-NEXT:    nop
4363; PC64LE9-NEXT:    addi 1, 1, 32
4364; PC64LE9-NEXT:    ld 0, 16(1)
4365; PC64LE9-NEXT:    mtlr 0
4366; PC64LE9-NEXT:    blr
4367entry:
4368  %log2 = call <1 x float> @llvm.experimental.constrained.log2.v1f32(
4369                             <1 x float> <float 42.0>,
4370                             metadata !"round.dynamic",
4371                             metadata !"fpexcept.strict") #1
4372  ret <1 x float> %log2
4373}
4374
4375define <2 x double> @constrained_vector_log2_v2f64() #0 {
4376; PC64LE-LABEL: constrained_vector_log2_v2f64:
4377; PC64LE:       # %bb.0: # %entry
4378; PC64LE-NEXT:    mflr 0
4379; PC64LE-NEXT:    std 0, 16(1)
4380; PC64LE-NEXT:    stdu 1, -64(1)
4381; PC64LE-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
4382; PC64LE-NEXT:    lfd 1, .LCPI71_0@toc@l(3)
4383; PC64LE-NEXT:    bl log2
4384; PC64LE-NEXT:    nop
4385; PC64LE-NEXT:    li 3, 48
4386; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4387; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4388; PC64LE-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
4389; PC64LE-NEXT:    lfs 1, .LCPI71_1@toc@l(3)
4390; PC64LE-NEXT:    bl log2
4391; PC64LE-NEXT:    nop
4392; PC64LE-NEXT:    li 3, 48
4393; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4394; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4395; PC64LE-NEXT:    xxmrghd 34, 0, 1
4396; PC64LE-NEXT:    addi 1, 1, 64
4397; PC64LE-NEXT:    ld 0, 16(1)
4398; PC64LE-NEXT:    mtlr 0
4399; PC64LE-NEXT:    blr
4400;
4401; PC64LE9-LABEL: constrained_vector_log2_v2f64:
4402; PC64LE9:       # %bb.0: # %entry
4403; PC64LE9-NEXT:    mflr 0
4404; PC64LE9-NEXT:    std 0, 16(1)
4405; PC64LE9-NEXT:    stdu 1, -48(1)
4406; PC64LE9-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
4407; PC64LE9-NEXT:    lfd 1, .LCPI71_0@toc@l(3)
4408; PC64LE9-NEXT:    bl log2
4409; PC64LE9-NEXT:    nop
4410; PC64LE9-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
4411; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4412; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4413; PC64LE9-NEXT:    lfs 1, .LCPI71_1@toc@l(3)
4414; PC64LE9-NEXT:    bl log2
4415; PC64LE9-NEXT:    nop
4416; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4417; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4418; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4419; PC64LE9-NEXT:    addi 1, 1, 48
4420; PC64LE9-NEXT:    ld 0, 16(1)
4421; PC64LE9-NEXT:    mtlr 0
4422; PC64LE9-NEXT:    blr
4423entry:
4424  %log2 = call <2 x double> @llvm.experimental.constrained.log2.v2f64(
4425                              <2 x double> <double 42.0, double 42.1>,
4426                              metadata !"round.dynamic",
4427                              metadata !"fpexcept.strict") #1
4428  ret <2 x double> %log2
4429}
4430
4431define <3 x float> @constrained_vector_log2_v3f32() #0 {
4432; PC64LE-LABEL: constrained_vector_log2_v3f32:
4433; PC64LE:       # %bb.0: # %entry
4434; PC64LE-NEXT:    mflr 0
4435; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4436; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4437; PC64LE-NEXT:    std 0, 16(1)
4438; PC64LE-NEXT:    stdu 1, -48(1)
4439; PC64LE-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
4440; PC64LE-NEXT:    lfs 1, .LCPI72_0@toc@l(3)
4441; PC64LE-NEXT:    bl log2f
4442; PC64LE-NEXT:    nop
4443; PC64LE-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
4444; PC64LE-NEXT:    fmr 31, 1
4445; PC64LE-NEXT:    lfs 1, .LCPI72_1@toc@l(3)
4446; PC64LE-NEXT:    bl log2f
4447; PC64LE-NEXT:    nop
4448; PC64LE-NEXT:    addis 3, 2, .LCPI72_2@toc@ha
4449; PC64LE-NEXT:    fmr 30, 1
4450; PC64LE-NEXT:    lfs 1, .LCPI72_2@toc@l(3)
4451; PC64LE-NEXT:    bl log2f
4452; PC64LE-NEXT:    nop
4453; PC64LE-NEXT:    xscvdpspn 0, 30
4454; PC64LE-NEXT:    addis 3, 2, .LCPI72_3@toc@ha
4455; PC64LE-NEXT:    xscvdpspn 1, 1
4456; PC64LE-NEXT:    addi 3, 3, .LCPI72_3@toc@l
4457; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
4458; PC64LE-NEXT:    xscvdpspn 0, 31
4459; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
4460; PC64LE-NEXT:    vmrghw 2, 2, 3
4461; PC64LE-NEXT:    lvx 3, 0, 3
4462; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
4463; PC64LE-NEXT:    vperm 2, 4, 2, 3
4464; PC64LE-NEXT:    addi 1, 1, 48
4465; PC64LE-NEXT:    ld 0, 16(1)
4466; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4467; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4468; PC64LE-NEXT:    mtlr 0
4469; PC64LE-NEXT:    blr
4470;
4471; PC64LE9-LABEL: constrained_vector_log2_v3f32:
4472; PC64LE9:       # %bb.0: # %entry
4473; PC64LE9-NEXT:    mflr 0
4474; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4475; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4476; PC64LE9-NEXT:    std 0, 16(1)
4477; PC64LE9-NEXT:    stdu 1, -48(1)
4478; PC64LE9-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
4479; PC64LE9-NEXT:    lfs 1, .LCPI72_0@toc@l(3)
4480; PC64LE9-NEXT:    bl log2f
4481; PC64LE9-NEXT:    nop
4482; PC64LE9-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
4483; PC64LE9-NEXT:    fmr 31, 1
4484; PC64LE9-NEXT:    lfs 1, .LCPI72_1@toc@l(3)
4485; PC64LE9-NEXT:    bl log2f
4486; PC64LE9-NEXT:    nop
4487; PC64LE9-NEXT:    addis 3, 2, .LCPI72_2@toc@ha
4488; PC64LE9-NEXT:    fmr 30, 1
4489; PC64LE9-NEXT:    lfs 1, .LCPI72_2@toc@l(3)
4490; PC64LE9-NEXT:    bl log2f
4491; PC64LE9-NEXT:    nop
4492; PC64LE9-NEXT:    xscvdpspn 0, 1
4493; PC64LE9-NEXT:    addis 3, 2, .LCPI72_3@toc@ha
4494; PC64LE9-NEXT:    addi 3, 3, .LCPI72_3@toc@l
4495; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
4496; PC64LE9-NEXT:    xscvdpspn 0, 30
4497; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
4498; PC64LE9-NEXT:    xscvdpspn 0, 31
4499; PC64LE9-NEXT:    vmrghw 2, 3, 2
4500; PC64LE9-NEXT:    lxvx 35, 0, 3
4501; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
4502; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4503; PC64LE9-NEXT:    addi 1, 1, 48
4504; PC64LE9-NEXT:    ld 0, 16(1)
4505; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4506; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4507; PC64LE9-NEXT:    mtlr 0
4508; PC64LE9-NEXT:    blr
4509entry:
4510  %log2 = call <3 x float> @llvm.experimental.constrained.log2.v3f32(
4511                              <3 x float> <float 42.0, float 43.0, float 44.0>,
4512                              metadata !"round.dynamic",
4513                              metadata !"fpexcept.strict") #1
4514  ret <3 x float> %log2
4515}
4516
4517define <3 x double> @constrained_vector_log2_v3f64() #0 {
4518; PC64LE-LABEL: constrained_vector_log2_v3f64:
4519; PC64LE:       # %bb.0: # %entry
4520; PC64LE-NEXT:    mflr 0
4521; PC64LE-NEXT:    std 0, 16(1)
4522; PC64LE-NEXT:    stdu 1, -80(1)
4523; PC64LE-NEXT:    li 3, 64
4524; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4525; PC64LE-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
4526; PC64LE-NEXT:    lfd 1, .LCPI73_0@toc@l(3)
4527; PC64LE-NEXT:    bl log2
4528; PC64LE-NEXT:    nop
4529; PC64LE-NEXT:    li 3, 48
4530; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4531; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4532; PC64LE-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
4533; PC64LE-NEXT:    lfs 1, .LCPI73_1@toc@l(3)
4534; PC64LE-NEXT:    bl log2
4535; PC64LE-NEXT:    nop
4536; PC64LE-NEXT:    li 3, 48
4537; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4538; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4539; PC64LE-NEXT:    addis 3, 2, .LCPI73_2@toc@ha
4540; PC64LE-NEXT:    xxmrghd 63, 0, 1
4541; PC64LE-NEXT:    lfd 1, .LCPI73_2@toc@l(3)
4542; PC64LE-NEXT:    bl log2
4543; PC64LE-NEXT:    nop
4544; PC64LE-NEXT:    xxswapd 0, 63
4545; PC64LE-NEXT:    li 3, 64
4546; PC64LE-NEXT:    xxlor 2, 63, 63
4547; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4548; PC64LE-NEXT:    fmr 3, 1
4549; PC64LE-NEXT:    fmr 1, 0
4550; PC64LE-NEXT:    addi 1, 1, 80
4551; PC64LE-NEXT:    ld 0, 16(1)
4552; PC64LE-NEXT:    mtlr 0
4553; PC64LE-NEXT:    blr
4554;
4555; PC64LE9-LABEL: constrained_vector_log2_v3f64:
4556; PC64LE9:       # %bb.0: # %entry
4557; PC64LE9-NEXT:    mflr 0
4558; PC64LE9-NEXT:    std 0, 16(1)
4559; PC64LE9-NEXT:    stdu 1, -64(1)
4560; PC64LE9-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
4561; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4562; PC64LE9-NEXT:    lfd 1, .LCPI73_0@toc@l(3)
4563; PC64LE9-NEXT:    bl log2
4564; PC64LE9-NEXT:    nop
4565; PC64LE9-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
4566; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4567; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4568; PC64LE9-NEXT:    lfs 1, .LCPI73_1@toc@l(3)
4569; PC64LE9-NEXT:    bl log2
4570; PC64LE9-NEXT:    nop
4571; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4572; PC64LE9-NEXT:    addis 3, 2, .LCPI73_2@toc@ha
4573; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4574; PC64LE9-NEXT:    xxmrghd 63, 0, 1
4575; PC64LE9-NEXT:    lfd 1, .LCPI73_2@toc@l(3)
4576; PC64LE9-NEXT:    bl log2
4577; PC64LE9-NEXT:    nop
4578; PC64LE9-NEXT:    fmr 3, 1
4579; PC64LE9-NEXT:    xxswapd 1, 63
4580; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
4581; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4582; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4583; PC64LE9-NEXT:    addi 1, 1, 64
4584; PC64LE9-NEXT:    ld 0, 16(1)
4585; PC64LE9-NEXT:    mtlr 0
4586; PC64LE9-NEXT:    blr
4587entry:
4588  %log2 = call <3 x double> @llvm.experimental.constrained.log2.v3f64(
4589                          <3 x double> <double 42.0, double 42.1, double 42.2>,
4590                          metadata !"round.dynamic",
4591                          metadata !"fpexcept.strict") #1
4592  ret <3 x double> %log2
4593}
4594
4595define <4 x double> @constrained_vector_log2_v4f64() #0 {
4596; PC64LE-LABEL: constrained_vector_log2_v4f64:
4597; PC64LE:       # %bb.0: # %entry
4598; PC64LE-NEXT:    mflr 0
4599; PC64LE-NEXT:    std 0, 16(1)
4600; PC64LE-NEXT:    stdu 1, -80(1)
4601; PC64LE-NEXT:    li 3, 64
4602; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
4603; PC64LE-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
4604; PC64LE-NEXT:    lfd 1, .LCPI74_0@toc@l(3)
4605; PC64LE-NEXT:    bl log2
4606; PC64LE-NEXT:    nop
4607; PC64LE-NEXT:    li 3, 48
4608; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4609; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4610; PC64LE-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
4611; PC64LE-NEXT:    lfd 1, .LCPI74_1@toc@l(3)
4612; PC64LE-NEXT:    bl log2
4613; PC64LE-NEXT:    nop
4614; PC64LE-NEXT:    li 3, 48
4615; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4616; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4617; PC64LE-NEXT:    addis 3, 2, .LCPI74_2@toc@ha
4618; PC64LE-NEXT:    xxmrghd 63, 1, 0
4619; PC64LE-NEXT:    lfd 1, .LCPI74_2@toc@l(3)
4620; PC64LE-NEXT:    bl log2
4621; PC64LE-NEXT:    nop
4622; PC64LE-NEXT:    li 3, 48
4623; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4624; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4625; PC64LE-NEXT:    addis 3, 2, .LCPI74_3@toc@ha
4626; PC64LE-NEXT:    lfs 1, .LCPI74_3@toc@l(3)
4627; PC64LE-NEXT:    bl log2
4628; PC64LE-NEXT:    nop
4629; PC64LE-NEXT:    li 3, 48
4630; PC64LE-NEXT:    vmr 3, 31
4631; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4632; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4633; PC64LE-NEXT:    li 3, 64
4634; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
4635; PC64LE-NEXT:    xxmrghd 34, 0, 1
4636; PC64LE-NEXT:    addi 1, 1, 80
4637; PC64LE-NEXT:    ld 0, 16(1)
4638; PC64LE-NEXT:    mtlr 0
4639; PC64LE-NEXT:    blr
4640;
4641; PC64LE9-LABEL: constrained_vector_log2_v4f64:
4642; PC64LE9:       # %bb.0: # %entry
4643; PC64LE9-NEXT:    mflr 0
4644; PC64LE9-NEXT:    std 0, 16(1)
4645; PC64LE9-NEXT:    stdu 1, -64(1)
4646; PC64LE9-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
4647; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
4648; PC64LE9-NEXT:    lfd 1, .LCPI74_0@toc@l(3)
4649; PC64LE9-NEXT:    bl log2
4650; PC64LE9-NEXT:    nop
4651; PC64LE9-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
4652; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4653; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4654; PC64LE9-NEXT:    lfd 1, .LCPI74_1@toc@l(3)
4655; PC64LE9-NEXT:    bl log2
4656; PC64LE9-NEXT:    nop
4657; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4658; PC64LE9-NEXT:    addis 3, 2, .LCPI74_2@toc@ha
4659; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4660; PC64LE9-NEXT:    xxmrghd 63, 1, 0
4661; PC64LE9-NEXT:    lfd 1, .LCPI74_2@toc@l(3)
4662; PC64LE9-NEXT:    bl log2
4663; PC64LE9-NEXT:    nop
4664; PC64LE9-NEXT:    addis 3, 2, .LCPI74_3@toc@ha
4665; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4666; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4667; PC64LE9-NEXT:    lfs 1, .LCPI74_3@toc@l(3)
4668; PC64LE9-NEXT:    bl log2
4669; PC64LE9-NEXT:    nop
4670; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4671; PC64LE9-NEXT:    vmr 3, 31
4672; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
4673; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4674; PC64LE9-NEXT:    xxmrghd 34, 0, 1
4675; PC64LE9-NEXT:    addi 1, 1, 64
4676; PC64LE9-NEXT:    ld 0, 16(1)
4677; PC64LE9-NEXT:    mtlr 0
4678; PC64LE9-NEXT:    blr
4679entry:
4680  %log2 = call <4 x double> @llvm.experimental.constrained.log2.v4f64(
4681                              <4 x double> <double 42.0, double 42.1,
4682                                            double 42.2, double 42.3>,
4683                              metadata !"round.dynamic",
4684                              metadata !"fpexcept.strict") #1
4685  ret <4 x double> %log2
4686}
4687
4688define <1 x float> @constrained_vector_rint_v1f32() #0 {
4689; PC64LE-LABEL: constrained_vector_rint_v1f32:
4690; PC64LE:       # %bb.0: # %entry
4691; PC64LE-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
4692; PC64LE-NEXT:    lfs 0, .LCPI75_0@toc@l(3)
4693; PC64LE-NEXT:    xsrdpic 1, 0
4694; PC64LE-NEXT:    blr
4695;
4696; PC64LE9-LABEL: constrained_vector_rint_v1f32:
4697; PC64LE9:       # %bb.0: # %entry
4698; PC64LE9-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
4699; PC64LE9-NEXT:    lfs 0, .LCPI75_0@toc@l(3)
4700; PC64LE9-NEXT:    xsrdpic 1, 0
4701; PC64LE9-NEXT:    blr
4702entry:
4703  %rint = call <1 x float> @llvm.experimental.constrained.rint.v1f32(
4704                             <1 x float> <float 42.0>,
4705                             metadata !"round.dynamic",
4706                             metadata !"fpexcept.strict") #1
4707  ret <1 x float> %rint
4708}
4709
4710define <2 x double> @constrained_vector_rint_v2f64() #0 {
4711; PC64LE-LABEL: constrained_vector_rint_v2f64:
4712; PC64LE:       # %bb.0: # %entry
4713; PC64LE-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
4714; PC64LE-NEXT:    addi 3, 3, .LCPI76_0@toc@l
4715; PC64LE-NEXT:    lxvd2x 0, 0, 3
4716; PC64LE-NEXT:    xxswapd 0, 0
4717; PC64LE-NEXT:    xvrdpic 34, 0
4718; PC64LE-NEXT:    blr
4719;
4720; PC64LE9-LABEL: constrained_vector_rint_v2f64:
4721; PC64LE9:       # %bb.0: # %entry
4722; PC64LE9-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
4723; PC64LE9-NEXT:    addi 3, 3, .LCPI76_0@toc@l
4724; PC64LE9-NEXT:    lxvx 0, 0, 3
4725; PC64LE9-NEXT:    xvrdpic 34, 0
4726; PC64LE9-NEXT:    blr
4727entry:
4728  %rint = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
4729                        <2 x double> <double 42.1, double 42.0>,
4730                        metadata !"round.dynamic",
4731                        metadata !"fpexcept.strict") #1
4732  ret <2 x double> %rint
4733}
4734
4735define <3 x float> @constrained_vector_rint_v3f32() #0 {
4736; PC64LE-LABEL: constrained_vector_rint_v3f32:
4737; PC64LE:       # %bb.0: # %entry
4738; PC64LE-NEXT:    addis 3, 2, .LCPI77_2@toc@ha
4739; PC64LE-NEXT:    addis 4, 2, .LCPI77_1@toc@ha
4740; PC64LE-NEXT:    lfs 0, .LCPI77_2@toc@l(3)
4741; PC64LE-NEXT:    lfs 1, .LCPI77_1@toc@l(4)
4742; PC64LE-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
4743; PC64LE-NEXT:    xsrdpic 0, 0
4744; PC64LE-NEXT:    lfs 2, .LCPI77_0@toc@l(3)
4745; PC64LE-NEXT:    addis 3, 2, .LCPI77_3@toc@ha
4746; PC64LE-NEXT:    xsrdpic 1, 1
4747; PC64LE-NEXT:    addi 3, 3, .LCPI77_3@toc@l
4748; PC64LE-NEXT:    xsrdpic 2, 2
4749; PC64LE-NEXT:    xscvdpspn 0, 0
4750; PC64LE-NEXT:    xscvdpspn 1, 1
4751; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
4752; PC64LE-NEXT:    xscvdpspn 0, 2
4753; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
4754; PC64LE-NEXT:    vmrghw 2, 3, 2
4755; PC64LE-NEXT:    lvx 3, 0, 3
4756; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
4757; PC64LE-NEXT:    vperm 2, 4, 2, 3
4758; PC64LE-NEXT:    blr
4759;
4760; PC64LE9-LABEL: constrained_vector_rint_v3f32:
4761; PC64LE9:       # %bb.0: # %entry
4762; PC64LE9-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
4763; PC64LE9-NEXT:    lfs 0, .LCPI77_0@toc@l(3)
4764; PC64LE9-NEXT:    addis 3, 2, .LCPI77_1@toc@ha
4765; PC64LE9-NEXT:    lfs 1, .LCPI77_1@toc@l(3)
4766; PC64LE9-NEXT:    addis 3, 2, .LCPI77_2@toc@ha
4767; PC64LE9-NEXT:    xsrdpic 0, 0
4768; PC64LE9-NEXT:    lfs 2, .LCPI77_2@toc@l(3)
4769; PC64LE9-NEXT:    addis 3, 2, .LCPI77_3@toc@ha
4770; PC64LE9-NEXT:    addi 3, 3, .LCPI77_3@toc@l
4771; PC64LE9-NEXT:    xsrdpic 1, 1
4772; PC64LE9-NEXT:    xsrdpic 2, 2
4773; PC64LE9-NEXT:    xscvdpspn 0, 0
4774; PC64LE9-NEXT:    xscvdpspn 1, 1
4775; PC64LE9-NEXT:    xscvdpspn 2, 2
4776; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
4777; PC64LE9-NEXT:    xxsldwi 35, 1, 1, 3
4778; PC64LE9-NEXT:    xxsldwi 34, 2, 2, 3
4779; PC64LE9-NEXT:    vmrghw 2, 3, 2
4780; PC64LE9-NEXT:    lxvx 35, 0, 3
4781; PC64LE9-NEXT:    vperm 2, 4, 2, 3
4782; PC64LE9-NEXT:    blr
4783 entry:
4784  %rint = call <3 x float> @llvm.experimental.constrained.rint.v3f32(
4785                              <3 x float> <float 42.0, float 43.0, float 44.0>,
4786                              metadata !"round.dynamic",
4787                              metadata !"fpexcept.strict") #1
4788  ret <3 x float> %rint
4789}
4790
4791define <3 x double> @constrained_vector_rint_v3f64() #0 {
4792; PC64LE-LABEL: constrained_vector_rint_v3f64:
4793; PC64LE:       # %bb.0: # %entry
4794; PC64LE-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
4795; PC64LE-NEXT:    addi 3, 3, .LCPI78_1@toc@l
4796; PC64LE-NEXT:    lxvd2x 0, 0, 3
4797; PC64LE-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
4798; PC64LE-NEXT:    lfd 1, .LCPI78_0@toc@l(3)
4799; PC64LE-NEXT:    xxswapd 0, 0
4800; PC64LE-NEXT:    xsrdpic 3, 1
4801; PC64LE-NEXT:    xvrdpic 2, 0
4802; PC64LE-NEXT:    xxswapd 1, 2
4803; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4804; PC64LE-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4805; PC64LE-NEXT:    blr
4806;
4807; PC64LE9-LABEL: constrained_vector_rint_v3f64:
4808; PC64LE9:       # %bb.0: # %entry
4809; PC64LE9-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
4810; PC64LE9-NEXT:    lfd 0, .LCPI78_0@toc@l(3)
4811; PC64LE9-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
4812; PC64LE9-NEXT:    addi 3, 3, .LCPI78_1@toc@l
4813; PC64LE9-NEXT:    xsrdpic 3, 0
4814; PC64LE9-NEXT:    lxvx 0, 0, 3
4815; PC64LE9-NEXT:    xvrdpic 2, 0
4816; PC64LE9-NEXT:    xxswapd 1, 2
4817; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
4818; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
4819; PC64LE9-NEXT:    blr
4820entry:
4821  %rint = call <3 x double> @llvm.experimental.constrained.rint.v3f64(
4822                          <3 x double> <double 42.0, double 42.1, double 42.2>,
4823                          metadata !"round.dynamic",
4824                          metadata !"fpexcept.strict") #1
4825  ret <3 x double> %rint
4826}
4827
4828define <4 x double> @constrained_vector_rint_v4f64() #0 {
4829; PC64LE-LABEL: constrained_vector_rint_v4f64:
4830; PC64LE:       # %bb.0: # %entry
4831; PC64LE-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
4832; PC64LE-NEXT:    addis 4, 2, .LCPI79_1@toc@ha
4833; PC64LE-NEXT:    addi 3, 3, .LCPI79_0@toc@l
4834; PC64LE-NEXT:    lxvd2x 0, 0, 3
4835; PC64LE-NEXT:    addi 3, 4, .LCPI79_1@toc@l
4836; PC64LE-NEXT:    lxvd2x 1, 0, 3
4837; PC64LE-NEXT:    xxswapd 0, 0
4838; PC64LE-NEXT:    xxswapd 1, 1
4839; PC64LE-NEXT:    xvrdpic 34, 0
4840; PC64LE-NEXT:    xvrdpic 35, 1
4841; PC64LE-NEXT:    blr
4842;
4843; PC64LE9-LABEL: constrained_vector_rint_v4f64:
4844; PC64LE9:       # %bb.0: # %entry
4845; PC64LE9-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
4846; PC64LE9-NEXT:    addi 3, 3, .LCPI79_0@toc@l
4847; PC64LE9-NEXT:    lxvx 0, 0, 3
4848; PC64LE9-NEXT:    addis 3, 2, .LCPI79_1@toc@ha
4849; PC64LE9-NEXT:    addi 3, 3, .LCPI79_1@toc@l
4850; PC64LE9-NEXT:    xvrdpic 34, 0
4851; PC64LE9-NEXT:    lxvx 0, 0, 3
4852; PC64LE9-NEXT:    xvrdpic 35, 0
4853; PC64LE9-NEXT:    blr
4854entry:
4855  %rint = call <4 x double> @llvm.experimental.constrained.rint.v4f64(
4856                        <4 x double> <double 42.1, double 42.2,
4857                                      double 42.3, double 42.4>,
4858                        metadata !"round.dynamic",
4859                        metadata !"fpexcept.strict") #1
4860  ret <4 x double> %rint
4861}
4862
4863define <1 x float> @constrained_vector_nearbyint_v1f32() #0 {
4864; PC64LE-LABEL: constrained_vector_nearbyint_v1f32:
4865; PC64LE:       # %bb.0: # %entry
4866; PC64LE-NEXT:    mflr 0
4867; PC64LE-NEXT:    std 0, 16(1)
4868; PC64LE-NEXT:    stdu 1, -32(1)
4869; PC64LE-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
4870; PC64LE-NEXT:    lfs 1, .LCPI80_0@toc@l(3)
4871; PC64LE-NEXT:    bl nearbyintf
4872; PC64LE-NEXT:    nop
4873; PC64LE-NEXT:    addi 1, 1, 32
4874; PC64LE-NEXT:    ld 0, 16(1)
4875; PC64LE-NEXT:    mtlr 0
4876; PC64LE-NEXT:    blr
4877;
4878; PC64LE9-LABEL: constrained_vector_nearbyint_v1f32:
4879; PC64LE9:       # %bb.0: # %entry
4880; PC64LE9-NEXT:    mflr 0
4881; PC64LE9-NEXT:    std 0, 16(1)
4882; PC64LE9-NEXT:    stdu 1, -32(1)
4883; PC64LE9-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
4884; PC64LE9-NEXT:    lfs 1, .LCPI80_0@toc@l(3)
4885; PC64LE9-NEXT:    bl nearbyintf
4886; PC64LE9-NEXT:    nop
4887; PC64LE9-NEXT:    addi 1, 1, 32
4888; PC64LE9-NEXT:    ld 0, 16(1)
4889; PC64LE9-NEXT:    mtlr 0
4890; PC64LE9-NEXT:    blr
4891entry:
4892  %nearby = call <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(
4893                               <1 x float> <float 42.0>,
4894                               metadata !"round.dynamic",
4895                               metadata !"fpexcept.strict") #1
4896  ret <1 x float> %nearby
4897}
4898
4899define <2 x double> @constrained_vector_nearbyint_v2f64() #0 {
4900; PC64LE-LABEL: constrained_vector_nearbyint_v2f64:
4901; PC64LE:       # %bb.0: # %entry
4902; PC64LE-NEXT:    mflr 0
4903; PC64LE-NEXT:    std 0, 16(1)
4904; PC64LE-NEXT:    stdu 1, -64(1)
4905; PC64LE-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
4906; PC64LE-NEXT:    lfd 1, .LCPI81_0@toc@l(3)
4907; PC64LE-NEXT:    bl nearbyint
4908; PC64LE-NEXT:    nop
4909; PC64LE-NEXT:    li 3, 48
4910; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4911; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
4912; PC64LE-NEXT:    addis 3, 2, .LCPI81_1@toc@ha
4913; PC64LE-NEXT:    lfs 1, .LCPI81_1@toc@l(3)
4914; PC64LE-NEXT:    bl nearbyint
4915; PC64LE-NEXT:    nop
4916; PC64LE-NEXT:    li 3, 48
4917; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4918; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
4919; PC64LE-NEXT:    xxmrghd 34, 1, 0
4920; PC64LE-NEXT:    addi 1, 1, 64
4921; PC64LE-NEXT:    ld 0, 16(1)
4922; PC64LE-NEXT:    mtlr 0
4923; PC64LE-NEXT:    blr
4924;
4925; PC64LE9-LABEL: constrained_vector_nearbyint_v2f64:
4926; PC64LE9:       # %bb.0: # %entry
4927; PC64LE9-NEXT:    mflr 0
4928; PC64LE9-NEXT:    std 0, 16(1)
4929; PC64LE9-NEXT:    stdu 1, -48(1)
4930; PC64LE9-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
4931; PC64LE9-NEXT:    lfd 1, .LCPI81_0@toc@l(3)
4932; PC64LE9-NEXT:    bl nearbyint
4933; PC64LE9-NEXT:    nop
4934; PC64LE9-NEXT:    addis 3, 2, .LCPI81_1@toc@ha
4935; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4936; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
4937; PC64LE9-NEXT:    lfs 1, .LCPI81_1@toc@l(3)
4938; PC64LE9-NEXT:    bl nearbyint
4939; PC64LE9-NEXT:    nop
4940; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
4941; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
4942; PC64LE9-NEXT:    xxmrghd 34, 1, 0
4943; PC64LE9-NEXT:    addi 1, 1, 48
4944; PC64LE9-NEXT:    ld 0, 16(1)
4945; PC64LE9-NEXT:    mtlr 0
4946; PC64LE9-NEXT:    blr
4947entry:
4948  %nearby = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
4949                                <2 x double> <double 42.1, double 42.0>,
4950                                metadata !"round.dynamic",
4951                                metadata !"fpexcept.strict") #1
4952  ret <2 x double> %nearby
4953}
4954
4955define <3 x float> @constrained_vector_nearbyint_v3f32() #0 {
4956; PC64LE-LABEL: constrained_vector_nearbyint_v3f32:
4957; PC64LE:       # %bb.0: # %entry
4958; PC64LE-NEXT:    mflr 0
4959; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4960; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
4961; PC64LE-NEXT:    std 0, 16(1)
4962; PC64LE-NEXT:    stdu 1, -48(1)
4963; PC64LE-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
4964; PC64LE-NEXT:    lfs 1, .LCPI82_0@toc@l(3)
4965; PC64LE-NEXT:    bl nearbyintf
4966; PC64LE-NEXT:    nop
4967; PC64LE-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
4968; PC64LE-NEXT:    fmr 31, 1
4969; PC64LE-NEXT:    lfs 1, .LCPI82_1@toc@l(3)
4970; PC64LE-NEXT:    bl nearbyintf
4971; PC64LE-NEXT:    nop
4972; PC64LE-NEXT:    addis 3, 2, .LCPI82_2@toc@ha
4973; PC64LE-NEXT:    fmr 30, 1
4974; PC64LE-NEXT:    lfs 1, .LCPI82_2@toc@l(3)
4975; PC64LE-NEXT:    bl nearbyintf
4976; PC64LE-NEXT:    nop
4977; PC64LE-NEXT:    xscvdpspn 0, 30
4978; PC64LE-NEXT:    addis 3, 2, .LCPI82_3@toc@ha
4979; PC64LE-NEXT:    xscvdpspn 1, 1
4980; PC64LE-NEXT:    addi 3, 3, .LCPI82_3@toc@l
4981; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
4982; PC64LE-NEXT:    xscvdpspn 0, 31
4983; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
4984; PC64LE-NEXT:    vmrghw 2, 2, 3
4985; PC64LE-NEXT:    lvx 3, 0, 3
4986; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
4987; PC64LE-NEXT:    vperm 2, 4, 2, 3
4988; PC64LE-NEXT:    addi 1, 1, 48
4989; PC64LE-NEXT:    ld 0, 16(1)
4990; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
4991; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
4992; PC64LE-NEXT:    mtlr 0
4993; PC64LE-NEXT:    blr
4994;
4995; PC64LE9-LABEL: constrained_vector_nearbyint_v3f32:
4996; PC64LE9:       # %bb.0: # %entry
4997; PC64LE9-NEXT:    mflr 0
4998; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
4999; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5000; PC64LE9-NEXT:    std 0, 16(1)
5001; PC64LE9-NEXT:    stdu 1, -48(1)
5002; PC64LE9-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
5003; PC64LE9-NEXT:    lfs 1, .LCPI82_0@toc@l(3)
5004; PC64LE9-NEXT:    bl nearbyintf
5005; PC64LE9-NEXT:    nop
5006; PC64LE9-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
5007; PC64LE9-NEXT:    fmr 31, 1
5008; PC64LE9-NEXT:    lfs 1, .LCPI82_1@toc@l(3)
5009; PC64LE9-NEXT:    bl nearbyintf
5010; PC64LE9-NEXT:    nop
5011; PC64LE9-NEXT:    addis 3, 2, .LCPI82_2@toc@ha
5012; PC64LE9-NEXT:    fmr 30, 1
5013; PC64LE9-NEXT:    lfs 1, .LCPI82_2@toc@l(3)
5014; PC64LE9-NEXT:    bl nearbyintf
5015; PC64LE9-NEXT:    nop
5016; PC64LE9-NEXT:    xscvdpspn 0, 1
5017; PC64LE9-NEXT:    addis 3, 2, .LCPI82_3@toc@ha
5018; PC64LE9-NEXT:    addi 3, 3, .LCPI82_3@toc@l
5019; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
5020; PC64LE9-NEXT:    xscvdpspn 0, 30
5021; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
5022; PC64LE9-NEXT:    xscvdpspn 0, 31
5023; PC64LE9-NEXT:    vmrghw 2, 3, 2
5024; PC64LE9-NEXT:    lxvx 35, 0, 3
5025; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
5026; PC64LE9-NEXT:    vperm 2, 4, 2, 3
5027; PC64LE9-NEXT:    addi 1, 1, 48
5028; PC64LE9-NEXT:    ld 0, 16(1)
5029; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5030; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5031; PC64LE9-NEXT:    mtlr 0
5032; PC64LE9-NEXT:    blr
5033entry:
5034  %nearby = call <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(
5035                              <3 x float> <float 42.0, float 43.0, float 44.0>,
5036                              metadata !"round.dynamic",
5037                              metadata !"fpexcept.strict") #1
5038  ret <3 x float> %nearby
5039}
5040
5041define <3 x double> @constrained_vector_nearby_v3f64() #0 {
5042; PC64LE-LABEL: constrained_vector_nearby_v3f64:
5043; PC64LE:       # %bb.0: # %entry
5044; PC64LE-NEXT:    mflr 0
5045; PC64LE-NEXT:    std 0, 16(1)
5046; PC64LE-NEXT:    stdu 1, -80(1)
5047; PC64LE-NEXT:    li 3, 64
5048; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
5049; PC64LE-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
5050; PC64LE-NEXT:    lfd 1, .LCPI83_0@toc@l(3)
5051; PC64LE-NEXT:    bl nearbyint
5052; PC64LE-NEXT:    nop
5053; PC64LE-NEXT:    li 3, 48
5054; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5055; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
5056; PC64LE-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
5057; PC64LE-NEXT:    lfs 1, .LCPI83_1@toc@l(3)
5058; PC64LE-NEXT:    bl nearbyint
5059; PC64LE-NEXT:    nop
5060; PC64LE-NEXT:    li 3, 48
5061; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5062; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
5063; PC64LE-NEXT:    addis 3, 2, .LCPI83_2@toc@ha
5064; PC64LE-NEXT:    xxmrghd 63, 0, 1
5065; PC64LE-NEXT:    lfd 1, .LCPI83_2@toc@l(3)
5066; PC64LE-NEXT:    bl nearbyint
5067; PC64LE-NEXT:    nop
5068; PC64LE-NEXT:    xxswapd 0, 63
5069; PC64LE-NEXT:    li 3, 64
5070; PC64LE-NEXT:    xxlor 2, 63, 63
5071; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
5072; PC64LE-NEXT:    fmr 3, 1
5073; PC64LE-NEXT:    fmr 1, 0
5074; PC64LE-NEXT:    addi 1, 1, 80
5075; PC64LE-NEXT:    ld 0, 16(1)
5076; PC64LE-NEXT:    mtlr 0
5077; PC64LE-NEXT:    blr
5078;
5079; PC64LE9-LABEL: constrained_vector_nearby_v3f64:
5080; PC64LE9:       # %bb.0: # %entry
5081; PC64LE9-NEXT:    mflr 0
5082; PC64LE9-NEXT:    std 0, 16(1)
5083; PC64LE9-NEXT:    stdu 1, -64(1)
5084; PC64LE9-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
5085; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
5086; PC64LE9-NEXT:    lfd 1, .LCPI83_0@toc@l(3)
5087; PC64LE9-NEXT:    bl nearbyint
5088; PC64LE9-NEXT:    nop
5089; PC64LE9-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
5090; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5091; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5092; PC64LE9-NEXT:    lfs 1, .LCPI83_1@toc@l(3)
5093; PC64LE9-NEXT:    bl nearbyint
5094; PC64LE9-NEXT:    nop
5095; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5096; PC64LE9-NEXT:    addis 3, 2, .LCPI83_2@toc@ha
5097; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5098; PC64LE9-NEXT:    xxmrghd 63, 0, 1
5099; PC64LE9-NEXT:    lfd 1, .LCPI83_2@toc@l(3)
5100; PC64LE9-NEXT:    bl nearbyint
5101; PC64LE9-NEXT:    nop
5102; PC64LE9-NEXT:    fmr 3, 1
5103; PC64LE9-NEXT:    xxswapd 1, 63
5104; PC64LE9-NEXT:    xscpsgndp 2, 63, 63
5105; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
5106; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
5107; PC64LE9-NEXT:    addi 1, 1, 64
5108; PC64LE9-NEXT:    ld 0, 16(1)
5109; PC64LE9-NEXT:    mtlr 0
5110; PC64LE9-NEXT:    blr
5111entry:
5112  %nearby = call <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(
5113                          <3 x double> <double 42.0, double 42.1, double 42.2>,
5114                          metadata !"round.dynamic",
5115                          metadata !"fpexcept.strict") #1
5116  ret <3 x double> %nearby
5117}
5118
5119define <4 x double> @constrained_vector_nearbyint_v4f64() #0 {
5120; PC64LE-LABEL: constrained_vector_nearbyint_v4f64:
5121; PC64LE:       # %bb.0: # %entry
5122; PC64LE-NEXT:    mflr 0
5123; PC64LE-NEXT:    std 0, 16(1)
5124; PC64LE-NEXT:    stdu 1, -80(1)
5125; PC64LE-NEXT:    li 3, 64
5126; PC64LE-NEXT:    stxvd2x 63, 1, 3 # 16-byte Folded Spill
5127; PC64LE-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
5128; PC64LE-NEXT:    lfd 1, .LCPI84_0@toc@l(3)
5129; PC64LE-NEXT:    bl nearbyint
5130; PC64LE-NEXT:    nop
5131; PC64LE-NEXT:    li 3, 48
5132; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5133; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
5134; PC64LE-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
5135; PC64LE-NEXT:    lfd 1, .LCPI84_1@toc@l(3)
5136; PC64LE-NEXT:    bl nearbyint
5137; PC64LE-NEXT:    nop
5138; PC64LE-NEXT:    li 3, 48
5139; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5140; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
5141; PC64LE-NEXT:    addis 3, 2, .LCPI84_2@toc@ha
5142; PC64LE-NEXT:    xxmrghd 63, 1, 0
5143; PC64LE-NEXT:    lfd 1, .LCPI84_2@toc@l(3)
5144; PC64LE-NEXT:    bl nearbyint
5145; PC64LE-NEXT:    nop
5146; PC64LE-NEXT:    li 3, 48
5147; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5148; PC64LE-NEXT:    stxvd2x 1, 1, 3 # 16-byte Folded Spill
5149; PC64LE-NEXT:    addis 3, 2, .LCPI84_3@toc@ha
5150; PC64LE-NEXT:    lfd 1, .LCPI84_3@toc@l(3)
5151; PC64LE-NEXT:    bl nearbyint
5152; PC64LE-NEXT:    nop
5153; PC64LE-NEXT:    li 3, 48
5154; PC64LE-NEXT:    vmr 2, 31
5155; PC64LE-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5156; PC64LE-NEXT:    lxvd2x 0, 1, 3 # 16-byte Folded Reload
5157; PC64LE-NEXT:    li 3, 64
5158; PC64LE-NEXT:    lxvd2x 63, 1, 3 # 16-byte Folded Reload
5159; PC64LE-NEXT:    xxmrghd 35, 1, 0
5160; PC64LE-NEXT:    addi 1, 1, 80
5161; PC64LE-NEXT:    ld 0, 16(1)
5162; PC64LE-NEXT:    mtlr 0
5163; PC64LE-NEXT:    blr
5164;
5165; PC64LE9-LABEL: constrained_vector_nearbyint_v4f64:
5166; PC64LE9:       # %bb.0: # %entry
5167; PC64LE9-NEXT:    mflr 0
5168; PC64LE9-NEXT:    std 0, 16(1)
5169; PC64LE9-NEXT:    stdu 1, -64(1)
5170; PC64LE9-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
5171; PC64LE9-NEXT:    stxv 63, 48(1) # 16-byte Folded Spill
5172; PC64LE9-NEXT:    lfd 1, .LCPI84_0@toc@l(3)
5173; PC64LE9-NEXT:    bl nearbyint
5174; PC64LE9-NEXT:    nop
5175; PC64LE9-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
5176; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5177; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5178; PC64LE9-NEXT:    lfd 1, .LCPI84_1@toc@l(3)
5179; PC64LE9-NEXT:    bl nearbyint
5180; PC64LE9-NEXT:    nop
5181; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5182; PC64LE9-NEXT:    addis 3, 2, .LCPI84_2@toc@ha
5183; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5184; PC64LE9-NEXT:    xxmrghd 63, 1, 0
5185; PC64LE9-NEXT:    lfd 1, .LCPI84_2@toc@l(3)
5186; PC64LE9-NEXT:    bl nearbyint
5187; PC64LE9-NEXT:    nop
5188; PC64LE9-NEXT:    addis 3, 2, .LCPI84_3@toc@ha
5189; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5190; PC64LE9-NEXT:    stxv 1, 32(1) # 16-byte Folded Spill
5191; PC64LE9-NEXT:    lfd 1, .LCPI84_3@toc@l(3)
5192; PC64LE9-NEXT:    bl nearbyint
5193; PC64LE9-NEXT:    nop
5194; PC64LE9-NEXT:    lxv 0, 32(1) # 16-byte Folded Reload
5195; PC64LE9-NEXT:    vmr 2, 31
5196; PC64LE9-NEXT:    lxv 63, 48(1) # 16-byte Folded Reload
5197; PC64LE9-NEXT:    # kill: def $f1 killed $f1 def $vsl1
5198; PC64LE9-NEXT:    xxmrghd 35, 1, 0
5199; PC64LE9-NEXT:    addi 1, 1, 64
5200; PC64LE9-NEXT:    ld 0, 16(1)
5201; PC64LE9-NEXT:    mtlr 0
5202; PC64LE9-NEXT:    blr
5203entry:
5204  %nearby = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(
5205                                <4 x double> <double 42.1, double 42.2,
5206                                              double 42.3, double 42.4>,
5207                                metadata !"round.dynamic",
5208                                metadata !"fpexcept.strict") #1
5209  ret <4 x double> %nearby
5210}
5211
5212define <1 x float> @constrained_vector_maxnum_v1f32() #0 {
5213; PC64LE-LABEL: constrained_vector_maxnum_v1f32:
5214; PC64LE:       # %bb.0: # %entry
5215; PC64LE-NEXT:    mflr 0
5216; PC64LE-NEXT:    std 0, 16(1)
5217; PC64LE-NEXT:    stdu 1, -32(1)
5218; PC64LE-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
5219; PC64LE-NEXT:    addis 4, 2, .LCPI85_1@toc@ha
5220; PC64LE-NEXT:    lfs 1, .LCPI85_0@toc@l(3)
5221; PC64LE-NEXT:    lfs 2, .LCPI85_1@toc@l(4)
5222; PC64LE-NEXT:    bl fmaxf
5223; PC64LE-NEXT:    nop
5224; PC64LE-NEXT:    addi 1, 1, 32
5225; PC64LE-NEXT:    ld 0, 16(1)
5226; PC64LE-NEXT:    mtlr 0
5227; PC64LE-NEXT:    blr
5228;
5229; PC64LE9-LABEL: constrained_vector_maxnum_v1f32:
5230; PC64LE9:       # %bb.0: # %entry
5231; PC64LE9-NEXT:    mflr 0
5232; PC64LE9-NEXT:    std 0, 16(1)
5233; PC64LE9-NEXT:    stdu 1, -32(1)
5234; PC64LE9-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
5235; PC64LE9-NEXT:    lfs 1, .LCPI85_0@toc@l(3)
5236; PC64LE9-NEXT:    addis 3, 2, .LCPI85_1@toc@ha
5237; PC64LE9-NEXT:    lfs 2, .LCPI85_1@toc@l(3)
5238; PC64LE9-NEXT:    bl fmaxf
5239; PC64LE9-NEXT:    nop
5240; PC64LE9-NEXT:    addi 1, 1, 32
5241; PC64LE9-NEXT:    ld 0, 16(1)
5242; PC64LE9-NEXT:    mtlr 0
5243; PC64LE9-NEXT:    blr
5244entry:
5245  %max = call <1 x float> @llvm.experimental.constrained.maxnum.v1f32(
5246                               <1 x float> <float 42.0>, <1 x float> <float 41.0>,
5247                               metadata !"fpexcept.strict") #1
5248  ret <1 x float> %max
5249}
5250
5251define <2 x double> @constrained_vector_maxnum_v2f64() #0 {
5252; PC64LE-LABEL: constrained_vector_maxnum_v2f64:
5253; PC64LE:       # %bb.0: # %entry
5254; PC64LE-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
5255; PC64LE-NEXT:    addis 4, 2, .LCPI86_1@toc@ha
5256; PC64LE-NEXT:    addi 3, 3, .LCPI86_0@toc@l
5257; PC64LE-NEXT:    addi 4, 4, .LCPI86_1@toc@l
5258; PC64LE-NEXT:    lxvd2x 0, 0, 3
5259; PC64LE-NEXT:    lxvd2x 1, 0, 4
5260; PC64LE-NEXT:    xxswapd 0, 0
5261; PC64LE-NEXT:    xxswapd 1, 1
5262; PC64LE-NEXT:    xvmaxdp 34, 1, 0
5263; PC64LE-NEXT:    blr
5264;
5265; PC64LE9-LABEL: constrained_vector_maxnum_v2f64:
5266; PC64LE9:       # %bb.0: # %entry
5267; PC64LE9-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
5268; PC64LE9-NEXT:    addi 3, 3, .LCPI86_0@toc@l
5269; PC64LE9-NEXT:    lxvx 0, 0, 3
5270; PC64LE9-NEXT:    addis 3, 2, .LCPI86_1@toc@ha
5271; PC64LE9-NEXT:    addi 3, 3, .LCPI86_1@toc@l
5272; PC64LE9-NEXT:    lxvx 1, 0, 3
5273; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
5274; PC64LE9-NEXT:    blr
5275entry:
5276  %max = call <2 x double> @llvm.experimental.constrained.maxnum.v2f64(
5277                                <2 x double> <double 43.0, double 42.0>,
5278                                <2 x double> <double 41.0, double 40.0>,
5279                                metadata !"fpexcept.strict") #1
5280  ret <2 x double> %max
5281}
5282
5283define <3 x float> @constrained_vector_maxnum_v3f32() #0 {
5284; PC64LE-LABEL: constrained_vector_maxnum_v3f32:
5285; PC64LE:       # %bb.0: # %entry
5286; PC64LE-NEXT:    mflr 0
5287; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5288; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5289; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5290; PC64LE-NEXT:    std 0, 16(1)
5291; PC64LE-NEXT:    stdu 1, -64(1)
5292; PC64LE-NEXT:    addis 4, 2, .LCPI87_1@toc@ha
5293; PC64LE-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
5294; PC64LE-NEXT:    lfs 31, .LCPI87_1@toc@l(4)
5295; PC64LE-NEXT:    lfs 1, .LCPI87_0@toc@l(3)
5296; PC64LE-NEXT:    fmr 2, 31
5297; PC64LE-NEXT:    bl fmaxf
5298; PC64LE-NEXT:    nop
5299; PC64LE-NEXT:    addis 3, 2, .LCPI87_2@toc@ha
5300; PC64LE-NEXT:    addis 4, 2, .LCPI87_3@toc@ha
5301; PC64LE-NEXT:    fmr 30, 1
5302; PC64LE-NEXT:    lfs 1, .LCPI87_2@toc@l(3)
5303; PC64LE-NEXT:    lfs 2, .LCPI87_3@toc@l(4)
5304; PC64LE-NEXT:    bl fmaxf
5305; PC64LE-NEXT:    nop
5306; PC64LE-NEXT:    fmr 29, 1
5307; PC64LE-NEXT:    addis 3, 2, .LCPI87_4@toc@ha
5308; PC64LE-NEXT:    fmr 1, 31
5309; PC64LE-NEXT:    lfs 2, .LCPI87_4@toc@l(3)
5310; PC64LE-NEXT:    bl fmaxf
5311; PC64LE-NEXT:    nop
5312; PC64LE-NEXT:    xscvdpspn 0, 29
5313; PC64LE-NEXT:    addis 3, 2, .LCPI87_5@toc@ha
5314; PC64LE-NEXT:    xscvdpspn 1, 1
5315; PC64LE-NEXT:    addi 3, 3, .LCPI87_5@toc@l
5316; PC64LE-NEXT:    lvx 4, 0, 3
5317; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
5318; PC64LE-NEXT:    xscvdpspn 0, 30
5319; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
5320; PC64LE-NEXT:    vmrghw 2, 2, 3
5321; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
5322; PC64LE-NEXT:    vperm 2, 3, 2, 4
5323; PC64LE-NEXT:    addi 1, 1, 64
5324; PC64LE-NEXT:    ld 0, 16(1)
5325; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5326; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5327; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5328; PC64LE-NEXT:    mtlr 0
5329; PC64LE-NEXT:    blr
5330;
5331; PC64LE9-LABEL: constrained_vector_maxnum_v3f32:
5332; PC64LE9:       # %bb.0: # %entry
5333; PC64LE9-NEXT:    mflr 0
5334; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5335; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5336; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5337; PC64LE9-NEXT:    std 0, 16(1)
5338; PC64LE9-NEXT:    stdu 1, -64(1)
5339; PC64LE9-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
5340; PC64LE9-NEXT:    lfs 1, .LCPI87_0@toc@l(3)
5341; PC64LE9-NEXT:    addis 3, 2, .LCPI87_1@toc@ha
5342; PC64LE9-NEXT:    lfs 31, .LCPI87_1@toc@l(3)
5343; PC64LE9-NEXT:    fmr 2, 31
5344; PC64LE9-NEXT:    bl fmaxf
5345; PC64LE9-NEXT:    nop
5346; PC64LE9-NEXT:    addis 3, 2, .LCPI87_2@toc@ha
5347; PC64LE9-NEXT:    fmr 30, 1
5348; PC64LE9-NEXT:    lfs 1, .LCPI87_2@toc@l(3)
5349; PC64LE9-NEXT:    addis 3, 2, .LCPI87_3@toc@ha
5350; PC64LE9-NEXT:    lfs 2, .LCPI87_3@toc@l(3)
5351; PC64LE9-NEXT:    bl fmaxf
5352; PC64LE9-NEXT:    nop
5353; PC64LE9-NEXT:    addis 3, 2, .LCPI87_4@toc@ha
5354; PC64LE9-NEXT:    fmr 29, 1
5355; PC64LE9-NEXT:    fmr 1, 31
5356; PC64LE9-NEXT:    lfs 2, .LCPI87_4@toc@l(3)
5357; PC64LE9-NEXT:    bl fmaxf
5358; PC64LE9-NEXT:    nop
5359; PC64LE9-NEXT:    xscvdpspn 0, 1
5360; PC64LE9-NEXT:    addis 3, 2, .LCPI87_5@toc@ha
5361; PC64LE9-NEXT:    addi 3, 3, .LCPI87_5@toc@l
5362; PC64LE9-NEXT:    lxvx 36, 0, 3
5363; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
5364; PC64LE9-NEXT:    xscvdpspn 0, 29
5365; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
5366; PC64LE9-NEXT:    xscvdpspn 0, 30
5367; PC64LE9-NEXT:    vmrghw 2, 3, 2
5368; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
5369; PC64LE9-NEXT:    vperm 2, 3, 2, 4
5370; PC64LE9-NEXT:    addi 1, 1, 64
5371; PC64LE9-NEXT:    ld 0, 16(1)
5372; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5373; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5374; PC64LE9-NEXT:    mtlr 0
5375; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5376; PC64LE9-NEXT:    blr
5377entry:
5378  %max = call <3 x float> @llvm.experimental.constrained.maxnum.v3f32(
5379                              <3 x float> <float 43.0, float 44.0, float 45.0>,
5380                              <3 x float> <float 41.0, float 42.0, float 43.0>,
5381                              metadata !"fpexcept.strict") #1
5382  ret <3 x float> %max
5383}
5384
5385define <3 x double> @constrained_vector_max_v3f64() #0 {
5386; PC64LE-LABEL: constrained_vector_max_v3f64:
5387; PC64LE:       # %bb.0: # %entry
5388; PC64LE-NEXT:    mflr 0
5389; PC64LE-NEXT:    std 0, 16(1)
5390; PC64LE-NEXT:    stdu 1, -32(1)
5391; PC64LE-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
5392; PC64LE-NEXT:    addis 4, 2, .LCPI88_1@toc@ha
5393; PC64LE-NEXT:    lfs 1, .LCPI88_0@toc@l(3)
5394; PC64LE-NEXT:    lfs 2, .LCPI88_1@toc@l(4)
5395; PC64LE-NEXT:    bl fmax
5396; PC64LE-NEXT:    nop
5397; PC64LE-NEXT:    addis 3, 2, .LCPI88_2@toc@ha
5398; PC64LE-NEXT:    addis 4, 2, .LCPI88_3@toc@ha
5399; PC64LE-NEXT:    fmr 3, 1
5400; PC64LE-NEXT:    addi 3, 3, .LCPI88_2@toc@l
5401; PC64LE-NEXT:    addi 4, 4, .LCPI88_3@toc@l
5402; PC64LE-NEXT:    lxvd2x 0, 0, 3
5403; PC64LE-NEXT:    lxvd2x 2, 0, 4
5404; PC64LE-NEXT:    xxswapd 0, 0
5405; PC64LE-NEXT:    xxswapd 2, 2
5406; PC64LE-NEXT:    xvmaxdp 2, 2, 0
5407; PC64LE-NEXT:    xxswapd 0, 2
5408; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5409; PC64LE-NEXT:    fmr 1, 0
5410; PC64LE-NEXT:    addi 1, 1, 32
5411; PC64LE-NEXT:    ld 0, 16(1)
5412; PC64LE-NEXT:    mtlr 0
5413; PC64LE-NEXT:    blr
5414;
5415; PC64LE9-LABEL: constrained_vector_max_v3f64:
5416; PC64LE9:       # %bb.0: # %entry
5417; PC64LE9-NEXT:    mflr 0
5418; PC64LE9-NEXT:    std 0, 16(1)
5419; PC64LE9-NEXT:    stdu 1, -32(1)
5420; PC64LE9-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
5421; PC64LE9-NEXT:    lfs 1, .LCPI88_0@toc@l(3)
5422; PC64LE9-NEXT:    addis 3, 2, .LCPI88_1@toc@ha
5423; PC64LE9-NEXT:    lfs 2, .LCPI88_1@toc@l(3)
5424; PC64LE9-NEXT:    bl fmax
5425; PC64LE9-NEXT:    nop
5426; PC64LE9-NEXT:    addis 3, 2, .LCPI88_2@toc@ha
5427; PC64LE9-NEXT:    fmr 3, 1
5428; PC64LE9-NEXT:    addi 3, 3, .LCPI88_2@toc@l
5429; PC64LE9-NEXT:    lxvx 0, 0, 3
5430; PC64LE9-NEXT:    addis 3, 2, .LCPI88_3@toc@ha
5431; PC64LE9-NEXT:    addi 3, 3, .LCPI88_3@toc@l
5432; PC64LE9-NEXT:    lxvx 1, 0, 3
5433; PC64LE9-NEXT:    xvmaxdp 2, 1, 0
5434; PC64LE9-NEXT:    xxswapd 1, 2
5435; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
5436; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5437; PC64LE9-NEXT:    addi 1, 1, 32
5438; PC64LE9-NEXT:    ld 0, 16(1)
5439; PC64LE9-NEXT:    mtlr 0
5440; PC64LE9-NEXT:    blr
5441entry:
5442  %max = call <3 x double> @llvm.experimental.constrained.maxnum.v3f64(
5443                          <3 x double> <double 43.0, double 44.0, double 45.0>,
5444                          <3 x double> <double 40.0, double 41.0, double 42.0>,
5445                          metadata !"fpexcept.strict") #1
5446  ret <3 x double> %max
5447}
5448
5449define <4 x double> @constrained_vector_maxnum_v4f64() #0 {
5450; PC64LE-LABEL: constrained_vector_maxnum_v4f64:
5451; PC64LE:       # %bb.0: # %entry
5452; PC64LE-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
5453; PC64LE-NEXT:    addis 4, 2, .LCPI89_1@toc@ha
5454; PC64LE-NEXT:    addis 5, 2, .LCPI89_2@toc@ha
5455; PC64LE-NEXT:    addis 6, 2, .LCPI89_3@toc@ha
5456; PC64LE-NEXT:    addi 3, 3, .LCPI89_0@toc@l
5457; PC64LE-NEXT:    addi 4, 4, .LCPI89_1@toc@l
5458; PC64LE-NEXT:    lxvd2x 0, 0, 3
5459; PC64LE-NEXT:    lxvd2x 1, 0, 4
5460; PC64LE-NEXT:    addi 3, 5, .LCPI89_2@toc@l
5461; PC64LE-NEXT:    addi 4, 6, .LCPI89_3@toc@l
5462; PC64LE-NEXT:    lxvd2x 2, 0, 3
5463; PC64LE-NEXT:    lxvd2x 3, 0, 4
5464; PC64LE-NEXT:    xxswapd 0, 0
5465; PC64LE-NEXT:    xxswapd 1, 1
5466; PC64LE-NEXT:    xxswapd 2, 2
5467; PC64LE-NEXT:    xxswapd 3, 3
5468; PC64LE-NEXT:    xvmaxdp 34, 1, 0
5469; PC64LE-NEXT:    xvmaxdp 35, 3, 2
5470; PC64LE-NEXT:    blr
5471;
5472; PC64LE9-LABEL: constrained_vector_maxnum_v4f64:
5473; PC64LE9:       # %bb.0: # %entry
5474; PC64LE9-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
5475; PC64LE9-NEXT:    addi 3, 3, .LCPI89_0@toc@l
5476; PC64LE9-NEXT:    lxvx 0, 0, 3
5477; PC64LE9-NEXT:    addis 3, 2, .LCPI89_1@toc@ha
5478; PC64LE9-NEXT:    addi 3, 3, .LCPI89_1@toc@l
5479; PC64LE9-NEXT:    lxvx 1, 0, 3
5480; PC64LE9-NEXT:    addis 3, 2, .LCPI89_2@toc@ha
5481; PC64LE9-NEXT:    addi 3, 3, .LCPI89_2@toc@l
5482; PC64LE9-NEXT:    xvmaxdp 34, 1, 0
5483; PC64LE9-NEXT:    lxvx 0, 0, 3
5484; PC64LE9-NEXT:    addis 3, 2, .LCPI89_3@toc@ha
5485; PC64LE9-NEXT:    addi 3, 3, .LCPI89_3@toc@l
5486; PC64LE9-NEXT:    lxvx 1, 0, 3
5487; PC64LE9-NEXT:    xvmaxdp 35, 1, 0
5488; PC64LE9-NEXT:    blr
5489entry:
5490  %max = call <4 x double> @llvm.experimental.constrained.maxnum.v4f64(
5491                                <4 x double> <double 44.0, double 45.0,
5492                                              double 46.0, double 47.0>,
5493                                <4 x double> <double 40.0, double 41.0,
5494                                              double 42.0, double 43.0>,
5495                                metadata !"fpexcept.strict") #1
5496  ret <4 x double> %max
5497}
5498
5499define <1 x float> @constrained_vector_minnum_v1f32() #0 {
5500; PC64LE-LABEL: constrained_vector_minnum_v1f32:
5501; PC64LE:       # %bb.0: # %entry
5502; PC64LE-NEXT:    mflr 0
5503; PC64LE-NEXT:    std 0, 16(1)
5504; PC64LE-NEXT:    stdu 1, -32(1)
5505; PC64LE-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
5506; PC64LE-NEXT:    addis 4, 2, .LCPI90_1@toc@ha
5507; PC64LE-NEXT:    lfs 1, .LCPI90_0@toc@l(3)
5508; PC64LE-NEXT:    lfs 2, .LCPI90_1@toc@l(4)
5509; PC64LE-NEXT:    bl fminf
5510; PC64LE-NEXT:    nop
5511; PC64LE-NEXT:    addi 1, 1, 32
5512; PC64LE-NEXT:    ld 0, 16(1)
5513; PC64LE-NEXT:    mtlr 0
5514; PC64LE-NEXT:    blr
5515;
5516; PC64LE9-LABEL: constrained_vector_minnum_v1f32:
5517; PC64LE9:       # %bb.0: # %entry
5518; PC64LE9-NEXT:    mflr 0
5519; PC64LE9-NEXT:    std 0, 16(1)
5520; PC64LE9-NEXT:    stdu 1, -32(1)
5521; PC64LE9-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
5522; PC64LE9-NEXT:    lfs 1, .LCPI90_0@toc@l(3)
5523; PC64LE9-NEXT:    addis 3, 2, .LCPI90_1@toc@ha
5524; PC64LE9-NEXT:    lfs 2, .LCPI90_1@toc@l(3)
5525; PC64LE9-NEXT:    bl fminf
5526; PC64LE9-NEXT:    nop
5527; PC64LE9-NEXT:    addi 1, 1, 32
5528; PC64LE9-NEXT:    ld 0, 16(1)
5529; PC64LE9-NEXT:    mtlr 0
5530; PC64LE9-NEXT:    blr
5531 entry:
5532  %min = call <1 x float> @llvm.experimental.constrained.minnum.v1f32(
5533                               <1 x float> <float 42.0>, <1 x float> <float 41.0>,
5534                               metadata !"fpexcept.strict") #1
5535  ret <1 x float> %min
5536}
5537
5538define <2 x double> @constrained_vector_minnum_v2f64() #0 {
5539; PC64LE-LABEL: constrained_vector_minnum_v2f64:
5540; PC64LE:       # %bb.0: # %entry
5541; PC64LE-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
5542; PC64LE-NEXT:    addis 4, 2, .LCPI91_1@toc@ha
5543; PC64LE-NEXT:    addi 3, 3, .LCPI91_0@toc@l
5544; PC64LE-NEXT:    addi 4, 4, .LCPI91_1@toc@l
5545; PC64LE-NEXT:    lxvd2x 0, 0, 3
5546; PC64LE-NEXT:    lxvd2x 1, 0, 4
5547; PC64LE-NEXT:    xxswapd 0, 0
5548; PC64LE-NEXT:    xxswapd 1, 1
5549; PC64LE-NEXT:    xvmindp 34, 1, 0
5550; PC64LE-NEXT:    blr
5551;
5552; PC64LE9-LABEL: constrained_vector_minnum_v2f64:
5553; PC64LE9:       # %bb.0: # %entry
5554; PC64LE9-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
5555; PC64LE9-NEXT:    addi 3, 3, .LCPI91_0@toc@l
5556; PC64LE9-NEXT:    lxvx 0, 0, 3
5557; PC64LE9-NEXT:    addis 3, 2, .LCPI91_1@toc@ha
5558; PC64LE9-NEXT:    addi 3, 3, .LCPI91_1@toc@l
5559; PC64LE9-NEXT:    lxvx 1, 0, 3
5560; PC64LE9-NEXT:    xvmindp 34, 1, 0
5561; PC64LE9-NEXT:    blr
5562entry:
5563  %min = call <2 x double> @llvm.experimental.constrained.minnum.v2f64(
5564                                <2 x double> <double 43.0, double 42.0>,
5565                                <2 x double> <double 41.0, double 40.0>,
5566                                metadata !"fpexcept.strict") #1
5567  ret <2 x double> %min
5568}
5569
5570define <3 x float> @constrained_vector_minnum_v3f32() #0 {
5571; PC64LE-LABEL: constrained_vector_minnum_v3f32:
5572; PC64LE:       # %bb.0: # %entry
5573; PC64LE-NEXT:    mflr 0
5574; PC64LE-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5575; PC64LE-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5576; PC64LE-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5577; PC64LE-NEXT:    std 0, 16(1)
5578; PC64LE-NEXT:    stdu 1, -64(1)
5579; PC64LE-NEXT:    addis 4, 2, .LCPI92_1@toc@ha
5580; PC64LE-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
5581; PC64LE-NEXT:    lfs 31, .LCPI92_1@toc@l(4)
5582; PC64LE-NEXT:    lfs 1, .LCPI92_0@toc@l(3)
5583; PC64LE-NEXT:    fmr 2, 31
5584; PC64LE-NEXT:    bl fminf
5585; PC64LE-NEXT:    nop
5586; PC64LE-NEXT:    addis 3, 2, .LCPI92_2@toc@ha
5587; PC64LE-NEXT:    addis 4, 2, .LCPI92_3@toc@ha
5588; PC64LE-NEXT:    fmr 30, 1
5589; PC64LE-NEXT:    lfs 1, .LCPI92_2@toc@l(3)
5590; PC64LE-NEXT:    lfs 2, .LCPI92_3@toc@l(4)
5591; PC64LE-NEXT:    bl fminf
5592; PC64LE-NEXT:    nop
5593; PC64LE-NEXT:    fmr 29, 1
5594; PC64LE-NEXT:    addis 3, 2, .LCPI92_4@toc@ha
5595; PC64LE-NEXT:    fmr 1, 31
5596; PC64LE-NEXT:    lfs 2, .LCPI92_4@toc@l(3)
5597; PC64LE-NEXT:    bl fminf
5598; PC64LE-NEXT:    nop
5599; PC64LE-NEXT:    xscvdpspn 0, 29
5600; PC64LE-NEXT:    addis 3, 2, .LCPI92_5@toc@ha
5601; PC64LE-NEXT:    xscvdpspn 1, 1
5602; PC64LE-NEXT:    addi 3, 3, .LCPI92_5@toc@l
5603; PC64LE-NEXT:    lvx 4, 0, 3
5604; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
5605; PC64LE-NEXT:    xscvdpspn 0, 30
5606; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
5607; PC64LE-NEXT:    vmrghw 2, 2, 3
5608; PC64LE-NEXT:    xxsldwi 35, 0, 0, 3
5609; PC64LE-NEXT:    vperm 2, 3, 2, 4
5610; PC64LE-NEXT:    addi 1, 1, 64
5611; PC64LE-NEXT:    ld 0, 16(1)
5612; PC64LE-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5613; PC64LE-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5614; PC64LE-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5615; PC64LE-NEXT:    mtlr 0
5616; PC64LE-NEXT:    blr
5617;
5618; PC64LE9-LABEL: constrained_vector_minnum_v3f32:
5619; PC64LE9:       # %bb.0: # %entry
5620; PC64LE9-NEXT:    mflr 0
5621; PC64LE9-NEXT:    stfd 29, -24(1) # 8-byte Folded Spill
5622; PC64LE9-NEXT:    stfd 30, -16(1) # 8-byte Folded Spill
5623; PC64LE9-NEXT:    stfd 31, -8(1) # 8-byte Folded Spill
5624; PC64LE9-NEXT:    std 0, 16(1)
5625; PC64LE9-NEXT:    stdu 1, -64(1)
5626; PC64LE9-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
5627; PC64LE9-NEXT:    lfs 1, .LCPI92_0@toc@l(3)
5628; PC64LE9-NEXT:    addis 3, 2, .LCPI92_1@toc@ha
5629; PC64LE9-NEXT:    lfs 31, .LCPI92_1@toc@l(3)
5630; PC64LE9-NEXT:    fmr 2, 31
5631; PC64LE9-NEXT:    bl fminf
5632; PC64LE9-NEXT:    nop
5633; PC64LE9-NEXT:    addis 3, 2, .LCPI92_2@toc@ha
5634; PC64LE9-NEXT:    fmr 30, 1
5635; PC64LE9-NEXT:    lfs 1, .LCPI92_2@toc@l(3)
5636; PC64LE9-NEXT:    addis 3, 2, .LCPI92_3@toc@ha
5637; PC64LE9-NEXT:    lfs 2, .LCPI92_3@toc@l(3)
5638; PC64LE9-NEXT:    bl fminf
5639; PC64LE9-NEXT:    nop
5640; PC64LE9-NEXT:    addis 3, 2, .LCPI92_4@toc@ha
5641; PC64LE9-NEXT:    fmr 29, 1
5642; PC64LE9-NEXT:    fmr 1, 31
5643; PC64LE9-NEXT:    lfs 2, .LCPI92_4@toc@l(3)
5644; PC64LE9-NEXT:    bl fminf
5645; PC64LE9-NEXT:    nop
5646; PC64LE9-NEXT:    xscvdpspn 0, 1
5647; PC64LE9-NEXT:    addis 3, 2, .LCPI92_5@toc@ha
5648; PC64LE9-NEXT:    addi 3, 3, .LCPI92_5@toc@l
5649; PC64LE9-NEXT:    lxvx 36, 0, 3
5650; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
5651; PC64LE9-NEXT:    xscvdpspn 0, 29
5652; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
5653; PC64LE9-NEXT:    xscvdpspn 0, 30
5654; PC64LE9-NEXT:    vmrghw 2, 3, 2
5655; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
5656; PC64LE9-NEXT:    vperm 2, 3, 2, 4
5657; PC64LE9-NEXT:    addi 1, 1, 64
5658; PC64LE9-NEXT:    ld 0, 16(1)
5659; PC64LE9-NEXT:    lfd 31, -8(1) # 8-byte Folded Reload
5660; PC64LE9-NEXT:    lfd 30, -16(1) # 8-byte Folded Reload
5661; PC64LE9-NEXT:    mtlr 0
5662; PC64LE9-NEXT:    lfd 29, -24(1) # 8-byte Folded Reload
5663; PC64LE9-NEXT:    blr
5664entry:
5665  %min = call <3 x float> @llvm.experimental.constrained.minnum.v3f32(
5666                              <3 x float> <float 43.0, float 44.0, float 45.0>,
5667                              <3 x float> <float 41.0, float 42.0, float 43.0>,
5668                              metadata !"fpexcept.strict") #1
5669  ret <3 x float> %min
5670}
5671
5672define <3 x double> @constrained_vector_min_v3f64() #0 {
5673; PC64LE-LABEL: constrained_vector_min_v3f64:
5674; PC64LE:       # %bb.0: # %entry
5675; PC64LE-NEXT:    mflr 0
5676; PC64LE-NEXT:    std 0, 16(1)
5677; PC64LE-NEXT:    stdu 1, -32(1)
5678; PC64LE-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
5679; PC64LE-NEXT:    addis 4, 2, .LCPI93_1@toc@ha
5680; PC64LE-NEXT:    lfs 1, .LCPI93_0@toc@l(3)
5681; PC64LE-NEXT:    lfs 2, .LCPI93_1@toc@l(4)
5682; PC64LE-NEXT:    bl fmin
5683; PC64LE-NEXT:    nop
5684; PC64LE-NEXT:    addis 3, 2, .LCPI93_2@toc@ha
5685; PC64LE-NEXT:    addis 4, 2, .LCPI93_3@toc@ha
5686; PC64LE-NEXT:    fmr 3, 1
5687; PC64LE-NEXT:    addi 3, 3, .LCPI93_2@toc@l
5688; PC64LE-NEXT:    addi 4, 4, .LCPI93_3@toc@l
5689; PC64LE-NEXT:    lxvd2x 0, 0, 3
5690; PC64LE-NEXT:    lxvd2x 2, 0, 4
5691; PC64LE-NEXT:    xxswapd 0, 0
5692; PC64LE-NEXT:    xxswapd 2, 2
5693; PC64LE-NEXT:    xvmindp 2, 2, 0
5694; PC64LE-NEXT:    xxswapd 0, 2
5695; PC64LE-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5696; PC64LE-NEXT:    fmr 1, 0
5697; PC64LE-NEXT:    addi 1, 1, 32
5698; PC64LE-NEXT:    ld 0, 16(1)
5699; PC64LE-NEXT:    mtlr 0
5700; PC64LE-NEXT:    blr
5701;
5702; PC64LE9-LABEL: constrained_vector_min_v3f64:
5703; PC64LE9:       # %bb.0: # %entry
5704; PC64LE9-NEXT:    mflr 0
5705; PC64LE9-NEXT:    std 0, 16(1)
5706; PC64LE9-NEXT:    stdu 1, -32(1)
5707; PC64LE9-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
5708; PC64LE9-NEXT:    lfs 1, .LCPI93_0@toc@l(3)
5709; PC64LE9-NEXT:    addis 3, 2, .LCPI93_1@toc@ha
5710; PC64LE9-NEXT:    lfs 2, .LCPI93_1@toc@l(3)
5711; PC64LE9-NEXT:    bl fmin
5712; PC64LE9-NEXT:    nop
5713; PC64LE9-NEXT:    addis 3, 2, .LCPI93_2@toc@ha
5714; PC64LE9-NEXT:    fmr 3, 1
5715; PC64LE9-NEXT:    addi 3, 3, .LCPI93_2@toc@l
5716; PC64LE9-NEXT:    lxvx 0, 0, 3
5717; PC64LE9-NEXT:    addis 3, 2, .LCPI93_3@toc@ha
5718; PC64LE9-NEXT:    addi 3, 3, .LCPI93_3@toc@l
5719; PC64LE9-NEXT:    lxvx 1, 0, 3
5720; PC64LE9-NEXT:    xvmindp 2, 1, 0
5721; PC64LE9-NEXT:    xxswapd 1, 2
5722; PC64LE9-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
5723; PC64LE9-NEXT:    # kill: def $f2 killed $f2 killed $vsl2
5724; PC64LE9-NEXT:    addi 1, 1, 32
5725; PC64LE9-NEXT:    ld 0, 16(1)
5726; PC64LE9-NEXT:    mtlr 0
5727; PC64LE9-NEXT:    blr
5728entry:
5729 %min = call <3 x double> @llvm.experimental.constrained.minnum.v3f64(
5730                          <3 x double> <double 43.0, double 44.0, double 45.0>,
5731                          <3 x double> <double 40.0, double 41.0, double 42.0>,
5732                          metadata !"fpexcept.strict") #1
5733  ret <3 x double> %min
5734}
5735
5736define <4 x double> @constrained_vector_minnum_v4f64() #0 {
5737; PC64LE-LABEL: constrained_vector_minnum_v4f64:
5738; PC64LE:       # %bb.0: # %entry
5739; PC64LE-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
5740; PC64LE-NEXT:    addis 4, 2, .LCPI94_1@toc@ha
5741; PC64LE-NEXT:    addis 5, 2, .LCPI94_2@toc@ha
5742; PC64LE-NEXT:    addis 6, 2, .LCPI94_3@toc@ha
5743; PC64LE-NEXT:    addi 3, 3, .LCPI94_0@toc@l
5744; PC64LE-NEXT:    addi 4, 4, .LCPI94_1@toc@l
5745; PC64LE-NEXT:    lxvd2x 0, 0, 3
5746; PC64LE-NEXT:    lxvd2x 1, 0, 4
5747; PC64LE-NEXT:    addi 3, 5, .LCPI94_2@toc@l
5748; PC64LE-NEXT:    addi 4, 6, .LCPI94_3@toc@l
5749; PC64LE-NEXT:    lxvd2x 2, 0, 3
5750; PC64LE-NEXT:    lxvd2x 3, 0, 4
5751; PC64LE-NEXT:    xxswapd 0, 0
5752; PC64LE-NEXT:    xxswapd 1, 1
5753; PC64LE-NEXT:    xxswapd 2, 2
5754; PC64LE-NEXT:    xxswapd 3, 3
5755; PC64LE-NEXT:    xvmindp 34, 1, 0
5756; PC64LE-NEXT:    xvmindp 35, 3, 2
5757; PC64LE-NEXT:    blr
5758;
5759; PC64LE9-LABEL: constrained_vector_minnum_v4f64:
5760; PC64LE9:       # %bb.0: # %entry
5761; PC64LE9-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
5762; PC64LE9-NEXT:    addi 3, 3, .LCPI94_0@toc@l
5763; PC64LE9-NEXT:    lxvx 0, 0, 3
5764; PC64LE9-NEXT:    addis 3, 2, .LCPI94_1@toc@ha
5765; PC64LE9-NEXT:    addi 3, 3, .LCPI94_1@toc@l
5766; PC64LE9-NEXT:    lxvx 1, 0, 3
5767; PC64LE9-NEXT:    addis 3, 2, .LCPI94_2@toc@ha
5768; PC64LE9-NEXT:    addi 3, 3, .LCPI94_2@toc@l
5769; PC64LE9-NEXT:    xvmindp 34, 1, 0
5770; PC64LE9-NEXT:    lxvx 0, 0, 3
5771; PC64LE9-NEXT:    addis 3, 2, .LCPI94_3@toc@ha
5772; PC64LE9-NEXT:    addi 3, 3, .LCPI94_3@toc@l
5773; PC64LE9-NEXT:    lxvx 1, 0, 3
5774; PC64LE9-NEXT:    xvmindp 35, 1, 0
5775; PC64LE9-NEXT:    blr
5776entry:
5777  %min = call <4 x double> @llvm.experimental.constrained.minnum.v4f64(
5778                                <4 x double> <double 44.0, double 45.0,
5779                                              double 46.0, double 47.0>,
5780                                <4 x double> <double 40.0, double 41.0,
5781                                              double 42.0, double 43.0>,
5782                                metadata !"fpexcept.strict") #1
5783  ret <4 x double> %min
5784}
5785
5786define <1 x i32> @constrained_vector_fptosi_v1i32_v1f32() #0 {
5787; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5788; PC64LE:       # %bb.0: # %entry
5789; PC64LE-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
5790; PC64LE-NEXT:    lfs 0, .LCPI95_0@toc@l(3)
5791; PC64LE-NEXT:    xscvdpsxws 0, 0
5792; PC64LE-NEXT:    mffprwz 3, 0
5793; PC64LE-NEXT:    blr
5794;
5795; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f32:
5796; PC64LE9:       # %bb.0: # %entry
5797; PC64LE9-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
5798; PC64LE9-NEXT:    lfs 0, .LCPI95_0@toc@l(3)
5799; PC64LE9-NEXT:    xscvdpsxws 0, 0
5800; PC64LE9-NEXT:    mffprwz 3, 0
5801; PC64LE9-NEXT:    blr
5802entry:
5803  %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(
5804                               <1 x float><float 42.0>,
5805                               metadata !"fpexcept.strict") #0
5806  ret <1 x i32> %result
5807}
5808
5809define <2 x i32> @constrained_vector_fptosi_v2i32_v2f32() #0 {
5810; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5811; PC64LE:       # %bb.0: # %entry
5812; PC64LE-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
5813; PC64LE-NEXT:    addis 4, 2, .LCPI96_1@toc@ha
5814; PC64LE-NEXT:    lfs 0, .LCPI96_0@toc@l(3)
5815; PC64LE-NEXT:    lfs 1, .LCPI96_1@toc@l(4)
5816; PC64LE-NEXT:    xscvdpsxws 0, 0
5817; PC64LE-NEXT:    xscvdpsxws 1, 1
5818; PC64LE-NEXT:    mffprwz 3, 0
5819; PC64LE-NEXT:    mffprwz 4, 1
5820; PC64LE-NEXT:    mtvsrwz 34, 3
5821; PC64LE-NEXT:    mtvsrwz 35, 4
5822; PC64LE-NEXT:    vmrghw 2, 3, 2
5823; PC64LE-NEXT:    blr
5824;
5825; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f32:
5826; PC64LE9:       # %bb.0: # %entry
5827; PC64LE9-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
5828; PC64LE9-NEXT:    lfs 0, .LCPI96_0@toc@l(3)
5829; PC64LE9-NEXT:    xscvdpsxws 0, 0
5830; PC64LE9-NEXT:    mffprwz 3, 0
5831; PC64LE9-NEXT:    mtvsrws 34, 3
5832; PC64LE9-NEXT:    addis 3, 2, .LCPI96_1@toc@ha
5833; PC64LE9-NEXT:    lfs 0, .LCPI96_1@toc@l(3)
5834; PC64LE9-NEXT:    xscvdpsxws 0, 0
5835; PC64LE9-NEXT:    mffprwz 3, 0
5836; PC64LE9-NEXT:    mtvsrws 35, 3
5837; PC64LE9-NEXT:    vmrghw 2, 3, 2
5838; PC64LE9-NEXT:    blr
5839entry:
5840  %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(
5841                                <2 x float><float 42.0, float 43.0>,
5842                                metadata !"fpexcept.strict") #0
5843  ret <2 x i32> %result
5844}
5845
5846define <3 x i32> @constrained_vector_fptosi_v3i32_v3f32() #0 {
5847; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5848; PC64LE:       # %bb.0: # %entry
5849; PC64LE-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
5850; PC64LE-NEXT:    addis 4, 2, .LCPI97_1@toc@ha
5851; PC64LE-NEXT:    lfs 0, .LCPI97_0@toc@l(3)
5852; PC64LE-NEXT:    lfs 1, .LCPI97_1@toc@l(4)
5853; PC64LE-NEXT:    addis 3, 2, .LCPI97_3@toc@ha
5854; PC64LE-NEXT:    lfs 2, .LCPI97_3@toc@l(3)
5855; PC64LE-NEXT:    xscvdpsxws 0, 0
5856; PC64LE-NEXT:    xscvdpsxws 1, 1
5857; PC64LE-NEXT:    xscvdpsxws 2, 2
5858; PC64LE-NEXT:    mffprwz 3, 0
5859; PC64LE-NEXT:    mffprwz 4, 1
5860; PC64LE-NEXT:    mtvsrwz 34, 3
5861; PC64LE-NEXT:    addis 3, 2, .LCPI97_2@toc@ha
5862; PC64LE-NEXT:    mtvsrwz 35, 4
5863; PC64LE-NEXT:    addi 3, 3, .LCPI97_2@toc@l
5864; PC64LE-NEXT:    mffprwz 4, 2
5865; PC64LE-NEXT:    vmrghw 2, 3, 2
5866; PC64LE-NEXT:    lvx 3, 0, 3
5867; PC64LE-NEXT:    mtvsrwz 36, 4
5868; PC64LE-NEXT:    vperm 2, 4, 2, 3
5869; PC64LE-NEXT:    blr
5870;
5871; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f32:
5872; PC64LE9:       # %bb.0: # %entry
5873; PC64LE9-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
5874; PC64LE9-NEXT:    lfs 0, .LCPI97_0@toc@l(3)
5875; PC64LE9-NEXT:    addis 3, 2, .LCPI97_1@toc@ha
5876; PC64LE9-NEXT:    lfs 1, .LCPI97_1@toc@l(3)
5877; PC64LE9-NEXT:    xscvdpsxws 0, 0
5878; PC64LE9-NEXT:    mffprwz 3, 0
5879; PC64LE9-NEXT:    xscvdpsxws 0, 1
5880; PC64LE9-NEXT:    mtvsrws 34, 3
5881; PC64LE9-NEXT:    mffprwz 3, 0
5882; PC64LE9-NEXT:    mtvsrws 35, 3
5883; PC64LE9-NEXT:    addis 3, 2, .LCPI97_2@toc@ha
5884; PC64LE9-NEXT:    addi 3, 3, .LCPI97_2@toc@l
5885; PC64LE9-NEXT:    vmrghw 2, 3, 2
5886; PC64LE9-NEXT:    lxvx 35, 0, 3
5887; PC64LE9-NEXT:    addis 3, 2, .LCPI97_3@toc@ha
5888; PC64LE9-NEXT:    lfs 0, .LCPI97_3@toc@l(3)
5889; PC64LE9-NEXT:    xscvdpsxws 0, 0
5890; PC64LE9-NEXT:    mffprwz 3, 0
5891; PC64LE9-NEXT:    mtvsrws 36, 3
5892; PC64LE9-NEXT:    vperm 2, 4, 2, 3
5893; PC64LE9-NEXT:    blr
5894entry:
5895  %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(
5896                                <3 x float><float 42.0, float 43.0,
5897                                            float 44.0>,
5898                                metadata !"fpexcept.strict") #0
5899  ret <3 x i32> %result
5900}
5901
5902define <4 x i32> @constrained_vector_fptosi_v4i32_v4f32() #0 {
5903; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5904; PC64LE:       # %bb.0: # %entry
5905; PC64LE-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
5906; PC64LE-NEXT:    addi 3, 3, .LCPI98_0@toc@l
5907; PC64LE-NEXT:    lvx 2, 0, 3
5908; PC64LE-NEXT:    xvcvspsxws 34, 34
5909; PC64LE-NEXT:    blr
5910;
5911; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f32:
5912; PC64LE9:       # %bb.0: # %entry
5913; PC64LE9-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
5914; PC64LE9-NEXT:    addi 3, 3, .LCPI98_0@toc@l
5915; PC64LE9-NEXT:    lxvx 0, 0, 3
5916; PC64LE9-NEXT:    xvcvspsxws 34, 0
5917; PC64LE9-NEXT:    blr
5918entry:
5919  %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(
5920                                <4 x float><float 42.0, float 43.0,
5921                                            float 44.0, float 45.0>,
5922                                metadata !"fpexcept.strict") #0
5923  ret <4 x i32> %result
5924}
5925
5926define <1 x i64> @constrained_vector_fptosi_v1i64_v1f32() #0 {
5927; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5928; PC64LE:       # %bb.0: # %entry
5929; PC64LE-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
5930; PC64LE-NEXT:    lfs 0, .LCPI99_0@toc@l(3)
5931; PC64LE-NEXT:    xscvdpsxds 0, 0
5932; PC64LE-NEXT:    mffprd 3, 0
5933; PC64LE-NEXT:    blr
5934;
5935; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f32:
5936; PC64LE9:       # %bb.0: # %entry
5937; PC64LE9-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
5938; PC64LE9-NEXT:    lfs 0, .LCPI99_0@toc@l(3)
5939; PC64LE9-NEXT:    xscvdpsxds 0, 0
5940; PC64LE9-NEXT:    mffprd 3, 0
5941; PC64LE9-NEXT:    blr
5942entry:
5943  %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(
5944                               <1 x float><float 42.0>,
5945                               metadata !"fpexcept.strict") #0
5946  ret <1 x i64> %result
5947}
5948
5949define <2 x i64> @constrained_vector_fptosi_v2i64_v2f32() #0 {
5950; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5951; PC64LE:       # %bb.0: # %entry
5952; PC64LE-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
5953; PC64LE-NEXT:    addis 4, 2, .LCPI100_1@toc@ha
5954; PC64LE-NEXT:    lfs 0, .LCPI100_0@toc@l(3)
5955; PC64LE-NEXT:    lfs 1, .LCPI100_1@toc@l(4)
5956; PC64LE-NEXT:    xscvdpsxds 0, 0
5957; PC64LE-NEXT:    xscvdpsxds 1, 1
5958; PC64LE-NEXT:    mffprd 3, 0
5959; PC64LE-NEXT:    mffprd 4, 1
5960; PC64LE-NEXT:    mtfprd 0, 3
5961; PC64LE-NEXT:    mtfprd 1, 4
5962; PC64LE-NEXT:    xxmrghd 34, 1, 0
5963; PC64LE-NEXT:    blr
5964;
5965; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f32:
5966; PC64LE9:       # %bb.0: # %entry
5967; PC64LE9-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
5968; PC64LE9-NEXT:    addis 4, 2, .LCPI100_1@toc@ha
5969; PC64LE9-NEXT:    lfs 0, .LCPI100_0@toc@l(3)
5970; PC64LE9-NEXT:    xscvdpsxds 0, 0
5971; PC64LE9-NEXT:    mffprd 3, 0
5972; PC64LE9-NEXT:    lfs 0, .LCPI100_1@toc@l(4)
5973; PC64LE9-NEXT:    xscvdpsxds 0, 0
5974; PC64LE9-NEXT:    mffprd 4, 0
5975; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
5976; PC64LE9-NEXT:    blr
5977entry:
5978  %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(
5979                                <2 x float><float 42.0, float 43.0>,
5980                                metadata !"fpexcept.strict") #0
5981  ret <2 x i64> %result
5982}
5983
5984define <3 x i64> @constrained_vector_fptosi_v3i64_v3f32() #0 {
5985; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f32:
5986; PC64LE:       # %bb.0: # %entry
5987; PC64LE-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
5988; PC64LE-NEXT:    addis 4, 2, .LCPI101_1@toc@ha
5989; PC64LE-NEXT:    addis 5, 2, .LCPI101_2@toc@ha
5990; PC64LE-NEXT:    lfs 0, .LCPI101_0@toc@l(3)
5991; PC64LE-NEXT:    lfs 1, .LCPI101_1@toc@l(4)
5992; PC64LE-NEXT:    lfs 2, .LCPI101_2@toc@l(5)
5993; PC64LE-NEXT:    xscvdpsxds 0, 0
5994; PC64LE-NEXT:    xscvdpsxds 1, 1
5995; PC64LE-NEXT:    xscvdpsxds 2, 2
5996; PC64LE-NEXT:    mffprd 3, 0
5997; PC64LE-NEXT:    mffprd 4, 1
5998; PC64LE-NEXT:    mffprd 5, 2
5999; PC64LE-NEXT:    blr
6000;
6001; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f32:
6002; PC64LE9:       # %bb.0: # %entry
6003; PC64LE9-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
6004; PC64LE9-NEXT:    addis 4, 2, .LCPI101_1@toc@ha
6005; PC64LE9-NEXT:    addis 5, 2, .LCPI101_2@toc@ha
6006; PC64LE9-NEXT:    lfs 0, .LCPI101_0@toc@l(3)
6007; PC64LE9-NEXT:    xscvdpsxds 0, 0
6008; PC64LE9-NEXT:    mffprd 3, 0
6009; PC64LE9-NEXT:    lfs 0, .LCPI101_1@toc@l(4)
6010; PC64LE9-NEXT:    xscvdpsxds 0, 0
6011; PC64LE9-NEXT:    mffprd 4, 0
6012; PC64LE9-NEXT:    lfs 0, .LCPI101_2@toc@l(5)
6013; PC64LE9-NEXT:    xscvdpsxds 0, 0
6014; PC64LE9-NEXT:    mffprd 5, 0
6015; PC64LE9-NEXT:    blr
6016entry:
6017  %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(
6018                                <3 x float><float 42.0, float 43.0,
6019                                            float 44.0>,
6020                                metadata !"fpexcept.strict") #0
6021  ret <3 x i64> %result
6022}
6023
6024define <4 x i64> @constrained_vector_fptosi_v4i64_v4f32() #0 {
6025; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f32:
6026; PC64LE:       # %bb.0: # %entry
6027; PC64LE-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
6028; PC64LE-NEXT:    addis 4, 2, .LCPI102_1@toc@ha
6029; PC64LE-NEXT:    lfs 0, .LCPI102_0@toc@l(3)
6030; PC64LE-NEXT:    addis 3, 2, .LCPI102_2@toc@ha
6031; PC64LE-NEXT:    lfs 1, .LCPI102_1@toc@l(4)
6032; PC64LE-NEXT:    addis 4, 2, .LCPI102_3@toc@ha
6033; PC64LE-NEXT:    lfs 2, .LCPI102_2@toc@l(3)
6034; PC64LE-NEXT:    lfs 3, .LCPI102_3@toc@l(4)
6035; PC64LE-NEXT:    xscvdpsxds 0, 0
6036; PC64LE-NEXT:    xscvdpsxds 1, 1
6037; PC64LE-NEXT:    xscvdpsxds 2, 2
6038; PC64LE-NEXT:    xscvdpsxds 3, 3
6039; PC64LE-NEXT:    mffprd 3, 0
6040; PC64LE-NEXT:    mffprd 4, 1
6041; PC64LE-NEXT:    mtfprd 0, 3
6042; PC64LE-NEXT:    mffprd 3, 2
6043; PC64LE-NEXT:    mtfprd 1, 4
6044; PC64LE-NEXT:    mffprd 4, 3
6045; PC64LE-NEXT:    mtfprd 2, 3
6046; PC64LE-NEXT:    xxmrghd 34, 1, 0
6047; PC64LE-NEXT:    mtfprd 3, 4
6048; PC64LE-NEXT:    xxmrghd 35, 3, 2
6049; PC64LE-NEXT:    blr
6050;
6051; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f32:
6052; PC64LE9:       # %bb.0: # %entry
6053; PC64LE9-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
6054; PC64LE9-NEXT:    addis 4, 2, .LCPI102_1@toc@ha
6055; PC64LE9-NEXT:    lfs 0, .LCPI102_0@toc@l(3)
6056; PC64LE9-NEXT:    xscvdpsxds 0, 0
6057; PC64LE9-NEXT:    mffprd 3, 0
6058; PC64LE9-NEXT:    lfs 0, .LCPI102_1@toc@l(4)
6059; PC64LE9-NEXT:    xscvdpsxds 0, 0
6060; PC64LE9-NEXT:    mffprd 4, 0
6061; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
6062; PC64LE9-NEXT:    addis 3, 2, .LCPI102_2@toc@ha
6063; PC64LE9-NEXT:    addis 4, 2, .LCPI102_3@toc@ha
6064; PC64LE9-NEXT:    lfs 0, .LCPI102_2@toc@l(3)
6065; PC64LE9-NEXT:    xscvdpsxds 0, 0
6066; PC64LE9-NEXT:    mffprd 3, 0
6067; PC64LE9-NEXT:    lfs 0, .LCPI102_3@toc@l(4)
6068; PC64LE9-NEXT:    xscvdpsxds 0, 0
6069; PC64LE9-NEXT:    mffprd 4, 0
6070; PC64LE9-NEXT:    mtvsrdd 35, 4, 3
6071; PC64LE9-NEXT:    blr
6072entry:
6073  %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(
6074                                <4 x float><float 42.0, float 43.0,
6075                                            float 44.0, float 45.0>,
6076                                metadata !"fpexcept.strict") #0
6077  ret <4 x i64> %result
6078}
6079
6080define <1 x i32> @constrained_vector_fptosi_v1i32_v1f64() #0 {
6081; PC64LE-LABEL: constrained_vector_fptosi_v1i32_v1f64:
6082; PC64LE:       # %bb.0: # %entry
6083; PC64LE-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
6084; PC64LE-NEXT:    lfd 0, .LCPI103_0@toc@l(3)
6085; PC64LE-NEXT:    xscvdpsxws 0, 0
6086; PC64LE-NEXT:    mffprwz 3, 0
6087; PC64LE-NEXT:    blr
6088;
6089; PC64LE9-LABEL: constrained_vector_fptosi_v1i32_v1f64:
6090; PC64LE9:       # %bb.0: # %entry
6091; PC64LE9-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
6092; PC64LE9-NEXT:    lfd 0, .LCPI103_0@toc@l(3)
6093; PC64LE9-NEXT:    xscvdpsxws 0, 0
6094; PC64LE9-NEXT:    mffprwz 3, 0
6095; PC64LE9-NEXT:    blr
6096entry:
6097  %result = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(
6098                               <1 x double><double 42.1>,
6099                               metadata !"fpexcept.strict") #0
6100  ret <1 x i32> %result
6101}
6102
6103
6104define <2 x i32> @constrained_vector_fptosi_v2i32_v2f64() #0 {
6105; PC64LE-LABEL: constrained_vector_fptosi_v2i32_v2f64:
6106; PC64LE:       # %bb.0: # %entry
6107; PC64LE-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
6108; PC64LE-NEXT:    addis 4, 2, .LCPI104_1@toc@ha
6109; PC64LE-NEXT:    lfd 0, .LCPI104_0@toc@l(3)
6110; PC64LE-NEXT:    lfd 1, .LCPI104_1@toc@l(4)
6111; PC64LE-NEXT:    xscvdpsxws 0, 0
6112; PC64LE-NEXT:    xscvdpsxws 1, 1
6113; PC64LE-NEXT:    mffprwz 3, 0
6114; PC64LE-NEXT:    mffprwz 4, 1
6115; PC64LE-NEXT:    mtvsrwz 34, 3
6116; PC64LE-NEXT:    mtvsrwz 35, 4
6117; PC64LE-NEXT:    vmrghw 2, 3, 2
6118; PC64LE-NEXT:    blr
6119;
6120; PC64LE9-LABEL: constrained_vector_fptosi_v2i32_v2f64:
6121; PC64LE9:       # %bb.0: # %entry
6122; PC64LE9-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
6123; PC64LE9-NEXT:    lfd 0, .LCPI104_0@toc@l(3)
6124; PC64LE9-NEXT:    xscvdpsxws 0, 0
6125; PC64LE9-NEXT:    mffprwz 3, 0
6126; PC64LE9-NEXT:    mtvsrws 34, 3
6127; PC64LE9-NEXT:    addis 3, 2, .LCPI104_1@toc@ha
6128; PC64LE9-NEXT:    lfd 0, .LCPI104_1@toc@l(3)
6129; PC64LE9-NEXT:    xscvdpsxws 0, 0
6130; PC64LE9-NEXT:    mffprwz 3, 0
6131; PC64LE9-NEXT:    mtvsrws 35, 3
6132; PC64LE9-NEXT:    vmrghw 2, 3, 2
6133; PC64LE9-NEXT:    blr
6134entry:
6135  %result = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(
6136                                <2 x double><double 42.1, double 42.2>,
6137                                metadata !"fpexcept.strict") #0
6138  ret <2 x i32> %result
6139}
6140
6141define <3 x i32> @constrained_vector_fptosi_v3i32_v3f64() #0 {
6142; PC64LE-LABEL: constrained_vector_fptosi_v3i32_v3f64:
6143; PC64LE:       # %bb.0: # %entry
6144; PC64LE-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
6145; PC64LE-NEXT:    addis 4, 2, .LCPI105_1@toc@ha
6146; PC64LE-NEXT:    lfd 0, .LCPI105_0@toc@l(3)
6147; PC64LE-NEXT:    lfd 1, .LCPI105_1@toc@l(4)
6148; PC64LE-NEXT:    addis 3, 2, .LCPI105_3@toc@ha
6149; PC64LE-NEXT:    lfd 2, .LCPI105_3@toc@l(3)
6150; PC64LE-NEXT:    xscvdpsxws 0, 0
6151; PC64LE-NEXT:    xscvdpsxws 1, 1
6152; PC64LE-NEXT:    xscvdpsxws 2, 2
6153; PC64LE-NEXT:    mffprwz 3, 0
6154; PC64LE-NEXT:    mffprwz 4, 1
6155; PC64LE-NEXT:    mtvsrwz 34, 3
6156; PC64LE-NEXT:    addis 3, 2, .LCPI105_2@toc@ha
6157; PC64LE-NEXT:    mtvsrwz 35, 4
6158; PC64LE-NEXT:    addi 3, 3, .LCPI105_2@toc@l
6159; PC64LE-NEXT:    mffprwz 4, 2
6160; PC64LE-NEXT:    vmrghw 2, 3, 2
6161; PC64LE-NEXT:    lvx 3, 0, 3
6162; PC64LE-NEXT:    mtvsrwz 36, 4
6163; PC64LE-NEXT:    vperm 2, 4, 2, 3
6164; PC64LE-NEXT:    blr
6165;
6166; PC64LE9-LABEL: constrained_vector_fptosi_v3i32_v3f64:
6167; PC64LE9:       # %bb.0: # %entry
6168; PC64LE9-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
6169; PC64LE9-NEXT:    lfd 0, .LCPI105_0@toc@l(3)
6170; PC64LE9-NEXT:    xscvdpsxws 0, 0
6171; PC64LE9-NEXT:    mffprwz 3, 0
6172; PC64LE9-NEXT:    mtvsrws 34, 3
6173; PC64LE9-NEXT:    addis 3, 2, .LCPI105_1@toc@ha
6174; PC64LE9-NEXT:    lfd 0, .LCPI105_1@toc@l(3)
6175; PC64LE9-NEXT:    xscvdpsxws 0, 0
6176; PC64LE9-NEXT:    mffprwz 3, 0
6177; PC64LE9-NEXT:    mtvsrws 35, 3
6178; PC64LE9-NEXT:    addis 3, 2, .LCPI105_2@toc@ha
6179; PC64LE9-NEXT:    addi 3, 3, .LCPI105_2@toc@l
6180; PC64LE9-NEXT:    vmrghw 2, 3, 2
6181; PC64LE9-NEXT:    lxvx 35, 0, 3
6182; PC64LE9-NEXT:    addis 3, 2, .LCPI105_3@toc@ha
6183; PC64LE9-NEXT:    lfd 0, .LCPI105_3@toc@l(3)
6184; PC64LE9-NEXT:    xscvdpsxws 0, 0
6185; PC64LE9-NEXT:    mffprwz 3, 0
6186; PC64LE9-NEXT:    mtvsrws 36, 3
6187; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6188; PC64LE9-NEXT:    blr
6189entry:
6190  %result = call <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(
6191                                <3 x double><double 42.1, double 42.2,
6192                                             double 42.3>,
6193                                metadata !"fpexcept.strict") #0
6194  ret <3 x i32> %result
6195}
6196
6197define <4 x i32> @constrained_vector_fptosi_v4i32_v4f64() #0 {
6198; PC64LE-LABEL: constrained_vector_fptosi_v4i32_v4f64:
6199; PC64LE:       # %bb.0: # %entry
6200; PC64LE-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
6201; PC64LE-NEXT:    addis 4, 2, .LCPI106_1@toc@ha
6202; PC64LE-NEXT:    addis 5, 2, .LCPI106_2@toc@ha
6203; PC64LE-NEXT:    lfd 0, .LCPI106_0@toc@l(3)
6204; PC64LE-NEXT:    addis 3, 2, .LCPI106_3@toc@ha
6205; PC64LE-NEXT:    lfd 1, .LCPI106_1@toc@l(4)
6206; PC64LE-NEXT:    lfd 2, .LCPI106_2@toc@l(5)
6207; PC64LE-NEXT:    lfd 3, .LCPI106_3@toc@l(3)
6208; PC64LE-NEXT:    xscvdpsxws 0, 0
6209; PC64LE-NEXT:    xscvdpsxws 1, 1
6210; PC64LE-NEXT:    xscvdpsxws 2, 2
6211; PC64LE-NEXT:    xscvdpsxws 3, 3
6212; PC64LE-NEXT:    mffprwz 3, 0
6213; PC64LE-NEXT:    mffprwz 4, 1
6214; PC64LE-NEXT:    mffprwz 5, 2
6215; PC64LE-NEXT:    mffprwz 6, 3
6216; PC64LE-NEXT:    rldimi 4, 3, 32, 0
6217; PC64LE-NEXT:    mtfprd 0, 4
6218; PC64LE-NEXT:    rldimi 6, 5, 32, 0
6219; PC64LE-NEXT:    mtfprd 1, 6
6220; PC64LE-NEXT:    xxmrghd 34, 1, 0
6221; PC64LE-NEXT:    blr
6222;
6223; PC64LE9-LABEL: constrained_vector_fptosi_v4i32_v4f64:
6224; PC64LE9:       # %bb.0: # %entry
6225; PC64LE9-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
6226; PC64LE9-NEXT:    addis 4, 2, .LCPI106_1@toc@ha
6227; PC64LE9-NEXT:    addis 5, 2, .LCPI106_3@toc@ha
6228; PC64LE9-NEXT:    lfd 0, .LCPI106_0@toc@l(3)
6229; PC64LE9-NEXT:    xscvdpsxws 0, 0
6230; PC64LE9-NEXT:    mffprwz 3, 0
6231; PC64LE9-NEXT:    lfd 0, .LCPI106_1@toc@l(4)
6232; PC64LE9-NEXT:    xscvdpsxws 0, 0
6233; PC64LE9-NEXT:    mffprwz 4, 0
6234; PC64LE9-NEXT:    rldimi 4, 3, 32, 0
6235; PC64LE9-NEXT:    addis 3, 2, .LCPI106_2@toc@ha
6236; PC64LE9-NEXT:    lfd 0, .LCPI106_2@toc@l(3)
6237; PC64LE9-NEXT:    xscvdpsxws 0, 0
6238; PC64LE9-NEXT:    mffprwz 3, 0
6239; PC64LE9-NEXT:    lfd 0, .LCPI106_3@toc@l(5)
6240; PC64LE9-NEXT:    xscvdpsxws 0, 0
6241; PC64LE9-NEXT:    mffprwz 5, 0
6242; PC64LE9-NEXT:    rldimi 5, 3, 32, 0
6243; PC64LE9-NEXT:    mtvsrdd 34, 5, 4
6244; PC64LE9-NEXT:    blr
6245entry:
6246  %result = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(
6247                                <4 x double><double 42.1, double 42.2,
6248                                             double 42.3, double 42.4>,
6249                                metadata !"fpexcept.strict") #0
6250  ret <4 x i32> %result
6251}
6252
6253define <1 x i64> @constrained_vector_fptosi_v1i64_v1f64() #0 {
6254; PC64LE-LABEL: constrained_vector_fptosi_v1i64_v1f64:
6255; PC64LE:       # %bb.0: # %entry
6256; PC64LE-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
6257; PC64LE-NEXT:    lfd 0, .LCPI107_0@toc@l(3)
6258; PC64LE-NEXT:    xscvdpsxds 0, 0
6259; PC64LE-NEXT:    mffprd 3, 0
6260; PC64LE-NEXT:    blr
6261;
6262; PC64LE9-LABEL: constrained_vector_fptosi_v1i64_v1f64:
6263; PC64LE9:       # %bb.0: # %entry
6264; PC64LE9-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
6265; PC64LE9-NEXT:    lfd 0, .LCPI107_0@toc@l(3)
6266; PC64LE9-NEXT:    xscvdpsxds 0, 0
6267; PC64LE9-NEXT:    mffprd 3, 0
6268; PC64LE9-NEXT:    blr
6269entry:
6270  %result = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(
6271                               <1 x double><double 42.1>,
6272                               metadata !"fpexcept.strict") #0
6273  ret <1 x i64> %result
6274}
6275
6276define <2 x i64> @constrained_vector_fptosi_v2i64_v2f64() #0 {
6277; PC64LE-LABEL: constrained_vector_fptosi_v2i64_v2f64:
6278; PC64LE:       # %bb.0: # %entry
6279; PC64LE-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
6280; PC64LE-NEXT:    addi 3, 3, .LCPI108_0@toc@l
6281; PC64LE-NEXT:    lxvd2x 0, 0, 3
6282; PC64LE-NEXT:    xxswapd 0, 0
6283; PC64LE-NEXT:    xvcvdpsxds 34, 0
6284; PC64LE-NEXT:    blr
6285;
6286; PC64LE9-LABEL: constrained_vector_fptosi_v2i64_v2f64:
6287; PC64LE9:       # %bb.0: # %entry
6288; PC64LE9-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
6289; PC64LE9-NEXT:    addi 3, 3, .LCPI108_0@toc@l
6290; PC64LE9-NEXT:    lxvx 0, 0, 3
6291; PC64LE9-NEXT:    xvcvdpsxds 34, 0
6292; PC64LE9-NEXT:    blr
6293entry:
6294  %result = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(
6295                                <2 x double><double 42.1, double 42.2>,
6296                                metadata !"fpexcept.strict") #0
6297  ret <2 x i64> %result
6298}
6299
6300define <3 x i64> @constrained_vector_fptosi_v3i64_v3f64() #0 {
6301; PC64LE-LABEL: constrained_vector_fptosi_v3i64_v3f64:
6302; PC64LE:       # %bb.0: # %entry
6303; PC64LE-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
6304; PC64LE-NEXT:    addis 4, 2, .LCPI109_1@toc@ha
6305; PC64LE-NEXT:    addis 5, 2, .LCPI109_2@toc@ha
6306; PC64LE-NEXT:    lfd 0, .LCPI109_0@toc@l(3)
6307; PC64LE-NEXT:    lfd 1, .LCPI109_1@toc@l(4)
6308; PC64LE-NEXT:    lfd 2, .LCPI109_2@toc@l(5)
6309; PC64LE-NEXT:    xscvdpsxds 0, 0
6310; PC64LE-NEXT:    xscvdpsxds 1, 1
6311; PC64LE-NEXT:    xscvdpsxds 2, 2
6312; PC64LE-NEXT:    mffprd 3, 0
6313; PC64LE-NEXT:    mffprd 4, 1
6314; PC64LE-NEXT:    mffprd 5, 2
6315; PC64LE-NEXT:    blr
6316;
6317; PC64LE9-LABEL: constrained_vector_fptosi_v3i64_v3f64:
6318; PC64LE9:       # %bb.0: # %entry
6319; PC64LE9-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
6320; PC64LE9-NEXT:    addis 4, 2, .LCPI109_1@toc@ha
6321; PC64LE9-NEXT:    addis 5, 2, .LCPI109_2@toc@ha
6322; PC64LE9-NEXT:    lfd 0, .LCPI109_0@toc@l(3)
6323; PC64LE9-NEXT:    xscvdpsxds 0, 0
6324; PC64LE9-NEXT:    mffprd 3, 0
6325; PC64LE9-NEXT:    lfd 0, .LCPI109_1@toc@l(4)
6326; PC64LE9-NEXT:    xscvdpsxds 0, 0
6327; PC64LE9-NEXT:    mffprd 4, 0
6328; PC64LE9-NEXT:    lfd 0, .LCPI109_2@toc@l(5)
6329; PC64LE9-NEXT:    xscvdpsxds 0, 0
6330; PC64LE9-NEXT:    mffprd 5, 0
6331; PC64LE9-NEXT:    blr
6332entry:
6333  %result = call <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(
6334                                <3 x double><double 42.1, double 42.2,
6335                                             double 42.3>,
6336                                metadata !"fpexcept.strict") #0
6337  ret <3 x i64> %result
6338}
6339
6340define <4 x i64> @constrained_vector_fptosi_v4i64_v4f64() #0 {
6341; PC64LE-LABEL: constrained_vector_fptosi_v4i64_v4f64:
6342; PC64LE:       # %bb.0: # %entry
6343; PC64LE-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
6344; PC64LE-NEXT:    addis 4, 2, .LCPI110_1@toc@ha
6345; PC64LE-NEXT:    addi 3, 3, .LCPI110_0@toc@l
6346; PC64LE-NEXT:    lxvd2x 0, 0, 3
6347; PC64LE-NEXT:    addi 3, 4, .LCPI110_1@toc@l
6348; PC64LE-NEXT:    lxvd2x 1, 0, 3
6349; PC64LE-NEXT:    xxswapd 0, 0
6350; PC64LE-NEXT:    xxswapd 1, 1
6351; PC64LE-NEXT:    xvcvdpsxds 35, 0
6352; PC64LE-NEXT:    xvcvdpsxds 34, 1
6353; PC64LE-NEXT:    blr
6354;
6355; PC64LE9-LABEL: constrained_vector_fptosi_v4i64_v4f64:
6356; PC64LE9:       # %bb.0: # %entry
6357; PC64LE9-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
6358; PC64LE9-NEXT:    addi 3, 3, .LCPI110_0@toc@l
6359; PC64LE9-NEXT:    lxvx 0, 0, 3
6360; PC64LE9-NEXT:    addis 3, 2, .LCPI110_1@toc@ha
6361; PC64LE9-NEXT:    addi 3, 3, .LCPI110_1@toc@l
6362; PC64LE9-NEXT:    xvcvdpsxds 35, 0
6363; PC64LE9-NEXT:    lxvx 0, 0, 3
6364; PC64LE9-NEXT:    xvcvdpsxds 34, 0
6365; PC64LE9-NEXT:    blr
6366entry:
6367  %result = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(
6368                                <4 x double><double 42.1, double 42.2,
6369                                             double 42.3, double 42.4>,
6370                                metadata !"fpexcept.strict") #0
6371  ret <4 x i64> %result
6372}
6373
6374define <1 x i32> @constrained_vector_fptoui_v1i32_v1f32() #0 {
6375; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f32:
6376; PC64LE:       # %bb.0: # %entry
6377; PC64LE-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
6378; PC64LE-NEXT:    lfs 0, .LCPI111_0@toc@l(3)
6379; PC64LE-NEXT:    xscvdpuxws 0, 0
6380; PC64LE-NEXT:    mffprwz 3, 0
6381; PC64LE-NEXT:    blr
6382;
6383; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f32:
6384; PC64LE9:       # %bb.0: # %entry
6385; PC64LE9-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
6386; PC64LE9-NEXT:    lfs 0, .LCPI111_0@toc@l(3)
6387; PC64LE9-NEXT:    xscvdpuxws 0, 0
6388; PC64LE9-NEXT:    mffprwz 3, 0
6389; PC64LE9-NEXT:    blr
6390entry:
6391  %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(
6392                               <1 x float><float 42.0>,
6393                               metadata !"fpexcept.strict") #0
6394  ret <1 x i32> %result
6395}
6396
6397define <2 x i32> @constrained_vector_fptoui_v2i32_v2f32() #0 {
6398; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f32:
6399; PC64LE:       # %bb.0: # %entry
6400; PC64LE-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
6401; PC64LE-NEXT:    addis 4, 2, .LCPI112_1@toc@ha
6402; PC64LE-NEXT:    lfs 0, .LCPI112_0@toc@l(3)
6403; PC64LE-NEXT:    lfs 1, .LCPI112_1@toc@l(4)
6404; PC64LE-NEXT:    xscvdpuxws 0, 0
6405; PC64LE-NEXT:    xscvdpuxws 1, 1
6406; PC64LE-NEXT:    mffprwz 3, 0
6407; PC64LE-NEXT:    mffprwz 4, 1
6408; PC64LE-NEXT:    mtvsrwz 34, 3
6409; PC64LE-NEXT:    mtvsrwz 35, 4
6410; PC64LE-NEXT:    vmrghw 2, 3, 2
6411; PC64LE-NEXT:    blr
6412;
6413; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f32:
6414; PC64LE9:       # %bb.0: # %entry
6415; PC64LE9-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
6416; PC64LE9-NEXT:    lfs 0, .LCPI112_0@toc@l(3)
6417; PC64LE9-NEXT:    xscvdpuxws 0, 0
6418; PC64LE9-NEXT:    mffprwz 3, 0
6419; PC64LE9-NEXT:    mtvsrws 34, 3
6420; PC64LE9-NEXT:    addis 3, 2, .LCPI112_1@toc@ha
6421; PC64LE9-NEXT:    lfs 0, .LCPI112_1@toc@l(3)
6422; PC64LE9-NEXT:    xscvdpuxws 0, 0
6423; PC64LE9-NEXT:    mffprwz 3, 0
6424; PC64LE9-NEXT:    mtvsrws 35, 3
6425; PC64LE9-NEXT:    vmrghw 2, 3, 2
6426; PC64LE9-NEXT:    blr
6427entry:
6428  %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(
6429                                <2 x float><float 42.0, float 43.0>,
6430                                metadata !"fpexcept.strict") #0
6431  ret <2 x i32> %result
6432}
6433
6434define <3 x i32> @constrained_vector_fptoui_v3i32_v3f32() #0 {
6435; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6436; PC64LE:       # %bb.0: # %entry
6437; PC64LE-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
6438; PC64LE-NEXT:    addis 4, 2, .LCPI113_1@toc@ha
6439; PC64LE-NEXT:    lfs 0, .LCPI113_0@toc@l(3)
6440; PC64LE-NEXT:    lfs 1, .LCPI113_1@toc@l(4)
6441; PC64LE-NEXT:    addis 3, 2, .LCPI113_3@toc@ha
6442; PC64LE-NEXT:    lfs 2, .LCPI113_3@toc@l(3)
6443; PC64LE-NEXT:    xscvdpuxws 0, 0
6444; PC64LE-NEXT:    xscvdpuxws 1, 1
6445; PC64LE-NEXT:    xscvdpuxws 2, 2
6446; PC64LE-NEXT:    mffprwz 3, 0
6447; PC64LE-NEXT:    mffprwz 4, 1
6448; PC64LE-NEXT:    mtvsrwz 34, 3
6449; PC64LE-NEXT:    addis 3, 2, .LCPI113_2@toc@ha
6450; PC64LE-NEXT:    mtvsrwz 35, 4
6451; PC64LE-NEXT:    addi 3, 3, .LCPI113_2@toc@l
6452; PC64LE-NEXT:    mffprwz 4, 2
6453; PC64LE-NEXT:    vmrghw 2, 3, 2
6454; PC64LE-NEXT:    lvx 3, 0, 3
6455; PC64LE-NEXT:    mtvsrwz 36, 4
6456; PC64LE-NEXT:    vperm 2, 4, 2, 3
6457; PC64LE-NEXT:    blr
6458;
6459; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f32:
6460; PC64LE9:       # %bb.0: # %entry
6461; PC64LE9-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
6462; PC64LE9-NEXT:    lfs 0, .LCPI113_0@toc@l(3)
6463; PC64LE9-NEXT:    addis 3, 2, .LCPI113_1@toc@ha
6464; PC64LE9-NEXT:    lfs 1, .LCPI113_1@toc@l(3)
6465; PC64LE9-NEXT:    xscvdpuxws 0, 0
6466; PC64LE9-NEXT:    mffprwz 3, 0
6467; PC64LE9-NEXT:    xscvdpuxws 0, 1
6468; PC64LE9-NEXT:    mtvsrws 34, 3
6469; PC64LE9-NEXT:    mffprwz 3, 0
6470; PC64LE9-NEXT:    mtvsrws 35, 3
6471; PC64LE9-NEXT:    addis 3, 2, .LCPI113_2@toc@ha
6472; PC64LE9-NEXT:    addi 3, 3, .LCPI113_2@toc@l
6473; PC64LE9-NEXT:    vmrghw 2, 3, 2
6474; PC64LE9-NEXT:    lxvx 35, 0, 3
6475; PC64LE9-NEXT:    addis 3, 2, .LCPI113_3@toc@ha
6476; PC64LE9-NEXT:    lfs 0, .LCPI113_3@toc@l(3)
6477; PC64LE9-NEXT:    xscvdpuxws 0, 0
6478; PC64LE9-NEXT:    mffprwz 3, 0
6479; PC64LE9-NEXT:    mtvsrws 36, 3
6480; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6481; PC64LE9-NEXT:    blr
6482entry:
6483  %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(
6484                                <3 x float><float 42.0, float 43.0,
6485                                            float 44.0>,
6486                                metadata !"fpexcept.strict") #0
6487  ret <3 x i32> %result
6488}
6489
6490define <4 x i32> @constrained_vector_fptoui_v4i32_v4f32() #0 {
6491; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6492; PC64LE:       # %bb.0: # %entry
6493; PC64LE-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
6494; PC64LE-NEXT:    addi 3, 3, .LCPI114_0@toc@l
6495; PC64LE-NEXT:    lvx 2, 0, 3
6496; PC64LE-NEXT:    xvcvspuxws 34, 34
6497; PC64LE-NEXT:    blr
6498;
6499; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f32:
6500; PC64LE9:       # %bb.0: # %entry
6501; PC64LE9-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
6502; PC64LE9-NEXT:    addi 3, 3, .LCPI114_0@toc@l
6503; PC64LE9-NEXT:    lxvx 0, 0, 3
6504; PC64LE9-NEXT:    xvcvspuxws 34, 0
6505; PC64LE9-NEXT:    blr
6506entry:
6507  %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(
6508                                <4 x float><float 42.0, float 43.0,
6509                                            float 44.0, float 45.0>,
6510                                metadata !"fpexcept.strict") #0
6511  ret <4 x i32> %result
6512}
6513
6514define <1 x i64> @constrained_vector_fptoui_v1i64_v1f32() #0 {
6515; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6516; PC64LE:       # %bb.0: # %entry
6517; PC64LE-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
6518; PC64LE-NEXT:    lfs 0, .LCPI115_0@toc@l(3)
6519; PC64LE-NEXT:    xscvdpuxds 0, 0
6520; PC64LE-NEXT:    mffprd 3, 0
6521; PC64LE-NEXT:    blr
6522;
6523; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f32:
6524; PC64LE9:       # %bb.0: # %entry
6525; PC64LE9-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
6526; PC64LE9-NEXT:    lfs 0, .LCPI115_0@toc@l(3)
6527; PC64LE9-NEXT:    xscvdpuxds 0, 0
6528; PC64LE9-NEXT:    mffprd 3, 0
6529; PC64LE9-NEXT:    blr
6530entry:
6531  %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(
6532                               <1 x float><float 42.0>,
6533                               metadata !"fpexcept.strict") #0
6534  ret <1 x i64> %result
6535}
6536
6537define <2 x i64> @constrained_vector_fptoui_v2i64_v2f32() #0 {
6538; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6539; PC64LE:       # %bb.0: # %entry
6540; PC64LE-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
6541; PC64LE-NEXT:    addis 4, 2, .LCPI116_1@toc@ha
6542; PC64LE-NEXT:    lfs 0, .LCPI116_0@toc@l(3)
6543; PC64LE-NEXT:    lfs 1, .LCPI116_1@toc@l(4)
6544; PC64LE-NEXT:    xscvdpuxds 0, 0
6545; PC64LE-NEXT:    xscvdpuxds 1, 1
6546; PC64LE-NEXT:    mffprd 3, 0
6547; PC64LE-NEXT:    mffprd 4, 1
6548; PC64LE-NEXT:    mtfprd 0, 3
6549; PC64LE-NEXT:    mtfprd 1, 4
6550; PC64LE-NEXT:    xxmrghd 34, 1, 0
6551; PC64LE-NEXT:    blr
6552;
6553; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f32:
6554; PC64LE9:       # %bb.0: # %entry
6555; PC64LE9-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
6556; PC64LE9-NEXT:    addis 4, 2, .LCPI116_1@toc@ha
6557; PC64LE9-NEXT:    lfs 0, .LCPI116_0@toc@l(3)
6558; PC64LE9-NEXT:    xscvdpuxds 0, 0
6559; PC64LE9-NEXT:    mffprd 3, 0
6560; PC64LE9-NEXT:    lfs 0, .LCPI116_1@toc@l(4)
6561; PC64LE9-NEXT:    xscvdpuxds 0, 0
6562; PC64LE9-NEXT:    mffprd 4, 0
6563; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
6564; PC64LE9-NEXT:    blr
6565entry:
6566  %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(
6567                                <2 x float><float 42.0, float 43.0>,
6568                                metadata !"fpexcept.strict") #0
6569  ret <2 x i64> %result
6570}
6571
6572define <3 x i64> @constrained_vector_fptoui_v3i64_v3f32() #0 {
6573; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6574; PC64LE:       # %bb.0: # %entry
6575; PC64LE-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
6576; PC64LE-NEXT:    addis 4, 2, .LCPI117_1@toc@ha
6577; PC64LE-NEXT:    addis 5, 2, .LCPI117_2@toc@ha
6578; PC64LE-NEXT:    lfs 0, .LCPI117_0@toc@l(3)
6579; PC64LE-NEXT:    lfs 1, .LCPI117_1@toc@l(4)
6580; PC64LE-NEXT:    lfs 2, .LCPI117_2@toc@l(5)
6581; PC64LE-NEXT:    xscvdpuxds 0, 0
6582; PC64LE-NEXT:    xscvdpuxds 1, 1
6583; PC64LE-NEXT:    xscvdpuxds 2, 2
6584; PC64LE-NEXT:    mffprd 3, 0
6585; PC64LE-NEXT:    mffprd 4, 1
6586; PC64LE-NEXT:    mffprd 5, 2
6587; PC64LE-NEXT:    blr
6588;
6589; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f32:
6590; PC64LE9:       # %bb.0: # %entry
6591; PC64LE9-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
6592; PC64LE9-NEXT:    addis 4, 2, .LCPI117_1@toc@ha
6593; PC64LE9-NEXT:    addis 5, 2, .LCPI117_2@toc@ha
6594; PC64LE9-NEXT:    lfs 0, .LCPI117_0@toc@l(3)
6595; PC64LE9-NEXT:    xscvdpuxds 0, 0
6596; PC64LE9-NEXT:    mffprd 3, 0
6597; PC64LE9-NEXT:    lfs 0, .LCPI117_1@toc@l(4)
6598; PC64LE9-NEXT:    xscvdpuxds 0, 0
6599; PC64LE9-NEXT:    mffprd 4, 0
6600; PC64LE9-NEXT:    lfs 0, .LCPI117_2@toc@l(5)
6601; PC64LE9-NEXT:    xscvdpuxds 0, 0
6602; PC64LE9-NEXT:    mffprd 5, 0
6603; PC64LE9-NEXT:    blr
6604entry:
6605  %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(
6606                                <3 x float><float 42.0, float 43.0,
6607                                            float 44.0>,
6608                                metadata !"fpexcept.strict") #0
6609  ret <3 x i64> %result
6610}
6611
6612define <4 x i64> @constrained_vector_fptoui_v4i64_v4f32() #0 {
6613; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6614; PC64LE:       # %bb.0: # %entry
6615; PC64LE-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
6616; PC64LE-NEXT:    addis 4, 2, .LCPI118_1@toc@ha
6617; PC64LE-NEXT:    lfs 0, .LCPI118_0@toc@l(3)
6618; PC64LE-NEXT:    addis 3, 2, .LCPI118_2@toc@ha
6619; PC64LE-NEXT:    lfs 1, .LCPI118_1@toc@l(4)
6620; PC64LE-NEXT:    addis 4, 2, .LCPI118_3@toc@ha
6621; PC64LE-NEXT:    lfs 2, .LCPI118_2@toc@l(3)
6622; PC64LE-NEXT:    lfs 3, .LCPI118_3@toc@l(4)
6623; PC64LE-NEXT:    xscvdpuxds 0, 0
6624; PC64LE-NEXT:    xscvdpuxds 1, 1
6625; PC64LE-NEXT:    xscvdpuxds 2, 2
6626; PC64LE-NEXT:    xscvdpuxds 3, 3
6627; PC64LE-NEXT:    mffprd 3, 0
6628; PC64LE-NEXT:    mffprd 4, 1
6629; PC64LE-NEXT:    mtfprd 0, 3
6630; PC64LE-NEXT:    mffprd 3, 2
6631; PC64LE-NEXT:    mtfprd 1, 4
6632; PC64LE-NEXT:    mffprd 4, 3
6633; PC64LE-NEXT:    mtfprd 2, 3
6634; PC64LE-NEXT:    xxmrghd 34, 1, 0
6635; PC64LE-NEXT:    mtfprd 3, 4
6636; PC64LE-NEXT:    xxmrghd 35, 3, 2
6637; PC64LE-NEXT:    blr
6638;
6639; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f32:
6640; PC64LE9:       # %bb.0: # %entry
6641; PC64LE9-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
6642; PC64LE9-NEXT:    addis 4, 2, .LCPI118_1@toc@ha
6643; PC64LE9-NEXT:    lfs 0, .LCPI118_0@toc@l(3)
6644; PC64LE9-NEXT:    xscvdpuxds 0, 0
6645; PC64LE9-NEXT:    mffprd 3, 0
6646; PC64LE9-NEXT:    lfs 0, .LCPI118_1@toc@l(4)
6647; PC64LE9-NEXT:    xscvdpuxds 0, 0
6648; PC64LE9-NEXT:    mffprd 4, 0
6649; PC64LE9-NEXT:    mtvsrdd 34, 4, 3
6650; PC64LE9-NEXT:    addis 3, 2, .LCPI118_2@toc@ha
6651; PC64LE9-NEXT:    addis 4, 2, .LCPI118_3@toc@ha
6652; PC64LE9-NEXT:    lfs 0, .LCPI118_2@toc@l(3)
6653; PC64LE9-NEXT:    xscvdpuxds 0, 0
6654; PC64LE9-NEXT:    mffprd 3, 0
6655; PC64LE9-NEXT:    lfs 0, .LCPI118_3@toc@l(4)
6656; PC64LE9-NEXT:    xscvdpuxds 0, 0
6657; PC64LE9-NEXT:    mffprd 4, 0
6658; PC64LE9-NEXT:    mtvsrdd 35, 4, 3
6659; PC64LE9-NEXT:    blr
6660entry:
6661  %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(
6662                                <4 x float><float 42.0, float 43.0,
6663                                            float 44.0, float 45.0>,
6664                                metadata !"fpexcept.strict") #0
6665  ret <4 x i64> %result
6666}
6667
6668define <1 x i32> @constrained_vector_fptoui_v1i32_v1f64() #0 {
6669; PC64LE-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6670; PC64LE:       # %bb.0: # %entry
6671; PC64LE-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
6672; PC64LE-NEXT:    lfd 0, .LCPI119_0@toc@l(3)
6673; PC64LE-NEXT:    xscvdpuxws 0, 0
6674; PC64LE-NEXT:    mffprwz 3, 0
6675; PC64LE-NEXT:    blr
6676;
6677; PC64LE9-LABEL: constrained_vector_fptoui_v1i32_v1f64:
6678; PC64LE9:       # %bb.0: # %entry
6679; PC64LE9-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
6680; PC64LE9-NEXT:    lfd 0, .LCPI119_0@toc@l(3)
6681; PC64LE9-NEXT:    xscvdpuxws 0, 0
6682; PC64LE9-NEXT:    mffprwz 3, 0
6683; PC64LE9-NEXT:    blr
6684entry:
6685  %result = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(
6686                               <1 x double><double 42.1>,
6687                               metadata !"fpexcept.strict") #0
6688  ret <1 x i32> %result
6689}
6690
6691define <2 x i32> @constrained_vector_fptoui_v2i32_v2f64() #0 {
6692; PC64LE-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6693; PC64LE:       # %bb.0: # %entry
6694; PC64LE-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
6695; PC64LE-NEXT:    addis 4, 2, .LCPI120_1@toc@ha
6696; PC64LE-NEXT:    lfd 0, .LCPI120_0@toc@l(3)
6697; PC64LE-NEXT:    lfd 1, .LCPI120_1@toc@l(4)
6698; PC64LE-NEXT:    xscvdpuxws 0, 0
6699; PC64LE-NEXT:    xscvdpuxws 1, 1
6700; PC64LE-NEXT:    mffprwz 3, 0
6701; PC64LE-NEXT:    mffprwz 4, 1
6702; PC64LE-NEXT:    mtvsrwz 34, 3
6703; PC64LE-NEXT:    mtvsrwz 35, 4
6704; PC64LE-NEXT:    vmrghw 2, 3, 2
6705; PC64LE-NEXT:    blr
6706;
6707; PC64LE9-LABEL: constrained_vector_fptoui_v2i32_v2f64:
6708; PC64LE9:       # %bb.0: # %entry
6709; PC64LE9-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
6710; PC64LE9-NEXT:    lfd 0, .LCPI120_0@toc@l(3)
6711; PC64LE9-NEXT:    xscvdpuxws 0, 0
6712; PC64LE9-NEXT:    mffprwz 3, 0
6713; PC64LE9-NEXT:    mtvsrws 34, 3
6714; PC64LE9-NEXT:    addis 3, 2, .LCPI120_1@toc@ha
6715; PC64LE9-NEXT:    lfd 0, .LCPI120_1@toc@l(3)
6716; PC64LE9-NEXT:    xscvdpuxws 0, 0
6717; PC64LE9-NEXT:    mffprwz 3, 0
6718; PC64LE9-NEXT:    mtvsrws 35, 3
6719; PC64LE9-NEXT:    vmrghw 2, 3, 2
6720; PC64LE9-NEXT:    blr
6721entry:
6722  %result = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(
6723                                <2 x double><double 42.1, double 42.2>,
6724                                metadata !"fpexcept.strict") #0
6725  ret <2 x i32> %result
6726}
6727
6728define <3 x i32> @constrained_vector_fptoui_v3i32_v3f64() #0 {
6729; PC64LE-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6730; PC64LE:       # %bb.0: # %entry
6731; PC64LE-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
6732; PC64LE-NEXT:    addis 4, 2, .LCPI121_1@toc@ha
6733; PC64LE-NEXT:    lfd 0, .LCPI121_0@toc@l(3)
6734; PC64LE-NEXT:    lfd 1, .LCPI121_1@toc@l(4)
6735; PC64LE-NEXT:    addis 3, 2, .LCPI121_3@toc@ha
6736; PC64LE-NEXT:    lfd 2, .LCPI121_3@toc@l(3)
6737; PC64LE-NEXT:    xscvdpuxws 0, 0
6738; PC64LE-NEXT:    xscvdpuxws 1, 1
6739; PC64LE-NEXT:    xscvdpuxws 2, 2
6740; PC64LE-NEXT:    mffprwz 3, 0
6741; PC64LE-NEXT:    mffprwz 4, 1
6742; PC64LE-NEXT:    mtvsrwz 34, 3
6743; PC64LE-NEXT:    addis 3, 2, .LCPI121_2@toc@ha
6744; PC64LE-NEXT:    mtvsrwz 35, 4
6745; PC64LE-NEXT:    addi 3, 3, .LCPI121_2@toc@l
6746; PC64LE-NEXT:    mffprwz 4, 2
6747; PC64LE-NEXT:    vmrghw 2, 3, 2
6748; PC64LE-NEXT:    lvx 3, 0, 3
6749; PC64LE-NEXT:    mtvsrwz 36, 4
6750; PC64LE-NEXT:    vperm 2, 4, 2, 3
6751; PC64LE-NEXT:    blr
6752;
6753; PC64LE9-LABEL: constrained_vector_fptoui_v3i32_v3f64:
6754; PC64LE9:       # %bb.0: # %entry
6755; PC64LE9-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
6756; PC64LE9-NEXT:    lfd 0, .LCPI121_0@toc@l(3)
6757; PC64LE9-NEXT:    xscvdpuxws 0, 0
6758; PC64LE9-NEXT:    mffprwz 3, 0
6759; PC64LE9-NEXT:    mtvsrws 34, 3
6760; PC64LE9-NEXT:    addis 3, 2, .LCPI121_1@toc@ha
6761; PC64LE9-NEXT:    lfd 0, .LCPI121_1@toc@l(3)
6762; PC64LE9-NEXT:    xscvdpuxws 0, 0
6763; PC64LE9-NEXT:    mffprwz 3, 0
6764; PC64LE9-NEXT:    mtvsrws 35, 3
6765; PC64LE9-NEXT:    addis 3, 2, .LCPI121_2@toc@ha
6766; PC64LE9-NEXT:    addi 3, 3, .LCPI121_2@toc@l
6767; PC64LE9-NEXT:    vmrghw 2, 3, 2
6768; PC64LE9-NEXT:    lxvx 35, 0, 3
6769; PC64LE9-NEXT:    addis 3, 2, .LCPI121_3@toc@ha
6770; PC64LE9-NEXT:    lfd 0, .LCPI121_3@toc@l(3)
6771; PC64LE9-NEXT:    xscvdpuxws 0, 0
6772; PC64LE9-NEXT:    mffprwz 3, 0
6773; PC64LE9-NEXT:    mtvsrws 36, 3
6774; PC64LE9-NEXT:    vperm 2, 4, 2, 3
6775; PC64LE9-NEXT:    blr
6776entry:
6777  %result = call <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(
6778                                <3 x double><double 42.1, double 42.2,
6779                                             double 42.3>,
6780                                metadata !"fpexcept.strict") #0
6781  ret <3 x i32> %result
6782}
6783
6784define <4 x i32> @constrained_vector_fptoui_v4i32_v4f64() #0 {
6785; PC64LE-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6786; PC64LE:       # %bb.0: # %entry
6787; PC64LE-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
6788; PC64LE-NEXT:    addis 4, 2, .LCPI122_1@toc@ha
6789; PC64LE-NEXT:    addis 5, 2, .LCPI122_2@toc@ha
6790; PC64LE-NEXT:    lfd 0, .LCPI122_0@toc@l(3)
6791; PC64LE-NEXT:    addis 3, 2, .LCPI122_3@toc@ha
6792; PC64LE-NEXT:    lfd 1, .LCPI122_1@toc@l(4)
6793; PC64LE-NEXT:    lfd 2, .LCPI122_2@toc@l(5)
6794; PC64LE-NEXT:    lfd 3, .LCPI122_3@toc@l(3)
6795; PC64LE-NEXT:    xscvdpuxws 0, 0
6796; PC64LE-NEXT:    xscvdpuxws 1, 1
6797; PC64LE-NEXT:    xscvdpuxws 2, 2
6798; PC64LE-NEXT:    xscvdpuxws 3, 3
6799; PC64LE-NEXT:    mffprwz 3, 0
6800; PC64LE-NEXT:    mffprwz 4, 1
6801; PC64LE-NEXT:    mffprwz 5, 2
6802; PC64LE-NEXT:    mffprwz 6, 3
6803; PC64LE-NEXT:    rldimi 4, 3, 32, 0
6804; PC64LE-NEXT:    mtfprd 0, 4
6805; PC64LE-NEXT:    rldimi 6, 5, 32, 0
6806; PC64LE-NEXT:    mtfprd 1, 6
6807; PC64LE-NEXT:    xxmrghd 34, 1, 0
6808; PC64LE-NEXT:    blr
6809;
6810; PC64LE9-LABEL: constrained_vector_fptoui_v4i32_v4f64:
6811; PC64LE9:       # %bb.0: # %entry
6812; PC64LE9-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
6813; PC64LE9-NEXT:    addis 4, 2, .LCPI122_1@toc@ha
6814; PC64LE9-NEXT:    addis 5, 2, .LCPI122_3@toc@ha
6815; PC64LE9-NEXT:    lfd 0, .LCPI122_0@toc@l(3)
6816; PC64LE9-NEXT:    xscvdpuxws 0, 0
6817; PC64LE9-NEXT:    mffprwz 3, 0
6818; PC64LE9-NEXT:    lfd 0, .LCPI122_1@toc@l(4)
6819; PC64LE9-NEXT:    xscvdpuxws 0, 0
6820; PC64LE9-NEXT:    mffprwz 4, 0
6821; PC64LE9-NEXT:    rldimi 4, 3, 32, 0
6822; PC64LE9-NEXT:    addis 3, 2, .LCPI122_2@toc@ha
6823; PC64LE9-NEXT:    lfd 0, .LCPI122_2@toc@l(3)
6824; PC64LE9-NEXT:    xscvdpuxws 0, 0
6825; PC64LE9-NEXT:    mffprwz 3, 0
6826; PC64LE9-NEXT:    lfd 0, .LCPI122_3@toc@l(5)
6827; PC64LE9-NEXT:    xscvdpuxws 0, 0
6828; PC64LE9-NEXT:    mffprwz 5, 0
6829; PC64LE9-NEXT:    rldimi 5, 3, 32, 0
6830; PC64LE9-NEXT:    mtvsrdd 34, 5, 4
6831; PC64LE9-NEXT:    blr
6832entry:
6833  %result = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(
6834                                <4 x double><double 42.1, double 42.2,
6835                                             double 42.3, double 42.4>,
6836                                metadata !"fpexcept.strict") #0
6837  ret <4 x i32> %result
6838}
6839
6840define <1 x i64> @constrained_vector_fptoui_v1i64_v1f64() #0 {
6841; PC64LE-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6842; PC64LE:       # %bb.0: # %entry
6843; PC64LE-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
6844; PC64LE-NEXT:    lfd 0, .LCPI123_0@toc@l(3)
6845; PC64LE-NEXT:    xscvdpuxds 0, 0
6846; PC64LE-NEXT:    mffprd 3, 0
6847; PC64LE-NEXT:    blr
6848;
6849; PC64LE9-LABEL: constrained_vector_fptoui_v1i64_v1f64:
6850; PC64LE9:       # %bb.0: # %entry
6851; PC64LE9-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
6852; PC64LE9-NEXT:    lfd 0, .LCPI123_0@toc@l(3)
6853; PC64LE9-NEXT:    xscvdpuxds 0, 0
6854; PC64LE9-NEXT:    mffprd 3, 0
6855; PC64LE9-NEXT:    blr
6856entry:
6857  %result = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(
6858                               <1 x double><double 42.1>,
6859                               metadata !"fpexcept.strict") #0
6860  ret <1 x i64> %result
6861}
6862
6863define <2 x i64> @constrained_vector_fptoui_v2i64_v2f64() #0 {
6864; PC64LE-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6865; PC64LE:       # %bb.0: # %entry
6866; PC64LE-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
6867; PC64LE-NEXT:    addi 3, 3, .LCPI124_0@toc@l
6868; PC64LE-NEXT:    lxvd2x 0, 0, 3
6869; PC64LE-NEXT:    xxswapd 0, 0
6870; PC64LE-NEXT:    xvcvdpuxds 34, 0
6871; PC64LE-NEXT:    blr
6872;
6873; PC64LE9-LABEL: constrained_vector_fptoui_v2i64_v2f64:
6874; PC64LE9:       # %bb.0: # %entry
6875; PC64LE9-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
6876; PC64LE9-NEXT:    addi 3, 3, .LCPI124_0@toc@l
6877; PC64LE9-NEXT:    lxvx 0, 0, 3
6878; PC64LE9-NEXT:    xvcvdpuxds 34, 0
6879; PC64LE9-NEXT:    blr
6880entry:
6881  %result = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(
6882                                <2 x double><double 42.1, double 42.2>,
6883                                metadata !"fpexcept.strict") #0
6884  ret <2 x i64> %result
6885}
6886
6887define <3 x i64> @constrained_vector_fptoui_v3i64_v3f64() #0 {
6888; PC64LE-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6889; PC64LE:       # %bb.0: # %entry
6890; PC64LE-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
6891; PC64LE-NEXT:    addis 4, 2, .LCPI125_1@toc@ha
6892; PC64LE-NEXT:    addis 5, 2, .LCPI125_2@toc@ha
6893; PC64LE-NEXT:    lfd 0, .LCPI125_0@toc@l(3)
6894; PC64LE-NEXT:    lfd 1, .LCPI125_1@toc@l(4)
6895; PC64LE-NEXT:    lfd 2, .LCPI125_2@toc@l(5)
6896; PC64LE-NEXT:    xscvdpuxds 0, 0
6897; PC64LE-NEXT:    xscvdpuxds 1, 1
6898; PC64LE-NEXT:    xscvdpuxds 2, 2
6899; PC64LE-NEXT:    mffprd 3, 0
6900; PC64LE-NEXT:    mffprd 4, 1
6901; PC64LE-NEXT:    mffprd 5, 2
6902; PC64LE-NEXT:    blr
6903;
6904; PC64LE9-LABEL: constrained_vector_fptoui_v3i64_v3f64:
6905; PC64LE9:       # %bb.0: # %entry
6906; PC64LE9-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
6907; PC64LE9-NEXT:    addis 4, 2, .LCPI125_1@toc@ha
6908; PC64LE9-NEXT:    addis 5, 2, .LCPI125_2@toc@ha
6909; PC64LE9-NEXT:    lfd 0, .LCPI125_0@toc@l(3)
6910; PC64LE9-NEXT:    xscvdpuxds 0, 0
6911; PC64LE9-NEXT:    mffprd 3, 0
6912; PC64LE9-NEXT:    lfd 0, .LCPI125_1@toc@l(4)
6913; PC64LE9-NEXT:    xscvdpuxds 0, 0
6914; PC64LE9-NEXT:    mffprd 4, 0
6915; PC64LE9-NEXT:    lfd 0, .LCPI125_2@toc@l(5)
6916; PC64LE9-NEXT:    xscvdpuxds 0, 0
6917; PC64LE9-NEXT:    mffprd 5, 0
6918; PC64LE9-NEXT:    blr
6919entry:
6920  %result = call <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(
6921                                <3 x double><double 42.1, double 42.2,
6922                                             double 42.3>,
6923                                metadata !"fpexcept.strict") #0
6924  ret <3 x i64> %result
6925}
6926
6927define <4 x i64> @constrained_vector_fptoui_v4i64_v4f64() #0 {
6928; PC64LE-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6929; PC64LE:       # %bb.0: # %entry
6930; PC64LE-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
6931; PC64LE-NEXT:    addis 4, 2, .LCPI126_1@toc@ha
6932; PC64LE-NEXT:    addi 3, 3, .LCPI126_0@toc@l
6933; PC64LE-NEXT:    lxvd2x 0, 0, 3
6934; PC64LE-NEXT:    addi 3, 4, .LCPI126_1@toc@l
6935; PC64LE-NEXT:    lxvd2x 1, 0, 3
6936; PC64LE-NEXT:    xxswapd 0, 0
6937; PC64LE-NEXT:    xxswapd 1, 1
6938; PC64LE-NEXT:    xvcvdpuxds 35, 0
6939; PC64LE-NEXT:    xvcvdpuxds 34, 1
6940; PC64LE-NEXT:    blr
6941;
6942; PC64LE9-LABEL: constrained_vector_fptoui_v4i64_v4f64:
6943; PC64LE9:       # %bb.0: # %entry
6944; PC64LE9-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
6945; PC64LE9-NEXT:    addi 3, 3, .LCPI126_0@toc@l
6946; PC64LE9-NEXT:    lxvx 0, 0, 3
6947; PC64LE9-NEXT:    addis 3, 2, .LCPI126_1@toc@ha
6948; PC64LE9-NEXT:    addi 3, 3, .LCPI126_1@toc@l
6949; PC64LE9-NEXT:    xvcvdpuxds 35, 0
6950; PC64LE9-NEXT:    lxvx 0, 0, 3
6951; PC64LE9-NEXT:    xvcvdpuxds 34, 0
6952; PC64LE9-NEXT:    blr
6953entry:
6954  %result = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(
6955                                <4 x double><double 42.1, double 42.2,
6956                                             double 42.3, double 42.4>,
6957                                metadata !"fpexcept.strict") #0
6958  ret <4 x i64> %result
6959}
6960
6961define <1 x float> @constrained_vector_fptrunc_v1f64() #0 {
6962; PC64LE-LABEL: constrained_vector_fptrunc_v1f64:
6963; PC64LE:       # %bb.0: # %entry
6964; PC64LE-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
6965; PC64LE-NEXT:    lfd 0, .LCPI127_0@toc@l(3)
6966; PC64LE-NEXT:    xsrsp 1, 0
6967; PC64LE-NEXT:    blr
6968;
6969; PC64LE9-LABEL: constrained_vector_fptrunc_v1f64:
6970; PC64LE9:       # %bb.0: # %entry
6971; PC64LE9-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
6972; PC64LE9-NEXT:    lfd 0, .LCPI127_0@toc@l(3)
6973; PC64LE9-NEXT:    xsrsp 1, 0
6974; PC64LE9-NEXT:    blr
6975entry:
6976  %result = call <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(
6977                                <1 x double><double 42.1>,
6978                                metadata !"round.dynamic",
6979                                metadata !"fpexcept.strict") #1
6980  ret <1 x float> %result
6981}
6982
6983define <2 x float> @constrained_vector_fptrunc_v2f64() #0 {
6984; PC64LE-LABEL: constrained_vector_fptrunc_v2f64:
6985; PC64LE:       # %bb.0: # %entry
6986; PC64LE-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
6987; PC64LE-NEXT:    addis 4, 2, .LCPI128_1@toc@ha
6988; PC64LE-NEXT:    lfd 0, .LCPI128_0@toc@l(3)
6989; PC64LE-NEXT:    lfd 1, .LCPI128_1@toc@l(4)
6990; PC64LE-NEXT:    xsrsp 0, 0
6991; PC64LE-NEXT:    xsrsp 1, 1
6992; PC64LE-NEXT:    xscvdpspn 0, 0
6993; PC64LE-NEXT:    xscvdpspn 1, 1
6994; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
6995; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
6996; PC64LE-NEXT:    vmrghw 2, 3, 2
6997; PC64LE-NEXT:    blr
6998;
6999; PC64LE9-LABEL: constrained_vector_fptrunc_v2f64:
7000; PC64LE9:       # %bb.0: # %entry
7001; PC64LE9-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
7002; PC64LE9-NEXT:    lfd 0, .LCPI128_0@toc@l(3)
7003; PC64LE9-NEXT:    addis 3, 2, .LCPI128_1@toc@ha
7004; PC64LE9-NEXT:    xsrsp 0, 0
7005; PC64LE9-NEXT:    xscvdpspn 0, 0
7006; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
7007; PC64LE9-NEXT:    lfd 0, .LCPI128_1@toc@l(3)
7008; PC64LE9-NEXT:    xsrsp 0, 0
7009; PC64LE9-NEXT:    xscvdpspn 0, 0
7010; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
7011; PC64LE9-NEXT:    vmrghw 2, 3, 2
7012; PC64LE9-NEXT:    blr
7013entry:
7014  %result = call <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(
7015                                <2 x double><double 42.1, double 42.2>,
7016                                metadata !"round.dynamic",
7017                                metadata !"fpexcept.strict") #1
7018  ret <2 x float> %result
7019}
7020
7021define <3 x float> @constrained_vector_fptrunc_v3f64() #0 {
7022; PC64LE-LABEL: constrained_vector_fptrunc_v3f64:
7023; PC64LE:       # %bb.0: # %entry
7024; PC64LE-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
7025; PC64LE-NEXT:    addis 4, 2, .LCPI129_1@toc@ha
7026; PC64LE-NEXT:    lfd 0, .LCPI129_0@toc@l(3)
7027; PC64LE-NEXT:    lfd 1, .LCPI129_1@toc@l(4)
7028; PC64LE-NEXT:    addis 3, 2, .LCPI129_3@toc@ha
7029; PC64LE-NEXT:    xsrsp 0, 0
7030; PC64LE-NEXT:    lfd 2, .LCPI129_3@toc@l(3)
7031; PC64LE-NEXT:    addis 3, 2, .LCPI129_2@toc@ha
7032; PC64LE-NEXT:    xsrsp 1, 1
7033; PC64LE-NEXT:    addi 3, 3, .LCPI129_2@toc@l
7034; PC64LE-NEXT:    xsrsp 2, 2
7035; PC64LE-NEXT:    xscvdpspn 0, 0
7036; PC64LE-NEXT:    xscvdpspn 1, 1
7037; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
7038; PC64LE-NEXT:    xscvdpspn 0, 2
7039; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
7040; PC64LE-NEXT:    vmrghw 2, 3, 2
7041; PC64LE-NEXT:    lvx 3, 0, 3
7042; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
7043; PC64LE-NEXT:    vperm 2, 4, 2, 3
7044; PC64LE-NEXT:    blr
7045;
7046; PC64LE9-LABEL: constrained_vector_fptrunc_v3f64:
7047; PC64LE9:       # %bb.0: # %entry
7048; PC64LE9-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
7049; PC64LE9-NEXT:    lfd 0, .LCPI129_0@toc@l(3)
7050; PC64LE9-NEXT:    addis 3, 2, .LCPI129_1@toc@ha
7051; PC64LE9-NEXT:    xsrsp 0, 0
7052; PC64LE9-NEXT:    xscvdpspn 0, 0
7053; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
7054; PC64LE9-NEXT:    lfd 0, .LCPI129_1@toc@l(3)
7055; PC64LE9-NEXT:    addis 3, 2, .LCPI129_2@toc@ha
7056; PC64LE9-NEXT:    addi 3, 3, .LCPI129_2@toc@l
7057; PC64LE9-NEXT:    xsrsp 0, 0
7058; PC64LE9-NEXT:    xscvdpspn 0, 0
7059; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
7060; PC64LE9-NEXT:    vmrghw 2, 3, 2
7061; PC64LE9-NEXT:    lxvx 35, 0, 3
7062; PC64LE9-NEXT:    addis 3, 2, .LCPI129_3@toc@ha
7063; PC64LE9-NEXT:    lfd 0, .LCPI129_3@toc@l(3)
7064; PC64LE9-NEXT:    xsrsp 0, 0
7065; PC64LE9-NEXT:    xscvdpspn 0, 0
7066; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
7067; PC64LE9-NEXT:    vperm 2, 4, 2, 3
7068; PC64LE9-NEXT:    blr
7069entry:
7070  %result = call <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(
7071                                <3 x double><double 42.1, double 42.2,
7072                                             double 42.3>,
7073                                metadata !"round.dynamic",
7074                                metadata !"fpexcept.strict") #1
7075  ret <3 x float> %result
7076}
7077
7078define <4 x float> @constrained_vector_fptrunc_v4f64() #0 {
7079; PC64LE-LABEL: constrained_vector_fptrunc_v4f64:
7080; PC64LE:       # %bb.0: # %entry
7081; PC64LE-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
7082; PC64LE-NEXT:    addis 4, 2, .LCPI130_1@toc@ha
7083; PC64LE-NEXT:    addis 5, 2, .LCPI130_2@toc@ha
7084; PC64LE-NEXT:    addis 6, 2, .LCPI130_3@toc@ha
7085; PC64LE-NEXT:    lfd 0, .LCPI130_0@toc@l(3)
7086; PC64LE-NEXT:    lfd 1, .LCPI130_1@toc@l(4)
7087; PC64LE-NEXT:    lfd 2, .LCPI130_2@toc@l(5)
7088; PC64LE-NEXT:    lfd 3, .LCPI130_3@toc@l(6)
7089; PC64LE-NEXT:    xxmrghd 0, 1, 0
7090; PC64LE-NEXT:    xxmrghd 1, 3, 2
7091; PC64LE-NEXT:    xvcvdpsp 34, 0
7092; PC64LE-NEXT:    xvcvdpsp 35, 1
7093; PC64LE-NEXT:    vmrgew 2, 3, 2
7094; PC64LE-NEXT:    blr
7095;
7096; PC64LE9-LABEL: constrained_vector_fptrunc_v4f64:
7097; PC64LE9:       # %bb.0: # %entry
7098; PC64LE9-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
7099; PC64LE9-NEXT:    lfd 0, .LCPI130_0@toc@l(3)
7100; PC64LE9-NEXT:    addis 3, 2, .LCPI130_1@toc@ha
7101; PC64LE9-NEXT:    lfd 1, .LCPI130_1@toc@l(3)
7102; PC64LE9-NEXT:    addis 3, 2, .LCPI130_2@toc@ha
7103; PC64LE9-NEXT:    xxmrghd 0, 1, 0
7104; PC64LE9-NEXT:    xvcvdpsp 34, 0
7105; PC64LE9-NEXT:    lfd 0, .LCPI130_2@toc@l(3)
7106; PC64LE9-NEXT:    addis 3, 2, .LCPI130_3@toc@ha
7107; PC64LE9-NEXT:    lfd 1, .LCPI130_3@toc@l(3)
7108; PC64LE9-NEXT:    xxmrghd 0, 1, 0
7109; PC64LE9-NEXT:    xvcvdpsp 35, 0
7110; PC64LE9-NEXT:    vmrgew 2, 3, 2
7111; PC64LE9-NEXT:    blr
7112entry:
7113  %result = call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(
7114                                <4 x double><double 42.1, double 42.2,
7115                                             double 42.3, double 42.4>,
7116                                metadata !"round.dynamic",
7117                                metadata !"fpexcept.strict") #1
7118  ret <4 x float> %result
7119}
7120
7121define <1 x double> @constrained_vector_fpext_v1f32() #0 {
7122; PC64LE-LABEL: constrained_vector_fpext_v1f32:
7123; PC64LE:       # %bb.0: # %entry
7124; PC64LE-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
7125; PC64LE-NEXT:    lfs 1, .LCPI131_0@toc@l(3)
7126; PC64LE-NEXT:    blr
7127;
7128; PC64LE9-LABEL: constrained_vector_fpext_v1f32:
7129; PC64LE9:       # %bb.0: # %entry
7130; PC64LE9-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
7131; PC64LE9-NEXT:    lfs 1, .LCPI131_0@toc@l(3)
7132; PC64LE9-NEXT:    blr
7133entry:
7134  %result = call <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(
7135                                <1 x float><float 42.0>,
7136                                metadata !"fpexcept.strict") #1
7137  ret <1 x double> %result
7138}
7139
7140define <2 x double> @constrained_vector_fpext_v2f32() #0 {
7141; PC64LE-LABEL: constrained_vector_fpext_v2f32:
7142; PC64LE:       # %bb.0: # %entry
7143; PC64LE-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
7144; PC64LE-NEXT:    addis 4, 2, .LCPI132_1@toc@ha
7145; PC64LE-NEXT:    lfs 0, .LCPI132_0@toc@l(3)
7146; PC64LE-NEXT:    lfs 1, .LCPI132_1@toc@l(4)
7147; PC64LE-NEXT:    xxmrghd 34, 1, 0
7148; PC64LE-NEXT:    blr
7149;
7150; PC64LE9-LABEL: constrained_vector_fpext_v2f32:
7151; PC64LE9:       # %bb.0: # %entry
7152; PC64LE9-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
7153; PC64LE9-NEXT:    lfs 0, .LCPI132_0@toc@l(3)
7154; PC64LE9-NEXT:    addis 3, 2, .LCPI132_1@toc@ha
7155; PC64LE9-NEXT:    lfs 1, .LCPI132_1@toc@l(3)
7156; PC64LE9-NEXT:    xxmrghd 34, 1, 0
7157; PC64LE9-NEXT:    blr
7158entry:
7159  %result = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(
7160                                <2 x float><float 42.0, float 43.0>,
7161                                metadata !"fpexcept.strict") #1
7162  ret <2 x double> %result
7163}
7164
7165define <3 x double> @constrained_vector_fpext_v3f32() #0 {
7166; PC64LE-LABEL: constrained_vector_fpext_v3f32:
7167; PC64LE:       # %bb.0: # %entry
7168; PC64LE-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
7169; PC64LE-NEXT:    addis 4, 2, .LCPI133_1@toc@ha
7170; PC64LE-NEXT:    addis 5, 2, .LCPI133_2@toc@ha
7171; PC64LE-NEXT:    lfs 3, .LCPI133_0@toc@l(3)
7172; PC64LE-NEXT:    lfs 2, .LCPI133_1@toc@l(4)
7173; PC64LE-NEXT:    lfs 1, .LCPI133_2@toc@l(5)
7174; PC64LE-NEXT:    blr
7175;
7176; PC64LE9-LABEL: constrained_vector_fpext_v3f32:
7177; PC64LE9:       # %bb.0: # %entry
7178; PC64LE9-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
7179; PC64LE9-NEXT:    lfs 3, .LCPI133_0@toc@l(3)
7180; PC64LE9-NEXT:    addis 3, 2, .LCPI133_1@toc@ha
7181; PC64LE9-NEXT:    lfs 2, .LCPI133_1@toc@l(3)
7182; PC64LE9-NEXT:    addis 3, 2, .LCPI133_2@toc@ha
7183; PC64LE9-NEXT:    lfs 1, .LCPI133_2@toc@l(3)
7184; PC64LE9-NEXT:    blr
7185entry:
7186  %result = call <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(
7187                                <3 x float><float 42.0, float 43.0,
7188                                            float 44.0>,
7189                                metadata !"fpexcept.strict") #1
7190  ret <3 x double> %result
7191}
7192
7193define <4 x double> @constrained_vector_fpext_v4f32() #0 {
7194; PC64LE-LABEL: constrained_vector_fpext_v4f32:
7195; PC64LE:       # %bb.0: # %entry
7196; PC64LE-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
7197; PC64LE-NEXT:    addis 4, 2, .LCPI134_1@toc@ha
7198; PC64LE-NEXT:    addis 5, 2, .LCPI134_2@toc@ha
7199; PC64LE-NEXT:    addis 6, 2, .LCPI134_3@toc@ha
7200; PC64LE-NEXT:    lfs 0, .LCPI134_0@toc@l(3)
7201; PC64LE-NEXT:    lfs 1, .LCPI134_1@toc@l(4)
7202; PC64LE-NEXT:    lfs 2, .LCPI134_2@toc@l(5)
7203; PC64LE-NEXT:    lfs 3, .LCPI134_3@toc@l(6)
7204; PC64LE-NEXT:    xxmrghd 34, 1, 0
7205; PC64LE-NEXT:    xxmrghd 35, 3, 2
7206; PC64LE-NEXT:    blr
7207;
7208; PC64LE9-LABEL: constrained_vector_fpext_v4f32:
7209; PC64LE9:       # %bb.0: # %entry
7210; PC64LE9-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
7211; PC64LE9-NEXT:    lfs 0, .LCPI134_0@toc@l(3)
7212; PC64LE9-NEXT:    addis 3, 2, .LCPI134_1@toc@ha
7213; PC64LE9-NEXT:    lfs 1, .LCPI134_1@toc@l(3)
7214; PC64LE9-NEXT:    addis 3, 2, .LCPI134_2@toc@ha
7215; PC64LE9-NEXT:    xxmrghd 34, 1, 0
7216; PC64LE9-NEXT:    lfs 0, .LCPI134_2@toc@l(3)
7217; PC64LE9-NEXT:    addis 3, 2, .LCPI134_3@toc@ha
7218; PC64LE9-NEXT:    lfs 1, .LCPI134_3@toc@l(3)
7219; PC64LE9-NEXT:    xxmrghd 35, 1, 0
7220; PC64LE9-NEXT:    blr
7221entry:
7222  %result = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(
7223                                <4 x float><float 42.0, float 43.0,
7224                                            float 44.0, float 45.0>,
7225                                metadata !"fpexcept.strict") #1
7226  ret <4 x double> %result
7227}
7228
7229define <1 x float> @constrained_vector_ceil_v1f32() #0 {
7230; PC64LE-LABEL: constrained_vector_ceil_v1f32:
7231; PC64LE:       # %bb.0: # %entry
7232; PC64LE-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
7233; PC64LE-NEXT:    lfs 0, .LCPI135_0@toc@l(3)
7234; PC64LE-NEXT:    addis 3, 2, .LCPI135_1@toc@ha
7235; PC64LE-NEXT:    lfs 1, .LCPI135_1@toc@l(3)
7236; PC64LE-NEXT:    xsrdpip 0, 0
7237; PC64LE-NEXT:    blr
7238;
7239; PC64LE9-LABEL: constrained_vector_ceil_v1f32:
7240; PC64LE9:       # %bb.0: # %entry
7241; PC64LE9-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
7242; PC64LE9-NEXT:    lfs 0, .LCPI135_0@toc@l(3)
7243; PC64LE9-NEXT:    addis 3, 2, .LCPI135_1@toc@ha
7244; PC64LE9-NEXT:    lfs 1, .LCPI135_1@toc@l(3)
7245; PC64LE9-NEXT:    xsrdpip 0, 0
7246; PC64LE9-NEXT:    blr
7247entry:
7248  %ceil = call <1 x float> @llvm.experimental.constrained.ceil.v1f32(
7249                               <1 x float> <float 1.5>,
7250                               metadata !"fpexcept.strict") #1
7251  ret <1 x float> %ceil
7252}
7253
7254define <2 x double> @constrained_vector_ceil_v2f64() #0 {
7255; PC64LE-LABEL: constrained_vector_ceil_v2f64:
7256; PC64LE:       # %bb.0: # %entry
7257; PC64LE-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
7258; PC64LE-NEXT:    addis 4, 2, .LCPI136_1@toc@ha
7259; PC64LE-NEXT:    addi 3, 3, .LCPI136_0@toc@l
7260; PC64LE-NEXT:    lxvd2x 0, 0, 3
7261; PC64LE-NEXT:    addi 3, 4, .LCPI136_1@toc@l
7262; PC64LE-NEXT:    lxvd2x 1, 0, 3
7263; PC64LE-NEXT:    xvrdpip 0, 0
7264; PC64LE-NEXT:    xxswapd 34, 1
7265; PC64LE-NEXT:    blr
7266;
7267; PC64LE9-LABEL: constrained_vector_ceil_v2f64:
7268; PC64LE9:       # %bb.0: # %entry
7269; PC64LE9-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
7270; PC64LE9-NEXT:    addi 3, 3, .LCPI136_0@toc@l
7271; PC64LE9-NEXT:    lxvx 0, 0, 3
7272; PC64LE9-NEXT:    addis 3, 2, .LCPI136_1@toc@ha
7273; PC64LE9-NEXT:    addi 3, 3, .LCPI136_1@toc@l
7274; PC64LE9-NEXT:    lxvx 34, 0, 3
7275; PC64LE9-NEXT:    xvrdpip 0, 0
7276; PC64LE9-NEXT:    blr
7277entry:
7278  %ceil = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
7279                                <2 x double> <double 1.1, double 1.9>,
7280                                metadata !"fpexcept.strict") #1
7281  ret <2 x double> %ceil
7282}
7283
7284define <3 x float> @constrained_vector_ceil_v3f32() #0 {
7285; PC64LE-LABEL: constrained_vector_ceil_v3f32:
7286; PC64LE:       # %bb.0: # %entry
7287; PC64LE-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
7288; PC64LE-NEXT:    addis 4, 2, .LCPI137_1@toc@ha
7289; PC64LE-NEXT:    lfs 0, .LCPI137_0@toc@l(3)
7290; PC64LE-NEXT:    addis 3, 2, .LCPI137_2@toc@ha
7291; PC64LE-NEXT:    lfs 1, .LCPI137_1@toc@l(4)
7292; PC64LE-NEXT:    lfs 2, .LCPI137_2@toc@l(3)
7293; PC64LE-NEXT:    addis 3, 2, .LCPI137_3@toc@ha
7294; PC64LE-NEXT:    addi 3, 3, .LCPI137_3@toc@l
7295; PC64LE-NEXT:    xsrdpip 0, 0
7296; PC64LE-NEXT:    lvx 2, 0, 3
7297; PC64LE-NEXT:    xsrdpip 0, 1
7298; PC64LE-NEXT:    xsrdpip 0, 2
7299; PC64LE-NEXT:    blr
7300;
7301; PC64LE9-LABEL: constrained_vector_ceil_v3f32:
7302; PC64LE9:       # %bb.0: # %entry
7303; PC64LE9-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
7304; PC64LE9-NEXT:    lfs 0, .LCPI137_0@toc@l(3)
7305; PC64LE9-NEXT:    addis 3, 2, .LCPI137_1@toc@ha
7306; PC64LE9-NEXT:    xsrdpip 0, 0
7307; PC64LE9-NEXT:    lfs 0, .LCPI137_1@toc@l(3)
7308; PC64LE9-NEXT:    addis 3, 2, .LCPI137_2@toc@ha
7309; PC64LE9-NEXT:    xsrdpip 0, 0
7310; PC64LE9-NEXT:    lfs 0, .LCPI137_2@toc@l(3)
7311; PC64LE9-NEXT:    addis 3, 2, .LCPI137_3@toc@ha
7312; PC64LE9-NEXT:    addi 3, 3, .LCPI137_3@toc@l
7313; PC64LE9-NEXT:    lxvx 34, 0, 3
7314; PC64LE9-NEXT:    xsrdpip 0, 0
7315; PC64LE9-NEXT:    blr
7316entry:
7317  %ceil = call <3 x float> @llvm.experimental.constrained.ceil.v3f32(
7318                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7319                              metadata !"fpexcept.strict") #1
7320  ret <3 x float> %ceil
7321}
7322
7323define <3 x double> @constrained_vector_ceil_v3f64() #0 {
7324; PC64LE-LABEL: constrained_vector_ceil_v3f64:
7325; PC64LE:       # %bb.0: # %entry
7326; PC64LE-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
7327; PC64LE-NEXT:    addis 4, 2, .LCPI138_1@toc@ha
7328; PC64LE-NEXT:    lfs 0, .LCPI138_0@toc@l(3)
7329; PC64LE-NEXT:    addi 3, 4, .LCPI138_1@toc@l
7330; PC64LE-NEXT:    lxvd2x 1, 0, 3
7331; PC64LE-NEXT:    addis 3, 2, .LCPI138_2@toc@ha
7332; PC64LE-NEXT:    xsrdpip 0, 0
7333; PC64LE-NEXT:    xvrdpip 0, 1
7334; PC64LE-NEXT:    lfs 1, .LCPI138_2@toc@l(3)
7335; PC64LE-NEXT:    fmr 2, 1
7336; PC64LE-NEXT:    fmr 3, 1
7337; PC64LE-NEXT:    blr
7338;
7339; PC64LE9-LABEL: constrained_vector_ceil_v3f64:
7340; PC64LE9:       # %bb.0: # %entry
7341; PC64LE9-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
7342; PC64LE9-NEXT:    lfs 0, .LCPI138_0@toc@l(3)
7343; PC64LE9-NEXT:    addis 3, 2, .LCPI138_1@toc@ha
7344; PC64LE9-NEXT:    addi 3, 3, .LCPI138_1@toc@l
7345; PC64LE9-NEXT:    xsrdpip 0, 0
7346; PC64LE9-NEXT:    lxvx 0, 0, 3
7347; PC64LE9-NEXT:    addis 3, 2, .LCPI138_2@toc@ha
7348; PC64LE9-NEXT:    lfs 1, .LCPI138_2@toc@l(3)
7349; PC64LE9-NEXT:    xvrdpip 0, 0
7350; PC64LE9-NEXT:    fmr 2, 1
7351; PC64LE9-NEXT:    fmr 3, 1
7352; PC64LE9-NEXT:    blr
7353entry:
7354  %ceil = call <3 x double> @llvm.experimental.constrained.ceil.v3f64(
7355                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7356                          metadata !"fpexcept.strict") #1
7357  ret <3 x double> %ceil
7358}
7359
7360define <1 x float> @constrained_vector_floor_v1f32() #0 {
7361; PC64LE-LABEL: constrained_vector_floor_v1f32:
7362; PC64LE:       # %bb.0: # %entry
7363; PC64LE-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
7364; PC64LE-NEXT:    lfs 0, .LCPI139_0@toc@l(3)
7365; PC64LE-NEXT:    addis 3, 2, .LCPI139_1@toc@ha
7366; PC64LE-NEXT:    lfs 1, .LCPI139_1@toc@l(3)
7367; PC64LE-NEXT:    xsrdpim 0, 0
7368; PC64LE-NEXT:    blr
7369;
7370; PC64LE9-LABEL: constrained_vector_floor_v1f32:
7371; PC64LE9:       # %bb.0: # %entry
7372; PC64LE9-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
7373; PC64LE9-NEXT:    lfs 0, .LCPI139_0@toc@l(3)
7374; PC64LE9-NEXT:    addis 3, 2, .LCPI139_1@toc@ha
7375; PC64LE9-NEXT:    lfs 1, .LCPI139_1@toc@l(3)
7376; PC64LE9-NEXT:    xsrdpim 0, 0
7377; PC64LE9-NEXT:    blr
7378entry:
7379  %floor = call <1 x float> @llvm.experimental.constrained.floor.v1f32(
7380                               <1 x float> <float 1.5>,
7381                               metadata !"fpexcept.strict") #1
7382  ret <1 x float> %floor
7383}
7384
7385
7386define <2 x double> @constrained_vector_floor_v2f64() #0 {
7387; PC64LE-LABEL: constrained_vector_floor_v2f64:
7388; PC64LE:       # %bb.0: # %entry
7389; PC64LE-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
7390; PC64LE-NEXT:    addis 4, 2, .LCPI140_1@toc@ha
7391; PC64LE-NEXT:    addi 3, 3, .LCPI140_0@toc@l
7392; PC64LE-NEXT:    lxvd2x 0, 0, 3
7393; PC64LE-NEXT:    addi 3, 4, .LCPI140_1@toc@l
7394; PC64LE-NEXT:    lxvd2x 1, 0, 3
7395; PC64LE-NEXT:    xvrdpim 0, 0
7396; PC64LE-NEXT:    xxswapd 34, 1
7397; PC64LE-NEXT:    blr
7398;
7399; PC64LE9-LABEL: constrained_vector_floor_v2f64:
7400; PC64LE9:       # %bb.0: # %entry
7401; PC64LE9-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
7402; PC64LE9-NEXT:    addi 3, 3, .LCPI140_0@toc@l
7403; PC64LE9-NEXT:    lxvx 0, 0, 3
7404; PC64LE9-NEXT:    addis 3, 2, .LCPI140_1@toc@ha
7405; PC64LE9-NEXT:    addi 3, 3, .LCPI140_1@toc@l
7406; PC64LE9-NEXT:    lxvx 34, 0, 3
7407; PC64LE9-NEXT:    xvrdpim 0, 0
7408; PC64LE9-NEXT:    blr
7409entry:
7410  %floor = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
7411                                <2 x double> <double 1.1, double 1.9>,
7412                                metadata !"fpexcept.strict") #1
7413  ret <2 x double> %floor
7414}
7415
7416define <3 x float> @constrained_vector_floor_v3f32() #0 {
7417; PC64LE-LABEL: constrained_vector_floor_v3f32:
7418; PC64LE:       # %bb.0: # %entry
7419; PC64LE-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
7420; PC64LE-NEXT:    addis 4, 2, .LCPI141_1@toc@ha
7421; PC64LE-NEXT:    lfs 0, .LCPI141_0@toc@l(3)
7422; PC64LE-NEXT:    addis 3, 2, .LCPI141_2@toc@ha
7423; PC64LE-NEXT:    lfs 1, .LCPI141_1@toc@l(4)
7424; PC64LE-NEXT:    lfs 2, .LCPI141_2@toc@l(3)
7425; PC64LE-NEXT:    addis 3, 2, .LCPI141_3@toc@ha
7426; PC64LE-NEXT:    addi 3, 3, .LCPI141_3@toc@l
7427; PC64LE-NEXT:    xsrdpim 0, 0
7428; PC64LE-NEXT:    lvx 2, 0, 3
7429; PC64LE-NEXT:    xsrdpim 0, 1
7430; PC64LE-NEXT:    xsrdpim 0, 2
7431; PC64LE-NEXT:    blr
7432;
7433; PC64LE9-LABEL: constrained_vector_floor_v3f32:
7434; PC64LE9:       # %bb.0: # %entry
7435; PC64LE9-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
7436; PC64LE9-NEXT:    lfs 0, .LCPI141_0@toc@l(3)
7437; PC64LE9-NEXT:    addis 3, 2, .LCPI141_1@toc@ha
7438; PC64LE9-NEXT:    xsrdpim 0, 0
7439; PC64LE9-NEXT:    lfs 0, .LCPI141_1@toc@l(3)
7440; PC64LE9-NEXT:    addis 3, 2, .LCPI141_2@toc@ha
7441; PC64LE9-NEXT:    xsrdpim 0, 0
7442; PC64LE9-NEXT:    lfs 0, .LCPI141_2@toc@l(3)
7443; PC64LE9-NEXT:    addis 3, 2, .LCPI141_3@toc@ha
7444; PC64LE9-NEXT:    addi 3, 3, .LCPI141_3@toc@l
7445; PC64LE9-NEXT:    lxvx 34, 0, 3
7446; PC64LE9-NEXT:    xsrdpim 0, 0
7447; PC64LE9-NEXT:    blr
7448entry:
7449  %floor = call <3 x float> @llvm.experimental.constrained.floor.v3f32(
7450                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7451                              metadata !"fpexcept.strict") #1
7452  ret <3 x float> %floor
7453}
7454
7455define <3 x double> @constrained_vector_floor_v3f64() #0 {
7456; PC64LE-LABEL: constrained_vector_floor_v3f64:
7457; PC64LE:       # %bb.0: # %entry
7458; PC64LE-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
7459; PC64LE-NEXT:    addis 4, 2, .LCPI142_1@toc@ha
7460; PC64LE-NEXT:    lfs 0, .LCPI142_0@toc@l(3)
7461; PC64LE-NEXT:    addi 3, 4, .LCPI142_1@toc@l
7462; PC64LE-NEXT:    lxvd2x 1, 0, 3
7463; PC64LE-NEXT:    addis 3, 2, .LCPI142_2@toc@ha
7464; PC64LE-NEXT:    xsrdpim 0, 0
7465; PC64LE-NEXT:    xvrdpim 0, 1
7466; PC64LE-NEXT:    lfs 1, .LCPI142_2@toc@l(3)
7467; PC64LE-NEXT:    fmr 2, 1
7468; PC64LE-NEXT:    fmr 3, 1
7469; PC64LE-NEXT:    blr
7470;
7471; PC64LE9-LABEL: constrained_vector_floor_v3f64:
7472; PC64LE9:       # %bb.0: # %entry
7473; PC64LE9-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
7474; PC64LE9-NEXT:    lfs 0, .LCPI142_0@toc@l(3)
7475; PC64LE9-NEXT:    addis 3, 2, .LCPI142_1@toc@ha
7476; PC64LE9-NEXT:    addi 3, 3, .LCPI142_1@toc@l
7477; PC64LE9-NEXT:    xsrdpim 0, 0
7478; PC64LE9-NEXT:    lxvx 0, 0, 3
7479; PC64LE9-NEXT:    addis 3, 2, .LCPI142_2@toc@ha
7480; PC64LE9-NEXT:    lfs 1, .LCPI142_2@toc@l(3)
7481; PC64LE9-NEXT:    xvrdpim 0, 0
7482; PC64LE9-NEXT:    fmr 2, 1
7483; PC64LE9-NEXT:    fmr 3, 1
7484; PC64LE9-NEXT:    blr
7485entry:
7486  %floor = call <3 x double> @llvm.experimental.constrained.floor.v3f64(
7487                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7488                          metadata !"fpexcept.strict") #1
7489  ret <3 x double> %floor
7490}
7491
7492define <1 x float> @constrained_vector_round_v1f32() #0 {
7493; PC64LE-LABEL: constrained_vector_round_v1f32:
7494; PC64LE:       # %bb.0: # %entry
7495; PC64LE-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
7496; PC64LE-NEXT:    lfs 0, .LCPI143_0@toc@l(3)
7497; PC64LE-NEXT:    addis 3, 2, .LCPI143_1@toc@ha
7498; PC64LE-NEXT:    lfs 1, .LCPI143_1@toc@l(3)
7499; PC64LE-NEXT:    xsrdpi 0, 0
7500; PC64LE-NEXT:    blr
7501;
7502; PC64LE9-LABEL: constrained_vector_round_v1f32:
7503; PC64LE9:       # %bb.0: # %entry
7504; PC64LE9-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
7505; PC64LE9-NEXT:    lfs 0, .LCPI143_0@toc@l(3)
7506; PC64LE9-NEXT:    addis 3, 2, .LCPI143_1@toc@ha
7507; PC64LE9-NEXT:    lfs 1, .LCPI143_1@toc@l(3)
7508; PC64LE9-NEXT:    xsrdpi 0, 0
7509; PC64LE9-NEXT:    blr
7510entry:
7511  %round = call <1 x float> @llvm.experimental.constrained.round.v1f32(
7512                               <1 x float> <float 1.5>,
7513                               metadata !"fpexcept.strict") #1
7514  ret <1 x float> %round
7515}
7516
7517define <2 x double> @constrained_vector_round_v2f64() #0 {
7518; PC64LE-LABEL: constrained_vector_round_v2f64:
7519; PC64LE:       # %bb.0: # %entry
7520; PC64LE-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
7521; PC64LE-NEXT:    addis 4, 2, .LCPI144_1@toc@ha
7522; PC64LE-NEXT:    addi 3, 3, .LCPI144_0@toc@l
7523; PC64LE-NEXT:    lxvd2x 0, 0, 3
7524; PC64LE-NEXT:    addi 3, 4, .LCPI144_1@toc@l
7525; PC64LE-NEXT:    lxvd2x 1, 0, 3
7526; PC64LE-NEXT:    xvrdpi 0, 0
7527; PC64LE-NEXT:    xxswapd 34, 1
7528; PC64LE-NEXT:    blr
7529;
7530; PC64LE9-LABEL: constrained_vector_round_v2f64:
7531; PC64LE9:       # %bb.0: # %entry
7532; PC64LE9-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
7533; PC64LE9-NEXT:    addi 3, 3, .LCPI144_0@toc@l
7534; PC64LE9-NEXT:    lxvx 0, 0, 3
7535; PC64LE9-NEXT:    addis 3, 2, .LCPI144_1@toc@ha
7536; PC64LE9-NEXT:    addi 3, 3, .LCPI144_1@toc@l
7537; PC64LE9-NEXT:    lxvx 34, 0, 3
7538; PC64LE9-NEXT:    xvrdpi 0, 0
7539; PC64LE9-NEXT:    blr
7540entry:
7541  %round = call <2 x double> @llvm.experimental.constrained.round.v2f64(
7542                                <2 x double> <double 1.1, double 1.9>,
7543                                metadata !"fpexcept.strict") #1
7544  ret <2 x double> %round
7545}
7546
7547define <3 x float> @constrained_vector_round_v3f32() #0 {
7548; PC64LE-LABEL: constrained_vector_round_v3f32:
7549; PC64LE:       # %bb.0: # %entry
7550; PC64LE-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
7551; PC64LE-NEXT:    addis 4, 2, .LCPI145_1@toc@ha
7552; PC64LE-NEXT:    lfs 0, .LCPI145_0@toc@l(3)
7553; PC64LE-NEXT:    addis 3, 2, .LCPI145_2@toc@ha
7554; PC64LE-NEXT:    lfs 1, .LCPI145_1@toc@l(4)
7555; PC64LE-NEXT:    lfs 2, .LCPI145_2@toc@l(3)
7556; PC64LE-NEXT:    addis 3, 2, .LCPI145_3@toc@ha
7557; PC64LE-NEXT:    addi 3, 3, .LCPI145_3@toc@l
7558; PC64LE-NEXT:    xsrdpi 0, 0
7559; PC64LE-NEXT:    lvx 2, 0, 3
7560; PC64LE-NEXT:    xsrdpi 0, 1
7561; PC64LE-NEXT:    xsrdpi 0, 2
7562; PC64LE-NEXT:    blr
7563;
7564; PC64LE9-LABEL: constrained_vector_round_v3f32:
7565; PC64LE9:       # %bb.0: # %entry
7566; PC64LE9-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
7567; PC64LE9-NEXT:    lfs 0, .LCPI145_0@toc@l(3)
7568; PC64LE9-NEXT:    addis 3, 2, .LCPI145_1@toc@ha
7569; PC64LE9-NEXT:    xsrdpi 0, 0
7570; PC64LE9-NEXT:    lfs 0, .LCPI145_1@toc@l(3)
7571; PC64LE9-NEXT:    addis 3, 2, .LCPI145_2@toc@ha
7572; PC64LE9-NEXT:    xsrdpi 0, 0
7573; PC64LE9-NEXT:    lfs 0, .LCPI145_2@toc@l(3)
7574; PC64LE9-NEXT:    addis 3, 2, .LCPI145_3@toc@ha
7575; PC64LE9-NEXT:    addi 3, 3, .LCPI145_3@toc@l
7576; PC64LE9-NEXT:    lxvx 34, 0, 3
7577; PC64LE9-NEXT:    xsrdpi 0, 0
7578; PC64LE9-NEXT:    blr
7579entry:
7580  %round = call <3 x float> @llvm.experimental.constrained.round.v3f32(
7581                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7582                              metadata !"fpexcept.strict") #1
7583  ret <3 x float> %round
7584}
7585
7586
7587define <3 x double> @constrained_vector_round_v3f64() #0 {
7588; PC64LE-LABEL: constrained_vector_round_v3f64:
7589; PC64LE:       # %bb.0: # %entry
7590; PC64LE-NEXT:    addis 4, 2, .LCPI146_1@toc@ha
7591; PC64LE-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
7592; PC64LE-NEXT:    addi 4, 4, .LCPI146_1@toc@l
7593; PC64LE-NEXT:    lxvd2x 1, 0, 4
7594; PC64LE-NEXT:    addis 4, 2, .LCPI146_3@toc@ha
7595; PC64LE-NEXT:    lfs 0, .LCPI146_0@toc@l(3)
7596; PC64LE-NEXT:    addis 3, 2, .LCPI146_2@toc@ha
7597; PC64LE-NEXT:    lfs 2, .LCPI146_3@toc@l(4)
7598; PC64LE-NEXT:    xsrdpi 0, 0
7599; PC64LE-NEXT:    xvrdpi 0, 1
7600; PC64LE-NEXT:    lfs 1, .LCPI146_2@toc@l(3)
7601; PC64LE-NEXT:    fmr 3, 2
7602; PC64LE-NEXT:    blr
7603;
7604; PC64LE9-LABEL: constrained_vector_round_v3f64:
7605; PC64LE9:       # %bb.0: # %entry
7606; PC64LE9-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
7607; PC64LE9-NEXT:    lfs 0, .LCPI146_0@toc@l(3)
7608; PC64LE9-NEXT:    addis 3, 2, .LCPI146_1@toc@ha
7609; PC64LE9-NEXT:    addi 3, 3, .LCPI146_1@toc@l
7610; PC64LE9-NEXT:    xsrdpi 0, 0
7611; PC64LE9-NEXT:    lxvx 0, 0, 3
7612; PC64LE9-NEXT:    addis 3, 2, .LCPI146_2@toc@ha
7613; PC64LE9-NEXT:    lfs 1, .LCPI146_2@toc@l(3)
7614; PC64LE9-NEXT:    addis 3, 2, .LCPI146_3@toc@ha
7615; PC64LE9-NEXT:    lfs 2, .LCPI146_3@toc@l(3)
7616; PC64LE9-NEXT:    xvrdpi 0, 0
7617; PC64LE9-NEXT:    fmr 3, 2
7618; PC64LE9-NEXT:    blr
7619entry:
7620  %round = call <3 x double> @llvm.experimental.constrained.round.v3f64(
7621                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7622                          metadata !"fpexcept.strict") #1
7623  ret <3 x double> %round
7624}
7625
7626define <1 x float> @constrained_vector_trunc_v1f32() #0 {
7627; PC64LE-LABEL: constrained_vector_trunc_v1f32:
7628; PC64LE:       # %bb.0: # %entry
7629; PC64LE-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
7630; PC64LE-NEXT:    lfs 0, .LCPI147_0@toc@l(3)
7631; PC64LE-NEXT:    addis 3, 2, .LCPI147_1@toc@ha
7632; PC64LE-NEXT:    lfs 1, .LCPI147_1@toc@l(3)
7633; PC64LE-NEXT:    xsrdpiz 0, 0
7634; PC64LE-NEXT:    blr
7635;
7636; PC64LE9-LABEL: constrained_vector_trunc_v1f32:
7637; PC64LE9:       # %bb.0: # %entry
7638; PC64LE9-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
7639; PC64LE9-NEXT:    lfs 0, .LCPI147_0@toc@l(3)
7640; PC64LE9-NEXT:    addis 3, 2, .LCPI147_1@toc@ha
7641; PC64LE9-NEXT:    lfs 1, .LCPI147_1@toc@l(3)
7642; PC64LE9-NEXT:    xsrdpiz 0, 0
7643; PC64LE9-NEXT:    blr
7644entry:
7645  %trunc = call <1 x float> @llvm.experimental.constrained.trunc.v1f32(
7646                               <1 x float> <float 1.5>,
7647                               metadata !"fpexcept.strict") #1
7648  ret <1 x float> %trunc
7649}
7650
7651define <2 x double> @constrained_vector_trunc_v2f64() #0 {
7652; PC64LE-LABEL: constrained_vector_trunc_v2f64:
7653; PC64LE:       # %bb.0: # %entry
7654; PC64LE-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
7655; PC64LE-NEXT:    addis 4, 2, .LCPI148_1@toc@ha
7656; PC64LE-NEXT:    addi 3, 3, .LCPI148_0@toc@l
7657; PC64LE-NEXT:    lxvd2x 0, 0, 3
7658; PC64LE-NEXT:    addi 3, 4, .LCPI148_1@toc@l
7659; PC64LE-NEXT:    lxvd2x 1, 0, 3
7660; PC64LE-NEXT:    xvrdpiz 0, 0
7661; PC64LE-NEXT:    xxswapd 34, 1
7662; PC64LE-NEXT:    blr
7663;
7664; PC64LE9-LABEL: constrained_vector_trunc_v2f64:
7665; PC64LE9:       # %bb.0: # %entry
7666; PC64LE9-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
7667; PC64LE9-NEXT:    addi 3, 3, .LCPI148_0@toc@l
7668; PC64LE9-NEXT:    lxvx 0, 0, 3
7669; PC64LE9-NEXT:    addis 3, 2, .LCPI148_1@toc@ha
7670; PC64LE9-NEXT:    addi 3, 3, .LCPI148_1@toc@l
7671; PC64LE9-NEXT:    lxvx 34, 0, 3
7672; PC64LE9-NEXT:    xvrdpiz 0, 0
7673; PC64LE9-NEXT:    blr
7674entry:
7675  %trunc = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
7676                                <2 x double> <double 1.1, double 1.9>,
7677                                metadata !"fpexcept.strict") #1
7678  ret <2 x double> %trunc
7679}
7680
7681define <3 x float> @constrained_vector_trunc_v3f32() #0 {
7682; PC64LE-LABEL: constrained_vector_trunc_v3f32:
7683; PC64LE:       # %bb.0: # %entry
7684; PC64LE-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
7685; PC64LE-NEXT:    addis 4, 2, .LCPI149_1@toc@ha
7686; PC64LE-NEXT:    lfs 0, .LCPI149_0@toc@l(3)
7687; PC64LE-NEXT:    addis 3, 2, .LCPI149_2@toc@ha
7688; PC64LE-NEXT:    lfs 1, .LCPI149_1@toc@l(4)
7689; PC64LE-NEXT:    lfs 2, .LCPI149_2@toc@l(3)
7690; PC64LE-NEXT:    addis 3, 2, .LCPI149_3@toc@ha
7691; PC64LE-NEXT:    addi 3, 3, .LCPI149_3@toc@l
7692; PC64LE-NEXT:    xsrdpiz 0, 0
7693; PC64LE-NEXT:    lvx 2, 0, 3
7694; PC64LE-NEXT:    xsrdpiz 0, 1
7695; PC64LE-NEXT:    xsrdpiz 0, 2
7696; PC64LE-NEXT:    blr
7697;
7698; PC64LE9-LABEL: constrained_vector_trunc_v3f32:
7699; PC64LE9:       # %bb.0: # %entry
7700; PC64LE9-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
7701; PC64LE9-NEXT:    lfs 0, .LCPI149_0@toc@l(3)
7702; PC64LE9-NEXT:    addis 3, 2, .LCPI149_1@toc@ha
7703; PC64LE9-NEXT:    xsrdpiz 0, 0
7704; PC64LE9-NEXT:    lfs 0, .LCPI149_1@toc@l(3)
7705; PC64LE9-NEXT:    addis 3, 2, .LCPI149_2@toc@ha
7706; PC64LE9-NEXT:    xsrdpiz 0, 0
7707; PC64LE9-NEXT:    lfs 0, .LCPI149_2@toc@l(3)
7708; PC64LE9-NEXT:    addis 3, 2, .LCPI149_3@toc@ha
7709; PC64LE9-NEXT:    addi 3, 3, .LCPI149_3@toc@l
7710; PC64LE9-NEXT:    lxvx 34, 0, 3
7711; PC64LE9-NEXT:    xsrdpiz 0, 0
7712; PC64LE9-NEXT:    blr
7713entry:
7714  %trunc = call <3 x float> @llvm.experimental.constrained.trunc.v3f32(
7715                              <3 x float> <float 1.5, float 2.5, float 3.5>,
7716                              metadata !"fpexcept.strict") #1
7717  ret <3 x float> %trunc
7718}
7719
7720define <3 x double> @constrained_vector_trunc_v3f64() #0 {
7721; PC64LE-LABEL: constrained_vector_trunc_v3f64:
7722; PC64LE:       # %bb.0: # %entry
7723; PC64LE-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
7724; PC64LE-NEXT:    addis 4, 2, .LCPI150_1@toc@ha
7725; PC64LE-NEXT:    lfs 0, .LCPI150_0@toc@l(3)
7726; PC64LE-NEXT:    addi 3, 4, .LCPI150_1@toc@l
7727; PC64LE-NEXT:    lxvd2x 1, 0, 3
7728; PC64LE-NEXT:    addis 3, 2, .LCPI150_2@toc@ha
7729; PC64LE-NEXT:    xsrdpiz 0, 0
7730; PC64LE-NEXT:    xvrdpiz 0, 1
7731; PC64LE-NEXT:    lfs 1, .LCPI150_2@toc@l(3)
7732; PC64LE-NEXT:    fmr 2, 1
7733; PC64LE-NEXT:    fmr 3, 1
7734; PC64LE-NEXT:    blr
7735;
7736; PC64LE9-LABEL: constrained_vector_trunc_v3f64:
7737; PC64LE9:       # %bb.0: # %entry
7738; PC64LE9-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
7739; PC64LE9-NEXT:    lfs 0, .LCPI150_0@toc@l(3)
7740; PC64LE9-NEXT:    addis 3, 2, .LCPI150_1@toc@ha
7741; PC64LE9-NEXT:    addi 3, 3, .LCPI150_1@toc@l
7742; PC64LE9-NEXT:    xsrdpiz 0, 0
7743; PC64LE9-NEXT:    lxvx 0, 0, 3
7744; PC64LE9-NEXT:    addis 3, 2, .LCPI150_2@toc@ha
7745; PC64LE9-NEXT:    lfs 1, .LCPI150_2@toc@l(3)
7746; PC64LE9-NEXT:    xvrdpiz 0, 0
7747; PC64LE9-NEXT:    fmr 2, 1
7748; PC64LE9-NEXT:    fmr 3, 1
7749; PC64LE9-NEXT:    blr
7750entry:
7751  %trunc = call <3 x double> @llvm.experimental.constrained.trunc.v3f64(
7752                          <3 x double> <double 1.1, double 1.9, double 1.5>,
7753                          metadata !"fpexcept.strict") #1
7754  ret <3 x double> %trunc
7755}
7756
7757define <1 x double> @constrained_vector_sitofp_v1f64_v1i32(<1 x i32> %x) #0 {
7758; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7759; PC64LE:       # %bb.0: # %entry
7760; PC64LE-NEXT:    mtfprwa 0, 3
7761; PC64LE-NEXT:    xscvsxddp 1, 0
7762; PC64LE-NEXT:    blr
7763;
7764; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i32:
7765; PC64LE9:       # %bb.0: # %entry
7766; PC64LE9-NEXT:    mtfprwa 0, 3
7767; PC64LE9-NEXT:    xscvsxddp 1, 0
7768; PC64LE9-NEXT:    blr
7769entry:
7770  %result = call <1 x double>
7771           @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %x,
7772                                               metadata !"round.dynamic",
7773                                               metadata !"fpexcept.strict") #0
7774  ret <1 x double> %result
7775}
7776
7777define <1 x float> @constrained_vector_sitofp_v1f32_v1i32(<1 x i32> %x) #0 {
7778; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7779; PC64LE:       # %bb.0: # %entry
7780; PC64LE-NEXT:    mtfprwa 0, 3
7781; PC64LE-NEXT:    xscvsxdsp 1, 0
7782; PC64LE-NEXT:    blr
7783;
7784; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i32:
7785; PC64LE9:       # %bb.0: # %entry
7786; PC64LE9-NEXT:    mtfprwa 0, 3
7787; PC64LE9-NEXT:    xscvsxdsp 1, 0
7788; PC64LE9-NEXT:    blr
7789entry:
7790  %result = call <1 x float>
7791           @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %x,
7792                                               metadata !"round.dynamic",
7793                                               metadata !"fpexcept.strict") #0
7794  ret <1 x float> %result
7795}
7796
7797define <1 x double> @constrained_vector_sitofp_v1f64_v1i64(<1 x i64> %x) #0 {
7798; PC64LE-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7799; PC64LE:       # %bb.0: # %entry
7800; PC64LE-NEXT:    mtfprd 0, 3
7801; PC64LE-NEXT:    xscvsxddp 1, 0
7802; PC64LE-NEXT:    blr
7803;
7804; PC64LE9-LABEL: constrained_vector_sitofp_v1f64_v1i64:
7805; PC64LE9:       # %bb.0: # %entry
7806; PC64LE9-NEXT:    mtfprd 0, 3
7807; PC64LE9-NEXT:    xscvsxddp 1, 0
7808; PC64LE9-NEXT:    blr
7809entry:
7810  %result = call <1 x double>
7811           @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %x,
7812                                               metadata !"round.dynamic",
7813                                               metadata !"fpexcept.strict") #0
7814  ret <1 x double> %result
7815}
7816
7817define <1 x float> @constrained_vector_sitofp_v1f32_v1i64(<1 x i64> %x) #0 {
7818; PC64LE-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7819; PC64LE:       # %bb.0: # %entry
7820; PC64LE-NEXT:    mtfprd 0, 3
7821; PC64LE-NEXT:    xscvsxdsp 1, 0
7822; PC64LE-NEXT:    blr
7823;
7824; PC64LE9-LABEL: constrained_vector_sitofp_v1f32_v1i64:
7825; PC64LE9:       # %bb.0: # %entry
7826; PC64LE9-NEXT:    mtfprd 0, 3
7827; PC64LE9-NEXT:    xscvsxdsp 1, 0
7828; PC64LE9-NEXT:    blr
7829entry:
7830  %result = call <1 x float>
7831           @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %x,
7832                                               metadata !"round.dynamic",
7833                                               metadata !"fpexcept.strict") #0
7834  ret <1 x float> %result
7835}
7836
7837define <2 x double> @constrained_vector_sitofp_v2f64_v2i16(<2 x i16> %x) #0 {
7838; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7839; PC64LE:       # %bb.0: # %entry
7840; PC64LE-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
7841; PC64LE-NEXT:    addi 3, 3, .LCPI155_0@toc@l
7842; PC64LE-NEXT:    lvx 3, 0, 3
7843; PC64LE-NEXT:    addis 3, 2, .LCPI155_1@toc@ha
7844; PC64LE-NEXT:    addi 3, 3, .LCPI155_1@toc@l
7845; PC64LE-NEXT:    lxvd2x 0, 0, 3
7846; PC64LE-NEXT:    vperm 2, 2, 2, 3
7847; PC64LE-NEXT:    xxswapd 35, 0
7848; PC64LE-NEXT:    vsld 2, 2, 3
7849; PC64LE-NEXT:    vsrad 2, 2, 3
7850; PC64LE-NEXT:    xvcvsxddp 34, 34
7851; PC64LE-NEXT:    blr
7852;
7853; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i16:
7854; PC64LE9:       # %bb.0: # %entry
7855; PC64LE9-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
7856; PC64LE9-NEXT:    addi 3, 3, .LCPI155_0@toc@l
7857; PC64LE9-NEXT:    lxvx 35, 0, 3
7858; PC64LE9-NEXT:    vperm 2, 2, 2, 3
7859; PC64LE9-NEXT:    vextsh2d 2, 2
7860; PC64LE9-NEXT:    xvcvsxddp 34, 34
7861; PC64LE9-NEXT:    blr
7862entry:
7863  %result = call <2 x double>
7864           @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %x,
7865                                                metadata !"round.dynamic",
7866                                                metadata !"fpexcept.strict") #0
7867  ret <2 x double> %result
7868}
7869
7870define <2 x double> @constrained_vector_sitofp_v2f64_v2i32(<2 x i32> %x) #0 {
7871; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7872; PC64LE:       # %bb.0: # %entry
7873; PC64LE-NEXT:    xxswapd 0, 34
7874; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
7875; PC64LE-NEXT:    mffprwz 3, 0
7876; PC64LE-NEXT:    mffprwz 4, 1
7877; PC64LE-NEXT:    mtfprwa 0, 3
7878; PC64LE-NEXT:    mtfprwa 1, 4
7879; PC64LE-NEXT:    xscvsxddp 0, 0
7880; PC64LE-NEXT:    xscvsxddp 1, 1
7881; PC64LE-NEXT:    xxmrghd 34, 1, 0
7882; PC64LE-NEXT:    blr
7883;
7884; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i32:
7885; PC64LE9:       # %bb.0: # %entry
7886; PC64LE9-NEXT:    li 3, 0
7887; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7888; PC64LE9-NEXT:    mtfprwa 0, 3
7889; PC64LE9-NEXT:    li 3, 4
7890; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7891; PC64LE9-NEXT:    xscvsxddp 0, 0
7892; PC64LE9-NEXT:    mtfprwa 1, 3
7893; PC64LE9-NEXT:    xscvsxddp 1, 1
7894; PC64LE9-NEXT:    xxmrghd 34, 1, 0
7895; PC64LE9-NEXT:    blr
7896entry:
7897  %result = call <2 x double>
7898           @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %x,
7899                                               metadata !"round.dynamic",
7900                                               metadata !"fpexcept.strict") #0
7901  ret <2 x double> %result
7902}
7903
7904define <2 x float> @constrained_vector_sitofp_v2f32_v2i32(<2 x i32> %x) #0 {
7905; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7906; PC64LE:       # %bb.0: # %entry
7907; PC64LE-NEXT:    xxswapd 0, 34
7908; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
7909; PC64LE-NEXT:    mffprwz 3, 0
7910; PC64LE-NEXT:    mffprwz 4, 1
7911; PC64LE-NEXT:    mtfprwa 0, 3
7912; PC64LE-NEXT:    mtfprwa 1, 4
7913; PC64LE-NEXT:    xscvsxdsp 0, 0
7914; PC64LE-NEXT:    xscvsxdsp 1, 1
7915; PC64LE-NEXT:    xscvdpspn 0, 0
7916; PC64LE-NEXT:    xscvdpspn 1, 1
7917; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
7918; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
7919; PC64LE-NEXT:    vmrghw 2, 3, 2
7920; PC64LE-NEXT:    blr
7921;
7922; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i32:
7923; PC64LE9:       # %bb.0: # %entry
7924; PC64LE9-NEXT:    li 3, 0
7925; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7926; PC64LE9-NEXT:    mtfprwa 0, 3
7927; PC64LE9-NEXT:    li 3, 4
7928; PC64LE9-NEXT:    xscvsxdsp 0, 0
7929; PC64LE9-NEXT:    vextuwrx 3, 3, 2
7930; PC64LE9-NEXT:    xscvdpspn 0, 0
7931; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
7932; PC64LE9-NEXT:    mtfprwa 0, 3
7933; PC64LE9-NEXT:    xscvsxdsp 0, 0
7934; PC64LE9-NEXT:    xscvdpspn 0, 0
7935; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
7936; PC64LE9-NEXT:    vmrghw 2, 2, 3
7937; PC64LE9-NEXT:    blr
7938entry:
7939  %result = call <2 x float>
7940           @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %x,
7941                                               metadata !"round.dynamic",
7942                                               metadata !"fpexcept.strict") #0
7943  ret <2 x float> %result
7944}
7945
7946define <2 x double> @constrained_vector_sitofp_v2f64_v2i64(<2 x i64> %x) #0 {
7947; PC64LE-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7948; PC64LE:       # %bb.0: # %entry
7949; PC64LE-NEXT:    xvcvsxddp 34, 34
7950; PC64LE-NEXT:    blr
7951;
7952; PC64LE9-LABEL: constrained_vector_sitofp_v2f64_v2i64:
7953; PC64LE9:       # %bb.0: # %entry
7954; PC64LE9-NEXT:    xvcvsxddp 34, 34
7955; PC64LE9-NEXT:    blr
7956entry:
7957  %result = call <2 x double>
7958           @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %x,
7959                                               metadata !"round.dynamic",
7960                                               metadata !"fpexcept.strict") #0
7961  ret <2 x double> %result
7962}
7963
7964define <2 x float> @constrained_vector_sitofp_v2f32_v2i64(<2 x i64> %x) #0 {
7965; PC64LE-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7966; PC64LE:       # %bb.0: # %entry
7967; PC64LE-NEXT:    xxswapd 0, 34
7968; PC64LE-NEXT:    mfvsrd 3, 34
7969; PC64LE-NEXT:    mffprd 4, 0
7970; PC64LE-NEXT:    mtfprd 0, 3
7971; PC64LE-NEXT:    mtfprd 1, 4
7972; PC64LE-NEXT:    xscvsxdsp 0, 0
7973; PC64LE-NEXT:    xscvsxdsp 1, 1
7974; PC64LE-NEXT:    xscvdpspn 0, 0
7975; PC64LE-NEXT:    xscvdpspn 1, 1
7976; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
7977; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
7978; PC64LE-NEXT:    vmrghw 2, 2, 3
7979; PC64LE-NEXT:    blr
7980;
7981; PC64LE9-LABEL: constrained_vector_sitofp_v2f32_v2i64:
7982; PC64LE9:       # %bb.0: # %entry
7983; PC64LE9-NEXT:    mfvsrld 3, 34
7984; PC64LE9-NEXT:    mtfprd 0, 3
7985; PC64LE9-NEXT:    mfvsrd 3, 34
7986; PC64LE9-NEXT:    xscvsxdsp 0, 0
7987; PC64LE9-NEXT:    xscvdpspn 0, 0
7988; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
7989; PC64LE9-NEXT:    mtfprd 0, 3
7990; PC64LE9-NEXT:    xscvsxdsp 0, 0
7991; PC64LE9-NEXT:    xscvdpspn 0, 0
7992; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
7993; PC64LE9-NEXT:    vmrghw 2, 2, 3
7994; PC64LE9-NEXT:    blr
7995entry:
7996  %result = call <2 x float>
7997           @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %x,
7998                                               metadata !"round.dynamic",
7999                                               metadata !"fpexcept.strict") #0
8000  ret <2 x float> %result
8001}
8002
8003define <3 x double> @constrained_vector_sitofp_v3f64_v3i32(<3 x i32> %x) #0 {
8004; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i32:
8005; PC64LE:       # %bb.0: # %entry
8006; PC64LE-NEXT:    xxswapd 0, 34
8007; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8008; PC64LE-NEXT:    mfvsrwz 3, 34
8009; PC64LE-NEXT:    mtfprwa 3, 3
8010; PC64LE-NEXT:    mffprwz 3, 0
8011; PC64LE-NEXT:    mffprwz 4, 1
8012; PC64LE-NEXT:    mtfprwa 0, 3
8013; PC64LE-NEXT:    mtfprwa 2, 4
8014; PC64LE-NEXT:    xscvsxddp 1, 0
8015; PC64LE-NEXT:    xscvsxddp 2, 2
8016; PC64LE-NEXT:    xscvsxddp 3, 3
8017; PC64LE-NEXT:    blr
8018;
8019; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i32:
8020; PC64LE9:       # %bb.0: # %entry
8021; PC64LE9-NEXT:    li 3, 0
8022; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8023; PC64LE9-NEXT:    mtfprwa 0, 3
8024; PC64LE9-NEXT:    li 3, 4
8025; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8026; PC64LE9-NEXT:    xscvsxddp 1, 0
8027; PC64LE9-NEXT:    mtfprwa 0, 3
8028; PC64LE9-NEXT:    mfvsrwz 3, 34
8029; PC64LE9-NEXT:    xscvsxddp 2, 0
8030; PC64LE9-NEXT:    mtfprwa 0, 3
8031; PC64LE9-NEXT:    xscvsxddp 3, 0
8032; PC64LE9-NEXT:    blr
8033entry:
8034  %result = call <3 x double>
8035           @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32> %x,
8036                                               metadata !"round.dynamic",
8037                                               metadata !"fpexcept.strict") #0
8038  ret <3 x double> %result
8039}
8040
8041define <3 x float> @constrained_vector_sitofp_v3f32_v3i32(<3 x i32> %x) #0 {
8042; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i32:
8043; PC64LE:       # %bb.0: # %entry
8044; PC64LE-NEXT:    xxswapd 0, 34
8045; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8046; PC64LE-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
8047; PC64LE-NEXT:    addi 3, 3, .LCPI161_0@toc@l
8048; PC64LE-NEXT:    mffprwz 4, 0
8049; PC64LE-NEXT:    mffprwz 5, 1
8050; PC64LE-NEXT:    mtfprwa 0, 4
8051; PC64LE-NEXT:    mtfprwa 1, 5
8052; PC64LE-NEXT:    xscvsxdsp 0, 0
8053; PC64LE-NEXT:    xscvsxdsp 1, 1
8054; PC64LE-NEXT:    mfvsrwz 4, 34
8055; PC64LE-NEXT:    mtfprwa 2, 4
8056; PC64LE-NEXT:    xscvsxdsp 2, 2
8057; PC64LE-NEXT:    xscvdpspn 0, 0
8058; PC64LE-NEXT:    xscvdpspn 1, 1
8059; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
8060; PC64LE-NEXT:    xscvdpspn 0, 2
8061; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
8062; PC64LE-NEXT:    vmrghw 2, 3, 2
8063; PC64LE-NEXT:    lvx 3, 0, 3
8064; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
8065; PC64LE-NEXT:    vperm 2, 4, 2, 3
8066; PC64LE-NEXT:    blr
8067;
8068; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i32:
8069; PC64LE9:       # %bb.0: # %entry
8070; PC64LE9-NEXT:    li 3, 0
8071; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8072; PC64LE9-NEXT:    mtfprwa 0, 3
8073; PC64LE9-NEXT:    li 3, 4
8074; PC64LE9-NEXT:    xscvsxdsp 0, 0
8075; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8076; PC64LE9-NEXT:    xscvdpspn 0, 0
8077; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
8078; PC64LE9-NEXT:    mtfprwa 0, 3
8079; PC64LE9-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
8080; PC64LE9-NEXT:    xscvsxdsp 0, 0
8081; PC64LE9-NEXT:    addi 3, 3, .LCPI161_0@toc@l
8082; PC64LE9-NEXT:    xscvdpspn 0, 0
8083; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
8084; PC64LE9-NEXT:    vmrghw 3, 4, 3
8085; PC64LE9-NEXT:    lxvx 36, 0, 3
8086; PC64LE9-NEXT:    mfvsrwz 3, 34
8087; PC64LE9-NEXT:    mtfprwa 0, 3
8088; PC64LE9-NEXT:    xscvsxdsp 0, 0
8089; PC64LE9-NEXT:    xscvdpspn 0, 0
8090; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
8091; PC64LE9-NEXT:    vperm 2, 2, 3, 4
8092; PC64LE9-NEXT:    blr
8093entry:
8094  %result = call <3 x float>
8095           @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32> %x,
8096                                               metadata !"round.dynamic",
8097                                               metadata !"fpexcept.strict") #0
8098  ret <3 x float> %result
8099}
8100
8101define <3 x double> @constrained_vector_sitofp_v3f64_v3i64(<3 x i64> %x) #0 {
8102; PC64LE-LABEL: constrained_vector_sitofp_v3f64_v3i64:
8103; PC64LE:       # %bb.0: # %entry
8104; PC64LE-NEXT:    mtfprd 0, 3
8105; PC64LE-NEXT:    mtfprd 2, 4
8106; PC64LE-NEXT:    mtfprd 3, 5
8107; PC64LE-NEXT:    xscvsxddp 1, 0
8108; PC64LE-NEXT:    xscvsxddp 2, 2
8109; PC64LE-NEXT:    xscvsxddp 3, 3
8110; PC64LE-NEXT:    blr
8111;
8112; PC64LE9-LABEL: constrained_vector_sitofp_v3f64_v3i64:
8113; PC64LE9:       # %bb.0: # %entry
8114; PC64LE9-NEXT:    mtfprd 0, 3
8115; PC64LE9-NEXT:    xscvsxddp 1, 0
8116; PC64LE9-NEXT:    mtfprd 0, 4
8117; PC64LE9-NEXT:    xscvsxddp 2, 0
8118; PC64LE9-NEXT:    mtfprd 0, 5
8119; PC64LE9-NEXT:    xscvsxddp 3, 0
8120; PC64LE9-NEXT:    blr
8121entry:
8122  %result = call <3 x double>
8123           @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64> %x,
8124                                               metadata !"round.dynamic",
8125                                               metadata !"fpexcept.strict") #0
8126  ret <3 x double> %result
8127}
8128
8129define <3 x float> @constrained_vector_sitofp_v3f32_v3i64(<3 x i64> %x) #0 {
8130; PC64LE-LABEL: constrained_vector_sitofp_v3f32_v3i64:
8131; PC64LE:       # %bb.0: # %entry
8132; PC64LE-NEXT:    mtfprd 0, 3
8133; PC64LE-NEXT:    addis 6, 2, .LCPI163_0@toc@ha
8134; PC64LE-NEXT:    mtfprd 1, 4
8135; PC64LE-NEXT:    addi 3, 6, .LCPI163_0@toc@l
8136; PC64LE-NEXT:    xscvsxdsp 0, 0
8137; PC64LE-NEXT:    xscvsxdsp 1, 1
8138; PC64LE-NEXT:    mtfprd 2, 5
8139; PC64LE-NEXT:    xscvsxdsp 2, 2
8140; PC64LE-NEXT:    xscvdpspn 0, 0
8141; PC64LE-NEXT:    xscvdpspn 1, 1
8142; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
8143; PC64LE-NEXT:    xscvdpspn 0, 2
8144; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
8145; PC64LE-NEXT:    vmrghw 2, 3, 2
8146; PC64LE-NEXT:    lvx 3, 0, 3
8147; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
8148; PC64LE-NEXT:    vperm 2, 4, 2, 3
8149; PC64LE-NEXT:    blr
8150;
8151; PC64LE9-LABEL: constrained_vector_sitofp_v3f32_v3i64:
8152; PC64LE9:       # %bb.0: # %entry
8153; PC64LE9-NEXT:    mtfprd 0, 3
8154; PC64LE9-NEXT:    addis 3, 2, .LCPI163_0@toc@ha
8155; PC64LE9-NEXT:    xscvsxdsp 0, 0
8156; PC64LE9-NEXT:    addi 3, 3, .LCPI163_0@toc@l
8157; PC64LE9-NEXT:    xscvdpspn 0, 0
8158; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
8159; PC64LE9-NEXT:    mtfprd 0, 4
8160; PC64LE9-NEXT:    xscvsxdsp 0, 0
8161; PC64LE9-NEXT:    xscvdpspn 0, 0
8162; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
8163; PC64LE9-NEXT:    mtfprd 0, 5
8164; PC64LE9-NEXT:    xscvsxdsp 0, 0
8165; PC64LE9-NEXT:    vmrghw 2, 3, 2
8166; PC64LE9-NEXT:    lxvx 35, 0, 3
8167; PC64LE9-NEXT:    xscvdpspn 0, 0
8168; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
8169; PC64LE9-NEXT:    vperm 2, 4, 2, 3
8170; PC64LE9-NEXT:    blr
8171entry:
8172  %result = call <3 x float>
8173           @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64> %x,
8174                                               metadata !"round.dynamic",
8175                                               metadata !"fpexcept.strict") #0
8176  ret <3 x float> %result
8177}
8178
8179define <4 x double> @constrained_vector_sitofp_v4f64_v4i32(<4 x i32> %x) #0 {
8180; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i32:
8181; PC64LE:       # %bb.0: # %entry
8182; PC64LE-NEXT:    xxswapd 0, 34
8183; PC64LE-NEXT:    mfvsrwz 3, 34
8184; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8185; PC64LE-NEXT:    mtfprwa 2, 3
8186; PC64LE-NEXT:    mffprwz 3, 0
8187; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
8188; PC64LE-NEXT:    mffprwz 4, 1
8189; PC64LE-NEXT:    mtfprwa 1, 3
8190; PC64LE-NEXT:    mffprwz 3, 0
8191; PC64LE-NEXT:    mtfprwa 3, 4
8192; PC64LE-NEXT:    xscvsxddp 0, 2
8193; PC64LE-NEXT:    mtfprwa 2, 3
8194; PC64LE-NEXT:    xscvsxddp 1, 1
8195; PC64LE-NEXT:    xscvsxddp 3, 3
8196; PC64LE-NEXT:    xscvsxddp 2, 2
8197; PC64LE-NEXT:    xxmrghd 34, 3, 1
8198; PC64LE-NEXT:    xxmrghd 35, 2, 0
8199; PC64LE-NEXT:    blr
8200;
8201; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i32:
8202; PC64LE9:       # %bb.0: # %entry
8203; PC64LE9-NEXT:    li 3, 0
8204; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8205; PC64LE9-NEXT:    mtfprwa 0, 3
8206; PC64LE9-NEXT:    li 3, 4
8207; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8208; PC64LE9-NEXT:    xscvsxddp 0, 0
8209; PC64LE9-NEXT:    mtfprwa 1, 3
8210; PC64LE9-NEXT:    li 3, 12
8211; PC64LE9-NEXT:    xscvsxddp 1, 1
8212; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8213; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8214; PC64LE9-NEXT:    mtfprwa 1, 3
8215; PC64LE9-NEXT:    mfvsrwz 3, 34
8216; PC64LE9-NEXT:    mtfprwa 2, 3
8217; PC64LE9-NEXT:    xscvsxddp 1, 1
8218; PC64LE9-NEXT:    xscvsxddp 2, 2
8219; PC64LE9-NEXT:    xxlor 34, 0, 0
8220; PC64LE9-NEXT:    xxmrghd 35, 1, 2
8221; PC64LE9-NEXT:    blr
8222entry:
8223  %result = call <4 x double>
8224           @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %x,
8225                                               metadata !"round.dynamic",
8226                                               metadata !"fpexcept.strict") #0
8227  ret <4 x double> %result
8228}
8229
8230define <4 x float> @constrained_vector_sitofp_v4f32_v4i16(<4 x i16> %x) #0 {
8231; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i16:
8232; PC64LE:       # %bb.0: # %entry
8233; PC64LE-NEXT:    vmrglh 2, 2, 2
8234; PC64LE-NEXT:    vspltisw 3, 8
8235; PC64LE-NEXT:    vadduwm 3, 3, 3
8236; PC64LE-NEXT:    vslw 2, 2, 3
8237; PC64LE-NEXT:    vsraw 2, 2, 3
8238; PC64LE-NEXT:    xvcvsxwsp 34, 34
8239; PC64LE-NEXT:    blr
8240;
8241; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i16:
8242; PC64LE9:       # %bb.0: # %entry
8243; PC64LE9-NEXT:    vmrglh 2, 2, 2
8244; PC64LE9-NEXT:    vextsh2w 2, 2
8245; PC64LE9-NEXT:    xvcvsxwsp 34, 34
8246; PC64LE9-NEXT:    blr
8247entry:
8248  %result = call <4 x float>
8249         @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %x,
8250                                               metadata !"round.dynamic",
8251                                               metadata !"fpexcept.strict") #0
8252  ret <4 x float> %result
8253}
8254
8255define <4 x float> @constrained_vector_sitofp_v4f32_v4i32(<4 x i32> %x) #0 {
8256; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i32:
8257; PC64LE:       # %bb.0: # %entry
8258; PC64LE-NEXT:    xvcvsxwsp 34, 34
8259; PC64LE-NEXT:    blr
8260;
8261; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i32:
8262; PC64LE9:       # %bb.0: # %entry
8263; PC64LE9-NEXT:    xvcvsxwsp 34, 34
8264; PC64LE9-NEXT:    blr
8265entry:
8266  %result = call <4 x float>
8267           @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %x,
8268                                               metadata !"round.dynamic",
8269                                               metadata !"fpexcept.strict") #0
8270  ret <4 x float> %result
8271}
8272
8273define <4 x double> @constrained_vector_sitofp_v4f64_v4i64(<4 x i64> %x) #0 {
8274; PC64LE-LABEL: constrained_vector_sitofp_v4f64_v4i64:
8275; PC64LE:       # %bb.0: # %entry
8276; PC64LE-NEXT:    xvcvsxddp 35, 35
8277; PC64LE-NEXT:    xvcvsxddp 34, 34
8278; PC64LE-NEXT:    blr
8279;
8280; PC64LE9-LABEL: constrained_vector_sitofp_v4f64_v4i64:
8281; PC64LE9:       # %bb.0: # %entry
8282; PC64LE9-NEXT:    xvcvsxddp 35, 35
8283; PC64LE9-NEXT:    xvcvsxddp 34, 34
8284; PC64LE9-NEXT:    blr
8285entry:
8286  %result = call <4 x double>
8287           @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %x,
8288                                               metadata !"round.dynamic",
8289                                               metadata !"fpexcept.strict") #0
8290  ret <4 x double> %result
8291}
8292
8293define <4 x float> @constrained_vector_sitofp_v4f32_v4i64(<4 x i64> %x) #0 {
8294; PC64LE-LABEL: constrained_vector_sitofp_v4f32_v4i64:
8295; PC64LE:       # %bb.0: # %entry
8296; PC64LE-NEXT:    xxswapd 0, 34
8297; PC64LE-NEXT:    mfvsrd 3, 34
8298; PC64LE-NEXT:    xxswapd 2, 35
8299; PC64LE-NEXT:    mfvsrd 4, 35
8300; PC64LE-NEXT:    mtfprd 1, 3
8301; PC64LE-NEXT:    mffprd 3, 0
8302; PC64LE-NEXT:    mtfprd 0, 4
8303; PC64LE-NEXT:    mtfprd 3, 3
8304; PC64LE-NEXT:    mffprd 3, 2
8305; PC64LE-NEXT:    xscvsxdsp 1, 1
8306; PC64LE-NEXT:    mtfprd 2, 3
8307; PC64LE-NEXT:    xscvsxdsp 0, 0
8308; PC64LE-NEXT:    xscvsxdsp 3, 3
8309; PC64LE-NEXT:    xscvsxdsp 2, 2
8310; PC64LE-NEXT:    xxmrghd 0, 0, 1
8311; PC64LE-NEXT:    xxmrghd 1, 2, 3
8312; PC64LE-NEXT:    xvcvdpsp 34, 0
8313; PC64LE-NEXT:    xvcvdpsp 35, 1
8314; PC64LE-NEXT:    vmrgew 2, 2, 3
8315; PC64LE-NEXT:    blr
8316;
8317; PC64LE9-LABEL: constrained_vector_sitofp_v4f32_v4i64:
8318; PC64LE9:       # %bb.0: # %entry
8319; PC64LE9-NEXT:    mfvsrld 3, 34
8320; PC64LE9-NEXT:    mtfprd 0, 3
8321; PC64LE9-NEXT:    mfvsrld 3, 35
8322; PC64LE9-NEXT:    xscvsxdsp 0, 0
8323; PC64LE9-NEXT:    mtfprd 1, 3
8324; PC64LE9-NEXT:    mfvsrd 3, 34
8325; PC64LE9-NEXT:    xscvsxdsp 1, 1
8326; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8327; PC64LE9-NEXT:    xvcvdpsp 36, 0
8328; PC64LE9-NEXT:    mtfprd 0, 3
8329; PC64LE9-NEXT:    mfvsrd 3, 35
8330; PC64LE9-NEXT:    mtfprd 1, 3
8331; PC64LE9-NEXT:    xscvsxdsp 0, 0
8332; PC64LE9-NEXT:    xscvsxdsp 1, 1
8333; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8334; PC64LE9-NEXT:    xvcvdpsp 34, 0
8335; PC64LE9-NEXT:    vmrgew 2, 2, 4
8336; PC64LE9-NEXT:    blr
8337entry:
8338  %result = call <4 x float>
8339           @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %x,
8340                                               metadata !"round.dynamic",
8341                                               metadata !"fpexcept.strict") #0
8342  ret <4 x float> %result
8343}
8344
8345define <1 x double> @constrained_vector_uitofp_v1f64_v1i32(<1 x i32> %x) #0 {
8346; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i32:
8347; PC64LE:       # %bb.0: # %entry
8348; PC64LE-NEXT:    mtfprwz 0, 3
8349; PC64LE-NEXT:    xscvuxddp 1, 0
8350; PC64LE-NEXT:    blr
8351;
8352; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i32:
8353; PC64LE9:       # %bb.0: # %entry
8354; PC64LE9-NEXT:    mtfprwz 0, 3
8355; PC64LE9-NEXT:    xscvuxddp 1, 0
8356; PC64LE9-NEXT:    blr
8357entry:
8358  %result = call <1 x double>
8359           @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %x,
8360                                               metadata !"round.dynamic",
8361                                               metadata !"fpexcept.strict") #0
8362  ret <1 x double> %result
8363}
8364
8365define <1 x float> @constrained_vector_uitofp_v1f32_v1i32(<1 x i32> %x) #0 {
8366; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i32:
8367; PC64LE:       # %bb.0: # %entry
8368; PC64LE-NEXT:    mtfprwz 0, 3
8369; PC64LE-NEXT:    xscvuxdsp 1, 0
8370; PC64LE-NEXT:    blr
8371;
8372; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i32:
8373; PC64LE9:       # %bb.0: # %entry
8374; PC64LE9-NEXT:    mtfprwz 0, 3
8375; PC64LE9-NEXT:    xscvuxdsp 1, 0
8376; PC64LE9-NEXT:    blr
8377entry:
8378  %result = call <1 x float>
8379           @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %x,
8380                                               metadata !"round.dynamic",
8381                                               metadata !"fpexcept.strict") #0
8382  ret <1 x float> %result
8383}
8384
8385define <1 x double> @constrained_vector_uitofp_v1f64_v1i64(<1 x i64> %x) #0 {
8386; PC64LE-LABEL: constrained_vector_uitofp_v1f64_v1i64:
8387; PC64LE:       # %bb.0: # %entry
8388; PC64LE-NEXT:    mtfprd 0, 3
8389; PC64LE-NEXT:    xscvuxddp 1, 0
8390; PC64LE-NEXT:    blr
8391;
8392; PC64LE9-LABEL: constrained_vector_uitofp_v1f64_v1i64:
8393; PC64LE9:       # %bb.0: # %entry
8394; PC64LE9-NEXT:    mtfprd 0, 3
8395; PC64LE9-NEXT:    xscvuxddp 1, 0
8396; PC64LE9-NEXT:    blr
8397entry:
8398  %result = call <1 x double>
8399           @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %x,
8400                                               metadata !"round.dynamic",
8401                                               metadata !"fpexcept.strict") #0
8402  ret <1 x double> %result
8403}
8404
8405define <1 x float> @constrained_vector_uitofp_v1f32_v1i64(<1 x i64> %x) #0 {
8406; PC64LE-LABEL: constrained_vector_uitofp_v1f32_v1i64:
8407; PC64LE:       # %bb.0: # %entry
8408; PC64LE-NEXT:    mtfprd 0, 3
8409; PC64LE-NEXT:    xscvuxdsp 1, 0
8410; PC64LE-NEXT:    blr
8411;
8412; PC64LE9-LABEL: constrained_vector_uitofp_v1f32_v1i64:
8413; PC64LE9:       # %bb.0: # %entry
8414; PC64LE9-NEXT:    mtfprd 0, 3
8415; PC64LE9-NEXT:    xscvuxdsp 1, 0
8416; PC64LE9-NEXT:    blr
8417entry:
8418  %result = call <1 x float>
8419           @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %x,
8420                                               metadata !"round.dynamic",
8421                                               metadata !"fpexcept.strict") #0
8422  ret <1 x float> %result
8423}
8424
8425define <2 x double> @constrained_vector_uitofp_v2f64_v2i16(<2 x i16> %x) #0 {
8426; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i16:
8427; PC64LE:       # %bb.0: # %entry
8428; PC64LE-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
8429; PC64LE-NEXT:    xxlxor 36, 36, 36
8430; PC64LE-NEXT:    addi 3, 3, .LCPI173_0@toc@l
8431; PC64LE-NEXT:    lvx 3, 0, 3
8432; PC64LE-NEXT:    vperm 2, 4, 2, 3
8433; PC64LE-NEXT:    xvcvuxddp 34, 34
8434; PC64LE-NEXT:    blr
8435;
8436; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i16:
8437; PC64LE9:       # %bb.0: # %entry
8438; PC64LE9-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
8439; PC64LE9-NEXT:    xxlxor 36, 36, 36
8440; PC64LE9-NEXT:    addi 3, 3, .LCPI173_0@toc@l
8441; PC64LE9-NEXT:    lxvx 35, 0, 3
8442; PC64LE9-NEXT:    vperm 2, 4, 2, 3
8443; PC64LE9-NEXT:    xvcvuxddp 34, 34
8444; PC64LE9-NEXT:    blr
8445entry:
8446  %result = call <2 x double>
8447           @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %x,
8448                                               metadata !"round.dynamic",
8449                                               metadata !"fpexcept.strict") #0
8450  ret <2 x double> %result
8451}
8452
8453define <2 x double> @constrained_vector_uitofp_v2f64_v2i32(<2 x i32> %x) #0 {
8454; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i32:
8455; PC64LE:       # %bb.0: # %entry
8456; PC64LE-NEXT:    xxswapd 0, 34
8457; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8458; PC64LE-NEXT:    mffprwz 3, 0
8459; PC64LE-NEXT:    mffprwz 4, 1
8460; PC64LE-NEXT:    mtfprwz 0, 3
8461; PC64LE-NEXT:    mtfprwz 1, 4
8462; PC64LE-NEXT:    xscvuxddp 0, 0
8463; PC64LE-NEXT:    xscvuxddp 1, 1
8464; PC64LE-NEXT:    xxmrghd 34, 1, 0
8465; PC64LE-NEXT:    blr
8466;
8467; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i32:
8468; PC64LE9:       # %bb.0: # %entry
8469; PC64LE9-NEXT:    li 3, 0
8470; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8471; PC64LE9-NEXT:    mtfprwz 0, 3
8472; PC64LE9-NEXT:    li 3, 4
8473; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8474; PC64LE9-NEXT:    xscvuxddp 0, 0
8475; PC64LE9-NEXT:    mtfprwz 1, 3
8476; PC64LE9-NEXT:    xscvuxddp 1, 1
8477; PC64LE9-NEXT:    xxmrghd 34, 1, 0
8478; PC64LE9-NEXT:    blr
8479entry:
8480  %result = call <2 x double>
8481           @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %x,
8482                                               metadata !"round.dynamic",
8483                                               metadata !"fpexcept.strict") #0
8484  ret <2 x double> %result
8485}
8486
8487define <2 x float> @constrained_vector_uitofp_v2f32_v2i32(<2 x i32> %x) #0 {
8488; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i32:
8489; PC64LE:       # %bb.0: # %entry
8490; PC64LE-NEXT:    xxswapd 0, 34
8491; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8492; PC64LE-NEXT:    mffprwz 3, 0
8493; PC64LE-NEXT:    mffprwz 4, 1
8494; PC64LE-NEXT:    mtfprwz 0, 3
8495; PC64LE-NEXT:    mtfprwz 1, 4
8496; PC64LE-NEXT:    xscvuxdsp 0, 0
8497; PC64LE-NEXT:    xscvuxdsp 1, 1
8498; PC64LE-NEXT:    xscvdpspn 0, 0
8499; PC64LE-NEXT:    xscvdpspn 1, 1
8500; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
8501; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
8502; PC64LE-NEXT:    vmrghw 2, 3, 2
8503; PC64LE-NEXT:    blr
8504;
8505; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i32:
8506; PC64LE9:       # %bb.0: # %entry
8507; PC64LE9-NEXT:    li 3, 0
8508; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8509; PC64LE9-NEXT:    mtfprwz 0, 3
8510; PC64LE9-NEXT:    li 3, 4
8511; PC64LE9-NEXT:    xscvuxdsp 0, 0
8512; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8513; PC64LE9-NEXT:    xscvdpspn 0, 0
8514; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
8515; PC64LE9-NEXT:    mtfprwz 0, 3
8516; PC64LE9-NEXT:    xscvuxdsp 0, 0
8517; PC64LE9-NEXT:    xscvdpspn 0, 0
8518; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
8519; PC64LE9-NEXT:    vmrghw 2, 2, 3
8520; PC64LE9-NEXT:    blr
8521entry:
8522  %result = call <2 x float>
8523           @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %x,
8524                                               metadata !"round.dynamic",
8525                                               metadata !"fpexcept.strict") #0
8526  ret <2 x float> %result
8527}
8528
8529define <2 x double> @constrained_vector_uitofp_v2f64_v2i64(<2 x i64> %x) #0 {
8530; PC64LE-LABEL: constrained_vector_uitofp_v2f64_v2i64:
8531; PC64LE:       # %bb.0: # %entry
8532; PC64LE-NEXT:    xvcvuxddp 34, 34
8533; PC64LE-NEXT:    blr
8534;
8535; PC64LE9-LABEL: constrained_vector_uitofp_v2f64_v2i64:
8536; PC64LE9:       # %bb.0: # %entry
8537; PC64LE9-NEXT:    xvcvuxddp 34, 34
8538; PC64LE9-NEXT:    blr
8539entry:
8540  %result = call <2 x double>
8541           @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %x,
8542                                               metadata !"round.dynamic",
8543                                               metadata !"fpexcept.strict") #0
8544  ret <2 x double> %result
8545}
8546
8547define <2 x float> @constrained_vector_uitofp_v2f32_v2i64(<2 x i64> %x) #0 {
8548; PC64LE-LABEL: constrained_vector_uitofp_v2f32_v2i64:
8549; PC64LE:       # %bb.0: # %entry
8550; PC64LE-NEXT:    xxswapd 0, 34
8551; PC64LE-NEXT:    mfvsrd 3, 34
8552; PC64LE-NEXT:    mffprd 4, 0
8553; PC64LE-NEXT:    mtfprd 0, 3
8554; PC64LE-NEXT:    mtfprd 1, 4
8555; PC64LE-NEXT:    xscvuxdsp 0, 0
8556; PC64LE-NEXT:    xscvuxdsp 1, 1
8557; PC64LE-NEXT:    xscvdpspn 0, 0
8558; PC64LE-NEXT:    xscvdpspn 1, 1
8559; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
8560; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
8561; PC64LE-NEXT:    vmrghw 2, 2, 3
8562; PC64LE-NEXT:    blr
8563;
8564; PC64LE9-LABEL: constrained_vector_uitofp_v2f32_v2i64:
8565; PC64LE9:       # %bb.0: # %entry
8566; PC64LE9-NEXT:    mfvsrld 3, 34
8567; PC64LE9-NEXT:    mtfprd 0, 3
8568; PC64LE9-NEXT:    mfvsrd 3, 34
8569; PC64LE9-NEXT:    xscvuxdsp 0, 0
8570; PC64LE9-NEXT:    xscvdpspn 0, 0
8571; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
8572; PC64LE9-NEXT:    mtfprd 0, 3
8573; PC64LE9-NEXT:    xscvuxdsp 0, 0
8574; PC64LE9-NEXT:    xscvdpspn 0, 0
8575; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
8576; PC64LE9-NEXT:    vmrghw 2, 2, 3
8577; PC64LE9-NEXT:    blr
8578entry:
8579  %result = call <2 x float>
8580           @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %x,
8581                                               metadata !"round.dynamic",
8582                                               metadata !"fpexcept.strict") #0
8583  ret <2 x float> %result
8584}
8585
8586define <3 x double> @constrained_vector_uitofp_v3f64_v3i32(<3 x i32> %x) #0 {
8587; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i32:
8588; PC64LE:       # %bb.0: # %entry
8589; PC64LE-NEXT:    xxswapd 0, 34
8590; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8591; PC64LE-NEXT:    mfvsrwz 3, 34
8592; PC64LE-NEXT:    mtfprwz 3, 3
8593; PC64LE-NEXT:    mffprwz 3, 0
8594; PC64LE-NEXT:    mffprwz 4, 1
8595; PC64LE-NEXT:    mtfprwz 0, 3
8596; PC64LE-NEXT:    mtfprwz 2, 4
8597; PC64LE-NEXT:    xscvuxddp 1, 0
8598; PC64LE-NEXT:    xscvuxddp 2, 2
8599; PC64LE-NEXT:    xscvuxddp 3, 3
8600; PC64LE-NEXT:    blr
8601;
8602; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i32:
8603; PC64LE9:       # %bb.0: # %entry
8604; PC64LE9-NEXT:    li 3, 0
8605; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8606; PC64LE9-NEXT:    mtfprwz 0, 3
8607; PC64LE9-NEXT:    li 3, 4
8608; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8609; PC64LE9-NEXT:    xscvuxddp 1, 0
8610; PC64LE9-NEXT:    mtfprwz 0, 3
8611; PC64LE9-NEXT:    mfvsrwz 3, 34
8612; PC64LE9-NEXT:    xscvuxddp 2, 0
8613; PC64LE9-NEXT:    mtfprwz 0, 3
8614; PC64LE9-NEXT:    xscvuxddp 3, 0
8615; PC64LE9-NEXT:    blr
8616entry:
8617  %result = call <3 x double>
8618           @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32> %x,
8619                                               metadata !"round.dynamic",
8620                                               metadata !"fpexcept.strict") #0
8621  ret <3 x double> %result
8622}
8623
8624define <3 x float> @constrained_vector_uitofp_v3f32_v3i32(<3 x i32> %x) #0 {
8625; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i32:
8626; PC64LE:       # %bb.0: # %entry
8627; PC64LE-NEXT:    xxswapd 0, 34
8628; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8629; PC64LE-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
8630; PC64LE-NEXT:    addi 3, 3, .LCPI179_0@toc@l
8631; PC64LE-NEXT:    mffprwz 4, 0
8632; PC64LE-NEXT:    mffprwz 5, 1
8633; PC64LE-NEXT:    mtfprwz 0, 4
8634; PC64LE-NEXT:    mtfprwz 1, 5
8635; PC64LE-NEXT:    xscvuxdsp 0, 0
8636; PC64LE-NEXT:    xscvuxdsp 1, 1
8637; PC64LE-NEXT:    mfvsrwz 4, 34
8638; PC64LE-NEXT:    mtfprwz 2, 4
8639; PC64LE-NEXT:    xscvuxdsp 2, 2
8640; PC64LE-NEXT:    xscvdpspn 0, 0
8641; PC64LE-NEXT:    xscvdpspn 1, 1
8642; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
8643; PC64LE-NEXT:    xscvdpspn 0, 2
8644; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
8645; PC64LE-NEXT:    vmrghw 2, 3, 2
8646; PC64LE-NEXT:    lvx 3, 0, 3
8647; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
8648; PC64LE-NEXT:    vperm 2, 4, 2, 3
8649; PC64LE-NEXT:    blr
8650;
8651; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i32:
8652; PC64LE9:       # %bb.0: # %entry
8653; PC64LE9-NEXT:    li 3, 0
8654; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8655; PC64LE9-NEXT:    mtfprwz 0, 3
8656; PC64LE9-NEXT:    li 3, 4
8657; PC64LE9-NEXT:    xscvuxdsp 0, 0
8658; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8659; PC64LE9-NEXT:    xscvdpspn 0, 0
8660; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
8661; PC64LE9-NEXT:    mtfprwz 0, 3
8662; PC64LE9-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
8663; PC64LE9-NEXT:    xscvuxdsp 0, 0
8664; PC64LE9-NEXT:    addi 3, 3, .LCPI179_0@toc@l
8665; PC64LE9-NEXT:    xscvdpspn 0, 0
8666; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
8667; PC64LE9-NEXT:    vmrghw 3, 4, 3
8668; PC64LE9-NEXT:    lxvx 36, 0, 3
8669; PC64LE9-NEXT:    mfvsrwz 3, 34
8670; PC64LE9-NEXT:    mtfprwz 0, 3
8671; PC64LE9-NEXT:    xscvuxdsp 0, 0
8672; PC64LE9-NEXT:    xscvdpspn 0, 0
8673; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
8674; PC64LE9-NEXT:    vperm 2, 2, 3, 4
8675; PC64LE9-NEXT:    blr
8676entry:
8677  %result = call <3 x float>
8678           @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32> %x,
8679                                               metadata !"round.dynamic",
8680                                               metadata !"fpexcept.strict") #0
8681  ret <3 x float> %result
8682}
8683
8684define <3 x double> @constrained_vector_uitofp_v3f64_v3i64(<3 x i64> %x) #0 {
8685; PC64LE-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8686; PC64LE:       # %bb.0: # %entry
8687; PC64LE-NEXT:    mtfprd 0, 3
8688; PC64LE-NEXT:    mtfprd 2, 4
8689; PC64LE-NEXT:    mtfprd 3, 5
8690; PC64LE-NEXT:    xscvuxddp 1, 0
8691; PC64LE-NEXT:    xscvuxddp 2, 2
8692; PC64LE-NEXT:    xscvuxddp 3, 3
8693; PC64LE-NEXT:    blr
8694;
8695; PC64LE9-LABEL: constrained_vector_uitofp_v3f64_v3i64:
8696; PC64LE9:       # %bb.0: # %entry
8697; PC64LE9-NEXT:    mtfprd 0, 3
8698; PC64LE9-NEXT:    xscvuxddp 1, 0
8699; PC64LE9-NEXT:    mtfprd 0, 4
8700; PC64LE9-NEXT:    xscvuxddp 2, 0
8701; PC64LE9-NEXT:    mtfprd 0, 5
8702; PC64LE9-NEXT:    xscvuxddp 3, 0
8703; PC64LE9-NEXT:    blr
8704entry:
8705  %result = call <3 x double>
8706           @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64> %x,
8707                                               metadata !"round.dynamic",
8708                                               metadata !"fpexcept.strict") #0
8709  ret <3 x double> %result
8710}
8711
8712define <3 x float> @constrained_vector_uitofp_v3f32_v3i64(<3 x i64> %x) #0 {
8713; PC64LE-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8714; PC64LE:       # %bb.0: # %entry
8715; PC64LE-NEXT:    mtfprd 0, 3
8716; PC64LE-NEXT:    addis 6, 2, .LCPI181_0@toc@ha
8717; PC64LE-NEXT:    mtfprd 1, 4
8718; PC64LE-NEXT:    addi 3, 6, .LCPI181_0@toc@l
8719; PC64LE-NEXT:    xscvuxdsp 0, 0
8720; PC64LE-NEXT:    xscvuxdsp 1, 1
8721; PC64LE-NEXT:    mtfprd 2, 5
8722; PC64LE-NEXT:    xscvuxdsp 2, 2
8723; PC64LE-NEXT:    xscvdpspn 0, 0
8724; PC64LE-NEXT:    xscvdpspn 1, 1
8725; PC64LE-NEXT:    xxsldwi 34, 0, 0, 3
8726; PC64LE-NEXT:    xscvdpspn 0, 2
8727; PC64LE-NEXT:    xxsldwi 35, 1, 1, 3
8728; PC64LE-NEXT:    vmrghw 2, 3, 2
8729; PC64LE-NEXT:    lvx 3, 0, 3
8730; PC64LE-NEXT:    xxsldwi 36, 0, 0, 3
8731; PC64LE-NEXT:    vperm 2, 4, 2, 3
8732; PC64LE-NEXT:    blr
8733;
8734; PC64LE9-LABEL: constrained_vector_uitofp_v3f32_v3i64:
8735; PC64LE9:       # %bb.0: # %entry
8736; PC64LE9-NEXT:    mtfprd 0, 3
8737; PC64LE9-NEXT:    addis 3, 2, .LCPI181_0@toc@ha
8738; PC64LE9-NEXT:    xscvuxdsp 0, 0
8739; PC64LE9-NEXT:    addi 3, 3, .LCPI181_0@toc@l
8740; PC64LE9-NEXT:    xscvdpspn 0, 0
8741; PC64LE9-NEXT:    xxsldwi 34, 0, 0, 3
8742; PC64LE9-NEXT:    mtfprd 0, 4
8743; PC64LE9-NEXT:    xscvuxdsp 0, 0
8744; PC64LE9-NEXT:    xscvdpspn 0, 0
8745; PC64LE9-NEXT:    xxsldwi 35, 0, 0, 3
8746; PC64LE9-NEXT:    mtfprd 0, 5
8747; PC64LE9-NEXT:    xscvuxdsp 0, 0
8748; PC64LE9-NEXT:    vmrghw 2, 3, 2
8749; PC64LE9-NEXT:    lxvx 35, 0, 3
8750; PC64LE9-NEXT:    xscvdpspn 0, 0
8751; PC64LE9-NEXT:    xxsldwi 36, 0, 0, 3
8752; PC64LE9-NEXT:    vperm 2, 4, 2, 3
8753; PC64LE9-NEXT:    blr
8754entry:
8755  %result = call <3 x float>
8756           @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64> %x,
8757                                               metadata !"round.dynamic",
8758                                               metadata !"fpexcept.strict") #0
8759  ret <3 x float> %result
8760}
8761
8762define <4 x double> @constrained_vector_uitofp_v4f64_v4i32(<4 x i32> %x) #0 {
8763; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8764; PC64LE:       # %bb.0: # %entry
8765; PC64LE-NEXT:    xxswapd 0, 34
8766; PC64LE-NEXT:    mfvsrwz 3, 34
8767; PC64LE-NEXT:    xxsldwi 1, 34, 34, 1
8768; PC64LE-NEXT:    mtfprwz 2, 3
8769; PC64LE-NEXT:    mffprwz 3, 0
8770; PC64LE-NEXT:    xxsldwi 0, 34, 34, 3
8771; PC64LE-NEXT:    mffprwz 4, 1
8772; PC64LE-NEXT:    mtfprwz 1, 3
8773; PC64LE-NEXT:    mffprwz 3, 0
8774; PC64LE-NEXT:    mtfprwz 3, 4
8775; PC64LE-NEXT:    xscvuxddp 0, 2
8776; PC64LE-NEXT:    mtfprwz 2, 3
8777; PC64LE-NEXT:    xscvuxddp 1, 1
8778; PC64LE-NEXT:    xscvuxddp 3, 3
8779; PC64LE-NEXT:    xscvuxddp 2, 2
8780; PC64LE-NEXT:    xxmrghd 34, 3, 1
8781; PC64LE-NEXT:    xxmrghd 35, 2, 0
8782; PC64LE-NEXT:    blr
8783;
8784; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i32:
8785; PC64LE9:       # %bb.0: # %entry
8786; PC64LE9-NEXT:    li 3, 0
8787; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8788; PC64LE9-NEXT:    mtfprwz 0, 3
8789; PC64LE9-NEXT:    li 3, 4
8790; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8791; PC64LE9-NEXT:    xscvuxddp 0, 0
8792; PC64LE9-NEXT:    mtfprwz 1, 3
8793; PC64LE9-NEXT:    li 3, 12
8794; PC64LE9-NEXT:    xscvuxddp 1, 1
8795; PC64LE9-NEXT:    vextuwrx 3, 3, 2
8796; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8797; PC64LE9-NEXT:    mtfprwz 1, 3
8798; PC64LE9-NEXT:    mfvsrwz 3, 34
8799; PC64LE9-NEXT:    mtfprwz 2, 3
8800; PC64LE9-NEXT:    xscvuxddp 1, 1
8801; PC64LE9-NEXT:    xscvuxddp 2, 2
8802; PC64LE9-NEXT:    xxlor 34, 0, 0
8803; PC64LE9-NEXT:    xxmrghd 35, 1, 2
8804; PC64LE9-NEXT:    blr
8805entry:
8806  %result = call <4 x double>
8807           @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %x,
8808                                               metadata !"round.dynamic",
8809                                               metadata !"fpexcept.strict") #0
8810  ret <4 x double> %result
8811}
8812
8813define <4 x float> @constrained_vector_uitofp_v4f32_v4i16(<4 x i16> %x) #0 {
8814; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8815; PC64LE:       # %bb.0: # %entry
8816; PC64LE-NEXT:    xxlxor 35, 35, 35
8817; PC64LE-NEXT:    vmrglh 2, 3, 2
8818; PC64LE-NEXT:    xvcvuxwsp 34, 34
8819; PC64LE-NEXT:    blr
8820;
8821; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i16:
8822; PC64LE9:       # %bb.0: # %entry
8823; PC64LE9-NEXT:    xxlxor 35, 35, 35
8824; PC64LE9-NEXT:    vmrglh 2, 3, 2
8825; PC64LE9-NEXT:    xvcvuxwsp 34, 34
8826; PC64LE9-NEXT:    blr
8827entry:
8828  %result = call <4 x float>
8829         @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %x,
8830                                               metadata !"round.dynamic",
8831                                               metadata !"fpexcept.strict") #0
8832  ret <4 x float> %result
8833}
8834
8835define <4 x float> @constrained_vector_uitofp_v4f32_v4i32(<4 x i32> %x) #0 {
8836; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8837; PC64LE:       # %bb.0: # %entry
8838; PC64LE-NEXT:    xvcvuxwsp 34, 34
8839; PC64LE-NEXT:    blr
8840;
8841; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i32:
8842; PC64LE9:       # %bb.0: # %entry
8843; PC64LE9-NEXT:    xvcvuxwsp 34, 34
8844; PC64LE9-NEXT:    blr
8845entry:
8846  %result = call <4 x float>
8847           @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %x,
8848                                               metadata !"round.dynamic",
8849                                               metadata !"fpexcept.strict") #0
8850  ret <4 x float> %result
8851}
8852
8853define <4 x double> @constrained_vector_uitofp_v4f64_v4i64(<4 x i64> %x) #0 {
8854; PC64LE-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8855; PC64LE:       # %bb.0: # %entry
8856; PC64LE-NEXT:    xvcvuxddp 35, 35
8857; PC64LE-NEXT:    xvcvuxddp 34, 34
8858; PC64LE-NEXT:    blr
8859;
8860; PC64LE9-LABEL: constrained_vector_uitofp_v4f64_v4i64:
8861; PC64LE9:       # %bb.0: # %entry
8862; PC64LE9-NEXT:    xvcvuxddp 35, 35
8863; PC64LE9-NEXT:    xvcvuxddp 34, 34
8864; PC64LE9-NEXT:    blr
8865entry:
8866  %result = call <4 x double>
8867           @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %x,
8868                                               metadata !"round.dynamic",
8869                                               metadata !"fpexcept.strict") #0
8870  ret <4 x double> %result
8871}
8872
8873define <4 x float> @constrained_vector_uitofp_v4f32_v4i64(<4 x i64> %x) #0 {
8874; PC64LE-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8875; PC64LE:       # %bb.0: # %entry
8876; PC64LE-NEXT:    xxswapd 0, 34
8877; PC64LE-NEXT:    mfvsrd 3, 34
8878; PC64LE-NEXT:    xxswapd 2, 35
8879; PC64LE-NEXT:    mfvsrd 4, 35
8880; PC64LE-NEXT:    mtfprd 1, 3
8881; PC64LE-NEXT:    mffprd 3, 0
8882; PC64LE-NEXT:    mtfprd 0, 4
8883; PC64LE-NEXT:    mtfprd 3, 3
8884; PC64LE-NEXT:    mffprd 3, 2
8885; PC64LE-NEXT:    xscvuxdsp 1, 1
8886; PC64LE-NEXT:    mtfprd 2, 3
8887; PC64LE-NEXT:    xscvuxdsp 0, 0
8888; PC64LE-NEXT:    xscvuxdsp 3, 3
8889; PC64LE-NEXT:    xscvuxdsp 2, 2
8890; PC64LE-NEXT:    xxmrghd 0, 0, 1
8891; PC64LE-NEXT:    xxmrghd 1, 2, 3
8892; PC64LE-NEXT:    xvcvdpsp 34, 0
8893; PC64LE-NEXT:    xvcvdpsp 35, 1
8894; PC64LE-NEXT:    vmrgew 2, 2, 3
8895; PC64LE-NEXT:    blr
8896;
8897; PC64LE9-LABEL: constrained_vector_uitofp_v4f32_v4i64:
8898; PC64LE9:       # %bb.0: # %entry
8899; PC64LE9-NEXT:    mfvsrld 3, 34
8900; PC64LE9-NEXT:    mtfprd 0, 3
8901; PC64LE9-NEXT:    mfvsrld 3, 35
8902; PC64LE9-NEXT:    xscvuxdsp 0, 0
8903; PC64LE9-NEXT:    mtfprd 1, 3
8904; PC64LE9-NEXT:    mfvsrd 3, 34
8905; PC64LE9-NEXT:    xscvuxdsp 1, 1
8906; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8907; PC64LE9-NEXT:    xvcvdpsp 36, 0
8908; PC64LE9-NEXT:    mtfprd 0, 3
8909; PC64LE9-NEXT:    mfvsrd 3, 35
8910; PC64LE9-NEXT:    mtfprd 1, 3
8911; PC64LE9-NEXT:    xscvuxdsp 0, 0
8912; PC64LE9-NEXT:    xscvuxdsp 1, 1
8913; PC64LE9-NEXT:    xxmrghd 0, 1, 0
8914; PC64LE9-NEXT:    xvcvdpsp 34, 0
8915; PC64LE9-NEXT:    vmrgew 2, 2, 4
8916; PC64LE9-NEXT:    blr
8917entry:
8918  %result = call <4 x float>
8919           @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %x,
8920                                               metadata !"round.dynamic",
8921                                               metadata !"fpexcept.strict") #0
8922  ret <4 x float> %result
8923}
8924
8925attributes #0 = { nounwind strictfp noimplicitfloat }
8926attributes #1 = { strictfp }
8927
8928; Single width declarations
8929declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8930declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8931declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8932declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8933declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8934declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
8935declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
8936declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
8937declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
8938declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
8939declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
8940declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
8941declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
8942declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
8943declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
8944declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
8945declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
8946declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata)
8947declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata)
8948declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata)
8949declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata)
8950declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata)
8951declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata)
8952declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata)
8953declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata)
8954declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata)
8955declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata)
8956declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
8957declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
8958declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)
8959declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)
8960declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)
8961declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
8962declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8963declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16>, metadata, metadata)
8964declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8965declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8966declare <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8967declare <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8968declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32>, metadata, metadata)
8969declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32>, metadata, metadata)
8970declare <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64>, metadata, metadata)
8971declare <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64>, metadata, metadata)
8972
8973; Scalar width declarations
8974declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8975declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8976declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8977declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8978declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8979declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
8980declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
8981declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
8982declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
8983declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
8984declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
8985declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
8986declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
8987declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
8988declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
8989declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
8990declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
8991declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata)
8992declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata)
8993declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata)
8994declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata)
8995declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata)
8996declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata)
8997declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata)
8998declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata)
8999declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata)
9000declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata)
9001declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
9002declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
9003declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata)
9004declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata)
9005declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata)
9006declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata)
9007declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
9008declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
9009declare <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
9010declare <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
9011declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32>, metadata, metadata)
9012declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32>, metadata, metadata)
9013declare <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64>, metadata, metadata)
9014declare <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64>, metadata, metadata)
9015
9016; Illegal width declarations
9017declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
9018declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
9019declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
9020declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
9021declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
9022declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
9023declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
9024declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
9025declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
9026declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
9027declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
9028declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
9029declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
9030declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
9031declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
9032declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
9033declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
9034declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
9035declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
9036declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
9037declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
9038declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
9039declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
9040declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
9041declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
9042declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
9043declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
9044declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
9045declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
9046declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
9047declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
9048declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
9049declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
9050declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
9051declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata)
9052declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata)
9053declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata)
9054declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata)
9055declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f32(<3 x float>, metadata)
9056declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f32(<3 x float>, metadata)
9057declare <3 x i32> @llvm.experimental.constrained.fptosi.v3i32.v3f64(<3 x double>, metadata)
9058declare <3 x i64> @llvm.experimental.constrained.fptosi.v3i64.v3f64(<3 x double>, metadata)
9059declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f32(<3 x float>, metadata)
9060declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f32(<3 x float>, metadata)
9061declare <3 x i32> @llvm.experimental.constrained.fptoui.v3i32.v3f64(<3 x double>, metadata)
9062declare <3 x i64> @llvm.experimental.constrained.fptoui.v3i64.v3f64(<3 x double>, metadata)
9063declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
9064declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
9065declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata)
9066declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata)
9067declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata)
9068declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata)
9069declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata)
9070declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata)
9071declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata)
9072declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata)
9073declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
9074declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
9075declare <3 x double> @llvm.experimental.constrained.sitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
9076declare <3 x float> @llvm.experimental.constrained.sitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
9077declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i32(<3 x i32>, metadata, metadata)
9078declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i32(<3 x i32>, metadata, metadata)
9079declare <3 x double> @llvm.experimental.constrained.uitofp.v3f64.v3i64(<3 x i64>, metadata, metadata)
9080declare <3 x float> @llvm.experimental.constrained.uitofp.v3f32.v3i64(<3 x i64>, metadata, metadata)
9081
9082; Double width declarations
9083declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
9084declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
9085declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
9086declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
9087declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
9088declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
9089declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
9090declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
9091declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
9092declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
9093declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
9094declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
9095declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
9096declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
9097declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
9098declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
9099declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
9100declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata)
9101declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata)
9102declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata)
9103declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata)
9104declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata)
9105declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata)
9106declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata)
9107declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata)
9108declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata)
9109declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata)
9110declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
9111declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
9112declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata)
9113declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata)
9114declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata)
9115declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata)
9116declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
9117declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
9118declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
9119declare <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
9120declare <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)
9121declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16>, metadata, metadata)
9122declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32>, metadata, metadata)
9123declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32>, metadata, metadata)
9124declare <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64>, metadata, metadata)
9125declare <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64>, metadata, metadata)
9126