Move r2iMap_ over to DenseMap from std::map.
authorOwen Anderson <resistor@mac.com>
Wed, 13 Aug 2008 22:08:30 +0000 (22:08 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 13 Aug 2008 22:08:30 +0000 (22:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54765 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/LiveIntervalAnalysis.h
lib/CodeGen/LiveIntervalAnalysis.cpp

index cf5ad63f0951500224e4892363d51cadbc2c837e..e12bab18b7188f2e5dcfafeb246c9f8f23b5970c 100644 (file)
@@ -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);
     }
index db8a5a0f4c1debdab42523ae8c56748cb278ffb0..742ef5c2df99a36fb70228f64bb4f71aa2306ec8 100644 (file)
@@ -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;