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