@@ -93,10 +93,10 @@ declare i64 @simple_integers(i8, i16, i32, i64) nounwind;
93
93
; CHECK-NEXT: .seh_endfunclet
94
94
; CHECK-NEXT: .seh_endproc
95
95
96
- ; NOTE: Only float and double are supported.
97
- declare double @simple_floats (float , double ) nounwind ;
98
- ; CHECK-LABEL: .def $iexit_thunk$cdecl$d$fd ;
99
- ; CHECK: .section .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$d$fd
96
+ ; NOTE: Only half, float, and double are supported.
97
+ declare double @simple_floats (half , float , double ) nounwind ;
98
+ ; CHECK-LABEL: .def $iexit_thunk$cdecl$d$__llvm_h__fd ;
99
+ ; CHECK: .section .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$d$__llvm_h__fd
100
100
; CHECK: // %bb.0:
101
101
; CHECK-NEXT: sub sp, sp, #48
102
102
; CHECK-NEXT: .seh_stackalloc 48
@@ -129,8 +129,8 @@ declare double @simple_floats(float, double) nounwind;
129
129
; CHECK-NEXT: adrp x11, simple_floats
130
130
; CHECK-NEXT: add x11, x11, :lo12:simple_floats
131
131
; CHECK-NEXT: ldr x8, [x8, :lo12:__os_arm64x_check_icall]
132
- ; CHECK-NEXT: adrp x10, $iexit_thunk$cdecl$d$fd
133
- ; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$d$fd
132
+ ; CHECK-NEXT: adrp x10, $iexit_thunk$cdecl$d$__llvm_h__fd
133
+ ; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$d$__llvm_h__fd
134
134
; CHECK-NEXT: blr x8
135
135
; CHECK-NEXT: .seh_startepilogue
136
136
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
@@ -282,33 +282,36 @@ declare void @has_aligned_sret(ptr align 32 sret(%TSRet)) nounwind;
282
282
; CHECK: .seh_endfunclet
283
283
; CHECK: .seh_endproc
284
284
285
- declare [2 x i8 ] @small_array ([2 x i8 ], [2 x float ]) nounwind ;
286
- ; CHECK-LABEL: .def $iexit_thunk$cdecl$m2$m2F8 ;
287
- ; CHECK: .section .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m2$m2F8
285
+ declare [2 x i8 ] @small_array ([2 x i8 ], [2 x half ], [ 2 x float ]) nounwind ;
286
+ ; CHECK-LABEL: .def $iexit_thunk$cdecl$m2$m2__llvm_H__4F8 ;
287
+ ; CHECK: .section .wowthk$aa,"xr",discard,$iexit_thunk$cdecl$m2$m2__llvm_H__4F8
288
288
; CHECK: // %bb.0:
289
- ; CHECK-NEXT: sub sp, sp, #64
290
- ; CHECK-NEXT: .seh_stackalloc 64
291
- ; CHECK-NEXT: stp x29, x30, [sp, #48 ] // 16-byte Folded Spill
292
- ; CHECK-NEXT: .seh_save_fplr 48
293
- ; CHECK-NEXT: add x29, sp, #48
294
- ; CHECK-NEXT: .seh_add_fp 48
289
+ ; CHECK-NEXT: sub sp, sp, #80
290
+ ; CHECK-NEXT: .seh_stackalloc 80
291
+ ; CHECK-NEXT: stp x29, x30, [sp, #64 ] // 16-byte Folded Spill
292
+ ; CHECK-NEXT: .seh_save_fplr 64
293
+ ; CHECK-NEXT: add x29, sp, #64
294
+ ; CHECK-NEXT: .seh_add_fp 64
295
295
; CHECK-NEXT: .seh_endprologue
296
- ; CHECK-NEXT: sturb w1, [x29, #-1]
297
- ; CHECK-NEXT: adrp x8, __os_arm64x_dispatch_call_no_redirect
298
- ; CHECK-NEXT: sturb w0, [x29, #-2]
299
- ; CHECK-NEXT: ldr x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]
300
- ; CHECK-NEXT: stp s0, s1, [x29, #-12]
301
- ; CHECK-NEXT: ldurh w0, [x29, #-2]
302
- ; CHECK-NEXT: ldur x1, [x29, #-12]
303
- ; CHECK-NEXT: blr x16
304
- ; CHECK-NEXT: mov w0, w8
305
- ; CHECK-NEXT: sturh w8, [x29, #-14]
306
- ; CHECK-NEXT: ubfx w1, w8, #8, #8
296
+ ; CHECK-NEXT: sturb w0, [x29, #-2]
297
+ ; CHECK-NEXT: adrp x8, __os_arm64x_dispatch_call_no_redirect
298
+ ; CHECK-NEXT: sturb w1, [x29, #-1]
299
+ ; CHECK-NEXT: ldr x16, [x8, :lo12:__os_arm64x_dispatch_call_no_redirect]
300
+ ; CHECK-NEXT: stur h0, [x29, #-6]
301
+ ; CHECK-NEXT: ldurh w0, [x29, #-2]
302
+ ; CHECK-NEXT: stur h1, [x29, #-4]
303
+ ; CHECK-NEXT: stp s2, s3, [x29, #-16]
304
+ ; CHECK-NEXT: ldur w1, [x29, #-6]
305
+ ; CHECK-NEXT: ldur x2, [x29, #-16]
306
+ ; CHECK-NEXT: blr x16
307
+ ; CHECK-NEXT: mov w0, w8
308
+ ; CHECK-NEXT: sturh w8, [x29, #-18]
309
+ ; CHECK-NEXT: ubfx w1, w8, #8, #8
307
310
; CHECK-NEXT: .seh_startepilogue
308
- ; CHECK-NEXT: ldp x29, x30, [sp, #48 ] // 16-byte Folded Reload
309
- ; CHECK-NEXT: .seh_save_fplr 48
310
- ; CHECK-NEXT: add sp, sp, #64
311
- ; CHECK-NEXT: .seh_stackalloc 64
311
+ ; CHECK-NEXT: ldp x29, x30, [sp, #64 ] // 16-byte Folded Reload
312
+ ; CHECK-NEXT: .seh_save_fplr 64
313
+ ; CHECK-NEXT: add sp, sp, #80
314
+ ; CHECK-NEXT: .seh_stackalloc 80
312
315
; CHECK-NEXT: .seh_endepilogue
313
316
; CHECK-NEXT: ret
314
317
; CHECK-NEXT: .seh_endfunclet
@@ -325,8 +328,8 @@ declare [2 x i8] @small_array([2 x i8], [2 x float]) nounwind;
325
328
; CHECK-NEXT: adrp x11, small_array
326
329
; CHECK-NEXT: add x11, x11, :lo12:small_array
327
330
; CHECK-NEXT: ldr x8, [x8, :lo12:__os_arm64x_check_icall]
328
- ; CHECK-NEXT: adrp x10, $iexit_thunk$cdecl$m2$m2F8
329
- ; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$m2$m2F8
331
+ ; CHECK-NEXT: adrp x10, $iexit_thunk$cdecl$m2$m2__llvm_H__4F8
332
+ ; CHECK-NEXT: add x10, x10, :lo12:$iexit_thunk$cdecl$m2$m2__llvm_H__4F8
330
333
; CHECK-NEXT: blr x8
331
334
; CHECK-NEXT: .seh_startepilogue
332
335
; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
@@ -577,7 +580,7 @@ declare <8 x i16> @large_vector(<8 x i16> %0) nounwind;
577
580
; CHECK-NEXT: .symidx simple_integers
578
581
; CHECK-NEXT: .word 0
579
582
; CHECK-NEXT: .symidx simple_floats
580
- ; CHECK-NEXT: .symidx $iexit_thunk$cdecl$d$fd
583
+ ; CHECK-NEXT: .symidx $iexit_thunk$cdecl$d$__llvm_h__fd
581
584
; CHECK-NEXT: .word 4
582
585
; CHECK-NEXT: .symidx "#simple_floats$exit_thunk"
583
586
; CHECK-NEXT: .symidx simple_floats
@@ -601,7 +604,7 @@ declare <8 x i16> @large_vector(<8 x i16> %0) nounwind;
601
604
; CHECK-NEXT: .symidx has_aligned_sret
602
605
; CHECK-NEXT: .word 0
603
606
; CHECK-NEXT: .symidx small_array
604
- ; CHECK-NEXT: .symidx $iexit_thunk$cdecl$m2$m2F8
607
+ ; CHECK-NEXT: .symidx $iexit_thunk$cdecl$m2$m2__llvm_H__4F8
605
608
; CHECK-NEXT: .word 4
606
609
; CHECK-NEXT: .symidx "#small_array$exit_thunk"
607
610
; CHECK-NEXT: .symidx small_array
@@ -634,14 +637,14 @@ declare <8 x i16> @large_vector(<8 x i16> %0) nounwind;
634
637
define void @func_caller () nounwind {
635
638
call void @no_op ()
636
639
call i64 @simple_integers (i8 0 , i16 0 , i32 0 , i64 0 )
637
- call double @simple_floats (float 0 .0 , double 0 .0 )
640
+ call double @simple_floats (half 0 . 0 , float 0 .0 , double 0 .0 )
638
641
call void (...) @has_varargs ()
639
642
%c = alloca i8
640
643
call void @has_sret (ptr sret ([100 x i8 ]) %c )
641
644
%aligned = alloca %TSRet , align 32
642
645
store %TSRet { i64 0 , i64 0 }, ptr %aligned , align 32
643
646
call void @has_aligned_sret (ptr align 32 sret (%TSRet ) %aligned )
644
- call [2 x i8 ] @small_array ([2 x i8 ] [i8 0 , i8 0 ], [2 x float ] [float 0 .0 , float 0 .0 ])
647
+ call [2 x i8 ] @small_array ([2 x i8 ] [i8 0 , i8 0 ], [2 x half ] [ half 0 . 0 , half 0 . 0 ], [ 2 x float ] [float 0 .0 , float 0 .0 ])
645
648
call [3 x i64 ] @large_array ([3 x i64 ] [i64 0 , i64 0 , i64 0 ], [2 x double ] [double 0 .0 , double 0 .0 ], [2 x [2 x i64 ]] [[2 x i64 ] [i64 0 , i64 0 ], [2 x i64 ] [i64 0 , i64 0 ]])
646
649
call %T2 @simple_struct (%T1 { i16 0 }, %T2 { i32 0 , float 0 .0 }, %T3 { i64 0 , double 0 .0 }, %T4 { i64 0 , double 0 .0 , i8 0 })
647
650
call <4 x i8 > @small_vector (<4 x i8 > <i8 0 , i8 0 , i8 0 , i8 0 >)
0 commit comments