<br><div class="gmail_quote">On Mon, Oct 22, 2012 at 5:23 PM, Julien Lerouge <span dir="ltr"><<a href="mailto:jlerouge@apple.com" target="_blank">jlerouge@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: jlerouge<br>
Date: Mon Oct 22 19:23:46 2012<br>
New Revision: 166454<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=166454&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=166454&view=rev</a><br>
Log:<br>
Explain why DenseMap is still used here instead of MapVector.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp?rev=166454&r1=166453&r2=166454&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp?rev=166454&r1=166453&r2=166454&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Mon Oct 22 19:23:46 2012<br>
@@ -212,7 +212,11 @@<br>
     ///<br>
     DenseMap<AllocaInst*, unsigned>  AllocaLookup;<br>
<br>
-    /// NewPhiNodes - The PhiNodes we're adding.<br>
+    /// NewPhiNodes - The PhiNodes we're adding.  That map is used to simplify<br>
+    /// some Phi nodes as we iterate over it, so it should have deterministic<br>
+    /// iterators.  We could use a MapVector, but since we already maintain a<br>
+    /// map from BasicBlock* to a stable numbering (BBNumbers), the DenseMap is<br>
+    /// more efficient (also supports removal).<br>
     ///<br>
     DenseMap<std::pair<unsigned, unsigned>, PHINode*> NewPhiNodes;<br>
<br>
@@ -588,6 +592,10 @@<br>
   while (EliminatedAPHI) {<br>
     EliminatedAPHI = false;<br>
<br>
+    // Iterating over NewPhiNodes is deterministic, so it is safe to try to<br>
+    // simplify and RUAW them as we go.  If it was not, we could add uses to<br>
+    // the values we replace with in a non deterministic order, thus creating<br>
+    // non deterministic def->use chains.<br></blockquote><div><br>Isn't the acronym RAUW not RUAW?<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

     for (DenseMap<std::pair<unsigned, unsigned>, PHINode*>::iterator I =<br>
            NewPhiNodes.begin(), E = NewPhiNodes.end(); I != E;) {<br>
       PHINode *PN = I->second;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>~Craig<br>