mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-22 19:49:49 +00:00
initial support for calling convention generation, still unfinished.
llvm-svn: 34682
This commit is contained in:
parent
8178fd7bd5
commit
5e2b19c767
@ -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!");
|
||||
|
||||
|
@ -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());
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user