summaryrefslogtreecommitdiff
path: root/utils/TableGen
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-03-28 00:15:00 +0000
committerChris Lattner <sabre@nondot.org>2006-03-28 00:15:00 +0000
commit6a160fba223a472f8ce4d0adef044660f69b4417 (patch)
tree976ae8236d250cc89e46d0a3995c83b40d42f28e /utils/TableGen
parent76f8c7c4cc4abbd6d71748762ebfe2fa1cd0fb43 (diff)
downloadllvm-6a160fba223a472f8ce4d0adef044660f69b4417.tar.gz
llvm-6a160fba223a472f8ce4d0adef044660f69b4417.tar.bz2
llvm-6a160fba223a472f8ce4d0adef044660f69b4417.tar.xz
Only compute intrinsic valuetypes when in a target .td file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27197 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
-rw-r--r--utils/TableGen/CodeGenIntrinsics.h5
-rw-r--r--utils/TableGen/CodeGenTarget.cpp14
2 files changed, 16 insertions, 3 deletions
diff --git a/utils/TableGen/CodeGenIntrinsics.h b/utils/TableGen/CodeGenIntrinsics.h
index f986ed1995..4bae8f15a5 100644
--- a/utils/TableGen/CodeGenIntrinsics.h
+++ b/utils/TableGen/CodeGenIntrinsics.h
@@ -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.
diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp
index e8c133578f..f9bae9f961 100644
--- a/utils/TableGen/CodeGenTarget.cpp
+++ b/utils/TableGen/CodeGenTarget.cpp
@@ -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)