<div dir="ltr">(The added #include was actually meant to go in as a part of r326177. Oops.)<div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 26, 2018 at 10:43 PM, George Burgess IV via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: gbiv<br>
Date: Mon Feb 26 22:43:19 2018<br>
New Revision: 326175<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=326175&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=326175&view=rev</a><br>
Log:<br>
[MemorySSA] Call the correct dtors<br>
<br>
It appears that there were many cases where we were directly (through<br>
templates) calling the dtor of MemoryAccess, which is conceptually an<br>
abstract class.<br>
<br>
This hasn't been a problem, since the data members of all of the<br>
subclasses of MemoryAccess have been POD. I'm planning on changing that.<br>
:)<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/Analys<wbr>is/MemorySSA.h<br>
    llvm/trunk/lib/Analysis/Memory<wbr>SSA.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/Analys<wbr>is/MemorySSA.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/MemorySSA.h?rev=326175&r1=326174&r2=326175&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/include/llvm/<wbr>Analysis/MemorySSA.h?rev=32617<wbr>5&r1=326174&r2=326175&view=dif<wbr>f</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/Analys<wbr>is/MemorySSA.h (original)<br>
+++ llvm/trunk/include/llvm/Analys<wbr>is/MemorySSA.h Mon Feb 26 22:43:19 2018<br>
@@ -93,6 +93,7 @@<br>
 #include "llvm/IR/Use.h"<br>
 #include "llvm/IR/User.h"<br>
 #include "llvm/IR/Value.h"<br>
+#include "llvm/IR/ValueHandle.h"<br>
 #include "llvm/Pass.h"<br>
 #include "llvm/Support/Casting.h"<br>
 #include <algorithm><br>
@@ -217,10 +218,18 @@ protected:<br>
       : DerivedUser(Type::getVoidTy(C)<wbr>, Vty, nullptr, NumOperands, DeleteValue),<br>
         Block(BB) {}<br>
<br>
+  // Use deleteValue() to delete a generic MemoryAccess.<br>
+  ~MemoryAccess() = default;<br>
+<br>
 private:<br>
   BasicBlock *Block;<br>
 };<br>
<br>
+template <><br>
+struct ilist_alloc_traits<MemoryAcces<wbr>s> {<br>
+  static void deleteNode(MemoryAccess *MA) { MA->deleteValue(); }<br>
+};<br>
+<br>
 inline raw_ostream &operator<<(raw_ostream &OS, const MemoryAccess &MA) {<br>
   MA.print(OS);<br>
   return OS;<br>
@@ -270,6 +279,9 @@ protected:<br>
     setDefiningAccess(DMA);<br>
   }<br>
<br>
+  // Use deleteValue() to delete a generic MemoryUseOrDef.<br>
+  ~MemoryUseOrDef() = default;<br>
+<br>
   void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false) {<br>
     if (!Optimized) {<br>
       setOperand(0, DMA);<br>
@@ -773,7 +785,7 @@ private:<br>
   // corresponding list is empty.<br>
   AccessMap PerBlockAccesses;<br>
   DefsMap PerBlockDefs;<br>
-  std::unique_ptr<MemoryAccess> LiveOnEntryDef;<br>
+  std::unique_ptr<MemoryAccess, ValueDeleter> LiveOnEntryDef;<br>
<br>
   // Domination mappings<br>
   // Note that the numbering is local to a block, even though the map is<br>
<br>
Modified: llvm/trunk/lib/Analysis/Memory<wbr>SSA.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemorySSA.cpp?rev=326175&r1=326174&r2=326175&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/lib/Analysis/<wbr>MemorySSA.cpp?rev=326175&r1=32<wbr>6174&r2=326175&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Analysis/Memory<wbr>SSA.cpp (original)<br>
+++ llvm/trunk/lib/Analysis/Memory<wbr>SSA.cpp Mon Feb 26 22:43:19 2018<br>
@@ -1304,9 +1304,8 @@ void MemorySSA::buildMemorySSA() {<br>
   // semantics do *not* imply that something with no immediate uses can simply<br>
   // be removed.<br>
   BasicBlock &StartingPoint = F.getEntryBlock();<br>
-  LiveOnEntryDef =<br>
-      llvm::make_unique<MemoryDef>(F<wbr>.getContext(), nullptr, nullptr,<br>
-                                   &StartingPoint, NextID++);<br>
+  LiveOnEntryDef.reset(new MemoryDef(F.getContext(), nullptr, nullptr,<br>
+                                     &StartingPoint, NextID++));<br>
   DenseMap<const BasicBlock *, unsigned int> BBNumbers;<br>
   unsigned NextBBNum = 0;<br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>