summaryrefslogtreecommitdiff
path: root/utils/TableGen
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-02-27 20:43:37 +0000
committerChris Lattner <sabre@nondot.org>2007-02-27 20:43:37 +0000
commit798dc7adb4f473c196c0000728fbaab0eb4fd8f2 (patch)
treec6dbcbe45ae8ffad95c3080010da90ab8fd6b65c /utils/TableGen
parent914c3bca870e448731b210b528a6a2f450ece772 (diff)
downloadllvm-798dc7adb4f473c196c0000728fbaab0eb4fd8f2.tar.gz
llvm-798dc7adb4f473c196c0000728fbaab0eb4fd8f2.tar.bz2
llvm-798dc7adb4f473c196c0000728fbaab0eb4fd8f2.tar.xz
initial support for calling convention generation, still unfinished.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34682 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
-rw-r--r--utils/TableGen/CodeGenTarget.cpp8
-rw-r--r--utils/TableGen/Record.cpp7
-rw-r--r--utils/TableGen/Record.h2
-rw-r--r--utils/TableGen/TableGen.cpp8
4 files changed, 18 insertions, 7 deletions
diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp
index 688ed0f924..d29ce514be 100644
--- a/utils/TableGen/CodeGenTarget.cpp
+++ b/utils/TableGen/CodeGenTarget.cpp
@@ -604,9 +604,7 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R, CodeGenTarget *CGT) {
// Parse the list of argument types.
ListInit *TypeList = R->getValueAsListInit("Types");
for (unsigned i = 0, e = TypeList->getSize(); i != e; ++i) {
- DefInit *DI = dynamic_cast<DefInit*>(TypeList->getElement(i));
- assert(DI && "Invalid list type!");
- Record *TyEl = DI->getDef();
+ Record *TyEl = TypeList->getElementAsRecord(i);
assert(TyEl->isSubClassOf("LLVMType") && "Expected a type!");
ArgTypes.push_back(TyEl->getValueAsString("TypeVal"));
@@ -620,9 +618,7 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R, CodeGenTarget *CGT) {
// Parse the intrinsic properties.
ListInit *PropList = R->getValueAsListInit("Properties");
for (unsigned i = 0, e = PropList->getSize(); i != e; ++i) {
- DefInit *DI = dynamic_cast<DefInit*>(PropList->getElement(i));
- assert(DI && "Invalid list type!");
- Record *Property = DI->getDef();
+ Record *Property = PropList->getElementAsRecord(i);
assert(Property->isSubClassOf("IntrinsicProperty") &&
"Expected a property!");
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp
index 94e0cb472f..bbcdbe7da3 100644
--- a/utils/TableGen/Record.cpp
+++ b/utils/TableGen/Record.cpp
@@ -337,6 +337,13 @@ Init *ListInit::convertInitListSlice(const std::vector<unsigned> &Elements) {
return new ListInit(Vals);
}
+Record *ListInit::getElementAsRecord(unsigned i) const {
+ assert(i < Values.size() && "List element index out of range!");
+ DefInit *DI = dynamic_cast<DefInit*>(Values[i]);
+ if (DI == 0) throw "Expected record in list!";
+ return DI->getDef();
+}
+
Init *ListInit::resolveReferences(Record &R, const RecordVal *RV) {
std::vector<Init*> Resolved;
Resolved.reserve(getSize());
diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h
index 986e9178d9..0971e938ba 100644
--- a/utils/TableGen/Record.h
+++ b/utils/TableGen/Record.h
@@ -626,6 +626,8 @@ public:
return Values[i];
}
+ Record *getElementAsRecord(unsigned i) const;
+
Init *convertInitListSlice(const std::vector<unsigned> &Elements);
virtual Init *convertInitializerTo(RecTy *Ty) {
diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp
index 4345234c27..d3d241e6c7 100644
--- a/utils/TableGen/TableGen.cpp
+++ b/utils/TableGen/TableGen.cpp
@@ -20,6 +20,7 @@
#include "llvm/Support/Streams.h"
#include "llvm/System/Signals.h"
#include "llvm/Support/FileUtilities.h"
+#include "CallingConvEmitter.h"
#include "CodeEmitterGen.h"
#include "RegisterInfoEmitter.h"
#include "InstrInfoEmitter.h"
@@ -38,6 +39,7 @@ enum ActionType {
GenEmitter,
GenRegisterEnums, GenRegister, GenRegisterHeader,
GenInstrEnums, GenInstrs, GenAsmWriter,
+ GenCallingConv,
GenDAGISel,
GenSubtarget,
GenIntrinsic,
@@ -61,6 +63,8 @@ namespace {
"Generate enum values for instructions"),
clEnumValN(GenInstrs, "gen-instr-desc",
"Generate instruction descriptions"),
+ clEnumValN(GenCallingConv, "gen-callingconv",
+ "Generate calling convention descriptions"),
clEnumValN(GenAsmWriter, "gen-asm-writer",
"Generate assembly writer"),
clEnumValN(GenDAGISel, "gen-dag-isel",
@@ -138,7 +142,9 @@ int main(int argc, char **argv) {
case GenInstrs:
InstrInfoEmitter(Records).run(*Out);
break;
-
+ case GenCallingConv:
+ CallingConvEmitter(Records).run(*Out);
+ break;
case GenAsmWriter:
AsmWriterEmitter(Records).run(*Out);
break;