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