1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=aarch64-pc-windows-msvc %s -o - -global-isel -global-isel-abort=0 | FileCheck %s 3 4; Make sure we correctly fall back to SelectionDAG isel for unsupported stack protectors. 5 6define void @caller() sspreq { 7; CHECK-LABEL: caller: 8; CHECK: .seh_proc caller 9; CHECK-NEXT: // %bb.0: // %entry 10; CHECK-NEXT: sub sp, sp, #32 11; CHECK-NEXT: .seh_stackalloc 32 12; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill 13; CHECK-NEXT: .seh_save_reg x30, 16 14; CHECK-NEXT: .seh_endprologue 15; CHECK-NEXT: adrp x8, __security_cookie 16; CHECK-NEXT: add x0, sp, #4 17; CHECK-NEXT: ldr x8, [x8, :lo12:__security_cookie] 18; CHECK-NEXT: str x8, [sp, #8] 19; CHECK-NEXT: bl callee 20; CHECK-NEXT: ldr x0, [sp, #8] 21; CHECK-NEXT: bl __security_check_cookie 22; CHECK-NEXT: .seh_startepilogue 23; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload 24; CHECK-NEXT: .seh_save_reg x30, 16 25; CHECK-NEXT: add sp, sp, #32 26; CHECK-NEXT: .seh_stackalloc 32 27; CHECK-NEXT: .seh_endepilogue 28; CHECK-NEXT: ret 29; CHECK-NEXT: .seh_endfunclet 30; CHECK-NEXT: .seh_endproc 31entry: 32 %x = alloca i32, align 4 33 call void @callee(ptr nonnull %x) 34 ret void 35} 36 37declare void @callee(ptr) 38