Skip to content

Commit 4403123

Browse files
Revert "[win][aarch64] Always reserve frame pointers for Arm64 Windows" (#146836)
Reverts #146582 Due to failures on many of Linaro's Linux flang bots: https://lab.llvm.org/buildbot/#/builders/17/builds/9292 ``` ******************** TEST 'Flang :: Semantics/windows.f90' FAILED ******************** Exit Code: 1 Command Output (stdout): -- --- +++ @@ -0,0 +1,2 @@ expect at 6: User IDs do not exist on Windows. This function will always return 1 expect at 11: Group IDs do not exist on Windows. This function will always return 1 FAIL -- Command Output (stderr): -- RUN: at line 1 has no command after substitutions "/usr/bin/python3.10" /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/llvm/flang/test/Semantics/test_errors.py /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/llvm/flang/test/Semantics/windows.f90 /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1/bin/flang --target=aarch64-pc-windows-msvc -Werror # RUN: at line 2 + /usr/bin/python3.10 /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/llvm/flang/test/Semantics/test_errors.py /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/llvm/flang/test/Semantics/windows.f90 /home/tcwg-buildbot/worker/clang-aarch64-sve-vla/stage1/bin/flang --target=aarch64-pc-windows-msvc -Werror -- ```
1 parent 6a50aa7 commit 4403123

File tree

10 files changed

+50
-131
lines changed

10 files changed

+50
-131
lines changed

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,7 @@ static bool mustUseNonLeafFramePointerForTarget(const llvm::Triple &Triple) {
174174
// even if new frame records are not created.
175175
static bool mustMaintainValidFrameChain(const llvm::opt::ArgList &Args,
176176
const llvm::Triple &Triple) {
177-
switch (Triple.getArch()) {
178-
default:
179-
return false;
180-
case llvm::Triple::arm:
181-
case llvm::Triple::armeb:
182-
case llvm::Triple::thumb:
183-
case llvm::Triple::thumbeb:
177+
if (Triple.isARM() || Triple.isThumb()) {
184178
// For 32-bit Arm, the -mframe-chain=aapcs and -mframe-chain=aapcs+leaf
185179
// options require the frame pointer register to be reserved (or point to a
186180
// new AAPCS-compilant frame record), even with -fno-omit-frame-pointer.
@@ -189,13 +183,8 @@ static bool mustMaintainValidFrameChain(const llvm::opt::ArgList &Args,
189183
return V != "none";
190184
}
191185
return false;
192-
193-
case llvm::Triple::aarch64:
194-
// Arm64 Windows requires that the frame chain is valid, as there is no
195-
// way to indicate during a stack walk that a frame has used the frame
196-
// pointer as a general purpose register.
197-
return Triple.isOSWindows();
198186
}
187+
return false;
199188
}
200189

201190
// True if a target-specific option causes -fno-omit-frame-pointer to also

clang/test/Driver/frame-pointer-elim.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
// KEEP-NON-LEAF: "-mframe-pointer=non-leaf"
55
// KEEP-NONE-NOT: warning: argument unused
66
// KEEP-NONE: "-mframe-pointer=none"
7-
// KEEP-RESERVED-NOT: warning: argument unused
8-
// KEEP-RESERVED: "-mframe-pointer=reserved"
97

108
// On Linux x86, omit frame pointer when optimization is enabled.
119
// RUN: %clang -### --target=i386-linux -S -fomit-frame-pointer %s 2>&1 | \
@@ -217,9 +215,5 @@
217215
// RUN: %clang -### --target=aarch64-none-elf -S -O1 -fno-omit-frame-pointer %s 2>&1 | \
218216
// RUN: FileCheck --check-prefix=KEEP-NON-LEAF %s
219217

220-
// AArch64 Windows requires that the frame pointer be reserved
221-
// RUN: %clang -### --target=aarch64-pc-windows-msvc -S -fomit-frame-pointer %s 2>&1 | \
222-
// RUN: FileCheck --check-prefix=KEEP-RESERVED %s
223-
224218
void f0() {}
225219
void f1() { f0(); }

llvm/lib/Target/AArch64/AArch64FrameLowering.cpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -518,27 +518,6 @@ bool AArch64FrameLowering::hasFPImpl(const MachineFunction &MF) const {
518518
return false;
519519
}
520520

521-
/// Should the Frame Pointer be reserved for the current function?
522-
bool AArch64FrameLowering::isFPReserved(const MachineFunction &MF) const {
523-
const TargetMachine &TM = MF.getTarget();
524-
const Triple &TT = TM.getTargetTriple();
525-
526-
// These OSes require the frame chain is valid, even if the current frame does
527-
// not use a frame pointer.
528-
if (TT.isOSDarwin() || TT.isOSWindows())
529-
return true;
530-
531-
// If the function has a frame pointer, it is reserved.
532-
if (hasFP(MF))
533-
return true;
534-
535-
// Frontend has requested to preserve the frame pointer.
536-
if (TM.Options.FramePointerIsReserved(MF))
537-
return true;
538-
539-
return false;
540-
}
541-
542521
/// hasReservedCallFrame - Under normal circumstances, when a frame pointer is
543522
/// not required, we reserve argument space for call sites in the function
544523
/// immediately on entry to the current function. This eliminates the need for

llvm/lib/Target/AArch64/AArch64FrameLowering.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,6 @@ class AArch64FrameLowering : public TargetFrameLowering {
126126
orderFrameObjects(const MachineFunction &MF,
127127
SmallVectorImpl<int> &ObjectsToAllocate) const override;
128128

129-
bool isFPReserved(const MachineFunction &MF) const;
130-
131129
protected:
132130
bool hasFPImpl(const MachineFunction &MF) const override;
133131

llvm/lib/Target/AArch64/AArch64RegisterInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ AArch64RegisterInfo::getStrictlyReservedRegs(const MachineFunction &MF) const {
441441
markSuperRegs(Reserved, AArch64::WSP);
442442
markSuperRegs(Reserved, AArch64::WZR);
443443

444-
if (TFI->isFPReserved(MF))
444+
if (TFI->hasFP(MF) || TT.isOSDarwin())
445445
markSuperRegs(Reserved, AArch64::W29);
446446

447447
if (MF.getSubtarget<AArch64Subtarget>().isWindowsArm64EC()) {

llvm/test/CodeGen/AArch64/regress-w29-reserved-with-fp.ll

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,11 @@
1-
; RUN: llc -mtriple=aarch64-none-linux-gnu -frame-pointer=none < %s | \
2-
; RUN: FileCheck %s --check-prefixes=CHECK,NONE
3-
; RUN: llc -mtriple=aarch64-none-linux-gnu -frame-pointer=reserved < %s | \
4-
; RUN: FileCheck %s --check-prefixes=CHECK,RESERVED
5-
; RUN: llc -mtriple=aarch64-none-linux-gnu -frame-pointer=all < %s | \
6-
; RUN: FileCheck %s --check-prefixes=CHECK,ALL
7-
8-
; By default, Darwin and Windows will reserve x29
9-
; RUN: llc -mtriple=aarch64-darwin -frame-pointer=none < %s | \
10-
; RUN: FileCheck %s --check-prefixes=CHECK,RESERVED
11-
; RUN: llc -mtriple=aarch64-darwin -frame-pointer=none < %s | \
12-
; RUN: FileCheck %s --check-prefixes=CHECK,RESERVED
1+
; RUN: llc -mtriple=aarch64-none-linux-gnu -frame-pointer=all < %s | FileCheck %s
132
@var = global i32 0
143

154
declare void @bar()
165

176
define void @test_w29_reserved() {
187
; CHECK-LABEL: test_w29_reserved:
19-
; ALL: add x29, sp
20-
; NONE-NOT: add x29
21-
; NONE-NOT: mov x29
22-
; RESERVED-NOT: add x29
23-
; RESERVED-NOT: mov x29
8+
; CHECK: mov x29, sp
249

2510
%val1 = load volatile i32, ptr @var
2611
%val2 = load volatile i32, ptr @var
@@ -31,11 +16,8 @@ define void @test_w29_reserved() {
3116
%val7 = load volatile i32, ptr @var
3217
%val8 = load volatile i32, ptr @var
3318
%val9 = load volatile i32, ptr @var
34-
%val10 = load volatile i32, ptr @var
3519

36-
; NONE: ldr w29,
37-
; ALL-NOT: ldr w29,
38-
; RESERVED-NOT: ldr w29,
20+
; CHECK-NOT: ldr w29,
3921

4022
; Call to prevent fp-elim that occurs regardless in leaf functions.
4123
call void @bar()
@@ -49,7 +31,6 @@ define void @test_w29_reserved() {
4931
store volatile i32 %val7, ptr @var
5032
store volatile i32 %val8, ptr @var
5133
store volatile i32 %val9, ptr @var
52-
store volatile i32 %val10, ptr @var
5334

5435
ret void
5536
; CHECK: ret

llvm/test/CodeGen/AArch64/win-sve.ll

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -65,18 +65,14 @@ define i32 @f(<vscale x 2 x i64> %x) {
6565
; CHECK-NEXT: .seh_save_zreg z22, 16
6666
; CHECK-NEXT: str z23, [sp, #17, mul vl] // 16-byte Folded Spill
6767
; CHECK-NEXT: .seh_save_zreg z23, 17
68-
; CHECK-NEXT: str x28, [sp, #-16]! // 8-byte Folded Spill
69-
; CHECK-NEXT: .seh_save_reg_x x28, 16
70-
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
71-
; CHECK-NEXT: .seh_save_reg x30, 8
68+
; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
69+
; CHECK-NEXT: .seh_save_fplr_x 16
7270
; CHECK-NEXT: .seh_endprologue
7371
; CHECK-NEXT: bl g
7472
; CHECK-NEXT: mov w0, #3 // =0x3
7573
; CHECK-NEXT: .seh_startepilogue
76-
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
77-
; CHECK-NEXT: .seh_save_reg x30, 8
78-
; CHECK-NEXT: ldr x28, [sp] // 8-byte Folded Reload
79-
; CHECK-NEXT: .seh_save_reg x28, 0
74+
; CHECK-NEXT: ldp x29, x30, [sp] // 16-byte Folded Reload
75+
; CHECK-NEXT: .seh_save_fplr 0
8076
; CHECK-NEXT: add sp, sp, #16
8177
; CHECK-NEXT: .seh_stackalloc 16
8278
; CHECK-NEXT: ldr z8, [sp, #2, mul vl] // 16-byte Folded Reload
@@ -369,10 +365,8 @@ define void @f3(i64 %n, <vscale x 2 x i64> %x) {
369365
; CHECK-NEXT: .seh_save_zreg z22, 16
370366
; CHECK-NEXT: str z23, [sp, #17, mul vl] // 16-byte Folded Spill
371367
; CHECK-NEXT: .seh_save_zreg z23, 17
372-
; CHECK-NEXT: str x28, [sp, #-16]! // 8-byte Folded Spill
373-
; CHECK-NEXT: .seh_save_reg_x x28, 16
374-
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
375-
; CHECK-NEXT: .seh_save_reg x30, 8
368+
; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
369+
; CHECK-NEXT: .seh_save_fplr_x 16
376370
; CHECK-NEXT: sub sp, sp, #16
377371
; CHECK-NEXT: .seh_stackalloc 16
378372
; CHECK-NEXT: .seh_endprologue
@@ -382,10 +376,8 @@ define void @f3(i64 %n, <vscale x 2 x i64> %x) {
382376
; CHECK-NEXT: .seh_startepilogue
383377
; CHECK-NEXT: add sp, sp, #16
384378
; CHECK-NEXT: .seh_stackalloc 16
385-
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
386-
; CHECK-NEXT: .seh_save_reg x30, 8
387-
; CHECK-NEXT: ldr x28, [sp] // 8-byte Folded Reload
388-
; CHECK-NEXT: .seh_save_reg x28, 0
379+
; CHECK-NEXT: ldp x29, x30, [sp] // 16-byte Folded Reload
380+
; CHECK-NEXT: .seh_save_fplr 0
389381
; CHECK-NEXT: add sp, sp, #16
390382
; CHECK-NEXT: .seh_stackalloc 16
391383
; CHECK-NEXT: ldr z8, [sp, #2, mul vl] // 16-byte Folded Reload
@@ -519,10 +511,8 @@ define void @f4(i64 %n, <vscale x 2 x i64> %x) {
519511
; CHECK-NEXT: .seh_save_zreg z22, 16
520512
; CHECK-NEXT: str z23, [sp, #17, mul vl] // 16-byte Folded Spill
521513
; CHECK-NEXT: .seh_save_zreg z23, 17
522-
; CHECK-NEXT: str x28, [sp, #-16]! // 8-byte Folded Spill
523-
; CHECK-NEXT: .seh_save_reg_x x28, 16
524-
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
525-
; CHECK-NEXT: .seh_save_reg x30, 8
514+
; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
515+
; CHECK-NEXT: .seh_save_fplr_x 16
526516
; CHECK-NEXT: sub sp, sp, #16
527517
; CHECK-NEXT: .seh_stackalloc 16
528518
; CHECK-NEXT: addvl sp, sp, #-1
@@ -536,10 +526,8 @@ define void @f4(i64 %n, <vscale x 2 x i64> %x) {
536526
; CHECK-NEXT: .seh_allocz 1
537527
; CHECK-NEXT: add sp, sp, #16
538528
; CHECK-NEXT: .seh_stackalloc 16
539-
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
540-
; CHECK-NEXT: .seh_save_reg x30, 8
541-
; CHECK-NEXT: ldr x28, [sp] // 8-byte Folded Reload
542-
; CHECK-NEXT: .seh_save_reg x28, 0
529+
; CHECK-NEXT: ldp x29, x30, [sp] // 16-byte Folded Reload
530+
; CHECK-NEXT: .seh_save_fplr 0
543531
; CHECK-NEXT: add sp, sp, #16
544532
; CHECK-NEXT: .seh_stackalloc 16
545533
; CHECK-NEXT: ldr z8, [sp, #2, mul vl] // 16-byte Folded Reload
@@ -1105,10 +1093,8 @@ define void @f7(i64 %n) {
11051093
; CHECK-LABEL: f7:
11061094
; CHECK: .seh_proc f7
11071095
; CHECK-NEXT: // %bb.0:
1108-
; CHECK-NEXT: str x28, [sp, #-16]! // 8-byte Folded Spill
1109-
; CHECK-NEXT: .seh_save_reg_x x28, 16
1110-
; CHECK-NEXT: str x30, [sp, #8] // 8-byte Folded Spill
1111-
; CHECK-NEXT: .seh_save_reg x30, 8
1096+
; CHECK-NEXT: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
1097+
; CHECK-NEXT: .seh_save_fplr_x 16
11121098
; CHECK-NEXT: addvl sp, sp, #-1
11131099
; CHECK-NEXT: .seh_allocz 1
11141100
; CHECK-NEXT: .seh_endprologue
@@ -1117,10 +1103,8 @@ define void @f7(i64 %n) {
11171103
; CHECK-NEXT: .seh_startepilogue
11181104
; CHECK-NEXT: addvl sp, sp, #1
11191105
; CHECK-NEXT: .seh_allocz 1
1120-
; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Folded Reload
1121-
; CHECK-NEXT: .seh_save_reg x30, 8
1122-
; CHECK-NEXT: ldr x28, [sp], #16 // 8-byte Folded Reload
1123-
; CHECK-NEXT: .seh_save_reg_x x28, 16
1106+
; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload
1107+
; CHECK-NEXT: .seh_save_fplr_x 16
11241108
; CHECK-NEXT: .seh_endepilogue
11251109
; CHECK-NEXT: ret
11261110
; CHECK-NEXT: .seh_endfunclet

llvm/test/CodeGen/AArch64/wincfi-missing-seh-directives.ll

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,25 @@
55
; prologue has a corresponding seh directive.
66
;
77
; CHECK-NOT: error: Incorrect size for
8-
; CHECK-LABEL: foo:
9-
; CHECK-NEXT: .seh_proc foo
10-
; CHECK: sub sp, sp, #496
11-
; CHECK-NEXT: .seh_stackalloc 496
12-
; CHECK-NEXT: str x19, [sp, #208] // 8-byte Folded Spill
13-
; CHECK-NEXT: .seh_save_reg x19, 208
14-
; CHECK-NEXT: str x21, [sp, #216] // 8-byte Folded Spill
15-
; CHECK-NEXT: .seh_save_reg x21, 216
16-
; CHECK-NEXT: stp x23, x24, [sp, #224] // 16-byte Folded Spill
17-
; CHECK-NEXT: .seh_save_regp x23, 224
18-
; CHECK-NEXT: stp x25, x26, [sp, #240] // 16-byte Folded Spill
19-
; CHECK-NEXT: .seh_save_regp x25, 240
20-
; CHECK-NEXT: stp x27, x28, [sp, #256] // 16-byte Folded Spill
21-
; CHECK-NEXT: .seh_save_regp x27, 256
22-
; CHECK-NEXT: str x30, [sp, #272] // 8-byte Folded Spill
23-
; CHECK-NEXT: .seh_save_reg x30, 272
24-
; CHECK-NEXT: .seh_endprologue
8+
; CHECK: foo:
9+
; CHECK: .seh_proc foo
10+
; CHECK: sub sp, sp, #288
11+
; CHECK: .seh_stackalloc 288
12+
; CHECK: str x19, [sp] // 8-byte Folded Spill
13+
; CHECK: .seh_save_reg x19, 0
14+
; CHECK: str x21, [sp, #8] // 8-byte Folded Spill
15+
; CHECK: .seh_save_reg x21, 8
16+
; CHECK: stp x23, x24, [sp, #16] // 16-byte Folded Spill
17+
; CHECK: .seh_save_regp x23, 16
18+
; CHECK: stp x25, x26, [sp, #32] // 16-byte Folded Spill
19+
; CHECK: .seh_save_regp x25, 32
20+
; CHECK: stp x27, x28, [sp, #48] // 16-byte Folded Spill
21+
; CHECK: .seh_save_regp x27, 48
22+
; CHECK: stp x29, x30, [sp, #64] // 16-byte Folded Spill
23+
; CHECK: .seh_save_fplr 64
24+
; CHECK: sub sp, sp, #224
25+
; CHECK: .seh_stackalloc 224
26+
; CHECK: .seh_endprologue
2527

2628
target datalayout = "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128-Fn32"
2729
target triple = "aarch64-unknown-windows-msvc19.42.34436"

llvm/test/CodeGen/AArch64/wineh-frame5.mir

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
# CHECK-LABEL: bb.0.entry:
66
# CHECK: early-clobber $sp = frame-setup STRXpre killed $x19, $sp, -32
77
# CHECK-NEXT: frame-setup SEH_SaveReg_X 19, -32
8-
# CHECK-NEXT: frame-setup STRXui killed $x28, $sp, 1
9-
# CHECK-NEXT: frame-setup SEH_SaveReg 28, 8
10-
# CHECK-NEXT: frame-setup STRXui killed $lr, $sp, 2
11-
# CHECK-NEXT: frame-setup SEH_SaveReg 30, 16
8+
# CHECK-NEXT: frame-setup STPXi killed $fp, killed $lr, $sp, 1
9+
# CHECK-NEXT: frame-setup SEH_SaveFPLR 8
1210
# CHECK-NEXT: $sp = frame-setup SUBXri $sp, 496, 0
1311
# CHECK-NEXT: frame-setup SEH_StackAlloc 496
1412
# CHECK-NEXT: frame-setup SEH_PrologEnd
@@ -17,10 +15,8 @@
1715
# CHECK: frame-destroy SEH_EpilogStart
1816
# CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 496, 0
1917
# CHECK-NEXT: frame-destroy SEH_StackAlloc 496
20-
# CHECK-NEXT: $lr = frame-destroy LDRXui $sp, 2
21-
# CHECK-NEXT: frame-destroy SEH_SaveReg 30, 16
22-
# CHECK-NEXT: $x28 = frame-destroy LDRXui $sp, 1
23-
# CHECK-NEXT: frame-destroy SEH_SaveReg 28, 8
18+
# CHECK-NEXT: $fp, $lr = frame-destroy LDPXi $sp, 1
19+
# CHECK-NEXT: frame-destroy SEH_SaveFPLR 8
2420
# CHECK-NEXT: early-clobber $sp, $x19 = frame-destroy LDRXpost $sp, 32
2521
# CHECK-NEXT: frame-destroy SEH_SaveReg_X 19, -32
2622
# CHECK-NEXT: frame-destroy SEH_EpilogEnd

llvm/test/CodeGen/AArch64/wineh-frame7.mir

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@
33
# Test that stack probe results in Nop unwind codes in the prologue. Test
44
# save_fplr, save_reg_x and stack_alloc with multiple updates.
55

6-
# CHECK: early-clobber $sp = frame-setup STRXpre killed $x28, $sp, -32
7-
# CHECK-NEXT: frame-setup SEH_SaveReg_X 28, -32
8-
# CHECK-NEXT: frame-setup STPXi killed $fp, killed $lr, $sp, 1
9-
# CHECK-NEXT: frame-setup SEH_SaveFPLR 8
6+
# CHECK: early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2
7+
# CHECK-NEXT: frame-setup SEH_SaveFPLR_X -16
108
# CHECK-NEXT: $x15 = frame-setup MOVZXi 56009, 0
119
# CHECK-NEXT: frame-setup SEH_Nop
1210
# CHECK-NEXT: $x15 = frame-setup MOVKXi $x15, 2, 16
1311
# CHECK-NEXT: frame-setup SEH_Nop
14-
# CHECK-NEXT: frame-setup BL &__chkstk, implicit-def $lr, implicit $sp, implicit $x15, implicit-def dead $x16, implicit-def dead $x17, implicit-def dead $nzcv
12+
# CHECK-NEXT: frame-setup BL &__chkstk, implicit-def $lr, implicit $sp, implicit $x15
1513
# CHECK-NEXT: frame-setup SEH_Nop
1614
# CHECK-NEXT: $sp = frame-setup SUBXrx64 killed $sp, killed $x15, 28
1715
# CHECK-NEXT: frame-setup SEH_StackAlloc 2993296
@@ -21,10 +19,8 @@
2119
# CHECK-NEXT: frame-destroy SEH_StackAlloc 2990080
2220
# CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 3216, 0
2321
# CHECK-NEXT: frame-destroy SEH_StackAlloc 3216
24-
# CHECK-NEXT: $fp, $lr = frame-destroy LDPXi $sp, 1
25-
# CHECK-NEXT: frame-destroy SEH_SaveFPLR 8
26-
# CHECK-NEXT: early-clobber $sp, $x28 = frame-destroy LDRXpost $sp, 32
27-
# CHECK-NEXT: frame-destroy SEH_SaveReg_X 28, -32
22+
# CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2
23+
# CHECK-NEXT: frame-destroy SEH_SaveFPLR_X -16
2824
# CHECK-NEXT: frame-destroy SEH_EpilogEnd
2925
# CHECK-NEXT: RET_ReallyLR implicit killed $w0
3026
--- |

0 commit comments

Comments
 (0)