aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineFunction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/CodeGen/MachineFunction.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineFunction.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp
index 607e87a..38ad582 100644
--- a/llvm/lib/CodeGen/MachineFunction.cpp
+++ b/llvm/lib/CodeGen/MachineFunction.cpp
@@ -259,6 +259,15 @@ MachineFunction::~MachineFunction() {
void MachineFunction::clear() {
Properties.reset();
+
+ // Clear JumpTableInfo first. Otherwise, every MBB we delete would do a
+ // linear search over the jump table entries to find and erase itself.
+ if (JumpTableInfo) {
+ JumpTableInfo->~MachineJumpTableInfo();
+ Allocator.Deallocate(JumpTableInfo);
+ JumpTableInfo = nullptr;
+ }
+
// Don't call destructors on MachineInstr and MachineOperand. All of their
// memory comes from the BumpPtrAllocator which is about to be purged.
//
@@ -287,11 +296,6 @@ void MachineFunction::clear() {
ConstantPool->~MachineConstantPool();
Allocator.Deallocate(ConstantPool);
- if (JumpTableInfo) {
- JumpTableInfo->~MachineJumpTableInfo();
- Allocator.Deallocate(JumpTableInfo);
- }
-
if (WinEHInfo) {
WinEHInfo->~WinEHFuncInfo();
Allocator.Deallocate(WinEHInfo);