diff options
author | Craig Topper <craig.topper@gmail.com> | 2015-04-24 06:49:44 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2015-04-24 06:49:44 +0000 |
commit | ba6057de7198f57738550fccb5b43d30f83757bb (patch) | |
tree | 7359ca53b12f32c19a137b48fc8459dc30e041a4 /llvm/lib/TableGen/SetTheory.cpp | |
parent | 17b3a378c55baf706a63a36da78a3e168bfbb39b (diff) | |
download | bcm5719-llvm-ba6057de7198f57738550fccb5b43d30f83757bb.tar.gz bcm5719-llvm-ba6057de7198f57738550fccb5b43d30f83757bb.zip |
[TableGen] Don't leak Expanders and Operators in SetTheory.
llvm-svn: 235697
Diffstat (limited to 'llvm/lib/TableGen/SetTheory.cpp')
-rw-r--r-- | llvm/lib/TableGen/SetTheory.cpp | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/llvm/lib/TableGen/SetTheory.cpp b/llvm/lib/TableGen/SetTheory.cpp index c99c2bab45a..a8816c87814 100644 --- a/llvm/lib/TableGen/SetTheory.cpp +++ b/llvm/lib/TableGen/SetTheory.cpp @@ -245,28 +245,28 @@ void SetTheory::Expander::anchor() {} SetTheory::SetTheory() { - addOperator("add", new AddOp); - addOperator("sub", new SubOp); - addOperator("and", new AndOp); - addOperator("shl", new ShlOp); - addOperator("trunc", new TruncOp); - addOperator("rotl", new RotOp(false)); - addOperator("rotr", new RotOp(true)); - addOperator("decimate", new DecimateOp); - addOperator("interleave", new InterleaveOp); - addOperator("sequence", new SequenceOp); + addOperator("add", llvm::make_unique<AddOp>()); + addOperator("sub", llvm::make_unique<SubOp>()); + addOperator("and", llvm::make_unique<AndOp>()); + addOperator("shl", llvm::make_unique<ShlOp>()); + addOperator("trunc", llvm::make_unique<TruncOp>()); + addOperator("rotl", llvm::make_unique<RotOp>(false)); + addOperator("rotr", llvm::make_unique<RotOp>(true)); + addOperator("decimate", llvm::make_unique<DecimateOp>()); + addOperator("interleave", llvm::make_unique<InterleaveOp>()); + addOperator("sequence", llvm::make_unique<SequenceOp>()); } -void SetTheory::addOperator(StringRef Name, Operator *Op) { - Operators[Name] = Op; +void SetTheory::addOperator(StringRef Name, std::unique_ptr<Operator> Op) { + Operators[Name] = std::move(Op); } -void SetTheory::addExpander(StringRef ClassName, Expander *E) { - Expanders[ClassName] = E; +void SetTheory::addExpander(StringRef ClassName, std::unique_ptr<Expander> E) { + Expanders[ClassName] = std::move(E); } void SetTheory::addFieldExpander(StringRef ClassName, StringRef FieldName) { - addExpander(ClassName, new FieldExpander(FieldName)); + addExpander(ClassName, llvm::make_unique<FieldExpander>(FieldName)); } void SetTheory::evaluate(Init *Expr, RecSet &Elts, ArrayRef<SMLoc> Loc) { @@ -289,10 +289,10 @@ void SetTheory::evaluate(Init *Expr, RecSet &Elts, ArrayRef<SMLoc> Loc) { DefInit *OpInit = dyn_cast<DefInit>(DagExpr->getOperator()); if (!OpInit) PrintFatalError(Loc, "Bad set expression: " + Expr->getAsString()); - Operator *Op = Operators.lookup(OpInit->getDef()->getName()); - if (!Op) + auto I = Operators.find(OpInit->getDef()->getName()); + if (I == Operators.end()) PrintFatalError(Loc, "Unknown set operator: " + Expr->getAsString()); - Op->apply(*this, DagExpr, Elts, Loc); + I->second->apply(*this, DagExpr, Elts, Loc); } const RecVec *SetTheory::expand(Record *Set) { @@ -307,11 +307,12 @@ const RecVec *SetTheory::expand(Record *Set) { // Skip unnamed superclasses. if (!dyn_cast<StringInit>(SC[i]->getNameInit())) continue; - if (Expander *Exp = Expanders.lookup(SC[i]->getName())) { + auto I = Expanders.find(SC[i]->getName()); + if (I != Expanders.end()) { // This breaks recursive definitions. RecVec &EltVec = Expansions[Set]; RecSet Elts; - Exp->expand(*this, Set, Elts); + I->second->expand(*this, Set, Elts); EltVec.assign(Elts.begin(), Elts.end()); return &EltVec; } |