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