diff options
author | Owen Anderson <resistor@mac.com> | 2008-08-13 22:08:30 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2008-08-13 22:08:30 +0000 |
commit | 767b5cc7fd708ada02e937f87c449ae5135659a9 (patch) | |
tree | 5f9276a1a346fbd640ab76354b3210e4b0dbdd71 | |
parent | 7e3c3922486c3bf23be0cbc968d5589913822faa (diff) | |
download | bcm5719-llvm-767b5cc7fd708ada02e937f87c449ae5135659a9.tar.gz bcm5719-llvm-767b5cc7fd708ada02e937f87c449ae5135659a9.zip |
Move r2iMap_ over to DenseMap from std::map.
llvm-svn: 54765
-rw-r--r-- | llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h | 20 | ||||
-rw-r--r-- | llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 2 |
2 files changed, 18 insertions, 4 deletions
diff --git a/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h b/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h index cf5ad63f095..e12bab18b71 100644 --- a/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h +++ b/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h @@ -55,6 +55,20 @@ namespace llvm { 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 { MachineFunction* mf_; @@ -86,7 +100,7 @@ namespace llvm { typedef std::vector<MachineInstr*> Index2MiMap; Index2MiMap i2miMap_; - typedef std::map<unsigned, LiveInterval*> Reg2IntervalMap; + typedef DenseMap<unsigned, LiveInterval*> Reg2IntervalMap; Reg2IntervalMap r2iMap_; BitVector allocatableRegs_; @@ -236,7 +250,7 @@ namespace llvm { LiveInterval &getOrCreateInterval(unsigned reg) { Reg2IntervalMap::iterator I = r2iMap_.find(reg); 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; } @@ -248,7 +262,7 @@ namespace llvm { // Interval removal void removeInterval(unsigned Reg) { - std::map<unsigned, LiveInterval*>::iterator I = r2iMap_.find(Reg); + DenseMap<unsigned, LiveInterval*>::iterator I = r2iMap_.find(Reg); delete I->second; r2iMap_.erase(I); } diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp index db8a5a0f4c1..742ef5c2df9 100644 --- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -72,7 +72,7 @@ void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const { void LiveIntervals::releaseMemory() { // 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) delete I->second; |