diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-11-02 06:28:16 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-11-02 06:28:16 +0000 |
| commit | 55033283326526fb606e21577c53045bf002eeed (patch) | |
| tree | 4326d0d08902301bef337fd3fbaefbf8930ec533 /llvm/lib/Transforms | |
| parent | 4910b656b230456b72fa7929e3371a73995ba23a (diff) | |
| download | bcm5719-llvm-55033283326526fb606e21577c53045bf002eeed.tar.gz bcm5719-llvm-55033283326526fb606e21577c53045bf002eeed.zip | |
restore some code I removed in r85788, refactor it into
a shared place instead of duplicating it 4 times.
llvm-svn: 85792
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SCCP.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index 026c9f568cc..553c94bebc5 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -386,6 +386,20 @@ private: if (BBExecutable.count(I.getParent())) // Inst is executable? visit(I); } + + /// RemoveFromOverdefinedPHIs - If I has any entries in the + /// UsersOfOverdefinedPHIs map for PN, remove them now. + void RemoveFromOverdefinedPHIs(Instruction *I, PHINode *PN) { + if (UsersOfOverdefinedPHIs.empty()) return; + std::multimap<PHINode*, Instruction*>::iterator It, E; + tie(It, E) = UsersOfOverdefinedPHIs.equal_range(PN); + while (It != E) { + if (It->second == I) + UsersOfOverdefinedPHIs.erase(It++); + else + ++It; + } + } private: friend class InstVisitor<SCCPSolver>; @@ -904,8 +918,8 @@ void SCCPSolver::visitBinaryOperator(Instruction &I) { // added ourselves to the UsersOfOverdefinedPHIs list for the PHIs, // make sure to clean out any entries that we put there, for // efficiency. - UsersOfOverdefinedPHIs.erase(PN1); - UsersOfOverdefinedPHIs.erase(PN2); + RemoveFromOverdefinedPHIs(&I, PN1); + RemoveFromOverdefinedPHIs(&I, PN2); } markOverdefined(&I); @@ -986,8 +1000,8 @@ void SCCPSolver::visitCmpInst(CmpInst &I) { // added ourselves to the UsersOfOverdefinedPHIs list for the PHIs, // make sure to clean out any entries that we put there, for // efficiency. - UsersOfOverdefinedPHIs.erase(PN1); - UsersOfOverdefinedPHIs.erase(PN2); + RemoveFromOverdefinedPHIs(&I, PN1); + RemoveFromOverdefinedPHIs(&I, PN2); } markOverdefined(&I); |

