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