Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AArch64 / zero-call-used-regs.ll
blob75a7c7f4a0511e77dca552293a4ba340ced1490f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-unknown-unknown | FileCheck %s --check-prefixes=CHECK,DEFAULT
3 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-unknown-unknown -mattr=+sve | FileCheck %s --check-prefixes=CHECK,SVE
5 @result = dso_local global i32 0, align 4
7 define dso_local i32 @skip(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="skip" {
8 ; CHECK-LABEL: skip:
9 ; CHECK:       // %bb.0: // %entry
10 ; CHECK-NEXT:    mul w8, w1, w0
11 ; CHECK-NEXT:    orr w0, w8, w2
12 ; CHECK-NEXT:    ret
14 entry:
15   %mul = mul nsw i32 %b, %a
16   %or = or i32 %mul, %c
17   ret i32 %or
20 define dso_local i32 @used_gpr_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr-arg" {
21 ; CHECK-LABEL: used_gpr_arg:
22 ; CHECK:       // %bb.0: // %entry
23 ; CHECK-NEXT:    mul w8, w1, w0
24 ; CHECK-NEXT:    orr w0, w8, w2
25 ; CHECK-NEXT:    mov x1, #0 // =0x0
26 ; CHECK-NEXT:    mov x2, #0 // =0x0
27 ; CHECK-NEXT:    ret
29 entry:
30   %mul = mul nsw i32 %b, %a
31   %or = or i32 %mul, %c
32   ret i32 %or
35 define dso_local i32 @used_gpr(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr" {
36 ; CHECK-LABEL: used_gpr:
37 ; CHECK:       // %bb.0: // %entry
38 ; CHECK-NEXT:    mul w8, w1, w0
39 ; CHECK-NEXT:    orr w0, w8, w2
40 ; CHECK-NEXT:    mov x1, #0 // =0x0
41 ; CHECK-NEXT:    mov x2, #0 // =0x0
42 ; CHECK-NEXT:    mov x8, #0 // =0x0
43 ; CHECK-NEXT:    ret
45 entry:
46   %mul = mul nsw i32 %b, %a
47   %or = or i32 %mul, %c
48   ret i32 %or
51 define dso_local i32 @used_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-arg" {
52 ; CHECK-LABEL: used_arg:
53 ; CHECK:       // %bb.0: // %entry
54 ; CHECK-NEXT:    mul w8, w1, w0
55 ; CHECK-NEXT:    orr w0, w8, w2
56 ; CHECK-NEXT:    mov x1, #0 // =0x0
57 ; CHECK-NEXT:    mov x2, #0 // =0x0
58 ; CHECK-NEXT:    ret
60 entry:
61   %mul = mul nsw i32 %b, %a
62   %or = or i32 %mul, %c
63   ret i32 %or
66 define dso_local i32 @used(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used" {
67 ; CHECK-LABEL: used:
68 ; CHECK:       // %bb.0: // %entry
69 ; CHECK-NEXT:    mul w8, w1, w0
70 ; CHECK-NEXT:    orr w0, w8, w2
71 ; CHECK-NEXT:    mov x1, #0 // =0x0
72 ; CHECK-NEXT:    mov x2, #0 // =0x0
73 ; CHECK-NEXT:    mov x8, #0 // =0x0
74 ; CHECK-NEXT:    ret
76 entry:
77   %mul = mul nsw i32 %b, %a
78   %or = or i32 %mul, %c
79   ret i32 %or
82 define dso_local i32 @all_gpr_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all-gpr-arg" {
83 ; CHECK-LABEL: all_gpr_arg:
84 ; CHECK:       // %bb.0: // %entry
85 ; CHECK-NEXT:    mul w8, w1, w0
86 ; CHECK-NEXT:    mov x1, #0 // =0x0
87 ; CHECK-NEXT:    mov x3, #0 // =0x0
88 ; CHECK-NEXT:    mov x4, #0 // =0x0
89 ; CHECK-NEXT:    mov x5, #0 // =0x0
90 ; CHECK-NEXT:    mov x6, #0 // =0x0
91 ; CHECK-NEXT:    mov x7, #0 // =0x0
92 ; CHECK-NEXT:    mov x18, #0 // =0x0
93 ; CHECK-NEXT:    orr w0, w8, w2
94 ; CHECK-NEXT:    mov x2, #0 // =0x0
95 ; CHECK-NEXT:    mov x8, #0 // =0x0
96 ; CHECK-NEXT:    ret
98 entry:
99   %mul = mul nsw i32 %b, %a
100   %or = or i32 %mul, %c
101   ret i32 %or
104 define dso_local i32 @all_gpr(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all-gpr" {
105 ; CHECK-LABEL: all_gpr:
106 ; CHECK:       // %bb.0: // %entry
107 ; CHECK-NEXT:    mul w8, w1, w0
108 ; CHECK-NEXT:    mov x1, #0 // =0x0
109 ; CHECK-NEXT:    mov x3, #0 // =0x0
110 ; CHECK-NEXT:    mov x4, #0 // =0x0
111 ; CHECK-NEXT:    mov x5, #0 // =0x0
112 ; CHECK-NEXT:    mov x6, #0 // =0x0
113 ; CHECK-NEXT:    mov x7, #0 // =0x0
114 ; CHECK-NEXT:    mov x9, #0 // =0x0
115 ; CHECK-NEXT:    mov x10, #0 // =0x0
116 ; CHECK-NEXT:    orr w0, w8, w2
117 ; CHECK-NEXT:    mov x2, #0 // =0x0
118 ; CHECK-NEXT:    mov x8, #0 // =0x0
119 ; CHECK-NEXT:    mov x11, #0 // =0x0
120 ; CHECK-NEXT:    mov x12, #0 // =0x0
121 ; CHECK-NEXT:    mov x13, #0 // =0x0
122 ; CHECK-NEXT:    mov x14, #0 // =0x0
123 ; CHECK-NEXT:    mov x15, #0 // =0x0
124 ; CHECK-NEXT:    mov x16, #0 // =0x0
125 ; CHECK-NEXT:    mov x17, #0 // =0x0
126 ; CHECK-NEXT:    mov x18, #0 // =0x0
127 ; CHECK-NEXT:    ret
129 entry:
130   %mul = mul nsw i32 %b, %a
131   %or = or i32 %mul, %c
132   ret i32 %or
135 define dso_local i32 @all_arg(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all-arg" {
136 ; DEFAULT-LABEL: all_arg:
137 ; DEFAULT:       // %bb.0: // %entry
138 ; DEFAULT-NEXT:    mul w8, w1, w0
139 ; DEFAULT-NEXT:    mov x1, #0 // =0x0
140 ; DEFAULT-NEXT:    mov x3, #0 // =0x0
141 ; DEFAULT-NEXT:    mov x4, #0 // =0x0
142 ; DEFAULT-NEXT:    mov x5, #0 // =0x0
143 ; DEFAULT-NEXT:    mov x6, #0 // =0x0
144 ; DEFAULT-NEXT:    mov x7, #0 // =0x0
145 ; DEFAULT-NEXT:    mov x18, #0 // =0x0
146 ; DEFAULT-NEXT:    movi v0.2d, #0000000000000000
147 ; DEFAULT-NEXT:    orr w0, w8, w2
148 ; DEFAULT-NEXT:    mov x2, #0 // =0x0
149 ; DEFAULT-NEXT:    mov x8, #0 // =0x0
150 ; DEFAULT-NEXT:    movi v1.2d, #0000000000000000
151 ; DEFAULT-NEXT:    movi v2.2d, #0000000000000000
152 ; DEFAULT-NEXT:    movi v3.2d, #0000000000000000
153 ; DEFAULT-NEXT:    movi v4.2d, #0000000000000000
154 ; DEFAULT-NEXT:    movi v5.2d, #0000000000000000
155 ; DEFAULT-NEXT:    movi v6.2d, #0000000000000000
156 ; DEFAULT-NEXT:    movi v7.2d, #0000000000000000
157 ; DEFAULT-NEXT:    ret
159 ; SVE-LABEL: all_arg:
160 ; SVE:       // %bb.0: // %entry
161 ; SVE-NEXT:    mul w8, w1, w0
162 ; SVE-NEXT:    mov x1, #0 // =0x0
163 ; SVE-NEXT:    mov x3, #0 // =0x0
164 ; SVE-NEXT:    mov x4, #0 // =0x0
165 ; SVE-NEXT:    mov x5, #0 // =0x0
166 ; SVE-NEXT:    mov x6, #0 // =0x0
167 ; SVE-NEXT:    mov x7, #0 // =0x0
168 ; SVE-NEXT:    mov x18, #0 // =0x0
169 ; SVE-NEXT:    mov z0.d, #0 // =0x0
170 ; SVE-NEXT:    orr w0, w8, w2
171 ; SVE-NEXT:    mov x2, #0 // =0x0
172 ; SVE-NEXT:    mov x8, #0 // =0x0
173 ; SVE-NEXT:    mov z1.d, #0 // =0x0
174 ; SVE-NEXT:    mov z2.d, #0 // =0x0
175 ; SVE-NEXT:    mov z3.d, #0 // =0x0
176 ; SVE-NEXT:    mov z4.d, #0 // =0x0
177 ; SVE-NEXT:    mov z5.d, #0 // =0x0
178 ; SVE-NEXT:    mov z6.d, #0 // =0x0
179 ; SVE-NEXT:    mov z7.d, #0 // =0x0
180 ; SVE-NEXT:    pfalse p0.b
181 ; SVE-NEXT:    pfalse p1.b
182 ; SVE-NEXT:    pfalse p2.b
183 ; SVE-NEXT:    pfalse p3.b
184 ; SVE-NEXT:    ret
186 entry:
187   %mul = mul nsw i32 %b, %a
188   %or = or i32 %mul, %c
189   ret i32 %or
192 define dso_local i32 @all(i32 noundef %a, i32 noundef %b, i32 noundef %c) local_unnamed_addr #0 "zero-call-used-regs"="all" {
193 ; DEFAULT-LABEL: all:
194 ; DEFAULT:       // %bb.0: // %entry
195 ; DEFAULT-NEXT:    mul w8, w1, w0
196 ; DEFAULT-NEXT:    mov x1, #0 // =0x0
197 ; DEFAULT-NEXT:    mov x3, #0 // =0x0
198 ; DEFAULT-NEXT:    mov x4, #0 // =0x0
199 ; DEFAULT-NEXT:    mov x5, #0 // =0x0
200 ; DEFAULT-NEXT:    mov x6, #0 // =0x0
201 ; DEFAULT-NEXT:    mov x7, #0 // =0x0
202 ; DEFAULT-NEXT:    mov x9, #0 // =0x0
203 ; DEFAULT-NEXT:    mov x10, #0 // =0x0
204 ; DEFAULT-NEXT:    orr w0, w8, w2
205 ; DEFAULT-NEXT:    mov x2, #0 // =0x0
206 ; DEFAULT-NEXT:    mov x8, #0 // =0x0
207 ; DEFAULT-NEXT:    mov x11, #0 // =0x0
208 ; DEFAULT-NEXT:    mov x12, #0 // =0x0
209 ; DEFAULT-NEXT:    mov x13, #0 // =0x0
210 ; DEFAULT-NEXT:    mov x14, #0 // =0x0
211 ; DEFAULT-NEXT:    mov x15, #0 // =0x0
212 ; DEFAULT-NEXT:    mov x16, #0 // =0x0
213 ; DEFAULT-NEXT:    mov x17, #0 // =0x0
214 ; DEFAULT-NEXT:    mov x18, #0 // =0x0
215 ; DEFAULT-NEXT:    movi v0.2d, #0000000000000000
216 ; DEFAULT-NEXT:    movi v1.2d, #0000000000000000
217 ; DEFAULT-NEXT:    movi v2.2d, #0000000000000000
218 ; DEFAULT-NEXT:    movi v3.2d, #0000000000000000
219 ; DEFAULT-NEXT:    movi v4.2d, #0000000000000000
220 ; DEFAULT-NEXT:    movi v5.2d, #0000000000000000
221 ; DEFAULT-NEXT:    movi v6.2d, #0000000000000000
222 ; DEFAULT-NEXT:    movi v7.2d, #0000000000000000
223 ; DEFAULT-NEXT:    movi v16.2d, #0000000000000000
224 ; DEFAULT-NEXT:    movi v17.2d, #0000000000000000
225 ; DEFAULT-NEXT:    movi v18.2d, #0000000000000000
226 ; DEFAULT-NEXT:    movi v19.2d, #0000000000000000
227 ; DEFAULT-NEXT:    movi v20.2d, #0000000000000000
228 ; DEFAULT-NEXT:    movi v21.2d, #0000000000000000
229 ; DEFAULT-NEXT:    movi v22.2d, #0000000000000000
230 ; DEFAULT-NEXT:    movi v23.2d, #0000000000000000
231 ; DEFAULT-NEXT:    movi v24.2d, #0000000000000000
232 ; DEFAULT-NEXT:    movi v25.2d, #0000000000000000
233 ; DEFAULT-NEXT:    movi v26.2d, #0000000000000000
234 ; DEFAULT-NEXT:    movi v27.2d, #0000000000000000
235 ; DEFAULT-NEXT:    movi v28.2d, #0000000000000000
236 ; DEFAULT-NEXT:    movi v29.2d, #0000000000000000
237 ; DEFAULT-NEXT:    movi v30.2d, #0000000000000000
238 ; DEFAULT-NEXT:    movi v31.2d, #0000000000000000
239 ; DEFAULT-NEXT:    ret
241 ; SVE-LABEL: all:
242 ; SVE:       // %bb.0: // %entry
243 ; SVE-NEXT:    mul w8, w1, w0
244 ; SVE-NEXT:    mov x1, #0 // =0x0
245 ; SVE-NEXT:    mov x3, #0 // =0x0
246 ; SVE-NEXT:    mov x4, #0 // =0x0
247 ; SVE-NEXT:    mov x5, #0 // =0x0
248 ; SVE-NEXT:    mov x6, #0 // =0x0
249 ; SVE-NEXT:    mov x7, #0 // =0x0
250 ; SVE-NEXT:    mov x9, #0 // =0x0
251 ; SVE-NEXT:    mov x10, #0 // =0x0
252 ; SVE-NEXT:    orr w0, w8, w2
253 ; SVE-NEXT:    mov x2, #0 // =0x0
254 ; SVE-NEXT:    mov x8, #0 // =0x0
255 ; SVE-NEXT:    mov x11, #0 // =0x0
256 ; SVE-NEXT:    mov x12, #0 // =0x0
257 ; SVE-NEXT:    mov x13, #0 // =0x0
258 ; SVE-NEXT:    mov x14, #0 // =0x0
259 ; SVE-NEXT:    mov x15, #0 // =0x0
260 ; SVE-NEXT:    mov x16, #0 // =0x0
261 ; SVE-NEXT:    mov x17, #0 // =0x0
262 ; SVE-NEXT:    mov x18, #0 // =0x0
263 ; SVE-NEXT:    mov z0.d, #0 // =0x0
264 ; SVE-NEXT:    mov z1.d, #0 // =0x0
265 ; SVE-NEXT:    mov z2.d, #0 // =0x0
266 ; SVE-NEXT:    mov z3.d, #0 // =0x0
267 ; SVE-NEXT:    mov z4.d, #0 // =0x0
268 ; SVE-NEXT:    mov z5.d, #0 // =0x0
269 ; SVE-NEXT:    mov z6.d, #0 // =0x0
270 ; SVE-NEXT:    mov z7.d, #0 // =0x0
271 ; SVE-NEXT:    mov z16.d, #0 // =0x0
272 ; SVE-NEXT:    mov z17.d, #0 // =0x0
273 ; SVE-NEXT:    mov z18.d, #0 // =0x0
274 ; SVE-NEXT:    mov z19.d, #0 // =0x0
275 ; SVE-NEXT:    mov z20.d, #0 // =0x0
276 ; SVE-NEXT:    mov z21.d, #0 // =0x0
277 ; SVE-NEXT:    mov z22.d, #0 // =0x0
278 ; SVE-NEXT:    mov z23.d, #0 // =0x0
279 ; SVE-NEXT:    mov z24.d, #0 // =0x0
280 ; SVE-NEXT:    mov z25.d, #0 // =0x0
281 ; SVE-NEXT:    mov z26.d, #0 // =0x0
282 ; SVE-NEXT:    mov z27.d, #0 // =0x0
283 ; SVE-NEXT:    mov z28.d, #0 // =0x0
284 ; SVE-NEXT:    mov z29.d, #0 // =0x0
285 ; SVE-NEXT:    mov z30.d, #0 // =0x0
286 ; SVE-NEXT:    mov z31.d, #0 // =0x0
287 ; SVE-NEXT:    pfalse p0.b
288 ; SVE-NEXT:    pfalse p1.b
289 ; SVE-NEXT:    pfalse p2.b
290 ; SVE-NEXT:    pfalse p3.b
291 ; SVE-NEXT:    pfalse p4.b
292 ; SVE-NEXT:    pfalse p5.b
293 ; SVE-NEXT:    pfalse p6.b
294 ; SVE-NEXT:    pfalse p7.b
295 ; SVE-NEXT:    pfalse p8.b
296 ; SVE-NEXT:    pfalse p9.b
297 ; SVE-NEXT:    pfalse p10.b
298 ; SVE-NEXT:    pfalse p11.b
299 ; SVE-NEXT:    pfalse p12.b
300 ; SVE-NEXT:    pfalse p13.b
301 ; SVE-NEXT:    pfalse p14.b
302 ; SVE-NEXT:    pfalse p15.b
303 ; SVE-NEXT:    ret
305 entry:
306   %mul = mul nsw i32 %b, %a
307   %or = or i32 %mul, %c
308   ret i32 %or
311 define dso_local double @skip_float(double noundef %a, float noundef %b) local_unnamed_addr #0 "zero-call-used-regs"="skip" {
312 ; CHECK-LABEL: skip_float:
313 ; CHECK:       // %bb.0: // %entry
314 ; CHECK-NEXT:    fcvt d1, s1
315 ; CHECK-NEXT:    fmul d0, d1, d0
316 ; CHECK-NEXT:    ret
318 entry:
319   %conv = fpext float %b to double
320   %mul = fmul double %conv, %a
321   ret double %mul
324 define dso_local double @used_gpr_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr-arg" {
325 ; CHECK-LABEL: used_gpr_arg_float:
326 ; CHECK:       // %bb.0: // %entry
327 ; CHECK-NEXT:    fcvt d1, s1
328 ; CHECK-NEXT:    fmul d0, d1, d0
329 ; CHECK-NEXT:    ret
331 entry:
332   %conv = fpext float %b to double
333   %mul = fmul double %conv, %a
334   ret double %mul
337 define dso_local double @used_gpr_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-gpr" {
338 ; CHECK-LABEL: used_gpr_float:
339 ; CHECK:       // %bb.0: // %entry
340 ; CHECK-NEXT:    fcvt d1, s1
341 ; CHECK-NEXT:    fmul d0, d1, d0
342 ; CHECK-NEXT:    ret
344 entry:
345   %conv = fpext float %b to double
346   %mul = fmul double %conv, %a
347   ret double %mul
350 define dso_local double @used_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used-arg" {
351 ; DEFAULT-LABEL: used_arg_float:
352 ; DEFAULT:       // %bb.0: // %entry
353 ; DEFAULT-NEXT:    fcvt d1, s1
354 ; DEFAULT-NEXT:    fmul d0, d1, d0
355 ; DEFAULT-NEXT:    movi v1.2d, #0000000000000000
356 ; DEFAULT-NEXT:    ret
358 ; SVE-LABEL: used_arg_float:
359 ; SVE:       // %bb.0: // %entry
360 ; SVE-NEXT:    fcvt d1, s1
361 ; SVE-NEXT:    fmul d0, d1, d0
362 ; SVE-NEXT:    mov z1.d, #0 // =0x0
363 ; SVE-NEXT:    ret
365 entry:
366   %conv = fpext float %b to double
367   %mul = fmul double %conv, %a
368   ret double %mul
371 define dso_local double @used_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="used" {
372 ; DEFAULT-LABEL: used_float:
373 ; DEFAULT:       // %bb.0: // %entry
374 ; DEFAULT-NEXT:    fcvt d1, s1
375 ; DEFAULT-NEXT:    fmul d0, d1, d0
376 ; DEFAULT-NEXT:    movi v1.2d, #0000000000000000
377 ; DEFAULT-NEXT:    ret
379 ; SVE-LABEL: used_float:
380 ; SVE:       // %bb.0: // %entry
381 ; SVE-NEXT:    fcvt d1, s1
382 ; SVE-NEXT:    fmul d0, d1, d0
383 ; SVE-NEXT:    mov z1.d, #0 // =0x0
384 ; SVE-NEXT:    ret
386 entry:
387   %conv = fpext float %b to double
388   %mul = fmul double %conv, %a
389   ret double %mul
392 define dso_local double @all_gpr_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all-gpr-arg" {
393 ; CHECK-LABEL: all_gpr_arg_float:
394 ; CHECK:       // %bb.0: // %entry
395 ; CHECK-NEXT:    fcvt d1, s1
396 ; CHECK-NEXT:    fmul d0, d1, d0
397 ; CHECK-NEXT:    mov x0, #0 // =0x0
398 ; CHECK-NEXT:    mov x1, #0 // =0x0
399 ; CHECK-NEXT:    mov x2, #0 // =0x0
400 ; CHECK-NEXT:    mov x3, #0 // =0x0
401 ; CHECK-NEXT:    mov x4, #0 // =0x0
402 ; CHECK-NEXT:    mov x5, #0 // =0x0
403 ; CHECK-NEXT:    mov x6, #0 // =0x0
404 ; CHECK-NEXT:    mov x7, #0 // =0x0
405 ; CHECK-NEXT:    mov x8, #0 // =0x0
406 ; CHECK-NEXT:    mov x18, #0 // =0x0
407 ; CHECK-NEXT:    ret
409 entry:
410   %conv = fpext float %b to double
411   %mul = fmul double %conv, %a
412   ret double %mul
415 define dso_local double @all_gpr_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all-gpr" {
416 ; CHECK-LABEL: all_gpr_float:
417 ; CHECK:       // %bb.0: // %entry
418 ; CHECK-NEXT:    fcvt d1, s1
419 ; CHECK-NEXT:    fmul d0, d1, d0
420 ; CHECK-NEXT:    mov x0, #0 // =0x0
421 ; CHECK-NEXT:    mov x1, #0 // =0x0
422 ; CHECK-NEXT:    mov x2, #0 // =0x0
423 ; CHECK-NEXT:    mov x3, #0 // =0x0
424 ; CHECK-NEXT:    mov x4, #0 // =0x0
425 ; CHECK-NEXT:    mov x5, #0 // =0x0
426 ; CHECK-NEXT:    mov x6, #0 // =0x0
427 ; CHECK-NEXT:    mov x7, #0 // =0x0
428 ; CHECK-NEXT:    mov x8, #0 // =0x0
429 ; CHECK-NEXT:    mov x9, #0 // =0x0
430 ; CHECK-NEXT:    mov x10, #0 // =0x0
431 ; CHECK-NEXT:    mov x11, #0 // =0x0
432 ; CHECK-NEXT:    mov x12, #0 // =0x0
433 ; CHECK-NEXT:    mov x13, #0 // =0x0
434 ; CHECK-NEXT:    mov x14, #0 // =0x0
435 ; CHECK-NEXT:    mov x15, #0 // =0x0
436 ; CHECK-NEXT:    mov x16, #0 // =0x0
437 ; CHECK-NEXT:    mov x17, #0 // =0x0
438 ; CHECK-NEXT:    mov x18, #0 // =0x0
439 ; CHECK-NEXT:    ret
441 entry:
442   %conv = fpext float %b to double
443   %mul = fmul double %conv, %a
444   ret double %mul
447 define dso_local double @all_arg_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all-arg" {
448 ; DEFAULT-LABEL: all_arg_float:
449 ; DEFAULT:       // %bb.0: // %entry
450 ; DEFAULT-NEXT:    fcvt d1, s1
451 ; DEFAULT-NEXT:    fmul d0, d1, d0
452 ; DEFAULT-NEXT:    mov x0, #0 // =0x0
453 ; DEFAULT-NEXT:    mov x1, #0 // =0x0
454 ; DEFAULT-NEXT:    mov x2, #0 // =0x0
455 ; DEFAULT-NEXT:    mov x3, #0 // =0x0
456 ; DEFAULT-NEXT:    mov x4, #0 // =0x0
457 ; DEFAULT-NEXT:    mov x5, #0 // =0x0
458 ; DEFAULT-NEXT:    mov x6, #0 // =0x0
459 ; DEFAULT-NEXT:    mov x7, #0 // =0x0
460 ; DEFAULT-NEXT:    mov x8, #0 // =0x0
461 ; DEFAULT-NEXT:    mov x18, #0 // =0x0
462 ; DEFAULT-NEXT:    movi v1.2d, #0000000000000000
463 ; DEFAULT-NEXT:    movi v2.2d, #0000000000000000
464 ; DEFAULT-NEXT:    movi v3.2d, #0000000000000000
465 ; DEFAULT-NEXT:    movi v4.2d, #0000000000000000
466 ; DEFAULT-NEXT:    movi v5.2d, #0000000000000000
467 ; DEFAULT-NEXT:    movi v6.2d, #0000000000000000
468 ; DEFAULT-NEXT:    movi v7.2d, #0000000000000000
469 ; DEFAULT-NEXT:    ret
471 ; SVE-LABEL: all_arg_float:
472 ; SVE:       // %bb.0: // %entry
473 ; SVE-NEXT:    fcvt d1, s1
474 ; SVE-NEXT:    fmul d0, d1, d0
475 ; SVE-NEXT:    mov x0, #0 // =0x0
476 ; SVE-NEXT:    mov x1, #0 // =0x0
477 ; SVE-NEXT:    mov x2, #0 // =0x0
478 ; SVE-NEXT:    mov x3, #0 // =0x0
479 ; SVE-NEXT:    mov x4, #0 // =0x0
480 ; SVE-NEXT:    mov x5, #0 // =0x0
481 ; SVE-NEXT:    mov x6, #0 // =0x0
482 ; SVE-NEXT:    mov x7, #0 // =0x0
483 ; SVE-NEXT:    mov x8, #0 // =0x0
484 ; SVE-NEXT:    mov x18, #0 // =0x0
485 ; SVE-NEXT:    mov z1.d, #0 // =0x0
486 ; SVE-NEXT:    mov z2.d, #0 // =0x0
487 ; SVE-NEXT:    mov z3.d, #0 // =0x0
488 ; SVE-NEXT:    mov z4.d, #0 // =0x0
489 ; SVE-NEXT:    mov z5.d, #0 // =0x0
490 ; SVE-NEXT:    mov z6.d, #0 // =0x0
491 ; SVE-NEXT:    mov z7.d, #0 // =0x0
492 ; SVE-NEXT:    pfalse p0.b
493 ; SVE-NEXT:    pfalse p1.b
494 ; SVE-NEXT:    pfalse p2.b
495 ; SVE-NEXT:    pfalse p3.b
496 ; SVE-NEXT:    ret
498 entry:
499   %conv = fpext float %b to double
500   %mul = fmul double %conv, %a
501   ret double %mul
504 define dso_local double @all_float(double noundef %a, float noundef %b) local_unnamed_addr #0 noinline optnone "zero-call-used-regs"="all" {
505 ; DEFAULT-LABEL: all_float:
506 ; DEFAULT:       // %bb.0: // %entry
507 ; DEFAULT-NEXT:    fcvt d1, s1
508 ; DEFAULT-NEXT:    fmul d0, d1, d0
509 ; DEFAULT-NEXT:    mov x0, #0 // =0x0
510 ; DEFAULT-NEXT:    mov x1, #0 // =0x0
511 ; DEFAULT-NEXT:    mov x2, #0 // =0x0
512 ; DEFAULT-NEXT:    mov x3, #0 // =0x0
513 ; DEFAULT-NEXT:    mov x4, #0 // =0x0
514 ; DEFAULT-NEXT:    mov x5, #0 // =0x0
515 ; DEFAULT-NEXT:    mov x6, #0 // =0x0
516 ; DEFAULT-NEXT:    mov x7, #0 // =0x0
517 ; DEFAULT-NEXT:    mov x8, #0 // =0x0
518 ; DEFAULT-NEXT:    mov x9, #0 // =0x0
519 ; DEFAULT-NEXT:    mov x10, #0 // =0x0
520 ; DEFAULT-NEXT:    mov x11, #0 // =0x0
521 ; DEFAULT-NEXT:    mov x12, #0 // =0x0
522 ; DEFAULT-NEXT:    mov x13, #0 // =0x0
523 ; DEFAULT-NEXT:    mov x14, #0 // =0x0
524 ; DEFAULT-NEXT:    mov x15, #0 // =0x0
525 ; DEFAULT-NEXT:    mov x16, #0 // =0x0
526 ; DEFAULT-NEXT:    mov x17, #0 // =0x0
527 ; DEFAULT-NEXT:    mov x18, #0 // =0x0
528 ; DEFAULT-NEXT:    movi v1.2d, #0000000000000000
529 ; DEFAULT-NEXT:    movi v2.2d, #0000000000000000
530 ; DEFAULT-NEXT:    movi v3.2d, #0000000000000000
531 ; DEFAULT-NEXT:    movi v4.2d, #0000000000000000
532 ; DEFAULT-NEXT:    movi v5.2d, #0000000000000000
533 ; DEFAULT-NEXT:    movi v6.2d, #0000000000000000
534 ; DEFAULT-NEXT:    movi v7.2d, #0000000000000000
535 ; DEFAULT-NEXT:    movi v16.2d, #0000000000000000
536 ; DEFAULT-NEXT:    movi v17.2d, #0000000000000000
537 ; DEFAULT-NEXT:    movi v18.2d, #0000000000000000
538 ; DEFAULT-NEXT:    movi v19.2d, #0000000000000000
539 ; DEFAULT-NEXT:    movi v20.2d, #0000000000000000
540 ; DEFAULT-NEXT:    movi v21.2d, #0000000000000000
541 ; DEFAULT-NEXT:    movi v22.2d, #0000000000000000
542 ; DEFAULT-NEXT:    movi v23.2d, #0000000000000000
543 ; DEFAULT-NEXT:    movi v24.2d, #0000000000000000
544 ; DEFAULT-NEXT:    movi v25.2d, #0000000000000000
545 ; DEFAULT-NEXT:    movi v26.2d, #0000000000000000
546 ; DEFAULT-NEXT:    movi v27.2d, #0000000000000000
547 ; DEFAULT-NEXT:    movi v28.2d, #0000000000000000
548 ; DEFAULT-NEXT:    movi v29.2d, #0000000000000000
549 ; DEFAULT-NEXT:    movi v30.2d, #0000000000000000
550 ; DEFAULT-NEXT:    movi v31.2d, #0000000000000000
551 ; DEFAULT-NEXT:    ret
553 ; SVE-LABEL: all_float:
554 ; SVE:       // %bb.0: // %entry
555 ; SVE-NEXT:    fcvt d1, s1
556 ; SVE-NEXT:    fmul d0, d1, d0
557 ; SVE-NEXT:    mov x0, #0 // =0x0
558 ; SVE-NEXT:    mov x1, #0 // =0x0
559 ; SVE-NEXT:    mov x2, #0 // =0x0
560 ; SVE-NEXT:    mov x3, #0 // =0x0
561 ; SVE-NEXT:    mov x4, #0 // =0x0
562 ; SVE-NEXT:    mov x5, #0 // =0x0
563 ; SVE-NEXT:    mov x6, #0 // =0x0
564 ; SVE-NEXT:    mov x7, #0 // =0x0
565 ; SVE-NEXT:    mov x8, #0 // =0x0
566 ; SVE-NEXT:    mov x9, #0 // =0x0
567 ; SVE-NEXT:    mov x10, #0 // =0x0
568 ; SVE-NEXT:    mov x11, #0 // =0x0
569 ; SVE-NEXT:    mov x12, #0 // =0x0
570 ; SVE-NEXT:    mov x13, #0 // =0x0
571 ; SVE-NEXT:    mov x14, #0 // =0x0
572 ; SVE-NEXT:    mov x15, #0 // =0x0
573 ; SVE-NEXT:    mov x16, #0 // =0x0
574 ; SVE-NEXT:    mov x17, #0 // =0x0
575 ; SVE-NEXT:    mov x18, #0 // =0x0
576 ; SVE-NEXT:    mov z1.d, #0 // =0x0
577 ; SVE-NEXT:    mov z2.d, #0 // =0x0
578 ; SVE-NEXT:    mov z3.d, #0 // =0x0
579 ; SVE-NEXT:    mov z4.d, #0 // =0x0
580 ; SVE-NEXT:    mov z5.d, #0 // =0x0
581 ; SVE-NEXT:    mov z6.d, #0 // =0x0
582 ; SVE-NEXT:    mov z7.d, #0 // =0x0
583 ; SVE-NEXT:    mov z16.d, #0 // =0x0
584 ; SVE-NEXT:    mov z17.d, #0 // =0x0
585 ; SVE-NEXT:    mov z18.d, #0 // =0x0
586 ; SVE-NEXT:    mov z19.d, #0 // =0x0
587 ; SVE-NEXT:    mov z20.d, #0 // =0x0
588 ; SVE-NEXT:    mov z21.d, #0 // =0x0
589 ; SVE-NEXT:    mov z22.d, #0 // =0x0
590 ; SVE-NEXT:    mov z23.d, #0 // =0x0
591 ; SVE-NEXT:    mov z24.d, #0 // =0x0
592 ; SVE-NEXT:    mov z25.d, #0 // =0x0
593 ; SVE-NEXT:    mov z26.d, #0 // =0x0
594 ; SVE-NEXT:    mov z27.d, #0 // =0x0
595 ; SVE-NEXT:    mov z28.d, #0 // =0x0
596 ; SVE-NEXT:    mov z29.d, #0 // =0x0
597 ; SVE-NEXT:    mov z30.d, #0 // =0x0
598 ; SVE-NEXT:    mov z31.d, #0 // =0x0
599 ; SVE-NEXT:    pfalse p0.b
600 ; SVE-NEXT:    pfalse p1.b
601 ; SVE-NEXT:    pfalse p2.b
602 ; SVE-NEXT:    pfalse p3.b
603 ; SVE-NEXT:    pfalse p4.b
604 ; SVE-NEXT:    pfalse p5.b
605 ; SVE-NEXT:    pfalse p6.b
606 ; SVE-NEXT:    pfalse p7.b
607 ; SVE-NEXT:    pfalse p8.b
608 ; SVE-NEXT:    pfalse p9.b
609 ; SVE-NEXT:    pfalse p10.b
610 ; SVE-NEXT:    pfalse p11.b
611 ; SVE-NEXT:    pfalse p12.b
612 ; SVE-NEXT:    pfalse p13.b
613 ; SVE-NEXT:    pfalse p14.b
614 ; SVE-NEXT:    pfalse p15.b
615 ; SVE-NEXT:    ret
617 entry:
618   %conv = fpext float %b to double
619   %mul = fmul double %conv, %a
620   ret double %mul
623 ; Don't emit zeroing registers in "main" function.
624 define dso_local i32 @main() local_unnamed_addr #0 {
625 ; CHECK-LABEL: main:
626 ; CHECK:       // %bb.0: // %entry
627 ; CHECK-NEXT:    mov w0, wzr
628 ; CHECK-NEXT:    ret
630 entry:
631   ret i32 0
634 attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone willreturn uwtable "frame-pointer"="non-leaf" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+neon,+v8a" }