summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86FrameLowering.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2019-09-03 22:27:27 +0000
committerReid Kleckner <rnk@google.com>2019-09-03 22:27:27 +0000
commit3fa07dee94368643cdbc38fb24d8d2734b9bf42c (patch)
tree47b305d9f92cc54ae59568aa30c4a0c358645563 /llvm/lib/Target/X86/X86FrameLowering.cpp
parent49e7ee4dd58f57b67d3f1b953d2f81ae6ad75964 (diff)
downloadbcm5719-llvm-3fa07dee94368643cdbc38fb24d8d2734b9bf42c.tar.gz
bcm5719-llvm-3fa07dee94368643cdbc38fb24d8d2734b9bf42c.zip
Revert [Windows] Disable TrapUnreachable for Win64, add SEH_NoReturn
This reverts r370525 (git commit 0bb1630685fba255fa93def92603f064c2ffd203) Also reverts r370543 (git commit 185ddc08eed6542781040b8499ef7ad15c8ae9f4) The approach I took only works for functions marked `noreturn`. In general, a call that is not known to be noreturn may be followed by unreachable for other reasons. For example, there could be multiple call sites to a function that throws sometimes, and at some call sites, it is known to always throw, so it is followed by unreachable. We need to insert an `int3` in these cases to pacify the Windows unwinder. I think this probably deserves its own standalone, Win64-only fixup pass that runs after block placement. Implementing that will take some time, so let's revert to TrapUnreachable in the mean time. llvm-svn: 370829
Diffstat (limited to 'llvm/lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r--llvm/lib/Target/X86/X86FrameLowering.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index 681a618e2d5..e1ed5aa5abc 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -2558,7 +2558,7 @@ bool blockEndIsUnreachable(const MachineBasicBlock &MBB,
MBB.succ_begin(), MBB.succ_end(),
[](const MachineBasicBlock *Succ) { return Succ->isEHPad(); }) &&
std::all_of(MBBI, MBB.end(), [](const MachineInstr &MI) {
- return MI.isMetaInstruction() || MI.getOpcode() == X86::SEH_NoReturn;
+ return MI.isMetaInstruction();
});
}
OpenPOWER on IntegriCloud