aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/CodeGenDAGPatterns.h
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-11-17 22:55:41 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-11-17 22:55:41 +0000
commitcf195300dc63025d7d6f898511ca599420a4bbe1 (patch)
tree7b366f567e58daa529da7d054f241065d2b88a42 /llvm/utils/TableGen/CodeGenDAGPatterns.h
parente0569982dbefc7f442c937201df82e8c4445d365 (diff)
downloadllvm-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.h32
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