[llvm-commits] CVS: llvm/utils/TableGen/InstrSelectorEmitter.cpp InstrSelectorEmitter.h
Chris Lattner
lattner at cs.uiuc.edu
Thu Aug 7 01:03:01 PDT 2003
Changes in directory llvm/utils/TableGen:
InstrSelectorEmitter.cpp updated: 1.4 -> 1.5
InstrSelectorEmitter.h updated: 1.3 -> 1.4
---
Log message:
Finish implementation of the type inference engine.
Start working on reading in nonterminals
---
Diffs of the changes:
Index: llvm/utils/TableGen/InstrSelectorEmitter.cpp
diff -u llvm/utils/TableGen/InstrSelectorEmitter.cpp:1.4 llvm/utils/TableGen/InstrSelectorEmitter.cpp:1.5
--- llvm/utils/TableGen/InstrSelectorEmitter.cpp:1.4 Thu Aug 7 00:40:14 2003
+++ llvm/utils/TableGen/InstrSelectorEmitter.cpp Thu Aug 7 01:02:15 2003
@@ -82,11 +82,13 @@
return getValueType(R->getValueAsDef("RegType"));
} else if (SuperClasses[i]->getName() == "Register") {
std::cerr << "WARNING: Explicit registers not handled yet!\n";
+ return MVT::Other;
} else if (SuperClasses[i]->getName() == "Nonterminal") {
+ //std::cerr << "Warning nonterminal type not handled yet:" << R->getName()
+ // << "\n";
+ return MVT::Other;
}
- //throw "Error: Unknown value used: " + R->getName();
-
- return MVT::Other;
+ throw "Error: Unknown value used: " + R->getName();
}
// Parse the specified DagInit into a TreePattern which we can use.
@@ -159,13 +161,15 @@
switch (NT.ArgTypes[i]) {
case NodeType::Arg0:
- MadeChange |=UpdateNodeType(Children[i], Children[0]->getType(), RecName);
+ MadeChange |= UpdateNodeType(Children[i], Children[0]->getType(),RecName);
break;
case NodeType::Val:
if (Children[i]->getType() == MVT::isVoid)
throw "In pattern for " + RecName + " should not get a void node!";
break;
- case NodeType::Ptr: // FIXME
+ case NodeType::Ptr:
+ MadeChange |= UpdateNodeType(Children[i],Target.getPointerType(),RecName);
+ break;
default: assert(0 && "Invalid argument ArgType!");
}
}
@@ -179,8 +183,14 @@
MadeChange |= UpdateNodeType(N, Children[0]->getType(), RecName);
break;
- case NodeType::Ptr: // FIXME: get from target
+ case NodeType::Ptr:
+ MadeChange |= UpdateNodeType(N, Target.getPointerType(), RecName);
+ break;
case NodeType::Val:
+ if (N->getType() == MVT::isVoid)
+ throw "In pattern for " + RecName + " should not get a void node!";
+ break;
+ default:
assert(0 && "Unhandled type constraint!");
break;
}
@@ -210,6 +220,19 @@
return Pattern;
}
+// ProcessNonTerminals - Read in all nonterminals and incorporate them into
+// our pattern database.
+void InstrSelectorEmitter::ProcessNonTerminals() {
+ std::vector<Record*> NTs = Records.getAllDerivedDefinitions("Nonterminal");
+ for (unsigned i = 0, e = NTs.size(); i != e; ++i) {
+ DagInit *DI = NTs[i]->getValueAsDag("Pattern");
+
+ TreePatternNode *Pattern = ReadAndCheckPattern(DI, NTs[i]->getName());
+
+ DEBUG(std::cerr << "Parsed nonterm pattern " << NTs[i]->getName() << "\t= "
+ << *Pattern << "\n");
+ }
+}
/// ProcessInstructionPatterns - Read in all subclasses of Instruction, and
@@ -222,7 +245,6 @@
if (DagInit *DI = dynamic_cast<DagInit*>(Inst->getValueInit("Pattern"))) {
TreePatternNode *Pattern = ReadAndCheckPattern(DI, Inst->getName());
-
DEBUG(std::cerr << "Parsed inst pattern " << Inst->getName() << "\t= "
<< *Pattern << "\n");
}
@@ -235,6 +257,7 @@
ProcessNodeTypes();
// Read in all of the nonterminals...
+ //ProcessNonTerminals();
// Read all of the instruction patterns in...
ProcessInstructionPatterns();
Index: llvm/utils/TableGen/InstrSelectorEmitter.h
diff -u llvm/utils/TableGen/InstrSelectorEmitter.h:1.3 llvm/utils/TableGen/InstrSelectorEmitter.h:1.4
--- llvm/utils/TableGen/InstrSelectorEmitter.h:1.3 Thu Aug 7 00:40:14 2003
+++ llvm/utils/TableGen/InstrSelectorEmitter.h Thu Aug 7 01:02:15 2003
@@ -9,7 +9,7 @@
#define INSTRSELECTOR_EMITTER_H
#include "TableGenBackend.h"
-#include "llvm/CodeGen/ValueTypes.h"
+#include "CodeGenWrappers.h"
#include <vector>
#include <map>
class DagInit;
@@ -82,6 +82,7 @@
class InstrSelectorEmitter : public TableGenBackend {
RecordKeeper &Records;
+ CodeGenTarget Target;
std::map<Record*, NodeType> NodeTypes;
public:
@@ -95,6 +96,10 @@
// RecordKeeper, turning them into the more accessible NodeTypes data
// structure.
void ProcessNodeTypes();
+
+ // ProcessNonTerminals - Read in all nonterminals and incorporate them into
+ // our pattern database.
+ void ProcessNonTerminals();
// ProcessInstructionPatterns - Read in all subclasses of Instruction, and
// process those with a useful Pattern field.
More information about the llvm-commits
mailing list