[llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLinearScan.cpp

Evan Cheng evan.cheng at apple.com
Wed May 10 15:30:54 PDT 2006



Changes in directory llvm/lib/CodeGen:

RegAllocLinearScan.cpp updated: 1.120 -> 1.121
---
Log message:

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.


---
Diffs of the changes:  (+15 -1)

 RegAllocLinearScan.cpp |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp
diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.120 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.121
--- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.120	Sat Mar 25 17:00:56 2006
+++ llvm/lib/CodeGen/RegAllocLinearScan.cpp	Wed May 10 17:30:41 2006
@@ -406,6 +406,14 @@
   }
 }
 
+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;
+}
+
 
 /// assignRegOrStackSlotAtInterval - assign a register if one is available, or
 /// spill.
@@ -557,10 +565,16 @@
   DEBUG(std::cerr << "\t\tregister with min weight: "
         << mri_->getName(minReg) << " (" << minWeight << ")\n");
 
+  // 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(cur))
+    DEBUG(std::cerr << "\t\tavoid spilling zero length live interval: "
+          << *cur << '\n';);
   // if the current has the minimum weight, we need to spill it and
   // add any added intervals back to unhandled, and restart
   // linearscan.
-  if (cur->weight <= minWeight) {
+  else if (cur->weight <= minWeight) {
     DEBUG(std::cerr << "\t\t\tspilling(c): " << *cur << '\n';);
     int slot = vrm_->assignVirt2StackSlot(cur->reg);
     std::vector<LiveInterval*> added =






More information about the llvm-commits mailing list