diff options
-rw-r--r-- | utils/TableGen/DAGISelMatcher.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/utils/TableGen/DAGISelMatcher.h b/utils/TableGen/DAGISelMatcher.h index 6599b21e93..df6389555b 100644 --- a/utils/TableGen/DAGISelMatcher.h +++ b/utils/TableGen/DAGISelMatcher.h @@ -100,7 +100,8 @@ public: } unsigned getHash() const { - return (getHashImpl() << 4) ^ getKind(); + // Clear the high bit so we don't conflict with tombstones etc. + return ((getHashImpl() << 4) ^ getKind()) & (~0U>>1); } void print(raw_ostream &OS, unsigned indent = 0) const; @@ -137,6 +138,15 @@ public: Children[i] = 0; return Res; } + + void setNumChildren(unsigned NC) { + if (NC < Children.size()) { + // delete any children we're about to lose pointers to. + for (unsigned i = NC, e = Children.size(); i != e; ++i) + delete Children[i]; + } + Children.resize(NC); + } static inline bool classof(const Matcher *N) { return N->getKind() == Scope; |