diff options
author | Chris Lattner <sabre@nondot.org> | 2007-02-27 20:43:37 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-02-27 20:43:37 +0000 |
commit | 798dc7adb4f473c196c0000728fbaab0eb4fd8f2 (patch) | |
tree | c6dbcbe45ae8ffad95c3080010da90ab8fd6b65c /utils | |
parent | 914c3bca870e448731b210b528a6a2f450ece772 (diff) | |
download | external_llvm-798dc7adb4f473c196c0000728fbaab0eb4fd8f2.zip external_llvm-798dc7adb4f473c196c0000728fbaab0eb4fd8f2.tar.gz external_llvm-798dc7adb4f473c196c0000728fbaab0eb4fd8f2.tar.bz2 |
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')
-rw-r--r-- | utils/TableGen/CodeGenTarget.cpp | 8 | ||||
-rw-r--r-- | utils/TableGen/Record.cpp | 7 | ||||
-rw-r--r-- | utils/TableGen/Record.h | 2 | ||||
-rw-r--r-- | utils/TableGen/TableGen.cpp | 8 |
4 files changed, 18 insertions, 7 deletions
diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp index 688ed0f..d29ce51 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 94e0cb4..bbcdbe7 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 986e917..0971e93 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 4345234..d3d241e 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; |