R600/SI: Improve fpext / fptrunc test coverage
[oota-llvm.git] / utils / TableGen / CodeGenDAGPatterns.h
index 5e688cfb110883736c616f966d13753373d8b7b8..c0812cf05536465f11877c169fb4f302a695fdb4 100644 (file)
@@ -294,7 +294,7 @@ private:
   std::string getPredCode() const;
   std::string getImmCode() const;
 };
-
+  
 
 /// FIXME: TreePatternNode's can be shared in some cases (due to dag-shaped
 /// patterns), and as such should be ref counted.  We currently just leak all
@@ -508,7 +508,7 @@ class TreePattern {
   /// Trees - The list of pattern trees which corresponds to this pattern.
   /// Note that PatFrag's only have a single tree.
   ///
-  std::vector<std::unique_ptr<TreePatternNode>> Trees;
+  std::vector<TreePatternNode*> Trees;
 
   /// NamedNodes - This is all of the nodes that have names in the trees in this
   /// pattern.
@@ -548,17 +548,15 @@ public:
               CodeGenDAGPatterns &ise);
   TreePattern(Record *TheRec, DagInit *Pat, bool isInput,
               CodeGenDAGPatterns &ise);
-  TreePattern(Record *TheRec, std::unique_ptr<TreePatternNode> Pat,
-              bool isInput, CodeGenDAGPatterns &ise);
+  TreePattern(Record *TheRec, TreePatternNode *Pat, bool isInput,
+              CodeGenDAGPatterns &ise);
 
   /// getTrees - Return the tree patterns which corresponds to this pattern.
   ///
-  const std::vector<std::unique_ptr<TreePatternNode>> &getTrees() const {
-    return Trees;
-  }
+  const std::vector<TreePatternNode*> &getTrees() const { return Trees; }
   unsigned getNumTrees() const { return Trees.size(); }
-  TreePatternNode *getTree(unsigned i) const { return Trees[i].get(); }
-  std::unique_ptr<TreePatternNode> &getOnlyTree() {
+  TreePatternNode *getTree(unsigned i) const { return Trees[i]; }
+  TreePatternNode *getOnlyTree() const {
     assert(Trees.size() == 1 && "Doesn't have exactly one pattern!");
     return Trees[0];
   }
@@ -588,8 +586,7 @@ public:
   /// PatFrag references.
   void InlinePatternFragments() {
     for (unsigned i = 0, e = Trees.size(); i != e; ++i)
-      // Can leak, if InlinePatternFragments doesn't return 'this'
-      Trees[i].reset(Trees[i].release()->InlinePatternFragments(*this));
+      Trees[i] = Trees[i]->InlinePatternFragments(*this);
   }
 
   /// InferAllTypes - Infer/propagate as many types throughout the expression
@@ -612,7 +609,7 @@ public:
   void dump() const;
 
 private:
-  std::unique_ptr<TreePatternNode> ParseTreePattern(Init *DI, StringRef OpName);
+  TreePatternNode *ParseTreePattern(Init *DI, StringRef OpName);
   void ComputeNamedNodes();
   void ComputeNamedNodes(TreePatternNode *N);
 };
@@ -628,15 +625,14 @@ class DAGInstruction {
   std::vector<Record*> Results;
   std::vector<Record*> Operands;
   std::vector<Record*> ImpResults;
-  std::unique_ptr<TreePatternNode> ResultPattern;
-
+  TreePatternNode *ResultPattern;
 public:
   DAGInstruction(TreePattern *TP,
                  const std::vector<Record*> &results,
                  const std::vector<Record*> &operands,
                  const std::vector<Record*> &impresults)
     : Pattern(TP), Results(results), Operands(operands),
-      ImpResults(impresults)  {}
+      ImpResults(impresults), ResultPattern(nullptr) {}
 
   TreePattern *getPattern() const { return Pattern; }
   unsigned getNumResults() const { return Results.size(); }
@@ -644,9 +640,7 @@ public:
   unsigned getNumImpResults() const { return ImpResults.size(); }
   const std::vector<Record*>& getImpResults() const { return ImpResults; }
 
-  void setResultPattern(std::unique_ptr<TreePatternNode> R) {
-    ResultPattern = std::move(R);
-  }
+  void setResultPattern(TreePatternNode *R) { ResultPattern = R; }
 
   Record *getResult(unsigned RN) const {
     assert(RN < Results.size());
@@ -663,7 +657,7 @@ public:
     return ImpResults[RN];
   }
 
-  TreePatternNode *getResultPattern() const { return ResultPattern.get(); }
+  TreePatternNode *getResultPattern() const { return ResultPattern; }
 };
 
 /// PatternToMatch - Used by CodeGenDAGPatterns to keep tab of patterns