1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

rename the child field to 'next'. This is not a parent/child

relationship, this is a linear list relationship.

llvm-svn: 96561
This commit is contained in:
Chris Lattner 2010-02-18 02:53:41 +00:00
parent 955650be1f
commit 76506b3749
4 changed files with 46 additions and 44 deletions

View File

@ -22,98 +22,98 @@ void EmitNodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "EmitNode: Dst = " << *Pattern.getDstPattern() << "\n";
}
void MatcherNode::printChild(raw_ostream &OS, unsigned indent) const {
if (Child)
return Child->print(OS, indent);
OS.indent(indent) << "<null child>\n";
void MatcherNode::printNext(raw_ostream &OS, unsigned indent) const {
if (Next)
return Next->print(OS, indent);
OS.indent(indent) << "<null next field>\n";
}
void PushMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "Push\n";
printChild(OS, indent+2);
printNext(OS, indent+2);
Failure->print(OS, indent);
}
void RecordMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "Record\n";
printChild(OS, indent);
printNext(OS, indent);
}
void MoveChildMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "MoveChild " << ChildNo << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void MoveParentMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "MoveParent\n";
printChild(OS, indent);
printNext(OS, indent);
}
void CheckSameMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckSame " << MatchNumber << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckPatternPredicateMatcherNode::
print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckPatternPredicate " << Predicate << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckPredicateMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckPredicate " << PredName << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckOpcodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckOpcode " << OpcodeName << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckType " << getEnumName(Type) << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckIntegerMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckInteger " << Value << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckCondCodeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckCondCode ISD::" << CondCodeName << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckValueTypeMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckValueType MVT::" << TypeName << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckComplexPatMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckComplexPat " << Pattern.getSelectFunc() << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckAndImmMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckAndImm " << Value << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckOrImmMatcherNode::print(raw_ostream &OS, unsigned indent) const {
OS.indent(indent) << "CheckOrImm " << Value << '\n';
printChild(OS, indent);
printNext(OS, indent);
}
void CheckFoldableChainNodeMatcherNode::print(raw_ostream &OS,
unsigned indent) const {
OS.indent(indent) << "CheckFoldableChainNode\n";
printChild(OS, indent);
printNext(OS, indent);
}
void CheckChainCompatibleMatcherNode::print(raw_ostream &OS,
unsigned indent) const {
OS.indent(indent) << "CheckChainCompatibleMatcherNode " << PreviousOp << "\n";
printChild(OS, indent);
printNext(OS, indent);
}

View File

@ -31,7 +31,9 @@ void EmitMatcherTable(const MatcherNode *Matcher, raw_ostream &OS);
/// MatcherNode - Base class for all the the DAG ISel Matcher representation
/// nodes.
class MatcherNode {
OwningPtr<MatcherNode> Child;
// The next matcher node that is executed after this one. Null if this is the
// last stage of a match.
OwningPtr<MatcherNode> Next;
public:
enum KindTy {
EmitNode,
@ -63,16 +65,16 @@ public:
KindTy getKind() const { return Kind; }
MatcherNode *getChild() { return Child.get(); }
const MatcherNode *getChild() const { return Child.get(); }
void setChild(MatcherNode *C) { Child.reset(C); }
MatcherNode *getNext() { return Next.get(); }
const MatcherNode *getNext() const { return Next.get(); }
void setNext(MatcherNode *C) { Next.reset(C); }
static inline bool classof(const MatcherNode *) { return true; }
virtual void print(raw_ostream &OS, unsigned indent = 0) const = 0;
void dump() const;
protected:
void printChild(raw_ostream &OS, unsigned indent) const;
void printNext(raw_ostream &OS, unsigned indent) const;
};
/// EmitNodeMatcherNode - This signals a successful match and generates a node.
@ -93,14 +95,14 @@ public:
/// PushMatcherNode - This pushes a failure scope on the stack and evaluates
/// 'child'. If 'child' fails to match, it pops its scope and attempts to
/// 'Next'. If 'Next' fails to match, it pops its scope and attempts to
/// match 'Failure'.
class PushMatcherNode : public MatcherNode {
OwningPtr<MatcherNode> Failure;
public:
PushMatcherNode(MatcherNode *child = 0, MatcherNode *failure = 0)
PushMatcherNode(MatcherNode *next = 0, MatcherNode *failure = 0)
: MatcherNode(Push), Failure(failure) {
setChild(child);
setNext(next);
}
MatcherNode *getFailure() { return Failure.get(); }

View File

@ -76,7 +76,7 @@ class MatcherTableEmitter {
public:
MatcherTableEmitter(formatted_raw_ostream &os) : OS(os) {}
unsigned EmitMatcherAndChildren(const MatcherNode *N, unsigned Indent);
unsigned EmitMatcherList(const MatcherNode *N, unsigned Indent);
void EmitPredicateFunctions();
private:
@ -217,9 +217,9 @@ EmitMatcher(const MatcherNode *N, unsigned Indent) {
return 0;
}
/// EmitMatcherAndChildren - Emit the bytes for the specified matcher subtree.
/// EmitMatcherList - Emit the bytes for the specified matcher subtree.
unsigned MatcherTableEmitter::
EmitMatcherAndChildren(const MatcherNode *N, unsigned Indent) {
EmitMatcherList(const MatcherNode *N, unsigned Indent) {
unsigned Size = 0;
while (N) {
// Push is a special case since it is binary.
@ -228,25 +228,25 @@ EmitMatcherAndChildren(const MatcherNode *N, unsigned Indent) {
// emitting either of them. Handle this by buffering the output into a
// string while we get the size.
SmallString<128> TmpBuf;
unsigned ChildSize;
unsigned NextSize;
{
raw_svector_ostream OS(TmpBuf);
formatted_raw_ostream FOS(OS);
ChildSize =
EmitMatcherAndChildren(cast<PushMatcherNode>(N)->getChild(),Indent+1);
NextSize = EmitMatcherList(cast<PushMatcherNode>(N)->getNext(),
Indent+1);
}
if (ChildSize > 255) {
if (NextSize > 255) {
errs() <<
"Tblgen internal error: can't handle predicate this complex yet\n";
exit(1);
}
OS.PadToColumn(Indent*2);
OS << "OPC_Push, " << ChildSize << ",\n";
OS << "OPC_Push, " << NextSize << ",\n";
OS << TmpBuf.str();
Size += 2 + ChildSize;
Size += 2 + NextSize;
N = PMN->getFailure();
continue;
@ -254,9 +254,9 @@ EmitMatcherAndChildren(const MatcherNode *N, unsigned Indent) {
Size += EmitMatcher(N, Indent);
// If there are children of this node, iterate to them, otherwise we're
// If there are other nodes in this list, iterate to them, otherwise we're
// done.
N = N->getChild();
N = N->getNext();
}
return Size;
}
@ -311,7 +311,7 @@ void llvm::EmitMatcherTable(const MatcherNode *Matcher, raw_ostream &O) {
MatcherTableEmitter MatcherEmitter(OS);
OS << " static const unsigned char MatcherTable[] = {\n";
unsigned TotalSize = MatcherEmitter.EmitMatcherAndChildren(Matcher, 2);
unsigned TotalSize = MatcherEmitter.EmitMatcherList(Matcher, 2);
OS << " 0\n }; // Total Array size is " << (TotalSize+1) << " bytes\n\n";
OS << " return SelectCodeCommon(N, MatcherTable,sizeof(MatcherTable));\n}\n";
OS << "\n";

View File

@ -38,7 +38,7 @@ namespace {
MatcherNode *Matcher;
/// CurPredicate - As we emit matcher nodes, this points to the latest check
/// which should have future checks stuck into its child position.
/// which should have future checks stuck into its Next position.
MatcherNode *CurPredicate;
public:
MatcherGen(const PatternToMatch &pattern, const CodeGenDAGPatterns &cgp);
@ -109,7 +109,7 @@ void MatcherGen::InferPossibleTypes() {
/// AddMatcherNode - Add a matcher node to the current graph we're building.
void MatcherGen::AddMatcherNode(MatcherNode *NewNode) {
if (CurPredicate != 0)
CurPredicate->setChild(NewNode);
CurPredicate->setNext(NewNode);
else
Matcher = NewNode;
CurPredicate = NewNode;
@ -389,7 +389,7 @@ MatcherNode *llvm::ConvertPatternToMatcher(const PatternToMatch &Pattern,
// Link it into the pattern.
if (MatcherNode *Pred = Gen.GetCurPredicate()) {
Pred->setChild(Result);
Pred->setNext(Result);
return Gen.GetMatcher();
}