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