1# RUN: llc -o - %s -mtriple=aarch64-windows -start-before=prologepilog \ 2# RUN: -stop-after=prologepilog | FileCheck %s 3# RUN: llc -o - %s -mtriple=aarch64-windows -start-before=prologepilog \ 4# RUN: | FileCheck --check-prefix=ASM %s 5 6# Check that an odd callee-saved GPR is paired with lr 7 8# CHECK: early-clobber $sp = frame-setup STPXpre killed $x19, killed $x20, $sp, -4 9# CHECK-NEXT: frame-setup SEH_SaveRegP_X 19, 20, -32 10# CHECK-NEXT: frame-setup STPXi killed $x21, killed $lr, $sp, 2 11# CHECK-NEXT: frame-setup SEH_SaveRegP 21, 30, 16 12# CHECK-NEXT: frame-setup SEH_PrologEnd 13 14# ASM: stp x19, x20, [sp, #-32]! 15# ASM-NEXT: .seh_save_regp_x x19, 32 16# ASM-NEXT: stp x21, x30, [sp, #16] 17# ASM-NEXT: .seh_save_lrpair x21, 16 18# ASM-NEXT: .seh_endprologue 19 20--- | 21 22 define dso_local i32 @func(i32 %a) { ret i32 %a } 23 declare dso_local i32 @other() 24 25... 26--- 27name: func 28alignment: 4 29exposesReturnsTwice: false 30legalized: false 31regBankSelected: false 32selected: false 33failedISel: false 34tracksRegLiveness: true 35hasWinCFI: false 36registers: [] 37liveins: [] 38frameInfo: 39 isFrameAddressTaken: false 40 isReturnAddressTaken: false 41 hasStackMap: false 42 hasPatchPoint: false 43 stackSize: 0 44 offsetAdjustment: 0 45 maxAlignment: 4 46 adjustsStack: false 47 hasCalls: false 48 stackProtector: '' 49 maxCallFrameSize: 0 50 cvBytesOfCalleeSavedRegisters: 0 51 hasOpaqueSPAdjustment: false 52 hasVAStart: false 53 hasMustTailInVarArgFunc: false 54 localFrameSize: 4 55 savePoint: '' 56 restorePoint: '' 57fixedStack: [] 58stack: [] 59callSites: [] 60constants: [] 61machineFunctionInfo: {} 62body: | 63 bb.0: 64 liveins: $x0, $x21, $x19, $x20 65 66 BL @other, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0 67 $x19 = ADDXrr $x0, $x0 68 $x20 = ADDXrr $x19, $x0 69 $x21 = ADDXrr $x20, killed $x19 70 $x0 = ADDXrr $x0, killed $x21 71 72 RET_ReallyLR 73 74... 75