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