~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/CodeGen/RegAllocGreedy.cpp

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

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