contract movechild+checktype into a new checkchild node, shrinking the
x86 table by 1200 bytes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97053 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/DAGISelMatcherOpt.cpp b/utils/TableGen/DAGISelMatcherOpt.cpp
index 408bd63..796b815 100644
--- a/utils/TableGen/DAGISelMatcherOpt.cpp
+++ b/utils/TableGen/DAGISelMatcherOpt.cpp
@@ -26,12 +26,19 @@
   // If we found a movechild node with a node that comes in a 'foochild' form,
   // transform it.
   if (MoveChildMatcherNode *MC = dyn_cast<MoveChildMatcherNode>(N)) {
-    if (RecordMatcherNode *RM = dyn_cast<RecordMatcherNode>(MC->getNext())) {
-      MatcherNode *New
-        = new RecordChildMatcherNode(MC->getChildNo(), RM->getWhatFor());
+    MatcherNode *New = 0;
+    if (RecordMatcherNode *RM = dyn_cast<RecordMatcherNode>(MC->getNext()))
+      New = new RecordChildMatcherNode(MC->getChildNo(), RM->getWhatFor());
+    
+    if (CheckTypeMatcherNode *CT= dyn_cast<CheckTypeMatcherNode>(MC->getNext()))
+      New = new CheckChildTypeMatcherNode(MC->getChildNo(), CT->getType());
+    
+    if (New) {
+      // Insert the new node.
       New->setNext(Matcher.take());
       Matcher.reset(New);
-      MC->setNext(RM->takeNext());
+      // Remove the old one.
+      MC->setNext(MC->getNext()->takeNext());
       return ContractNodes(Matcher);
     }
   }