If an interval is being undone clear its preference as well since the source interval...
authorEvan Cheng <evan.cheng@apple.com>
Sun, 4 Nov 2007 08:32:21 +0000 (08:32 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sun, 4 Nov 2007 08:32:21 +0000 (08:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43670 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegAllocLinearScan.cpp

index 2d675b09b76e11f66b7305e01b74ce83ecc9cb42..98b62cee31423f6f512e0c261c8ed1665d4d4743 100644 (file)
@@ -209,7 +209,7 @@ void RALinScan::ComputeRelatedRegClasses() {
 /// different register classes or because the coalescer was overly
 /// conservative.
 unsigned RALinScan::attemptTrivialCoalescing(LiveInterval &cur, unsigned Reg) {
-  if (cur.preference && cur.preference == Reg || !cur.containsOneValue())
+  if ((cur.preference && cur.preference == Reg) || !cur.containsOneValue())
     return Reg;
 
   VNInfo *vni = cur.getValNumInfo(0);
@@ -791,6 +791,11 @@ void RALinScan::assignRegOrStackSlotAtInterval(LiveInterval* cur)
       vrm_->clearVirt(i->reg);
       unhandled_.push(i);
     }
+
+    // It interval has a preference, it must be defined by a copy. Clear the
+    // preference now since the source interval allocation may have been undone
+    // as well.
+    i->preference = 0;
   }
 
   // Rewind the iterators in the active, inactive, and fixed lists back to the