[llvm-commits] [llvm] r166454 - /llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
Julien Lerouge
jlerouge at apple.com
Mon Oct 22 17:23:46 PDT 2012
Author: jlerouge
Date: Mon Oct 22 19:23:46 2012
New Revision: 166454
URL: http://llvm.org/viewvc/llvm-project?rev=166454&view=rev
Log:
Explain why DenseMap is still used here instead of MapVector.
Modified:
llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
Modified: llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp?rev=166454&r1=166453&r2=166454&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Mon Oct 22 19:23:46 2012
@@ -212,7 +212,11 @@
///
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 @@
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;
More information about the llvm-commits
mailing list