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