[Mips] Use unique_ptr to manage ownership.

Required some tweaking of ValueMap to accommodate a move-only value
type. No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235091 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2015-04-16 12:43:33 +00:00
parent edc3aaefa6
commit e6da045ce1
3 changed files with 20 additions and 22 deletions

View File

@ -147,9 +147,14 @@ public:
// If the key is already in the map, it returns false and doesn't update the // If the key is already in the map, it returns false and doesn't update the
// value. // value.
std::pair<iterator, bool> insert(const std::pair<KeyT, ValueT> &KV) { std::pair<iterator, bool> insert(const std::pair<KeyT, ValueT> &KV) {
std::pair<typename MapT::iterator, bool> map_result= auto MapResult = Map.insert(std::make_pair(Wrap(KV.first), KV.second));
Map.insert(std::make_pair(Wrap(KV.first), KV.second)); return std::make_pair(iterator(MapResult.first), MapResult.second);
return std::make_pair(iterator(map_result.first), map_result.second); }
std::pair<iterator, bool> insert(std::pair<KeyT, ValueT> &&KV) {
auto MapResult =
Map.insert(std::make_pair(Wrap(KV.first), std::move(KV.second)));
return std::make_pair(iterator(MapResult.first), MapResult.second);
} }
/// insert - Range insertion of pairs. /// insert - Range insertion of pairs.
@ -256,9 +261,9 @@ public:
// I could == Copy.Map->Map.end() if the onRAUW callback already // I could == Copy.Map->Map.end() if the onRAUW callback already
// removed the old mapping. // removed the old mapping.
if (I != Copy.Map->Map.end()) { if (I != Copy.Map->Map.end()) {
ValueT Target(I->second); ValueT Target(std::move(I->second));
Copy.Map->Map.erase(I); // Definitely destroys *this. Copy.Map->Map.erase(I); // Definitely destroys *this.
Copy.Map->insert(std::make_pair(typed_new_key, Target)); Copy.Map->insert(std::make_pair(typed_new_key, std::move(Target)));
} }
} }
} }

View File

@ -60,15 +60,7 @@ void MipsCallEntry::printCustom(raw_ostream &O) const {
#endif #endif
} }
MipsFunctionInfo::~MipsFunctionInfo() { MipsFunctionInfo::~MipsFunctionInfo() {}
for (StringMap<const MipsCallEntry *>::iterator
I = ExternalCallEntries.begin(), E = ExternalCallEntries.end(); I != E;
++I)
delete I->getValue();
for (const auto &Entry : GlobalCallEntries)
delete Entry.second;
}
bool MipsFunctionInfo::globalBaseRegSet() const { bool MipsFunctionInfo::globalBaseRegSet() const {
return GlobalBaseReg; return GlobalBaseReg;
@ -125,21 +117,21 @@ bool MipsFunctionInfo::isEhDataRegFI(int FI) const {
} }
MachinePointerInfo MipsFunctionInfo::callPtrInfo(StringRef Name) { MachinePointerInfo MipsFunctionInfo::callPtrInfo(StringRef Name) {
const MipsCallEntry *&E = ExternalCallEntries[Name]; std::unique_ptr<const MipsCallEntry> &E = ExternalCallEntries[Name];
if (!E) if (!E)
E = new MipsCallEntry(Name); E = llvm::make_unique<MipsCallEntry>(Name);
return MachinePointerInfo(E); return MachinePointerInfo(E.get());
} }
MachinePointerInfo MipsFunctionInfo::callPtrInfo(const GlobalValue *Val) { MachinePointerInfo MipsFunctionInfo::callPtrInfo(const GlobalValue *Val) {
const MipsCallEntry *&E = GlobalCallEntries[Val]; std::unique_ptr<const MipsCallEntry> &E = GlobalCallEntries[Val];
if (!E) if (!E)
E = new MipsCallEntry(Val); E = llvm::make_unique<MipsCallEntry>(Val);
return MachinePointerInfo(E); return MachinePointerInfo(E.get());
} }
int MipsFunctionInfo::getMoveF64ViaSpillFI(const TargetRegisterClass *RC) { int MipsFunctionInfo::getMoveF64ViaSpillFI(const TargetRegisterClass *RC) {

View File

@ -144,8 +144,9 @@ private:
int MoveF64ViaSpillFI; int MoveF64ViaSpillFI;
/// MipsCallEntry maps. /// MipsCallEntry maps.
StringMap<const MipsCallEntry *> ExternalCallEntries; StringMap<std::unique_ptr<const MipsCallEntry>> ExternalCallEntries;
ValueMap<const GlobalValue *, const MipsCallEntry *> GlobalCallEntries; ValueMap<const GlobalValue *, std::unique_ptr<const MipsCallEntry>>
GlobalCallEntries;
}; };
} // end of namespace llvm } // end of namespace llvm