aboutsummaryrefslogtreecommitdiffstats
path: root/utils/TableGen/DAGISelMatcherOpt.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-02-24 20:15:25 +0000
committerChris Lattner <sabre@nondot.org>2010-02-24 20:15:25 +0000
commit23cfda719e059ce7d761b08fbfb89e676d6c9737 (patch)
treec621ccf90d7f04d0612aece15a69c1068e923ad2 /utils/TableGen/DAGISelMatcherOpt.cpp
parentd88360495a6eed8853b4eead04e163f3e5aa632f (diff)
downloadexternal_llvm-23cfda719e059ce7d761b08fbfb89e676d6c9737.zip
external_llvm-23cfda719e059ce7d761b08fbfb89e676d6c9737.tar.gz
external_llvm-23cfda719e059ce7d761b08fbfb89e676d6c9737.tar.bz2
contract movechild+checktype into a new checkchild node, shrinking the
x86 table by 1200 bytes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97053 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/DAGISelMatcherOpt.cpp')
-rw-r--r--utils/TableGen/DAGISelMatcherOpt.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/utils/TableGen/DAGISelMatcherOpt.cpp b/utils/TableGen/DAGISelMatcherOpt.cpp
index 408bd63..796b815 100644
--- a/utils/TableGen/DAGISelMatcherOpt.cpp
+++ b/utils/TableGen/DAGISelMatcherOpt.cpp
@@ -26,12 +26,19 @@ static void ContractNodes(OwningPtr<MatcherNode> &Matcher) {
// If we found a movechild node with a node that comes in a 'foochild' form,
// transform it.
if (MoveChildMatcherNode *MC = dyn_cast<MoveChildMatcherNode>(N)) {
- if (RecordMatcherNode *RM = dyn_cast<RecordMatcherNode>(MC->getNext())) {
- MatcherNode *New
- = new RecordChildMatcherNode(MC->getChildNo(), RM->getWhatFor());
+ MatcherNode *New = 0;
+ if (RecordMatcherNode *RM = dyn_cast<RecordMatcherNode>(MC->getNext()))
+ New = new RecordChildMatcherNode(MC->getChildNo(), RM->getWhatFor());
+
+ if (CheckTypeMatcherNode *CT= dyn_cast<CheckTypeMatcherNode>(MC->getNext()))
+ New = new CheckChildTypeMatcherNode(MC->getChildNo(), CT->getType());
+
+ if (New) {
+ // Insert the new node.
New->setNext(Matcher.take());
Matcher.reset(New);
- MC->setNext(RM->takeNext());
+ // Remove the old one.
+ MC->setNext(MC->getNext()->takeNext());
return ContractNodes(Matcher);
}
}