mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-28 08:59:28 +00:00
Fix Bug: LowerSwitch/2003-05-01-PHIProblem.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5979 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3d73c706e1
commit
20af3222da
@ -84,7 +84,7 @@ void LowerSwitch::processSwitchInst(SwitchInst *SI) {
|
|||||||
Instruction *Br = new BranchInst(Succ, NextBlock, Comp);
|
Instruction *Br = new BranchInst(Succ, NextBlock, Comp);
|
||||||
CurBlock->getInstList().push_back(Br);
|
CurBlock->getInstList().push_back(Br);
|
||||||
|
|
||||||
// If there were any PHI nodes in this success, rewrite one entry from
|
// If there were any PHI nodes in this successor, rewrite one entry from
|
||||||
// OrigBlock to come from CurBlock.
|
// OrigBlock to come from CurBlock.
|
||||||
for (BasicBlock::iterator I = Succ->begin();
|
for (BasicBlock::iterator I = Succ->begin();
|
||||||
PHINode *PN = dyn_cast<PHINode>(I); ++I) {
|
PHINode *PN = dyn_cast<PHINode>(I); ++I) {
|
||||||
@ -93,10 +93,20 @@ void LowerSwitch::processSwitchInst(SwitchInst *SI) {
|
|||||||
PN->setIncomingBlock((unsigned)BlockIdx, CurBlock);
|
PN->setIncomingBlock((unsigned)BlockIdx, CurBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i == e-2) { // Is this looking at the default destination?
|
||||||
|
// If there is an entry in any PHI nodes for the default edge, make sure
|
||||||
|
// to update them as well.
|
||||||
|
for (BasicBlock::iterator I = NextBlock->begin();
|
||||||
|
PHINode *PN = dyn_cast<PHINode>(I); ++I) {
|
||||||
|
int BlockIdx = PN->getBasicBlockIndex(OrigBlock);
|
||||||
|
assert(BlockIdx != -1 && "Switch didn't go to this successor??");
|
||||||
|
PN->setIncomingBlock((unsigned)BlockIdx, CurBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CurBlock = NextBlock; // Move on to the next condition
|
CurBlock = NextBlock; // Move on to the next condition
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// We are now done with the switch instruction, delete it.
|
// We are now done with the switch instruction, delete it.
|
||||||
delete SI;
|
delete SI;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user