[llvm-branch-commits] [llvm] release/23.x: [X86] Don't skip frame setup/destroy on SEH pseudos and regenerate tests (#225445) (PR #228924)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Oct 4 10:45:55 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: llvmbot
<details>
<summary>Changes</summary>
Backport cb474be
Requested by: @<!-- -->folkertdev
---
Patch is 26.91 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/228924.diff
13 Files Affected:
- (modified) llvm/lib/Target/X86/X86FrameLowering.cpp (+6-3)
- (modified) llvm/lib/Target/X86/X86WinEHUnwindV2.cpp (+6-3)
- (modified) llvm/lib/Target/X86/X86WinEHUnwindV3.cpp (+2-1)
- (modified) llvm/test/CodeGen/X86/taildup-callsiteinfo.mir (+2-2)
- (modified) llvm/test/CodeGen/X86/win64-eh-empty-block-2.mir (+4-4)
- (modified) llvm/test/CodeGen/X86/win64-eh-unwindv2-errors.mir (+28-28)
- (modified) llvm/test/CodeGen/X86/win64-eh-unwindv2-push-pop-stack-alloc.mir (+18-18)
- (modified) llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-epilogs.mir (+23-21)
- (modified) llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-instr.mir (+26-18)
- (modified) llvm/test/CodeGen/X86/win64-eh-unwindv3-split-large.ll (+18)
- (modified) llvm/test/CodeGen/X86/win64-eh-unwindv3-too-many-epilog-ops.mir (+34-34)
- (modified) llvm/test/CodeGen/X86/win64-eh-unwindv3-too-many-prolog-ops.mir (+2-2)
- (modified) llvm/test/DebugInfo/MIR/X86/instr-ref-join-def-vphi.mir (+2-2)
``````````diff
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index a657c7d3873e5..a27e816b7c8f8 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -2711,7 +2711,8 @@ void X86FrameLowering::emitEpilogue(MachineFunction &MF,
}
// For V3, SEH_BeginEpilogue must be emitted before any epilog SEH pseudos.
- BuildMI(MBB, EpilogStart, DL, TII.get(X86::SEH_BeginEpilogue));
+ BuildMI(MBB, EpilogStart, DL, TII.get(X86::SEH_BeginEpilogue))
+ .setMIFlag(MachineInstr::FrameDestroy);
}
// If dynamic alloca is used, then reset esp to point to the last callee-saved
@@ -2774,7 +2775,8 @@ void X86FrameLowering::emitEpilogue(MachineFunction &MF,
// For V1/V2, emit SEH_BeginEpilogue after stack restore code.
if (!IsWin64UnwindV3 && NeedsWin64CFI && MF.hasWinCFI())
- BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_BeginEpilogue));
+ BuildMI(MBB, MBBI, DL, TII.get(X86::SEH_BeginEpilogue))
+ .setMIFlag(MachineInstr::FrameDestroy);
if (!HasFP && NeedsDwarfCFI) {
MBBI = FirstCSPop;
@@ -2821,7 +2823,8 @@ void X86FrameLowering::emitEpilogue(MachineFunction &MF,
BuildMI(MBB, Terminator, DL, TII.get(X86::TILERELEASE));
if (NeedsWin64CFI && MF.hasWinCFI())
- BuildMI(MBB, Terminator, DL, TII.get(X86::SEH_EndEpilogue));
+ BuildMI(MBB, Terminator, DL, TII.get(X86::SEH_EndEpilogue))
+ .setMIFlag(MachineInstr::FrameDestroy);
}
StackOffset X86FrameLowering::getFrameIndexReference(const MachineFunction &MF,
diff --git a/llvm/lib/Target/X86/X86WinEHUnwindV2.cpp b/llvm/lib/Target/X86/X86WinEHUnwindV2.cpp
index 79b91206e9d5b..bfab37f4871c6 100644
--- a/llvm/lib/Target/X86/X86WinEHUnwindV2.cpp
+++ b/llvm/lib/Target/X86/X86WinEHUnwindV2.cpp
@@ -418,13 +418,15 @@ bool runX86WinEHUnwindV2(MachineFunction &MF) {
MachineBasicBlock &MBB = *Info.UnwindV2StartLocation->getParent();
const DebugLoc &DL = Info.UnwindV2StartLocation->getDebugLoc();
BuildMI(MBB, Info.UnwindV2StartLocation, DL,
- TII->get(X86::SEH_UnwindV2Start));
+ TII->get(X86::SEH_UnwindV2Start))
+ .setMIFlag(MachineInstr::FrameDestroy);
if ((LastUnwindInfoEndPosition - Info.ApproximateInstructionPosition >=
InstructionCountThreshold) ||
(UnwindCodeCount >= UnwindCodeThreshold)) {
BuildMI(MBB, MBB.begin(), DL,
- TII->get(X86::SEH_SplitChainedAtEndOfBlock));
+ TII->get(X86::SEH_SplitChainedAtEndOfBlock))
+ .setMIFlag(MachineInstr::FrameDestroy);
LastUnwindInfoEndPosition = Info.ApproximateInstructionPosition;
// Doesn't reset to 0, as the prolog unwind codes are now in this info.
UnwindCodeCount = FI.ApproximatePrologCodeCount + 1;
@@ -438,7 +440,8 @@ bool runX86WinEHUnwindV2(MachineFunction &MF) {
MachineBasicBlock &FirstMBB = MF.front();
BuildMI(FirstMBB, FirstMBB.front(), findDebugLoc(FirstMBB),
TII->get(X86::SEH_UnwindVersion))
- .addImm(2);
+ .addImm(2)
+ .setMIFlag(MachineInstr::FrameSetup);
return true;
}
diff --git a/llvm/lib/Target/X86/X86WinEHUnwindV3.cpp b/llvm/lib/Target/X86/X86WinEHUnwindV3.cpp
index 4efedcd796f21..d11b540631c66 100644
--- a/llvm/lib/Target/X86/X86WinEHUnwindV3.cpp
+++ b/llvm/lib/Target/X86/X86WinEHUnwindV3.cpp
@@ -310,7 +310,8 @@ bool X86WinEHUnwindV3::runOnMachineFunction(MachineFunction &MF) {
auto SplitAfter = [&](const EpilogSplitPoint &Epilog) {
MachineBasicBlock *MBB = Epilog.BeginEpilog->getParent();
BuildMI(*MBB, MBB->begin(), Epilog.BeginEpilog->getDebugLoc(),
- TII->get(X86::SEH_SplitChainedAtEndOfBlock));
+ TII->get(X86::SEH_SplitChainedAtEndOfBlock))
+ .setMIFlag(MachineInstr::FrameDestroy);
SubFragmentSplits++;
Changed = true;
};
diff --git a/llvm/test/CodeGen/X86/taildup-callsiteinfo.mir b/llvm/test/CodeGen/X86/taildup-callsiteinfo.mir
index 93991799aeb2a..8aa25324a8cb3 100644
--- a/llvm/test/CodeGen/X86/taildup-callsiteinfo.mir
+++ b/llvm/test/CodeGen/X86/taildup-callsiteinfo.mir
@@ -68,9 +68,9 @@ body: |
liveins: $ecx
CALL64pcrel32 @alloc, csr_win64, implicit $rsp, implicit $ssp, implicit $ecx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = frame-destroy ADD64ri8 $rsp, 40, implicit-def dead $eflags
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
TAILJMPd64 @f2, csr_win64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp
...
diff --git a/llvm/test/CodeGen/X86/win64-eh-empty-block-2.mir b/llvm/test/CodeGen/X86/win64-eh-empty-block-2.mir
index b97bccd11705d..6efb7aa59ea86 100644
--- a/llvm/test/CodeGen/X86/win64-eh-empty-block-2.mir
+++ b/llvm/test/CodeGen/X86/win64-eh-empty-block-2.mir
@@ -170,10 +170,10 @@ body: |
bb.8.return (machine-block-address-taken):
$eax = MOV32rm $rbp, 1, $noreg, -12, $noreg :: (load (s32) from %stack.0)
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = frame-destroy ADD64ri8 $rsp, 48, implicit-def dead $eflags
$rbp = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 $eax
bb.1.if.then:
@@ -216,10 +216,10 @@ body: |
frame-setup SEH_EndPrologue
MOV32mi $rbp, 1, $noreg, -12, $noreg, 1 :: (store (s32) into %stack.0)
$rax = LEA64r $rip, 0, $noreg, %bb.8, $noreg
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = frame-destroy ADD64ri8 $rsp, 32, implicit-def dead $eflags
$rbp = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
CATCHRET %bb.8, %bb.0
...
diff --git a/llvm/test/CodeGen/X86/win64-eh-unwindv2-errors.mir b/llvm/test/CodeGen/X86/win64-eh-unwindv2-errors.mir
index c8eee80bd7265..54fa4aaee1ca0 100644
--- a/llvm/test/CodeGen/X86/win64-eh-unwindv2-errors.mir
+++ b/llvm/test/CodeGen/X86/win64-eh-unwindv2-errors.mir
@@ -36,8 +36,8 @@ body: |
$rsp = frame-setup SUB64ri32 $rsp, 40, implicit-def dead $eflags
frame-setup SEH_StackAlloc 40
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -74,9 +74,9 @@ body: |
frame-setup PUSH64r killed $rdi, implicit-def $rsp, implicit $rsp
frame-setup SEH_PushReg 55
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -109,9 +109,9 @@ name: dealloc_no_alloc
body: |
bb.0.entry:
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = frame-destroy ADD64ri32 $rsp, 40, implicit-def dead $eflags
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -146,8 +146,8 @@ name: dealloc_after_epilog
body: |
bb.0.entry:
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
$rsp = frame-destroy ADD64ri32 $rsp, 40, implicit-def dead $eflags
RET64
...
@@ -185,10 +185,10 @@ body: |
$rsp = frame-setup SUB64ri32 $rsp, 40, implicit-def dead $eflags
frame-setup SEH_StackAlloc 40
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$rsp = frame-destroy ADD64ri32 $rsp, 40, implicit-def dead $eflags
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -221,9 +221,9 @@ name: mov_no_setframe
body: |
bb.0.entry:
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = MOV64rr $rbp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -260,8 +260,8 @@ body: |
$rbp = MOV64rr $rsp
frame-setup SEH_SetFrame 52, 0
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
$rsp = MOV64rr $rbp
RET64
...
@@ -299,10 +299,10 @@ body: |
$rbp = MOV64rr $rsp
frame-setup SEH_SetFrame 52, 0
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$rsp = MOV64rr $rbp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -339,10 +339,10 @@ body: |
$rsp = frame-setup SUB64ri32 $rsp, 40, implicit-def dead $eflags
frame-setup SEH_StackAlloc 40
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = frame-destroy ADD64ri32 $rsp, 40, implicit-def dead $eflags
$rsp = MOV64rr $rbp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -377,10 +377,10 @@ body: |
frame-setup PUSH64r killed $rdi, implicit-def $rsp, implicit $rsp
frame-setup SEH_PushReg 55
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -417,10 +417,10 @@ body: |
frame-setup PUSH64r killed $rsi, implicit-def $rsp, implicit $rsp
frame-setup SEH_PushReg 60
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
@@ -453,8 +453,8 @@ name: pop_after_epilog
body: |
bb.0.entry:
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
RET64
...
@@ -488,8 +488,8 @@ name: instr_after_epilog
body: |
bb.0.entry:
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
$ecx = MOV32rr killed $eax
RET64
...
@@ -527,10 +527,10 @@ body: |
$rsp = frame-setup SUB64ri32 $rsp, 40, implicit-def dead $eflags
frame-setup SEH_StackAlloc 40
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = frame-destroy ADD64ri32 $rsp, 20, implicit-def dead $eflags
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$rsp = frame-destroy ADD64ri32 $rsp, 20, implicit-def dead $eflags
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
diff --git a/llvm/test/CodeGen/X86/win64-eh-unwindv2-push-pop-stack-alloc.mir b/llvm/test/CodeGen/X86/win64-eh-unwindv2-push-pop-stack-alloc.mir
index 8207ba3d97bd6..cb30162b70d16 100644
--- a/llvm/test/CodeGen/X86/win64-eh-unwindv2-push-pop-stack-alloc.mir
+++ b/llvm/test/CodeGen/X86/win64-eh-unwindv2-push-pop-stack-alloc.mir
@@ -12,35 +12,35 @@
# CHECK-LABEL: name: push_pop_same
# CHECK: body:
# CHECK-NEXT: bb.0
-# CHECK-NEXT: SEH_UnwindVersion 2
+# CHECK-NEXT: frame-setup SEH_UnwindVersion 2
# CHECK-NEXT: frame-setup PUSH64r undef $rax
# CHECK-NEXT: frame-setup SEH_StackAlloc 8
# CHECK-NEXT: frame-setup SEH_EndPrologue
-# CHECK-NEXT: SEH_BeginEpilogue
+# CHECK-NEXT: frame-destroy SEH_BeginEpilogue
# CHECK-NEXT: $rax = frame-destroy
-# CHECK-NEXT: SEH_UnwindV2Start
-# CHECK-NEXT: SEH_EndEpilogue
+# CHECK-NEXT: frame-destroy SEH_UnwindV2Start
+# CHECK-NEXT: frame-destroy SEH_EndEpilogue
# CHECK-NEXT: RET64
# Pushes and pops a different register.
# CHECK-LABEL: name: push_pop_different
# CHECK: body:
# CHECK-NEXT: bb.0
-# CHECK-NEXT: SEH_UnwindVersion 2
+# CHECK-NEXT: frame-setup SEH_UnwindVersion 2
# CHECK-NEXT: frame-setup PUSH64r undef $rax
# CHECK-NEXT: frame-setup SEH_StackAlloc 8
# CHECK-NEXT: frame-setup SEH_EndPrologue
-# CHECK: SEH_BeginEpilogue
+# CHECK: frame-destroy SEH_BeginEpilogue
# CHECK-NEXT: $rcx = frame-destroy POP64r
-# CHECK-NEXT: SEH_UnwindV2Start
-# CHECK-NEXT: SEH_EndEpilogue
+# CHECK-NEXT: frame-destroy SEH_UnwindV2Start
+# CHECK-NEXT: frame-destroy SEH_EndEpilogue
# CHECK-NEXT: RET64 $eax
# Pushes in the prolog, adds in the epilog.
# CHECK-LABEL: name: push_add
# CHECK: body:
# CHECK-NEXT: bb.0
-# CHECK-NEXT: SEH_UnwindVersion 2
+# CHECK-NEXT: frame-setup SEH_UnwindVersion 2
# CHECK-NEXT: frame-setup PUSH64r killed $r15
# CHECK-NEXT: frame-setup SEH_PushReg 126
# CHECK-NEXT: frame-setup PUSH64r killed $r14
@@ -54,15 +54,15 @@
# CHECK-NEXT: frame-setup PUSH64r undef $rax
# CHECK-NEXT: frame-setup SEH_StackAlloc 8
# CHECK-NEXT: frame-setup SEH_EndPrologue
-# CHECK: SEH_BeginEpilogue
+# CHECK: frame-destroy SEH_BeginEpilogue
# CHECK-NEXT: $rsp = frame-destroy ADD64ri32 $rsp, 8
-# CHECK-NEXT: SEH_UnwindV2Start
+# CHECK-NEXT: frame-destroy SEH_UnwindV2Start
# CHECK-NEXT: $rbx = frame-destroy POP64r
# CHECK-NEXT: $rdi = frame-destroy POP64r
# CHECK-NEXT: $rsi = frame-destroy POP64r
# CHECK-NEXT: $r14 = frame-destroy POP64r
# CHECK-NEXT: $r15 = frame-destroy POP64r
-# CHECK-NEXT: SEH_EndEpilogue
+# CHECK-NEXT: frame-destroy SEH_EndEpilogue
# CHECK-NEXT: RET64
--- |
@@ -97,9 +97,9 @@ body: |
frame-setup PUSH64r undef $rax, implicit-def $rsp, implicit $rsp
frame-setup SEH_StackAlloc 8
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rax = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
---
@@ -112,9 +112,9 @@ body: |
renamable $edx = KILL $edx, implicit-def $rdx
renamable $ecx = KILL $ecx, implicit-def $rcx
renamable $eax = LEA64_32r killed renamable $rcx, 1, killed renamable $rdx, 0, $noreg
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rcx = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 $eax
...
---
@@ -189,13 +189,13 @@ body: |
MOV64mr renamable $r8, 1, $noreg, 8, $noreg, killed renamable $r9 :: (store (s64) into %ir.out + 8, basealign 16)
MOV64mr renamable $r8, 1, $noreg, 16, $noreg, killed renamable $rax :: (store (s64) into %ir.out + 16, align 16)
MOV64mr killed renamable $r8, 1, $noreg, 24, $noreg, killed renamable $rdx :: (store (s64) into %ir.out + 24, basealign 16)
- SEH_BeginEpilogue
+ frame-destroy SEH_BeginEpilogue
$rsp = frame-destroy ADD64ri32 $rsp, 8, implicit-def dead $eflags
$rbx = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$rdi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$rsi = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$r14 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
$r15 = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- SEH_EndEpilogue
+ frame-destroy SEH_EndEpilogue
RET64
...
diff --git a/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-epilogs.mir b/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-epilogs.mir
index 8edc43c83f195..6488f34c0512b 100644
--- a/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-epilogs.mir
+++ b/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-epilogs.mir
@@ -17,12 +17,14 @@
# RUN: -check-prefixes=ALLOWMORE,CHECK
# CHECK-LABEL: too_many_epilogs
-# CHECK: SEH_UnwindVersion 2
-# CHECK: SEH_UnwindV2Start
+# CHECK: frame-setup SEH_UnwindVersion 2
+# CHECK: frame-destroy SEH_BeginEpilogue
+# CHECK-NEXT: frame-destroy SEH_UnwindV2Start
+# CHECK-NEXT: frame-destroy SEH_EndEpilogue
# If we restricted the number of unwind codes, then we expect to use chained
# infos.
-# ALLOWLESS: SEH_SplitChainedAtEndOfBlock
+# ALLOWLESS: frame-destroy SEH_SplitChainedAtEndOfBlock
# ALLOWMORE-NOT: SEH_SplitChainedAtEndOfBlock
--- |
@@ -52,40 +54,40 @@ name: too_many_epilogs
body: |
bb.0.entry:
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !10
bb.1:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.2:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.3:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.4:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.5:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.6:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.7:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.8:
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
...
diff --git a/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-instr.mir b/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-instr.mir
index 44d89356ecae7..ea31e65494ea7 100644
--- a/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-instr.mir
+++ b/llvm/test/CodeGen/X86/win64-eh-unwindv2-too-many-instr.mir
@@ -45,25 +45,25 @@ name: too_many_instr
body: |
bb.0.entry:
frame-setup SEH_EndPrologue
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !10
bb.1:
$rcx = MOV64rr $rax
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !11
bb.2:
$rcx = MOV64rr $rax
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !12
bb.3:
$rcx = MOV64rr $rax
$rcx = MOV64rr $rax
$rcx = MOV64rr $rax
- SEH_BeginEpilogue
- SEH_EndEpilogue
+ frame-destroy SEH_BeginEpilogue
+ frame-destroy SEH_EndEpilogue
RET64 debug-location !13
...
@@ -71,26 +71,34 @@ body: |
# CHECK-LABEL: too_many_instr
# CHECK-LABEL: bb.0.entry:
# bb.1 + bb.2 have enough instructions that bb.0 has its own info.
-# ALLOWLESS: SEH_SplitChainedAtEndOfBlock
+# ALLOWLESS: frame-destroy SEH_SplitChainedAtEndOfBlock
# ALLOWMORE-NOT: SEH_SplitChainedAtEndOfBlock
-# CHECK: SEH_UnwindV2Start
-# CHECK: RET64 debug-location !10
+# CHECK: frame-destroy SEH_BeginEpilogue
+# CHECK-NEXT: frame-destroy SEH_UnwindV2Start
+# CHECK-NEXT: frame-destroy SEH_EndEpilogue
+# CHECK-NEXT: RET64 debug-location !10
# CHECK-LABEL: bb.1
# bb.2 doesn't fill the current info, so bb.1 gets added as well.
# CHECK-NOT: SEH_SplitChainedAtEndOfBlock
-# CHECK: SEH_UnwindV2Start
-# CHECK: RET64 debug-location !DILocation(line: 3, column: 1, scope: !6)
+# CHECK: frame-destroy SEH_BeginE...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/228924
More information about the llvm-branch-commits
mailing list