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