diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2016-07-11 04:37:53 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@dberlin.org> | 2016-07-11 04:37:53 +0000 |
commit | e64985fc94993fc748b9afe84943dec659bdab29 (patch) | |
tree | 1334d21a9d2258557f64a4a8ed42b35a53209910 | |
parent | 60e5bdc4704f46bad75b4a27fcb8820e1c0e6560 (diff) | |
download | bcm5719-llvm-e64985fc94993fc748b9afe84943dec659bdab29.tar.gz bcm5719-llvm-e64985fc94993fc748b9afe84943dec659bdab29.zip |
Allow BasicBlockEdge to be used in DenseMap
Summary: Add a DenseMapInfo specialization for BasicBlockEdge
Reviewers: hfinkel, chandlerc, majnemer
Differential Revision: http://reviews.llvm.org/D22207
llvm-svn: 275041
-rw-r--r-- | llvm/include/llvm/IR/Dominators.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/include/llvm/IR/Dominators.h b/llvm/include/llvm/IR/Dominators.h index 9d29e207221..f445a49b67b 100644 --- a/llvm/include/llvm/IR/Dominators.h +++ b/llvm/include/llvm/IR/Dominators.h @@ -15,6 +15,7 @@ #ifndef LLVM_IR_DOMINATORS_H #define LLVM_IR_DOMINATORS_H +#include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/IR/CFG.h" @@ -54,6 +55,26 @@ public: bool isSingleEdge() const; }; +template <> struct DenseMapInfo<BasicBlockEdge> { + static unsigned getHashValue(const BasicBlockEdge *V); + typedef DenseMapInfo<const BasicBlock *> BBInfo; + static inline BasicBlockEdge getEmptyKey() { + return BasicBlockEdge(BBInfo::getEmptyKey(), BBInfo::getEmptyKey()); + } + static inline BasicBlockEdge getTombstoneKey() { + return BasicBlockEdge(BBInfo::getTombstoneKey(), BBInfo::getTombstoneKey()); + } + + static unsigned getHashValue(const BasicBlockEdge &Edge) { + return hash_combine(BBInfo::getHashValue(Edge.getStart()), + BBInfo::getHashValue(Edge.getEnd())); + } + static bool isEqual(const BasicBlockEdge &LHS, const BasicBlockEdge &RHS) { + return BBInfo::isEqual(LHS.getStart(), RHS.getStart()) && + BBInfo::isEqual(LHS.getEnd(), RHS.getEnd()); + } +}; + /// \brief Concrete subclass of DominatorTreeBase that is used to compute a /// normal dominator tree. /// |