/// Keep dynamically allocated PartialMapping in a separate map.
/// This shouldn't be needed when everything gets TableGen'ed.
- mutable DenseMap<unsigned, PartialMapping> MapOfPartialMappings;
+ mutable DenseMap<unsigned, PartialMapping *> MapOfPartialMappings;
/// Create a RegisterBankInfo that can accomodate up to \p NumRegBanks
/// RegisterBank instances.
}
public:
- virtual ~RegisterBankInfo() {}
+ virtual ~RegisterBankInfo();
/// Get the register bank identified by \p ID.
const RegisterBank &getRegBank(unsigned ID) const {
});
}
+RegisterBankInfo::~RegisterBankInfo() {
+ for (auto It : MapOfPartialMappings)
+ delete It.second;
+}
+
bool RegisterBankInfo::verify(const TargetRegisterInfo &TRI) const {
DEBUG(for (unsigned Idx = 0, End = getNumRegBanks(); Idx != End; ++Idx) {
const RegisterBank &RegBank = getRegBank(Idx);
hash_code Hash = hash_combine(StartIdx, Length, RegBank.getID());
const auto &It = MapOfPartialMappings.find(Hash);
if (It != MapOfPartialMappings.end())
- return It->second;
+ return *It->second;
++NumPartialMappingsCreated;
- PartialMapping &PartMapping = MapOfPartialMappings[Hash];
- PartMapping = PartialMapping{StartIdx, Length, RegBank};
- return PartMapping;
+ PartialMapping *&PartMapping = MapOfPartialMappings[Hash];
+ PartMapping = new PartialMapping{StartIdx, Length, RegBank};
+ return *PartMapping;
}
RegisterBankInfo::InstructionMapping