[llvm] r223135 - [SwitchLowering] Handle destinations on multiple phi instructions
Bruno Cardoso Lopes
bruno.cardoso at gmail.com
Tue Dec 2 10:31:54 PST 2014
Author: bruno
Date: Tue Dec 2 12:31:53 2014
New Revision: 223135
URL: http://llvm.org/viewvc/llvm-project?rev=223135&view=rev
Log:
[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
Modified:
llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp
llvm/trunk/test/Transforms/Util/lowerswitch.ll
Modified: llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp?rev=223135&r1=223134&r2=223135&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp Tue Dec 2 12:31:53 2014
@@ -149,6 +149,7 @@ static void fixPhis(BasicBlock *SuccBB,
// 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,
// 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--;
}
}
}
Modified: llvm/trunk/test/Transforms/Util/lowerswitch.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Util/lowerswitch.ll?rev=223135&r1=223134&r2=223135&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/Util/lowerswitch.ll (original)
+++ llvm/trunk/test/Transforms/Util/lowerswitch.ll Tue Dec 2 12:31:53 2014
@@ -45,6 +45,8 @@ bb3:
; CHECK-LABEL: bb3
; CHECK: %tmp = phi i32 [ 1, %NodeBlock ], [ 0, %bb2 ], [ 1, %LeafBlock3 ]
%tmp = phi i32 [ 1, %bb1 ], [ 0, %bb2 ], [ 1, %bb1 ], [ 1, %bb1 ]
+; CHECK-NEXT: %tmp2 = phi i32 [ 2, %NodeBlock ], [ 5, %bb2 ], [ 2, %LeafBlock3 ]
+ %tmp2 = phi i32 [ 2, %bb1 ], [ 2, %bb1 ], [ 5, %bb2 ], [ 2, %bb1 ]
br label %exit
exit:
More information about the llvm-commits
mailing list