Emulate the current isel's "IsChainCompatible" logic for now.
I'd like to eventually rip it out, but for now producing the
same selections as the old matcher is more important.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96458 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/DAGISelMatcherGen.cpp b/utils/TableGen/DAGISelMatcherGen.cpp
index e2ffb8e..8efcb4f 100644
--- a/utils/TableGen/DAGISelMatcherGen.cpp
+++ b/utils/TableGen/DAGISelMatcherGen.cpp
@@ -165,6 +165,16 @@
       assert(NextRecordedOperandNo > 1 &&
              "Should have recorded input/result chains at least!");
       InputChains.push_back(NextRecordedOperandNo-1);
+
+      // IF we need to check chains, do so, see comment for
+      // "NodeHasProperty(SDNPHasChain" below.
+      if (InputChains.size() > 1) {
+        // FIXME: This is broken, we should eliminate this nonsense completely,
+        // but we want to produce the same selections that the old matcher does
+        // for now.
+        unsigned PrevOp = InputChains[InputChains.size()-2];
+        AddMatcherNode(new CheckChainCompatibleMatcherNode(PrevOp));
+      }
     }
     return;
   }
@@ -229,10 +239,13 @@
     // sure that folding the chain won't induce cycles in the DAG.  This could
     // happen if there were an intermediate node between the indbr and load, for
     // example.
-    
-    // FIXME: Emit "IsChainCompatible(lastchain.getNode(), CurrentNode)".
-    // Rename IsChainCompatible -> IsChainUnreachable, add comment about
-    // complexity.
+    if (InputChains.size() > 1) {
+      // FIXME: This is broken, we should eliminate this nonsense completely,
+      // but we want to produce the same selections that the old matcher does
+      // for now.
+      unsigned PrevOp = InputChains[InputChains.size()-2];
+      AddMatcherNode(new CheckChainCompatibleMatcherNode(PrevOp));
+    }
     
     // Don't look at the input chain when matching the tree pattern to the
     // SDNode.