summaryrefslogtreecommitdiffstats
path: root/llvm/include/llvm/Analysis/MemorySSA.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/include/llvm/Analysis/MemorySSA.h')
-rw-r--r--llvm/include/llvm/Analysis/MemorySSA.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/include/llvm/Analysis/MemorySSA.h b/llvm/include/llvm/Analysis/MemorySSA.h
index cace882f60e..93911b7407f 100644
--- a/llvm/include/llvm/Analysis/MemorySSA.h
+++ b/llvm/include/llvm/Analysis/MemorySSA.h
@@ -93,6 +93,7 @@
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
+#include "llvm/IR/ValueHandle.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include <algorithm>
@@ -217,10 +218,18 @@ protected:
: DerivedUser(Type::getVoidTy(C), Vty, nullptr, NumOperands, DeleteValue),
Block(BB) {}
+ // Use deleteValue() to delete a generic MemoryAccess.
+ ~MemoryAccess() = default;
+
private:
BasicBlock *Block;
};
+template <>
+struct ilist_alloc_traits<MemoryAccess> {
+ static void deleteNode(MemoryAccess *MA) { MA->deleteValue(); }
+};
+
inline raw_ostream &operator<<(raw_ostream &OS, const MemoryAccess &MA) {
MA.print(OS);
return OS;
@@ -270,6 +279,9 @@ protected:
setDefiningAccess(DMA);
}
+ // Use deleteValue() to delete a generic MemoryUseOrDef.
+ ~MemoryUseOrDef() = default;
+
void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false) {
if (!Optimized) {
setOperand(0, DMA);
@@ -773,7 +785,7 @@ private:
// corresponding list is empty.
AccessMap PerBlockAccesses;
DefsMap PerBlockDefs;
- std::unique_ptr<MemoryAccess> LiveOnEntryDef;
+ std::unique_ptr<MemoryAccess, ValueDeleter> LiveOnEntryDef;
// Domination mappings
// Note that the numbering is local to a block, even though the map is
OpenPOWER on IntegriCloud