diff options
author | Chris Lattner <sabre@nondot.org> | 2010-02-24 05:33:42 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-02-24 05:33:42 +0000 |
commit | 02f73585f7d018ea3ddcda88c8273ee4e5ea4de3 (patch) | |
tree | 5d2407fb803c6ee01369d5a82ad80516c792ff9b /utils/TableGen/DAGISelMatcherEmitter.cpp | |
parent | 91ff7f75f55a626eb41761f3ded9f3d13002980c (diff) | |
download | external_llvm-02f73585f7d018ea3ddcda88c8273ee4e5ea4de3.zip external_llvm-02f73585f7d018ea3ddcda88c8273ee4e5ea4de3.tar.gz external_llvm-02f73585f7d018ea3ddcda88c8273ee4e5ea4de3.tar.bz2 |
The new isel was not properly handling patterns that covered
internal nodes with flag results. Record these with a new
OPC_MarkFlagResults opcode and use this to update the interior
nodes' flag results properly. This fixes CodeGen/X86/i256-add.ll
with the new isel.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97021 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/DAGISelMatcherEmitter.cpp')
-rw-r--r-- | utils/TableGen/DAGISelMatcherEmitter.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/utils/TableGen/DAGISelMatcherEmitter.cpp b/utils/TableGen/DAGISelMatcherEmitter.cpp index c316950..ecc75c8 100644 --- a/utils/TableGen/DAGISelMatcherEmitter.cpp +++ b/utils/TableGen/DAGISelMatcherEmitter.cpp @@ -337,6 +337,15 @@ EmitMatcher(const MatcherNode *N, unsigned Indent, formatted_raw_ostream &OS) { OS << '\n'; return 6+EN->getNumVTs()+NumOperandBytes; } + case MatcherNode::MarkFlagResults: { + const MarkFlagResultsMatcherNode *CFR = cast<MarkFlagResultsMatcherNode>(N); + OS << "OPC_MarkFlagResults, " << CFR->getNumNodes() << ", "; + unsigned NumOperandBytes = 0; + for (unsigned i = 0, e = CFR->getNumNodes(); i != e; ++i) + NumOperandBytes += EmitVBRValue(CFR->getNode(i), OS); + OS << '\n'; + return 2+NumOperandBytes; + } case MatcherNode::CompleteMatch: { const CompleteMatchMatcherNode *CM = cast<CompleteMatchMatcherNode>(N); OS << "OPC_CompleteMatch, " << CM->getNumResults() << ", "; |