diff options
author | Chris Lattner <sabre@nondot.org> | 2003-04-25 00:54:58 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-04-25 00:54:58 +0000 |
commit | 3a2fe67908c16d98a81b23cc8c12c1e6f0a44a9c (patch) | |
tree | f0a31a879cb2e751d66330f8d66ec65aafd5f6ea /llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp | |
parent | 65e5f653fdfbaef2a57393c62a239beb124c7b74 (diff) | |
download | bcm5719-llvm-3a2fe67908c16d98a81b23cc8c12c1e6f0a44a9c.tar.gz bcm5719-llvm-3a2fe67908c16d98a81b23cc8c12c1e6f0a44a9c.zip |
Fix bug: mem2reg/2003-04-24-MultipleIdenticalSuccessors.ll
llvm-svn: 5919
Diffstat (limited to 'llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index 3378369f7aa..85acce66e13 100644 --- a/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -222,13 +222,14 @@ void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred, std::vector<PHINode *> &BBPNs = NewPhiNodes[BB]; for (unsigned k = 0; k != BBPNs.size(); ++k) if (PHINode *PN = BBPNs[k]) { - int BBI = PN->getBasicBlockIndex(Pred); - assert(BBI >= 0 && "Predecessor not in basic block yet!"); - - // At this point we can assume that the array has phi nodes.. let's update - // the incoming data. - PN->setIncomingValue(BBI, IncomingVals[k]); - + // The PHI node may have multiple entries for this predecessor. We must + // make sure we update all of them. + for (unsigned i = 0, e = PN->getNumOperands(); i != e; i += 2) { + if (PN->getOperand(i+1) == Pred) + // At this point we can assume that the array has phi nodes.. let's + // update the incoming data. + PN->setOperand(i, IncomingVals[k]); + } // also note that the active variable IS designated by the phi node IncomingVals[k] = PN; } |