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