diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-01-27 22:13:45 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-01-27 22:13:45 +0000 |
commit | c15d18c5015a01336b00e3ba3638fd6a35f68201 (patch) | |
tree | f255c1e8fdb1e9c4976d3a6b79430c5fc870b8c8 | |
parent | 896811180fd1b807980714f2bf2efc557f5e713d (diff) |
(store (op (load ...)), ...)
If store's chain operand is load, then use load's chain operand instead. If
it isn't (likely a TokenFactor), then do not allow the folding.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25708 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | utils/TableGen/DAGISelEmitter.cpp | 13 |
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"; + } } } |