DAGISelMatcher.cpp revision bd8227f5298f0ab7b96203a6d3875e5d26573376
1da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner//===- DAGISelMatcher.cpp - Representation of DAG pattern matcher ---------===//
2da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner//
3da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner//                     The LLVM Compiler Infrastructure
4da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner//
5da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner// This file is distributed under the University of Illinois Open Source
6da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner// License. See LICENSE.TXT for details.
7da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner//
8da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner//===----------------------------------------------------------------------===//
9da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
10da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner#include "DAGISelMatcher.h"
11da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner#include "CodeGenDAGPatterns.h"
12da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner#include "CodeGenTarget.h"
13da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner#include "llvm/Support/raw_ostream.h"
14da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnerusing namespace llvm;
15da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
16da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid MatcherNode::dump() const {
17da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  print(errs());
18da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
19da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
20da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid EmitNodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
21da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "EmitNode: Src = " << *Pattern.getSrcPattern() << "\n";
22da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "EmitNode: Dst = " << *Pattern.getDstPattern() << "\n";
23da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
24da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
25bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattnervoid MatcherNode::printNext(raw_ostream &OS, unsigned indent) const {
26bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  if (Next)
27bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner    return Next->print(OS, indent);
28bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  OS.indent(indent) << "<null next field>\n";
29da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
30da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
31da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
32da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid PushMatcherNode::print(raw_ostream &OS, unsigned indent) const {
33da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "Push\n";
34bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent+2);
35da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  Failure->print(OS, indent);
36da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
37da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
38da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid RecordMatcherNode::print(raw_ostream &OS, unsigned indent) const {
39da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "Record\n";
40bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
41da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
42da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
43da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid MoveChildMatcherNode::print(raw_ostream &OS, unsigned indent) const {
44da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "MoveChild " << ChildNo << '\n';
45bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
46da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
47da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
48da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid MoveParentMatcherNode::print(raw_ostream &OS, unsigned indent) const {
49da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "MoveParent\n";
50bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
51da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
52da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
53da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckSameMatcherNode::print(raw_ostream &OS, unsigned indent) const {
54da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckSame " << MatchNumber << '\n';
55bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
56da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
57da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
58da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckPatternPredicateMatcherNode::
59da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnerprint(raw_ostream &OS, unsigned indent) const {
60da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckPatternPredicate " << Predicate << '\n';
61bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
62da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
63da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
64da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckPredicateMatcherNode::print(raw_ostream &OS, unsigned indent) const {
65da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckPredicate " << PredName << '\n';
66bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
67da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
68da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
69da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckOpcodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
70da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckOpcode " << OpcodeName << '\n';
71bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
72da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
73da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
74da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
75da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckType " << getEnumName(Type) << '\n';
76bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
77da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
78da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
79da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckIntegerMatcherNode::print(raw_ostream &OS, unsigned indent) const {
80da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckInteger " << Value << '\n';
81bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
82da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
83da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
84da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckCondCodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
85da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckCondCode ISD::" << CondCodeName << '\n';
86bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
87da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
88da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
89da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckValueTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
90da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckValueType MVT::" << TypeName << '\n';
91bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
92da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
93da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
94da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckComplexPatMatcherNode::print(raw_ostream &OS, unsigned indent) const {
95da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckComplexPat " << Pattern.getSelectFunc() << '\n';
96bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
97da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
98da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
99da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckAndImmMatcherNode::print(raw_ostream &OS, unsigned indent) const {
100da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckAndImm " << Value << '\n';
101bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
102da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
103da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
104da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckOrImmMatcherNode::print(raw_ostream &OS, unsigned indent) const {
105da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner  OS.indent(indent) << "CheckOrImm " << Value << '\n';
106bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
107da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner}
108da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner
10921390d79843050ae8b3226860cadc16ff51d0dcfChris Lattnervoid CheckFoldableChainNodeMatcherNode::print(raw_ostream &OS,
11021390d79843050ae8b3226860cadc16ff51d0dcfChris Lattner                                              unsigned indent) const {
11121390d79843050ae8b3226860cadc16ff51d0dcfChris Lattner  OS.indent(indent) << "CheckFoldableChainNode\n";
112bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
113e39650a805425ffdbd79692c7d1bad80f7332daeChris Lattner}
1149a747f1305e76025df2323a03b805a284f2cde77Chris Lattner
1159a747f1305e76025df2323a03b805a284f2cde77Chris Lattnervoid CheckChainCompatibleMatcherNode::print(raw_ostream &OS,
1169a747f1305e76025df2323a03b805a284f2cde77Chris Lattner                                              unsigned indent) const {
1179a747f1305e76025df2323a03b805a284f2cde77Chris Lattner  OS.indent(indent) << "CheckChainCompatibleMatcherNode " << PreviousOp << "\n";
118bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner  printNext(OS, indent);
1199a747f1305e76025df2323a03b805a284f2cde77Chris Lattner}
120