xref: /llvm-project/llvm/test/CodeGen/AArch64/wineh-frame1.mir (revision 49510c50200cf58c9f2dedf4e4ab36a16503878e)
1# RUN: llc -o - %s -mtriple=aarch64-windows -start-before=prologepilog \
2# RUN:   -stop-after=prologepilog | FileCheck %s
3# Check save_fregp_x, save_fregp
4
5# CHECK:         early-clobber $sp = frame-setup STPXpre killed $x19, killed $x20, $sp, -14
6# CHECK-NEXT:    frame-setup SEH_SaveRegP_X 19, 20, -112
7# CHECK-NEXT:    frame-setup STPXi killed $x21, killed $x22, $sp, 2
8# CHECK-NEXT:    frame-setup SEH_SaveRegP 21, 22, 16
9# CHECK-NEXT:    frame-setup STPXi killed $x23, killed $x24, $sp, 4
10# CHECK-NEXT:    frame-setup SEH_SaveRegP 23, 24, 32
11# CHECK-NEXT:    frame-setup STPXi killed $x25, killed $x26, $sp, 6
12# CHECK-NEXT:    frame-setup SEH_SaveRegP 25, 26, 48
13# CHECK-NEXT:    frame-setup STPXi killed $x27, killed $x28, $sp, 8
14# CHECK-NEXT:    frame-setup SEH_SaveRegP 27, 28, 64
15# CHECK-NEXT:    frame-setup STPDi killed $d8, killed $d9, $sp, 10
16# CHECK-NEXT:    frame-setup SEH_SaveFRegP 8, 9, 80
17# CHECK-NEXT:    frame-setup STPDi killed $d10, killed $d11, $sp, 12
18# CHECK-NEXT:    frame-setup SEH_SaveFRegP 10, 11, 96
19# CHECK-NEXT:    frame-setup SEH_PrologEnd
20# CHECK:         frame-destroy SEH_EpilogStart
21# CHECK-NEXT:    $d10, $d11 = frame-destroy LDPDi $sp, 12
22# CHECK-NEXT:    frame-destroy SEH_SaveFRegP 10, 11, 96
23# CHECK-NEXT:    $d8, $d9 = frame-destroy LDPDi $sp, 10
24# CHECK-NEXT:    frame-destroy SEH_SaveFRegP 8, 9, 80
25# CHECK-NEXT:    $x27, $x28 = frame-destroy LDPXi $sp, 8
26# CHECK-NEXT:    frame-destroy SEH_SaveRegP 27, 28, 64
27# CHECK-NEXT:    $x25, $x26 = frame-destroy LDPXi $sp, 6
28# CHECK-NEXT:    frame-destroy SEH_SaveRegP 25, 26, 48
29# CHECK-NEXT:    $x23, $x24 = frame-destroy LDPXi $sp, 4
30# CHECK-NEXT:    frame-destroy SEH_SaveRegP 23, 24, 32
31# CHECK-NEXT:    $x21, $x22 = frame-destroy LDPXi $sp, 2
32# CHECK-NEXT:    frame-destroy SEH_SaveRegP 21, 22, 16
33# CHECK-NEXT:    early-clobber $sp, $x19, $x20 = frame-destroy LDPXpost $sp, 14
34# CHECK-NEXT:    frame-destroy SEH_SaveRegP_X 19, 20, -112
35# CHECK-NEXT:    frame-destroy SEH_EpilogEnd
36# CHECK-NEXT:    RET_ReallyLR implicit $x0
37...
38---
39name:            test
40alignment:       4
41exposesReturnsTwice: false
42legalized:       false
43regBankSelected: false
44selected:        false
45failedISel:      false
46tracksRegLiveness: true
47hasWinCFI:       true
48registers:
49liveins:
50  - { reg: '$w0', virtual-reg: '' }
51frameInfo:
52  isFrameAddressTaken: false
53  isReturnAddressTaken: false
54  hasStackMap:     false
55  hasPatchPoint:   false
56  stackSize:       112
57  offsetAdjustment: 0
58  maxAlignment:    8
59  adjustsStack:    false
60  hasCalls:        false
61  stackProtector:  ''
62  maxCallFrameSize: 0
63  hasOpaqueSPAdjustment: true
64  hasVAStart:      false
65  hasMustTailInVarArgFunc: false
66  localFrameSize:  0
67  savePoint:       ''
68  restorePoint:    ''
69fixedStack:
70stack:
71constants:
72body:             |
73  bb.0.entry:
74    liveins: $x0, $x1, $d0, $d1, $d10, $d11, $d8, $d9, $x27, $x28, $x25, $x26, $x23, $x24, $x21, $x22, $x19, $x20
75
76    $x19 = ADDXrr $x0, killed $x1
77    $d8 = FADDDrr killed $d0, $d1, implicit $fpcr
78    $d9 = FADDDrr $d8, $d1, implicit $fpcr
79    $d10 = FADDDrr $d9, $d8, implicit $fpcr
80    $d11 = FADDDrr killed $d9, $d10, implicit $fpcr
81    $x20 = ADDXrr $x19, killed $x0
82    $x21 = ADDXrr $x20, killed $x19
83    $x22 = ADDXrr $x21, killed $x20
84    $x23 = ADDXrr $x22, killed $x21
85    $x24 = ADDXrr $x23, killed $x22
86    $x25 = ADDXrr $x24, killed $x23
87    $x26 = ADDXrr $x25, killed $x24
88    $x27 = ADDXrr $x26, killed $x25
89    $x28 = ADDXrr $x27, killed $x26
90    $x0 = COPY $d11
91    $x0 = ADDXrr $x0, killed $x28
92    RET_ReallyLR implicit $x0
93
94...
95