Set weight of zero length intervals to infinite to prevent them from being
authorEvan Cheng <evan.cheng@apple.com>
Thu, 11 May 2006 07:29:24 +0000 (07:29 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 11 May 2006 07:29:24 +0000 (07:29 +0000)
spilled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28220 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index 946d80de6b4c074d47b11bcaf4d6210fb130f4dc..0bff34cef29d908e1c4c38e800929242a3e464dc 100644 (file)
@@ -80,6 +80,15 @@ void LiveIntervals::releaseMemory()
 }
 
 
+static bool isZeroLengthInterval(LiveInterval *li) {
+  for (LiveInterval::Ranges::const_iterator
+         i = li->ranges.begin(), e = li->ranges.end(); i != e; ++i)
+    if (i->end - i->start > LiveIntervals::InstrSlots::NUM)
+      return false;
+  return true;
+}
+
+
 /// runOnMachineFunction - Register allocate the whole function
 ///
 bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
@@ -199,6 +208,16 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
     }
   }
 
+  for (iterator I = begin(), E = end(); I != E; ++I) {
+    LiveInterval &li = I->second;
+    if (MRegisterInfo::isVirtualRegister(li.reg))
+      // If the live interval legnth is essentially zero, i.e. in every live
+      // range the use follows def immediately, it doesn't make sense to spill
+      // it and hope it will be easier to allocate for this li.
+      if (isZeroLengthInterval(&li))
+        li.weight = float(HUGE_VAL);
+  }
+
   DEBUG(dump());
   return true;
 }