diff options
author | Julien Lerouge <jlerouge@apple.com> | 2012-10-23 00:23:46 +0000 |
---|---|---|
committer | Julien Lerouge <jlerouge@apple.com> | 2012-10-23 00:23:46 +0000 |
commit | 6ecdd0e8247b526521ab12124d157ca58c5de22f (patch) | |
tree | 6764b2d43f4707c5794490ce2c0ceaab5f770b5c /lib/Transforms/Utils/PromoteMemoryToRegister.cpp | |
parent | 2128aaebd850edc0415ab8f37b907077651d4399 (diff) |
Explain why DenseMap is still used here instead of MapVector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166454 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/PromoteMemoryToRegister.cpp')
-rw-r--r-- | lib/Transforms/Utils/PromoteMemoryToRegister.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index f6ad3b8b9e..fb65a1847c 100644 --- a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -212,7 +212,11 @@ namespace { /// DenseMap<AllocaInst*, unsigned> AllocaLookup; - /// NewPhiNodes - The PhiNodes we're adding. + /// NewPhiNodes - The PhiNodes we're adding. That map is used to simplify + /// some Phi nodes as we iterate over it, so it should have deterministic + /// iterators. We could use a MapVector, but since we already maintain a + /// map from BasicBlock* to a stable numbering (BBNumbers), the DenseMap is + /// more efficient (also supports removal). /// DenseMap<std::pair<unsigned, unsigned>, PHINode*> NewPhiNodes; @@ -588,6 +592,10 @@ void PromoteMem2Reg::run() { while (EliminatedAPHI) { EliminatedAPHI = false; + // Iterating over NewPhiNodes is deterministic, so it is safe to try to + // simplify and RUAW them as we go. If it was not, we could add uses to + // the values we replace with in a non deterministic order, thus creating + // non deterministic def->use chains. for (DenseMap<std::pair<unsigned, unsigned>, PHINode*>::iterator I = NewPhiNodes.begin(), E = NewPhiNodes.end(); I != E;) { PHINode *PN = I->second; |