1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2 ; RUN: llc -mtriple=aarch64-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3 ; RUN: llc -mtriple=aarch64-none-eabi -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define double @powi_f64(double %a, i32 %b) {
6 ; CHECK-LABEL: powi_f64:
7 ; CHECK: // %bb.0: // %entry
8 ; CHECK-NEXT: b __powidf2
10 %c = call double @llvm.powi.f64.i32(double %a, i32 %b)
14 define float @powi_f32(float %a, i32 %b) {
15 ; CHECK-LABEL: powi_f32:
16 ; CHECK: // %bb.0: // %entry
17 ; CHECK-NEXT: b __powisf2
19 %c = call float @llvm.powi.f32.i32(float %a, i32 %b)
23 define half @powi_f16(half %a, i32 %b) {
24 ; CHECK-LABEL: powi_f16:
25 ; CHECK: // %bb.0: // %entry
26 ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
27 ; CHECK-NEXT: .cfi_def_cfa_offset 16
28 ; CHECK-NEXT: .cfi_offset w30, -16
29 ; CHECK-NEXT: fcvt s0, h0
30 ; CHECK-NEXT: bl __powisf2
31 ; CHECK-NEXT: fcvt h0, s0
32 ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
35 %c = call half @llvm.powi.f16.i32(half %a, i32 %b)
39 define <2 x double> @powi_v2f64(<2 x double> %a, i32 %b) {
40 ; CHECK-SD-LABEL: powi_v2f64:
41 ; CHECK-SD: // %bb.0: // %entry
42 ; CHECK-SD-NEXT: sub sp, sp, #48
43 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
44 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
45 ; CHECK-SD-NEXT: .cfi_offset w19, -8
46 ; CHECK-SD-NEXT: .cfi_offset w30, -16
47 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
48 ; CHECK-SD-NEXT: mov d0, v0.d[1]
49 ; CHECK-SD-NEXT: mov w19, w0
50 ; CHECK-SD-NEXT: bl __powidf2
51 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
52 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
53 ; CHECK-SD-NEXT: mov w0, w19
54 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
55 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
56 ; CHECK-SD-NEXT: bl __powidf2
57 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
58 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
59 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
60 ; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
61 ; CHECK-SD-NEXT: add sp, sp, #48
64 ; CHECK-GI-LABEL: powi_v2f64:
65 ; CHECK-GI: // %bb.0: // %entry
66 ; CHECK-GI-NEXT: sub sp, sp, #48
67 ; CHECK-GI-NEXT: str d8, [sp, #16] // 8-byte Folded Spill
68 ; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
69 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 48
70 ; CHECK-GI-NEXT: .cfi_offset w19, -8
71 ; CHECK-GI-NEXT: .cfi_offset w30, -16
72 ; CHECK-GI-NEXT: .cfi_offset b8, -32
73 ; CHECK-GI-NEXT: mov d8, v0.d[1]
74 ; CHECK-GI-NEXT: mov w19, w0
75 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
76 ; CHECK-GI-NEXT: bl __powidf2
77 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
78 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
79 ; CHECK-GI-NEXT: mov w0, w19
80 ; CHECK-GI-NEXT: fmov d0, d8
81 ; CHECK-GI-NEXT: bl __powidf2
82 ; CHECK-GI-NEXT: ldr q1, [sp] // 16-byte Folded Reload
83 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
84 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
85 ; CHECK-GI-NEXT: ldr d8, [sp, #16] // 8-byte Folded Reload
86 ; CHECK-GI-NEXT: mov v1.d[1], v0.d[0]
87 ; CHECK-GI-NEXT: mov v0.16b, v1.16b
88 ; CHECK-GI-NEXT: add sp, sp, #48
91 %c = call <2 x double> @llvm.powi.v2f64.i32(<2 x double> %a, i32 %b)
95 define <3 x double> @powi_v3f64(<3 x double> %a, i32 %b) {
96 ; CHECK-SD-LABEL: powi_v3f64:
97 ; CHECK-SD: // %bb.0: // %entry
98 ; CHECK-SD-NEXT: str d10, [sp, #-48]! // 8-byte Folded Spill
99 ; CHECK-SD-NEXT: stp d9, d8, [sp, #16] // 16-byte Folded Spill
100 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
101 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
102 ; CHECK-SD-NEXT: .cfi_offset w19, -8
103 ; CHECK-SD-NEXT: .cfi_offset w30, -16
104 ; CHECK-SD-NEXT: .cfi_offset b8, -24
105 ; CHECK-SD-NEXT: .cfi_offset b9, -32
106 ; CHECK-SD-NEXT: .cfi_offset b10, -48
107 ; CHECK-SD-NEXT: mov w19, w0
108 ; CHECK-SD-NEXT: fmov d8, d2
109 ; CHECK-SD-NEXT: fmov d9, d1
110 ; CHECK-SD-NEXT: bl __powidf2
111 ; CHECK-SD-NEXT: fmov d10, d0
112 ; CHECK-SD-NEXT: fmov d0, d9
113 ; CHECK-SD-NEXT: mov w0, w19
114 ; CHECK-SD-NEXT: bl __powidf2
115 ; CHECK-SD-NEXT: fmov d9, d0
116 ; CHECK-SD-NEXT: fmov d0, d8
117 ; CHECK-SD-NEXT: mov w0, w19
118 ; CHECK-SD-NEXT: bl __powidf2
119 ; CHECK-SD-NEXT: fmov d1, d9
120 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
121 ; CHECK-SD-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload
122 ; CHECK-SD-NEXT: fmov d2, d0
123 ; CHECK-SD-NEXT: fmov d0, d10
124 ; CHECK-SD-NEXT: ldr d10, [sp], #48 // 8-byte Folded Reload
127 ; CHECK-GI-LABEL: powi_v3f64:
128 ; CHECK-GI: // %bb.0: // %entry
129 ; CHECK-GI-NEXT: str d10, [sp, #-48]! // 8-byte Folded Spill
130 ; CHECK-GI-NEXT: stp d9, d8, [sp, #16] // 16-byte Folded Spill
131 ; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
132 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 48
133 ; CHECK-GI-NEXT: .cfi_offset w19, -8
134 ; CHECK-GI-NEXT: .cfi_offset w30, -16
135 ; CHECK-GI-NEXT: .cfi_offset b8, -24
136 ; CHECK-GI-NEXT: .cfi_offset b9, -32
137 ; CHECK-GI-NEXT: .cfi_offset b10, -48
138 ; CHECK-GI-NEXT: fmov d8, d1
139 ; CHECK-GI-NEXT: fmov d9, d2
140 ; CHECK-GI-NEXT: mov w19, w0
141 ; CHECK-GI-NEXT: bl __powidf2
142 ; CHECK-GI-NEXT: fmov d10, d0
143 ; CHECK-GI-NEXT: fmov d0, d8
144 ; CHECK-GI-NEXT: mov w0, w19
145 ; CHECK-GI-NEXT: bl __powidf2
146 ; CHECK-GI-NEXT: fmov d8, d0
147 ; CHECK-GI-NEXT: fmov d0, d9
148 ; CHECK-GI-NEXT: mov w0, w19
149 ; CHECK-GI-NEXT: bl __powidf2
150 ; CHECK-GI-NEXT: fmov d1, d8
151 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
152 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload
153 ; CHECK-GI-NEXT: fmov d2, d0
154 ; CHECK-GI-NEXT: fmov d0, d10
155 ; CHECK-GI-NEXT: ldr d10, [sp], #48 // 8-byte Folded Reload
158 %c = call <3 x double> @llvm.powi.v3f64.i32(<3 x double> %a, i32 %b)
162 define <4 x double> @powi_v4f64(<4 x double> %a, i32 %b) {
163 ; CHECK-SD-LABEL: powi_v4f64:
164 ; CHECK-SD: // %bb.0: // %entry
165 ; CHECK-SD-NEXT: sub sp, sp, #64
166 ; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
167 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
168 ; CHECK-SD-NEXT: .cfi_offset w19, -8
169 ; CHECK-SD-NEXT: .cfi_offset w30, -16
170 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
171 ; CHECK-SD-NEXT: mov d0, v0.d[1]
172 ; CHECK-SD-NEXT: mov w19, w0
173 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
174 ; CHECK-SD-NEXT: bl __powidf2
175 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
176 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
177 ; CHECK-SD-NEXT: mov w0, w19
178 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
179 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
180 ; CHECK-SD-NEXT: bl __powidf2
181 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
182 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
183 ; CHECK-SD-NEXT: mov w0, w19
184 ; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
185 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
186 ; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
187 ; CHECK-SD-NEXT: mov d0, v0.d[1]
188 ; CHECK-SD-NEXT: bl __powidf2
189 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
190 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
191 ; CHECK-SD-NEXT: mov w0, w19
192 ; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
193 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
194 ; CHECK-SD-NEXT: bl __powidf2
195 ; CHECK-SD-NEXT: fmov d1, d0
196 ; CHECK-SD-NEXT: ldp q2, q0, [sp] // 32-byte Folded Reload
197 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
198 ; CHECK-SD-NEXT: mov v1.d[1], v2.d[0]
199 ; CHECK-SD-NEXT: add sp, sp, #64
202 ; CHECK-GI-LABEL: powi_v4f64:
203 ; CHECK-GI: // %bb.0: // %entry
204 ; CHECK-GI-NEXT: sub sp, sp, #80
205 ; CHECK-GI-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
206 ; CHECK-GI-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill
207 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 80
208 ; CHECK-GI-NEXT: .cfi_offset w19, -8
209 ; CHECK-GI-NEXT: .cfi_offset w30, -16
210 ; CHECK-GI-NEXT: .cfi_offset b8, -24
211 ; CHECK-GI-NEXT: .cfi_offset b9, -32
212 ; CHECK-GI-NEXT: str q1, [sp] // 16-byte Folded Spill
213 ; CHECK-GI-NEXT: mov d8, v0.d[1]
214 ; CHECK-GI-NEXT: mov d9, v1.d[1]
215 ; CHECK-GI-NEXT: mov w19, w0
216 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
217 ; CHECK-GI-NEXT: bl __powidf2
218 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
219 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
220 ; CHECK-GI-NEXT: mov w0, w19
221 ; CHECK-GI-NEXT: fmov d0, d8
222 ; CHECK-GI-NEXT: bl __powidf2
223 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
224 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
225 ; CHECK-GI-NEXT: mov w0, w19
226 ; CHECK-GI-NEXT: ldr q0, [sp] // 16-byte Folded Reload
227 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
228 ; CHECK-GI-NEXT: bl __powidf2
229 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
230 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
231 ; CHECK-GI-NEXT: mov w0, w19
232 ; CHECK-GI-NEXT: fmov d0, d9
233 ; CHECK-GI-NEXT: bl __powidf2
234 ; CHECK-GI-NEXT: ldp q1, q2, [sp, #16] // 32-byte Folded Reload
235 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
236 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload
237 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload
238 ; CHECK-GI-NEXT: mov v2.d[1], v1.d[0]
239 ; CHECK-GI-NEXT: ldr q1, [sp] // 16-byte Folded Reload
240 ; CHECK-GI-NEXT: mov v1.d[1], v0.d[0]
241 ; CHECK-GI-NEXT: mov v0.16b, v2.16b
242 ; CHECK-GI-NEXT: add sp, sp, #80
245 %c = call <4 x double> @llvm.powi.v4f64.i32(<4 x double> %a, i32 %b)
249 define <2 x float> @powi_v2f32(<2 x float> %a, i32 %b) {
250 ; CHECK-SD-LABEL: powi_v2f32:
251 ; CHECK-SD: // %bb.0: // %entry
252 ; CHECK-SD-NEXT: sub sp, sp, #48
253 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
254 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
255 ; CHECK-SD-NEXT: .cfi_offset w19, -8
256 ; CHECK-SD-NEXT: .cfi_offset w30, -16
257 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
258 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
259 ; CHECK-SD-NEXT: mov w19, w0
260 ; CHECK-SD-NEXT: mov s0, v0.s[1]
261 ; CHECK-SD-NEXT: bl __powisf2
262 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
263 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
264 ; CHECK-SD-NEXT: mov w0, w19
265 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
266 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
267 ; CHECK-SD-NEXT: bl __powisf2
268 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
269 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
270 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
271 ; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]
272 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
273 ; CHECK-SD-NEXT: add sp, sp, #48
276 ; CHECK-GI-LABEL: powi_v2f32:
277 ; CHECK-GI: // %bb.0: // %entry
278 ; CHECK-GI-NEXT: sub sp, sp, #48
279 ; CHECK-GI-NEXT: str d8, [sp, #16] // 8-byte Folded Spill
280 ; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
281 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 48
282 ; CHECK-GI-NEXT: .cfi_offset w19, -8
283 ; CHECK-GI-NEXT: .cfi_offset w30, -16
284 ; CHECK-GI-NEXT: .cfi_offset b8, -32
285 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
286 ; CHECK-GI-NEXT: mov s8, v0.s[1]
287 ; CHECK-GI-NEXT: mov w19, w0
288 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0
289 ; CHECK-GI-NEXT: bl __powisf2
290 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
291 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
292 ; CHECK-GI-NEXT: mov w0, w19
293 ; CHECK-GI-NEXT: fmov s0, s8
294 ; CHECK-GI-NEXT: bl __powisf2
295 ; CHECK-GI-NEXT: ldr q1, [sp] // 16-byte Folded Reload
296 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
297 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
298 ; CHECK-GI-NEXT: ldr d8, [sp, #16] // 8-byte Folded Reload
299 ; CHECK-GI-NEXT: mov v1.s[1], v0.s[0]
300 ; CHECK-GI-NEXT: fmov d0, d1
301 ; CHECK-GI-NEXT: add sp, sp, #48
304 %c = call <2 x float> @llvm.powi.v2f32.i32(<2 x float> %a, i32 %b)
308 define <3 x float> @powi_v3f32(<3 x float> %a, i32 %b) {
309 ; CHECK-SD-LABEL: powi_v3f32:
310 ; CHECK-SD: // %bb.0: // %entry
311 ; CHECK-SD-NEXT: sub sp, sp, #48
312 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
313 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
314 ; CHECK-SD-NEXT: .cfi_offset w19, -8
315 ; CHECK-SD-NEXT: .cfi_offset w30, -16
316 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
317 ; CHECK-SD-NEXT: mov s0, v0.s[1]
318 ; CHECK-SD-NEXT: mov w19, w0
319 ; CHECK-SD-NEXT: bl __powisf2
320 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
321 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
322 ; CHECK-SD-NEXT: mov w0, w19
323 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
324 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
325 ; CHECK-SD-NEXT: bl __powisf2
326 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
327 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
328 ; CHECK-SD-NEXT: mov w0, w19
329 ; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]
330 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
331 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
332 ; CHECK-SD-NEXT: mov s0, v0.s[2]
333 ; CHECK-SD-NEXT: bl __powisf2
334 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
335 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
336 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
337 ; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]
338 ; CHECK-SD-NEXT: mov v0.16b, v1.16b
339 ; CHECK-SD-NEXT: add sp, sp, #48
342 ; CHECK-GI-LABEL: powi_v3f32:
343 ; CHECK-GI: // %bb.0: // %entry
344 ; CHECK-GI-NEXT: sub sp, sp, #64
345 ; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
346 ; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
347 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
348 ; CHECK-GI-NEXT: .cfi_offset w19, -8
349 ; CHECK-GI-NEXT: .cfi_offset w30, -16
350 ; CHECK-GI-NEXT: .cfi_offset b8, -24
351 ; CHECK-GI-NEXT: .cfi_offset b9, -32
352 ; CHECK-GI-NEXT: mov s8, v0.s[1]
353 ; CHECK-GI-NEXT: mov s9, v0.s[2]
354 ; CHECK-GI-NEXT: mov w19, w0
355 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0
356 ; CHECK-GI-NEXT: bl __powisf2
357 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
358 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
359 ; CHECK-GI-NEXT: mov w0, w19
360 ; CHECK-GI-NEXT: fmov s0, s8
361 ; CHECK-GI-NEXT: bl __powisf2
362 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
363 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
364 ; CHECK-GI-NEXT: mov w0, w19
365 ; CHECK-GI-NEXT: fmov s0, s9
366 ; CHECK-GI-NEXT: bl __powisf2
367 ; CHECK-GI-NEXT: ldp q2, q1, [sp] // 32-byte Folded Reload
368 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
369 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
370 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
371 ; CHECK-GI-NEXT: mov v1.s[1], v2.s[0]
372 ; CHECK-GI-NEXT: mov v1.s[2], v0.s[0]
373 ; CHECK-GI-NEXT: mov v1.s[3], v0.s[0]
374 ; CHECK-GI-NEXT: mov v0.16b, v1.16b
375 ; CHECK-GI-NEXT: add sp, sp, #64
378 %c = call <3 x float> @llvm.powi.v3f32.i32(<3 x float> %a, i32 %b)
382 define <4 x float> @powi_v4f32(<4 x float> %a, i32 %b) {
383 ; CHECK-SD-LABEL: powi_v4f32:
384 ; CHECK-SD: // %bb.0: // %entry
385 ; CHECK-SD-NEXT: sub sp, sp, #48
386 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
387 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
388 ; CHECK-SD-NEXT: .cfi_offset w19, -8
389 ; CHECK-SD-NEXT: .cfi_offset w30, -16
390 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
391 ; CHECK-SD-NEXT: mov s0, v0.s[1]
392 ; CHECK-SD-NEXT: mov w19, w0
393 ; CHECK-SD-NEXT: bl __powisf2
394 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
395 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
396 ; CHECK-SD-NEXT: mov w0, w19
397 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
398 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
399 ; CHECK-SD-NEXT: bl __powisf2
400 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
401 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
402 ; CHECK-SD-NEXT: mov w0, w19
403 ; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]
404 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
405 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
406 ; CHECK-SD-NEXT: mov s0, v0.s[2]
407 ; CHECK-SD-NEXT: bl __powisf2
408 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
409 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
410 ; CHECK-SD-NEXT: mov w0, w19
411 ; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]
412 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
413 ; CHECK-SD-NEXT: mov s0, v0.s[3]
414 ; CHECK-SD-NEXT: str q1, [sp] // 16-byte Folded Spill
415 ; CHECK-SD-NEXT: bl __powisf2
416 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
417 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
418 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
419 ; CHECK-SD-NEXT: mov v1.s[3], v0.s[0]
420 ; CHECK-SD-NEXT: mov v0.16b, v1.16b
421 ; CHECK-SD-NEXT: add sp, sp, #48
424 ; CHECK-GI-LABEL: powi_v4f32:
425 ; CHECK-GI: // %bb.0: // %entry
426 ; CHECK-GI-NEXT: sub sp, sp, #96
427 ; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Folded Spill
428 ; CHECK-GI-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill
429 ; CHECK-GI-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill
430 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 96
431 ; CHECK-GI-NEXT: .cfi_offset w19, -8
432 ; CHECK-GI-NEXT: .cfi_offset w30, -16
433 ; CHECK-GI-NEXT: .cfi_offset b8, -24
434 ; CHECK-GI-NEXT: .cfi_offset b9, -32
435 ; CHECK-GI-NEXT: .cfi_offset b10, -48
436 ; CHECK-GI-NEXT: mov s8, v0.s[1]
437 ; CHECK-GI-NEXT: mov s9, v0.s[2]
438 ; CHECK-GI-NEXT: mov w19, w0
439 ; CHECK-GI-NEXT: mov s10, v0.s[3]
440 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0
441 ; CHECK-GI-NEXT: bl __powisf2
442 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
443 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
444 ; CHECK-GI-NEXT: mov w0, w19
445 ; CHECK-GI-NEXT: fmov s0, s8
446 ; CHECK-GI-NEXT: bl __powisf2
447 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
448 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
449 ; CHECK-GI-NEXT: mov w0, w19
450 ; CHECK-GI-NEXT: fmov s0, s9
451 ; CHECK-GI-NEXT: bl __powisf2
452 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
453 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
454 ; CHECK-GI-NEXT: mov w0, w19
455 ; CHECK-GI-NEXT: fmov s0, s10
456 ; CHECK-GI-NEXT: bl __powisf2
457 ; CHECK-GI-NEXT: ldp q2, q1, [sp, #16] // 32-byte Folded Reload
458 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
459 ; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Folded Reload
460 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload
461 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload
462 ; CHECK-GI-NEXT: mov v1.s[1], v2.s[0]
463 ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
464 ; CHECK-GI-NEXT: mov v1.s[2], v2.s[0]
465 ; CHECK-GI-NEXT: mov v1.s[3], v0.s[0]
466 ; CHECK-GI-NEXT: mov v0.16b, v1.16b
467 ; CHECK-GI-NEXT: add sp, sp, #96
470 %c = call <4 x float> @llvm.powi.v4f32.i32(<4 x float> %a, i32 %b)
474 define <8 x float> @powi_v8f32(<8 x float> %a, i32 %b) {
475 ; CHECK-SD-LABEL: powi_v8f32:
476 ; CHECK-SD: // %bb.0: // %entry
477 ; CHECK-SD-NEXT: sub sp, sp, #64
478 ; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
479 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
480 ; CHECK-SD-NEXT: .cfi_offset w19, -8
481 ; CHECK-SD-NEXT: .cfi_offset w30, -16
482 ; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill
483 ; CHECK-SD-NEXT: mov s0, v0.s[1]
484 ; CHECK-SD-NEXT: mov w19, w0
485 ; CHECK-SD-NEXT: bl __powisf2
486 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
487 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
488 ; CHECK-SD-NEXT: mov w0, w19
489 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
490 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
491 ; CHECK-SD-NEXT: bl __powisf2
492 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
493 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
494 ; CHECK-SD-NEXT: mov w0, w19
495 ; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]
496 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
497 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
498 ; CHECK-SD-NEXT: mov s0, v0.s[2]
499 ; CHECK-SD-NEXT: bl __powisf2
500 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
501 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
502 ; CHECK-SD-NEXT: mov w0, w19
503 ; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]
504 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
505 ; CHECK-SD-NEXT: mov s0, v0.s[3]
506 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
507 ; CHECK-SD-NEXT: bl __powisf2
508 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
509 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
510 ; CHECK-SD-NEXT: mov w0, w19
511 ; CHECK-SD-NEXT: mov v1.s[3], v0.s[0]
512 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
513 ; CHECK-SD-NEXT: mov s0, v0.s[1]
514 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
515 ; CHECK-SD-NEXT: bl __powisf2
516 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
517 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
518 ; CHECK-SD-NEXT: mov w0, w19
519 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
520 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
521 ; CHECK-SD-NEXT: bl __powisf2
522 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
523 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
524 ; CHECK-SD-NEXT: mov w0, w19
525 ; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]
526 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
527 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
528 ; CHECK-SD-NEXT: mov s0, v0.s[2]
529 ; CHECK-SD-NEXT: bl __powisf2
530 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
531 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
532 ; CHECK-SD-NEXT: mov w0, w19
533 ; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]
534 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
535 ; CHECK-SD-NEXT: mov s0, v0.s[3]
536 ; CHECK-SD-NEXT: str q1, [sp] // 16-byte Folded Spill
537 ; CHECK-SD-NEXT: bl __powisf2
538 ; CHECK-SD-NEXT: fmov s2, s0
539 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
540 ; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
541 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
542 ; CHECK-SD-NEXT: mov v1.s[3], v2.s[0]
543 ; CHECK-SD-NEXT: add sp, sp, #64
546 ; CHECK-GI-LABEL: powi_v8f32:
547 ; CHECK-GI: // %bb.0: // %entry
548 ; CHECK-GI-NEXT: sub sp, sp, #176
549 ; CHECK-GI-NEXT: stp d13, d12, [sp, #112] // 16-byte Folded Spill
550 ; CHECK-GI-NEXT: stp d11, d10, [sp, #128] // 16-byte Folded Spill
551 ; CHECK-GI-NEXT: stp d9, d8, [sp, #144] // 16-byte Folded Spill
552 ; CHECK-GI-NEXT: stp x30, x19, [sp, #160] // 16-byte Folded Spill
553 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 176
554 ; CHECK-GI-NEXT: .cfi_offset w19, -8
555 ; CHECK-GI-NEXT: .cfi_offset w30, -16
556 ; CHECK-GI-NEXT: .cfi_offset b8, -24
557 ; CHECK-GI-NEXT: .cfi_offset b9, -32
558 ; CHECK-GI-NEXT: .cfi_offset b10, -40
559 ; CHECK-GI-NEXT: .cfi_offset b11, -48
560 ; CHECK-GI-NEXT: .cfi_offset b12, -56
561 ; CHECK-GI-NEXT: .cfi_offset b13, -64
562 ; CHECK-GI-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
563 ; CHECK-GI-NEXT: mov s8, v0.s[1]
564 ; CHECK-GI-NEXT: mov s9, v0.s[2]
565 ; CHECK-GI-NEXT: mov s10, v0.s[3]
566 ; CHECK-GI-NEXT: mov s11, v1.s[1]
567 ; CHECK-GI-NEXT: mov w19, w0
568 ; CHECK-GI-NEXT: mov s12, v1.s[2]
569 ; CHECK-GI-NEXT: mov s13, v1.s[3]
570 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0
571 ; CHECK-GI-NEXT: bl __powisf2
572 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
573 ; CHECK-GI-NEXT: str q0, [sp, #96] // 16-byte Folded Spill
574 ; CHECK-GI-NEXT: mov w0, w19
575 ; CHECK-GI-NEXT: fmov s0, s8
576 ; CHECK-GI-NEXT: bl __powisf2
577 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
578 ; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Folded Spill
579 ; CHECK-GI-NEXT: mov w0, w19
580 ; CHECK-GI-NEXT: fmov s0, s9
581 ; CHECK-GI-NEXT: bl __powisf2
582 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
583 ; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Folded Spill
584 ; CHECK-GI-NEXT: mov w0, w19
585 ; CHECK-GI-NEXT: fmov s0, s10
586 ; CHECK-GI-NEXT: bl __powisf2
587 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
588 ; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Folded Spill
589 ; CHECK-GI-NEXT: mov w0, w19
590 ; CHECK-GI-NEXT: ldr q0, [sp, #32] // 16-byte Folded Reload
591 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0
592 ; CHECK-GI-NEXT: bl __powisf2
593 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
594 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
595 ; CHECK-GI-NEXT: mov w0, w19
596 ; CHECK-GI-NEXT: fmov s0, s11
597 ; CHECK-GI-NEXT: bl __powisf2
598 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
599 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
600 ; CHECK-GI-NEXT: mov w0, w19
601 ; CHECK-GI-NEXT: fmov s0, s12
602 ; CHECK-GI-NEXT: bl __powisf2
603 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
604 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
605 ; CHECK-GI-NEXT: mov w0, w19
606 ; CHECK-GI-NEXT: fmov s0, s13
607 ; CHECK-GI-NEXT: bl __powisf2
608 ; CHECK-GI-NEXT: ldp q3, q2, [sp, #32] // 32-byte Folded Reload
609 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
610 ; CHECK-GI-NEXT: ldr q1, [sp, #96] // 16-byte Folded Reload
611 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #160] // 16-byte Folded Reload
612 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #144] // 16-byte Folded Reload
613 ; CHECK-GI-NEXT: mov v1.s[1], v2.s[0]
614 ; CHECK-GI-NEXT: ldr q2, [sp, #16] // 16-byte Folded Reload
615 ; CHECK-GI-NEXT: ldp d11, d10, [sp, #128] // 16-byte Folded Reload
616 ; CHECK-GI-NEXT: mov v3.s[1], v2.s[0]
617 ; CHECK-GI-NEXT: ldr q2, [sp, #80] // 16-byte Folded Reload
618 ; CHECK-GI-NEXT: ldp d13, d12, [sp, #112] // 16-byte Folded Reload
619 ; CHECK-GI-NEXT: mov v1.s[2], v2.s[0]
620 ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
621 ; CHECK-GI-NEXT: mov v3.s[2], v2.s[0]
622 ; CHECK-GI-NEXT: ldr q2, [sp, #64] // 16-byte Folded Reload
623 ; CHECK-GI-NEXT: mov v1.s[3], v2.s[0]
624 ; CHECK-GI-NEXT: mov v3.s[3], v0.s[0]
625 ; CHECK-GI-NEXT: mov v2.16b, v1.16b
626 ; CHECK-GI-NEXT: mov v1.16b, v3.16b
627 ; CHECK-GI-NEXT: mov v0.16b, v2.16b
628 ; CHECK-GI-NEXT: add sp, sp, #176
631 %c = call <8 x float> @llvm.powi.v8f32.i32(<8 x float> %a, i32 %b)
635 define <7 x half> @powi_v7f16(<7 x half> %a, i32 %b) {
636 ; CHECK-SD-LABEL: powi_v7f16:
637 ; CHECK-SD: // %bb.0: // %entry
638 ; CHECK-SD-NEXT: sub sp, sp, #48
639 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
640 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
641 ; CHECK-SD-NEXT: .cfi_offset w19, -8
642 ; CHECK-SD-NEXT: .cfi_offset w30, -16
643 ; CHECK-SD-NEXT: mov h1, v0.h[1]
644 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
645 ; CHECK-SD-NEXT: mov w19, w0
646 ; CHECK-SD-NEXT: fcvt s0, h1
647 ; CHECK-SD-NEXT: bl __powisf2
648 ; CHECK-SD-NEXT: fcvt h0, s0
649 ; CHECK-SD-NEXT: mov w0, w19
650 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
651 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
652 ; CHECK-SD-NEXT: fcvt s0, h0
653 ; CHECK-SD-NEXT: bl __powisf2
654 ; CHECK-SD-NEXT: fcvt h0, s0
655 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
656 ; CHECK-SD-NEXT: mov w0, w19
657 ; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]
658 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
659 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
660 ; CHECK-SD-NEXT: mov h0, v0.h[2]
661 ; CHECK-SD-NEXT: fcvt s0, h0
662 ; CHECK-SD-NEXT: bl __powisf2
663 ; CHECK-SD-NEXT: fcvt h0, s0
664 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
665 ; CHECK-SD-NEXT: mov w0, w19
666 ; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]
667 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
668 ; CHECK-SD-NEXT: mov h0, v0.h[3]
669 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
670 ; CHECK-SD-NEXT: fcvt s0, h0
671 ; CHECK-SD-NEXT: bl __powisf2
672 ; CHECK-SD-NEXT: fcvt h0, s0
673 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
674 ; CHECK-SD-NEXT: mov w0, w19
675 ; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]
676 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
677 ; CHECK-SD-NEXT: mov h0, v0.h[4]
678 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
679 ; CHECK-SD-NEXT: fcvt s0, h0
680 ; CHECK-SD-NEXT: bl __powisf2
681 ; CHECK-SD-NEXT: fcvt h0, s0
682 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
683 ; CHECK-SD-NEXT: mov w0, w19
684 ; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]
685 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
686 ; CHECK-SD-NEXT: mov h0, v0.h[5]
687 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
688 ; CHECK-SD-NEXT: fcvt s0, h0
689 ; CHECK-SD-NEXT: bl __powisf2
690 ; CHECK-SD-NEXT: fcvt h0, s0
691 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
692 ; CHECK-SD-NEXT: mov w0, w19
693 ; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]
694 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
695 ; CHECK-SD-NEXT: mov h0, v0.h[6]
696 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
697 ; CHECK-SD-NEXT: fcvt s0, h0
698 ; CHECK-SD-NEXT: bl __powisf2
699 ; CHECK-SD-NEXT: fcvt h0, s0
700 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
701 ; CHECK-SD-NEXT: mov w0, w19
702 ; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]
703 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
704 ; CHECK-SD-NEXT: mov h0, v0.h[7]
705 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
706 ; CHECK-SD-NEXT: fcvt s0, h0
707 ; CHECK-SD-NEXT: bl __powisf2
708 ; CHECK-SD-NEXT: fcvt h1, s0
709 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
710 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
711 ; CHECK-SD-NEXT: mov v0.h[7], v1.h[0]
712 ; CHECK-SD-NEXT: add sp, sp, #48
715 ; CHECK-GI-LABEL: powi_v7f16:
716 ; CHECK-GI: // %bb.0: // %entry
717 ; CHECK-GI-NEXT: sub sp, sp, #160
718 ; CHECK-GI-NEXT: stp d13, d12, [sp, #96] // 16-byte Folded Spill
719 ; CHECK-GI-NEXT: stp d11, d10, [sp, #112] // 16-byte Folded Spill
720 ; CHECK-GI-NEXT: stp d9, d8, [sp, #128] // 16-byte Folded Spill
721 ; CHECK-GI-NEXT: stp x30, x19, [sp, #144] // 16-byte Folded Spill
722 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 160
723 ; CHECK-GI-NEXT: .cfi_offset w19, -8
724 ; CHECK-GI-NEXT: .cfi_offset w30, -16
725 ; CHECK-GI-NEXT: .cfi_offset b8, -24
726 ; CHECK-GI-NEXT: .cfi_offset b9, -32
727 ; CHECK-GI-NEXT: .cfi_offset b10, -40
728 ; CHECK-GI-NEXT: .cfi_offset b11, -48
729 ; CHECK-GI-NEXT: .cfi_offset b12, -56
730 ; CHECK-GI-NEXT: .cfi_offset b13, -64
731 ; CHECK-GI-NEXT: mov h8, v0.h[1]
732 ; CHECK-GI-NEXT: mov h9, v0.h[2]
733 ; CHECK-GI-NEXT: mov w19, w0
734 ; CHECK-GI-NEXT: mov h10, v0.h[3]
735 ; CHECK-GI-NEXT: mov h11, v0.h[4]
736 ; CHECK-GI-NEXT: mov h12, v0.h[5]
737 ; CHECK-GI-NEXT: mov h13, v0.h[6]
738 ; CHECK-GI-NEXT: fcvt s0, h0
739 ; CHECK-GI-NEXT: bl __powisf2
740 ; CHECK-GI-NEXT: fcvt s1, h8
741 ; CHECK-GI-NEXT: fcvt h0, s0
742 ; CHECK-GI-NEXT: mov w0, w19
743 ; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Folded Spill
744 ; CHECK-GI-NEXT: fmov s0, s1
745 ; CHECK-GI-NEXT: bl __powisf2
746 ; CHECK-GI-NEXT: fcvt s1, h9
747 ; CHECK-GI-NEXT: fcvt h0, s0
748 ; CHECK-GI-NEXT: mov w0, w19
749 ; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Folded Spill
750 ; CHECK-GI-NEXT: fmov s0, s1
751 ; CHECK-GI-NEXT: bl __powisf2
752 ; CHECK-GI-NEXT: fcvt s1, h10
753 ; CHECK-GI-NEXT: fcvt h0, s0
754 ; CHECK-GI-NEXT: mov w0, w19
755 ; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Folded Spill
756 ; CHECK-GI-NEXT: fmov s0, s1
757 ; CHECK-GI-NEXT: bl __powisf2
758 ; CHECK-GI-NEXT: fcvt s1, h11
759 ; CHECK-GI-NEXT: fcvt h0, s0
760 ; CHECK-GI-NEXT: mov w0, w19
761 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
762 ; CHECK-GI-NEXT: fmov s0, s1
763 ; CHECK-GI-NEXT: bl __powisf2
764 ; CHECK-GI-NEXT: fcvt s1, h12
765 ; CHECK-GI-NEXT: fcvt h0, s0
766 ; CHECK-GI-NEXT: mov w0, w19
767 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
768 ; CHECK-GI-NEXT: fmov s0, s1
769 ; CHECK-GI-NEXT: bl __powisf2
770 ; CHECK-GI-NEXT: fcvt s1, h13
771 ; CHECK-GI-NEXT: fcvt h0, s0
772 ; CHECK-GI-NEXT: mov w0, w19
773 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
774 ; CHECK-GI-NEXT: fmov s0, s1
775 ; CHECK-GI-NEXT: bl __powisf2
776 ; CHECK-GI-NEXT: ldp q2, q1, [sp, #64] // 32-byte Folded Reload
777 ; CHECK-GI-NEXT: fcvt h0, s0
778 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #144] // 16-byte Folded Reload
779 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #128] // 16-byte Folded Reload
780 ; CHECK-GI-NEXT: mov v1.h[1], v2.h[0]
781 ; CHECK-GI-NEXT: ldp q2, q3, [sp, #32] // 32-byte Folded Reload
782 ; CHECK-GI-NEXT: ldp d11, d10, [sp, #112] // 16-byte Folded Reload
783 ; CHECK-GI-NEXT: ldp d13, d12, [sp, #96] // 16-byte Folded Reload
784 ; CHECK-GI-NEXT: mov v1.h[2], v3.h[0]
785 ; CHECK-GI-NEXT: mov v1.h[3], v2.h[0]
786 ; CHECK-GI-NEXT: ldp q2, q3, [sp] // 32-byte Folded Reload
787 ; CHECK-GI-NEXT: mov v1.h[4], v3.h[0]
788 ; CHECK-GI-NEXT: mov v1.h[5], v2.h[0]
789 ; CHECK-GI-NEXT: mov v1.h[6], v0.h[0]
790 ; CHECK-GI-NEXT: mov v1.h[7], v0.h[0]
791 ; CHECK-GI-NEXT: mov v0.16b, v1.16b
792 ; CHECK-GI-NEXT: add sp, sp, #160
795 %c = call <7 x half> @llvm.powi.v7f16.i32(<7 x half> %a, i32 %b)
799 define <4 x half> @powi_v4f16(<4 x half> %a, i32 %b) {
800 ; CHECK-SD-LABEL: powi_v4f16:
801 ; CHECK-SD: // %bb.0: // %entry
802 ; CHECK-SD-NEXT: sub sp, sp, #48
803 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
804 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
805 ; CHECK-SD-NEXT: .cfi_offset w19, -8
806 ; CHECK-SD-NEXT: .cfi_offset w30, -16
807 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
808 ; CHECK-SD-NEXT: mov h1, v0.h[1]
809 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
810 ; CHECK-SD-NEXT: mov w19, w0
811 ; CHECK-SD-NEXT: fcvt s0, h1
812 ; CHECK-SD-NEXT: bl __powisf2
813 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
814 ; CHECK-SD-NEXT: fcvt h0, s0
815 ; CHECK-SD-NEXT: mov w0, w19
816 ; CHECK-SD-NEXT: fcvt s1, h1
817 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
818 ; CHECK-SD-NEXT: fmov s0, s1
819 ; CHECK-SD-NEXT: bl __powisf2
820 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
821 ; CHECK-SD-NEXT: fcvt h2, s0
822 ; CHECK-SD-NEXT: mov w0, w19
823 ; CHECK-SD-NEXT: mov h1, v1.h[2]
824 ; CHECK-SD-NEXT: fcvt s0, h1
825 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
826 ; CHECK-SD-NEXT: mov v2.h[1], v1.h[0]
827 ; CHECK-SD-NEXT: str q2, [sp] // 16-byte Folded Spill
828 ; CHECK-SD-NEXT: bl __powisf2
829 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
830 ; CHECK-SD-NEXT: fcvt h2, s0
831 ; CHECK-SD-NEXT: mov w0, w19
832 ; CHECK-SD-NEXT: mov h1, v1.h[3]
833 ; CHECK-SD-NEXT: fcvt s0, h1
834 ; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Folded Reload
835 ; CHECK-SD-NEXT: mov v1.h[2], v2.h[0]
836 ; CHECK-SD-NEXT: str q1, [sp] // 16-byte Folded Spill
837 ; CHECK-SD-NEXT: bl __powisf2
838 ; CHECK-SD-NEXT: fcvt h1, s0
839 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
840 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
841 ; CHECK-SD-NEXT: mov v0.h[3], v1.h[0]
842 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
843 ; CHECK-SD-NEXT: add sp, sp, #48
846 ; CHECK-GI-LABEL: powi_v4f16:
847 ; CHECK-GI: // %bb.0: // %entry
848 ; CHECK-GI-NEXT: sub sp, sp, #96
849 ; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Folded Spill
850 ; CHECK-GI-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill
851 ; CHECK-GI-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill
852 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 96
853 ; CHECK-GI-NEXT: .cfi_offset w19, -8
854 ; CHECK-GI-NEXT: .cfi_offset w30, -16
855 ; CHECK-GI-NEXT: .cfi_offset b8, -24
856 ; CHECK-GI-NEXT: .cfi_offset b9, -32
857 ; CHECK-GI-NEXT: .cfi_offset b10, -48
858 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
859 ; CHECK-GI-NEXT: mov h8, v0.h[1]
860 ; CHECK-GI-NEXT: mov h9, v0.h[2]
861 ; CHECK-GI-NEXT: mov w19, w0
862 ; CHECK-GI-NEXT: mov h10, v0.h[3]
863 ; CHECK-GI-NEXT: fcvt s0, h0
864 ; CHECK-GI-NEXT: bl __powisf2
865 ; CHECK-GI-NEXT: fcvt s1, h8
866 ; CHECK-GI-NEXT: fcvt h0, s0
867 ; CHECK-GI-NEXT: mov w0, w19
868 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
869 ; CHECK-GI-NEXT: fmov s0, s1
870 ; CHECK-GI-NEXT: bl __powisf2
871 ; CHECK-GI-NEXT: fcvt s1, h9
872 ; CHECK-GI-NEXT: fcvt h0, s0
873 ; CHECK-GI-NEXT: mov w0, w19
874 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
875 ; CHECK-GI-NEXT: fmov s0, s1
876 ; CHECK-GI-NEXT: bl __powisf2
877 ; CHECK-GI-NEXT: fcvt s1, h10
878 ; CHECK-GI-NEXT: fcvt h0, s0
879 ; CHECK-GI-NEXT: mov w0, w19
880 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
881 ; CHECK-GI-NEXT: fmov s0, s1
882 ; CHECK-GI-NEXT: bl __powisf2
883 ; CHECK-GI-NEXT: ldp q2, q1, [sp, #16] // 32-byte Folded Reload
884 ; CHECK-GI-NEXT: fcvt h0, s0
885 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload
886 ; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Folded Reload
887 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload
888 ; CHECK-GI-NEXT: mov v1.h[1], v2.h[0]
889 ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
890 ; CHECK-GI-NEXT: mov v1.h[2], v2.h[0]
891 ; CHECK-GI-NEXT: mov v1.h[3], v0.h[0]
892 ; CHECK-GI-NEXT: mov v0.16b, v1.16b
893 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
894 ; CHECK-GI-NEXT: add sp, sp, #96
897 %c = call <4 x half> @llvm.powi.v4f16.i32(<4 x half> %a, i32 %b)
901 define <8 x half> @powi_v8f16(<8 x half> %a, i32 %b) {
902 ; CHECK-SD-LABEL: powi_v8f16:
903 ; CHECK-SD: // %bb.0: // %entry
904 ; CHECK-SD-NEXT: sub sp, sp, #48
905 ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
906 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
907 ; CHECK-SD-NEXT: .cfi_offset w19, -8
908 ; CHECK-SD-NEXT: .cfi_offset w30, -16
909 ; CHECK-SD-NEXT: mov h1, v0.h[1]
910 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
911 ; CHECK-SD-NEXT: mov w19, w0
912 ; CHECK-SD-NEXT: fcvt s0, h1
913 ; CHECK-SD-NEXT: bl __powisf2
914 ; CHECK-SD-NEXT: fcvt h0, s0
915 ; CHECK-SD-NEXT: mov w0, w19
916 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
917 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
918 ; CHECK-SD-NEXT: fcvt s0, h0
919 ; CHECK-SD-NEXT: bl __powisf2
920 ; CHECK-SD-NEXT: fcvt h0, s0
921 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
922 ; CHECK-SD-NEXT: mov w0, w19
923 ; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]
924 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
925 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
926 ; CHECK-SD-NEXT: mov h0, v0.h[2]
927 ; CHECK-SD-NEXT: fcvt s0, h0
928 ; CHECK-SD-NEXT: bl __powisf2
929 ; CHECK-SD-NEXT: fcvt h0, s0
930 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
931 ; CHECK-SD-NEXT: mov w0, w19
932 ; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]
933 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
934 ; CHECK-SD-NEXT: mov h0, v0.h[3]
935 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
936 ; CHECK-SD-NEXT: fcvt s0, h0
937 ; CHECK-SD-NEXT: bl __powisf2
938 ; CHECK-SD-NEXT: fcvt h0, s0
939 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
940 ; CHECK-SD-NEXT: mov w0, w19
941 ; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]
942 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
943 ; CHECK-SD-NEXT: mov h0, v0.h[4]
944 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
945 ; CHECK-SD-NEXT: fcvt s0, h0
946 ; CHECK-SD-NEXT: bl __powisf2
947 ; CHECK-SD-NEXT: fcvt h0, s0
948 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
949 ; CHECK-SD-NEXT: mov w0, w19
950 ; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]
951 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
952 ; CHECK-SD-NEXT: mov h0, v0.h[5]
953 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
954 ; CHECK-SD-NEXT: fcvt s0, h0
955 ; CHECK-SD-NEXT: bl __powisf2
956 ; CHECK-SD-NEXT: fcvt h0, s0
957 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
958 ; CHECK-SD-NEXT: mov w0, w19
959 ; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]
960 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
961 ; CHECK-SD-NEXT: mov h0, v0.h[6]
962 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
963 ; CHECK-SD-NEXT: fcvt s0, h0
964 ; CHECK-SD-NEXT: bl __powisf2
965 ; CHECK-SD-NEXT: fcvt h0, s0
966 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
967 ; CHECK-SD-NEXT: mov w0, w19
968 ; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]
969 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
970 ; CHECK-SD-NEXT: mov h0, v0.h[7]
971 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
972 ; CHECK-SD-NEXT: fcvt s0, h0
973 ; CHECK-SD-NEXT: bl __powisf2
974 ; CHECK-SD-NEXT: fcvt h1, s0
975 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
976 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
977 ; CHECK-SD-NEXT: mov v0.h[7], v1.h[0]
978 ; CHECK-SD-NEXT: add sp, sp, #48
981 ; CHECK-GI-LABEL: powi_v8f16:
982 ; CHECK-GI: // %bb.0: // %entry
983 ; CHECK-GI-NEXT: sub sp, sp, #192
984 ; CHECK-GI-NEXT: str d14, [sp, #112] // 8-byte Folded Spill
985 ; CHECK-GI-NEXT: stp d13, d12, [sp, #128] // 16-byte Folded Spill
986 ; CHECK-GI-NEXT: stp d11, d10, [sp, #144] // 16-byte Folded Spill
987 ; CHECK-GI-NEXT: stp d9, d8, [sp, #160] // 16-byte Folded Spill
988 ; CHECK-GI-NEXT: stp x30, x19, [sp, #176] // 16-byte Folded Spill
989 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 192
990 ; CHECK-GI-NEXT: .cfi_offset w19, -8
991 ; CHECK-GI-NEXT: .cfi_offset w30, -16
992 ; CHECK-GI-NEXT: .cfi_offset b8, -24
993 ; CHECK-GI-NEXT: .cfi_offset b9, -32
994 ; CHECK-GI-NEXT: .cfi_offset b10, -40
995 ; CHECK-GI-NEXT: .cfi_offset b11, -48
996 ; CHECK-GI-NEXT: .cfi_offset b12, -56
997 ; CHECK-GI-NEXT: .cfi_offset b13, -64
998 ; CHECK-GI-NEXT: .cfi_offset b14, -80
999 ; CHECK-GI-NEXT: mov h8, v0.h[1]
1000 ; CHECK-GI-NEXT: mov h9, v0.h[2]
1001 ; CHECK-GI-NEXT: mov w19, w0
1002 ; CHECK-GI-NEXT: mov h10, v0.h[3]
1003 ; CHECK-GI-NEXT: mov h11, v0.h[4]
1004 ; CHECK-GI-NEXT: mov h12, v0.h[5]
1005 ; CHECK-GI-NEXT: mov h13, v0.h[6]
1006 ; CHECK-GI-NEXT: mov h14, v0.h[7]
1007 ; CHECK-GI-NEXT: fcvt s0, h0
1008 ; CHECK-GI-NEXT: bl __powisf2
1009 ; CHECK-GI-NEXT: fcvt s1, h8
1010 ; CHECK-GI-NEXT: fcvt h0, s0
1011 ; CHECK-GI-NEXT: mov w0, w19
1012 ; CHECK-GI-NEXT: str q0, [sp, #96] // 16-byte Folded Spill
1013 ; CHECK-GI-NEXT: fmov s0, s1
1014 ; CHECK-GI-NEXT: bl __powisf2
1015 ; CHECK-GI-NEXT: fcvt s1, h9
1016 ; CHECK-GI-NEXT: fcvt h0, s0
1017 ; CHECK-GI-NEXT: mov w0, w19
1018 ; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Folded Spill
1019 ; CHECK-GI-NEXT: fmov s0, s1
1020 ; CHECK-GI-NEXT: bl __powisf2
1021 ; CHECK-GI-NEXT: fcvt s1, h10
1022 ; CHECK-GI-NEXT: fcvt h0, s0
1023 ; CHECK-GI-NEXT: mov w0, w19
1024 ; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Folded Spill
1025 ; CHECK-GI-NEXT: fmov s0, s1
1026 ; CHECK-GI-NEXT: bl __powisf2
1027 ; CHECK-GI-NEXT: fcvt s1, h11
1028 ; CHECK-GI-NEXT: fcvt h0, s0
1029 ; CHECK-GI-NEXT: mov w0, w19
1030 ; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Folded Spill
1031 ; CHECK-GI-NEXT: fmov s0, s1
1032 ; CHECK-GI-NEXT: bl __powisf2
1033 ; CHECK-GI-NEXT: fcvt s1, h12
1034 ; CHECK-GI-NEXT: fcvt h0, s0
1035 ; CHECK-GI-NEXT: mov w0, w19
1036 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
1037 ; CHECK-GI-NEXT: fmov s0, s1
1038 ; CHECK-GI-NEXT: bl __powisf2
1039 ; CHECK-GI-NEXT: fcvt s1, h13
1040 ; CHECK-GI-NEXT: fcvt h0, s0
1041 ; CHECK-GI-NEXT: mov w0, w19
1042 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
1043 ; CHECK-GI-NEXT: fmov s0, s1
1044 ; CHECK-GI-NEXT: bl __powisf2
1045 ; CHECK-GI-NEXT: fcvt s1, h14
1046 ; CHECK-GI-NEXT: fcvt h0, s0
1047 ; CHECK-GI-NEXT: mov w0, w19
1048 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
1049 ; CHECK-GI-NEXT: fmov s0, s1
1050 ; CHECK-GI-NEXT: bl __powisf2
1051 ; CHECK-GI-NEXT: ldp q2, q1, [sp, #80] // 32-byte Folded Reload
1052 ; CHECK-GI-NEXT: fcvt h0, s0
1053 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #176] // 16-byte Folded Reload
1054 ; CHECK-GI-NEXT: ldr d14, [sp, #112] // 8-byte Folded Reload
1055 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #160] // 16-byte Folded Reload
1056 ; CHECK-GI-NEXT: mov v1.h[1], v2.h[0]
1057 ; CHECK-GI-NEXT: ldp q2, q3, [sp, #48] // 32-byte Folded Reload
1058 ; CHECK-GI-NEXT: ldp d11, d10, [sp, #144] // 16-byte Folded Reload
1059 ; CHECK-GI-NEXT: ldp d13, d12, [sp, #128] // 16-byte Folded Reload
1060 ; CHECK-GI-NEXT: mov v1.h[2], v3.h[0]
1061 ; CHECK-GI-NEXT: mov v1.h[3], v2.h[0]
1062 ; CHECK-GI-NEXT: ldp q2, q3, [sp, #16] // 32-byte Folded Reload
1063 ; CHECK-GI-NEXT: mov v1.h[4], v3.h[0]
1064 ; CHECK-GI-NEXT: mov v1.h[5], v2.h[0]
1065 ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
1066 ; CHECK-GI-NEXT: mov v1.h[6], v2.h[0]
1067 ; CHECK-GI-NEXT: mov v1.h[7], v0.h[0]
1068 ; CHECK-GI-NEXT: mov v0.16b, v1.16b
1069 ; CHECK-GI-NEXT: add sp, sp, #192
1070 ; CHECK-GI-NEXT: ret
1072 %c = call <8 x half> @llvm.powi.v8f16.i32(<8 x half> %a, i32 %b)
1076 define <16 x half> @powi_v16f16(<16 x half> %a, i32 %b) {
1077 ; CHECK-SD-LABEL: powi_v16f16:
1078 ; CHECK-SD: // %bb.0: // %entry
1079 ; CHECK-SD-NEXT: sub sp, sp, #64
1080 ; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
1081 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
1082 ; CHECK-SD-NEXT: .cfi_offset w19, -8
1083 ; CHECK-SD-NEXT: .cfi_offset w30, -16
1084 ; CHECK-SD-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill
1085 ; CHECK-SD-NEXT: mov h1, v0.h[1]
1086 ; CHECK-SD-NEXT: mov w19, w0
1087 ; CHECK-SD-NEXT: fcvt s0, h1
1088 ; CHECK-SD-NEXT: bl __powisf2
1089 ; CHECK-SD-NEXT: fcvt h0, s0
1090 ; CHECK-SD-NEXT: mov w0, w19
1091 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
1092 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1093 ; CHECK-SD-NEXT: fcvt s0, h0
1094 ; CHECK-SD-NEXT: bl __powisf2
1095 ; CHECK-SD-NEXT: fcvt h0, s0
1096 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
1097 ; CHECK-SD-NEXT: mov w0, w19
1098 ; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]
1099 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
1100 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1101 ; CHECK-SD-NEXT: mov h0, v0.h[2]
1102 ; CHECK-SD-NEXT: fcvt s0, h0
1103 ; CHECK-SD-NEXT: bl __powisf2
1104 ; CHECK-SD-NEXT: fcvt h0, s0
1105 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
1106 ; CHECK-SD-NEXT: mov w0, w19
1107 ; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]
1108 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1109 ; CHECK-SD-NEXT: mov h0, v0.h[3]
1110 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
1111 ; CHECK-SD-NEXT: fcvt s0, h0
1112 ; CHECK-SD-NEXT: bl __powisf2
1113 ; CHECK-SD-NEXT: fcvt h0, s0
1114 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
1115 ; CHECK-SD-NEXT: mov w0, w19
1116 ; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]
1117 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1118 ; CHECK-SD-NEXT: mov h0, v0.h[4]
1119 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
1120 ; CHECK-SD-NEXT: fcvt s0, h0
1121 ; CHECK-SD-NEXT: bl __powisf2
1122 ; CHECK-SD-NEXT: fcvt h0, s0
1123 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
1124 ; CHECK-SD-NEXT: mov w0, w19
1125 ; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]
1126 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1127 ; CHECK-SD-NEXT: mov h0, v0.h[5]
1128 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
1129 ; CHECK-SD-NEXT: fcvt s0, h0
1130 ; CHECK-SD-NEXT: bl __powisf2
1131 ; CHECK-SD-NEXT: fcvt h0, s0
1132 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
1133 ; CHECK-SD-NEXT: mov w0, w19
1134 ; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]
1135 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1136 ; CHECK-SD-NEXT: mov h0, v0.h[6]
1137 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
1138 ; CHECK-SD-NEXT: fcvt s0, h0
1139 ; CHECK-SD-NEXT: bl __powisf2
1140 ; CHECK-SD-NEXT: fcvt h0, s0
1141 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
1142 ; CHECK-SD-NEXT: mov w0, w19
1143 ; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]
1144 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1145 ; CHECK-SD-NEXT: mov h0, v0.h[7]
1146 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
1147 ; CHECK-SD-NEXT: fcvt s0, h0
1148 ; CHECK-SD-NEXT: bl __powisf2
1149 ; CHECK-SD-NEXT: fcvt h0, s0
1150 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
1151 ; CHECK-SD-NEXT: mov w0, w19
1152 ; CHECK-SD-NEXT: mov v1.h[7], v0.h[0]
1153 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1154 ; CHECK-SD-NEXT: mov h0, v0.h[1]
1155 ; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Folded Spill
1156 ; CHECK-SD-NEXT: fcvt s0, h0
1157 ; CHECK-SD-NEXT: bl __powisf2
1158 ; CHECK-SD-NEXT: fcvt h0, s0
1159 ; CHECK-SD-NEXT: mov w0, w19
1160 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
1161 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1162 ; CHECK-SD-NEXT: fcvt s0, h0
1163 ; CHECK-SD-NEXT: bl __powisf2
1164 ; CHECK-SD-NEXT: fcvt h0, s0
1165 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
1166 ; CHECK-SD-NEXT: mov w0, w19
1167 ; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]
1168 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
1169 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1170 ; CHECK-SD-NEXT: mov h0, v0.h[2]
1171 ; CHECK-SD-NEXT: fcvt s0, h0
1172 ; CHECK-SD-NEXT: bl __powisf2
1173 ; CHECK-SD-NEXT: fcvt h0, s0
1174 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
1175 ; CHECK-SD-NEXT: mov w0, w19
1176 ; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]
1177 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1178 ; CHECK-SD-NEXT: mov h0, v0.h[3]
1179 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
1180 ; CHECK-SD-NEXT: fcvt s0, h0
1181 ; CHECK-SD-NEXT: bl __powisf2
1182 ; CHECK-SD-NEXT: fcvt h0, s0
1183 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
1184 ; CHECK-SD-NEXT: mov w0, w19
1185 ; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]
1186 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1187 ; CHECK-SD-NEXT: mov h0, v0.h[4]
1188 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
1189 ; CHECK-SD-NEXT: fcvt s0, h0
1190 ; CHECK-SD-NEXT: bl __powisf2
1191 ; CHECK-SD-NEXT: fcvt h0, s0
1192 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
1193 ; CHECK-SD-NEXT: mov w0, w19
1194 ; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]
1195 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1196 ; CHECK-SD-NEXT: mov h0, v0.h[5]
1197 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
1198 ; CHECK-SD-NEXT: fcvt s0, h0
1199 ; CHECK-SD-NEXT: bl __powisf2
1200 ; CHECK-SD-NEXT: fcvt h0, s0
1201 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
1202 ; CHECK-SD-NEXT: mov w0, w19
1203 ; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]
1204 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1205 ; CHECK-SD-NEXT: mov h0, v0.h[6]
1206 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
1207 ; CHECK-SD-NEXT: fcvt s0, h0
1208 ; CHECK-SD-NEXT: bl __powisf2
1209 ; CHECK-SD-NEXT: fcvt h0, s0
1210 ; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Folded Reload
1211 ; CHECK-SD-NEXT: mov w0, w19
1212 ; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]
1213 ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1214 ; CHECK-SD-NEXT: mov h0, v0.h[7]
1215 ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
1216 ; CHECK-SD-NEXT: fcvt s0, h0
1217 ; CHECK-SD-NEXT: bl __powisf2
1218 ; CHECK-SD-NEXT: fmov s1, s0
1219 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
1220 ; CHECK-SD-NEXT: fcvt h2, s1
1221 ; CHECK-SD-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
1222 ; CHECK-SD-NEXT: mov v1.h[7], v2.h[0]
1223 ; CHECK-SD-NEXT: add sp, sp, #64
1224 ; CHECK-SD-NEXT: ret
1226 ; CHECK-GI-LABEL: powi_v16f16:
1227 ; CHECK-GI: // %bb.0: // %entry
1228 ; CHECK-GI-NEXT: sub sp, sp, #336
1229 ; CHECK-GI-NEXT: stp d15, d14, [sp, #240] // 16-byte Folded Spill
1230 ; CHECK-GI-NEXT: stp d13, d12, [sp, #256] // 16-byte Folded Spill
1231 ; CHECK-GI-NEXT: stp d11, d10, [sp, #272] // 16-byte Folded Spill
1232 ; CHECK-GI-NEXT: stp d9, d8, [sp, #288] // 16-byte Folded Spill
1233 ; CHECK-GI-NEXT: str x29, [sp, #304] // 8-byte Folded Spill
1234 ; CHECK-GI-NEXT: stp x30, x19, [sp, #320] // 16-byte Folded Spill
1235 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 336
1236 ; CHECK-GI-NEXT: .cfi_offset w19, -8
1237 ; CHECK-GI-NEXT: .cfi_offset w30, -16
1238 ; CHECK-GI-NEXT: .cfi_offset w29, -32
1239 ; CHECK-GI-NEXT: .cfi_offset b8, -40
1240 ; CHECK-GI-NEXT: .cfi_offset b9, -48
1241 ; CHECK-GI-NEXT: .cfi_offset b10, -56
1242 ; CHECK-GI-NEXT: .cfi_offset b11, -64
1243 ; CHECK-GI-NEXT: .cfi_offset b12, -72
1244 ; CHECK-GI-NEXT: .cfi_offset b13, -80
1245 ; CHECK-GI-NEXT: .cfi_offset b14, -88
1246 ; CHECK-GI-NEXT: .cfi_offset b15, -96
1247 ; CHECK-GI-NEXT: mov v2.16b, v1.16b
1248 ; CHECK-GI-NEXT: str q1, [sp, #64] // 16-byte Folded Spill
1249 ; CHECK-GI-NEXT: mov h14, v1.h[1]
1250 ; CHECK-GI-NEXT: mov h1, v1.h[2]
1251 ; CHECK-GI-NEXT: mov h8, v0.h[1]
1252 ; CHECK-GI-NEXT: mov w19, w0
1253 ; CHECK-GI-NEXT: mov h9, v0.h[2]
1254 ; CHECK-GI-NEXT: mov h10, v0.h[3]
1255 ; CHECK-GI-NEXT: mov h11, v0.h[4]
1256 ; CHECK-GI-NEXT: mov h12, v0.h[5]
1257 ; CHECK-GI-NEXT: mov h13, v0.h[6]
1258 ; CHECK-GI-NEXT: mov h15, v0.h[7]
1259 ; CHECK-GI-NEXT: fcvt s0, h0
1260 ; CHECK-GI-NEXT: str h1, [sp, #16] // 2-byte Folded Spill
1261 ; CHECK-GI-NEXT: mov h1, v2.h[3]
1262 ; CHECK-GI-NEXT: str h1, [sp, #32] // 2-byte Folded Spill
1263 ; CHECK-GI-NEXT: mov h1, v2.h[4]
1264 ; CHECK-GI-NEXT: str h1, [sp, #48] // 2-byte Folded Spill
1265 ; CHECK-GI-NEXT: mov h1, v2.h[5]
1266 ; CHECK-GI-NEXT: str h1, [sp, #80] // 2-byte Folded Spill
1267 ; CHECK-GI-NEXT: mov h1, v2.h[6]
1268 ; CHECK-GI-NEXT: str h1, [sp, #112] // 2-byte Folded Spill
1269 ; CHECK-GI-NEXT: mov h1, v2.h[7]
1270 ; CHECK-GI-NEXT: str h1, [sp, #176] // 2-byte Folded Spill
1271 ; CHECK-GI-NEXT: bl __powisf2
1272 ; CHECK-GI-NEXT: fcvt s1, h8
1273 ; CHECK-GI-NEXT: fcvt h0, s0
1274 ; CHECK-GI-NEXT: mov w0, w19
1275 ; CHECK-GI-NEXT: str q0, [sp, #192] // 16-byte Folded Spill
1276 ; CHECK-GI-NEXT: fmov s0, s1
1277 ; CHECK-GI-NEXT: bl __powisf2
1278 ; CHECK-GI-NEXT: fcvt s1, h9
1279 ; CHECK-GI-NEXT: fcvt h0, s0
1280 ; CHECK-GI-NEXT: mov w0, w19
1281 ; CHECK-GI-NEXT: str q0, [sp, #144] // 16-byte Folded Spill
1282 ; CHECK-GI-NEXT: fmov s0, s1
1283 ; CHECK-GI-NEXT: bl __powisf2
1284 ; CHECK-GI-NEXT: fcvt s1, h10
1285 ; CHECK-GI-NEXT: fcvt h0, s0
1286 ; CHECK-GI-NEXT: mov w0, w19
1287 ; CHECK-GI-NEXT: str q0, [sp, #224] // 16-byte Folded Spill
1288 ; CHECK-GI-NEXT: fmov s0, s1
1289 ; CHECK-GI-NEXT: bl __powisf2
1290 ; CHECK-GI-NEXT: fcvt s1, h11
1291 ; CHECK-GI-NEXT: fcvt h0, s0
1292 ; CHECK-GI-NEXT: mov w0, w19
1293 ; CHECK-GI-NEXT: str q0, [sp, #208] // 16-byte Folded Spill
1294 ; CHECK-GI-NEXT: fmov s0, s1
1295 ; CHECK-GI-NEXT: bl __powisf2
1296 ; CHECK-GI-NEXT: fcvt s1, h12
1297 ; CHECK-GI-NEXT: fcvt h0, s0
1298 ; CHECK-GI-NEXT: mov w0, w19
1299 ; CHECK-GI-NEXT: str q0, [sp, #160] // 16-byte Folded Spill
1300 ; CHECK-GI-NEXT: fmov s0, s1
1301 ; CHECK-GI-NEXT: bl __powisf2
1302 ; CHECK-GI-NEXT: fcvt s1, h13
1303 ; CHECK-GI-NEXT: fcvt h0, s0
1304 ; CHECK-GI-NEXT: mov w0, w19
1305 ; CHECK-GI-NEXT: str q0, [sp, #128] // 16-byte Folded Spill
1306 ; CHECK-GI-NEXT: fmov s0, s1
1307 ; CHECK-GI-NEXT: bl __powisf2
1308 ; CHECK-GI-NEXT: fcvt s1, h15
1309 ; CHECK-GI-NEXT: fcvt h0, s0
1310 ; CHECK-GI-NEXT: mov w0, w19
1311 ; CHECK-GI-NEXT: str q0, [sp, #96] // 16-byte Folded Spill
1312 ; CHECK-GI-NEXT: fmov s0, s1
1313 ; CHECK-GI-NEXT: bl __powisf2
1314 ; CHECK-GI-NEXT: ldr q1, [sp, #64] // 16-byte Folded Reload
1315 ; CHECK-GI-NEXT: fcvt h0, s0
1316 ; CHECK-GI-NEXT: mov w0, w19
1317 ; CHECK-GI-NEXT: fcvt s1, h1
1318 ; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Folded Spill
1319 ; CHECK-GI-NEXT: fmov s0, s1
1320 ; CHECK-GI-NEXT: bl __powisf2
1321 ; CHECK-GI-NEXT: fcvt s1, h14
1322 ; CHECK-GI-NEXT: fcvt h0, s0
1323 ; CHECK-GI-NEXT: mov w0, w19
1324 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
1325 ; CHECK-GI-NEXT: fmov s0, s1
1326 ; CHECK-GI-NEXT: bl __powisf2
1327 ; CHECK-GI-NEXT: ldr h1, [sp, #16] // 2-byte Folded Reload
1328 ; CHECK-GI-NEXT: fcvt h0, s0
1329 ; CHECK-GI-NEXT: mov w0, w19
1330 ; CHECK-GI-NEXT: fcvt s1, h1
1331 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
1332 ; CHECK-GI-NEXT: fmov s0, s1
1333 ; CHECK-GI-NEXT: bl __powisf2
1334 ; CHECK-GI-NEXT: ldr h1, [sp, #32] // 2-byte Folded Reload
1335 ; CHECK-GI-NEXT: fcvt h0, s0
1336 ; CHECK-GI-NEXT: mov w0, w19
1337 ; CHECK-GI-NEXT: fcvt s1, h1
1338 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
1339 ; CHECK-GI-NEXT: fmov s0, s1
1340 ; CHECK-GI-NEXT: bl __powisf2
1341 ; CHECK-GI-NEXT: ldr h1, [sp, #48] // 2-byte Folded Reload
1342 ; CHECK-GI-NEXT: fcvt h0, s0
1343 ; CHECK-GI-NEXT: mov w0, w19
1344 ; CHECK-GI-NEXT: fcvt s1, h1
1345 ; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Folded Spill
1346 ; CHECK-GI-NEXT: fmov s0, s1
1347 ; CHECK-GI-NEXT: bl __powisf2
1348 ; CHECK-GI-NEXT: ldr h1, [sp, #80] // 2-byte Folded Reload
1349 ; CHECK-GI-NEXT: fcvt h0, s0
1350 ; CHECK-GI-NEXT: mov w0, w19
1351 ; CHECK-GI-NEXT: fcvt s1, h1
1352 ; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Folded Spill
1353 ; CHECK-GI-NEXT: fmov s0, s1
1354 ; CHECK-GI-NEXT: bl __powisf2
1355 ; CHECK-GI-NEXT: ldr h1, [sp, #112] // 2-byte Folded Reload
1356 ; CHECK-GI-NEXT: fcvt h0, s0
1357 ; CHECK-GI-NEXT: mov w0, w19
1358 ; CHECK-GI-NEXT: fcvt s1, h1
1359 ; CHECK-GI-NEXT: str q0, [sp, #112] // 16-byte Folded Spill
1360 ; CHECK-GI-NEXT: fmov s0, s1
1361 ; CHECK-GI-NEXT: bl __powisf2
1362 ; CHECK-GI-NEXT: ldr h1, [sp, #176] // 2-byte Folded Reload
1363 ; CHECK-GI-NEXT: fcvt h0, s0
1364 ; CHECK-GI-NEXT: mov w0, w19
1365 ; CHECK-GI-NEXT: fcvt s1, h1
1366 ; CHECK-GI-NEXT: str q0, [sp, #176] // 16-byte Folded Spill
1367 ; CHECK-GI-NEXT: fmov s0, s1
1368 ; CHECK-GI-NEXT: bl __powisf2
1369 ; CHECK-GI-NEXT: ldr q3, [sp, #192] // 16-byte Folded Reload
1370 ; CHECK-GI-NEXT: ldr q2, [sp, #144] // 16-byte Folded Reload
1371 ; CHECK-GI-NEXT: ldr x29, [sp, #304] // 8-byte Folded Reload
1372 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #320] // 16-byte Folded Reload
1373 ; CHECK-GI-NEXT: mov v3.h[1], v2.h[0]
1374 ; CHECK-GI-NEXT: ldp q1, q2, [sp] // 32-byte Folded Reload
1375 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #288] // 16-byte Folded Reload
1376 ; CHECK-GI-NEXT: ldp d11, d10, [sp, #272] // 16-byte Folded Reload
1377 ; CHECK-GI-NEXT: mov v1.h[1], v2.h[0]
1378 ; CHECK-GI-NEXT: ldr q2, [sp, #224] // 16-byte Folded Reload
1379 ; CHECK-GI-NEXT: ldp d13, d12, [sp, #256] // 16-byte Folded Reload
1380 ; CHECK-GI-NEXT: mov v3.h[2], v2.h[0]
1381 ; CHECK-GI-NEXT: ldr q2, [sp, #32] // 16-byte Folded Reload
1382 ; CHECK-GI-NEXT: ldp d15, d14, [sp, #240] // 16-byte Folded Reload
1383 ; CHECK-GI-NEXT: mov v1.h[2], v2.h[0]
1384 ; CHECK-GI-NEXT: ldr q2, [sp, #208] // 16-byte Folded Reload
1385 ; CHECK-GI-NEXT: mov v3.h[3], v2.h[0]
1386 ; CHECK-GI-NEXT: ldr q2, [sp, #48] // 16-byte Folded Reload
1387 ; CHECK-GI-NEXT: mov v1.h[3], v2.h[0]
1388 ; CHECK-GI-NEXT: ldr q2, [sp, #160] // 16-byte Folded Reload
1389 ; CHECK-GI-NEXT: mov v3.h[4], v2.h[0]
1390 ; CHECK-GI-NEXT: ldr q2, [sp, #80] // 16-byte Folded Reload
1391 ; CHECK-GI-NEXT: mov v1.h[4], v2.h[0]
1392 ; CHECK-GI-NEXT: ldp q2, q4, [sp, #112] // 32-byte Folded Reload
1393 ; CHECK-GI-NEXT: mov v3.h[5], v4.h[0]
1394 ; CHECK-GI-NEXT: mov v1.h[5], v2.h[0]
1395 ; CHECK-GI-NEXT: fcvt h2, s0
1396 ; CHECK-GI-NEXT: ldr q0, [sp, #96] // 16-byte Folded Reload
1397 ; CHECK-GI-NEXT: mov v3.h[6], v0.h[0]
1398 ; CHECK-GI-NEXT: ldr q0, [sp, #176] // 16-byte Folded Reload
1399 ; CHECK-GI-NEXT: mov v1.h[6], v0.h[0]
1400 ; CHECK-GI-NEXT: ldr q0, [sp, #64] // 16-byte Folded Reload
1401 ; CHECK-GI-NEXT: mov v3.h[7], v0.h[0]
1402 ; CHECK-GI-NEXT: mov v1.h[7], v2.h[0]
1403 ; CHECK-GI-NEXT: mov v0.16b, v3.16b
1404 ; CHECK-GI-NEXT: add sp, sp, #336
1405 ; CHECK-GI-NEXT: ret
1407 %c = call <16 x half> @llvm.powi.v16f16.i32(<16 x half> %a, i32 %b)
1411 declare <16 x half> @llvm.powi.v16f16.i32(<16 x half>, i32)
1412 declare <2 x double> @llvm.powi.v2f64.i32(<2 x double>, i32)
1413 declare <2 x float> @llvm.powi.v2f32.i32(<2 x float>, i32)
1414 declare <3 x double> @llvm.powi.v3f64.i32(<3 x double>, i32)
1415 declare <3 x float> @llvm.powi.v3f32.i32(<3 x float>, i32)
1416 declare <4 x double> @llvm.powi.v4f64.i32(<4 x double>, i32)
1417 declare <4 x float> @llvm.powi.v4f32.i32(<4 x float>, i32)
1418 declare <4 x half> @llvm.powi.v4f16.i32(<4 x half>, i32)
1419 declare <7 x half> @llvm.powi.v7f16.i32(<7 x half>, i32)
1420 declare <8 x float> @llvm.powi.v8f32.i32(<8 x float>, i32)
1421 declare <8 x half> @llvm.powi.v8f16.i32(<8 x half>, i32)
1422 declare double @llvm.powi.f64.i32(double, i32)
1423 declare float @llvm.powi.f32.i32(float, i32)
1424 declare half @llvm.powi.f16.i32(half, i32)