summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/LowerSwitch.cpp
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2014-12-02 18:31:53 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2014-12-02 18:31:53 +0000
commit15520db9adce8413ef02fd6ffc68ee6aa8d182f0 (patch)
tree22c9202ab590d7c44076770f17f6e327ed29d3c2 /llvm/lib/Transforms/Utils/LowerSwitch.cpp
parentb6f0a83f417e857c27be13d625e9f205feab777d (diff)
downloadbcm5719-llvm-15520db9adce8413ef02fd6ffc68ee6aa8d182f0.tar.gz
bcm5719-llvm-15520db9adce8413ef02fd6ffc68ee6aa8d182f0.zip
[SwitchLowering] Handle destinations on multiple phi instructions
Follow up from r222926. Also handle multiple destinations from merged cases on multiple and subsequent phi instructions. rdar://problem/19106978 llvm-svn: 223135
Diffstat (limited to 'llvm/lib/Transforms/Utils/LowerSwitch.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/LowerSwitch.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/LowerSwitch.cpp b/llvm/lib/Transforms/Utils/LowerSwitch.cpp
index e25956299c6..35cd917330a 100644
--- a/llvm/lib/Transforms/Utils/LowerSwitch.cpp
+++ b/llvm/lib/Transforms/Utils/LowerSwitch.cpp
@@ -149,6 +149,7 @@ static void fixPhis(BasicBlock *SuccBB, BasicBlock *OrigBB, BasicBlock *NewBB,
// Only update the first occurence.
unsigned Idx = 0, E = PN->getNumIncomingValues();
+ unsigned LocalNumMergedCases = NumMergedCases;
for (; Idx != E; ++Idx) {
if (PN->getIncomingBlock(Idx) == OrigBB) {
PN->setIncomingBlock(Idx, NewBB);
@@ -158,10 +159,10 @@ static void fixPhis(BasicBlock *SuccBB, BasicBlock *OrigBB, BasicBlock *NewBB,
// Remove additional occurences coming from condensed cases and keep the
// number of incoming values equal to the number of branches to SuccBB.
- for (++Idx; NumMergedCases > 0 && Idx != E; ++Idx)
+ for (++Idx; LocalNumMergedCases > 0 && Idx < E; ++Idx)
if (PN->getIncomingBlock(Idx) == OrigBB) {
PN->removeIncomingValue(Idx);
- NumMergedCases--;
+ LocalNumMergedCases--;
}
}
}
OpenPOWER on IntegriCloud