64 lines · plain
1; RUN: llc < %s -mtriple=aarch64-windows | FileCheck %s2 3define dso_local i32 @func(ptr %g, i32 %a) "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" {4entry:5 tail call void %g() #26 ret i32 %a7}8 9define dso_local i32 @func2(ptr %g, i32 %a) "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" "target-features"="+v8.3a" {10entry:11 tail call void %g() #212 ret i32 %a13}14 15 16; CHECK-LABEL: func:17; CHECK-NEXT: .seh_proc func18; CHECK-NEXT: // %bb.0:19; CHECK-NEXT: hint #2720; CHECK-NEXT: .seh_pac_sign_lr21; CHECK-NEXT: str x19, [sp, #-16]!22; CHECK-NEXT: .seh_save_reg_x x19, 1623; CHECK-NEXT: str x30, [sp, #8]24; CHECK-NEXT: .seh_save_reg x30, 825; CHECK-NEXT: .seh_endprologue26 27; CHECK: .seh_startepilogue28; CHECK-NEXT: ldr x30, [sp, #8]29; CHECK-NEXT: .seh_save_reg x30, 830; CHECK-NEXT: ldr x19, [sp], #1631; CHECK-NEXT: .seh_save_reg_x x19, 1632; CHECK-NEXT: hint #3133; CHECK-NEXT: .seh_pac_sign_lr34; CHECK-NEXT: .seh_endepilogue35; CHECK-NEXT: ret36; CHECK-NEXT: .seh_endfunclet37; CHECK-NEXT: .seh_endproc38 39;; For func2, check that the potentially folded autibsp+ret -> retab40;; is handled correctly - currently we inhibit producing retab here.41 42; CHECK-LABEL: func2:43; CHECK-NEXT: .seh_proc func244; CHECK-NEXT: // %bb.0:45; CHECK-NEXT: pacibsp46; CHECK-NEXT: .seh_pac_sign_lr47; CHECK-NEXT: str x19, [sp, #-16]!48; CHECK-NEXT: .seh_save_reg_x x19, 1649; CHECK-NEXT: str x30, [sp, #8]50; CHECK-NEXT: .seh_save_reg x30, 851; CHECK-NEXT: .seh_endprologue52 53; CHECK: .seh_startepilogue54; CHECK-NEXT: ldr x30, [sp, #8]55; CHECK-NEXT: .seh_save_reg x30, 856; CHECK-NEXT: ldr x19, [sp], #1657; CHECK-NEXT: .seh_save_reg_x x19, 1658; CHECK-NEXT: autibsp59; CHECK-NEXT: .seh_pac_sign_lr60; CHECK-NEXT: .seh_endepilogue61; CHECK-NEXT: ret62; CHECK-NEXT: .seh_endfunclet63; CHECK-NEXT: .seh_endproc64