RegAllocGreedy.cpp revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
1//===-- RegAllocGreedy.cpp - greedy register allocator --------------------===//
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 defines the RAGreedy function pass for register allocation in
11// optimized builds.
12//
13//===----------------------------------------------------------------------===//
14
15#include "llvm/CodeGen/Passes.h"
16#include "AllocationOrder.h"
17#include "InterferenceCache.h"
18#include "LiveDebugVariables.h"
19#include "RegAllocBase.h"
20#include "SpillPlacement.h"
21#include "Spiller.h"
22#include "SplitKit.h"
23#include "llvm/ADT/Statistic.h"
24#include "llvm/Analysis/AliasAnalysis.h"
25#include "llvm/CodeGen/CalcSpillWeights.h"
26#include "llvm/CodeGen/EdgeBundles.h"
27#include "llvm/CodeGen/LiveIntervalAnalysis.h"
28#include "llvm/CodeGen/LiveRangeEdit.h"
29#include "llvm/CodeGen/LiveRegMatrix.h"
30#include "llvm/CodeGen/LiveStackAnalysis.h"
31#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
32#include "llvm/CodeGen/MachineDominators.h"
33#include "llvm/CodeGen/MachineFunctionPass.h"
34#include "llvm/CodeGen/MachineLoopInfo.h"
35#include "llvm/CodeGen/MachineRegisterInfo.h"
36#include "llvm/CodeGen/RegAllocRegistry.h"
37#include "llvm/CodeGen/RegisterClassInfo.h"
38#include "llvm/CodeGen/VirtRegMap.h"
39#include "llvm/IR/LLVMContext.h"
40#include "llvm/PassAnalysisSupport.h"
41#include "llvm/Support/BranchProbability.h"
42#include "llvm/Support/CommandLine.h"
43#include "llvm/Support/Debug.h"
44#include "llvm/Support/ErrorHandling.h"
45#include "llvm/Support/Timer.h"
46#include "llvm/Support/raw_ostream.h"
47#include "llvm/Target/TargetSubtargetInfo.h"
48#include <queue>
49
50using namespace llvm;
51
52#define DEBUG_TYPE "regalloc"
53
54STATISTIC(NumGlobalSplits, "Number of split global live ranges");
55STATISTIC(NumLocalSplits,  "Number of split local live ranges");
56STATISTIC(NumEvicted,      "Number of interferences evicted");
57
58static cl::opt<SplitEditor::ComplementSpillMode>
59SplitSpillMode("split-spill-mode", cl::Hidden,
60  cl::desc("Spill mode for splitting live ranges"),
61  cl::values(clEnumValN(SplitEditor::SM_Partition, "default", "Default"),
62             clEnumValN(SplitEditor::SM_Size,  "size",  "Optimize for size"),
63             clEnumValN(SplitEditor::SM_Speed, "speed", "Optimize for speed"),
64             clEnumValEnd),
65  cl::init(SplitEditor::SM_Partition));
66
67static cl::opt<unsigned>
68LastChanceRecoloringMaxDepth("lcr-max-depth", cl::Hidden,
69                             cl::desc("Last chance recoloring max depth"),
70                             cl::init(5));
71
72static cl::opt<unsigned> LastChanceRecoloringMaxInterference(
73    "lcr-max-interf", cl::Hidden,
74    cl::desc("Last chance recoloring maximum number of considered"
75             " interference at a time"),
76    cl::init(8));
77
78static cl::opt<bool>
79ExhaustiveSearch("exhaustive-register-search", cl::NotHidden,
80                 cl::desc("Exhaustive Search for registers bypassing the depth "
81                          "and interference cutoffs of last chance recoloring"));
82
83static cl::opt<bool> EnableLocalReassignment(
84    "enable-local-reassign", cl::Hidden,
85    cl::desc("Local reassignment can yield better allocation decisions, but "
86             "may be compile time intensive"),
87    cl::init(false));
88
89// FIXME: Find a good default for this flag and remove the flag.
90static cl::opt<unsigned>
91CSRFirstTimeCost("regalloc-csr-first-time-cost",
92              cl::desc("Cost for first time use of callee-saved register."),
93              cl::init(0), cl::Hidden);
94
95static RegisterRegAlloc greedyRegAlloc("greedy", "greedy register allocator",
96                                       createGreedyRegisterAllocator);
97
98namespace {
99class RAGreedy : public MachineFunctionPass,
100                 public RegAllocBase,
101                 private LiveRangeEdit::Delegate {
102  // Convenient shortcuts.
103  typedef std::priority_queue<std::pair<unsigned, unsigned> > PQueue;
104  typedef SmallPtrSet<LiveInterval *, 4> SmallLISet;
105  typedef SmallSet<unsigned, 16> SmallVirtRegSet;
106
107  // context
108  MachineFunction *MF;
109
110  // Shortcuts to some useful interface.
111  const TargetInstrInfo *TII;
112  const TargetRegisterInfo *TRI;
113  RegisterClassInfo RCI;
114
115  // analyses
116  SlotIndexes *Indexes;
117  MachineBlockFrequencyInfo *MBFI;
118  MachineDominatorTree *DomTree;
119  MachineLoopInfo *Loops;
120  EdgeBundles *Bundles;
121  SpillPlacement *SpillPlacer;
122  LiveDebugVariables *DebugVars;
123
124  // state
125  std::unique_ptr<Spiller> SpillerInstance;
126  PQueue Queue;
127  unsigned NextCascade;
128
129  // Live ranges pass through a number of stages as we try to allocate them.
130  // Some of the stages may also create new live ranges:
131  //
132  // - Region splitting.
133  // - Per-block splitting.
134  // - Local splitting.
135  // - Spilling.
136  //
137  // Ranges produced by one of the stages skip the previous stages when they are
138  // dequeued. This improves performance because we can skip interference checks
139  // that are unlikely to give any results. It also guarantees that the live
140  // range splitting algorithm terminates, something that is otherwise hard to
141  // ensure.
142  enum LiveRangeStage {
143    /// Newly created live range that has never been queued.
144    RS_New,
145
146    /// Only attempt assignment and eviction. Then requeue as RS_Split.
147    RS_Assign,
148
149    /// Attempt live range splitting if assignment is impossible.
150    RS_Split,
151
152    /// Attempt more aggressive live range splitting that is guaranteed to make
153    /// progress.  This is used for split products that may not be making
154    /// progress.
155    RS_Split2,
156
157    /// Live range will be spilled.  No more splitting will be attempted.
158    RS_Spill,
159
160    /// There is nothing more we can do to this live range.  Abort compilation
161    /// if it can't be assigned.
162    RS_Done
163  };
164
165  // Enum CutOffStage to keep a track whether the register allocation failed
166  // because of the cutoffs encountered in last chance recoloring.
167  // Note: This is used as bitmask. New value should be next power of 2.
168  enum CutOffStage {
169    // No cutoffs encountered
170    CO_None = 0,
171
172    // lcr-max-depth cutoff encountered
173    CO_Depth = 1,
174
175    // lcr-max-interf cutoff encountered
176    CO_Interf = 2
177  };
178
179  uint8_t CutOffInfo;
180
181#ifndef NDEBUG
182  static const char *const StageName[];
183#endif
184
185  // RegInfo - Keep additional information about each live range.
186  struct RegInfo {
187    LiveRangeStage Stage;
188
189    // Cascade - Eviction loop prevention. See canEvictInterference().
190    unsigned Cascade;
191
192    RegInfo() : Stage(RS_New), Cascade(0) {}
193  };
194
195  IndexedMap<RegInfo, VirtReg2IndexFunctor> ExtraRegInfo;
196
197  LiveRangeStage getStage(const LiveInterval &VirtReg) const {
198    return ExtraRegInfo[VirtReg.reg].Stage;
199  }
200
201  void setStage(const LiveInterval &VirtReg, LiveRangeStage Stage) {
202    ExtraRegInfo.resize(MRI->getNumVirtRegs());
203    ExtraRegInfo[VirtReg.reg].Stage = Stage;
204  }
205
206  template<typename Iterator>
207  void setStage(Iterator Begin, Iterator End, LiveRangeStage NewStage) {
208    ExtraRegInfo.resize(MRI->getNumVirtRegs());
209    for (;Begin != End; ++Begin) {
210      unsigned Reg = *Begin;
211      if (ExtraRegInfo[Reg].Stage == RS_New)
212        ExtraRegInfo[Reg].Stage = NewStage;
213    }
214  }
215
216  /// Cost of evicting interference.
217  struct EvictionCost {
218    unsigned BrokenHints; ///< Total number of broken hints.
219    float MaxWeight;      ///< Maximum spill weight evicted.
220
221    EvictionCost(): BrokenHints(0), MaxWeight(0) {}
222
223    bool isMax() const { return BrokenHints == ~0u; }
224
225    void setMax() { BrokenHints = ~0u; }
226
227    void setBrokenHints(unsigned NHints) { BrokenHints = NHints; }
228
229    bool operator<(const EvictionCost &O) const {
230      return std::tie(BrokenHints, MaxWeight) <
231             std::tie(O.BrokenHints, O.MaxWeight);
232    }
233  };
234
235  // splitting state.
236  std::unique_ptr<SplitAnalysis> SA;
237  std::unique_ptr<SplitEditor> SE;
238
239  /// Cached per-block interference maps
240  InterferenceCache IntfCache;
241
242  /// All basic blocks where the current register has uses.
243  SmallVector<SpillPlacement::BlockConstraint, 8> SplitConstraints;
244
245  /// Global live range splitting candidate info.
246  struct GlobalSplitCandidate {
247    // Register intended for assignment, or 0.
248    unsigned PhysReg;
249
250    // SplitKit interval index for this candidate.
251    unsigned IntvIdx;
252
253    // Interference for PhysReg.
254    InterferenceCache::Cursor Intf;
255
256    // Bundles where this candidate should be live.
257    BitVector LiveBundles;
258    SmallVector<unsigned, 8> ActiveBlocks;
259
260    void reset(InterferenceCache &Cache, unsigned Reg) {
261      PhysReg = Reg;
262      IntvIdx = 0;
263      Intf.setPhysReg(Cache, Reg);
264      LiveBundles.clear();
265      ActiveBlocks.clear();
266    }
267
268    // Set B[i] = C for every live bundle where B[i] was NoCand.
269    unsigned getBundles(SmallVectorImpl<unsigned> &B, unsigned C) {
270      unsigned Count = 0;
271      for (int i = LiveBundles.find_first(); i >= 0;
272           i = LiveBundles.find_next(i))
273        if (B[i] == NoCand) {
274          B[i] = C;
275          Count++;
276        }
277      return Count;
278    }
279  };
280
281  /// Candidate info for each PhysReg in AllocationOrder.
282  /// This vector never shrinks, but grows to the size of the largest register
283  /// class.
284  SmallVector<GlobalSplitCandidate, 32> GlobalCand;
285
286  enum : unsigned { NoCand = ~0u };
287
288  /// Candidate map. Each edge bundle is assigned to a GlobalCand entry, or to
289  /// NoCand which indicates the stack interval.
290  SmallVector<unsigned, 32> BundleCand;
291
292  /// Callee-save register cost, calculated once per machine function.
293  BlockFrequency CSRCost;
294
295  /// Run or not the local reassignment heuristic. This information is
296  /// obtained from the TargetSubtargetInfo.
297  bool EnableLocalReassign;
298
299public:
300  RAGreedy();
301
302  /// Return the pass name.
303  const char* getPassName() const override {
304    return "Greedy Register Allocator";
305  }
306
307  /// RAGreedy analysis usage.
308  void getAnalysisUsage(AnalysisUsage &AU) const override;
309  void releaseMemory() override;
310  Spiller &spiller() override { return *SpillerInstance; }
311  void enqueue(LiveInterval *LI) override;
312  LiveInterval *dequeue() override;
313  unsigned selectOrSplit(LiveInterval&, SmallVectorImpl<unsigned>&) override;
314
315  /// Perform register allocation.
316  bool runOnMachineFunction(MachineFunction &mf) override;
317
318  static char ID;
319
320private:
321  unsigned selectOrSplitImpl(LiveInterval &, SmallVectorImpl<unsigned> &,
322                             SmallVirtRegSet &, unsigned = 0);
323
324  bool LRE_CanEraseVirtReg(unsigned) override;
325  void LRE_WillShrinkVirtReg(unsigned) override;
326  void LRE_DidCloneVirtReg(unsigned, unsigned) override;
327  void enqueue(PQueue &CurQueue, LiveInterval *LI);
328  LiveInterval *dequeue(PQueue &CurQueue);
329
330  BlockFrequency calcSpillCost();
331  bool addSplitConstraints(InterferenceCache::Cursor, BlockFrequency&);
332  void addThroughConstraints(InterferenceCache::Cursor, ArrayRef<unsigned>);
333  void growRegion(GlobalSplitCandidate &Cand);
334  BlockFrequency calcGlobalSplitCost(GlobalSplitCandidate&);
335  bool calcCompactRegion(GlobalSplitCandidate&);
336  void splitAroundRegion(LiveRangeEdit&, ArrayRef<unsigned>);
337  void calcGapWeights(unsigned, SmallVectorImpl<float>&);
338  unsigned canReassign(LiveInterval &VirtReg, unsigned PhysReg);
339  bool shouldEvict(LiveInterval &A, bool, LiveInterval &B, bool);
340  bool canEvictInterference(LiveInterval&, unsigned, bool, EvictionCost&);
341  void evictInterference(LiveInterval&, unsigned,
342                         SmallVectorImpl<unsigned>&);
343  bool mayRecolorAllInterferences(unsigned PhysReg, LiveInterval &VirtReg,
344                                  SmallLISet &RecoloringCandidates,
345                                  const SmallVirtRegSet &FixedRegisters);
346
347  unsigned tryAssign(LiveInterval&, AllocationOrder&,
348                     SmallVectorImpl<unsigned>&);
349  unsigned tryEvict(LiveInterval&, AllocationOrder&,
350                    SmallVectorImpl<unsigned>&, unsigned = ~0u);
351  unsigned tryRegionSplit(LiveInterval&, AllocationOrder&,
352                          SmallVectorImpl<unsigned>&);
353  /// Calculate cost of region splitting.
354  unsigned calculateRegionSplitCost(LiveInterval &VirtReg,
355                                    AllocationOrder &Order,
356                                    BlockFrequency &BestCost,
357                                    unsigned &NumCands, bool IgnoreCSR);
358  /// Perform region splitting.
359  unsigned doRegionSplit(LiveInterval &VirtReg, unsigned BestCand,
360                         bool HasCompact,
361                         SmallVectorImpl<unsigned> &NewVRegs);
362  /// Check other options before using a callee-saved register for the first
363  /// time.
364  unsigned tryAssignCSRFirstTime(LiveInterval &VirtReg, AllocationOrder &Order,
365                                 unsigned PhysReg, unsigned &CostPerUseLimit,
366                                 SmallVectorImpl<unsigned> &NewVRegs);
367  void initializeCSRCost();
368  unsigned tryBlockSplit(LiveInterval&, AllocationOrder&,
369                         SmallVectorImpl<unsigned>&);
370  unsigned tryInstructionSplit(LiveInterval&, AllocationOrder&,
371                               SmallVectorImpl<unsigned>&);
372  unsigned tryLocalSplit(LiveInterval&, AllocationOrder&,
373    SmallVectorImpl<unsigned>&);
374  unsigned trySplit(LiveInterval&, AllocationOrder&,
375                    SmallVectorImpl<unsigned>&);
376  unsigned tryLastChanceRecoloring(LiveInterval &, AllocationOrder &,
377                                   SmallVectorImpl<unsigned> &,
378                                   SmallVirtRegSet &, unsigned);
379  bool tryRecoloringCandidates(PQueue &, SmallVectorImpl<unsigned> &,
380                               SmallVirtRegSet &, unsigned);
381};
382} // end anonymous namespace
383
384char RAGreedy::ID = 0;
385
386#ifndef NDEBUG
387const char *const RAGreedy::StageName[] = {
388    "RS_New",
389    "RS_Assign",
390    "RS_Split",
391    "RS_Split2",
392    "RS_Spill",
393    "RS_Done"
394};
395#endif
396
397// Hysteresis to use when comparing floats.
398// This helps stabilize decisions based on float comparisons.
399const float Hysteresis = (2007 / 2048.0f); // 0.97998046875
400
401
402FunctionPass* llvm::createGreedyRegisterAllocator() {
403  return new RAGreedy();
404}
405
406RAGreedy::RAGreedy(): MachineFunctionPass(ID) {
407  initializeLiveDebugVariablesPass(*PassRegistry::getPassRegistry());
408  initializeSlotIndexesPass(*PassRegistry::getPassRegistry());
409  initializeLiveIntervalsPass(*PassRegistry::getPassRegistry());
410  initializeSlotIndexesPass(*PassRegistry::getPassRegistry());
411  initializeRegisterCoalescerPass(*PassRegistry::getPassRegistry());
412  initializeMachineSchedulerPass(*PassRegistry::getPassRegistry());
413  initializeLiveStacksPass(*PassRegistry::getPassRegistry());
414  initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry());
415  initializeMachineLoopInfoPass(*PassRegistry::getPassRegistry());
416  initializeVirtRegMapPass(*PassRegistry::getPassRegistry());
417  initializeLiveRegMatrixPass(*PassRegistry::getPassRegistry());
418  initializeEdgeBundlesPass(*PassRegistry::getPassRegistry());
419  initializeSpillPlacementPass(*PassRegistry::getPassRegistry());
420}
421
422void RAGreedy::getAnalysisUsage(AnalysisUsage &AU) const {
423  AU.setPreservesCFG();
424  AU.addRequired<MachineBlockFrequencyInfo>();
425  AU.addPreserved<MachineBlockFrequencyInfo>();
426  AU.addRequired<AliasAnalysis>();
427  AU.addPreserved<AliasAnalysis>();
428  AU.addRequired<LiveIntervals>();
429  AU.addPreserved<LiveIntervals>();
430  AU.addRequired<SlotIndexes>();
431  AU.addPreserved<SlotIndexes>();
432  AU.addRequired<LiveDebugVariables>();
433  AU.addPreserved<LiveDebugVariables>();
434  AU.addRequired<LiveStacks>();
435  AU.addPreserved<LiveStacks>();
436  AU.addRequired<MachineDominatorTree>();
437  AU.addPreserved<MachineDominatorTree>();
438  AU.addRequired<MachineLoopInfo>();
439  AU.addPreserved<MachineLoopInfo>();
440  AU.addRequired<VirtRegMap>();
441  AU.addPreserved<VirtRegMap>();
442  AU.addRequired<LiveRegMatrix>();
443  AU.addPreserved<LiveRegMatrix>();
444  AU.addRequired<EdgeBundles>();
445  AU.addRequired<SpillPlacement>();
446  MachineFunctionPass::getAnalysisUsage(AU);
447}
448
449
450//===----------------------------------------------------------------------===//
451//                     LiveRangeEdit delegate methods
452//===----------------------------------------------------------------------===//
453
454bool RAGreedy::LRE_CanEraseVirtReg(unsigned VirtReg) {
455  if (VRM->hasPhys(VirtReg)) {
456    Matrix->unassign(LIS->getInterval(VirtReg));
457    return true;
458  }
459  // Unassigned virtreg is probably in the priority queue.
460  // RegAllocBase will erase it after dequeueing.
461  return false;
462}
463
464void RAGreedy::LRE_WillShrinkVirtReg(unsigned VirtReg) {
465  if (!VRM->hasPhys(VirtReg))
466    return;
467
468  // Register is assigned, put it back on the queue for reassignment.
469  LiveInterval &LI = LIS->getInterval(VirtReg);
470  Matrix->unassign(LI);
471  enqueue(&LI);
472}
473
474void RAGreedy::LRE_DidCloneVirtReg(unsigned New, unsigned Old) {
475  // Cloning a register we haven't even heard about yet?  Just ignore it.
476  if (!ExtraRegInfo.inBounds(Old))
477    return;
478
479  // LRE may clone a virtual register because dead code elimination causes it to
480  // be split into connected components. The new components are much smaller
481  // than the original, so they should get a new chance at being assigned.
482  // same stage as the parent.
483  ExtraRegInfo[Old].Stage = RS_Assign;
484  ExtraRegInfo.grow(New);
485  ExtraRegInfo[New] = ExtraRegInfo[Old];
486}
487
488void RAGreedy::releaseMemory() {
489  SpillerInstance.reset(nullptr);
490  ExtraRegInfo.clear();
491  GlobalCand.clear();
492}
493
494void RAGreedy::enqueue(LiveInterval *LI) { enqueue(Queue, LI); }
495
496void RAGreedy::enqueue(PQueue &CurQueue, LiveInterval *LI) {
497  // Prioritize live ranges by size, assigning larger ranges first.
498  // The queue holds (size, reg) pairs.
499  const unsigned Size = LI->getSize();
500  const unsigned Reg = LI->reg;
501  assert(TargetRegisterInfo::isVirtualRegister(Reg) &&
502         "Can only enqueue virtual registers");
503  unsigned Prio;
504
505  ExtraRegInfo.grow(Reg);
506  if (ExtraRegInfo[Reg].Stage == RS_New)
507    ExtraRegInfo[Reg].Stage = RS_Assign;
508
509  if (ExtraRegInfo[Reg].Stage == RS_Split) {
510    // Unsplit ranges that couldn't be allocated immediately are deferred until
511    // everything else has been allocated.
512    Prio = Size;
513  } else {
514    // Giant live ranges fall back to the global assignment heuristic, which
515    // prevents excessive spilling in pathological cases.
516    bool ReverseLocal = TRI->reverseLocalAssignment();
517    bool ForceGlobal = !ReverseLocal && TRI->mayOverrideLocalAssignment() &&
518      (Size / SlotIndex::InstrDist) > (2 * MRI->getRegClass(Reg)->getNumRegs());
519
520    if (ExtraRegInfo[Reg].Stage == RS_Assign && !ForceGlobal && !LI->empty() &&
521        LIS->intervalIsInOneMBB(*LI)) {
522      // Allocate original local ranges in linear instruction order. Since they
523      // are singly defined, this produces optimal coloring in the absence of
524      // global interference and other constraints.
525      if (!ReverseLocal)
526        Prio = LI->beginIndex().getInstrDistance(Indexes->getLastIndex());
527      else {
528        // Allocating bottom up may allow many short LRGs to be assigned first
529        // to one of the cheap registers. This could be much faster for very
530        // large blocks on targets with many physical registers.
531        Prio = Indexes->getZeroIndex().getInstrDistance(LI->beginIndex());
532      }
533    }
534    else {
535      // Allocate global and split ranges in long->short order. Long ranges that
536      // don't fit should be spilled (or split) ASAP so they don't create
537      // interference.  Mark a bit to prioritize global above local ranges.
538      Prio = (1u << 29) + Size;
539    }
540    // Mark a higher bit to prioritize global and local above RS_Split.
541    Prio |= (1u << 31);
542
543    // Boost ranges that have a physical register hint.
544    if (VRM->hasKnownPreference(Reg))
545      Prio |= (1u << 30);
546  }
547  // The virtual register number is a tie breaker for same-sized ranges.
548  // Give lower vreg numbers higher priority to assign them first.
549  CurQueue.push(std::make_pair(Prio, ~Reg));
550}
551
552LiveInterval *RAGreedy::dequeue() { return dequeue(Queue); }
553
554LiveInterval *RAGreedy::dequeue(PQueue &CurQueue) {
555  if (CurQueue.empty())
556    return nullptr;
557  LiveInterval *LI = &LIS->getInterval(~CurQueue.top().second);
558  CurQueue.pop();
559  return LI;
560}
561
562
563//===----------------------------------------------------------------------===//
564//                            Direct Assignment
565//===----------------------------------------------------------------------===//
566
567/// tryAssign - Try to assign VirtReg to an available register.
568unsigned RAGreedy::tryAssign(LiveInterval &VirtReg,
569                             AllocationOrder &Order,
570                             SmallVectorImpl<unsigned> &NewVRegs) {
571  Order.rewind();
572  unsigned PhysReg;
573  while ((PhysReg = Order.next()))
574    if (!Matrix->checkInterference(VirtReg, PhysReg))
575      break;
576  if (!PhysReg || Order.isHint())
577    return PhysReg;
578
579  // PhysReg is available, but there may be a better choice.
580
581  // If we missed a simple hint, try to cheaply evict interference from the
582  // preferred register.
583  if (unsigned Hint = MRI->getSimpleHint(VirtReg.reg))
584    if (Order.isHint(Hint)) {
585      DEBUG(dbgs() << "missed hint " << PrintReg(Hint, TRI) << '\n');
586      EvictionCost MaxCost;
587      MaxCost.setBrokenHints(1);
588      if (canEvictInterference(VirtReg, Hint, true, MaxCost)) {
589        evictInterference(VirtReg, Hint, NewVRegs);
590        return Hint;
591      }
592    }
593
594  // Try to evict interference from a cheaper alternative.
595  unsigned Cost = TRI->getCostPerUse(PhysReg);
596
597  // Most registers have 0 additional cost.
598  if (!Cost)
599    return PhysReg;
600
601  DEBUG(dbgs() << PrintReg(PhysReg, TRI) << " is available at cost " << Cost
602               << '\n');
603  unsigned CheapReg = tryEvict(VirtReg, Order, NewVRegs, Cost);
604  return CheapReg ? CheapReg : PhysReg;
605}
606
607
608//===----------------------------------------------------------------------===//
609//                         Interference eviction
610//===----------------------------------------------------------------------===//
611
612unsigned RAGreedy::canReassign(LiveInterval &VirtReg, unsigned PrevReg) {
613  AllocationOrder Order(VirtReg.reg, *VRM, RegClassInfo);
614  unsigned PhysReg;
615  while ((PhysReg = Order.next())) {
616    if (PhysReg == PrevReg)
617      continue;
618
619    MCRegUnitIterator Units(PhysReg, TRI);
620    for (; Units.isValid(); ++Units) {
621      // Instantiate a "subquery", not to be confused with the Queries array.
622      LiveIntervalUnion::Query subQ(&VirtReg, &Matrix->getLiveUnions()[*Units]);
623      if (subQ.checkInterference())
624        break;
625    }
626    // If no units have interference, break out with the current PhysReg.
627    if (!Units.isValid())
628      break;
629  }
630  if (PhysReg)
631    DEBUG(dbgs() << "can reassign: " << VirtReg << " from "
632          << PrintReg(PrevReg, TRI) << " to " << PrintReg(PhysReg, TRI)
633          << '\n');
634  return PhysReg;
635}
636
637/// shouldEvict - determine if A should evict the assigned live range B. The
638/// eviction policy defined by this function together with the allocation order
639/// defined by enqueue() decides which registers ultimately end up being split
640/// and spilled.
641///
642/// Cascade numbers are used to prevent infinite loops if this function is a
643/// cyclic relation.
644///
645/// @param A          The live range to be assigned.
646/// @param IsHint     True when A is about to be assigned to its preferred
647///                   register.
648/// @param B          The live range to be evicted.
649/// @param BreaksHint True when B is already assigned to its preferred register.
650bool RAGreedy::shouldEvict(LiveInterval &A, bool IsHint,
651                           LiveInterval &B, bool BreaksHint) {
652  bool CanSplit = getStage(B) < RS_Spill;
653
654  // Be fairly aggressive about following hints as long as the evictee can be
655  // split.
656  if (CanSplit && IsHint && !BreaksHint)
657    return true;
658
659  if (A.weight > B.weight) {
660    DEBUG(dbgs() << "should evict: " << B << " w= " << B.weight << '\n');
661    return true;
662  }
663  return false;
664}
665
666/// canEvictInterference - Return true if all interferences between VirtReg and
667/// PhysReg can be evicted.
668///
669/// @param VirtReg Live range that is about to be assigned.
670/// @param PhysReg Desired register for assignment.
671/// @param IsHint  True when PhysReg is VirtReg's preferred register.
672/// @param MaxCost Only look for cheaper candidates and update with new cost
673///                when returning true.
674/// @returns True when interference can be evicted cheaper than MaxCost.
675bool RAGreedy::canEvictInterference(LiveInterval &VirtReg, unsigned PhysReg,
676                                    bool IsHint, EvictionCost &MaxCost) {
677  // It is only possible to evict virtual register interference.
678  if (Matrix->checkInterference(VirtReg, PhysReg) > LiveRegMatrix::IK_VirtReg)
679    return false;
680
681  bool IsLocal = LIS->intervalIsInOneMBB(VirtReg);
682
683  // Find VirtReg's cascade number. This will be unassigned if VirtReg was never
684  // involved in an eviction before. If a cascade number was assigned, deny
685  // evicting anything with the same or a newer cascade number. This prevents
686  // infinite eviction loops.
687  //
688  // This works out so a register without a cascade number is allowed to evict
689  // anything, and it can be evicted by anything.
690  unsigned Cascade = ExtraRegInfo[VirtReg.reg].Cascade;
691  if (!Cascade)
692    Cascade = NextCascade;
693
694  EvictionCost Cost;
695  for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
696    LiveIntervalUnion::Query &Q = Matrix->query(VirtReg, *Units);
697    // If there is 10 or more interferences, chances are one is heavier.
698    if (Q.collectInterferingVRegs(10) >= 10)
699      return false;
700
701    // Check if any interfering live range is heavier than MaxWeight.
702    for (unsigned i = Q.interferingVRegs().size(); i; --i) {
703      LiveInterval *Intf = Q.interferingVRegs()[i - 1];
704      assert(TargetRegisterInfo::isVirtualRegister(Intf->reg) &&
705             "Only expecting virtual register interference from query");
706      // Never evict spill products. They cannot split or spill.
707      if (getStage(*Intf) == RS_Done)
708        return false;
709      // Once a live range becomes small enough, it is urgent that we find a
710      // register for it. This is indicated by an infinite spill weight. These
711      // urgent live ranges get to evict almost anything.
712      //
713      // Also allow urgent evictions of unspillable ranges from a strictly
714      // larger allocation order.
715      bool Urgent = !VirtReg.isSpillable() &&
716        (Intf->isSpillable() ||
717         RegClassInfo.getNumAllocatableRegs(MRI->getRegClass(VirtReg.reg)) <
718         RegClassInfo.getNumAllocatableRegs(MRI->getRegClass(Intf->reg)));
719      // Only evict older cascades or live ranges without a cascade.
720      unsigned IntfCascade = ExtraRegInfo[Intf->reg].Cascade;
721      if (Cascade <= IntfCascade) {
722        if (!Urgent)
723          return false;
724        // We permit breaking cascades for urgent evictions. It should be the
725        // last resort, though, so make it really expensive.
726        Cost.BrokenHints += 10;
727      }
728      // Would this break a satisfied hint?
729      bool BreaksHint = VRM->hasPreferredPhys(Intf->reg);
730      // Update eviction cost.
731      Cost.BrokenHints += BreaksHint;
732      Cost.MaxWeight = std::max(Cost.MaxWeight, Intf->weight);
733      // Abort if this would be too expensive.
734      if (!(Cost < MaxCost))
735        return false;
736      if (Urgent)
737        continue;
738      // Apply the eviction policy for non-urgent evictions.
739      if (!shouldEvict(VirtReg, IsHint, *Intf, BreaksHint))
740        return false;
741      // If !MaxCost.isMax(), then we're just looking for a cheap register.
742      // Evicting another local live range in this case could lead to suboptimal
743      // coloring.
744      if (!MaxCost.isMax() && IsLocal && LIS->intervalIsInOneMBB(*Intf) &&
745          (!EnableLocalReassign || !canReassign(*Intf, PhysReg))) {
746        return false;
747      }
748    }
749  }
750  MaxCost = Cost;
751  return true;
752}
753
754/// evictInterference - Evict any interferring registers that prevent VirtReg
755/// from being assigned to Physreg. This assumes that canEvictInterference
756/// returned true.
757void RAGreedy::evictInterference(LiveInterval &VirtReg, unsigned PhysReg,
758                                 SmallVectorImpl<unsigned> &NewVRegs) {
759  // Make sure that VirtReg has a cascade number, and assign that cascade
760  // number to every evicted register. These live ranges than then only be
761  // evicted by a newer cascade, preventing infinite loops.
762  unsigned Cascade = ExtraRegInfo[VirtReg.reg].Cascade;
763  if (!Cascade)
764    Cascade = ExtraRegInfo[VirtReg.reg].Cascade = NextCascade++;
765
766  DEBUG(dbgs() << "evicting " << PrintReg(PhysReg, TRI)
767               << " interference: Cascade " << Cascade << '\n');
768
769  // Collect all interfering virtregs first.
770  SmallVector<LiveInterval*, 8> Intfs;
771  for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
772    LiveIntervalUnion::Query &Q = Matrix->query(VirtReg, *Units);
773    assert(Q.seenAllInterferences() && "Didn't check all interfererences.");
774    ArrayRef<LiveInterval*> IVR = Q.interferingVRegs();
775    Intfs.append(IVR.begin(), IVR.end());
776  }
777
778  // Evict them second. This will invalidate the queries.
779  for (unsigned i = 0, e = Intfs.size(); i != e; ++i) {
780    LiveInterval *Intf = Intfs[i];
781    // The same VirtReg may be present in multiple RegUnits. Skip duplicates.
782    if (!VRM->hasPhys(Intf->reg))
783      continue;
784    Matrix->unassign(*Intf);
785    assert((ExtraRegInfo[Intf->reg].Cascade < Cascade ||
786            VirtReg.isSpillable() < Intf->isSpillable()) &&
787           "Cannot decrease cascade number, illegal eviction");
788    ExtraRegInfo[Intf->reg].Cascade = Cascade;
789    ++NumEvicted;
790    NewVRegs.push_back(Intf->reg);
791  }
792}
793
794/// tryEvict - Try to evict all interferences for a physreg.
795/// @param  VirtReg Currently unassigned virtual register.
796/// @param  Order   Physregs to try.
797/// @return         Physreg to assign VirtReg, or 0.
798unsigned RAGreedy::tryEvict(LiveInterval &VirtReg,
799                            AllocationOrder &Order,
800                            SmallVectorImpl<unsigned> &NewVRegs,
801                            unsigned CostPerUseLimit) {
802  NamedRegionTimer T("Evict", TimerGroupName, TimePassesIsEnabled);
803
804  // Keep track of the cheapest interference seen so far.
805  EvictionCost BestCost;
806  BestCost.setMax();
807  unsigned BestPhys = 0;
808  unsigned OrderLimit = Order.getOrder().size();
809
810  // When we are just looking for a reduced cost per use, don't break any
811  // hints, and only evict smaller spill weights.
812  if (CostPerUseLimit < ~0u) {
813    BestCost.BrokenHints = 0;
814    BestCost.MaxWeight = VirtReg.weight;
815
816    // Check of any registers in RC are below CostPerUseLimit.
817    const TargetRegisterClass *RC = MRI->getRegClass(VirtReg.reg);
818    unsigned MinCost = RegClassInfo.getMinCost(RC);
819    if (MinCost >= CostPerUseLimit) {
820      DEBUG(dbgs() << RC->getName() << " minimum cost = " << MinCost
821                   << ", no cheaper registers to be found.\n");
822      return 0;
823    }
824
825    // It is normal for register classes to have a long tail of registers with
826    // the same cost. We don't need to look at them if they're too expensive.
827    if (TRI->getCostPerUse(Order.getOrder().back()) >= CostPerUseLimit) {
828      OrderLimit = RegClassInfo.getLastCostChange(RC);
829      DEBUG(dbgs() << "Only trying the first " << OrderLimit << " regs.\n");
830    }
831  }
832
833  Order.rewind();
834  while (unsigned PhysReg = Order.next(OrderLimit)) {
835    if (TRI->getCostPerUse(PhysReg) >= CostPerUseLimit)
836      continue;
837    // The first use of a callee-saved register in a function has cost 1.
838    // Don't start using a CSR when the CostPerUseLimit is low.
839    if (CostPerUseLimit == 1)
840     if (unsigned CSR = RegClassInfo.getLastCalleeSavedAlias(PhysReg))
841       if (!MRI->isPhysRegUsed(CSR)) {
842         DEBUG(dbgs() << PrintReg(PhysReg, TRI) << " would clobber CSR "
843                      << PrintReg(CSR, TRI) << '\n');
844         continue;
845       }
846
847    if (!canEvictInterference(VirtReg, PhysReg, false, BestCost))
848      continue;
849
850    // Best so far.
851    BestPhys = PhysReg;
852
853    // Stop if the hint can be used.
854    if (Order.isHint())
855      break;
856  }
857
858  if (!BestPhys)
859    return 0;
860
861  evictInterference(VirtReg, BestPhys, NewVRegs);
862  return BestPhys;
863}
864
865
866//===----------------------------------------------------------------------===//
867//                              Region Splitting
868//===----------------------------------------------------------------------===//
869
870/// addSplitConstraints - Fill out the SplitConstraints vector based on the
871/// interference pattern in Physreg and its aliases. Add the constraints to
872/// SpillPlacement and return the static cost of this split in Cost, assuming
873/// that all preferences in SplitConstraints are met.
874/// Return false if there are no bundles with positive bias.
875bool RAGreedy::addSplitConstraints(InterferenceCache::Cursor Intf,
876                                   BlockFrequency &Cost) {
877  ArrayRef<SplitAnalysis::BlockInfo> UseBlocks = SA->getUseBlocks();
878
879  // Reset interference dependent info.
880  SplitConstraints.resize(UseBlocks.size());
881  BlockFrequency StaticCost = 0;
882  for (unsigned i = 0; i != UseBlocks.size(); ++i) {
883    const SplitAnalysis::BlockInfo &BI = UseBlocks[i];
884    SpillPlacement::BlockConstraint &BC = SplitConstraints[i];
885
886    BC.Number = BI.MBB->getNumber();
887    Intf.moveToBlock(BC.Number);
888    BC.Entry = BI.LiveIn ? SpillPlacement::PrefReg : SpillPlacement::DontCare;
889    BC.Exit = BI.LiveOut ? SpillPlacement::PrefReg : SpillPlacement::DontCare;
890    BC.ChangesValue = BI.FirstDef.isValid();
891
892    if (!Intf.hasInterference())
893      continue;
894
895    // Number of spill code instructions to insert.
896    unsigned Ins = 0;
897
898    // Interference for the live-in value.
899    if (BI.LiveIn) {
900      if (Intf.first() <= Indexes->getMBBStartIdx(BC.Number))
901        BC.Entry = SpillPlacement::MustSpill, ++Ins;
902      else if (Intf.first() < BI.FirstInstr)
903        BC.Entry = SpillPlacement::PrefSpill, ++Ins;
904      else if (Intf.first() < BI.LastInstr)
905        ++Ins;
906    }
907
908    // Interference for the live-out value.
909    if (BI.LiveOut) {
910      if (Intf.last() >= SA->getLastSplitPoint(BC.Number))
911        BC.Exit = SpillPlacement::MustSpill, ++Ins;
912      else if (Intf.last() > BI.LastInstr)
913        BC.Exit = SpillPlacement::PrefSpill, ++Ins;
914      else if (Intf.last() > BI.FirstInstr)
915        ++Ins;
916    }
917
918    // Accumulate the total frequency of inserted spill code.
919    while (Ins--)
920      StaticCost += SpillPlacer->getBlockFrequency(BC.Number);
921  }
922  Cost = StaticCost;
923
924  // Add constraints for use-blocks. Note that these are the only constraints
925  // that may add a positive bias, it is downhill from here.
926  SpillPlacer->addConstraints(SplitConstraints);
927  return SpillPlacer->scanActiveBundles();
928}
929
930
931/// addThroughConstraints - Add constraints and links to SpillPlacer from the
932/// live-through blocks in Blocks.
933void RAGreedy::addThroughConstraints(InterferenceCache::Cursor Intf,
934                                     ArrayRef<unsigned> Blocks) {
935  const unsigned GroupSize = 8;
936  SpillPlacement::BlockConstraint BCS[GroupSize];
937  unsigned TBS[GroupSize];
938  unsigned B = 0, T = 0;
939
940  for (unsigned i = 0; i != Blocks.size(); ++i) {
941    unsigned Number = Blocks[i];
942    Intf.moveToBlock(Number);
943
944    if (!Intf.hasInterference()) {
945      assert(T < GroupSize && "Array overflow");
946      TBS[T] = Number;
947      if (++T == GroupSize) {
948        SpillPlacer->addLinks(makeArrayRef(TBS, T));
949        T = 0;
950      }
951      continue;
952    }
953
954    assert(B < GroupSize && "Array overflow");
955    BCS[B].Number = Number;
956
957    // Interference for the live-in value.
958    if (Intf.first() <= Indexes->getMBBStartIdx(Number))
959      BCS[B].Entry = SpillPlacement::MustSpill;
960    else
961      BCS[B].Entry = SpillPlacement::PrefSpill;
962
963    // Interference for the live-out value.
964    if (Intf.last() >= SA->getLastSplitPoint(Number))
965      BCS[B].Exit = SpillPlacement::MustSpill;
966    else
967      BCS[B].Exit = SpillPlacement::PrefSpill;
968
969    if (++B == GroupSize) {
970      ArrayRef<SpillPlacement::BlockConstraint> Array(BCS, B);
971      SpillPlacer->addConstraints(Array);
972      B = 0;
973    }
974  }
975
976  ArrayRef<SpillPlacement::BlockConstraint> Array(BCS, B);
977  SpillPlacer->addConstraints(Array);
978  SpillPlacer->addLinks(makeArrayRef(TBS, T));
979}
980
981void RAGreedy::growRegion(GlobalSplitCandidate &Cand) {
982  // Keep track of through blocks that have not been added to SpillPlacer.
983  BitVector Todo = SA->getThroughBlocks();
984  SmallVectorImpl<unsigned> &ActiveBlocks = Cand.ActiveBlocks;
985  unsigned AddedTo = 0;
986#ifndef NDEBUG
987  unsigned Visited = 0;
988#endif
989
990  for (;;) {
991    ArrayRef<unsigned> NewBundles = SpillPlacer->getRecentPositive();
992    // Find new through blocks in the periphery of PrefRegBundles.
993    for (int i = 0, e = NewBundles.size(); i != e; ++i) {
994      unsigned Bundle = NewBundles[i];
995      // Look at all blocks connected to Bundle in the full graph.
996      ArrayRef<unsigned> Blocks = Bundles->getBlocks(Bundle);
997      for (ArrayRef<unsigned>::iterator I = Blocks.begin(), E = Blocks.end();
998           I != E; ++I) {
999        unsigned Block = *I;
1000        if (!Todo.test(Block))
1001          continue;
1002        Todo.reset(Block);
1003        // This is a new through block. Add it to SpillPlacer later.
1004        ActiveBlocks.push_back(Block);
1005#ifndef NDEBUG
1006        ++Visited;
1007#endif
1008      }
1009    }
1010    // Any new blocks to add?
1011    if (ActiveBlocks.size() == AddedTo)
1012      break;
1013
1014    // Compute through constraints from the interference, or assume that all
1015    // through blocks prefer spilling when forming compact regions.
1016    ArrayRef<unsigned> NewBlocks = makeArrayRef(ActiveBlocks).slice(AddedTo);
1017    if (Cand.PhysReg)
1018      addThroughConstraints(Cand.Intf, NewBlocks);
1019    else
1020      // Provide a strong negative bias on through blocks to prevent unwanted
1021      // liveness on loop backedges.
1022      SpillPlacer->addPrefSpill(NewBlocks, /* Strong= */ true);
1023    AddedTo = ActiveBlocks.size();
1024
1025    // Perhaps iterating can enable more bundles?
1026    SpillPlacer->iterate();
1027  }
1028  DEBUG(dbgs() << ", v=" << Visited);
1029}
1030
1031/// calcCompactRegion - Compute the set of edge bundles that should be live
1032/// when splitting the current live range into compact regions.  Compact
1033/// regions can be computed without looking at interference.  They are the
1034/// regions formed by removing all the live-through blocks from the live range.
1035///
1036/// Returns false if the current live range is already compact, or if the
1037/// compact regions would form single block regions anyway.
1038bool RAGreedy::calcCompactRegion(GlobalSplitCandidate &Cand) {
1039  // Without any through blocks, the live range is already compact.
1040  if (!SA->getNumThroughBlocks())
1041    return false;
1042
1043  // Compact regions don't correspond to any physreg.
1044  Cand.reset(IntfCache, 0);
1045
1046  DEBUG(dbgs() << "Compact region bundles");
1047
1048  // Use the spill placer to determine the live bundles. GrowRegion pretends
1049  // that all the through blocks have interference when PhysReg is unset.
1050  SpillPlacer->prepare(Cand.LiveBundles);
1051
1052  // The static split cost will be zero since Cand.Intf reports no interference.
1053  BlockFrequency Cost;
1054  if (!addSplitConstraints(Cand.Intf, Cost)) {
1055    DEBUG(dbgs() << ", none.\n");
1056    return false;
1057  }
1058
1059  growRegion(Cand);
1060  SpillPlacer->finish();
1061
1062  if (!Cand.LiveBundles.any()) {
1063    DEBUG(dbgs() << ", none.\n");
1064    return false;
1065  }
1066
1067  DEBUG({
1068    for (int i = Cand.LiveBundles.find_first(); i>=0;
1069         i = Cand.LiveBundles.find_next(i))
1070    dbgs() << " EB#" << i;
1071    dbgs() << ".\n";
1072  });
1073  return true;
1074}
1075
1076/// calcSpillCost - Compute how expensive it would be to split the live range in
1077/// SA around all use blocks instead of forming bundle regions.
1078BlockFrequency RAGreedy::calcSpillCost() {
1079  BlockFrequency Cost = 0;
1080  ArrayRef<SplitAnalysis::BlockInfo> UseBlocks = SA->getUseBlocks();
1081  for (unsigned i = 0; i != UseBlocks.size(); ++i) {
1082    const SplitAnalysis::BlockInfo &BI = UseBlocks[i];
1083    unsigned Number = BI.MBB->getNumber();
1084    // We normally only need one spill instruction - a load or a store.
1085    Cost += SpillPlacer->getBlockFrequency(Number);
1086
1087    // Unless the value is redefined in the block.
1088    if (BI.LiveIn && BI.LiveOut && BI.FirstDef)
1089      Cost += SpillPlacer->getBlockFrequency(Number);
1090  }
1091  return Cost;
1092}
1093
1094/// calcGlobalSplitCost - Return the global split cost of following the split
1095/// pattern in LiveBundles. This cost should be added to the local cost of the
1096/// interference pattern in SplitConstraints.
1097///
1098BlockFrequency RAGreedy::calcGlobalSplitCost(GlobalSplitCandidate &Cand) {
1099  BlockFrequency GlobalCost = 0;
1100  const BitVector &LiveBundles = Cand.LiveBundles;
1101  ArrayRef<SplitAnalysis::BlockInfo> UseBlocks = SA->getUseBlocks();
1102  for (unsigned i = 0; i != UseBlocks.size(); ++i) {
1103    const SplitAnalysis::BlockInfo &BI = UseBlocks[i];
1104    SpillPlacement::BlockConstraint &BC = SplitConstraints[i];
1105    bool RegIn  = LiveBundles[Bundles->getBundle(BC.Number, 0)];
1106    bool RegOut = LiveBundles[Bundles->getBundle(BC.Number, 1)];
1107    unsigned Ins = 0;
1108
1109    if (BI.LiveIn)
1110      Ins += RegIn != (BC.Entry == SpillPlacement::PrefReg);
1111    if (BI.LiveOut)
1112      Ins += RegOut != (BC.Exit == SpillPlacement::PrefReg);
1113    while (Ins--)
1114      GlobalCost += SpillPlacer->getBlockFrequency(BC.Number);
1115  }
1116
1117  for (unsigned i = 0, e = Cand.ActiveBlocks.size(); i != e; ++i) {
1118    unsigned Number = Cand.ActiveBlocks[i];
1119    bool RegIn  = LiveBundles[Bundles->getBundle(Number, 0)];
1120    bool RegOut = LiveBundles[Bundles->getBundle(Number, 1)];
1121    if (!RegIn && !RegOut)
1122      continue;
1123    if (RegIn && RegOut) {
1124      // We need double spill code if this block has interference.
1125      Cand.Intf.moveToBlock(Number);
1126      if (Cand.Intf.hasInterference()) {
1127        GlobalCost += SpillPlacer->getBlockFrequency(Number);
1128        GlobalCost += SpillPlacer->getBlockFrequency(Number);
1129      }
1130      continue;
1131    }
1132    // live-in / stack-out or stack-in live-out.
1133    GlobalCost += SpillPlacer->getBlockFrequency(Number);
1134  }
1135  return GlobalCost;
1136}
1137
1138/// splitAroundRegion - Split the current live range around the regions
1139/// determined by BundleCand and GlobalCand.
1140///
1141/// Before calling this function, GlobalCand and BundleCand must be initialized
1142/// so each bundle is assigned to a valid candidate, or NoCand for the
1143/// stack-bound bundles.  The shared SA/SE SplitAnalysis and SplitEditor
1144/// objects must be initialized for the current live range, and intervals
1145/// created for the used candidates.
1146///
1147/// @param LREdit    The LiveRangeEdit object handling the current split.
1148/// @param UsedCands List of used GlobalCand entries. Every BundleCand value
1149///                  must appear in this list.
1150void RAGreedy::splitAroundRegion(LiveRangeEdit &LREdit,
1151                                 ArrayRef<unsigned> UsedCands) {
1152  // These are the intervals created for new global ranges. We may create more
1153  // intervals for local ranges.
1154  const unsigned NumGlobalIntvs = LREdit.size();
1155  DEBUG(dbgs() << "splitAroundRegion with " << NumGlobalIntvs << " globals.\n");
1156  assert(NumGlobalIntvs && "No global intervals configured");
1157
1158  // Isolate even single instructions when dealing with a proper sub-class.
1159  // That guarantees register class inflation for the stack interval because it
1160  // is all copies.
1161  unsigned Reg = SA->getParent().reg;
1162  bool SingleInstrs = RegClassInfo.isProperSubClass(MRI->getRegClass(Reg));
1163
1164  // First handle all the blocks with uses.
1165  ArrayRef<SplitAnalysis::BlockInfo> UseBlocks = SA->getUseBlocks();
1166  for (unsigned i = 0; i != UseBlocks.size(); ++i) {
1167    const SplitAnalysis::BlockInfo &BI = UseBlocks[i];
1168    unsigned Number = BI.MBB->getNumber();
1169    unsigned IntvIn = 0, IntvOut = 0;
1170    SlotIndex IntfIn, IntfOut;
1171    if (BI.LiveIn) {
1172      unsigned CandIn = BundleCand[Bundles->getBundle(Number, 0)];
1173      if (CandIn != NoCand) {
1174        GlobalSplitCandidate &Cand = GlobalCand[CandIn];
1175        IntvIn = Cand.IntvIdx;
1176        Cand.Intf.moveToBlock(Number);
1177        IntfIn = Cand.Intf.first();
1178      }
1179    }
1180    if (BI.LiveOut) {
1181      unsigned CandOut = BundleCand[Bundles->getBundle(Number, 1)];
1182      if (CandOut != NoCand) {
1183        GlobalSplitCandidate &Cand = GlobalCand[CandOut];
1184        IntvOut = Cand.IntvIdx;
1185        Cand.Intf.moveToBlock(Number);
1186        IntfOut = Cand.Intf.last();
1187      }
1188    }
1189
1190    // Create separate intervals for isolated blocks with multiple uses.
1191    if (!IntvIn && !IntvOut) {
1192      DEBUG(dbgs() << "BB#" << BI.MBB->getNumber() << " isolated.\n");
1193      if (SA->shouldSplitSingleBlock(BI, SingleInstrs))
1194        SE->splitSingleBlock(BI);
1195      continue;
1196    }
1197
1198    if (IntvIn && IntvOut)
1199      SE->splitLiveThroughBlock(Number, IntvIn, IntfIn, IntvOut, IntfOut);
1200    else if (IntvIn)
1201      SE->splitRegInBlock(BI, IntvIn, IntfIn);
1202    else
1203      SE->splitRegOutBlock(BI, IntvOut, IntfOut);
1204  }
1205
1206  // Handle live-through blocks. The relevant live-through blocks are stored in
1207  // the ActiveBlocks list with each candidate. We need to filter out
1208  // duplicates.
1209  BitVector Todo = SA->getThroughBlocks();
1210  for (unsigned c = 0; c != UsedCands.size(); ++c) {
1211    ArrayRef<unsigned> Blocks = GlobalCand[UsedCands[c]].ActiveBlocks;
1212    for (unsigned i = 0, e = Blocks.size(); i != e; ++i) {
1213      unsigned Number = Blocks[i];
1214      if (!Todo.test(Number))
1215        continue;
1216      Todo.reset(Number);
1217
1218      unsigned IntvIn = 0, IntvOut = 0;
1219      SlotIndex IntfIn, IntfOut;
1220
1221      unsigned CandIn = BundleCand[Bundles->getBundle(Number, 0)];
1222      if (CandIn != NoCand) {
1223        GlobalSplitCandidate &Cand = GlobalCand[CandIn];
1224        IntvIn = Cand.IntvIdx;
1225        Cand.Intf.moveToBlock(Number);
1226        IntfIn = Cand.Intf.first();
1227      }
1228
1229      unsigned CandOut = BundleCand[Bundles->getBundle(Number, 1)];
1230      if (CandOut != NoCand) {
1231        GlobalSplitCandidate &Cand = GlobalCand[CandOut];
1232        IntvOut = Cand.IntvIdx;
1233        Cand.Intf.moveToBlock(Number);
1234        IntfOut = Cand.Intf.last();
1235      }
1236      if (!IntvIn && !IntvOut)
1237        continue;
1238      SE->splitLiveThroughBlock(Number, IntvIn, IntfIn, IntvOut, IntfOut);
1239    }
1240  }
1241
1242  ++NumGlobalSplits;
1243
1244  SmallVector<unsigned, 8> IntvMap;
1245  SE->finish(&IntvMap);
1246  DebugVars->splitRegister(Reg, LREdit.regs(), *LIS);
1247
1248  ExtraRegInfo.resize(MRI->getNumVirtRegs());
1249  unsigned OrigBlocks = SA->getNumLiveBlocks();
1250
1251  // Sort out the new intervals created by splitting. We get four kinds:
1252  // - Remainder intervals should not be split again.
1253  // - Candidate intervals can be assigned to Cand.PhysReg.
1254  // - Block-local splits are candidates for local splitting.
1255  // - DCE leftovers should go back on the queue.
1256  for (unsigned i = 0, e = LREdit.size(); i != e; ++i) {
1257    LiveInterval &Reg = LIS->getInterval(LREdit.get(i));
1258
1259    // Ignore old intervals from DCE.
1260    if (getStage(Reg) != RS_New)
1261      continue;
1262
1263    // Remainder interval. Don't try splitting again, spill if it doesn't
1264    // allocate.
1265    if (IntvMap[i] == 0) {
1266      setStage(Reg, RS_Spill);
1267      continue;
1268    }
1269
1270    // Global intervals. Allow repeated splitting as long as the number of live
1271    // blocks is strictly decreasing.
1272    if (IntvMap[i] < NumGlobalIntvs) {
1273      if (SA->countLiveBlocks(&Reg) >= OrigBlocks) {
1274        DEBUG(dbgs() << "Main interval covers the same " << OrigBlocks
1275                     << " blocks as original.\n");
1276        // Don't allow repeated splitting as a safe guard against looping.
1277        setStage(Reg, RS_Split2);
1278      }
1279      continue;
1280    }
1281
1282    // Other intervals are treated as new. This includes local intervals created
1283    // for blocks with multiple uses, and anything created by DCE.
1284  }
1285
1286  if (VerifyEnabled)
1287    MF->verify(this, "After splitting live range around region");
1288}
1289
1290unsigned RAGreedy::tryRegionSplit(LiveInterval &VirtReg, AllocationOrder &Order,
1291                                  SmallVectorImpl<unsigned> &NewVRegs) {
1292  unsigned NumCands = 0;
1293  BlockFrequency BestCost;
1294
1295  // Check if we can split this live range around a compact region.
1296  bool HasCompact = calcCompactRegion(GlobalCand.front());
1297  if (HasCompact) {
1298    // Yes, keep GlobalCand[0] as the compact region candidate.
1299    NumCands = 1;
1300    BestCost = BlockFrequency::getMaxFrequency();
1301  } else {
1302    // No benefit from the compact region, our fallback will be per-block
1303    // splitting. Make sure we find a solution that is cheaper than spilling.
1304    BestCost = calcSpillCost();
1305    DEBUG(dbgs() << "Cost of isolating all blocks = ";
1306                 MBFI->printBlockFreq(dbgs(), BestCost) << '\n');
1307  }
1308
1309  unsigned BestCand =
1310      calculateRegionSplitCost(VirtReg, Order, BestCost, NumCands,
1311                               false/*IgnoreCSR*/);
1312
1313  // No solutions found, fall back to single block splitting.
1314  if (!HasCompact && BestCand == NoCand)
1315    return 0;
1316
1317  return doRegionSplit(VirtReg, BestCand, HasCompact, NewVRegs);
1318}
1319
1320unsigned RAGreedy::calculateRegionSplitCost(LiveInterval &VirtReg,
1321                                            AllocationOrder &Order,
1322                                            BlockFrequency &BestCost,
1323                                            unsigned &NumCands,
1324                                            bool IgnoreCSR) {
1325  unsigned BestCand = NoCand;
1326  Order.rewind();
1327  while (unsigned PhysReg = Order.next()) {
1328   if (unsigned CSR = RegClassInfo.getLastCalleeSavedAlias(PhysReg))
1329     if (IgnoreCSR && !MRI->isPhysRegUsed(CSR))
1330       continue;
1331
1332    // Discard bad candidates before we run out of interference cache cursors.
1333    // This will only affect register classes with a lot of registers (>32).
1334    if (NumCands == IntfCache.getMaxCursors()) {
1335      unsigned WorstCount = ~0u;
1336      unsigned Worst = 0;
1337      for (unsigned i = 0; i != NumCands; ++i) {
1338        if (i == BestCand || !GlobalCand[i].PhysReg)
1339          continue;
1340        unsigned Count = GlobalCand[i].LiveBundles.count();
1341        if (Count < WorstCount)
1342          Worst = i, WorstCount = Count;
1343      }
1344      --NumCands;
1345      GlobalCand[Worst] = GlobalCand[NumCands];
1346      if (BestCand == NumCands)
1347        BestCand = Worst;
1348    }
1349
1350    if (GlobalCand.size() <= NumCands)
1351      GlobalCand.resize(NumCands+1);
1352    GlobalSplitCandidate &Cand = GlobalCand[NumCands];
1353    Cand.reset(IntfCache, PhysReg);
1354
1355    SpillPlacer->prepare(Cand.LiveBundles);
1356    BlockFrequency Cost;
1357    if (!addSplitConstraints(Cand.Intf, Cost)) {
1358      DEBUG(dbgs() << PrintReg(PhysReg, TRI) << "\tno positive bundles\n");
1359      continue;
1360    }
1361    DEBUG(dbgs() << PrintReg(PhysReg, TRI) << "\tstatic = ";
1362                 MBFI->printBlockFreq(dbgs(), Cost));
1363    if (Cost >= BestCost) {
1364      DEBUG({
1365        if (BestCand == NoCand)
1366          dbgs() << " worse than no bundles\n";
1367        else
1368          dbgs() << " worse than "
1369                 << PrintReg(GlobalCand[BestCand].PhysReg, TRI) << '\n';
1370      });
1371      continue;
1372    }
1373    growRegion(Cand);
1374
1375    SpillPlacer->finish();
1376
1377    // No live bundles, defer to splitSingleBlocks().
1378    if (!Cand.LiveBundles.any()) {
1379      DEBUG(dbgs() << " no bundles.\n");
1380      continue;
1381    }
1382
1383    Cost += calcGlobalSplitCost(Cand);
1384    DEBUG({
1385      dbgs() << ", total = "; MBFI->printBlockFreq(dbgs(), Cost)
1386                                << " with bundles";
1387      for (int i = Cand.LiveBundles.find_first(); i>=0;
1388           i = Cand.LiveBundles.find_next(i))
1389        dbgs() << " EB#" << i;
1390      dbgs() << ".\n";
1391    });
1392    if (Cost < BestCost) {
1393      BestCand = NumCands;
1394      BestCost = Cost;
1395    }
1396    ++NumCands;
1397  }
1398  return BestCand;
1399}
1400
1401unsigned RAGreedy::doRegionSplit(LiveInterval &VirtReg, unsigned BestCand,
1402                                 bool HasCompact,
1403                                 SmallVectorImpl<unsigned> &NewVRegs) {
1404  SmallVector<unsigned, 8> UsedCands;
1405  // Prepare split editor.
1406  LiveRangeEdit LREdit(&VirtReg, NewVRegs, *MF, *LIS, VRM, this);
1407  SE->reset(LREdit, SplitSpillMode);
1408
1409  // Assign all edge bundles to the preferred candidate, or NoCand.
1410  BundleCand.assign(Bundles->getNumBundles(), NoCand);
1411
1412  // Assign bundles for the best candidate region.
1413  if (BestCand != NoCand) {
1414    GlobalSplitCandidate &Cand = GlobalCand[BestCand];
1415    if (unsigned B = Cand.getBundles(BundleCand, BestCand)) {
1416      UsedCands.push_back(BestCand);
1417      Cand.IntvIdx = SE->openIntv();
1418      DEBUG(dbgs() << "Split for " << PrintReg(Cand.PhysReg, TRI) << " in "
1419                   << B << " bundles, intv " << Cand.IntvIdx << ".\n");
1420      (void)B;
1421    }
1422  }
1423
1424  // Assign bundles for the compact region.
1425  if (HasCompact) {
1426    GlobalSplitCandidate &Cand = GlobalCand.front();
1427    assert(!Cand.PhysReg && "Compact region has no physreg");
1428    if (unsigned B = Cand.getBundles(BundleCand, 0)) {
1429      UsedCands.push_back(0);
1430      Cand.IntvIdx = SE->openIntv();
1431      DEBUG(dbgs() << "Split for compact region in " << B << " bundles, intv "
1432                   << Cand.IntvIdx << ".\n");
1433      (void)B;
1434    }
1435  }
1436
1437  splitAroundRegion(LREdit, UsedCands);
1438  return 0;
1439}
1440
1441
1442//===----------------------------------------------------------------------===//
1443//                            Per-Block Splitting
1444//===----------------------------------------------------------------------===//
1445
1446/// tryBlockSplit - Split a global live range around every block with uses. This
1447/// creates a lot of local live ranges, that will be split by tryLocalSplit if
1448/// they don't allocate.
1449unsigned RAGreedy::tryBlockSplit(LiveInterval &VirtReg, AllocationOrder &Order,
1450                                 SmallVectorImpl<unsigned> &NewVRegs) {
1451  assert(&SA->getParent() == &VirtReg && "Live range wasn't analyzed");
1452  unsigned Reg = VirtReg.reg;
1453  bool SingleInstrs = RegClassInfo.isProperSubClass(MRI->getRegClass(Reg));
1454  LiveRangeEdit LREdit(&VirtReg, NewVRegs, *MF, *LIS, VRM, this);
1455  SE->reset(LREdit, SplitSpillMode);
1456  ArrayRef<SplitAnalysis::BlockInfo> UseBlocks = SA->getUseBlocks();
1457  for (unsigned i = 0; i != UseBlocks.size(); ++i) {
1458    const SplitAnalysis::BlockInfo &BI = UseBlocks[i];
1459    if (SA->shouldSplitSingleBlock(BI, SingleInstrs))
1460      SE->splitSingleBlock(BI);
1461  }
1462  // No blocks were split.
1463  if (LREdit.empty())
1464    return 0;
1465
1466  // We did split for some blocks.
1467  SmallVector<unsigned, 8> IntvMap;
1468  SE->finish(&IntvMap);
1469
1470  // Tell LiveDebugVariables about the new ranges.
1471  DebugVars->splitRegister(Reg, LREdit.regs(), *LIS);
1472
1473  ExtraRegInfo.resize(MRI->getNumVirtRegs());
1474
1475  // Sort out the new intervals created by splitting. The remainder interval
1476  // goes straight to spilling, the new local ranges get to stay RS_New.
1477  for (unsigned i = 0, e = LREdit.size(); i != e; ++i) {
1478    LiveInterval &LI = LIS->getInterval(LREdit.get(i));
1479    if (getStage(LI) == RS_New && IntvMap[i] == 0)
1480      setStage(LI, RS_Spill);
1481  }
1482
1483  if (VerifyEnabled)
1484    MF->verify(this, "After splitting live range around basic blocks");
1485  return 0;
1486}
1487
1488
1489//===----------------------------------------------------------------------===//
1490//                         Per-Instruction Splitting
1491//===----------------------------------------------------------------------===//
1492
1493/// Get the number of allocatable registers that match the constraints of \p Reg
1494/// on \p MI and that are also in \p SuperRC.
1495static unsigned getNumAllocatableRegsForConstraints(
1496    const MachineInstr *MI, unsigned Reg, const TargetRegisterClass *SuperRC,
1497    const TargetInstrInfo *TII, const TargetRegisterInfo *TRI,
1498    const RegisterClassInfo &RCI) {
1499  assert(SuperRC && "Invalid register class");
1500
1501  const TargetRegisterClass *ConstrainedRC =
1502      MI->getRegClassConstraintEffectForVReg(Reg, SuperRC, TII, TRI,
1503                                             /* ExploreBundle */ true);
1504  if (!ConstrainedRC)
1505    return 0;
1506  return RCI.getNumAllocatableRegs(ConstrainedRC);
1507}
1508
1509/// tryInstructionSplit - Split a live range around individual instructions.
1510/// This is normally not worthwhile since the spiller is doing essentially the
1511/// same thing. However, when the live range is in a constrained register
1512/// class, it may help to insert copies such that parts of the live range can
1513/// be moved to a larger register class.
1514///
1515/// This is similar to spilling to a larger register class.
1516unsigned
1517RAGreedy::tryInstructionSplit(LiveInterval &VirtReg, AllocationOrder &Order,
1518                              SmallVectorImpl<unsigned> &NewVRegs) {
1519  const TargetRegisterClass *CurRC = MRI->getRegClass(VirtReg.reg);
1520  // There is no point to this if there are no larger sub-classes.
1521  if (!RegClassInfo.isProperSubClass(CurRC))
1522    return 0;
1523
1524  // Always enable split spill mode, since we're effectively spilling to a
1525  // register.
1526  LiveRangeEdit LREdit(&VirtReg, NewVRegs, *MF, *LIS, VRM, this);
1527  SE->reset(LREdit, SplitEditor::SM_Size);
1528
1529  ArrayRef<SlotIndex> Uses = SA->getUseSlots();
1530  if (Uses.size() <= 1)
1531    return 0;
1532
1533  DEBUG(dbgs() << "Split around " << Uses.size() << " individual instrs.\n");
1534
1535  const TargetRegisterClass *SuperRC = TRI->getLargestLegalSuperClass(CurRC);
1536  unsigned SuperRCNumAllocatableRegs = RCI.getNumAllocatableRegs(SuperRC);
1537  // Split around every non-copy instruction if this split will relax
1538  // the constraints on the virtual register.
1539  // Otherwise, splitting just inserts uncoalescable copies that do not help
1540  // the allocation.
1541  for (unsigned i = 0; i != Uses.size(); ++i) {
1542    if (const MachineInstr *MI = Indexes->getInstructionFromIndex(Uses[i]))
1543      if (MI->isFullCopy() ||
1544          SuperRCNumAllocatableRegs ==
1545              getNumAllocatableRegsForConstraints(MI, VirtReg.reg, SuperRC, TII,
1546                                                  TRI, RCI)) {
1547        DEBUG(dbgs() << "    skip:\t" << Uses[i] << '\t' << *MI);
1548        continue;
1549      }
1550    SE->openIntv();
1551    SlotIndex SegStart = SE->enterIntvBefore(Uses[i]);
1552    SlotIndex SegStop  = SE->leaveIntvAfter(Uses[i]);
1553    SE->useIntv(SegStart, SegStop);
1554  }
1555
1556  if (LREdit.empty()) {
1557    DEBUG(dbgs() << "All uses were copies.\n");
1558    return 0;
1559  }
1560
1561  SmallVector<unsigned, 8> IntvMap;
1562  SE->finish(&IntvMap);
1563  DebugVars->splitRegister(VirtReg.reg, LREdit.regs(), *LIS);
1564  ExtraRegInfo.resize(MRI->getNumVirtRegs());
1565
1566  // Assign all new registers to RS_Spill. This was the last chance.
1567  setStage(LREdit.begin(), LREdit.end(), RS_Spill);
1568  return 0;
1569}
1570
1571
1572//===----------------------------------------------------------------------===//
1573//                             Local Splitting
1574//===----------------------------------------------------------------------===//
1575
1576
1577/// calcGapWeights - Compute the maximum spill weight that needs to be evicted
1578/// in order to use PhysReg between two entries in SA->UseSlots.
1579///
1580/// GapWeight[i] represents the gap between UseSlots[i] and UseSlots[i+1].
1581///
1582void RAGreedy::calcGapWeights(unsigned PhysReg,
1583                              SmallVectorImpl<float> &GapWeight) {
1584  assert(SA->getUseBlocks().size() == 1 && "Not a local interval");
1585  const SplitAnalysis::BlockInfo &BI = SA->getUseBlocks().front();
1586  ArrayRef<SlotIndex> Uses = SA->getUseSlots();
1587  const unsigned NumGaps = Uses.size()-1;
1588
1589  // Start and end points for the interference check.
1590  SlotIndex StartIdx =
1591    BI.LiveIn ? BI.FirstInstr.getBaseIndex() : BI.FirstInstr;
1592  SlotIndex StopIdx =
1593    BI.LiveOut ? BI.LastInstr.getBoundaryIndex() : BI.LastInstr;
1594
1595  GapWeight.assign(NumGaps, 0.0f);
1596
1597  // Add interference from each overlapping register.
1598  for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
1599    if (!Matrix->query(const_cast<LiveInterval&>(SA->getParent()), *Units)
1600          .checkInterference())
1601      continue;
1602
1603    // We know that VirtReg is a continuous interval from FirstInstr to
1604    // LastInstr, so we don't need InterferenceQuery.
1605    //
1606    // Interference that overlaps an instruction is counted in both gaps
1607    // surrounding the instruction. The exception is interference before
1608    // StartIdx and after StopIdx.
1609    //
1610    LiveIntervalUnion::SegmentIter IntI =
1611      Matrix->getLiveUnions()[*Units] .find(StartIdx);
1612    for (unsigned Gap = 0; IntI.valid() && IntI.start() < StopIdx; ++IntI) {
1613      // Skip the gaps before IntI.
1614      while (Uses[Gap+1].getBoundaryIndex() < IntI.start())
1615        if (++Gap == NumGaps)
1616          break;
1617      if (Gap == NumGaps)
1618        break;
1619
1620      // Update the gaps covered by IntI.
1621      const float weight = IntI.value()->weight;
1622      for (; Gap != NumGaps; ++Gap) {
1623        GapWeight[Gap] = std::max(GapWeight[Gap], weight);
1624        if (Uses[Gap+1].getBaseIndex() >= IntI.stop())
1625          break;
1626      }
1627      if (Gap == NumGaps)
1628        break;
1629    }
1630  }
1631
1632  // Add fixed interference.
1633  for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
1634    const LiveRange &LR = LIS->getRegUnit(*Units);
1635    LiveRange::const_iterator I = LR.find(StartIdx);
1636    LiveRange::const_iterator E = LR.end();
1637
1638    // Same loop as above. Mark any overlapped gaps as HUGE_VALF.
1639    for (unsigned Gap = 0; I != E && I->start < StopIdx; ++I) {
1640      while (Uses[Gap+1].getBoundaryIndex() < I->start)
1641        if (++Gap == NumGaps)
1642          break;
1643      if (Gap == NumGaps)
1644        break;
1645
1646      for (; Gap != NumGaps; ++Gap) {
1647        GapWeight[Gap] = llvm::huge_valf;
1648        if (Uses[Gap+1].getBaseIndex() >= I->end)
1649          break;
1650      }
1651      if (Gap == NumGaps)
1652        break;
1653    }
1654  }
1655}
1656
1657/// tryLocalSplit - Try to split VirtReg into smaller intervals inside its only
1658/// basic block.
1659///
1660unsigned RAGreedy::tryLocalSplit(LiveInterval &VirtReg, AllocationOrder &Order,
1661                                 SmallVectorImpl<unsigned> &NewVRegs) {
1662  assert(SA->getUseBlocks().size() == 1 && "Not a local interval");
1663  const SplitAnalysis::BlockInfo &BI = SA->getUseBlocks().front();
1664
1665  // Note that it is possible to have an interval that is live-in or live-out
1666  // while only covering a single block - A phi-def can use undef values from
1667  // predecessors, and the block could be a single-block loop.
1668  // We don't bother doing anything clever about such a case, we simply assume
1669  // that the interval is continuous from FirstInstr to LastInstr. We should
1670  // make sure that we don't do anything illegal to such an interval, though.
1671
1672  ArrayRef<SlotIndex> Uses = SA->getUseSlots();
1673  if (Uses.size() <= 2)
1674    return 0;
1675  const unsigned NumGaps = Uses.size()-1;
1676
1677  DEBUG({
1678    dbgs() << "tryLocalSplit: ";
1679    for (unsigned i = 0, e = Uses.size(); i != e; ++i)
1680      dbgs() << ' ' << Uses[i];
1681    dbgs() << '\n';
1682  });
1683
1684  // If VirtReg is live across any register mask operands, compute a list of
1685  // gaps with register masks.
1686  SmallVector<unsigned, 8> RegMaskGaps;
1687  if (Matrix->checkRegMaskInterference(VirtReg)) {
1688    // Get regmask slots for the whole block.
1689    ArrayRef<SlotIndex> RMS = LIS->getRegMaskSlotsInBlock(BI.MBB->getNumber());
1690    DEBUG(dbgs() << RMS.size() << " regmasks in block:");
1691    // Constrain to VirtReg's live range.
1692    unsigned ri = std::lower_bound(RMS.begin(), RMS.end(),
1693                                   Uses.front().getRegSlot()) - RMS.begin();
1694    unsigned re = RMS.size();
1695    for (unsigned i = 0; i != NumGaps && ri != re; ++i) {
1696      // Look for Uses[i] <= RMS <= Uses[i+1].
1697      assert(!SlotIndex::isEarlierInstr(RMS[ri], Uses[i]));
1698      if (SlotIndex::isEarlierInstr(Uses[i+1], RMS[ri]))
1699        continue;
1700      // Skip a regmask on the same instruction as the last use. It doesn't
1701      // overlap the live range.
1702      if (SlotIndex::isSameInstr(Uses[i+1], RMS[ri]) && i+1 == NumGaps)
1703        break;
1704      DEBUG(dbgs() << ' ' << RMS[ri] << ':' << Uses[i] << '-' << Uses[i+1]);
1705      RegMaskGaps.push_back(i);
1706      // Advance ri to the next gap. A regmask on one of the uses counts in
1707      // both gaps.
1708      while (ri != re && SlotIndex::isEarlierInstr(RMS[ri], Uses[i+1]))
1709        ++ri;
1710    }
1711    DEBUG(dbgs() << '\n');
1712  }
1713
1714  // Since we allow local split results to be split again, there is a risk of
1715  // creating infinite loops. It is tempting to require that the new live
1716  // ranges have less instructions than the original. That would guarantee
1717  // convergence, but it is too strict. A live range with 3 instructions can be
1718  // split 2+3 (including the COPY), and we want to allow that.
1719  //
1720  // Instead we use these rules:
1721  //
1722  // 1. Allow any split for ranges with getStage() < RS_Split2. (Except for the
1723  //    noop split, of course).
1724  // 2. Require progress be made for ranges with getStage() == RS_Split2. All
1725  //    the new ranges must have fewer instructions than before the split.
1726  // 3. New ranges with the same number of instructions are marked RS_Split2,
1727  //    smaller ranges are marked RS_New.
1728  //
1729  // These rules allow a 3 -> 2+3 split once, which we need. They also prevent
1730  // excessive splitting and infinite loops.
1731  //
1732  bool ProgressRequired = getStage(VirtReg) >= RS_Split2;
1733
1734  // Best split candidate.
1735  unsigned BestBefore = NumGaps;
1736  unsigned BestAfter = 0;
1737  float BestDiff = 0;
1738
1739  const float blockFreq =
1740    SpillPlacer->getBlockFrequency(BI.MBB->getNumber()).getFrequency() *
1741    (1.0f / MBFI->getEntryFreq());
1742  SmallVector<float, 8> GapWeight;
1743
1744  Order.rewind();
1745  while (unsigned PhysReg = Order.next()) {
1746    // Keep track of the largest spill weight that would need to be evicted in
1747    // order to make use of PhysReg between UseSlots[i] and UseSlots[i+1].
1748    calcGapWeights(PhysReg, GapWeight);
1749
1750    // Remove any gaps with regmask clobbers.
1751    if (Matrix->checkRegMaskInterference(VirtReg, PhysReg))
1752      for (unsigned i = 0, e = RegMaskGaps.size(); i != e; ++i)
1753        GapWeight[RegMaskGaps[i]] = llvm::huge_valf;
1754
1755    // Try to find the best sequence of gaps to close.
1756    // The new spill weight must be larger than any gap interference.
1757
1758    // We will split before Uses[SplitBefore] and after Uses[SplitAfter].
1759    unsigned SplitBefore = 0, SplitAfter = 1;
1760
1761    // MaxGap should always be max(GapWeight[SplitBefore..SplitAfter-1]).
1762    // It is the spill weight that needs to be evicted.
1763    float MaxGap = GapWeight[0];
1764
1765    for (;;) {
1766      // Live before/after split?
1767      const bool LiveBefore = SplitBefore != 0 || BI.LiveIn;
1768      const bool LiveAfter = SplitAfter != NumGaps || BI.LiveOut;
1769
1770      DEBUG(dbgs() << PrintReg(PhysReg, TRI) << ' '
1771                   << Uses[SplitBefore] << '-' << Uses[SplitAfter]
1772                   << " i=" << MaxGap);
1773
1774      // Stop before the interval gets so big we wouldn't be making progress.
1775      if (!LiveBefore && !LiveAfter) {
1776        DEBUG(dbgs() << " all\n");
1777        break;
1778      }
1779      // Should the interval be extended or shrunk?
1780      bool Shrink = true;
1781
1782      // How many gaps would the new range have?
1783      unsigned NewGaps = LiveBefore + SplitAfter - SplitBefore + LiveAfter;
1784
1785      // Legally, without causing looping?
1786      bool Legal = !ProgressRequired || NewGaps < NumGaps;
1787
1788      if (Legal && MaxGap < llvm::huge_valf) {
1789        // Estimate the new spill weight. Each instruction reads or writes the
1790        // register. Conservatively assume there are no read-modify-write
1791        // instructions.
1792        //
1793        // Try to guess the size of the new interval.
1794        const float EstWeight = normalizeSpillWeight(blockFreq * (NewGaps + 1),
1795                                 Uses[SplitBefore].distance(Uses[SplitAfter]) +
1796                                 (LiveBefore + LiveAfter)*SlotIndex::InstrDist);
1797        // Would this split be possible to allocate?
1798        // Never allocate all gaps, we wouldn't be making progress.
1799        DEBUG(dbgs() << " w=" << EstWeight);
1800        if (EstWeight * Hysteresis >= MaxGap) {
1801          Shrink = false;
1802          float Diff = EstWeight - MaxGap;
1803          if (Diff > BestDiff) {
1804            DEBUG(dbgs() << " (best)");
1805            BestDiff = Hysteresis * Diff;
1806            BestBefore = SplitBefore;
1807            BestAfter = SplitAfter;
1808          }
1809        }
1810      }
1811
1812      // Try to shrink.
1813      if (Shrink) {
1814        if (++SplitBefore < SplitAfter) {
1815          DEBUG(dbgs() << " shrink\n");
1816          // Recompute the max when necessary.
1817          if (GapWeight[SplitBefore - 1] >= MaxGap) {
1818            MaxGap = GapWeight[SplitBefore];
1819            for (unsigned i = SplitBefore + 1; i != SplitAfter; ++i)
1820              MaxGap = std::max(MaxGap, GapWeight[i]);
1821          }
1822          continue;
1823        }
1824        MaxGap = 0;
1825      }
1826
1827      // Try to extend the interval.
1828      if (SplitAfter >= NumGaps) {
1829        DEBUG(dbgs() << " end\n");
1830        break;
1831      }
1832
1833      DEBUG(dbgs() << " extend\n");
1834      MaxGap = std::max(MaxGap, GapWeight[SplitAfter++]);
1835    }
1836  }
1837
1838  // Didn't find any candidates?
1839  if (BestBefore == NumGaps)
1840    return 0;
1841
1842  DEBUG(dbgs() << "Best local split range: " << Uses[BestBefore]
1843               << '-' << Uses[BestAfter] << ", " << BestDiff
1844               << ", " << (BestAfter - BestBefore + 1) << " instrs\n");
1845
1846  LiveRangeEdit LREdit(&VirtReg, NewVRegs, *MF, *LIS, VRM, this);
1847  SE->reset(LREdit);
1848
1849  SE->openIntv();
1850  SlotIndex SegStart = SE->enterIntvBefore(Uses[BestBefore]);
1851  SlotIndex SegStop  = SE->leaveIntvAfter(Uses[BestAfter]);
1852  SE->useIntv(SegStart, SegStop);
1853  SmallVector<unsigned, 8> IntvMap;
1854  SE->finish(&IntvMap);
1855  DebugVars->splitRegister(VirtReg.reg, LREdit.regs(), *LIS);
1856
1857  // If the new range has the same number of instructions as before, mark it as
1858  // RS_Split2 so the next split will be forced to make progress. Otherwise,
1859  // leave the new intervals as RS_New so they can compete.
1860  bool LiveBefore = BestBefore != 0 || BI.LiveIn;
1861  bool LiveAfter = BestAfter != NumGaps || BI.LiveOut;
1862  unsigned NewGaps = LiveBefore + BestAfter - BestBefore + LiveAfter;
1863  if (NewGaps >= NumGaps) {
1864    DEBUG(dbgs() << "Tagging non-progress ranges: ");
1865    assert(!ProgressRequired && "Didn't make progress when it was required.");
1866    for (unsigned i = 0, e = IntvMap.size(); i != e; ++i)
1867      if (IntvMap[i] == 1) {
1868        setStage(LIS->getInterval(LREdit.get(i)), RS_Split2);
1869        DEBUG(dbgs() << PrintReg(LREdit.get(i)));
1870      }
1871    DEBUG(dbgs() << '\n');
1872  }
1873  ++NumLocalSplits;
1874
1875  return 0;
1876}
1877
1878//===----------------------------------------------------------------------===//
1879//                          Live Range Splitting
1880//===----------------------------------------------------------------------===//
1881
1882/// trySplit - Try to split VirtReg or one of its interferences, making it
1883/// assignable.
1884/// @return Physreg when VirtReg may be assigned and/or new NewVRegs.
1885unsigned RAGreedy::trySplit(LiveInterval &VirtReg, AllocationOrder &Order,
1886                            SmallVectorImpl<unsigned>&NewVRegs) {
1887  // Ranges must be Split2 or less.
1888  if (getStage(VirtReg) >= RS_Spill)
1889    return 0;
1890
1891  // Local intervals are handled separately.
1892  if (LIS->intervalIsInOneMBB(VirtReg)) {
1893    NamedRegionTimer T("Local Splitting", TimerGroupName, TimePassesIsEnabled);
1894    SA->analyze(&VirtReg);
1895    unsigned PhysReg = tryLocalSplit(VirtReg, Order, NewVRegs);
1896    if (PhysReg || !NewVRegs.empty())
1897      return PhysReg;
1898    return tryInstructionSplit(VirtReg, Order, NewVRegs);
1899  }
1900
1901  NamedRegionTimer T("Global Splitting", TimerGroupName, TimePassesIsEnabled);
1902
1903  SA->analyze(&VirtReg);
1904
1905  // FIXME: SplitAnalysis may repair broken live ranges coming from the
1906  // coalescer. That may cause the range to become allocatable which means that
1907  // tryRegionSplit won't be making progress. This check should be replaced with
1908  // an assertion when the coalescer is fixed.
1909  if (SA->didRepairRange()) {
1910    // VirtReg has changed, so all cached queries are invalid.
1911    Matrix->invalidateVirtRegs();
1912    if (unsigned PhysReg = tryAssign(VirtReg, Order, NewVRegs))
1913      return PhysReg;
1914  }
1915
1916  // First try to split around a region spanning multiple blocks. RS_Split2
1917  // ranges already made dubious progress with region splitting, so they go
1918  // straight to single block splitting.
1919  if (getStage(VirtReg) < RS_Split2) {
1920    unsigned PhysReg = tryRegionSplit(VirtReg, Order, NewVRegs);
1921    if (PhysReg || !NewVRegs.empty())
1922      return PhysReg;
1923  }
1924
1925  // Then isolate blocks.
1926  return tryBlockSplit(VirtReg, Order, NewVRegs);
1927}
1928
1929//===----------------------------------------------------------------------===//
1930//                          Last Chance Recoloring
1931//===----------------------------------------------------------------------===//
1932
1933/// mayRecolorAllInterferences - Check if the virtual registers that
1934/// interfere with \p VirtReg on \p PhysReg (or one of its aliases) may be
1935/// recolored to free \p PhysReg.
1936/// When true is returned, \p RecoloringCandidates has been augmented with all
1937/// the live intervals that need to be recolored in order to free \p PhysReg
1938/// for \p VirtReg.
1939/// \p FixedRegisters contains all the virtual registers that cannot be
1940/// recolored.
1941bool
1942RAGreedy::mayRecolorAllInterferences(unsigned PhysReg, LiveInterval &VirtReg,
1943                                     SmallLISet &RecoloringCandidates,
1944                                     const SmallVirtRegSet &FixedRegisters) {
1945  const TargetRegisterClass *CurRC = MRI->getRegClass(VirtReg.reg);
1946
1947  for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
1948    LiveIntervalUnion::Query &Q = Matrix->query(VirtReg, *Units);
1949    // If there is LastChanceRecoloringMaxInterference or more interferences,
1950    // chances are one would not be recolorable.
1951    if (Q.collectInterferingVRegs(LastChanceRecoloringMaxInterference) >=
1952        LastChanceRecoloringMaxInterference && !ExhaustiveSearch) {
1953      DEBUG(dbgs() << "Early abort: too many interferences.\n");
1954      CutOffInfo |= CO_Interf;
1955      return false;
1956    }
1957    for (unsigned i = Q.interferingVRegs().size(); i; --i) {
1958      LiveInterval *Intf = Q.interferingVRegs()[i - 1];
1959      // If Intf is done and sit on the same register class as VirtReg,
1960      // it would not be recolorable as it is in the same state as VirtReg.
1961      if ((getStage(*Intf) == RS_Done &&
1962           MRI->getRegClass(Intf->reg) == CurRC) ||
1963          FixedRegisters.count(Intf->reg)) {
1964        DEBUG(dbgs() << "Early abort: the inteference is not recolorable.\n");
1965        return false;
1966      }
1967      RecoloringCandidates.insert(Intf);
1968    }
1969  }
1970  return true;
1971}
1972
1973/// tryLastChanceRecoloring - Try to assign a color to \p VirtReg by recoloring
1974/// its interferences.
1975/// Last chance recoloring chooses a color for \p VirtReg and recolors every
1976/// virtual register that was using it. The recoloring process may recursively
1977/// use the last chance recoloring. Therefore, when a virtual register has been
1978/// assigned a color by this mechanism, it is marked as Fixed, i.e., it cannot
1979/// be last-chance-recolored again during this recoloring "session".
1980/// E.g.,
1981/// Let
1982/// vA can use {R1, R2    }
1983/// vB can use {    R2, R3}
1984/// vC can use {R1        }
1985/// Where vA, vB, and vC cannot be split anymore (they are reloads for
1986/// instance) and they all interfere.
1987///
1988/// vA is assigned R1
1989/// vB is assigned R2
1990/// vC tries to evict vA but vA is already done.
1991/// Regular register allocation fails.
1992///
1993/// Last chance recoloring kicks in:
1994/// vC does as if vA was evicted => vC uses R1.
1995/// vC is marked as fixed.
1996/// vA needs to find a color.
1997/// None are available.
1998/// vA cannot evict vC: vC is a fixed virtual register now.
1999/// vA does as if vB was evicted => vA uses R2.
2000/// vB needs to find a color.
2001/// R3 is available.
2002/// Recoloring => vC = R1, vA = R2, vB = R3
2003///
2004/// \p Order defines the preferred allocation order for \p VirtReg.
2005/// \p NewRegs will contain any new virtual register that have been created
2006/// (split, spill) during the process and that must be assigned.
2007/// \p FixedRegisters contains all the virtual registers that cannot be
2008/// recolored.
2009/// \p Depth gives the current depth of the last chance recoloring.
2010/// \return a physical register that can be used for VirtReg or ~0u if none
2011/// exists.
2012unsigned RAGreedy::tryLastChanceRecoloring(LiveInterval &VirtReg,
2013                                           AllocationOrder &Order,
2014                                           SmallVectorImpl<unsigned> &NewVRegs,
2015                                           SmallVirtRegSet &FixedRegisters,
2016                                           unsigned Depth) {
2017  DEBUG(dbgs() << "Try last chance recoloring for " << VirtReg << '\n');
2018  // Ranges must be Done.
2019  assert((getStage(VirtReg) >= RS_Done || !VirtReg.isSpillable()) &&
2020         "Last chance recoloring should really be last chance");
2021  // Set the max depth to LastChanceRecoloringMaxDepth.
2022  // We may want to reconsider that if we end up with a too large search space
2023  // for target with hundreds of registers.
2024  // Indeed, in that case we may want to cut the search space earlier.
2025  if (Depth >= LastChanceRecoloringMaxDepth && !ExhaustiveSearch) {
2026    DEBUG(dbgs() << "Abort because max depth has been reached.\n");
2027    CutOffInfo |= CO_Depth;
2028    return ~0u;
2029  }
2030
2031  // Set of Live intervals that will need to be recolored.
2032  SmallLISet RecoloringCandidates;
2033  // Record the original mapping virtual register to physical register in case
2034  // the recoloring fails.
2035  DenseMap<unsigned, unsigned> VirtRegToPhysReg;
2036  // Mark VirtReg as fixed, i.e., it will not be recolored pass this point in
2037  // this recoloring "session".
2038  FixedRegisters.insert(VirtReg.reg);
2039
2040  Order.rewind();
2041  while (unsigned PhysReg = Order.next()) {
2042    DEBUG(dbgs() << "Try to assign: " << VirtReg << " to "
2043                 << PrintReg(PhysReg, TRI) << '\n');
2044    RecoloringCandidates.clear();
2045    VirtRegToPhysReg.clear();
2046
2047    // It is only possible to recolor virtual register interference.
2048    if (Matrix->checkInterference(VirtReg, PhysReg) >
2049        LiveRegMatrix::IK_VirtReg) {
2050      DEBUG(dbgs() << "Some inteferences are not with virtual registers.\n");
2051
2052      continue;
2053    }
2054
2055    // Early give up on this PhysReg if it is obvious we cannot recolor all
2056    // the interferences.
2057    if (!mayRecolorAllInterferences(PhysReg, VirtReg, RecoloringCandidates,
2058                                    FixedRegisters)) {
2059      DEBUG(dbgs() << "Some inteferences cannot be recolored.\n");
2060      continue;
2061    }
2062
2063    // RecoloringCandidates contains all the virtual registers that interfer
2064    // with VirtReg on PhysReg (or one of its aliases).
2065    // Enqueue them for recoloring and perform the actual recoloring.
2066    PQueue RecoloringQueue;
2067    for (SmallLISet::iterator It = RecoloringCandidates.begin(),
2068                              EndIt = RecoloringCandidates.end();
2069         It != EndIt; ++It) {
2070      unsigned ItVirtReg = (*It)->reg;
2071      enqueue(RecoloringQueue, *It);
2072      assert(VRM->hasPhys(ItVirtReg) &&
2073             "Interferences are supposed to be with allocated vairables");
2074
2075      // Record the current allocation.
2076      VirtRegToPhysReg[ItVirtReg] = VRM->getPhys(ItVirtReg);
2077      // unset the related struct.
2078      Matrix->unassign(**It);
2079    }
2080
2081    // Do as if VirtReg was assigned to PhysReg so that the underlying
2082    // recoloring has the right information about the interferes and
2083    // available colors.
2084    Matrix->assign(VirtReg, PhysReg);
2085
2086    // Save the current recoloring state.
2087    // If we cannot recolor all the interferences, we will have to start again
2088    // at this point for the next physical register.
2089    SmallVirtRegSet SaveFixedRegisters(FixedRegisters);
2090    if (tryRecoloringCandidates(RecoloringQueue, NewVRegs, FixedRegisters,
2091                                Depth)) {
2092      // Do not mess up with the global assignment process.
2093      // I.e., VirtReg must be unassigned.
2094      Matrix->unassign(VirtReg);
2095      return PhysReg;
2096    }
2097
2098    DEBUG(dbgs() << "Fail to assign: " << VirtReg << " to "
2099                 << PrintReg(PhysReg, TRI) << '\n');
2100
2101    // The recoloring attempt failed, undo the changes.
2102    FixedRegisters = SaveFixedRegisters;
2103    Matrix->unassign(VirtReg);
2104
2105    for (SmallLISet::iterator It = RecoloringCandidates.begin(),
2106                              EndIt = RecoloringCandidates.end();
2107         It != EndIt; ++It) {
2108      unsigned ItVirtReg = (*It)->reg;
2109      if (VRM->hasPhys(ItVirtReg))
2110        Matrix->unassign(**It);
2111      Matrix->assign(**It, VirtRegToPhysReg[ItVirtReg]);
2112    }
2113  }
2114
2115  // Last chance recoloring did not worked either, give up.
2116  return ~0u;
2117}
2118
2119/// tryRecoloringCandidates - Try to assign a new color to every register
2120/// in \RecoloringQueue.
2121/// \p NewRegs will contain any new virtual register created during the
2122/// recoloring process.
2123/// \p FixedRegisters[in/out] contains all the registers that have been
2124/// recolored.
2125/// \return true if all virtual registers in RecoloringQueue were successfully
2126/// recolored, false otherwise.
2127bool RAGreedy::tryRecoloringCandidates(PQueue &RecoloringQueue,
2128                                       SmallVectorImpl<unsigned> &NewVRegs,
2129                                       SmallVirtRegSet &FixedRegisters,
2130                                       unsigned Depth) {
2131  while (!RecoloringQueue.empty()) {
2132    LiveInterval *LI = dequeue(RecoloringQueue);
2133    DEBUG(dbgs() << "Try to recolor: " << *LI << '\n');
2134    unsigned PhysReg;
2135    PhysReg = selectOrSplitImpl(*LI, NewVRegs, FixedRegisters, Depth + 1);
2136    if (PhysReg == ~0u || !PhysReg)
2137      return false;
2138    DEBUG(dbgs() << "Recoloring of " << *LI
2139                 << " succeeded with: " << PrintReg(PhysReg, TRI) << '\n');
2140    Matrix->assign(*LI, PhysReg);
2141    FixedRegisters.insert(LI->reg);
2142  }
2143  return true;
2144}
2145
2146//===----------------------------------------------------------------------===//
2147//                            Main Entry Point
2148//===----------------------------------------------------------------------===//
2149
2150unsigned RAGreedy::selectOrSplit(LiveInterval &VirtReg,
2151                                 SmallVectorImpl<unsigned> &NewVRegs) {
2152  CutOffInfo = CO_None;
2153  LLVMContext &Ctx = MF->getFunction()->getContext();
2154  SmallVirtRegSet FixedRegisters;
2155  unsigned Reg = selectOrSplitImpl(VirtReg, NewVRegs, FixedRegisters);
2156  if (Reg == ~0U && (CutOffInfo != CO_None)) {
2157    uint8_t CutOffEncountered = CutOffInfo & (CO_Depth | CO_Interf);
2158    if (CutOffEncountered == CO_Depth)
2159      Ctx.emitError("register allocation failed: maximum depth for recoloring "
2160                    "reached. Use -fexhaustive-register-search to skip "
2161                    "cutoffs");
2162    else if (CutOffEncountered == CO_Interf)
2163      Ctx.emitError("register allocation failed: maximum interference for "
2164                    "recoloring reached. Use -fexhaustive-register-search "
2165                    "to skip cutoffs");
2166    else if (CutOffEncountered == (CO_Depth | CO_Interf))
2167      Ctx.emitError("register allocation failed: maximum interference and "
2168                    "depth for recoloring reached. Use "
2169                    "-fexhaustive-register-search to skip cutoffs");
2170  }
2171  return Reg;
2172}
2173
2174/// Using a CSR for the first time has a cost because it causes push|pop
2175/// to be added to prologue|epilogue. Splitting a cold section of the live
2176/// range can have lower cost than using the CSR for the first time;
2177/// Spilling a live range in the cold path can have lower cost than using
2178/// the CSR for the first time. Returns the physical register if we decide
2179/// to use the CSR; otherwise return 0.
2180unsigned RAGreedy::tryAssignCSRFirstTime(LiveInterval &VirtReg,
2181                                         AllocationOrder &Order,
2182                                         unsigned PhysReg,
2183                                         unsigned &CostPerUseLimit,
2184                                         SmallVectorImpl<unsigned> &NewVRegs) {
2185  if (getStage(VirtReg) == RS_Spill && VirtReg.isSpillable()) {
2186    // We choose spill over using the CSR for the first time if the spill cost
2187    // is lower than CSRCost.
2188    SA->analyze(&VirtReg);
2189    if (calcSpillCost() >= CSRCost)
2190      return PhysReg;
2191
2192    // We are going to spill, set CostPerUseLimit to 1 to make sure that
2193    // we will not use a callee-saved register in tryEvict.
2194    CostPerUseLimit = 1;
2195    return 0;
2196  }
2197  if (getStage(VirtReg) < RS_Split) {
2198    // We choose pre-splitting over using the CSR for the first time if
2199    // the cost of splitting is lower than CSRCost.
2200    SA->analyze(&VirtReg);
2201    unsigned NumCands = 0;
2202    BlockFrequency BestCost = CSRCost; // Don't modify CSRCost.
2203    unsigned BestCand = calculateRegionSplitCost(VirtReg, Order, BestCost,
2204                                                 NumCands, true /*IgnoreCSR*/);
2205    if (BestCand == NoCand)
2206      // Use the CSR if we can't find a region split below CSRCost.
2207      return PhysReg;
2208
2209    // Perform the actual pre-splitting.
2210    doRegionSplit(VirtReg, BestCand, false/*HasCompact*/, NewVRegs);
2211    return 0;
2212  }
2213  return PhysReg;
2214}
2215
2216void RAGreedy::initializeCSRCost() {
2217  // We use the larger one out of the command-line option and the value report
2218  // by TRI.
2219  CSRCost = BlockFrequency(
2220      std::max((unsigned)CSRFirstTimeCost, TRI->getCSRFirstUseCost()));
2221  if (!CSRCost.getFrequency())
2222    return;
2223
2224  // Raw cost is relative to Entry == 2^14; scale it appropriately.
2225  uint64_t ActualEntry = MBFI->getEntryFreq();
2226  if (!ActualEntry) {
2227    CSRCost = 0;
2228    return;
2229  }
2230  uint64_t FixedEntry = 1 << 14;
2231  if (ActualEntry < FixedEntry)
2232    CSRCost *= BranchProbability(ActualEntry, FixedEntry);
2233  else if (ActualEntry <= UINT32_MAX)
2234    // Invert the fraction and divide.
2235    CSRCost /= BranchProbability(FixedEntry, ActualEntry);
2236  else
2237    // Can't use BranchProbability in general, since it takes 32-bit numbers.
2238    CSRCost = CSRCost.getFrequency() * (ActualEntry / FixedEntry);
2239}
2240
2241unsigned RAGreedy::selectOrSplitImpl(LiveInterval &VirtReg,
2242                                     SmallVectorImpl<unsigned> &NewVRegs,
2243                                     SmallVirtRegSet &FixedRegisters,
2244                                     unsigned Depth) {
2245  unsigned CostPerUseLimit = ~0u;
2246  // First try assigning a free register.
2247  AllocationOrder Order(VirtReg.reg, *VRM, RegClassInfo);
2248  if (unsigned PhysReg = tryAssign(VirtReg, Order, NewVRegs)) {
2249    // We check other options if we are using a CSR for the first time.
2250    bool CSRFirstUse = false;
2251    if (unsigned CSR = RegClassInfo.getLastCalleeSavedAlias(PhysReg))
2252      if (!MRI->isPhysRegUsed(CSR))
2253        CSRFirstUse = true;
2254
2255    // When NewVRegs is not empty, we may have made decisions such as evicting
2256    // a virtual register, go with the earlier decisions and use the physical
2257    // register.
2258    if (CSRCost.getFrequency() && CSRFirstUse && NewVRegs.empty()) {
2259      unsigned CSRReg = tryAssignCSRFirstTime(VirtReg, Order, PhysReg,
2260                                              CostPerUseLimit, NewVRegs);
2261      if (CSRReg || !NewVRegs.empty())
2262        // Return now if we decide to use a CSR or create new vregs due to
2263        // pre-splitting.
2264        return CSRReg;
2265    } else
2266      return PhysReg;
2267  }
2268
2269  LiveRangeStage Stage = getStage(VirtReg);
2270  DEBUG(dbgs() << StageName[Stage]
2271               << " Cascade " << ExtraRegInfo[VirtReg.reg].Cascade << '\n');
2272
2273  // Try to evict a less worthy live range, but only for ranges from the primary
2274  // queue. The RS_Split ranges already failed to do this, and they should not
2275  // get a second chance until they have been split.
2276  if (Stage != RS_Split)
2277    if (unsigned PhysReg = tryEvict(VirtReg, Order, NewVRegs, CostPerUseLimit))
2278      return PhysReg;
2279
2280  assert(NewVRegs.empty() && "Cannot append to existing NewVRegs");
2281
2282  // The first time we see a live range, don't try to split or spill.
2283  // Wait until the second time, when all smaller ranges have been allocated.
2284  // This gives a better picture of the interference to split around.
2285  if (Stage < RS_Split) {
2286    setStage(VirtReg, RS_Split);
2287    DEBUG(dbgs() << "wait for second round\n");
2288    NewVRegs.push_back(VirtReg.reg);
2289    return 0;
2290  }
2291
2292  // If we couldn't allocate a register from spilling, there is probably some
2293  // invalid inline assembly. The base class wil report it.
2294  if (Stage >= RS_Done || !VirtReg.isSpillable())
2295    return tryLastChanceRecoloring(VirtReg, Order, NewVRegs, FixedRegisters,
2296                                   Depth);
2297
2298  // Try splitting VirtReg or interferences.
2299  unsigned PhysReg = trySplit(VirtReg, Order, NewVRegs);
2300  if (PhysReg || !NewVRegs.empty())
2301    return PhysReg;
2302
2303  // Finally spill VirtReg itself.
2304  NamedRegionTimer T("Spiller", TimerGroupName, TimePassesIsEnabled);
2305  LiveRangeEdit LRE(&VirtReg, NewVRegs, *MF, *LIS, VRM, this);
2306  spiller().spill(LRE);
2307  setStage(NewVRegs.begin(), NewVRegs.end(), RS_Done);
2308
2309  if (VerifyEnabled)
2310    MF->verify(this, "After spilling");
2311
2312  // The live virtual register requesting allocation was spilled, so tell
2313  // the caller not to allocate anything during this round.
2314  return 0;
2315}
2316
2317bool RAGreedy::runOnMachineFunction(MachineFunction &mf) {
2318  DEBUG(dbgs() << "********** GREEDY REGISTER ALLOCATION **********\n"
2319               << "********** Function: " << mf.getName() << '\n');
2320
2321  MF = &mf;
2322  const TargetMachine &TM = MF->getTarget();
2323  TRI = TM.getRegisterInfo();
2324  TII = TM.getInstrInfo();
2325  RCI.runOnMachineFunction(mf);
2326
2327  EnableLocalReassign = EnableLocalReassignment ||
2328    TM.getSubtargetImpl()->enableRALocalReassignment(TM.getOptLevel());
2329
2330  if (VerifyEnabled)
2331    MF->verify(this, "Before greedy register allocator");
2332
2333  RegAllocBase::init(getAnalysis<VirtRegMap>(),
2334                     getAnalysis<LiveIntervals>(),
2335                     getAnalysis<LiveRegMatrix>());
2336  Indexes = &getAnalysis<SlotIndexes>();
2337  MBFI = &getAnalysis<MachineBlockFrequencyInfo>();
2338  DomTree = &getAnalysis<MachineDominatorTree>();
2339  SpillerInstance.reset(createInlineSpiller(*this, *MF, *VRM));
2340  Loops = &getAnalysis<MachineLoopInfo>();
2341  Bundles = &getAnalysis<EdgeBundles>();
2342  SpillPlacer = &getAnalysis<SpillPlacement>();
2343  DebugVars = &getAnalysis<LiveDebugVariables>();
2344
2345  initializeCSRCost();
2346
2347  calculateSpillWeightsAndHints(*LIS, mf, *Loops, *MBFI);
2348
2349  DEBUG(LIS->dump());
2350
2351  SA.reset(new SplitAnalysis(*VRM, *LIS, *Loops));
2352  SE.reset(new SplitEditor(*SA, *LIS, *VRM, *DomTree, *MBFI));
2353  ExtraRegInfo.clear();
2354  ExtraRegInfo.resize(MRI->getNumVirtRegs());
2355  NextCascade = 1;
2356  IntfCache.init(MF, Matrix->getLiveUnions(), Indexes, LIS, TRI);
2357  GlobalCand.resize(32);  // This will grow as needed.
2358
2359  allocatePhysRegs();
2360  releaseMemory();
2361  return true;
2362}
2363