• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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