Only compute intrinsic valuetypes when in a target .td file.

llvm-svn: 27197
This commit is contained in:
Chris Lattner 2006-03-28 00:15:00 +00:00
parent 8a2ffaea1d
commit 424516c95a
2 changed files with 16 additions and 3 deletions

View File

@ -34,7 +34,10 @@ namespace llvm {
/// of the arguments. These are things like Type::UIntTyID.
std::vector<std::string> ArgTypes;
/// ArgVTs - The MVT::ValueType for each argument type.
/// ArgVTs - The MVT::ValueType for each argument type. Note that this list
/// is only populated when in the context of a target .td file. When
/// building Intrinsics.td, this isn't available, because we don't know the
/// target pointer size.
std::vector<MVT::ValueType> ArgVTs;
/// ArgTypeDefs - The records for each argument type.

View File

@ -362,8 +362,17 @@ std::vector<CodeGenIntrinsic> llvm::LoadIntrinsics(const RecordKeeper &RC) {
std::vector<Record*> I = RC.getAllDerivedDefinitions("Intrinsic");
std::vector<CodeGenIntrinsic> Result;
// If we are in the context of a target .td file, get the target info so that
// we can decode the current intptr_t.
CodeGenTarget *CGT = 0;
if (Records.getClass("Target") &&
Records.getAllDerivedDefinitions("Target").size() == 1)
CGT = new CodeGenTarget();
for (unsigned i = 0, e = I.size(); i != e; ++i)
Result.push_back(CodeGenIntrinsic(I[i], 0));
Result.push_back(CodeGenIntrinsic(I[i], CGT));
delete CGT;
return Result;
}
@ -414,7 +423,8 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R, CodeGenTarget *CGT) {
assert(TyEl->isSubClassOf("LLVMType") && "Expected a type!");
ArgTypes.push_back(TyEl->getValueAsString("TypeVal"));
ArgVTs.push_back(getValueType(TyEl->getValueAsDef("VT"), 0));
if (CGT)
ArgVTs.push_back(getValueType(TyEl->getValueAsDef("VT"), CGT));
ArgTypeDefs.push_back(TyEl);
}
if (ArgTypes.size() == 0)