@@ -93,10 +93,10 @@ declare i64 @simple_integers(i8, i16, i32, i64) nounwind;
9393; CHECK-NEXT: .seh_endfunclet
9494; CHECK-NEXT: .seh_endproc
9595
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
100100; CHECK: // %bb.0:
101101; CHECK-NEXT: sub sp, sp, #48
102102; CHECK-NEXT: .seh_stackalloc 48
@@ -129,8 +129,8 @@ declare double @simple_floats(float, double) nounwind;
129129; CHECK-NEXT: adrp x11, simple_floats
130130; CHECK-NEXT: add x11, x11, :lo12:simple_floats
131131; 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
134134; CHECK-NEXT: blr x8
135135; CHECK-NEXT: .seh_startepilogue
136136; 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;
282282; CHECK: .seh_endfunclet
283283; CHECK: .seh_endproc
284284
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
288288; 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
295295; 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
307310; 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
312315; CHECK-NEXT: .seh_endepilogue
313316; CHECK-NEXT: ret
314317; CHECK-NEXT: .seh_endfunclet
@@ -325,8 +328,8 @@ declare [2 x i8] @small_array([2 x i8], [2 x float]) nounwind;
325328; CHECK-NEXT: adrp x11, small_array
326329; CHECK-NEXT: add x11, x11, :lo12:small_array
327330; 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
330333; CHECK-NEXT: blr x8
331334; CHECK-NEXT: .seh_startepilogue
332335; 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;
577580; CHECK-NEXT: .symidx simple_integers
578581; CHECK-NEXT: .word 0
579582; 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
581584; CHECK-NEXT: .word 4
582585; CHECK-NEXT: .symidx "#simple_floats$exit_thunk"
583586; CHECK-NEXT: .symidx simple_floats
@@ -601,7 +604,7 @@ declare <8 x i16> @large_vector(<8 x i16> %0) nounwind;
601604; CHECK-NEXT: .symidx has_aligned_sret
602605; CHECK-NEXT: .word 0
603606; 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
605608; CHECK-NEXT: .word 4
606609; CHECK-NEXT: .symidx "#small_array$exit_thunk"
607610; CHECK-NEXT: .symidx small_array
@@ -634,14 +637,14 @@ declare <8 x i16> @large_vector(<8 x i16> %0) nounwind;
634637define void @func_caller () nounwind {
635638 call void @no_op ()
636639 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 )
638641 call void (...) @has_varargs ()
639642 %c = alloca i8
640643 call void @has_sret (ptr sret ([100 x i8 ]) %c )
641644 %aligned = alloca %TSRet , align 32
642645 store %TSRet { i64 0 , i64 0 }, ptr %aligned , align 32
643646 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 ])
645648 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 ]])
646649 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 })
647650 call <4 x i8 > @small_vector (<4 x i8 > <i8 0 , i8 0 , i8 0 , i8 0 >)
0 commit comments