aboutsummaryrefslogtreecommitdiffstats
path: root/utils/TableGen/Record.cpp
diff options
context:
space:
mode:
authorDavid Greene <greened@obbligato.org>2010-09-03 21:00:49 +0000
committerDavid Greene <greened@obbligato.org>2010-09-03 21:00:49 +0000
commit4f2a68b20880ced54532e8d8a6ac0010b88654cc (patch)
tree3c8f21c0b9e558fa2fbf3193b9db5063935d1f8a /utils/TableGen/Record.cpp
parent30fe28e61de73fec55eb085046701c05a28c3a6a (diff)
downloadexternal_llvm-4f2a68b20880ced54532e8d8a6ac0010b88654cc.zip
external_llvm-4f2a68b20880ced54532e8d8a6ac0010b88654cc.tar.gz
external_llvm-4f2a68b20880ced54532e8d8a6ac0010b88654cc.tar.bz2
Generalize getFieldType to work on all TypedInits. Add a couple of testcases from
Amaury Pouly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113010 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/Record.cpp')
-rw-r--r--utils/TableGen/Record.cpp28
1 files changed, 11 insertions, 17 deletions
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp
index d2cf379..dc79358 100644
--- a/utils/TableGen/Record.cpp
+++ b/utils/TableGen/Record.cpp
@@ -628,23 +628,6 @@ std::string UnOpInit::getAsString() const {
return Result + "(" + LHS->getAsString() + ")";
}
-RecTy *UnOpInit::getFieldType(const std::string &FieldName) const {
- switch (getOpcode()) {
- default: assert(0 && "Unknown unop");
- case CAST: {
- RecordRecTy *RecordType = dynamic_cast<RecordRecTy *>(getType());
- if (RecordType) {
- RecordVal *Field = RecordType->getRecord()->getValue(FieldName);
- if (Field) {
- return Field->getType();
- }
- }
- break;
- }
- }
- return 0;
-}
-
Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
switch (getOpcode()) {
default: assert(0 && "Unknown binop");
@@ -1046,6 +1029,17 @@ std::string TernOpInit::getAsString() const {
+ RHS->getAsString() + ")";
}
+RecTy *TypedInit::getFieldType(const std::string &FieldName) const {
+ RecordRecTy *RecordType = dynamic_cast<RecordRecTy *>(getType());
+ if (RecordType) {
+ RecordVal *Field = RecordType->getRecord()->getValue(FieldName);
+ if (Field) {
+ return Field->getType();
+ }
+ }
+ return 0;
+}
+
Init *TypedInit::convertInitializerBitRange(const std::vector<unsigned> &Bits) {
BitsRecTy *T = dynamic_cast<BitsRecTy*>(getType());
if (T == 0) return 0; // Cannot subscript a non-bits variable...