[llvm-commits] [llvm] r47267 - in /llvm/trunk: include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveIntervalAnalysis.cpp

Roman Levenstein romix.llvm at googlemail.com
Mon Feb 18 01:35:33 PST 2008


Author: romix
Date: Mon Feb 18 03:35:30 2008
New Revision: 47267

URL: http://llvm.org/viewvc/llvm-project?rev=47267&view=rev
Log:
New helper function getMBBFromIndex() that given an index in any instruction of an MBB returns a pointer the MBB. Reviewed by Evan.

Modified:
    llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h
    llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h?rev=47267&r1=47266&r2=47267&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h Mon Feb 18 03:35:30 2008
@@ -40,6 +40,20 @@
   class VirtRegMap;
   typedef std::pair<unsigned, MachineBasicBlock*> IdxMBBPair;
 
+  inline bool operator<(unsigned V, const IdxMBBPair &IM) {
+    return V < IM.first;
+  }
+
+  inline bool operator<(const IdxMBBPair &IM, unsigned V) {
+    return IM.first < V;
+  }
+
+  struct Idx2MBBCompare {
+    bool operator()(const IdxMBBPair &LHS, const IdxMBBPair &RHS) const {
+      return LHS.first < RHS.first;
+    }
+  };
+
   class LiveIntervals : public MachineFunctionPass {
     MachineFunction* mf_;
     const TargetMachine* tm_;
@@ -153,6 +167,22 @@
       return MBB2IdxMap[MBBNo].second;
     }
 
+    /// getMBBFromIndex - given an index in any instruction of an
+    /// MBB return a pointer the MBB
+    MachineBasicBlock* getMBBFromIndex(unsigned index) const {
+      std::vector<IdxMBBPair>::const_iterator I =
+	    std::lower_bound(Idx2MBBMap.begin(), Idx2MBBMap.end(), index);
+      // Take the pair containing the index
+      std::vector<IdxMBBPair>::const_iterator J =
+	  ((I != Idx2MBBMap.end() && I->first > index) ||
+	   (I == Idx2MBBMap.end() && Idx2MBBMap.size()>0)) ? (I-1): I;
+
+      assert(J != Idx2MBBMap.end() && J->first < index+1 &&
+	     index <= getMBBEndIdx(J->second) &&
+	     "index does not correspond to an MBB");
+      return J->second;
+    }
+
     /// getInstructionIndex - returns the base index of instr
     unsigned getInstructionIndex(MachineInstr* instr) const {
       Mi2IndexMap::const_iterator it = mi2iMap_.find(instr);

Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=47267&r1=47266&r2=47267&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Mon Feb 18 03:35:30 2008
@@ -79,22 +79,6 @@
     delete ClonedMIs[i];
 }
 
-namespace llvm {
-  inline bool operator<(unsigned V, const IdxMBBPair &IM) {
-    return V < IM.first;
-  }
-
-  inline bool operator<(const IdxMBBPair &IM, unsigned V) {
-    return IM.first < V;
-  }
-
-  struct Idx2MBBCompare {
-    bool operator()(const IdxMBBPair &LHS, const IdxMBBPair &RHS) const {
-      return LHS.first < RHS.first;
-    }
-  };
-}
-
 /// runOnMachineFunction - Register allocate the whole function
 ///
 bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {





More information about the llvm-commits mailing list