1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

rename a couple of methods, add structure for pattern parsing

llvm-svn: 23364
This commit is contained in:
Chris Lattner 2005-09-15 02:38:02 +00:00
parent ab6886a31d
commit fe7a70834b
2 changed files with 29 additions and 17 deletions

View File

@ -527,14 +527,14 @@ void DAGISelEmitter::ParseNodeTransforms(std::ostream &OS) {
/// ParseAndResolvePatternFragments - Parse all of the PatFrag definitions in
/// the .td file, building up the PatternFragments map. After we've collected
/// them all, inline fragments together as necessary, so that there are no
/// references left inside a pattern fragment to a pattern fragment.
/// ParsePatternFragments - Parse all of the PatFrag definitions in the .td
/// file, building up the PatternFragments map. After we've collected them all,
/// inline fragments together as necessary, so that there are no references left
/// inside a pattern fragment to a pattern fragment.
///
/// This also emits all of the predicate functions to the output file.
///
void DAGISelEmitter::ParseAndResolvePatternFragments(std::ostream &OS) {
void DAGISelEmitter::ParsePatternFragments(std::ostream &OS) {
std::vector<Record*> Fragments = Records.getAllDerivedDefinitions("PatFrag");
// First step, parse all of the fragments and emit predicate functions.
@ -739,10 +739,10 @@ FindPatternInputsAndOutputs(TreePattern *I, TreePatternNode *Pat,
}
/// ParseAndResolveInstructions - Parse all of the instructions, inlining and
/// resolving any fragments involved. This populates the Instructions list with
/// fully resolved instructions.
void DAGISelEmitter::ParseAndResolveInstructions() {
/// ParseInstructions - Parse all of the instructions, inlining and resolving
/// any fragments involved. This populates the Instructions list with fully
/// resolved instructions.
void DAGISelEmitter::ParseInstructions() {
std::vector<Record*> Instrs = Records.getAllDerivedDefinitions("Instruction");
for (unsigned i = 0, e = Instrs.size(); i != e; ++i) {
@ -888,12 +888,22 @@ void DAGISelEmitter::ParseAndResolveInstructions() {
TreePatternNode *SrcPattern = Pattern->getChild(1)->clone();
TreePatternNode *DstPattern = Instructions[i].getResultPattern();
PatternsToMatch.push_back(std::make_pair(SrcPattern, DstPattern));
DEBUG(std::cerr << "PATTERN TO MATCH: "; SrcPattern->dump();
std::cerr << "\nRESULT DAG : ";
DstPattern->dump(); std::cerr << "\n");
}
}
void DAGISelEmitter::ParsePatterns() {
DEBUG(std::cerr << "\n\nPARSED PATTERNS TO MATCH:\n\n";
for (unsigned i = 0, e = PatternsToMatch.size(); i != e; ++i) {
std::cerr << "PATTERN: "; PatternsToMatch[i].first->dump();
std::cerr << "\nRESULT: ";PatternsToMatch[i].second->dump();
std::cerr << "\n";
});
}
void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) {
// Emit boilerplate.
OS << "// The main instruction selector code.\n"
@ -929,9 +939,10 @@ void DAGISelEmitter::run(std::ostream &OS) {
<< "methods.\n\n";
ParseNodeInfo();
ParseNodeTransforms(OS);
ParseAndResolvePatternFragments(OS);
ParseAndResolveInstructions();
ParsePatternFragments(OS);
ParseInstructions();
ParsePatterns();
// TODO: convert some instructions to expanders if needed or something.
EmitInstructionSelector(OS);

View File

@ -333,8 +333,9 @@ public:
private:
void ParseNodeInfo();
void ParseNodeTransforms(std::ostream &OS);
void ParseAndResolvePatternFragments(std::ostream &OS);
void ParseAndResolveInstructions();
void ParsePatternFragments(std::ostream &OS);
void ParseInstructions();
void ParsePatterns();
void FindPatternInputsAndOutputs(TreePattern *I, TreePatternNode *Pat,
std::map<std::string,
TreePatternNode*> &InstInputs,