mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-22 18:35:45 +00:00
refactor some code into a local class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96334 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e2de49d9a1
commit
e02ea54cfd
@ -24,10 +24,6 @@ enum {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned EmitMatcherAndChildren(const MatcherNode *N,
|
|
||||||
formatted_raw_ostream &FOS,
|
|
||||||
unsigned Indent);
|
|
||||||
|
|
||||||
/// ClassifyInt - Classify an integer by size, return '1','2','4','8' if this
|
/// ClassifyInt - Classify an integer by size, return '1','2','4','8' if this
|
||||||
/// fits in 1, 2, 4, or 8 sign extended bytes.
|
/// fits in 1, 2, 4, or 8 sign extended bytes.
|
||||||
static char ClassifyInt(int64_t Val) {
|
static char ClassifyInt(int64_t Val) {
|
||||||
@ -67,10 +63,22 @@ static unsigned EmitInt(int64_t Val, formatted_raw_ostream &OS) {
|
|||||||
return BytesEmitted;
|
return BytesEmitted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
class MatcherTableEmitter {
|
||||||
|
formatted_raw_ostream &OS;
|
||||||
|
public:
|
||||||
|
MatcherTableEmitter(formatted_raw_ostream &os) : OS(os) {}
|
||||||
|
|
||||||
|
unsigned EmitMatcherAndChildren(const MatcherNode *N, unsigned Indent);
|
||||||
|
private:
|
||||||
|
unsigned EmitMatcher(const MatcherNode *N, unsigned Indent);
|
||||||
|
};
|
||||||
|
} // end anonymous namespace.
|
||||||
|
|
||||||
/// EmitMatcherOpcodes - Emit bytes for the specified matcher and return
|
/// EmitMatcherOpcodes - Emit bytes for the specified matcher and return
|
||||||
/// the number of bytes emitted.
|
/// the number of bytes emitted.
|
||||||
static unsigned EmitMatcher(const MatcherNode *N, formatted_raw_ostream &OS,
|
unsigned MatcherTableEmitter::
|
||||||
unsigned Indent) {
|
EmitMatcher(const MatcherNode *N, unsigned Indent) {
|
||||||
OS.PadToColumn(Indent*2);
|
OS.PadToColumn(Indent*2);
|
||||||
|
|
||||||
switch (N->getKind()) {
|
switch (N->getKind()) {
|
||||||
@ -163,9 +171,8 @@ static unsigned EmitMatcher(const MatcherNode *N, formatted_raw_ostream &OS,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// EmitMatcherAndChildren - Emit the bytes for the specified matcher subtree.
|
/// EmitMatcherAndChildren - Emit the bytes for the specified matcher subtree.
|
||||||
static unsigned EmitMatcherAndChildren(const MatcherNode *N,
|
unsigned MatcherTableEmitter::
|
||||||
formatted_raw_ostream &OS,
|
EmitMatcherAndChildren(const MatcherNode *N, unsigned Indent) {
|
||||||
unsigned Indent) {
|
|
||||||
unsigned Size = 0;
|
unsigned Size = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
// Push is a special case since it is binary.
|
// Push is a special case since it is binary.
|
||||||
@ -179,8 +186,7 @@ static unsigned EmitMatcherAndChildren(const MatcherNode *N,
|
|||||||
raw_svector_ostream OS(TmpBuf);
|
raw_svector_ostream OS(TmpBuf);
|
||||||
formatted_raw_ostream FOS(OS);
|
formatted_raw_ostream FOS(OS);
|
||||||
ChildSize =
|
ChildSize =
|
||||||
EmitMatcherAndChildren(cast<PushMatcherNode>(N)->getChild(), FOS,
|
EmitMatcherAndChildren(cast<PushMatcherNode>(N)->getChild(),Indent+1);
|
||||||
Indent+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ChildSize > 255) {
|
if (ChildSize > 255) {
|
||||||
@ -199,7 +205,7 @@ static unsigned EmitMatcherAndChildren(const MatcherNode *N,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Size += EmitMatcher(N, OS, Indent);
|
Size += EmitMatcher(N, Indent);
|
||||||
|
|
||||||
// If there are children of this node, iterate to them, otherwise we're
|
// If there are children of this node, iterate to them, otherwise we're
|
||||||
// done.
|
// done.
|
||||||
@ -216,8 +222,10 @@ void llvm::EmitMatcherTable(const MatcherNode *Matcher, raw_ostream &O) {
|
|||||||
OS << "// The main instruction selector code.\n";
|
OS << "// The main instruction selector code.\n";
|
||||||
OS << "SDNode *SelectCode2(SDNode *N) {\n";
|
OS << "SDNode *SelectCode2(SDNode *N) {\n";
|
||||||
|
|
||||||
|
MatcherTableEmitter MatcherEmitter(OS);
|
||||||
|
|
||||||
OS << " static const unsigned char MatcherTable[] = {\n";
|
OS << " static const unsigned char MatcherTable[] = {\n";
|
||||||
unsigned TotalSize = EmitMatcherAndChildren(Matcher, OS, 2);
|
unsigned TotalSize = MatcherEmitter.EmitMatcherAndChildren(Matcher, 2);
|
||||||
OS << " 0\n }; // Total Array size is " << (TotalSize+1) << " bytes\n\n";
|
OS << " 0\n }; // Total Array size is " << (TotalSize+1) << " bytes\n\n";
|
||||||
OS << " return SelectCodeCommon(N, MatcherTable, sizeof(MatcherTable));\n}\n";
|
OS << " return SelectCodeCommon(N, MatcherTable,sizeof(MatcherTable));\n}\n";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user