Use unique_ptr instead of DeleteContainerSeconds.

llvm-svn: 223918
This commit is contained in:
Craig Topper 2014-12-10 06:18:57 +00:00
parent 04da06ccee
commit 48a8e641e2
2 changed files with 12 additions and 12 deletions

View File

@ -143,7 +143,6 @@ CodeGenTarget::CodeGenTarget(RecordKeeper &records)
}
CodeGenTarget::~CodeGenTarget() {
DeleteContainerSeconds(Instructions);
}
const std::string &CodeGenTarget::getName() const {
@ -270,20 +269,20 @@ void CodeGenTarget::ReadInstructions() const {
// Parse the instructions defined in the .td file.
for (unsigned i = 0, e = Insts.size(); i != e; ++i)
Instructions[Insts[i]] = new CodeGenInstruction(Insts[i]);
Instructions[Insts[i]] = llvm::make_unique<CodeGenInstruction>(Insts[i]);
}
static const CodeGenInstruction *
GetInstByName(const char *Name,
const DenseMap<const Record*, CodeGenInstruction*> &Insts,
const DenseMap<const Record*,
std::unique_ptr<CodeGenInstruction>> &Insts,
RecordKeeper &Records) {
const Record *Rec = Records.getDef(Name);
DenseMap<const Record*, CodeGenInstruction*>::const_iterator
I = Insts.find(Rec);
const auto I = Insts.find(Rec);
if (!Rec || I == Insts.end())
PrintFatalError(Twine("Could not find '") + Name + "' instruction!");
return I->second;
return I->second.get();
}
/// \brief Return all of the instructions defined by the target, ordered by
@ -298,7 +297,7 @@ void CodeGenTarget::ComputeInstrsByEnum() const {
"LIFETIME_END", "STACKMAP", "PATCHPOINT", "LOAD_STACK_GUARD",
"STATEPOINT",
nullptr};
const DenseMap<const Record*, CodeGenInstruction*> &Insts = getInstructions();
const auto &Insts = getInstructions();
for (const char *const *p = FixedInstrs; *p; ++p) {
const CodeGenInstruction *Instr = GetInstByName(*p, Insts, Records);
assert(Instr && "Missing target independent instruction");
@ -308,7 +307,7 @@ void CodeGenTarget::ComputeInstrsByEnum() const {
unsigned EndOfPredefines = InstrsByEnum.size();
for (const auto &I : Insts) {
const CodeGenInstruction *CGI = I.second;
const CodeGenInstruction *CGI = I.second.get();
if (CGI->Namespace != "TargetOpcode")
InstrsByEnum.push_back(CGI);
}

View File

@ -65,7 +65,8 @@ class CodeGenTarget {
RecordKeeper &Records;
Record *TargetRec;
mutable DenseMap<const Record*, CodeGenInstruction*> Instructions;
mutable DenseMap<const Record*,
std::unique_ptr<CodeGenInstruction>> Instructions;
mutable std::unique_ptr<CodeGenRegBank> RegBank;
mutable std::vector<Record*> RegAltNameIndices;
mutable SmallVector<MVT::SimpleValueType, 8> LegalValueTypes;
@ -146,7 +147,8 @@ public:
CodeGenSchedModels &getSchedModels() const;
private:
DenseMap<const Record*, CodeGenInstruction*> &getInstructions() const {
DenseMap<const Record*, std::unique_ptr<CodeGenInstruction>> &
getInstructions() const {
if (Instructions.empty()) ReadInstructions();
return Instructions;
}
@ -154,8 +156,7 @@ public:
CodeGenInstruction &getInstruction(const Record *InstRec) const {
if (Instructions.empty()) ReadInstructions();
DenseMap<const Record*, CodeGenInstruction*>::iterator I =
Instructions.find(InstRec);
auto I = Instructions.find(InstRec);
assert(I != Instructions.end() && "Not an instruction");
return *I->second;
}