diff options
-rw-r--r-- | utils/TableGen/FileParser.y | 2 | ||||
-rw-r--r-- | utils/TableGen/Record.cpp | 11 | ||||
-rw-r--r-- | utils/TableGen/Record.h | 8 |
3 files changed, 19 insertions, 2 deletions
diff --git a/utils/TableGen/FileParser.y b/utils/TableGen/FileParser.y index 162f621ad3..28bb7b3f01 100644 --- a/utils/TableGen/FileParser.y +++ b/utils/TableGen/FileParser.y @@ -68,7 +68,7 @@ static void addSuperClass(Record *SC) { } static void setValue(const std::string &ValName, - std::vector<unsigned> *BitList, Init *V) { + std::vector<unsigned> *BitList, Init *V) { if (!V) return; RecordVal *RV = CurRec->getValue(ValName); diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp index 2a70c27e50..51014813b2 100644 --- a/utils/TableGen/Record.cpp +++ b/utils/TableGen/Record.cpp @@ -554,6 +554,17 @@ Init *FieldInit::resolveReferences(Record &R, const RecordVal *RV) { return this; } +Init *DagInit::resolveReferences(Record &R, const RecordVal *RV) { + std::vector<Init*> NewArgs; + for (unsigned i = 0, e = Args.size(); i != e; ++i) + NewArgs.push_back(Args[i]->resolveReferences(R, RV)); + + if (Args != NewArgs) + return new DagInit(NodeTypeDef, NewArgs, ArgNames); + + return this; +} + void DagInit::print(std::ostream &OS) const { OS << "(" << NodeTypeDef->getName(); diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h index 9f30004167..a4175e5845 100644 --- a/utils/TableGen/Record.h +++ b/utils/TableGen/Record.h @@ -826,7 +826,11 @@ public: ArgNames.push_back(args[i].second); } } - + DagInit(Record *D, const std::vector<Init*> &args, + const std::vector<std::string> &argNames) + : NodeTypeDef(D), Args(args), ArgNames(argNames) { + } + virtual Init *convertInitializerTo(RecTy *Ty) { return Ty->convertValue(this); } @@ -847,6 +851,8 @@ public: assert(Num < Args.size() && "Arg number out of range!"); Args[Num] = I; } + + virtual Init *resolveReferences(Record &R, const RecordVal *RV); virtual void print(std::ostream &OS) const; }; |