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>