aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/TableGen/DAGISelEmitter.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp
index f8ed5deb26..9aa4f989e5 100644
--- a/utils/TableGen/DAGISelEmitter.cpp
+++ b/utils/TableGen/DAGISelEmitter.cpp
@@ -1931,9 +1931,16 @@ public:
<< ".getValue(" << CInfo.getNumResults() << "))) goto P"
<< PatternNo << "Fail; // Already selected for a chain use?\n";
}
- if (NodeHasChain && !FoundChain) {
- OS << " SDOperand Chain = " << RootName << ".getOperand(0);\n";
- FoundChain = true;
+ if (NodeHasChain) {
+ if (!FoundChain) {
+ OS << " SDOperand Chain = " << RootName << ".getOperand(0);\n";
+ FoundChain = true;
+ } else {
+ OS << " if (Chain.Val == " << RootName << ".Val)\n";
+ OS << " Chain = " << RootName << ".getOperand(0);\n";
+ OS << " else\n";
+ OS << " goto P" << PatternNo << "Fail;\n";
+ }
}
}