From ca56feaf381db61ad1f07873235185ef33f6426f Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 26 Feb 2010 07:35:27 +0000 Subject: add a new setNumChildren method for resizing scopes. Tweak getHash() so that we never return a tombstone value, which (thankfully) triggers an assert in densemap. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97214 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/DAGISelMatcher.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'utils/TableGen/DAGISelMatcher.h') 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; -- cgit v1.2.3