[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / SystemZ / vector-constrained-fp-intrinsics.ll
blob8752e6b85eb43142cc0ecd939ec9ff36f52dcb15
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
5 define <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
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
21 entry:
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
30 define <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
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
51 entry:
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
60 define <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
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
91 entry:
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
100 define 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
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
129 entry:
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
140 define <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
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
170 entry:
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
181 define <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
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
212 entry:
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
221 define <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
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
276 entry:
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
285 define <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
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
359 entry:
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
368 define 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
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
449 entry:
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
460 define <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
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
560 define <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
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
576 entry:
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
585 define <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
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
606 entry:
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
615 define <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
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
644 entry:
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
654 define 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
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
681 entry:
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
693 define <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
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
723 entry:
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
734 define <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
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
750 entry:
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
759 define <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
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
780 entry:
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
789 define <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
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
816 entry:
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
826 define 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
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
853 entry:
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
865 define <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
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
895 entry:
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
906 define <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
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
922 entry:
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
931 define <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
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
951 entry:
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
960 define <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
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
990 entry:
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
1000 define 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
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
1025 entry:
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
1037 define <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
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
1067 entry:
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
1078 define <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
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
1091 entry:
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
1099 define <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
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
1115 entry:
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
1123 define <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
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
1146 entry:
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
1154 define 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
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
1173 entry:
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
1183 define <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
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
1215 define <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
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
1247 entry:
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
1256 define <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
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
1313 entry:
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
1322 define <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
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
1398 entry:
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
1407 define 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
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
1492 entry:
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
1503 define <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
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
1595 entry:
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
1606 define <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
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
1636 entry:
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
1645 define <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
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
1692 entry:
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
1701 define <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
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
1767 entry:
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
1776 define 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
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
1846 entry:
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
1857 define <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
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
1939 entry:
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
1949 define <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
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
1977 entry:
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
1985 define <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
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
2028 entry:
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
2036 define <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
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
2096 entry:
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
2104 define 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
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
2173 entry:
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
2183 define <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
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
2257 entry:
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
2266 define <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
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
2294 entry:
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
2302 define <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
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
2345 entry:
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
2353 define <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
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
2413 entry:
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
2421 define 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
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
2490 entry:
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
2500 define <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
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
2574 entry:
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
2583 define <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
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
2611 entry:
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
2619 define <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
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
2662 entry:
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
2670 define <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
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
2730 entry:
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
2738 define 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
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
2807 entry:
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
2817 define <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
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
2891 entry:
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
2900 define <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
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
2928 entry:
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
2936 define <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
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
2979 entry:
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
2987 define <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
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
3047 entry:
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
3055 define 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
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
3124 entry:
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
3134 define <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
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
3208 entry:
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
3217 define <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
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
3245 entry:
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
3253 define <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
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
3296 entry:
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
3304 define <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
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
3364 entry:
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
3372 define 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
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
3441 entry:
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
3451 define <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
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
3525 entry:
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
3534 define <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
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
3562 entry:
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
3570 define <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
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
3613 entry:
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
3621 define <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
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
3681 entry:
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
3689 define 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
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
3758 entry:
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
3768 define <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
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
3842 entry:
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
3851 define <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
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
3879 entry:
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
3887 define <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
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
3930 entry:
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
3938 define <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
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
3998 entry:
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
4006 define 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
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
4075 entry:
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
4085 define <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
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
4159 entry:
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
4168 define <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
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
4183 entry:
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
4191 define <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
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
4208 entry:
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
4216 define <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
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
4253 define 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
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
4276 entry:
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
4286 define <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
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
4312 entry:
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
4321 define <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
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
4342 entry:
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
4350 define <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
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
4379 entry:
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
4387 define <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
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
4434 entry:
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
4442 define 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
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
4486 entry:
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
4496 define <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
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
4546 entry:
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
4555 define <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
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
4587 entry:
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
4594 define <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
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
4645 entry:
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
4653 define <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
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
4730 entry:
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
4738 define 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
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
4819 entry:
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
4829 define <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
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
4919 entry:
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
4929 define <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
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
4968 define <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
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
5019 entry:
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
5027 define <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
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
5104 entry:
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
5112 define 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
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
5197 entry:
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
5207 define <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
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
5297 entry:
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
5307 define <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
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
5321 entry:
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
5329 define <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
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
5351 entry:
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
5359 define 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
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
5389 entry:
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
5399 define <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
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
5434 entry:
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
5443 define <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
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
5456 entry:
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
5463 define <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
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
5480 entry:
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
5487 define 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
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
5513 entry:
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
5522 define <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
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
5548 entry:
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
5556 define <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
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
5576 entry:
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
5583 define <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
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
5612 entry:
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
5619 define <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
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
5665 entry:
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
5672 define 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
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
5716 entry:
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
5725 define <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
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
5745 entry:
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
5753 define <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
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
5782 entry:
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
5789 define <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
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
5835 entry:
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
5842 define 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
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
5886 entry:
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
5895 define <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
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
5915 entry:
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
5922 define <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
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
5951 entry:
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
5958 define <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
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
6004 entry:
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
6012 define 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
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
6056 entry:
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
6065 define <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
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
6085 entry:
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
6092 define <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
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
6121 entry:
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
6128 define <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
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
6174 entry:
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
6181 define 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
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
6225 entry:
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
6234 attributes #0 = { strictfp }
6236 declare <2 x double> @llvm.experimental.constrained.fadd.v2f64(<2 x double>, <2 x double>, metadata, metadata)
6237 declare <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double>, <2 x double>, metadata, metadata)
6238 declare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
6239 declare <2 x double> @llvm.experimental.constrained.fdiv.v2f64(<2 x double>, <2 x double>, metadata, metadata)
6240 declare <2 x double> @llvm.experimental.constrained.frem.v2f64(<2 x double>, <2 x double>, metadata, metadata)
6241 declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
6242 declare <2 x double> @llvm.experimental.constrained.pow.v2f64(<2 x double>, <2 x double>, metadata, metadata)
6243 declare <2 x double> @llvm.experimental.constrained.powi.v2f64(<2 x double>, i32, metadata, metadata)
6244 declare <2 x double> @llvm.experimental.constrained.sin.v2f64(<2 x double>, metadata, metadata)
6245 declare <2 x double> @llvm.experimental.constrained.cos.v2f64(<2 x double>, metadata, metadata)
6246 declare <2 x double> @llvm.experimental.constrained.exp.v2f64(<2 x double>, metadata, metadata)
6247 declare <2 x double> @llvm.experimental.constrained.exp2.v2f64(<2 x double>, metadata, metadata)
6248 declare <2 x double> @llvm.experimental.constrained.log.v2f64(<2 x double>, metadata, metadata)
6249 declare <2 x double> @llvm.experimental.constrained.log10.v2f64(<2 x double>, metadata, metadata)
6250 declare <2 x double> @llvm.experimental.constrained.log2.v2f64(<2 x double>, metadata, metadata)
6251 declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
6252 declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
6253 declare <2 x double> @llvm.experimental.constrained.maxnum.v2f64(<2 x double>, <2 x double>, metadata)
6254 declare <2 x double> @llvm.experimental.constrained.minnum.v2f64(<2 x double>, <2 x double>, metadata)
6255 declare <2 x float> @llvm.experimental.constrained.fptrunc.v2f32.v2f64(<2 x double>, metadata, metadata)
6256 declare <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float>, metadata)
6257 declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)
6258 declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)
6259 declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)
6260 declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
6262 declare <1 x float> @llvm.experimental.constrained.fadd.v1f32(<1 x float>, <1 x float>, metadata, metadata)
6263 declare <1 x float> @llvm.experimental.constrained.fsub.v1f32(<1 x float>, <1 x float>, metadata, metadata)
6264 declare <1 x float> @llvm.experimental.constrained.fmul.v1f32(<1 x float>, <1 x float>, metadata, metadata)
6265 declare <1 x float> @llvm.experimental.constrained.fdiv.v1f32(<1 x float>, <1 x float>, metadata, metadata)
6266 declare <1 x float> @llvm.experimental.constrained.frem.v1f32(<1 x float>, <1 x float>, metadata, metadata)
6267 declare <1 x float> @llvm.experimental.constrained.sqrt.v1f32(<1 x float>, metadata, metadata)
6268 declare <1 x float> @llvm.experimental.constrained.pow.v1f32(<1 x float>, <1 x float>, metadata, metadata)
6269 declare <1 x float> @llvm.experimental.constrained.powi.v1f32(<1 x float>, i32, metadata, metadata)
6270 declare <1 x float> @llvm.experimental.constrained.sin.v1f32(<1 x float>, metadata, metadata)
6271 declare <1 x float> @llvm.experimental.constrained.cos.v1f32(<1 x float>, metadata, metadata)
6272 declare <1 x float> @llvm.experimental.constrained.exp.v1f32(<1 x float>, metadata, metadata)
6273 declare <1 x float> @llvm.experimental.constrained.exp2.v1f32(<1 x float>, metadata, metadata)
6274 declare <1 x float> @llvm.experimental.constrained.log.v1f32(<1 x float>, metadata, metadata)
6275 declare <1 x float> @llvm.experimental.constrained.log10.v1f32(<1 x float>, metadata, metadata)
6276 declare <1 x float> @llvm.experimental.constrained.log2.v1f32(<1 x float>, metadata, metadata)
6277 declare <1 x float> @llvm.experimental.constrained.rint.v1f32(<1 x float>, metadata, metadata)
6278 declare <1 x float> @llvm.experimental.constrained.nearbyint.v1f32(<1 x float>, metadata, metadata)
6279 declare <1 x float> @llvm.experimental.constrained.maxnum.v1f32(<1 x float>, <1 x float>, metadata)
6280 declare <1 x float> @llvm.experimental.constrained.minnum.v1f32(<1 x float>, <1 x float>, metadata)
6281 declare <1 x float> @llvm.experimental.constrained.fptrunc.v1f32.v1f64(<1 x double>, metadata, metadata)
6282 declare <1 x double> @llvm.experimental.constrained.fpext.v1f64.v1f32(<1 x float>, metadata)
6283 declare <1 x float> @llvm.experimental.constrained.ceil.v1f32(<1 x float>, metadata)
6284 declare <1 x float> @llvm.experimental.constrained.floor.v1f32(<1 x float>, metadata)
6285 declare <1 x float> @llvm.experimental.constrained.round.v1f32(<1 x float>, metadata)
6286 declare <1 x float> @llvm.experimental.constrained.trunc.v1f32(<1 x float>, metadata)
6288 declare <3 x float> @llvm.experimental.constrained.fadd.v3f32(<3 x float>, <3 x float>, metadata, metadata)
6289 declare <3 x double> @llvm.experimental.constrained.fadd.v3f64(<3 x double>, <3 x double>, metadata, metadata)
6290 declare <3 x float> @llvm.experimental.constrained.fsub.v3f32(<3 x float>, <3 x float>, metadata, metadata)
6291 declare <3 x double> @llvm.experimental.constrained.fsub.v3f64(<3 x double>, <3 x double>, metadata, metadata)
6292 declare <3 x float> @llvm.experimental.constrained.fmul.v3f32(<3 x float>, <3 x float>, metadata, metadata)
6293 declare <3 x double> @llvm.experimental.constrained.fmul.v3f64(<3 x double>, <3 x double>, metadata, metadata)
6294 declare <3 x float> @llvm.experimental.constrained.fdiv.v3f32(<3 x float>, <3 x float>, metadata, metadata)
6295 declare <3 x double> @llvm.experimental.constrained.fdiv.v3f64(<3 x double>, <3 x double>, metadata, metadata)
6296 declare <3 x float> @llvm.experimental.constrained.frem.v3f32(<3 x float>, <3 x float>, metadata, metadata)
6297 declare <3 x double> @llvm.experimental.constrained.frem.v3f64(<3 x double>, <3 x double>, metadata, metadata)
6298 declare <3 x float> @llvm.experimental.constrained.sqrt.v3f32(<3 x float>, metadata, metadata)
6299 declare <3 x double> @llvm.experimental.constrained.sqrt.v3f64(<3 x double>, metadata, metadata)
6300 declare <3 x float> @llvm.experimental.constrained.pow.v3f32(<3 x float>, <3 x float>, metadata, metadata)
6301 declare <3 x double> @llvm.experimental.constrained.pow.v3f64(<3 x double>, <3 x double>, metadata, metadata)
6302 declare <3 x float> @llvm.experimental.constrained.powi.v3f32(<3 x float>, i32, metadata, metadata)
6303 declare <3 x double> @llvm.experimental.constrained.powi.v3f64(<3 x double>, i32, metadata, metadata)
6304 declare <3 x float> @llvm.experimental.constrained.sin.v3f32(<3 x float>, metadata, metadata)
6305 declare <3 x double> @llvm.experimental.constrained.sin.v3f64(<3 x double>, metadata, metadata)
6306 declare <3 x float> @llvm.experimental.constrained.cos.v3f32(<3 x float>, metadata, metadata)
6307 declare <3 x double> @llvm.experimental.constrained.cos.v3f64(<3 x double>, metadata, metadata)
6308 declare <3 x float> @llvm.experimental.constrained.exp.v3f32(<3 x float>, metadata, metadata)
6309 declare <3 x double> @llvm.experimental.constrained.exp.v3f64(<3 x double>, metadata, metadata)
6310 declare <3 x float> @llvm.experimental.constrained.exp2.v3f32(<3 x float>, metadata, metadata)
6311 declare <3 x double> @llvm.experimental.constrained.exp2.v3f64(<3 x double>, metadata, metadata)
6312 declare <3 x float> @llvm.experimental.constrained.log.v3f32(<3 x float>, metadata, metadata)
6313 declare <3 x double> @llvm.experimental.constrained.log.v3f64(<3 x double>, metadata, metadata)
6314 declare <3 x float> @llvm.experimental.constrained.log10.v3f32(<3 x float>, metadata, metadata)
6315 declare <3 x double> @llvm.experimental.constrained.log10.v3f64(<3 x double>, metadata, metadata)
6316 declare <3 x float> @llvm.experimental.constrained.log2.v3f32(<3 x float>, metadata, metadata)
6317 declare <3 x double> @llvm.experimental.constrained.log2.v3f64(<3 x double>, metadata, metadata)
6318 declare <3 x float> @llvm.experimental.constrained.rint.v3f32(<3 x float>, metadata, metadata)
6319 declare <3 x double> @llvm.experimental.constrained.rint.v3f64(<3 x double>, metadata, metadata)
6320 declare <3 x float> @llvm.experimental.constrained.nearbyint.v3f32(<3 x float>, metadata, metadata)
6321 declare <3 x double> @llvm.experimental.constrained.nearbyint.v3f64(<3 x double>, metadata, metadata)
6322 declare <3 x float> @llvm.experimental.constrained.maxnum.v3f32(<3 x float>, <3 x float>, metadata)
6323 declare <3 x double> @llvm.experimental.constrained.maxnum.v3f64(<3 x double>, <3 x double>, metadata)
6324 declare <3 x float> @llvm.experimental.constrained.minnum.v3f32(<3 x float>, <3 x float>, metadata)
6325 declare <3 x double> @llvm.experimental.constrained.minnum.v3f64(<3 x double>, <3 x double>, metadata)
6326 declare <3 x float> @llvm.experimental.constrained.fptrunc.v3f32.v3f64(<3 x double>, metadata, metadata)
6327 declare <3 x double> @llvm.experimental.constrained.fpext.v3f64.v3f32(<3 x float>, metadata)
6328 declare <3 x float> @llvm.experimental.constrained.ceil.v3f32(<3 x float>, metadata)
6329 declare <3 x double> @llvm.experimental.constrained.ceil.v3f64(<3 x double>, metadata)
6330 declare <3 x float> @llvm.experimental.constrained.floor.v3f32(<3 x float>, metadata)
6331 declare <3 x double> @llvm.experimental.constrained.floor.v3f64(<3 x double>, metadata)
6332 declare <3 x float> @llvm.experimental.constrained.round.v3f32(<3 x float>, metadata)
6333 declare <3 x double> @llvm.experimental.constrained.round.v3f64(<3 x double>, metadata)
6334 declare <3 x float> @llvm.experimental.constrained.trunc.v3f32(<3 x float>, metadata)
6335 declare <3 x double> @llvm.experimental.constrained.trunc.v3f64(<3 x double>, metadata)
6337 declare <4 x double> @llvm.experimental.constrained.fadd.v4f64(<4 x double>, <4 x double>, metadata, metadata)
6338 declare <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double>, <4 x double>, metadata, metadata)
6339 declare <4 x double> @llvm.experimental.constrained.fmul.v4f64(<4 x double>, <4 x double>, metadata, metadata)
6340 declare <4 x double> @llvm.experimental.constrained.fdiv.v4f64(<4 x double>, <4 x double>, metadata, metadata)
6341 declare <4 x double> @llvm.experimental.constrained.frem.v4f64(<4 x double>, <4 x double>, metadata, metadata)
6342 declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
6343 declare <4 x double> @llvm.experimental.constrained.pow.v4f64(<4 x double>, <4 x double>, metadata, metadata)
6344 declare <4 x double> @llvm.experimental.constrained.powi.v4f64(<4 x double>, i32, metadata, metadata)
6345 declare <4 x double> @llvm.experimental.constrained.sin.v4f64(<4 x double>, metadata, metadata)
6346 declare <4 x double> @llvm.experimental.constrained.cos.v4f64(<4 x double>, metadata, metadata)
6347 declare <4 x double> @llvm.experimental.constrained.exp.v4f64(<4 x double>, metadata, metadata)
6348 declare <4 x double> @llvm.experimental.constrained.exp2.v4f64(<4 x double>, metadata, metadata)
6349 declare <4 x double> @llvm.experimental.constrained.log.v4f64(<4 x double>, metadata, metadata)
6350 declare <4 x double> @llvm.experimental.constrained.log10.v4f64(<4 x double>, metadata, metadata)
6351 declare <4 x double> @llvm.experimental.constrained.log2.v4f64(<4 x double>, metadata, metadata)
6352 declare <4 x double> @llvm.experimental.constrained.rint.v4f64(<4 x double>, metadata, metadata)
6353 declare <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double>, metadata, metadata)
6354 declare <4 x double> @llvm.experimental.constrained.maxnum.v4f64(<4 x double>, <4 x double>, metadata)
6355 declare <4 x double> @llvm.experimental.constrained.minnum.v4f64(<4 x double>, <4 x double>, metadata)
6356 declare <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double>, metadata, metadata)
6357 declare <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float>, metadata)
6358 declare <4 x double> @llvm.experimental.constrained.ceil.v4f64(<4 x double>, metadata)
6359 declare <4 x double> @llvm.experimental.constrained.floor.v4f64(<4 x double>, metadata)
6360 declare <4 x double> @llvm.experimental.constrained.round.v4f64(<4 x double>, metadata)
6361 declare <4 x double> @llvm.experimental.constrained.trunc.v4f64(<4 x double>, metadata)