aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-01-31 06:02:35 +0000
committerChris Lattner <sabre@nondot.org>2006-01-31 06:02:35 +0000
commit273d463befb26004ed5be8dc737321f65a175ad0 (patch)
treef1c59afa1864450230d8db1db93be6e3b565864f
parent5def058f386faf3a0e8977fdd5c4178539d101de (diff)
implement test/Regression/TableGen/DagIntSubst.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25836 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--utils/TableGen/FileParser.y2
-rw-r--r--utils/TableGen/Record.cpp11
-rw-r--r--utils/TableGen/Record.h8
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;
};