diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2014-12-02 18:31:53 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2014-12-02 18:31:53 +0000 |
commit | 15520db9adce8413ef02fd6ffc68ee6aa8d182f0 (patch) | |
tree | 22c9202ab590d7c44076770f17f6e327ed29d3c2 /llvm/lib/Transforms/Utils/LowerSwitch.cpp | |
parent | b6f0a83f417e857c27be13d625e9f205feab777d (diff) | |
download | bcm5719-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.cpp | 5 |
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--; } } } |