@@ -444,6 +444,50 @@ define %T2 @simple_struct(%T1 %0, %T2 %1, %T3, %T4) nounwind {
444
444
ret %T2 %1
445
445
}
446
446
447
+ define void @cxx_method (ptr noundef nonnull align 8 dereferenceable (8 ) %0 , ptr dead_on_unwind inreg noalias writable sret (i64 ) align 8 %1 ) {
448
+ ; CHECK-LABEL: .def $ientry_thunk$cdecl$i8$i8i8;
449
+ ; CHECK: .section .wowthk$aa,"xr",discard,$ientry_thunk$cdecl$i8$i8i8
450
+ ; CHECK: // %bb.0:
451
+ ; CHECK-NEXT: stp q6, q7, [sp, #-176]! // 32-byte Folded Spill
452
+ ; CHECK-NEXT: .seh_save_any_reg_px q6, 176
453
+ ; CHECK-NEXT: stp q8, q9, [sp, #32] // 32-byte Folded Spill
454
+ ; CHECK-NEXT: .seh_save_any_reg_p q8, 32
455
+ ; CHECK-NEXT: stp q10, q11, [sp, #64] // 32-byte Folded Spill
456
+ ; CHECK-NEXT: .seh_save_any_reg_p q10, 64
457
+ ; CHECK-NEXT: stp q12, q13, [sp, #96] // 32-byte Folded Spill
458
+ ; CHECK-NEXT: .seh_save_any_reg_p q12, 96
459
+ ; CHECK-NEXT: stp q14, q15, [sp, #128] // 32-byte Folded Spill
460
+ ; CHECK-NEXT: .seh_save_any_reg_p q14, 128
461
+ ; CHECK-NEXT: stp x29, x30, [sp, #160] // 16-byte Folded Spill
462
+ ; CHECK-NEXT: .seh_save_fplr 160
463
+ ; CHECK-NEXT: add x29, sp, #160
464
+ ; CHECK-NEXT: .seh_add_fp 160
465
+ ; CHECK-NEXT: .seh_endprologue
466
+ ; CHECK-NEXT: blr x9
467
+ ; CHECK-NEXT: adrp x8, __os_arm64x_dispatch_ret
468
+ ; CHECK-NEXT: ldr x1, [x8, :lo12:__os_arm64x_dispatch_ret]
469
+ ; CHECK-NEXT: mov x8, x0
470
+ ; CHECK-NEXT: .seh_startepilogue
471
+ ; CHECK-NEXT: ldp x29, x30, [sp, #160] // 16-byte Folded Reload
472
+ ; CHECK-NEXT: .seh_save_fplr 160
473
+ ; CHECK-NEXT: ldp q14, q15, [sp, #128] // 32-byte Folded Reload
474
+ ; CHECK-NEXT: .seh_save_any_reg_p q14, 128
475
+ ; CHECK-NEXT: ldp q12, q13, [sp, #96] // 32-byte Folded Reload
476
+ ; CHECK-NEXT: .seh_save_any_reg_p q12, 96
477
+ ; CHECK-NEXT: ldp q10, q11, [sp, #64] // 32-byte Folded Reload
478
+ ; CHECK-NEXT: .seh_save_any_reg_p q10, 64
479
+ ; CHECK-NEXT: ldp q8, q9, [sp, #32] // 32-byte Folded Reload
480
+ ; CHECK-NEXT: .seh_save_any_reg_p q8, 32
481
+ ; CHECK-NEXT: ldp q6, q7, [sp], #176 // 32-byte Folded Reload
482
+ ; CHECK-NEXT: .seh_save_any_reg_px q6, 176
483
+ ; CHECK-NEXT: .seh_endepilogue
484
+ ; CHECK-NEXT: br x1
485
+ ; CHECK-NEXT: .seh_endfunclet
486
+ ; CHECK-NEXT: .seh_endproc
487
+ ret void
488
+ }
489
+
490
+
447
491
; Verify the hybrid bitmap
448
492
; CHECK-LABEL: .section .hybmp$x,"yi"
449
493
; CHECK-NEXT: .symidx "#no_op"
@@ -476,3 +520,6 @@ define %T2 @simple_struct(%T1 %0, %T2 %1, %T3, %T4) nounwind {
476
520
; CHECK-NEXT: .symidx "#simple_struct"
477
521
; CHECK-NEXT: .symidx $ientry_thunk$cdecl$m8$i8m8m16m24
478
522
; CHECK-NEXT: .word 1
523
+ ; CHECK-NEXT: .symidx "#cxx_method"
524
+ ; CHECK-NEXT: .symidx $ientry_thunk$cdecl$i8$i8i8
525
+ ; CHECK-NEXT: .word 1
0 commit comments