summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/FuncletLayout.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-10-05 20:09:16 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-10-05 20:09:16 +0000
commite4f9b09b5156b5bdd479a98ce28042d2a7623a9b (patch)
tree108f3d21d78cba28587a376274b9a04c389f32f1 /llvm/lib/CodeGen/FuncletLayout.cpp
parent46bc30472bd98182562446be98c4f27133a59a74 (diff)
downloadbcm5719-llvm-e4f9b09b5156b5bdd479a98ce28042d2a7623a9b.tar.gz
bcm5719-llvm-e4f9b09b5156b5bdd479a98ce28042d2a7623a9b.zip
[WinEH] Update CATCHRET's operand to match its successor
The CATCHRET operand did not match the MachineFunction's CFG. This mismatch happened because FrameLowering created a new MachineBasicBlock and updated the CFG but forgot to update the CATCHRET operand. Let's make sure this doesn't happen again by strengthing the funclet membership analysis: it can now reason about the membership of all basic blocks, not just those inside of funclets. llvm-svn: 249344
Diffstat (limited to 'llvm/lib/CodeGen/FuncletLayout.cpp')
-rw-r--r--llvm/lib/CodeGen/FuncletLayout.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/FuncletLayout.cpp b/llvm/lib/CodeGen/FuncletLayout.cpp
index 4307c1524ad..8b2f505ff02 100644
--- a/llvm/lib/CodeGen/FuncletLayout.cpp
+++ b/llvm/lib/CodeGen/FuncletLayout.cpp
@@ -42,8 +42,12 @@ bool FuncletLayout::runOnMachineFunction(MachineFunction &F) {
if (FuncletMembership.empty())
return false;
- F.sort([&](MachineBasicBlock &x, MachineBasicBlock &y) {
- return FuncletMembership[&x] < FuncletMembership[&y];
+ F.sort([&](MachineBasicBlock &X, MachineBasicBlock &Y) {
+ auto FuncletX = FuncletMembership.find(&X);
+ auto FuncletY = FuncletMembership.find(&Y);
+ assert(FuncletX != FuncletMembership.end());
+ assert(FuncletY != FuncletMembership.end());
+ return FuncletX->second < FuncletY->second;
});
// Conservatively assume we changed something.
OpenPOWER on IntegriCloud