Add a register allocation preference field; add a method to compute size of a live...
authorEvan Cheng <evan.cheng@apple.com>
Tue, 17 Apr 2007 20:25:11 +0000 (20:25 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 17 Apr 2007 20:25:11 +0000 (20:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36216 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 63d02c857318c709f77253bd753126d4b08364fc..1912d6429600a6df1955f596bba32e254be904e0 100644 (file)
@@ -81,6 +81,7 @@ namespace llvm {
   struct LiveInterval {
     typedef SmallVector<LiveRange,4> Ranges;
     unsigned reg;        // the register of this interval
+    unsigned preference; // preferred register to allocate for this interval
     float weight;        // weight of this interval
     MachineInstr* remat; // definition if the definition rematerializable
     Ranges ranges;       // the ranges in which this register is live
@@ -94,7 +95,7 @@ namespace llvm {
   public:
 
     LiveInterval(unsigned Reg, float Weight)
-      : reg(Reg), weight(Weight), remat(NULL) {
+      : reg(Reg), preference(0), weight(Weight), remat(NULL) {
     }
 
     typedef Ranges::iterator iterator;
@@ -256,6 +257,10 @@ namespace llvm {
       removeRange(LR.start, LR.end);
     }
 
+    /// getSize - Returns the sum of sizes of all the LiveRange's.
+    ///
+    unsigned getSize() const;
+
     bool operator<(const LiveInterval& other) const {
       return beginNumber() < other.beginNumber();
     }
index 0ca16007b2d4b6e20eb188cb8c4d0710c8483272..45c1dd03da5881e46a9ba7a876e20ebf057c1c13 100644 (file)
@@ -349,6 +349,8 @@ void LiveInterval::join(LiveInterval &Other, int *LHSValNoAssignments,
   ValueNumberInfo.clear();
   ValueNumberInfo.append(NewValueNumberInfo.begin(), NewValueNumberInfo.end());
   weight += Other.weight;
+  if (Other.preference && !preference)
+    preference = Other.preference;
 }
 
 /// MergeRangesInAsValue - Merge all of the intervals in RHS into this live
@@ -467,6 +469,13 @@ void LiveInterval::MergeValueNumberInto(unsigned V1, unsigned V2) {
   }
 }
 
+unsigned LiveInterval::getSize() const {
+  unsigned Sum = 0;
+  for (const_iterator I = begin(), E = end(); I != E; ++I)
+    Sum += I->end - I->start;
+  return Sum;
+}
+
 std::ostream& llvm::operator<<(std::ostream& os, const LiveRange &LR) {
   return os << '[' << LR.start << ',' << LR.end << ':' << LR.ValId << ")";
 }