DAGISelMatcher.cpp revision 845c04273461b2a10754a1455b02916a19ea72aa
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" 13845c04273461b2a10754a1455b02916a19ea72aaChris Lattner#include "Record.h" 14da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner#include "llvm/Support/raw_ostream.h" 15da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnerusing namespace llvm; 16da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 17da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid MatcherNode::dump() const { 18da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner print(errs()); 19da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 20da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 21da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid EmitNodeMatcherNode::print(raw_ostream &OS, unsigned indent) const { 22da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "EmitNode: Src = " << *Pattern.getSrcPattern() << "\n"; 23da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "EmitNode: Dst = " << *Pattern.getDstPattern() << "\n"; 24da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 25da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 26bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattnervoid MatcherNode::printNext(raw_ostream &OS, unsigned indent) const { 27bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner if (Next) 28bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner return Next->print(OS, indent); 29bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner OS.indent(indent) << "<null next field>\n"; 30da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 31da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 32da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 33da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid PushMatcherNode::print(raw_ostream &OS, unsigned indent) const { 34da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "Push\n"; 35bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent+2); 36da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner Failure->print(OS, indent); 37da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 38da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 39da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid RecordMatcherNode::print(raw_ostream &OS, unsigned indent) const { 40da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "Record\n"; 41bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 42da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 43da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 44da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid MoveChildMatcherNode::print(raw_ostream &OS, unsigned indent) const { 45da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "MoveChild " << ChildNo << '\n'; 46bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 47da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 48da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 49da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid MoveParentMatcherNode::print(raw_ostream &OS, unsigned indent) const { 50da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "MoveParent\n"; 51bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 52da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 53da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 54da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckSameMatcherNode::print(raw_ostream &OS, unsigned indent) const { 55da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckSame " << MatchNumber << '\n'; 56bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 57da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 58da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 59da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckPatternPredicateMatcherNode:: 60da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnerprint(raw_ostream &OS, unsigned indent) const { 61da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckPatternPredicate " << Predicate << '\n'; 62bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 63da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 64da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 65da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckPredicateMatcherNode::print(raw_ostream &OS, unsigned indent) const { 66da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckPredicate " << PredName << '\n'; 67bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 68da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 69da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 70da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckOpcodeMatcherNode::print(raw_ostream &OS, unsigned indent) const { 71da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckOpcode " << OpcodeName << '\n'; 72bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 73da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 74da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 75da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const { 76da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckType " << getEnumName(Type) << '\n'; 77bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 78da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 79da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 80da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckIntegerMatcherNode::print(raw_ostream &OS, unsigned indent) const { 81da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckInteger " << Value << '\n'; 82bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 83da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 84da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 85da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckCondCodeMatcherNode::print(raw_ostream &OS, unsigned indent) const { 86da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckCondCode ISD::" << CondCodeName << '\n'; 87bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 88da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 89da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 90da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckValueTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const { 91da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckValueType MVT::" << TypeName << '\n'; 92bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 93da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 94da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 95da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckComplexPatMatcherNode::print(raw_ostream &OS, unsigned indent) const { 96da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckComplexPat " << Pattern.getSelectFunc() << '\n'; 97bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 98da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 99da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 100da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckAndImmMatcherNode::print(raw_ostream &OS, unsigned indent) const { 101da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckAndImm " << Value << '\n'; 102bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 103da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 104da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 105da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattnervoid CheckOrImmMatcherNode::print(raw_ostream &OS, unsigned indent) const { 106da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner OS.indent(indent) << "CheckOrImm " << Value << '\n'; 107bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 108da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner} 109da272d1a704bd564272e88cbdbcf14712e3abbdcChris Lattner 11021390d79843050ae8b3226860cadc16ff51d0dcfChris Lattnervoid CheckFoldableChainNodeMatcherNode::print(raw_ostream &OS, 11121390d79843050ae8b3226860cadc16ff51d0dcfChris Lattner unsigned indent) const { 11221390d79843050ae8b3226860cadc16ff51d0dcfChris Lattner OS.indent(indent) << "CheckFoldableChainNode\n"; 113bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 114e39650a805425ffdbd79692c7d1bad80f7332daeChris Lattner} 1159a747f1305e76025df2323a03b805a284f2cde77Chris Lattner 1169a747f1305e76025df2323a03b805a284f2cde77Chris Lattnervoid CheckChainCompatibleMatcherNode::print(raw_ostream &OS, 1179a747f1305e76025df2323a03b805a284f2cde77Chris Lattner unsigned indent) const { 1189a747f1305e76025df2323a03b805a284f2cde77Chris Lattner OS.indent(indent) << "CheckChainCompatibleMatcherNode " << PreviousOp << "\n"; 119bd8227f5298f0ab7b96203a6d3875e5d26573376Chris Lattner printNext(OS, indent); 1209a747f1305e76025df2323a03b805a284f2cde77Chris Lattner} 121845c04273461b2a10754a1455b02916a19ea72aaChris Lattner 122845c04273461b2a10754a1455b02916a19ea72aaChris Lattnervoid EmitIntegerMatcherNode::print(raw_ostream &OS, unsigned indent) const { 123845c04273461b2a10754a1455b02916a19ea72aaChris Lattner OS.indent(indent) << "EmitIntegerMatcherNode " << Val << " VT=" << VT << '\n'; 124845c04273461b2a10754a1455b02916a19ea72aaChris Lattner printNext(OS, indent); 125845c04273461b2a10754a1455b02916a19ea72aaChris Lattner} 126845c04273461b2a10754a1455b02916a19ea72aaChris Lattner 127845c04273461b2a10754a1455b02916a19ea72aaChris Lattnervoid EmitRegisterMatcherNode::print(raw_ostream &OS, unsigned indent) const { 128845c04273461b2a10754a1455b02916a19ea72aaChris Lattner OS.indent(indent) << "EmitRegisterMatcherNode "; 129845c04273461b2a10754a1455b02916a19ea72aaChris Lattner if (Reg) 130845c04273461b2a10754a1455b02916a19ea72aaChris Lattner OS << Reg->getName(); 131845c04273461b2a10754a1455b02916a19ea72aaChris Lattner else 132845c04273461b2a10754a1455b02916a19ea72aaChris Lattner OS << "zero_reg"; 133845c04273461b2a10754a1455b02916a19ea72aaChris Lattner OS << " VT=" << VT << '\n'; 134845c04273461b2a10754a1455b02916a19ea72aaChris Lattner printNext(OS, indent); 135845c04273461b2a10754a1455b02916a19ea72aaChris Lattner} 136845c04273461b2a10754a1455b02916a19ea72aaChris Lattner 137