add a new setNumChildren method for resizing scopes. Tweak getHash() so
authorChris Lattner <sabre@nondot.org>
Fri, 26 Feb 2010 07:35:27 +0000 (07:35 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 26 Feb 2010 07:35:27 +0000 (07:35 +0000)
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

index 6599b21e93470df323bdc5a8804acb8e3693b206..df6389555b4b4094445304d293456c3cc94b5c94 100644 (file)
@@ -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;