Move r2iMap_ over to DenseMap from std::map.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54765 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2008-08-13 22:08:30 +00:00
parent 6ab6422f25
commit 20e2839cb9
2 changed files with 18 additions and 4 deletions

View File

@ -55,6 +55,20 @@ namespace llvm {
return LHS.first < RHS.first; return LHS.first < RHS.first;
} }
}; };
// Provide DenseMapInfo for unsigned.
template<>
struct DenseMapInfo<unsigned> {
static inline unsigned getEmptyKey() { return (unsigned)-1; }
static inline unsigned getTombstoneKey() { return (unsigned)-2; }
static unsigned getHashValue(const unsigned Val) {
return Val * 37;
}
static bool isEqual(const unsigned LHS, const unsigned RHS) {
return LHS == RHS;
}
static bool isPod() { return true; }
};
class LiveIntervals : public MachineFunctionPass { class LiveIntervals : public MachineFunctionPass {
MachineFunction* mf_; MachineFunction* mf_;
@ -86,7 +100,7 @@ namespace llvm {
typedef std::vector<MachineInstr*> Index2MiMap; typedef std::vector<MachineInstr*> Index2MiMap;
Index2MiMap i2miMap_; Index2MiMap i2miMap_;
typedef std::map<unsigned, LiveInterval*> Reg2IntervalMap; typedef DenseMap<unsigned, LiveInterval*> Reg2IntervalMap;
Reg2IntervalMap r2iMap_; Reg2IntervalMap r2iMap_;
BitVector allocatableRegs_; BitVector allocatableRegs_;
@ -236,7 +250,7 @@ namespace llvm {
LiveInterval &getOrCreateInterval(unsigned reg) { LiveInterval &getOrCreateInterval(unsigned reg) {
Reg2IntervalMap::iterator I = r2iMap_.find(reg); Reg2IntervalMap::iterator I = r2iMap_.find(reg);
if (I == r2iMap_.end()) if (I == r2iMap_.end())
I = r2iMap_.insert(I, std::make_pair(reg, createInterval(reg))); I = r2iMap_.insert(std::make_pair(reg, createInterval(reg))).first;
return *I->second; return *I->second;
} }
@ -248,7 +262,7 @@ namespace llvm {
// Interval removal // Interval removal
void removeInterval(unsigned Reg) { void removeInterval(unsigned Reg) {
std::map<unsigned, LiveInterval*>::iterator I = r2iMap_.find(Reg); DenseMap<unsigned, LiveInterval*>::iterator I = r2iMap_.find(Reg);
delete I->second; delete I->second;
r2iMap_.erase(I); r2iMap_.erase(I);
} }

View File

@ -72,7 +72,7 @@ void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
void LiveIntervals::releaseMemory() { void LiveIntervals::releaseMemory() {
// Free the live intervals themselves. // Free the live intervals themselves.
for (std::map<unsigned, LiveInterval*>::iterator I = r2iMap_.begin(), for (DenseMap<unsigned, LiveInterval*>::iterator I = r2iMap_.begin(),
E = r2iMap_.end(); I != E; ++I) E = r2iMap_.end(); I != E; ++I)
delete I->second; delete I->second;