implement test/Regression/TableGen/DagIntSubst.ll
authorChris Lattner <sabre@nondot.org>
Tue, 31 Jan 2006 06:02:35 +0000 (06:02 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 31 Jan 2006 06:02:35 +0000 (06:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25836 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/FileParser.y
utils/TableGen/Record.cpp
utils/TableGen/Record.h

index 162f621ad3e6695bca13b3dcaa47d3fac851429c..28bb7b3f01fa172df6b046e7d9936f597f0c77d8 100644 (file)
@@ -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);
index 2a70c27e50cbce748b41e045a6fda79620603732..51014813b2966e7acba61e41b903d539e47002ec 100644 (file)
@@ -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();
index 9f300041671738624b3c7f9b16fb49bbc852014a..a4175e5845a7cefb0f772399c2c23a46bf5b8039 100644 (file)
@@ -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;
 };