Home | History | Annotate | Download | only in CodeGen
      1 //===-- LiveInterval.cpp - Live Interval Representation -------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the LiveRange and LiveInterval classes.  Given some
     11 // numbering of each the machine instructions an interval [i, j) is said to be a
     12 // live range for register v if there is no instruction with number j' >= j
     13 // such that v is live at j' and there is no instruction with number i' < i such
     14 // that v is live at i'. In this implementation ranges can have holes,
     15 // i.e. a range might look like [1,20), [50,65), [1000,1001).  Each
     16 // individual segment is represented as an instance of LiveRange::Segment,
     17 // and the whole range is represented as an instance of LiveRange.
     18 //
     19 //===----------------------------------------------------------------------===//
     20 
     21 #include "llvm/CodeGen/LiveInterval.h"
     22 #include "RegisterCoalescer.h"
     23 #include "llvm/ADT/DenseMap.h"
     24 #include "llvm/ADT/STLExtras.h"
     25 #include "llvm/ADT/SmallSet.h"
     26 #include "llvm/CodeGen/LiveIntervalAnalysis.h"
     27 #include "llvm/CodeGen/MachineRegisterInfo.h"
     28 #include "llvm/Support/Debug.h"
     29 #include "llvm/Support/raw_ostream.h"
     30 #include "llvm/Target/TargetRegisterInfo.h"
     31 #include <algorithm>
     32 using namespace llvm;
     33 
     34 LiveRange::iterator LiveRange::find(SlotIndex Pos) {
     35   // This algorithm is basically std::upper_bound.
     36   // Unfortunately, std::upper_bound cannot be used with mixed types until we
     37   // adopt C++0x. Many libraries can do it, but not all.
     38   if (empty() || Pos >= endIndex())
     39     return end();
     40   iterator I = begin();
     41   size_t Len = size();
     42   do {
     43     size_t Mid = Len >> 1;
     44     if (Pos < I[Mid].end)
     45       Len = Mid;
     46     else
     47       I += Mid + 1, Len -= Mid + 1;
     48   } while (Len);
     49   return I;
     50 }
     51 
     52 VNInfo *LiveRange::createDeadDef(SlotIndex Def,
     53                                   VNInfo::Allocator &VNInfoAllocator) {
     54   assert(!Def.isDead() && "Cannot define a value at the dead slot");
     55   iterator I = find(Def);
     56   if (I == end()) {
     57     VNInfo *VNI = getNextValue(Def, VNInfoAllocator);
     58     segments.push_back(Segment(Def, Def.getDeadSlot(), VNI));
     59     return VNI;
     60   }
     61   if (SlotIndex::isSameInstr(Def, I->start)) {
     62     assert(I->valno->def == I->start && "Inconsistent existing value def");
     63 
     64     // It is possible to have both normal and early-clobber defs of the same
     65     // register on an instruction. It doesn't make a lot of sense, but it is
     66     // possible to specify in inline assembly.
     67     //
     68     // Just convert everything to early-clobber.
     69     Def = std::min(Def, I->start);
     70     if (Def != I->start)
     71       I->start = I->valno->def = Def;
     72     return I->valno;
     73   }
     74   assert(SlotIndex::isEarlierInstr(Def, I->start) && "Already live at def");
     75   VNInfo *VNI = getNextValue(Def, VNInfoAllocator);
     76   segments.insert(I, Segment(Def, Def.getDeadSlot(), VNI));
     77   return VNI;
     78 }
     79 
     80 // overlaps - Return true if the intersection of the two live ranges is
     81 // not empty.
     82 //
     83 // An example for overlaps():
     84 //
     85 // 0: A = ...
     86 // 4: B = ...
     87 // 8: C = A + B ;; last use of A
     88 //
     89 // The live ranges should look like:
     90 //
     91 // A = [3, 11)
     92 // B = [7, x)
     93 // C = [11, y)
     94 //
     95 // A->overlaps(C) should return false since we want to be able to join
     96 // A and C.
     97 //
     98 bool LiveRange::overlapsFrom(const LiveRange& other,
     99                              const_iterator StartPos) const {
    100   assert(!empty() && "empty range");
    101   const_iterator i = begin();
    102   const_iterator ie = end();
    103   const_iterator j = StartPos;
    104   const_iterator je = other.end();
    105 
    106   assert((StartPos->start <= i->start || StartPos == other.begin()) &&
    107          StartPos != other.end() && "Bogus start position hint!");
    108 
    109   if (i->start < j->start) {
    110     i = std::upper_bound(i, ie, j->start);
    111     if (i != begin()) --i;
    112   } else if (j->start < i->start) {
    113     ++StartPos;
    114     if (StartPos != other.end() && StartPos->start <= i->start) {
    115       assert(StartPos < other.end() && i < end());
    116       j = std::upper_bound(j, je, i->start);
    117       if (j != other.begin()) --j;
    118     }
    119   } else {
    120     return true;
    121   }
    122 
    123   if (j == je) return false;
    124 
    125   while (i != ie) {
    126     if (i->start > j->start) {
    127       std::swap(i, j);
    128       std::swap(ie, je);
    129     }
    130 
    131     if (i->end > j->start)
    132       return true;
    133     ++i;
    134   }
    135 
    136   return false;
    137 }
    138 
    139 bool LiveRange::overlaps(const LiveRange &Other, const CoalescerPair &CP,
    140                          const SlotIndexes &Indexes) const {
    141   assert(!empty() && "empty range");
    142   if (Other.empty())
    143     return false;
    144 
    145   // Use binary searches to find initial positions.
    146   const_iterator I = find(Other.beginIndex());
    147   const_iterator IE = end();
    148   if (I == IE)
    149     return false;
    150   const_iterator J = Other.find(I->start);
    151   const_iterator JE = Other.end();
    152   if (J == JE)
    153     return false;
    154 
    155   for (;;) {
    156     // J has just been advanced to satisfy:
    157     assert(J->end >= I->start);
    158     // Check for an overlap.
    159     if (J->start < I->end) {
    160       // I and J are overlapping. Find the later start.
    161       SlotIndex Def = std::max(I->start, J->start);
    162       // Allow the overlap if Def is a coalescable copy.
    163       if (Def.isBlock() ||
    164           !CP.isCoalescable(Indexes.getInstructionFromIndex(Def)))
    165         return true;
    166     }
    167     // Advance the iterator that ends first to check for more overlaps.
    168     if (J->end > I->end) {
    169       std::swap(I, J);
    170       std::swap(IE, JE);
    171     }
    172     // Advance J until J->end >= I->start.
    173     do
    174       if (++J == JE)
    175         return false;
    176     while (J->end < I->start);
    177   }
    178 }
    179 
    180 /// overlaps - Return true if the live range overlaps an interval specified
    181 /// by [Start, End).
    182 bool LiveRange::overlaps(SlotIndex Start, SlotIndex End) const {
    183   assert(Start < End && "Invalid range");
    184   const_iterator I = std::lower_bound(begin(), end(), End);
    185   return I != begin() && (--I)->end > Start;
    186 }
    187 
    188 
    189 /// ValNo is dead, remove it.  If it is the largest value number, just nuke it
    190 /// (and any other deleted values neighboring it), otherwise mark it as ~1U so
    191 /// it can be nuked later.
    192 void LiveRange::markValNoForDeletion(VNInfo *ValNo) {
    193   if (ValNo->id == getNumValNums()-1) {
    194     do {
    195       valnos.pop_back();
    196     } while (!valnos.empty() && valnos.back()->isUnused());
    197   } else {
    198     ValNo->markUnused();
    199   }
    200 }
    201 
    202 /// RenumberValues - Renumber all values in order of appearance and delete the
    203 /// remaining unused values.
    204 void LiveRange::RenumberValues() {
    205   SmallPtrSet<VNInfo*, 8> Seen;
    206   valnos.clear();
    207   for (const_iterator I = begin(), E = end(); I != E; ++I) {
    208     VNInfo *VNI = I->valno;
    209     if (!Seen.insert(VNI))
    210       continue;
    211     assert(!VNI->isUnused() && "Unused valno used by live segment");
    212     VNI->id = (unsigned)valnos.size();
    213     valnos.push_back(VNI);
    214   }
    215 }
    216 
    217 /// This method is used when we want to extend the segment specified by I to end
    218 /// at the specified endpoint.  To do this, we should merge and eliminate all
    219 /// segments that this will overlap with.  The iterator is not invalidated.
    220 void LiveRange::extendSegmentEndTo(iterator I, SlotIndex NewEnd) {
    221   assert(I != end() && "Not a valid segment!");
    222   VNInfo *ValNo = I->valno;
    223 
    224   // Search for the first segment that we can't merge with.
    225   iterator MergeTo = std::next(I);
    226   for (; MergeTo != end() && NewEnd >= MergeTo->end; ++MergeTo) {
    227     assert(MergeTo->valno == ValNo && "Cannot merge with differing values!");
    228   }
    229 
    230   // If NewEnd was in the middle of a segment, make sure to get its endpoint.
    231   I->end = std::max(NewEnd, std::prev(MergeTo)->end);
    232 
    233   // If the newly formed segment now touches the segment after it and if they
    234   // have the same value number, merge the two segments into one segment.
    235   if (MergeTo != end() && MergeTo->start <= I->end &&
    236       MergeTo->valno == ValNo) {
    237     I->end = MergeTo->end;
    238     ++MergeTo;
    239   }
    240 
    241   // Erase any dead segments.
    242   segments.erase(std::next(I), MergeTo);
    243 }
    244 
    245 
    246 /// This method is used when we want to extend the segment specified by I to
    247 /// start at the specified endpoint.  To do this, we should merge and eliminate
    248 /// all segments that this will overlap with.
    249 LiveRange::iterator
    250 LiveRange::extendSegmentStartTo(iterator I, SlotIndex NewStart) {
    251   assert(I != end() && "Not a valid segment!");
    252   VNInfo *ValNo = I->valno;
    253 
    254   // Search for the first segment that we can't merge with.
    255   iterator MergeTo = I;
    256   do {
    257     if (MergeTo == begin()) {
    258       I->start = NewStart;
    259       segments.erase(MergeTo, I);
    260       return I;
    261     }
    262     assert(MergeTo->valno == ValNo && "Cannot merge with differing values!");
    263     --MergeTo;
    264   } while (NewStart <= MergeTo->start);
    265 
    266   // If we start in the middle of another segment, just delete a range and
    267   // extend that segment.
    268   if (MergeTo->end >= NewStart && MergeTo->valno == ValNo) {
    269     MergeTo->end = I->end;
    270   } else {
    271     // Otherwise, extend the segment right after.
    272     ++MergeTo;
    273     MergeTo->start = NewStart;
    274     MergeTo->end = I->end;
    275   }
    276 
    277   segments.erase(std::next(MergeTo), std::next(I));
    278   return MergeTo;
    279 }
    280 
    281 LiveRange::iterator LiveRange::addSegmentFrom(Segment S, iterator From) {
    282   SlotIndex Start = S.start, End = S.end;
    283   iterator it = std::upper_bound(From, end(), Start);
    284 
    285   // If the inserted segment starts in the middle or right at the end of
    286   // another segment, just extend that segment to contain the segment of S.
    287   if (it != begin()) {
    288     iterator B = std::prev(it);
    289     if (S.valno == B->valno) {
    290       if (B->start <= Start && B->end >= Start) {
    291         extendSegmentEndTo(B, End);
    292         return B;
    293       }
    294     } else {
    295       // Check to make sure that we are not overlapping two live segments with
    296       // different valno's.
    297       assert(B->end <= Start &&
    298              "Cannot overlap two segments with differing ValID's"
    299              " (did you def the same reg twice in a MachineInstr?)");
    300     }
    301   }
    302 
    303   // Otherwise, if this segment ends in the middle of, or right next to, another
    304   // segment, merge it into that segment.
    305   if (it != end()) {
    306     if (S.valno == it->valno) {
    307       if (it->start <= End) {
    308         it = extendSegmentStartTo(it, Start);
    309 
    310         // If S is a complete superset of a segment, we may need to grow its
    311         // endpoint as well.
    312         if (End > it->end)
    313           extendSegmentEndTo(it, End);
    314         return it;
    315       }
    316     } else {
    317       // Check to make sure that we are not overlapping two live segments with
    318       // different valno's.
    319       assert(it->start >= End &&
    320              "Cannot overlap two segments with differing ValID's");
    321     }
    322   }
    323 
    324   // Otherwise, this is just a new segment that doesn't interact with anything.
    325   // Insert it.
    326   return segments.insert(it, S);
    327 }
    328 
    329 /// extendInBlock - If this range is live before Kill in the basic
    330 /// block that starts at StartIdx, extend it to be live up to Kill and return
    331 /// the value. If there is no live range before Kill, return NULL.
    332 VNInfo *LiveRange::extendInBlock(SlotIndex StartIdx, SlotIndex Kill) {
    333   if (empty())
    334     return nullptr;
    335   iterator I = std::upper_bound(begin(), end(), Kill.getPrevSlot());
    336   if (I == begin())
    337     return nullptr;
    338   --I;
    339   if (I->end <= StartIdx)
    340     return nullptr;
    341   if (I->end < Kill)
    342     extendSegmentEndTo(I, Kill);
    343   return I->valno;
    344 }
    345 
    346 /// Remove the specified segment from this range.  Note that the segment must
    347 /// be in a single Segment in its entirety.
    348 void LiveRange::removeSegment(SlotIndex Start, SlotIndex End,
    349                               bool RemoveDeadValNo) {
    350   // Find the Segment containing this span.
    351   iterator I = find(Start);
    352   assert(I != end() && "Segment is not in range!");
    353   assert(I->containsInterval(Start, End)
    354          && "Segment is not entirely in range!");
    355 
    356   // If the span we are removing is at the start of the Segment, adjust it.
    357   VNInfo *ValNo = I->valno;
    358   if (I->start == Start) {
    359     if (I->end == End) {
    360       if (RemoveDeadValNo) {
    361         // Check if val# is dead.
    362         bool isDead = true;
    363         for (const_iterator II = begin(), EE = end(); II != EE; ++II)
    364           if (II != I && II->valno == ValNo) {
    365             isDead = false;
    366             break;
    367           }
    368         if (isDead) {
    369           // Now that ValNo is dead, remove it.
    370           markValNoForDeletion(ValNo);
    371         }
    372       }
    373 
    374       segments.erase(I);  // Removed the whole Segment.
    375     } else
    376       I->start = End;
    377     return;
    378   }
    379 
    380   // Otherwise if the span we are removing is at the end of the Segment,
    381   // adjust the other way.
    382   if (I->end == End) {
    383     I->end = Start;
    384     return;
    385   }
    386 
    387   // Otherwise, we are splitting the Segment into two pieces.
    388   SlotIndex OldEnd = I->end;
    389   I->end = Start;   // Trim the old segment.
    390 
    391   // Insert the new one.
    392   segments.insert(std::next(I), Segment(End, OldEnd, ValNo));
    393 }
    394 
    395 /// removeValNo - Remove all the segments defined by the specified value#.
    396 /// Also remove the value# from value# list.
    397 void LiveRange::removeValNo(VNInfo *ValNo) {
    398   if (empty()) return;
    399   iterator I = end();
    400   iterator E = begin();
    401   do {
    402     --I;
    403     if (I->valno == ValNo)
    404       segments.erase(I);
    405   } while (I != E);
    406   // Now that ValNo is dead, remove it.
    407   markValNoForDeletion(ValNo);
    408 }
    409 
    410 void LiveRange::join(LiveRange &Other,
    411                      const int *LHSValNoAssignments,
    412                      const int *RHSValNoAssignments,
    413                      SmallVectorImpl<VNInfo *> &NewVNInfo) {
    414   verify();
    415 
    416   // Determine if any of our values are mapped.  This is uncommon, so we want
    417   // to avoid the range scan if not.
    418   bool MustMapCurValNos = false;
    419   unsigned NumVals = getNumValNums();
    420   unsigned NumNewVals = NewVNInfo.size();
    421   for (unsigned i = 0; i != NumVals; ++i) {
    422     unsigned LHSValID = LHSValNoAssignments[i];
    423     if (i != LHSValID ||
    424         (NewVNInfo[LHSValID] && NewVNInfo[LHSValID] != getValNumInfo(i))) {
    425       MustMapCurValNos = true;
    426       break;
    427     }
    428   }
    429 
    430   // If we have to apply a mapping to our base range assignment, rewrite it now.
    431   if (MustMapCurValNos && !empty()) {
    432     // Map the first live range.
    433 
    434     iterator OutIt = begin();
    435     OutIt->valno = NewVNInfo[LHSValNoAssignments[OutIt->valno->id]];
    436     for (iterator I = std::next(OutIt), E = end(); I != E; ++I) {
    437       VNInfo* nextValNo = NewVNInfo[LHSValNoAssignments[I->valno->id]];
    438       assert(nextValNo && "Huh?");
    439 
    440       // If this live range has the same value # as its immediate predecessor,
    441       // and if they are neighbors, remove one Segment.  This happens when we
    442       // have [0,4:0)[4,7:1) and map 0/1 onto the same value #.
    443       if (OutIt->valno == nextValNo && OutIt->end == I->start) {
    444         OutIt->end = I->end;
    445       } else {
    446         // Didn't merge. Move OutIt to the next segment,
    447         ++OutIt;
    448         OutIt->valno = nextValNo;
    449         if (OutIt != I) {
    450           OutIt->start = I->start;
    451           OutIt->end = I->end;
    452         }
    453       }
    454     }
    455     // If we merge some segments, chop off the end.
    456     ++OutIt;
    457     segments.erase(OutIt, end());
    458   }
    459 
    460   // Rewrite Other values before changing the VNInfo ids.
    461   // This can leave Other in an invalid state because we're not coalescing
    462   // touching segments that now have identical values. That's OK since Other is
    463   // not supposed to be valid after calling join();
    464   for (iterator I = Other.begin(), E = Other.end(); I != E; ++I)
    465     I->valno = NewVNInfo[RHSValNoAssignments[I->valno->id]];
    466 
    467   // Update val# info. Renumber them and make sure they all belong to this
    468   // LiveRange now. Also remove dead val#'s.
    469   unsigned NumValNos = 0;
    470   for (unsigned i = 0; i < NumNewVals; ++i) {
    471     VNInfo *VNI = NewVNInfo[i];
    472     if (VNI) {
    473       if (NumValNos >= NumVals)
    474         valnos.push_back(VNI);
    475       else
    476         valnos[NumValNos] = VNI;
    477       VNI->id = NumValNos++;  // Renumber val#.
    478     }
    479   }
    480   if (NumNewVals < NumVals)
    481     valnos.resize(NumNewVals);  // shrinkify
    482 
    483   // Okay, now insert the RHS live segments into the LHS.
    484   LiveRangeUpdater Updater(this);
    485   for (iterator I = Other.begin(), E = Other.end(); I != E; ++I)
    486     Updater.add(*I);
    487 }
    488 
    489 /// Merge all of the segments in RHS into this live range as the specified
    490 /// value number.  The segments in RHS are allowed to overlap with segments in
    491 /// the current range, but only if the overlapping segments have the
    492 /// specified value number.
    493 void LiveRange::MergeSegmentsInAsValue(const LiveRange &RHS,
    494                                        VNInfo *LHSValNo) {
    495   LiveRangeUpdater Updater(this);
    496   for (const_iterator I = RHS.begin(), E = RHS.end(); I != E; ++I)
    497     Updater.add(I->start, I->end, LHSValNo);
    498 }
    499 
    500 /// MergeValueInAsValue - Merge all of the live segments of a specific val#
    501 /// in RHS into this live range as the specified value number.
    502 /// The segments in RHS are allowed to overlap with segments in the
    503 /// current range, it will replace the value numbers of the overlaped
    504 /// segments with the specified value number.
    505 void LiveRange::MergeValueInAsValue(const LiveRange &RHS,
    506                                     const VNInfo *RHSValNo,
    507                                     VNInfo *LHSValNo) {
    508   LiveRangeUpdater Updater(this);
    509   for (const_iterator I = RHS.begin(), E = RHS.end(); I != E; ++I)
    510     if (I->valno == RHSValNo)
    511       Updater.add(I->start, I->end, LHSValNo);
    512 }
    513 
    514 /// MergeValueNumberInto - This method is called when two value nubmers
    515 /// are found to be equivalent.  This eliminates V1, replacing all
    516 /// segments with the V1 value number with the V2 value number.  This can
    517 /// cause merging of V1/V2 values numbers and compaction of the value space.
    518 VNInfo *LiveRange::MergeValueNumberInto(VNInfo *V1, VNInfo *V2) {
    519   assert(V1 != V2 && "Identical value#'s are always equivalent!");
    520 
    521   // This code actually merges the (numerically) larger value number into the
    522   // smaller value number, which is likely to allow us to compactify the value
    523   // space.  The only thing we have to be careful of is to preserve the
    524   // instruction that defines the result value.
    525 
    526   // Make sure V2 is smaller than V1.
    527   if (V1->id < V2->id) {
    528     V1->copyFrom(*V2);
    529     std::swap(V1, V2);
    530   }
    531 
    532   // Merge V1 segments into V2.
    533   for (iterator I = begin(); I != end(); ) {
    534     iterator S = I++;
    535     if (S->valno != V1) continue;  // Not a V1 Segment.
    536 
    537     // Okay, we found a V1 live range.  If it had a previous, touching, V2 live
    538     // range, extend it.
    539     if (S != begin()) {
    540       iterator Prev = S-1;
    541       if (Prev->valno == V2 && Prev->end == S->start) {
    542         Prev->end = S->end;
    543 
    544         // Erase this live-range.
    545         segments.erase(S);
    546         I = Prev+1;
    547         S = Prev;
    548       }
    549     }
    550 
    551     // Okay, now we have a V1 or V2 live range that is maximally merged forward.
    552     // Ensure that it is a V2 live-range.
    553     S->valno = V2;
    554 
    555     // If we can merge it into later V2 segments, do so now.  We ignore any
    556     // following V1 segments, as they will be merged in subsequent iterations
    557     // of the loop.
    558     if (I != end()) {
    559       if (I->start == S->end && I->valno == V2) {
    560         S->end = I->end;
    561         segments.erase(I);
    562         I = S+1;
    563       }
    564     }
    565   }
    566 
    567   // Now that V1 is dead, remove it.
    568   markValNoForDeletion(V1);
    569 
    570   return V2;
    571 }
    572 
    573 unsigned LiveInterval::getSize() const {
    574   unsigned Sum = 0;
    575   for (const_iterator I = begin(), E = end(); I != E; ++I)
    576     Sum += I->start.distance(I->end);
    577   return Sum;
    578 }
    579 
    580 raw_ostream& llvm::operator<<(raw_ostream& os, const LiveRange::Segment &S) {
    581   return os << '[' << S.start << ',' << S.end << ':' << S.valno->id << ")";
    582 }
    583 
    584 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
    585 void LiveRange::Segment::dump() const {
    586   dbgs() << *this << "\n";
    587 }
    588 #endif
    589 
    590 void LiveRange::print(raw_ostream &OS) const {
    591   if (empty())
    592     OS << "EMPTY";
    593   else {
    594     for (const_iterator I = begin(), E = end(); I != E; ++I) {
    595       OS << *I;
    596       assert(I->valno == getValNumInfo(I->valno->id) && "Bad VNInfo");
    597     }
    598   }
    599 
    600   // Print value number info.
    601   if (getNumValNums()) {
    602     OS << "  ";
    603     unsigned vnum = 0;
    604     for (const_vni_iterator i = vni_begin(), e = vni_end(); i != e;
    605          ++i, ++vnum) {
    606       const VNInfo *vni = *i;
    607       if (vnum) OS << " ";
    608       OS << vnum << "@";
    609       if (vni->isUnused()) {
    610         OS << "x";
    611       } else {
    612         OS << vni->def;
    613         if (vni->isPHIDef())
    614           OS << "-phi";
    615       }
    616     }
    617   }
    618 }
    619 
    620 void LiveInterval::print(raw_ostream &OS) const {
    621   OS << PrintReg(reg) << ' ';
    622   super::print(OS);
    623 }
    624 
    625 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
    626 void LiveRange::dump() const {
    627   dbgs() << *this << "\n";
    628 }
    629 
    630 void LiveInterval::dump() const {
    631   dbgs() << *this << "\n";
    632 }
    633 #endif
    634 
    635 #ifndef NDEBUG
    636 void LiveRange::verify() const {
    637   for (const_iterator I = begin(), E = end(); I != E; ++I) {
    638     assert(I->start.isValid());
    639     assert(I->end.isValid());
    640     assert(I->start < I->end);
    641     assert(I->valno != nullptr);
    642     assert(I->valno->id < valnos.size());
    643     assert(I->valno == valnos[I->valno->id]);
    644     if (std::next(I) != E) {
    645       assert(I->end <= std::next(I)->start);
    646       if (I->end == std::next(I)->start)
    647         assert(I->valno != std::next(I)->valno);
    648     }
    649   }
    650 }
    651 #endif
    652 
    653 
    654 //===----------------------------------------------------------------------===//
    655 //                           LiveRangeUpdater class
    656 //===----------------------------------------------------------------------===//
    657 //
    658 // The LiveRangeUpdater class always maintains these invariants:
    659 //
    660 // - When LastStart is invalid, Spills is empty and the iterators are invalid.
    661 //   This is the initial state, and the state created by flush().
    662 //   In this state, isDirty() returns false.
    663 //
    664 // Otherwise, segments are kept in three separate areas:
    665 //
    666 // 1. [begin; WriteI) at the front of LR.
    667 // 2. [ReadI; end) at the back of LR.
    668 // 3. Spills.
    669 //
    670 // - LR.begin() <= WriteI <= ReadI <= LR.end().
    671 // - Segments in all three areas are fully ordered and coalesced.
    672 // - Segments in area 1 precede and can't coalesce with segments in area 2.
    673 // - Segments in Spills precede and can't coalesce with segments in area 2.
    674 // - No coalescing is possible between segments in Spills and segments in area
    675 //   1, and there are no overlapping segments.
    676 //
    677 // The segments in Spills are not ordered with respect to the segments in area
    678 // 1. They need to be merged.
    679 //
    680 // When they exist, Spills.back().start <= LastStart,
    681 //                 and WriteI[-1].start <= LastStart.
    682 
    683 void LiveRangeUpdater::print(raw_ostream &OS) const {
    684   if (!isDirty()) {
    685     if (LR)
    686       OS << "Clean updater: " << *LR << '\n';
    687     else
    688       OS << "Null updater.\n";
    689     return;
    690   }
    691   assert(LR && "Can't have null LR in dirty updater.");
    692   OS << " updater with gap = " << (ReadI - WriteI)
    693      << ", last start = " << LastStart
    694      << ":\n  Area 1:";
    695   for (LiveRange::const_iterator I = LR->begin(); I != WriteI; ++I)
    696     OS << ' ' << *I;
    697   OS << "\n  Spills:";
    698   for (unsigned I = 0, E = Spills.size(); I != E; ++I)
    699     OS << ' ' << Spills[I];
    700   OS << "\n  Area 2:";
    701   for (LiveRange::const_iterator I = ReadI, E = LR->end(); I != E; ++I)
    702     OS << ' ' << *I;
    703   OS << '\n';
    704 }
    705 
    706 void LiveRangeUpdater::dump() const
    707 {
    708   print(errs());
    709 }
    710 
    711 // Determine if A and B should be coalesced.
    712 static inline bool coalescable(const LiveRange::Segment &A,
    713                                const LiveRange::Segment &B) {
    714   assert(A.start <= B.start && "Unordered live segments.");
    715   if (A.end == B.start)
    716     return A.valno == B.valno;
    717   if (A.end < B.start)
    718     return false;
    719   assert(A.valno == B.valno && "Cannot overlap different values");
    720   return true;
    721 }
    722 
    723 void LiveRangeUpdater::add(LiveRange::Segment Seg) {
    724   assert(LR && "Cannot add to a null destination");
    725 
    726   // Flush the state if Start moves backwards.
    727   if (!LastStart.isValid() || LastStart > Seg.start) {
    728     if (isDirty())
    729       flush();
    730     // This brings us to an uninitialized state. Reinitialize.
    731     assert(Spills.empty() && "Leftover spilled segments");
    732     WriteI = ReadI = LR->begin();
    733   }
    734 
    735   // Remember start for next time.
    736   LastStart = Seg.start;
    737 
    738   // Advance ReadI until it ends after Seg.start.
    739   LiveRange::iterator E = LR->end();
    740   if (ReadI != E && ReadI->end <= Seg.start) {
    741     // First try to close the gap between WriteI and ReadI with spills.
    742     if (ReadI != WriteI)
    743       mergeSpills();
    744     // Then advance ReadI.
    745     if (ReadI == WriteI)
    746       ReadI = WriteI = LR->find(Seg.start);
    747     else
    748       while (ReadI != E && ReadI->end <= Seg.start)
    749         *WriteI++ = *ReadI++;
    750   }
    751 
    752   assert(ReadI == E || ReadI->end > Seg.start);
    753 
    754   // Check if the ReadI segment begins early.
    755   if (ReadI != E && ReadI->start <= Seg.start) {
    756     assert(ReadI->valno == Seg.valno && "Cannot overlap different values");
    757     // Bail if Seg is completely contained in ReadI.
    758     if (ReadI->end >= Seg.end)
    759       return;
    760     // Coalesce into Seg.
    761     Seg.start = ReadI->start;
    762     ++ReadI;
    763   }
    764 
    765   // Coalesce as much as possible from ReadI into Seg.
    766   while (ReadI != E && coalescable(Seg, *ReadI)) {
    767     Seg.end = std::max(Seg.end, ReadI->end);
    768     ++ReadI;
    769   }
    770 
    771   // Try coalescing Spills.back() into Seg.
    772   if (!Spills.empty() && coalescable(Spills.back(), Seg)) {
    773     Seg.start = Spills.back().start;
    774     Seg.end = std::max(Spills.back().end, Seg.end);
    775     Spills.pop_back();
    776   }
    777 
    778   // Try coalescing Seg into WriteI[-1].
    779   if (WriteI != LR->begin() && coalescable(WriteI[-1], Seg)) {
    780     WriteI[-1].end = std::max(WriteI[-1].end, Seg.end);
    781     return;
    782   }
    783 
    784   // Seg doesn't coalesce with anything, and needs to be inserted somewhere.
    785   if (WriteI != ReadI) {
    786     *WriteI++ = Seg;
    787     return;
    788   }
    789 
    790   // Finally, append to LR or Spills.
    791   if (WriteI == E) {
    792     LR->segments.push_back(Seg);
    793     WriteI = ReadI = LR->end();
    794   } else
    795     Spills.push_back(Seg);
    796 }
    797 
    798 // Merge as many spilled segments as possible into the gap between WriteI
    799 // and ReadI. Advance WriteI to reflect the inserted instructions.
    800 void LiveRangeUpdater::mergeSpills() {
    801   // Perform a backwards merge of Spills and [SpillI;WriteI).
    802   size_t GapSize = ReadI - WriteI;
    803   size_t NumMoved = std::min(Spills.size(), GapSize);
    804   LiveRange::iterator Src = WriteI;
    805   LiveRange::iterator Dst = Src + NumMoved;
    806   LiveRange::iterator SpillSrc = Spills.end();
    807   LiveRange::iterator B = LR->begin();
    808 
    809   // This is the new WriteI position after merging spills.
    810   WriteI = Dst;
    811 
    812   // Now merge Src and Spills backwards.
    813   while (Src != Dst) {
    814     if (Src != B && Src[-1].start > SpillSrc[-1].start)
    815       *--Dst = *--Src;
    816     else
    817       *--Dst = *--SpillSrc;
    818   }
    819   assert(NumMoved == size_t(Spills.end() - SpillSrc));
    820   Spills.erase(SpillSrc, Spills.end());
    821 }
    822 
    823 void LiveRangeUpdater::flush() {
    824   if (!isDirty())
    825     return;
    826   // Clear the dirty state.
    827   LastStart = SlotIndex();
    828 
    829   assert(LR && "Cannot add to a null destination");
    830 
    831   // Nothing to merge?
    832   if (Spills.empty()) {
    833     LR->segments.erase(WriteI, ReadI);
    834     LR->verify();
    835     return;
    836   }
    837 
    838   // Resize the WriteI - ReadI gap to match Spills.
    839   size_t GapSize = ReadI - WriteI;
    840   if (GapSize < Spills.size()) {
    841     // The gap is too small. Make some room.
    842     size_t WritePos = WriteI - LR->begin();
    843     LR->segments.insert(ReadI, Spills.size() - GapSize, LiveRange::Segment());
    844     // This also invalidated ReadI, but it is recomputed below.
    845     WriteI = LR->begin() + WritePos;
    846   } else {
    847     // Shrink the gap if necessary.
    848     LR->segments.erase(WriteI + Spills.size(), ReadI);
    849   }
    850   ReadI = WriteI + Spills.size();
    851   mergeSpills();
    852   LR->verify();
    853 }
    854 
    855 unsigned ConnectedVNInfoEqClasses::Classify(const LiveInterval *LI) {
    856   // Create initial equivalence classes.
    857   EqClass.clear();
    858   EqClass.grow(LI->getNumValNums());
    859 
    860   const VNInfo *used = nullptr, *unused = nullptr;
    861 
    862   // Determine connections.
    863   for (LiveInterval::const_vni_iterator I = LI->vni_begin(), E = LI->vni_end();
    864        I != E; ++I) {
    865     const VNInfo *VNI = *I;
    866     // Group all unused values into one class.
    867     if (VNI->isUnused()) {
    868       if (unused)
    869         EqClass.join(unused->id, VNI->id);
    870       unused = VNI;
    871       continue;
    872     }
    873     used = VNI;
    874     if (VNI->isPHIDef()) {
    875       const MachineBasicBlock *MBB = LIS.getMBBFromIndex(VNI->def);
    876       assert(MBB && "Phi-def has no defining MBB");
    877       // Connect to values live out of predecessors.
    878       for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),
    879            PE = MBB->pred_end(); PI != PE; ++PI)
    880         if (const VNInfo *PVNI = LI->getVNInfoBefore(LIS.getMBBEndIdx(*PI)))
    881           EqClass.join(VNI->id, PVNI->id);
    882     } else {
    883       // Normal value defined by an instruction. Check for two-addr redef.
    884       // FIXME: This could be coincidental. Should we really check for a tied
    885       // operand constraint?
    886       // Note that VNI->def may be a use slot for an early clobber def.
    887       if (const VNInfo *UVNI = LI->getVNInfoBefore(VNI->def))
    888         EqClass.join(VNI->id, UVNI->id);
    889     }
    890   }
    891 
    892   // Lump all the unused values in with the last used value.
    893   if (used && unused)
    894     EqClass.join(used->id, unused->id);
    895 
    896   EqClass.compress();
    897   return EqClass.getNumClasses();
    898 }
    899 
    900 void ConnectedVNInfoEqClasses::Distribute(LiveInterval *LIV[],
    901                                           MachineRegisterInfo &MRI) {
    902   assert(LIV[0] && "LIV[0] must be set");
    903   LiveInterval &LI = *LIV[0];
    904 
    905   // Rewrite instructions.
    906   for (MachineRegisterInfo::reg_iterator RI = MRI.reg_begin(LI.reg),
    907        RE = MRI.reg_end(); RI != RE;) {
    908     MachineOperand &MO = *RI;
    909     MachineInstr *MI = RI->getParent();
    910     ++RI;
    911     // DBG_VALUE instructions don't have slot indexes, so get the index of the
    912     // instruction before them.
    913     // Normally, DBG_VALUE instructions are removed before this function is
    914     // called, but it is not a requirement.
    915     SlotIndex Idx;
    916     if (MI->isDebugValue())
    917       Idx = LIS.getSlotIndexes()->getIndexBefore(MI);
    918     else
    919       Idx = LIS.getInstructionIndex(MI);
    920     LiveQueryResult LRQ = LI.Query(Idx);
    921     const VNInfo *VNI = MO.readsReg() ? LRQ.valueIn() : LRQ.valueDefined();
    922     // In the case of an <undef> use that isn't tied to any def, VNI will be
    923     // NULL. If the use is tied to a def, VNI will be the defined value.
    924     if (!VNI)
    925       continue;
    926     MO.setReg(LIV[getEqClass(VNI)]->reg);
    927   }
    928 
    929   // Move runs to new intervals.
    930   LiveInterval::iterator J = LI.begin(), E = LI.end();
    931   while (J != E && EqClass[J->valno->id] == 0)
    932     ++J;
    933   for (LiveInterval::iterator I = J; I != E; ++I) {
    934     if (unsigned eq = EqClass[I->valno->id]) {
    935       assert((LIV[eq]->empty() || LIV[eq]->expiredAt(I->start)) &&
    936              "New intervals should be empty");
    937       LIV[eq]->segments.push_back(*I);
    938     } else
    939       *J++ = *I;
    940   }
    941   LI.segments.erase(J, E);
    942 
    943   // Transfer VNInfos to their new owners and renumber them.
    944   unsigned j = 0, e = LI.getNumValNums();
    945   while (j != e && EqClass[j] == 0)
    946     ++j;
    947   for (unsigned i = j; i != e; ++i) {
    948     VNInfo *VNI = LI.getValNumInfo(i);
    949     if (unsigned eq = EqClass[i]) {
    950       VNI->id = LIV[eq]->getNumValNums();
    951       LIV[eq]->valnos.push_back(VNI);
    952     } else {
    953       VNI->id = j;
    954       LI.valnos[j++] = VNI;
    955     }
    956   }
    957   LI.valnos.resize(j);
    958 }
    959