Why?  We don't use stale data and don't use either as an analysis so they are destroyed no matter what.<div><br></div><div><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 29, 2017, 11:18 AM Xin Tong via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">trentxintong created this revision.<br>
Herald added a subscriber: Prazek.<br>
<br>
PredicateInfo uses OrderedBasicBlock and NewGVN which uses PredicateInfo should keep<br>
it updated and correct.<br>
<br>
<br>
<a href="https://reviews.llvm.org/D34823" rel="noreferrer" target="_blank">https://reviews.llvm.org/D34823</a><br>
<br>
Files:<br>
  include/llvm/Transforms/Utils/PredicateInfo.h<br>
  lib/Transforms/Scalar/NewGVN.cpp<br>
<br>
<br>
Index: lib/Transforms/Scalar/NewGVN.cpp<br>
===================================================================<br>
--- lib/Transforms/Scalar/NewGVN.cpp<br>
+++ lib/Transforms/Scalar/NewGVN.cpp<br>
@@ -3174,8 +3174,10 @@<br>
     if (!ToErase->use_empty())<br>
       ToErase->replaceAllUsesWith(UndefValue::get(ToErase->getType()));<br>
<br>
-    if (ToErase->getParent())<br>
+    if (ToErase->getParent()) {<br>
+      PredInfo->updateErasedInst(ToErase);<br>
       ToErase->eraseFromParent();<br>
+    }<br>
   }<br>
<br>
   // Delete all unreachable blocks.<br>
Index: include/llvm/Transforms/Utils/PredicateInfo.h<br>
===================================================================<br>
--- include/llvm/Transforms/Utils/PredicateInfo.h<br>
+++ include/llvm/Transforms/Utils/PredicateInfo.h<br>
@@ -221,6 +221,13 @@<br>
     return PredicateMap.lookup(V);<br>
   }<br>
<br>
+  // Inform the PredicateInfo analysis when an instruction is deleted<br>
+  // in the function.<br>
+  void updateErasedInst(const Instruction *Inst) {<br>
+    // Need to invalidate the ordered basicblock for the instruction.<br>
+    OI.invalidateBlock(Inst->getParent());<br>
+  }<br>
+<br>
 protected:<br>
   // Used by PredicateInfo annotater, dumpers, and wrapper pass.<br>
   friend class PredicateInfoAnnotatedWriter;<br>
<br>
<br>
</blockquote></div></div>