forked from OSchip/llvm-project
Add support for decoding iPTR to the right pointer type.
llvm-svn: 27188
This commit is contained in:
parent
5d042ebd7b
commit
c92f688ef3
|
@ -21,6 +21,7 @@
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
class Record;
|
class Record;
|
||||||
class RecordKeeper;
|
class RecordKeeper;
|
||||||
|
class CodeGenTarget;
|
||||||
|
|
||||||
struct CodeGenIntrinsic {
|
struct CodeGenIntrinsic {
|
||||||
Record *TheDef; // The actual record defining this instruction.
|
Record *TheDef; // The actual record defining this instruction.
|
||||||
|
@ -45,7 +46,7 @@ namespace llvm {
|
||||||
NoMem, ReadArgMem, ReadMem, WriteArgMem, WriteMem
|
NoMem, ReadArgMem, ReadMem, WriteArgMem, WriteMem
|
||||||
} ModRef;
|
} ModRef;
|
||||||
|
|
||||||
CodeGenIntrinsic(Record *R);
|
CodeGenIntrinsic(Record *R, CodeGenTarget &CGT);
|
||||||
};
|
};
|
||||||
|
|
||||||
/// LoadIntrinsics - Read all of the intrinsics defined in the specified
|
/// LoadIntrinsics - Read all of the intrinsics defined in the specified
|
||||||
|
|
|
@ -29,8 +29,13 @@ AsmWriterNum("asmwriternum", cl::init(0),
|
||||||
|
|
||||||
/// getValueType - Return the MCV::ValueType that the specified TableGen record
|
/// getValueType - Return the MCV::ValueType that the specified TableGen record
|
||||||
/// corresponds to.
|
/// corresponds to.
|
||||||
MVT::ValueType llvm::getValueType(Record *Rec) {
|
MVT::ValueType llvm::getValueType(Record *Rec, const CodeGenTarget *CGT) {
|
||||||
return (MVT::ValueType)Rec->getValueAsInt("Value");
|
MVT::ValueType VT = (MVT::ValueType)Rec->getValueAsInt("Value");
|
||||||
|
if (VT == MVT::iPTR) {
|
||||||
|
assert(CGT && "Use a pointer type in a place that isn't supported yet!");
|
||||||
|
VT = CGT->getPointerType();
|
||||||
|
}
|
||||||
|
return VT;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string llvm::getName(MVT::ValueType T) {
|
std::string llvm::getName(MVT::ValueType T) {
|
||||||
|
@ -355,10 +360,15 @@ ComplexPattern::ComplexPattern(Record *R) {
|
||||||
|
|
||||||
std::vector<CodeGenIntrinsic> llvm::LoadIntrinsics(const RecordKeeper &RC) {
|
std::vector<CodeGenIntrinsic> llvm::LoadIntrinsics(const RecordKeeper &RC) {
|
||||||
std::vector<Record*> I = RC.getAllDerivedDefinitions("Intrinsic");
|
std::vector<Record*> I = RC.getAllDerivedDefinitions("Intrinsic");
|
||||||
return std::vector<CodeGenIntrinsic>(I.begin(), I.end());
|
|
||||||
|
std::vector<CodeGenIntrinsic> Result;
|
||||||
|
CodeGenTarget CGT;
|
||||||
|
for (unsigned i = 0, e = I.size(); i != e; ++i)
|
||||||
|
Result.push_back(CodeGenIntrinsic(I[i], CGT));
|
||||||
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeGenIntrinsic::CodeGenIntrinsic(Record *R) {
|
CodeGenIntrinsic::CodeGenIntrinsic(Record *R, CodeGenTarget &CGT) {
|
||||||
TheDef = R;
|
TheDef = R;
|
||||||
std::string DefName = R->getName();
|
std::string DefName = R->getName();
|
||||||
ModRef = WriteMem;
|
ModRef = WriteMem;
|
||||||
|
@ -405,7 +415,7 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R) {
|
||||||
assert(TyEl->isSubClassOf("LLVMType") && "Expected a type!");
|
assert(TyEl->isSubClassOf("LLVMType") && "Expected a type!");
|
||||||
ArgTypes.push_back(TyEl->getValueAsString("TypeVal"));
|
ArgTypes.push_back(TyEl->getValueAsString("TypeVal"));
|
||||||
|
|
||||||
ArgVTs.push_back(getValueType(TyEl->getValueAsDef("VT")));
|
ArgVTs.push_back(getValueType(TyEl->getValueAsDef("VT"), &CGT));
|
||||||
ArgTypeDefs.push_back(TyEl);
|
ArgTypeDefs.push_back(TyEl);
|
||||||
}
|
}
|
||||||
if (ArgTypes.size() == 0)
|
if (ArgTypes.size() == 0)
|
||||||
|
|
|
@ -27,10 +27,11 @@ namespace llvm {
|
||||||
class Record;
|
class Record;
|
||||||
class RecordKeeper;
|
class RecordKeeper;
|
||||||
struct CodeGenRegister;
|
struct CodeGenRegister;
|
||||||
|
class CodeGenTarget;
|
||||||
|
|
||||||
/// getValueType - Return the MVT::ValueType that the specified TableGen record
|
/// getValueType - Return the MVT::ValueType that the specified TableGen record
|
||||||
/// corresponds to.
|
/// corresponds to.
|
||||||
MVT::ValueType getValueType(Record *Rec);
|
MVT::ValueType getValueType(Record *Rec, const CodeGenTarget *CGT = 0);
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &OS, MVT::ValueType T);
|
std::ostream &operator<<(std::ostream &OS, MVT::ValueType T);
|
||||||
std::string getName(MVT::ValueType T);
|
std::string getName(MVT::ValueType T);
|
||||||
|
|
Loading…
Reference in New Issue