blob: 8b8c9bf98a104efb3465c5f22bb62b5feb6fc1f5 [file] [log] [blame]
Chris Lattnerda272d12010-02-15 08:04:42 +00001//===- DAGISelMatcher.cpp - Representation of DAG pattern matcher ---------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "DAGISelMatcher.h"
11#include "CodeGenDAGPatterns.h"
12#include "CodeGenTarget.h"
13#include "llvm/Support/raw_ostream.h"
14using namespace llvm;
15
16void MatcherNode::dump() const {
17 print(errs());
18}
19
20void EmitNodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
21 OS.indent(indent) << "EmitNode: Src = " << *Pattern.getSrcPattern() << "\n";
22 OS.indent(indent) << "EmitNode: Dst = " << *Pattern.getDstPattern() << "\n";
23}
24
Chris Lattnerbd8227f2010-02-18 02:53:41 +000025void MatcherNode::printNext(raw_ostream &OS, unsigned indent) const {
26 if (Next)
27 return Next->print(OS, indent);
28 OS.indent(indent) << "<null next field>\n";
Chris Lattnerda272d12010-02-15 08:04:42 +000029}
30
31
32void PushMatcherNode::print(raw_ostream &OS, unsigned indent) const {
33 OS.indent(indent) << "Push\n";
Chris Lattnerbd8227f2010-02-18 02:53:41 +000034 printNext(OS, indent+2);
Chris Lattnerda272d12010-02-15 08:04:42 +000035 Failure->print(OS, indent);
36}
37
38void RecordMatcherNode::print(raw_ostream &OS, unsigned indent) const {
39 OS.indent(indent) << "Record\n";
Chris Lattnerbd8227f2010-02-18 02:53:41 +000040 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000041}
42
43void MoveChildMatcherNode::print(raw_ostream &OS, unsigned indent) const {
44 OS.indent(indent) << "MoveChild " << ChildNo << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000045 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000046}
47
48void MoveParentMatcherNode::print(raw_ostream &OS, unsigned indent) const {
49 OS.indent(indent) << "MoveParent\n";
Chris Lattnerbd8227f2010-02-18 02:53:41 +000050 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000051}
52
53void CheckSameMatcherNode::print(raw_ostream &OS, unsigned indent) const {
54 OS.indent(indent) << "CheckSame " << MatchNumber << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000055 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000056}
57
58void CheckPatternPredicateMatcherNode::
59print(raw_ostream &OS, unsigned indent) const {
60 OS.indent(indent) << "CheckPatternPredicate " << Predicate << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000061 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000062}
63
64void CheckPredicateMatcherNode::print(raw_ostream &OS, unsigned indent) const {
65 OS.indent(indent) << "CheckPredicate " << PredName << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000066 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000067}
68
69void CheckOpcodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
70 OS.indent(indent) << "CheckOpcode " << OpcodeName << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000071 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000072}
73
74void CheckTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
75 OS.indent(indent) << "CheckType " << getEnumName(Type) << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000076 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000077}
78
79void CheckIntegerMatcherNode::print(raw_ostream &OS, unsigned indent) const {
80 OS.indent(indent) << "CheckInteger " << Value << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000081 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000082}
83
84void CheckCondCodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
85 OS.indent(indent) << "CheckCondCode ISD::" << CondCodeName << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000086 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000087}
88
89void CheckValueTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
90 OS.indent(indent) << "CheckValueType MVT::" << TypeName << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000091 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000092}
93
94void CheckComplexPatMatcherNode::print(raw_ostream &OS, unsigned indent) const {
95 OS.indent(indent) << "CheckComplexPat " << Pattern.getSelectFunc() << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +000096 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +000097}
98
99void CheckAndImmMatcherNode::print(raw_ostream &OS, unsigned indent) const {
100 OS.indent(indent) << "CheckAndImm " << Value << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +0000101 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +0000102}
103
104void CheckOrImmMatcherNode::print(raw_ostream &OS, unsigned indent) const {
105 OS.indent(indent) << "CheckOrImm " << Value << '\n';
Chris Lattnerbd8227f2010-02-18 02:53:41 +0000106 printNext(OS, indent);
Chris Lattnerda272d12010-02-15 08:04:42 +0000107}
108
Chris Lattner21390d72010-02-16 19:15:55 +0000109void CheckFoldableChainNodeMatcherNode::print(raw_ostream &OS,
110 unsigned indent) const {
111 OS.indent(indent) << "CheckFoldableChainNode\n";
Chris Lattnerbd8227f2010-02-18 02:53:41 +0000112 printNext(OS, indent);
Chris Lattnere39650a2010-02-16 06:10:58 +0000113}
Chris Lattner9a747f12010-02-17 06:23:39 +0000114
115void CheckChainCompatibleMatcherNode::print(raw_ostream &OS,
116 unsigned indent) const {
117 OS.indent(indent) << "CheckChainCompatibleMatcherNode " << PreviousOp << "\n";
Chris Lattnerbd8227f2010-02-18 02:53:41 +0000118 printNext(OS, indent);
Chris Lattner9a747f12010-02-17 06:23:39 +0000119}