From 273d463befb26004ed5be8dc737321f65a175ad0 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 31 Jan 2006 06:02:35 +0000 Subject: [PATCH] implement test/Regression/TableGen/DagIntSubst.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25836 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/FileParser.y | 2 +- utils/TableGen/Record.cpp | 11 +++++++++++ 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 162f621ad3e..28bb7b3f01f 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 *BitList, Init *V) { + std::vector *BitList, Init *V) { if (!V) return; RecordVal *RV = CurRec->getValue(ValName); diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp index 2a70c27e50c..51014813b29 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 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 9f300041671..a4175e5845a 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 &args, + const std::vector &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; };