diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-11-17 22:55:41 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-11-17 22:55:41 +0000 |
commit | cf195300dc63025d7d6f898511ca599420a4bbe1 (patch) | |
tree | 7b366f567e58daa529da7d054f241065d2b88a42 /llvm/utils/TableGen/CodeGenDAGPatterns.h | |
parent | e0569982dbefc7f442c937201df82e8c4445d365 (diff) | |
download | llvm-cf195300dc63025d7d6f898511ca599420a4bbe1.zip llvm-cf195300dc63025d7d6f898511ca599420a4bbe1.tar.gz llvm-cf195300dc63025d7d6f898511ca599420a4bbe1.tar.bz2 |
Revert "Improve memory ownership/management in TableGen by unique_ptrifying TreePattern's Tree member."
This reverts commit r222183.
Broke on the MSVC buildbots due to MSVC not producing default move
operations - I'd fix it immediately but just broke my build system a
bit, so backing out until I have a chance to get everything going again.
llvm-svn: 222187
Diffstat (limited to 'llvm/utils/TableGen/CodeGenDAGPatterns.h')
-rw-r--r-- | llvm/utils/TableGen/CodeGenDAGPatterns.h | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.h b/llvm/utils/TableGen/CodeGenDAGPatterns.h index 5e688cf..c0812cf 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.h +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.h @@ -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 |