1 //===---------- SplitKit.cpp - Toolkit for splitting live ranges ----------===//
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 contains the SplitAnalysis class as well as mutator functions for
11 // live range splitting.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "SplitKit.h"
16 #include "llvm/ADT/Statistic.h"
17 #include "llvm/CodeGen/LiveIntervalAnalysis.h"
18 #include "llvm/CodeGen/LiveRangeEdit.h"
19 #include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
20 #include "llvm/CodeGen/MachineDominators.h"
21 #include "llvm/CodeGen/MachineInstrBuilder.h"
22 #include "llvm/CodeGen/MachineLoopInfo.h"
23 #include "llvm/CodeGen/MachineRegisterInfo.h"
24 #include "llvm/CodeGen/VirtRegMap.h"
25 #include "llvm/Support/Debug.h"
26 #include "llvm/Support/raw_ostream.h"
27 #include "llvm/Target/TargetInstrInfo.h"
28 #include "llvm/Target/TargetMachine.h"
29 
30 using namespace llvm;
31 
32 #define DEBUG_TYPE "regalloc"
33 
34 STATISTIC(NumFinished, "Number of splits finished");
35 STATISTIC(NumSimple,   "Number of splits that were simple");
36 STATISTIC(NumCopies,   "Number of copies inserted for splitting");
37 STATISTIC(NumRemats,   "Number of rematerialized defs for splitting");
38 STATISTIC(NumRepairs,  "Number of invalid live ranges repaired");
39 
40 //===----------------------------------------------------------------------===//
41 //                     Last Insert Point Analysis
42 //===----------------------------------------------------------------------===//
43 
44 InsertPointAnalysis::InsertPointAnalysis(const LiveIntervals &lis,
45                                          unsigned BBNum)
46     : LIS(lis), LastInsertPoint(BBNum) {}
47 
48 SlotIndex
49 InsertPointAnalysis::computeLastInsertPoint(const LiveInterval &CurLI,
50                                             const MachineBasicBlock &MBB) {
51   unsigned Num = MBB.getNumber();
52   std::pair<SlotIndex, SlotIndex> &LIP = LastInsertPoint[Num];
53   SlotIndex MBBEnd = LIS.getMBBEndIdx(&MBB);
54 
55   SmallVector<const MachineBasicBlock *, 1> EHPadSucessors;
56   for (const MachineBasicBlock *SMBB : MBB.successors())
57     if (SMBB->isEHPad())
58       EHPadSucessors.push_back(SMBB);
59 
60   // Compute insert points on the first call. The pair is independent of the
61   // current live interval.
62   if (!LIP.first.isValid()) {
63     MachineBasicBlock::const_iterator FirstTerm = MBB.getFirstTerminator();
64     if (FirstTerm == MBB.end())
65       LIP.first = MBBEnd;
66     else
67       LIP.first = LIS.getInstructionIndex(*FirstTerm);
68 
69     // If there is a landing pad successor, also find the call instruction.
70     if (EHPadSucessors.empty())
71       return LIP.first;
72     // There may not be a call instruction (?) in which case we ignore LPad.
73     LIP.second = LIP.first;
74     for (MachineBasicBlock::const_iterator I = MBB.end(), E = MBB.begin();
75          I != E;) {
76       --I;
77       if (I->isCall()) {
78         LIP.second = LIS.getInstructionIndex(*I);
79         break;
80       }
81     }
82   }
83 
84   // If CurLI is live into a landing pad successor, move the last insert point
85   // back to the call that may throw.
86   if (!LIP.second)
87     return LIP.first;
88 
89   if (none_of(EHPadSucessors, [&](const MachineBasicBlock *EHPad) {
90         return LIS.isLiveInToMBB(CurLI, EHPad);
91       }))
92     return LIP.first;
93 
94   // Find the value leaving MBB.
95   const VNInfo *VNI = CurLI.getVNInfoBefore(MBBEnd);
96   if (!VNI)
97     return LIP.first;
98 
99   // If the value leaving MBB was defined after the call in MBB, it can't
100   // really be live-in to the landing pad.  This can happen if the landing pad
101   // has a PHI, and this register is undef on the exceptional edge.
102   // <rdar://problem/10664933>
103   if (!SlotIndex::isEarlierInstr(VNI->def, LIP.second) && VNI->def < MBBEnd)
104     return LIP.first;
105 
106   // Value is properly live-in to the landing pad.
107   // Only allow inserts before the call.
108   return LIP.second;
109 }
110 
111 MachineBasicBlock::iterator
112 InsertPointAnalysis::getLastInsertPointIter(const LiveInterval &CurLI,
113                                             MachineBasicBlock &MBB) {
114   SlotIndex LIP = getLastInsertPoint(CurLI, MBB);
115   if (LIP == LIS.getMBBEndIdx(&MBB))
116     return MBB.end();
117   return LIS.getInstructionFromIndex(LIP);
118 }
119 
120 //===----------------------------------------------------------------------===//
121 //                                 Split Analysis
122 //===----------------------------------------------------------------------===//
123 
124 SplitAnalysis::SplitAnalysis(const VirtRegMap &vrm, const LiveIntervals &lis,
125                              const MachineLoopInfo &mli)
126     : MF(vrm.getMachineFunction()), VRM(vrm), LIS(lis), Loops(mli),
127       TII(*MF.getSubtarget().getInstrInfo()), CurLI(nullptr),
128       IPA(lis, MF.getNumBlockIDs()) {}
129 
130 void SplitAnalysis::clear() {
131   UseSlots.clear();
132   UseBlocks.clear();
133   ThroughBlocks.clear();
134   CurLI = nullptr;
135   DidRepairRange = false;
136 }
137 
138 /// analyzeUses - Count instructions, basic blocks, and loops using CurLI.
139 void SplitAnalysis::analyzeUses() {
140   assert(UseSlots.empty() && "Call clear first");
141 
142   // First get all the defs from the interval values. This provides the correct
143   // slots for early clobbers.
144   for (const VNInfo *VNI : CurLI->valnos)
145     if (!VNI->isPHIDef() && !VNI->isUnused())
146       UseSlots.push_back(VNI->def);
147 
148   // Get use slots form the use-def chain.
149   const MachineRegisterInfo &MRI = MF.getRegInfo();
150   for (MachineOperand &MO : MRI.use_nodbg_operands(CurLI->reg))
151     if (!MO.isUndef())
152       UseSlots.push_back(LIS.getInstructionIndex(*MO.getParent()).getRegSlot());
153 
154   array_pod_sort(UseSlots.begin(), UseSlots.end());
155 
156   // Remove duplicates, keeping the smaller slot for each instruction.
157   // That is what we want for early clobbers.
158   UseSlots.erase(std::unique(UseSlots.begin(), UseSlots.end(),
159                              SlotIndex::isSameInstr),
160                  UseSlots.end());
161 
162   // Compute per-live block info.
163   if (!calcLiveBlockInfo()) {
164     // FIXME: calcLiveBlockInfo found inconsistencies in the live range.
165     // I am looking at you, RegisterCoalescer!
166     DidRepairRange = true;
167     ++NumRepairs;
168     DEBUG(dbgs() << "*** Fixing inconsistent live interval! ***\n");
169     const_cast<LiveIntervals&>(LIS)
170       .shrinkToUses(const_cast<LiveInterval*>(CurLI));
171     UseBlocks.clear();
172     ThroughBlocks.clear();
173     bool fixed = calcLiveBlockInfo();
174     (void)fixed;
175     assert(fixed && "Couldn't fix broken live interval");
176   }
177 
178   DEBUG(dbgs() << "Analyze counted "
179                << UseSlots.size() << " instrs in "
180                << UseBlocks.size() << " blocks, through "
181                << NumThroughBlocks << " blocks.\n");
182 }
183 
184 /// calcLiveBlockInfo - Fill the LiveBlocks array with information about blocks
185 /// where CurLI is live.
186 bool SplitAnalysis::calcLiveBlockInfo() {
187   ThroughBlocks.resize(MF.getNumBlockIDs());
188   NumThroughBlocks = NumGapBlocks = 0;
189   if (CurLI->empty())
190     return true;
191 
192   LiveInterval::const_iterator LVI = CurLI->begin();
193   LiveInterval::const_iterator LVE = CurLI->end();
194 
195   SmallVectorImpl<SlotIndex>::const_iterator UseI, UseE;
196   UseI = UseSlots.begin();
197   UseE = UseSlots.end();
198 
199   // Loop over basic blocks where CurLI is live.
200   MachineFunction::iterator MFI =
201       LIS.getMBBFromIndex(LVI->start)->getIterator();
202   for (;;) {
203     BlockInfo BI;
204     BI.MBB = &*MFI;
205     SlotIndex Start, Stop;
206     std::tie(Start, Stop) = LIS.getSlotIndexes()->getMBBRange(BI.MBB);
207 
208     // If the block contains no uses, the range must be live through. At one
209     // point, RegisterCoalescer could create dangling ranges that ended
210     // mid-block.
211     if (UseI == UseE || *UseI >= Stop) {
212       ++NumThroughBlocks;
213       ThroughBlocks.set(BI.MBB->getNumber());
214       // The range shouldn't end mid-block if there are no uses. This shouldn't
215       // happen.
216       if (LVI->end < Stop)
217         return false;
218     } else {
219       // This block has uses. Find the first and last uses in the block.
220       BI.FirstInstr = *UseI;
221       assert(BI.FirstInstr >= Start);
222       do ++UseI;
223       while (UseI != UseE && *UseI < Stop);
224       BI.LastInstr = UseI[-1];
225       assert(BI.LastInstr < Stop);
226 
227       // LVI is the first live segment overlapping MBB.
228       BI.LiveIn = LVI->start <= Start;
229 
230       // When not live in, the first use should be a def.
231       if (!BI.LiveIn) {
232         assert(LVI->start == LVI->valno->def && "Dangling Segment start");
233         assert(LVI->start == BI.FirstInstr && "First instr should be a def");
234         BI.FirstDef = BI.FirstInstr;
235       }
236 
237       // Look for gaps in the live range.
238       BI.LiveOut = true;
239       while (LVI->end < Stop) {
240         SlotIndex LastStop = LVI->end;
241         if (++LVI == LVE || LVI->start >= Stop) {
242           BI.LiveOut = false;
243           BI.LastInstr = LastStop;
244           break;
245         }
246 
247         if (LastStop < LVI->start) {
248           // There is a gap in the live range. Create duplicate entries for the
249           // live-in snippet and the live-out snippet.
250           ++NumGapBlocks;
251 
252           // Push the Live-in part.
253           BI.LiveOut = false;
254           UseBlocks.push_back(BI);
255           UseBlocks.back().LastInstr = LastStop;
256 
257           // Set up BI for the live-out part.
258           BI.LiveIn = false;
259           BI.LiveOut = true;
260           BI.FirstInstr = BI.FirstDef = LVI->start;
261         }
262 
263         // A Segment that starts in the middle of the block must be a def.
264         assert(LVI->start == LVI->valno->def && "Dangling Segment start");
265         if (!BI.FirstDef)
266           BI.FirstDef = LVI->start;
267       }
268 
269       UseBlocks.push_back(BI);
270 
271       // LVI is now at LVE or LVI->end >= Stop.
272       if (LVI == LVE)
273         break;
274     }
275 
276     // Live segment ends exactly at Stop. Move to the next segment.
277     if (LVI->end == Stop && ++LVI == LVE)
278       break;
279 
280     // Pick the next basic block.
281     if (LVI->start < Stop)
282       ++MFI;
283     else
284       MFI = LIS.getMBBFromIndex(LVI->start)->getIterator();
285   }
286 
287   assert(getNumLiveBlocks() == countLiveBlocks(CurLI) && "Bad block count");
288   return true;
289 }
290 
291 unsigned SplitAnalysis::countLiveBlocks(const LiveInterval *cli) const {
292   if (cli->empty())
293     return 0;
294   LiveInterval *li = const_cast<LiveInterval*>(cli);
295   LiveInterval::iterator LVI = li->begin();
296   LiveInterval::iterator LVE = li->end();
297   unsigned Count = 0;
298 
299   // Loop over basic blocks where li is live.
300   MachineFunction::const_iterator MFI =
301       LIS.getMBBFromIndex(LVI->start)->getIterator();
302   SlotIndex Stop = LIS.getMBBEndIdx(&*MFI);
303   for (;;) {
304     ++Count;
305     LVI = li->advanceTo(LVI, Stop);
306     if (LVI == LVE)
307       return Count;
308     do {
309       ++MFI;
310       Stop = LIS.getMBBEndIdx(&*MFI);
311     } while (Stop <= LVI->start);
312   }
313 }
314 
315 bool SplitAnalysis::isOriginalEndpoint(SlotIndex Idx) const {
316   unsigned OrigReg = VRM.getOriginal(CurLI->reg);
317   const LiveInterval &Orig = LIS.getInterval(OrigReg);
318   assert(!Orig.empty() && "Splitting empty interval?");
319   LiveInterval::const_iterator I = Orig.find(Idx);
320 
321   // Range containing Idx should begin at Idx.
322   if (I != Orig.end() && I->start <= Idx)
323     return I->start == Idx;
324 
325   // Range does not contain Idx, previous must end at Idx.
326   return I != Orig.begin() && (--I)->end == Idx;
327 }
328 
329 void SplitAnalysis::analyze(const LiveInterval *li) {
330   clear();
331   CurLI = li;
332   analyzeUses();
333 }
334 
335 
336 //===----------------------------------------------------------------------===//
337 //                               Split Editor
338 //===----------------------------------------------------------------------===//
339 
340 /// Create a new SplitEditor for editing the LiveInterval analyzed by SA.
341 SplitEditor::SplitEditor(SplitAnalysis &sa, AliasAnalysis &aa,
342                          LiveIntervals &lis, VirtRegMap &vrm,
343                          MachineDominatorTree &mdt,
344                          MachineBlockFrequencyInfo &mbfi)
345     : SA(sa), AA(aa), LIS(lis), VRM(vrm),
346       MRI(vrm.getMachineFunction().getRegInfo()), MDT(mdt),
347       TII(*vrm.getMachineFunction().getSubtarget().getInstrInfo()),
348       TRI(*vrm.getMachineFunction().getSubtarget().getRegisterInfo()),
349       MBFI(mbfi), Edit(nullptr), OpenIdx(0), SpillMode(SM_Partition),
350       RegAssign(Allocator) {}
351 
352 void SplitEditor::reset(LiveRangeEdit &LRE, ComplementSpillMode SM) {
353   Edit = &LRE;
354   SpillMode = SM;
355   OpenIdx = 0;
356   RegAssign.clear();
357   Values.clear();
358 
359   // Reset the LiveRangeCalc instances needed for this spill mode.
360   LRCalc[0].reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT,
361                   &LIS.getVNInfoAllocator());
362   if (SpillMode)
363     LRCalc[1].reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT,
364                     &LIS.getVNInfoAllocator());
365 
366   // We don't need an AliasAnalysis since we will only be performing
367   // cheap-as-a-copy remats anyway.
368   Edit->anyRematerializable(nullptr);
369 }
370 
371 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
372 LLVM_DUMP_METHOD void SplitEditor::dump() const {
373   if (RegAssign.empty()) {
374     dbgs() << " empty\n";
375     return;
376   }
377 
378   for (RegAssignMap::const_iterator I = RegAssign.begin(); I.valid(); ++I)
379     dbgs() << " [" << I.start() << ';' << I.stop() << "):" << I.value();
380   dbgs() << '\n';
381 }
382 #endif
383 
384 LiveInterval::SubRange &SplitEditor::getSubRangeForMask(LaneBitmask LM,
385                                                         LiveInterval &LI) {
386   for (LiveInterval::SubRange &S : LI.subranges())
387     if (S.LaneMask == LM)
388       return S;
389   llvm_unreachable("SubRange for this mask not found");
390 }
391 
392 void SplitEditor::addDeadDef(LiveInterval &LI, VNInfo *VNI, bool Original) {
393   if (!LI.hasSubRanges()) {
394     LI.createDeadDef(VNI);
395     return;
396   }
397 
398   SlotIndex Def = VNI->def;
399   if (Original) {
400     // If we are transferring a def from the original interval, make sure
401     // to only update the subranges for which the original subranges had
402     // a def at this location.
403     for (LiveInterval::SubRange &S : LI.subranges()) {
404       auto &PS = getSubRangeForMask(S.LaneMask, Edit->getParent());
405       VNInfo *PV = PS.getVNInfoAt(Def);
406       if (PV != nullptr && PV->def == Def)
407         S.createDeadDef(Def, LIS.getVNInfoAllocator());
408     }
409   } else {
410     // This is a new def: either from rematerialization, or from an inserted
411     // copy. Since rematerialization can regenerate a definition of a sub-
412     // register, we need to check which subranges need to be updated.
413     const MachineInstr *DefMI = LIS.getInstructionFromIndex(Def);
414     assert(DefMI != nullptr);
415     LaneBitmask LM;
416     for (const MachineOperand &DefOp : DefMI->defs()) {
417       unsigned R = DefOp.getReg();
418       if (R != LI.reg)
419         continue;
420       if (unsigned SR = DefOp.getSubReg())
421         LM |= TRI.getSubRegIndexLaneMask(SR);
422       else {
423         LM = MRI.getMaxLaneMaskForVReg(R);
424         break;
425       }
426     }
427     for (LiveInterval::SubRange &S : LI.subranges())
428       if ((S.LaneMask & LM).any())
429         S.createDeadDef(Def, LIS.getVNInfoAllocator());
430   }
431 }
432 
433 VNInfo *SplitEditor::defValue(unsigned RegIdx,
434                               const VNInfo *ParentVNI,
435                               SlotIndex Idx,
436                               bool Original) {
437   assert(ParentVNI && "Mapping  NULL value");
438   assert(Idx.isValid() && "Invalid SlotIndex");
439   assert(Edit->getParent().getVNInfoAt(Idx) == ParentVNI && "Bad Parent VNI");
440   LiveInterval *LI = &LIS.getInterval(Edit->get(RegIdx));
441 
442   // Create a new value.
443   VNInfo *VNI = LI->getNextValue(Idx, LIS.getVNInfoAllocator());
444 
445   bool Force = LI->hasSubRanges();
446   ValueForcePair FP(Force ? nullptr : VNI, Force);
447   // Use insert for lookup, so we can add missing values with a second lookup.
448   std::pair<ValueMap::iterator, bool> InsP =
449     Values.insert(std::make_pair(std::make_pair(RegIdx, ParentVNI->id), FP));
450 
451   // This was the first time (RegIdx, ParentVNI) was mapped, and it is not
452   // forced. Keep it as a simple def without any liveness.
453   if (!Force && InsP.second)
454     return VNI;
455 
456   // If the previous value was a simple mapping, add liveness for it now.
457   if (VNInfo *OldVNI = InsP.first->second.getPointer()) {
458     addDeadDef(*LI, OldVNI, Original);
459 
460     // No longer a simple mapping.  Switch to a complex mapping. If the
461     // interval has subranges, make it a forced mapping.
462     InsP.first->second = ValueForcePair(nullptr, Force);
463   }
464 
465   // This is a complex mapping, add liveness for VNI
466   addDeadDef(*LI, VNI, Original);
467   return VNI;
468 }
469 
470 void SplitEditor::forceRecompute(unsigned RegIdx, const VNInfo *ParentVNI) {
471   assert(ParentVNI && "Mapping  NULL value");
472   ValueForcePair &VFP = Values[std::make_pair(RegIdx, ParentVNI->id)];
473   VNInfo *VNI = VFP.getPointer();
474 
475   // ParentVNI was either unmapped or already complex mapped. Either way, just
476   // set the force bit.
477   if (!VNI) {
478     VFP.setInt(true);
479     return;
480   }
481 
482   // This was previously a single mapping. Make sure the old def is represented
483   // by a trivial live range.
484   addDeadDef(LIS.getInterval(Edit->get(RegIdx)), VNI, false);
485 
486   // Mark as complex mapped, forced.
487   VFP = ValueForcePair(nullptr, true);
488 }
489 
490 VNInfo *SplitEditor::defFromParent(unsigned RegIdx,
491                                    VNInfo *ParentVNI,
492                                    SlotIndex UseIdx,
493                                    MachineBasicBlock &MBB,
494                                    MachineBasicBlock::iterator I) {
495   MachineInstr *CopyMI = nullptr;
496   SlotIndex Def;
497   LiveInterval *LI = &LIS.getInterval(Edit->get(RegIdx));
498 
499   // We may be trying to avoid interference that ends at a deleted instruction,
500   // so always begin RegIdx 0 early and all others late.
501   bool Late = RegIdx != 0;
502 
503   // Attempt cheap-as-a-copy rematerialization.
504   unsigned Original = VRM.getOriginal(Edit->get(RegIdx));
505   LiveInterval &OrigLI = LIS.getInterval(Original);
506   VNInfo *OrigVNI = OrigLI.getVNInfoAt(UseIdx);
507 
508   bool DidRemat = false;
509   if (OrigVNI) {
510     LiveRangeEdit::Remat RM(ParentVNI);
511     RM.OrigMI = LIS.getInstructionFromIndex(OrigVNI->def);
512     if (Edit->canRematerializeAt(RM, OrigVNI, UseIdx, true)) {
513       Def = Edit->rematerializeAt(MBB, I, LI->reg, RM, TRI, Late);
514       ++NumRemats;
515       DidRemat = true;
516     }
517   }
518   if (!DidRemat) {
519     // Can't remat, just insert a copy from parent.
520     CopyMI = BuildMI(MBB, I, DebugLoc(), TII.get(TargetOpcode::COPY), LI->reg)
521                .addReg(Edit->getReg());
522     Def = LIS.getSlotIndexes()
523               ->insertMachineInstrInMaps(*CopyMI, Late)
524               .getRegSlot();
525     if (LI->hasSubRanges()) {
526       LaneBitmask LM = LaneBitmask::getNone();
527       for (LiveInterval::SubRange &S : LI->subranges())
528         LM |= S.LaneMask;
529 
530       if (MRI.getMaxLaneMaskForVReg(LI->reg) != LM) {
531         // Find subreg for the lane mask.
532         unsigned SubIdx = 0;
533         for (unsigned I = 1, E = TRI.getNumSubRegIndices(); I < E; ++I) {
534           if (TRI.getSubRegIndexLaneMask(I) == LM) {
535             SubIdx = I;
536             break;
537           }
538         }
539         if (SubIdx == 0)
540           report_fatal_error("Cannot find subreg index to cover all alive lanes");
541         CopyMI->getOperand(0).setSubReg(SubIdx);
542         CopyMI->getOperand(1).setSubReg(SubIdx);
543         CopyMI->getOperand(0).setIsUndef(true);
544       }
545     }
546     ++NumCopies;
547   }
548 
549   // Define the value in Reg.
550   return defValue(RegIdx, ParentVNI, Def, false);
551 }
552 
553 /// Create a new virtual register and live interval.
554 unsigned SplitEditor::openIntv() {
555   // Create the complement as index 0.
556   if (Edit->empty())
557     Edit->createEmptyInterval();
558 
559   // Create the open interval.
560   OpenIdx = Edit->size();
561   Edit->createEmptyInterval();
562   return OpenIdx;
563 }
564 
565 void SplitEditor::selectIntv(unsigned Idx) {
566   assert(Idx != 0 && "Cannot select the complement interval");
567   assert(Idx < Edit->size() && "Can only select previously opened interval");
568   DEBUG(dbgs() << "    selectIntv " << OpenIdx << " -> " << Idx << '\n');
569   OpenIdx = Idx;
570 }
571 
572 SlotIndex SplitEditor::enterIntvBefore(SlotIndex Idx) {
573   assert(OpenIdx && "openIntv not called before enterIntvBefore");
574   DEBUG(dbgs() << "    enterIntvBefore " << Idx);
575   Idx = Idx.getBaseIndex();
576   VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(Idx);
577   if (!ParentVNI) {
578     DEBUG(dbgs() << ": not live\n");
579     return Idx;
580   }
581   DEBUG(dbgs() << ": valno " << ParentVNI->id << '\n');
582   MachineInstr *MI = LIS.getInstructionFromIndex(Idx);
583   assert(MI && "enterIntvBefore called with invalid index");
584 
585   VNInfo *VNI = defFromParent(OpenIdx, ParentVNI, Idx, *MI->getParent(), MI);
586   return VNI->def;
587 }
588 
589 SlotIndex SplitEditor::enterIntvAfter(SlotIndex Idx) {
590   assert(OpenIdx && "openIntv not called before enterIntvAfter");
591   DEBUG(dbgs() << "    enterIntvAfter " << Idx);
592   Idx = Idx.getBoundaryIndex();
593   VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(Idx);
594   if (!ParentVNI) {
595     DEBUG(dbgs() << ": not live\n");
596     return Idx;
597   }
598   DEBUG(dbgs() << ": valno " << ParentVNI->id << '\n');
599   MachineInstr *MI = LIS.getInstructionFromIndex(Idx);
600   assert(MI && "enterIntvAfter called with invalid index");
601 
602   VNInfo *VNI = defFromParent(OpenIdx, ParentVNI, Idx, *MI->getParent(),
603                               std::next(MachineBasicBlock::iterator(MI)));
604   return VNI->def;
605 }
606 
607 SlotIndex SplitEditor::enterIntvAtEnd(MachineBasicBlock &MBB) {
608   assert(OpenIdx && "openIntv not called before enterIntvAtEnd");
609   SlotIndex End = LIS.getMBBEndIdx(&MBB);
610   SlotIndex Last = End.getPrevSlot();
611   DEBUG(dbgs() << "    enterIntvAtEnd BB#" << MBB.getNumber() << ", " << Last);
612   VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(Last);
613   if (!ParentVNI) {
614     DEBUG(dbgs() << ": not live\n");
615     return End;
616   }
617   DEBUG(dbgs() << ": valno " << ParentVNI->id);
618   VNInfo *VNI = defFromParent(OpenIdx, ParentVNI, Last, MBB,
619                               SA.getLastSplitPointIter(&MBB));
620   RegAssign.insert(VNI->def, End, OpenIdx);
621   DEBUG(dump());
622   return VNI->def;
623 }
624 
625 /// useIntv - indicate that all instructions in MBB should use OpenLI.
626 void SplitEditor::useIntv(const MachineBasicBlock &MBB) {
627   useIntv(LIS.getMBBStartIdx(&MBB), LIS.getMBBEndIdx(&MBB));
628 }
629 
630 void SplitEditor::useIntv(SlotIndex Start, SlotIndex End) {
631   assert(OpenIdx && "openIntv not called before useIntv");
632   DEBUG(dbgs() << "    useIntv [" << Start << ';' << End << "):");
633   RegAssign.insert(Start, End, OpenIdx);
634   DEBUG(dump());
635 }
636 
637 SlotIndex SplitEditor::leaveIntvAfter(SlotIndex Idx) {
638   assert(OpenIdx && "openIntv not called before leaveIntvAfter");
639   DEBUG(dbgs() << "    leaveIntvAfter " << Idx);
640 
641   // The interval must be live beyond the instruction at Idx.
642   SlotIndex Boundary = Idx.getBoundaryIndex();
643   VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(Boundary);
644   if (!ParentVNI) {
645     DEBUG(dbgs() << ": not live\n");
646     return Boundary.getNextSlot();
647   }
648   DEBUG(dbgs() << ": valno " << ParentVNI->id << '\n');
649   MachineInstr *MI = LIS.getInstructionFromIndex(Boundary);
650   assert(MI && "No instruction at index");
651 
652   // In spill mode, make live ranges as short as possible by inserting the copy
653   // before MI.  This is only possible if that instruction doesn't redefine the
654   // value.  The inserted COPY is not a kill, and we don't need to recompute
655   // the source live range.  The spiller also won't try to hoist this copy.
656   if (SpillMode && !SlotIndex::isSameInstr(ParentVNI->def, Idx) &&
657       MI->readsVirtualRegister(Edit->getReg())) {
658     forceRecompute(0, ParentVNI);
659     defFromParent(0, ParentVNI, Idx, *MI->getParent(), MI);
660     return Idx;
661   }
662 
663   VNInfo *VNI = defFromParent(0, ParentVNI, Boundary, *MI->getParent(),
664                               std::next(MachineBasicBlock::iterator(MI)));
665   return VNI->def;
666 }
667 
668 SlotIndex SplitEditor::leaveIntvBefore(SlotIndex Idx) {
669   assert(OpenIdx && "openIntv not called before leaveIntvBefore");
670   DEBUG(dbgs() << "    leaveIntvBefore " << Idx);
671 
672   // The interval must be live into the instruction at Idx.
673   Idx = Idx.getBaseIndex();
674   VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(Idx);
675   if (!ParentVNI) {
676     DEBUG(dbgs() << ": not live\n");
677     return Idx.getNextSlot();
678   }
679   DEBUG(dbgs() << ": valno " << ParentVNI->id << '\n');
680 
681   MachineInstr *MI = LIS.getInstructionFromIndex(Idx);
682   assert(MI && "No instruction at index");
683   VNInfo *VNI = defFromParent(0, ParentVNI, Idx, *MI->getParent(), MI);
684   return VNI->def;
685 }
686 
687 SlotIndex SplitEditor::leaveIntvAtTop(MachineBasicBlock &MBB) {
688   assert(OpenIdx && "openIntv not called before leaveIntvAtTop");
689   SlotIndex Start = LIS.getMBBStartIdx(&MBB);
690   DEBUG(dbgs() << "    leaveIntvAtTop BB#" << MBB.getNumber() << ", " << Start);
691 
692   VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(Start);
693   if (!ParentVNI) {
694     DEBUG(dbgs() << ": not live\n");
695     return Start;
696   }
697 
698   VNInfo *VNI = defFromParent(0, ParentVNI, Start, MBB,
699                               MBB.SkipPHIsLabelsAndDebug(MBB.begin()));
700   RegAssign.insert(Start, VNI->def, OpenIdx);
701   DEBUG(dump());
702   return VNI->def;
703 }
704 
705 void SplitEditor::overlapIntv(SlotIndex Start, SlotIndex End) {
706   assert(OpenIdx && "openIntv not called before overlapIntv");
707   const VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(Start);
708   assert(ParentVNI == Edit->getParent().getVNInfoBefore(End) &&
709          "Parent changes value in extended range");
710   assert(LIS.getMBBFromIndex(Start) == LIS.getMBBFromIndex(End) &&
711          "Range cannot span basic blocks");
712 
713   // The complement interval will be extended as needed by LRCalc.extend().
714   if (ParentVNI)
715     forceRecompute(0, ParentVNI);
716   DEBUG(dbgs() << "    overlapIntv [" << Start << ';' << End << "):");
717   RegAssign.insert(Start, End, OpenIdx);
718   DEBUG(dump());
719 }
720 
721 //===----------------------------------------------------------------------===//
722 //                                  Spill modes
723 //===----------------------------------------------------------------------===//
724 
725 void SplitEditor::removeBackCopies(SmallVectorImpl<VNInfo*> &Copies) {
726   LiveInterval *LI = &LIS.getInterval(Edit->get(0));
727   DEBUG(dbgs() << "Removing " << Copies.size() << " back-copies.\n");
728   RegAssignMap::iterator AssignI;
729   AssignI.setMap(RegAssign);
730 
731   for (unsigned i = 0, e = Copies.size(); i != e; ++i) {
732     SlotIndex Def = Copies[i]->def;
733     MachineInstr *MI = LIS.getInstructionFromIndex(Def);
734     assert(MI && "No instruction for back-copy");
735 
736     MachineBasicBlock *MBB = MI->getParent();
737     MachineBasicBlock::iterator MBBI(MI);
738     bool AtBegin;
739     do AtBegin = MBBI == MBB->begin();
740     while (!AtBegin && (--MBBI)->isDebugValue());
741 
742     DEBUG(dbgs() << "Removing " << Def << '\t' << *MI);
743     LIS.removeVRegDefAt(*LI, Def);
744     LIS.RemoveMachineInstrFromMaps(*MI);
745     MI->eraseFromParent();
746 
747     // Adjust RegAssign if a register assignment is killed at Def. We want to
748     // avoid calculating the live range of the source register if possible.
749     AssignI.find(Def.getPrevSlot());
750     if (!AssignI.valid() || AssignI.start() >= Def)
751       continue;
752     // If MI doesn't kill the assigned register, just leave it.
753     if (AssignI.stop() != Def)
754       continue;
755     unsigned RegIdx = AssignI.value();
756     if (AtBegin || !MBBI->readsVirtualRegister(Edit->getReg())) {
757       DEBUG(dbgs() << "  cannot find simple kill of RegIdx " << RegIdx << '\n');
758       forceRecompute(RegIdx, Edit->getParent().getVNInfoAt(Def));
759     } else {
760       SlotIndex Kill = LIS.getInstructionIndex(*MBBI).getRegSlot();
761       DEBUG(dbgs() << "  move kill to " << Kill << '\t' << *MBBI);
762       AssignI.setStop(Kill);
763     }
764   }
765 }
766 
767 MachineBasicBlock*
768 SplitEditor::findShallowDominator(MachineBasicBlock *MBB,
769                                   MachineBasicBlock *DefMBB) {
770   if (MBB == DefMBB)
771     return MBB;
772   assert(MDT.dominates(DefMBB, MBB) && "MBB must be dominated by the def.");
773 
774   const MachineLoopInfo &Loops = SA.Loops;
775   const MachineLoop *DefLoop = Loops.getLoopFor(DefMBB);
776   MachineDomTreeNode *DefDomNode = MDT[DefMBB];
777 
778   // Best candidate so far.
779   MachineBasicBlock *BestMBB = MBB;
780   unsigned BestDepth = UINT_MAX;
781 
782   for (;;) {
783     const MachineLoop *Loop = Loops.getLoopFor(MBB);
784 
785     // MBB isn't in a loop, it doesn't get any better.  All dominators have a
786     // higher frequency by definition.
787     if (!Loop) {
788       DEBUG(dbgs() << "Def in BB#" << DefMBB->getNumber() << " dominates BB#"
789                    << MBB->getNumber() << " at depth 0\n");
790       return MBB;
791     }
792 
793     // We'll never be able to exit the DefLoop.
794     if (Loop == DefLoop) {
795       DEBUG(dbgs() << "Def in BB#" << DefMBB->getNumber() << " dominates BB#"
796                    << MBB->getNumber() << " in the same loop\n");
797       return MBB;
798     }
799 
800     // Least busy dominator seen so far.
801     unsigned Depth = Loop->getLoopDepth();
802     if (Depth < BestDepth) {
803       BestMBB = MBB;
804       BestDepth = Depth;
805       DEBUG(dbgs() << "Def in BB#" << DefMBB->getNumber() << " dominates BB#"
806                    << MBB->getNumber() << " at depth " << Depth << '\n');
807     }
808 
809     // Leave loop by going to the immediate dominator of the loop header.
810     // This is a bigger stride than simply walking up the dominator tree.
811     MachineDomTreeNode *IDom = MDT[Loop->getHeader()]->getIDom();
812 
813     // Too far up the dominator tree?
814     if (!IDom || !MDT.dominates(DefDomNode, IDom))
815       return BestMBB;
816 
817     MBB = IDom->getBlock();
818   }
819 }
820 
821 void SplitEditor::computeRedundantBackCopies(
822     DenseSet<unsigned> &NotToHoistSet, SmallVectorImpl<VNInfo *> &BackCopies) {
823   LiveInterval *LI = &LIS.getInterval(Edit->get(0));
824   LiveInterval *Parent = &Edit->getParent();
825   SmallVector<SmallPtrSet<VNInfo *, 8>, 8> EqualVNs(Parent->getNumValNums());
826   SmallPtrSet<VNInfo *, 8> DominatedVNIs;
827 
828   // Aggregate VNIs having the same value as ParentVNI.
829   for (VNInfo *VNI : LI->valnos) {
830     if (VNI->isUnused())
831       continue;
832     VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(VNI->def);
833     EqualVNs[ParentVNI->id].insert(VNI);
834   }
835 
836   // For VNI aggregation of each ParentVNI, collect dominated, i.e.,
837   // redundant VNIs to BackCopies.
838   for (unsigned i = 0, e = Parent->getNumValNums(); i != e; ++i) {
839     VNInfo *ParentVNI = Parent->getValNumInfo(i);
840     if (!NotToHoistSet.count(ParentVNI->id))
841       continue;
842     SmallPtrSetIterator<VNInfo *> It1 = EqualVNs[ParentVNI->id].begin();
843     SmallPtrSetIterator<VNInfo *> It2 = It1;
844     for (; It1 != EqualVNs[ParentVNI->id].end(); ++It1) {
845       It2 = It1;
846       for (++It2; It2 != EqualVNs[ParentVNI->id].end(); ++It2) {
847         if (DominatedVNIs.count(*It1) || DominatedVNIs.count(*It2))
848           continue;
849 
850         MachineBasicBlock *MBB1 = LIS.getMBBFromIndex((*It1)->def);
851         MachineBasicBlock *MBB2 = LIS.getMBBFromIndex((*It2)->def);
852         if (MBB1 == MBB2) {
853           DominatedVNIs.insert((*It1)->def < (*It2)->def ? (*It2) : (*It1));
854         } else if (MDT.dominates(MBB1, MBB2)) {
855           DominatedVNIs.insert(*It2);
856         } else if (MDT.dominates(MBB2, MBB1)) {
857           DominatedVNIs.insert(*It1);
858         }
859       }
860     }
861     if (!DominatedVNIs.empty()) {
862       forceRecompute(0, ParentVNI);
863       for (auto VNI : DominatedVNIs) {
864         BackCopies.push_back(VNI);
865       }
866       DominatedVNIs.clear();
867     }
868   }
869 }
870 
871 /// For SM_Size mode, find a common dominator for all the back-copies for
872 /// the same ParentVNI and hoist the backcopies to the dominator BB.
873 /// For SM_Speed mode, if the common dominator is hot and it is not beneficial
874 /// to do the hoisting, simply remove the dominated backcopies for the same
875 /// ParentVNI.
876 void SplitEditor::hoistCopies() {
877   // Get the complement interval, always RegIdx 0.
878   LiveInterval *LI = &LIS.getInterval(Edit->get(0));
879   LiveInterval *Parent = &Edit->getParent();
880 
881   // Track the nearest common dominator for all back-copies for each ParentVNI,
882   // indexed by ParentVNI->id.
883   typedef std::pair<MachineBasicBlock*, SlotIndex> DomPair;
884   SmallVector<DomPair, 8> NearestDom(Parent->getNumValNums());
885   // The total cost of all the back-copies for each ParentVNI.
886   SmallVector<BlockFrequency, 8> Costs(Parent->getNumValNums());
887   // The ParentVNI->id set for which hoisting back-copies are not beneficial
888   // for Speed.
889   DenseSet<unsigned> NotToHoistSet;
890 
891   // Find the nearest common dominator for parent values with multiple
892   // back-copies.  If a single back-copy dominates, put it in DomPair.second.
893   for (VNInfo *VNI : LI->valnos) {
894     if (VNI->isUnused())
895       continue;
896     VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(VNI->def);
897     assert(ParentVNI && "Parent not live at complement def");
898 
899     // Don't hoist remats.  The complement is probably going to disappear
900     // completely anyway.
901     if (Edit->didRematerialize(ParentVNI))
902       continue;
903 
904     MachineBasicBlock *ValMBB = LIS.getMBBFromIndex(VNI->def);
905 
906     DomPair &Dom = NearestDom[ParentVNI->id];
907 
908     // Keep directly defined parent values.  This is either a PHI or an
909     // instruction in the complement range.  All other copies of ParentVNI
910     // should be eliminated.
911     if (VNI->def == ParentVNI->def) {
912       DEBUG(dbgs() << "Direct complement def at " << VNI->def << '\n');
913       Dom = DomPair(ValMBB, VNI->def);
914       continue;
915     }
916     // Skip the singly mapped values.  There is nothing to gain from hoisting a
917     // single back-copy.
918     if (Values.lookup(std::make_pair(0, ParentVNI->id)).getPointer()) {
919       DEBUG(dbgs() << "Single complement def at " << VNI->def << '\n');
920       continue;
921     }
922 
923     if (!Dom.first) {
924       // First time we see ParentVNI.  VNI dominates itself.
925       Dom = DomPair(ValMBB, VNI->def);
926     } else if (Dom.first == ValMBB) {
927       // Two defs in the same block.  Pick the earlier def.
928       if (!Dom.second.isValid() || VNI->def < Dom.second)
929         Dom.second = VNI->def;
930     } else {
931       // Different basic blocks. Check if one dominates.
932       MachineBasicBlock *Near =
933         MDT.findNearestCommonDominator(Dom.first, ValMBB);
934       if (Near == ValMBB)
935         // Def ValMBB dominates.
936         Dom = DomPair(ValMBB, VNI->def);
937       else if (Near != Dom.first)
938         // None dominate. Hoist to common dominator, need new def.
939         Dom = DomPair(Near, SlotIndex());
940       Costs[ParentVNI->id] += MBFI.getBlockFreq(ValMBB);
941     }
942 
943     DEBUG(dbgs() << "Multi-mapped complement " << VNI->id << '@' << VNI->def
944                  << " for parent " << ParentVNI->id << '@' << ParentVNI->def
945                  << " hoist to BB#" << Dom.first->getNumber() << ' '
946                  << Dom.second << '\n');
947   }
948 
949   // Insert the hoisted copies.
950   for (unsigned i = 0, e = Parent->getNumValNums(); i != e; ++i) {
951     DomPair &Dom = NearestDom[i];
952     if (!Dom.first || Dom.second.isValid())
953       continue;
954     // This value needs a hoisted copy inserted at the end of Dom.first.
955     VNInfo *ParentVNI = Parent->getValNumInfo(i);
956     MachineBasicBlock *DefMBB = LIS.getMBBFromIndex(ParentVNI->def);
957     // Get a less loopy dominator than Dom.first.
958     Dom.first = findShallowDominator(Dom.first, DefMBB);
959     if (SpillMode == SM_Speed &&
960         MBFI.getBlockFreq(Dom.first) > Costs[ParentVNI->id]) {
961       NotToHoistSet.insert(ParentVNI->id);
962       continue;
963     }
964     SlotIndex Last = LIS.getMBBEndIdx(Dom.first).getPrevSlot();
965     Dom.second =
966       defFromParent(0, ParentVNI, Last, *Dom.first,
967                     SA.getLastSplitPointIter(Dom.first))->def;
968   }
969 
970   // Remove redundant back-copies that are now known to be dominated by another
971   // def with the same value.
972   SmallVector<VNInfo*, 8> BackCopies;
973   for (VNInfo *VNI : LI->valnos) {
974     if (VNI->isUnused())
975       continue;
976     VNInfo *ParentVNI = Edit->getParent().getVNInfoAt(VNI->def);
977     const DomPair &Dom = NearestDom[ParentVNI->id];
978     if (!Dom.first || Dom.second == VNI->def ||
979         NotToHoistSet.count(ParentVNI->id))
980       continue;
981     BackCopies.push_back(VNI);
982     forceRecompute(0, ParentVNI);
983   }
984 
985   // If it is not beneficial to hoist all the BackCopies, simply remove
986   // redundant BackCopies in speed mode.
987   if (SpillMode == SM_Speed && !NotToHoistSet.empty())
988     computeRedundantBackCopies(NotToHoistSet, BackCopies);
989 
990   removeBackCopies(BackCopies);
991 }
992 
993 
994 /// transferValues - Transfer all possible values to the new live ranges.
995 /// Values that were rematerialized are left alone, they need LRCalc.extend().
996 bool SplitEditor::transferValues() {
997   bool Skipped = false;
998   RegAssignMap::const_iterator AssignI = RegAssign.begin();
999   for (const LiveRange::Segment &S : Edit->getParent()) {
1000     DEBUG(dbgs() << "  blit " << S << ':');
1001     VNInfo *ParentVNI = S.valno;
1002     // RegAssign has holes where RegIdx 0 should be used.
1003     SlotIndex Start = S.start;
1004     AssignI.advanceTo(Start);
1005     do {
1006       unsigned RegIdx;
1007       SlotIndex End = S.end;
1008       if (!AssignI.valid()) {
1009         RegIdx = 0;
1010       } else if (AssignI.start() <= Start) {
1011         RegIdx = AssignI.value();
1012         if (AssignI.stop() < End) {
1013           End = AssignI.stop();
1014           ++AssignI;
1015         }
1016       } else {
1017         RegIdx = 0;
1018         End = std::min(End, AssignI.start());
1019       }
1020 
1021       // The interval [Start;End) is continuously mapped to RegIdx, ParentVNI.
1022       DEBUG(dbgs() << " [" << Start << ';' << End << ")=" << RegIdx
1023                    << '(' << PrintReg(Edit->get(RegIdx)) << ')');
1024       LiveInterval &LI = LIS.getInterval(Edit->get(RegIdx));
1025 
1026       // Check for a simply defined value that can be blitted directly.
1027       ValueForcePair VFP = Values.lookup(std::make_pair(RegIdx, ParentVNI->id));
1028       if (VNInfo *VNI = VFP.getPointer()) {
1029         DEBUG(dbgs() << ':' << VNI->id);
1030         LI.addSegment(LiveInterval::Segment(Start, End, VNI));
1031         Start = End;
1032         continue;
1033       }
1034 
1035       // Skip values with forced recomputation.
1036       if (VFP.getInt()) {
1037         DEBUG(dbgs() << "(recalc)");
1038         Skipped = true;
1039         Start = End;
1040         continue;
1041       }
1042 
1043       LiveRangeCalc &LRC = getLRCalc(RegIdx);
1044 
1045       // This value has multiple defs in RegIdx, but it wasn't rematerialized,
1046       // so the live range is accurate. Add live-in blocks in [Start;End) to the
1047       // LiveInBlocks.
1048       MachineFunction::iterator MBB = LIS.getMBBFromIndex(Start)->getIterator();
1049       SlotIndex BlockStart, BlockEnd;
1050       std::tie(BlockStart, BlockEnd) = LIS.getSlotIndexes()->getMBBRange(&*MBB);
1051 
1052       // The first block may be live-in, or it may have its own def.
1053       if (Start != BlockStart) {
1054         VNInfo *VNI = LI.extendInBlock(BlockStart, std::min(BlockEnd, End));
1055         assert(VNI && "Missing def for complex mapped value");
1056         DEBUG(dbgs() << ':' << VNI->id << "*BB#" << MBB->getNumber());
1057         // MBB has its own def. Is it also live-out?
1058         if (BlockEnd <= End)
1059           LRC.setLiveOutValue(&*MBB, VNI);
1060 
1061         // Skip to the next block for live-in.
1062         ++MBB;
1063         BlockStart = BlockEnd;
1064       }
1065 
1066       // Handle the live-in blocks covered by [Start;End).
1067       assert(Start <= BlockStart && "Expected live-in block");
1068       while (BlockStart < End) {
1069         DEBUG(dbgs() << ">BB#" << MBB->getNumber());
1070         BlockEnd = LIS.getMBBEndIdx(&*MBB);
1071         if (BlockStart == ParentVNI->def) {
1072           // This block has the def of a parent PHI, so it isn't live-in.
1073           assert(ParentVNI->isPHIDef() && "Non-phi defined at block start?");
1074           VNInfo *VNI = LI.extendInBlock(BlockStart, std::min(BlockEnd, End));
1075           assert(VNI && "Missing def for complex mapped parent PHI");
1076           if (End >= BlockEnd)
1077             LRC.setLiveOutValue(&*MBB, VNI); // Live-out as well.
1078         } else {
1079           // This block needs a live-in value.  The last block covered may not
1080           // be live-out.
1081           if (End < BlockEnd)
1082             LRC.addLiveInBlock(LI, MDT[&*MBB], End);
1083           else {
1084             // Live-through, and we don't know the value.
1085             LRC.addLiveInBlock(LI, MDT[&*MBB]);
1086             LRC.setLiveOutValue(&*MBB, nullptr);
1087           }
1088         }
1089         BlockStart = BlockEnd;
1090         ++MBB;
1091       }
1092       Start = End;
1093     } while (Start != S.end);
1094     DEBUG(dbgs() << '\n');
1095   }
1096 
1097   LRCalc[0].calculateValues();
1098   if (SpillMode)
1099     LRCalc[1].calculateValues();
1100 
1101   return Skipped;
1102 }
1103 
1104 static bool removeDeadSegment(SlotIndex Def, LiveRange &LR) {
1105   const LiveRange::Segment *Seg = LR.getSegmentContaining(Def);
1106   if (Seg == nullptr)
1107     return true;
1108   if (Seg->end != Def.getDeadSlot())
1109     return false;
1110   // This is a dead PHI. Remove it.
1111   LR.removeSegment(*Seg, true);
1112   return true;
1113 }
1114 
1115 void SplitEditor::extendPHIRange(MachineBasicBlock &B, LiveRangeCalc &LRC,
1116                                  LiveRange &LR, LaneBitmask LM,
1117                                  ArrayRef<SlotIndex> Undefs) {
1118   for (MachineBasicBlock *P : B.predecessors()) {
1119     SlotIndex End = LIS.getMBBEndIdx(P);
1120     SlotIndex LastUse = End.getPrevSlot();
1121     // The predecessor may not have a live-out value. That is OK, like an
1122     // undef PHI operand.
1123     LiveInterval &PLI = Edit->getParent();
1124     // Need the cast because the inputs to ?: would otherwise be deemed
1125     // "incompatible": SubRange vs LiveInterval.
1126     LiveRange &PSR = !LM.all() ? getSubRangeForMask(LM, PLI)
1127                                : static_cast<LiveRange&>(PLI);
1128     if (PSR.liveAt(LastUse))
1129       LRC.extend(LR, End, /*PhysReg=*/0, Undefs);
1130   }
1131 }
1132 
1133 void SplitEditor::extendPHIKillRanges() {
1134   // Extend live ranges to be live-out for successor PHI values.
1135 
1136   // Visit each PHI def slot in the parent live interval. If the def is dead,
1137   // remove it. Otherwise, extend the live interval to reach the end indexes
1138   // of all predecessor blocks.
1139 
1140   LiveInterval &ParentLI = Edit->getParent();
1141   for (const VNInfo *V : ParentLI.valnos) {
1142     if (V->isUnused() || !V->isPHIDef())
1143       continue;
1144 
1145     unsigned RegIdx = RegAssign.lookup(V->def);
1146     LiveInterval &LI = LIS.getInterval(Edit->get(RegIdx));
1147     LiveRangeCalc &LRC = getLRCalc(RegIdx);
1148     MachineBasicBlock &B = *LIS.getMBBFromIndex(V->def);
1149     if (!removeDeadSegment(V->def, LI))
1150       extendPHIRange(B, LRC, LI, LaneBitmask::getAll(), /*Undefs=*/{});
1151   }
1152 
1153   SmallVector<SlotIndex, 4> Undefs;
1154   LiveRangeCalc SubLRC;
1155 
1156   for (LiveInterval::SubRange &PS : ParentLI.subranges()) {
1157     for (const VNInfo *V : PS.valnos) {
1158       if (V->isUnused() || !V->isPHIDef())
1159         continue;
1160       unsigned RegIdx = RegAssign.lookup(V->def);
1161       LiveInterval &LI = LIS.getInterval(Edit->get(RegIdx));
1162       LiveInterval::SubRange &S = getSubRangeForMask(PS.LaneMask, LI);
1163       if (removeDeadSegment(V->def, S))
1164         continue;
1165 
1166       MachineBasicBlock &B = *LIS.getMBBFromIndex(V->def);
1167       SubLRC.reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT,
1168                    &LIS.getVNInfoAllocator());
1169       Undefs.clear();
1170       LI.computeSubRangeUndefs(Undefs, PS.LaneMask, MRI, *LIS.getSlotIndexes());
1171       extendPHIRange(B, SubLRC, S, PS.LaneMask, Undefs);
1172     }
1173   }
1174 }
1175 
1176 /// rewriteAssigned - Rewrite all uses of Edit->getReg().
1177 void SplitEditor::rewriteAssigned(bool ExtendRanges) {
1178   struct ExtPoint {
1179     ExtPoint(const MachineOperand &O, unsigned R, SlotIndex N)
1180       : MO(O), RegIdx(R), Next(N) {}
1181     MachineOperand MO;
1182     unsigned RegIdx;
1183     SlotIndex Next;
1184   };
1185 
1186   SmallVector<ExtPoint,4> ExtPoints;
1187 
1188   for (MachineRegisterInfo::reg_iterator RI = MRI.reg_begin(Edit->getReg()),
1189        RE = MRI.reg_end(); RI != RE;) {
1190     MachineOperand &MO = *RI;
1191     MachineInstr *MI = MO.getParent();
1192     ++RI;
1193     // LiveDebugVariables should have handled all DBG_VALUE instructions.
1194     if (MI->isDebugValue()) {
1195       DEBUG(dbgs() << "Zapping " << *MI);
1196       MO.setReg(0);
1197       continue;
1198     }
1199 
1200     // <undef> operands don't really read the register, so it doesn't matter
1201     // which register we choose.  When the use operand is tied to a def, we must
1202     // use the same register as the def, so just do that always.
1203     SlotIndex Idx = LIS.getInstructionIndex(*MI);
1204     if (MO.isDef() || MO.isUndef())
1205       Idx = Idx.getRegSlot(MO.isEarlyClobber());
1206 
1207     // Rewrite to the mapped register at Idx.
1208     unsigned RegIdx = RegAssign.lookup(Idx);
1209     LiveInterval &LI = LIS.getInterval(Edit->get(RegIdx));
1210     MO.setReg(LI.reg);
1211     DEBUG(dbgs() << "  rewr BB#" << MI->getParent()->getNumber() << '\t'
1212                  << Idx << ':' << RegIdx << '\t' << *MI);
1213 
1214     // Extend liveness to Idx if the instruction reads reg.
1215     if (!ExtendRanges || MO.isUndef())
1216       continue;
1217 
1218     // Skip instructions that don't read Reg.
1219     if (MO.isDef()) {
1220       if (!MO.getSubReg() && !MO.isEarlyClobber())
1221         continue;
1222       // We may want to extend a live range for a partial redef, or for a use
1223       // tied to an early clobber.
1224       Idx = Idx.getPrevSlot();
1225       if (!Edit->getParent().liveAt(Idx))
1226         continue;
1227     } else
1228       Idx = Idx.getRegSlot(true);
1229 
1230     SlotIndex Next = Idx.getNextSlot();
1231     if (LI.hasSubRanges()) {
1232       // We have to delay extending subranges until we have seen all operands
1233       // defining the register. This is because a <def,read-undef> operand
1234       // will create an "undef" point, and we cannot extend any subranges
1235       // until all of them have been accounted for.
1236       if (MO.isUse())
1237         ExtPoints.push_back(ExtPoint(MO, RegIdx, Next));
1238     } else {
1239       LiveRangeCalc &LRC = getLRCalc(RegIdx);
1240       LRC.extend(LI, Next, 0, ArrayRef<SlotIndex>());
1241     }
1242   }
1243 
1244   for (ExtPoint &EP : ExtPoints) {
1245     LiveInterval &LI = LIS.getInterval(Edit->get(EP.RegIdx));
1246     assert(LI.hasSubRanges());
1247 
1248     LiveRangeCalc SubLRC;
1249     unsigned Reg = EP.MO.getReg(), Sub = EP.MO.getSubReg();
1250     LaneBitmask LM = Sub != 0 ? TRI.getSubRegIndexLaneMask(Sub)
1251                               : MRI.getMaxLaneMaskForVReg(Reg);
1252     for (LiveInterval::SubRange &S : LI.subranges()) {
1253       if ((S.LaneMask & LM).none())
1254         continue;
1255       // The problem here can be that the new register may have been created
1256       // for a partially defined original register. For example:
1257       //   %vreg827:subreg_hireg<def,read-undef> = ...
1258       //   ...
1259       //   %vreg828<def> = COPY %vreg827
1260       if (S.empty())
1261         continue;
1262       SubLRC.reset(&VRM.getMachineFunction(), LIS.getSlotIndexes(), &MDT,
1263                    &LIS.getVNInfoAllocator());
1264       SmallVector<SlotIndex, 4> Undefs;
1265       LI.computeSubRangeUndefs(Undefs, S.LaneMask, MRI, *LIS.getSlotIndexes());
1266       SubLRC.extend(S, EP.Next, 0, Undefs);
1267     }
1268   }
1269 
1270   for (unsigned R : *Edit) {
1271     LiveInterval &LI = LIS.getInterval(R);
1272     if (!LI.hasSubRanges())
1273       continue;
1274     LI.clear();
1275     LI.removeEmptySubRanges();
1276     LIS.constructMainRangeFromSubranges(LI);
1277   }
1278 }
1279 
1280 void SplitEditor::deleteRematVictims() {
1281   SmallVector<MachineInstr*, 8> Dead;
1282   for (LiveRangeEdit::iterator I = Edit->begin(), E = Edit->end(); I != E; ++I){
1283     LiveInterval *LI = &LIS.getInterval(*I);
1284     for (const LiveRange::Segment &S : LI->segments) {
1285       // Dead defs end at the dead slot.
1286       if (S.end != S.valno->def.getDeadSlot())
1287         continue;
1288       if (S.valno->isPHIDef())
1289         continue;
1290       MachineInstr *MI = LIS.getInstructionFromIndex(S.valno->def);
1291       assert(MI && "Missing instruction for dead def");
1292       MI->addRegisterDead(LI->reg, &TRI);
1293 
1294       if (!MI->allDefsAreDead())
1295         continue;
1296 
1297       DEBUG(dbgs() << "All defs dead: " << *MI);
1298       Dead.push_back(MI);
1299     }
1300   }
1301 
1302   if (Dead.empty())
1303     return;
1304 
1305   Edit->eliminateDeadDefs(Dead, None, &AA);
1306 }
1307 
1308 void SplitEditor::finish(SmallVectorImpl<unsigned> *LRMap) {
1309   ++NumFinished;
1310 
1311   // At this point, the live intervals in Edit contain VNInfos corresponding to
1312   // the inserted copies.
1313 
1314   // Add the original defs from the parent interval.
1315   for (const VNInfo *ParentVNI : Edit->getParent().valnos) {
1316     if (ParentVNI->isUnused())
1317       continue;
1318     unsigned RegIdx = RegAssign.lookup(ParentVNI->def);
1319     defValue(RegIdx, ParentVNI, ParentVNI->def, true);
1320 
1321     // Force rematted values to be recomputed everywhere.
1322     // The new live ranges may be truncated.
1323     if (Edit->didRematerialize(ParentVNI))
1324       for (unsigned i = 0, e = Edit->size(); i != e; ++i)
1325         forceRecompute(i, ParentVNI);
1326   }
1327 
1328   // Hoist back-copies to the complement interval when in spill mode.
1329   switch (SpillMode) {
1330   case SM_Partition:
1331     // Leave all back-copies as is.
1332     break;
1333   case SM_Size:
1334   case SM_Speed:
1335     // hoistCopies will behave differently between size and speed.
1336     hoistCopies();
1337   }
1338 
1339   // Transfer the simply mapped values, check if any are skipped.
1340   bool Skipped = transferValues();
1341 
1342   // Rewrite virtual registers, possibly extending ranges.
1343   rewriteAssigned(Skipped);
1344 
1345   if (Skipped)
1346     extendPHIKillRanges();
1347   else
1348     ++NumSimple;
1349 
1350   // Delete defs that were rematted everywhere.
1351   if (Skipped)
1352     deleteRematVictims();
1353 
1354   // Get rid of unused values and set phi-kill flags.
1355   for (unsigned Reg : *Edit) {
1356     LiveInterval &LI = LIS.getInterval(Reg);
1357     LI.removeEmptySubRanges();
1358     LI.RenumberValues();
1359   }
1360 
1361   // Provide a reverse mapping from original indices to Edit ranges.
1362   if (LRMap) {
1363     LRMap->clear();
1364     for (unsigned i = 0, e = Edit->size(); i != e; ++i)
1365       LRMap->push_back(i);
1366   }
1367 
1368   // Now check if any registers were separated into multiple components.
1369   ConnectedVNInfoEqClasses ConEQ(LIS);
1370   for (unsigned i = 0, e = Edit->size(); i != e; ++i) {
1371     // Don't use iterators, they are invalidated by create() below.
1372     unsigned VReg = Edit->get(i);
1373     LiveInterval &LI = LIS.getInterval(VReg);
1374     SmallVector<LiveInterval*, 8> SplitLIs;
1375     LIS.splitSeparateComponents(LI, SplitLIs);
1376     unsigned Original = VRM.getOriginal(VReg);
1377     for (LiveInterval *SplitLI : SplitLIs)
1378       VRM.setIsSplitFromReg(SplitLI->reg, Original);
1379 
1380     // The new intervals all map back to i.
1381     if (LRMap)
1382       LRMap->resize(Edit->size(), i);
1383   }
1384 
1385   // Calculate spill weight and allocation hints for new intervals.
1386   Edit->calculateRegClassAndHint(VRM.getMachineFunction(), SA.Loops, MBFI);
1387 
1388   assert(!LRMap || LRMap->size() == Edit->size());
1389 }
1390 
1391 
1392 //===----------------------------------------------------------------------===//
1393 //                            Single Block Splitting
1394 //===----------------------------------------------------------------------===//
1395 
1396 bool SplitAnalysis::shouldSplitSingleBlock(const BlockInfo &BI,
1397                                            bool SingleInstrs) const {
1398   // Always split for multiple instructions.
1399   if (!BI.isOneInstr())
1400     return true;
1401   // Don't split for single instructions unless explicitly requested.
1402   if (!SingleInstrs)
1403     return false;
1404   // Splitting a live-through range always makes progress.
1405   if (BI.LiveIn && BI.LiveOut)
1406     return true;
1407   // No point in isolating a copy. It has no register class constraints.
1408   if (LIS.getInstructionFromIndex(BI.FirstInstr)->isCopyLike())
1409     return false;
1410   // Finally, don't isolate an end point that was created by earlier splits.
1411   return isOriginalEndpoint(BI.FirstInstr);
1412 }
1413 
1414 void SplitEditor::splitSingleBlock(const SplitAnalysis::BlockInfo &BI) {
1415   openIntv();
1416   SlotIndex LastSplitPoint = SA.getLastSplitPoint(BI.MBB->getNumber());
1417   SlotIndex SegStart = enterIntvBefore(std::min(BI.FirstInstr,
1418     LastSplitPoint));
1419   if (!BI.LiveOut || BI.LastInstr < LastSplitPoint) {
1420     useIntv(SegStart, leaveIntvAfter(BI.LastInstr));
1421   } else {
1422       // The last use is after the last valid split point.
1423     SlotIndex SegStop = leaveIntvBefore(LastSplitPoint);
1424     useIntv(SegStart, SegStop);
1425     overlapIntv(SegStop, BI.LastInstr);
1426   }
1427 }
1428 
1429 
1430 //===----------------------------------------------------------------------===//
1431 //                    Global Live Range Splitting Support
1432 //===----------------------------------------------------------------------===//
1433 
1434 // These methods support a method of global live range splitting that uses a
1435 // global algorithm to decide intervals for CFG edges. They will insert split
1436 // points and color intervals in basic blocks while avoiding interference.
1437 //
1438 // Note that splitSingleBlock is also useful for blocks where both CFG edges
1439 // are on the stack.
1440 
1441 void SplitEditor::splitLiveThroughBlock(unsigned MBBNum,
1442                                         unsigned IntvIn, SlotIndex LeaveBefore,
1443                                         unsigned IntvOut, SlotIndex EnterAfter){
1444   SlotIndex Start, Stop;
1445   std::tie(Start, Stop) = LIS.getSlotIndexes()->getMBBRange(MBBNum);
1446 
1447   DEBUG(dbgs() << "BB#" << MBBNum << " [" << Start << ';' << Stop
1448                << ") intf " << LeaveBefore << '-' << EnterAfter
1449                << ", live-through " << IntvIn << " -> " << IntvOut);
1450 
1451   assert((IntvIn || IntvOut) && "Use splitSingleBlock for isolated blocks");
1452 
1453   assert((!LeaveBefore || LeaveBefore < Stop) && "Interference after block");
1454   assert((!IntvIn || !LeaveBefore || LeaveBefore > Start) && "Impossible intf");
1455   assert((!EnterAfter || EnterAfter >= Start) && "Interference before block");
1456 
1457   MachineBasicBlock *MBB = VRM.getMachineFunction().getBlockNumbered(MBBNum);
1458 
1459   if (!IntvOut) {
1460     DEBUG(dbgs() << ", spill on entry.\n");
1461     //
1462     //        <<<<<<<<<    Possible LeaveBefore interference.
1463     //    |-----------|    Live through.
1464     //    -____________    Spill on entry.
1465     //
1466     selectIntv(IntvIn);
1467     SlotIndex Idx = leaveIntvAtTop(*MBB);
1468     assert((!LeaveBefore || Idx <= LeaveBefore) && "Interference");
1469     (void)Idx;
1470     return;
1471   }
1472 
1473   if (!IntvIn) {
1474     DEBUG(dbgs() << ", reload on exit.\n");
1475     //
1476     //    >>>>>>>          Possible EnterAfter interference.
1477     //    |-----------|    Live through.
1478     //    ___________--    Reload on exit.
1479     //
1480     selectIntv(IntvOut);
1481     SlotIndex Idx = enterIntvAtEnd(*MBB);
1482     assert((!EnterAfter || Idx >= EnterAfter) && "Interference");
1483     (void)Idx;
1484     return;
1485   }
1486 
1487   if (IntvIn == IntvOut && !LeaveBefore && !EnterAfter) {
1488     DEBUG(dbgs() << ", straight through.\n");
1489     //
1490     //    |-----------|    Live through.
1491     //    -------------    Straight through, same intv, no interference.
1492     //
1493     selectIntv(IntvOut);
1494     useIntv(Start, Stop);
1495     return;
1496   }
1497 
1498   // We cannot legally insert splits after LSP.
1499   SlotIndex LSP = SA.getLastSplitPoint(MBBNum);
1500   assert((!IntvOut || !EnterAfter || EnterAfter < LSP) && "Impossible intf");
1501 
1502   if (IntvIn != IntvOut && (!LeaveBefore || !EnterAfter ||
1503                   LeaveBefore.getBaseIndex() > EnterAfter.getBoundaryIndex())) {
1504     DEBUG(dbgs() << ", switch avoiding interference.\n");
1505     //
1506     //    >>>>     <<<<    Non-overlapping EnterAfter/LeaveBefore interference.
1507     //    |-----------|    Live through.
1508     //    ------=======    Switch intervals between interference.
1509     //
1510     selectIntv(IntvOut);
1511     SlotIndex Idx;
1512     if (LeaveBefore && LeaveBefore < LSP) {
1513       Idx = enterIntvBefore(LeaveBefore);
1514       useIntv(Idx, Stop);
1515     } else {
1516       Idx = enterIntvAtEnd(*MBB);
1517     }
1518     selectIntv(IntvIn);
1519     useIntv(Start, Idx);
1520     assert((!LeaveBefore || Idx <= LeaveBefore) && "Interference");
1521     assert((!EnterAfter || Idx >= EnterAfter) && "Interference");
1522     return;
1523   }
1524 
1525   DEBUG(dbgs() << ", create local intv for interference.\n");
1526   //
1527   //    >>><><><><<<<    Overlapping EnterAfter/LeaveBefore interference.
1528   //    |-----------|    Live through.
1529   //    ==---------==    Switch intervals before/after interference.
1530   //
1531   assert(LeaveBefore <= EnterAfter && "Missed case");
1532 
1533   selectIntv(IntvOut);
1534   SlotIndex Idx = enterIntvAfter(EnterAfter);
1535   useIntv(Idx, Stop);
1536   assert((!EnterAfter || Idx >= EnterAfter) && "Interference");
1537 
1538   selectIntv(IntvIn);
1539   Idx = leaveIntvBefore(LeaveBefore);
1540   useIntv(Start, Idx);
1541   assert((!LeaveBefore || Idx <= LeaveBefore) && "Interference");
1542 }
1543 
1544 
1545 void SplitEditor::splitRegInBlock(const SplitAnalysis::BlockInfo &BI,
1546                                   unsigned IntvIn, SlotIndex LeaveBefore) {
1547   SlotIndex Start, Stop;
1548   std::tie(Start, Stop) = LIS.getSlotIndexes()->getMBBRange(BI.MBB);
1549 
1550   DEBUG(dbgs() << "BB#" << BI.MBB->getNumber() << " [" << Start << ';' << Stop
1551                << "), uses " << BI.FirstInstr << '-' << BI.LastInstr
1552                << ", reg-in " << IntvIn << ", leave before " << LeaveBefore
1553                << (BI.LiveOut ? ", stack-out" : ", killed in block"));
1554 
1555   assert(IntvIn && "Must have register in");
1556   assert(BI.LiveIn && "Must be live-in");
1557   assert((!LeaveBefore || LeaveBefore > Start) && "Bad interference");
1558 
1559   if (!BI.LiveOut && (!LeaveBefore || LeaveBefore >= BI.LastInstr)) {
1560     DEBUG(dbgs() << " before interference.\n");
1561     //
1562     //               <<<    Interference after kill.
1563     //     |---o---x   |    Killed in block.
1564     //     =========        Use IntvIn everywhere.
1565     //
1566     selectIntv(IntvIn);
1567     useIntv(Start, BI.LastInstr);
1568     return;
1569   }
1570 
1571   SlotIndex LSP = SA.getLastSplitPoint(BI.MBB->getNumber());
1572 
1573   if (!LeaveBefore || LeaveBefore > BI.LastInstr.getBoundaryIndex()) {
1574     //
1575     //               <<<    Possible interference after last use.
1576     //     |---o---o---|    Live-out on stack.
1577     //     =========____    Leave IntvIn after last use.
1578     //
1579     //                 <    Interference after last use.
1580     //     |---o---o--o|    Live-out on stack, late last use.
1581     //     ============     Copy to stack after LSP, overlap IntvIn.
1582     //            \_____    Stack interval is live-out.
1583     //
1584     if (BI.LastInstr < LSP) {
1585       DEBUG(dbgs() << ", spill after last use before interference.\n");
1586       selectIntv(IntvIn);
1587       SlotIndex Idx = leaveIntvAfter(BI.LastInstr);
1588       useIntv(Start, Idx);
1589       assert((!LeaveBefore || Idx <= LeaveBefore) && "Interference");
1590     } else {
1591       DEBUG(dbgs() << ", spill before last split point.\n");
1592       selectIntv(IntvIn);
1593       SlotIndex Idx = leaveIntvBefore(LSP);
1594       overlapIntv(Idx, BI.LastInstr);
1595       useIntv(Start, Idx);
1596       assert((!LeaveBefore || Idx <= LeaveBefore) && "Interference");
1597     }
1598     return;
1599   }
1600 
1601   // The interference is overlapping somewhere we wanted to use IntvIn. That
1602   // means we need to create a local interval that can be allocated a
1603   // different register.
1604   unsigned LocalIntv = openIntv();
1605   (void)LocalIntv;
1606   DEBUG(dbgs() << ", creating local interval " << LocalIntv << ".\n");
1607 
1608   if (!BI.LiveOut || BI.LastInstr < LSP) {
1609     //
1610     //           <<<<<<<    Interference overlapping uses.
1611     //     |---o---o---|    Live-out on stack.
1612     //     =====----____    Leave IntvIn before interference, then spill.
1613     //
1614     SlotIndex To = leaveIntvAfter(BI.LastInstr);
1615     SlotIndex From = enterIntvBefore(LeaveBefore);
1616     useIntv(From, To);
1617     selectIntv(IntvIn);
1618     useIntv(Start, From);
1619     assert((!LeaveBefore || From <= LeaveBefore) && "Interference");
1620     return;
1621   }
1622 
1623   //           <<<<<<<    Interference overlapping uses.
1624   //     |---o---o--o|    Live-out on stack, late last use.
1625   //     =====-------     Copy to stack before LSP, overlap LocalIntv.
1626   //            \_____    Stack interval is live-out.
1627   //
1628   SlotIndex To = leaveIntvBefore(LSP);
1629   overlapIntv(To, BI.LastInstr);
1630   SlotIndex From = enterIntvBefore(std::min(To, LeaveBefore));
1631   useIntv(From, To);
1632   selectIntv(IntvIn);
1633   useIntv(Start, From);
1634   assert((!LeaveBefore || From <= LeaveBefore) && "Interference");
1635 }
1636 
1637 void SplitEditor::splitRegOutBlock(const SplitAnalysis::BlockInfo &BI,
1638                                    unsigned IntvOut, SlotIndex EnterAfter) {
1639   SlotIndex Start, Stop;
1640   std::tie(Start, Stop) = LIS.getSlotIndexes()->getMBBRange(BI.MBB);
1641 
1642   DEBUG(dbgs() << "BB#" << BI.MBB->getNumber() << " [" << Start << ';' << Stop
1643                << "), uses " << BI.FirstInstr << '-' << BI.LastInstr
1644                << ", reg-out " << IntvOut << ", enter after " << EnterAfter
1645                << (BI.LiveIn ? ", stack-in" : ", defined in block"));
1646 
1647   SlotIndex LSP = SA.getLastSplitPoint(BI.MBB->getNumber());
1648 
1649   assert(IntvOut && "Must have register out");
1650   assert(BI.LiveOut && "Must be live-out");
1651   assert((!EnterAfter || EnterAfter < LSP) && "Bad interference");
1652 
1653   if (!BI.LiveIn && (!EnterAfter || EnterAfter <= BI.FirstInstr)) {
1654     DEBUG(dbgs() << " after interference.\n");
1655     //
1656     //    >>>>             Interference before def.
1657     //    |   o---o---|    Defined in block.
1658     //        =========    Use IntvOut everywhere.
1659     //
1660     selectIntv(IntvOut);
1661     useIntv(BI.FirstInstr, Stop);
1662     return;
1663   }
1664 
1665   if (!EnterAfter || EnterAfter < BI.FirstInstr.getBaseIndex()) {
1666     DEBUG(dbgs() << ", reload after interference.\n");
1667     //
1668     //    >>>>             Interference before def.
1669     //    |---o---o---|    Live-through, stack-in.
1670     //    ____=========    Enter IntvOut before first use.
1671     //
1672     selectIntv(IntvOut);
1673     SlotIndex Idx = enterIntvBefore(std::min(LSP, BI.FirstInstr));
1674     useIntv(Idx, Stop);
1675     assert((!EnterAfter || Idx >= EnterAfter) && "Interference");
1676     return;
1677   }
1678 
1679   // The interference is overlapping somewhere we wanted to use IntvOut. That
1680   // means we need to create a local interval that can be allocated a
1681   // different register.
1682   DEBUG(dbgs() << ", interference overlaps uses.\n");
1683   //
1684   //    >>>>>>>          Interference overlapping uses.
1685   //    |---o---o---|    Live-through, stack-in.
1686   //    ____---======    Create local interval for interference range.
1687   //
1688   selectIntv(IntvOut);
1689   SlotIndex Idx = enterIntvAfter(EnterAfter);
1690   useIntv(Idx, Stop);
1691   assert((!EnterAfter || Idx >= EnterAfter) && "Interference");
1692 
1693   openIntv();
1694   SlotIndex From = enterIntvBefore(std::min(Idx, BI.FirstInstr));
1695   useIntv(From, Idx);
1696 }
1697