forked from OSchip/llvm-project
Use unique_ptr instead of DeleteContainerSeconds.
llvm-svn: 223918
This commit is contained in:
parent
04da06ccee
commit
48a8e641e2
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue