LLVM API Documentation

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