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.