RegAllocBasic.cpp revision fdf16ca44f130afe80c57481d0c08130aa08cc09
1//===-- RegAllocBasic.cpp - basic 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 RABasic function pass, which provides a minimal
11// implementation of the basic register allocator.
12//
13//===----------------------------------------------------------------------===//
14
15#define DEBUG_TYPE "regalloc"
16#include "RegAllocBase.h"
17#include "LiveDebugVariables.h"
18#include "LiveIntervalUnion.h"
19#include "LiveRangeEdit.h"
20#include "RenderMachineFunction.h"
21#include "Spiller.h"
22#include "VirtRegMap.h"
23#include "RegisterCoalescer.h"
24#include "llvm/ADT/OwningPtr.h"
25#include "llvm/ADT/Statistic.h"
26#include "llvm/Analysis/AliasAnalysis.h"
27#include "llvm/Function.h"
28#include "llvm/PassAnalysisSupport.h"
29#include "llvm/CodeGen/CalcSpillWeights.h"
30#include "llvm/CodeGen/LiveIntervalAnalysis.h"
31#include "llvm/CodeGen/LiveStackAnalysis.h"
32#include "llvm/CodeGen/MachineFunctionPass.h"
33#include "llvm/CodeGen/MachineInstr.h"
34#include "llvm/CodeGen/MachineLoopInfo.h"
35#include "llvm/CodeGen/MachineRegisterInfo.h"
36#include "llvm/CodeGen/Passes.h"
37#include "llvm/CodeGen/RegAllocRegistry.h"
38#include "llvm/Target/TargetMachine.h"
39#include "llvm/Target/TargetOptions.h"
40#include "llvm/Target/TargetRegisterInfo.h"
41#ifndef NDEBUG
42#include "llvm/ADT/SparseBitVector.h"
43#endif
44#include "llvm/Support/Debug.h"
45#include "llvm/Support/ErrorHandling.h"
46#include "llvm/Support/raw_ostream.h"
47#include "llvm/Support/Timer.h"
48
49#include <cstdlib>
50#include <queue>
51
52using namespace llvm;
53
54STATISTIC(NumAssigned     , "Number of registers assigned");
55STATISTIC(NumUnassigned   , "Number of registers unassigned");
56STATISTIC(NumNewQueued    , "Number of new live ranges queued");
57
58static RegisterRegAlloc basicRegAlloc("basic", "basic register allocator",
59                                      createBasicRegisterAllocator);
60
61// Temporary verification option until we can put verification inside
62// MachineVerifier.
63static cl::opt<bool, true>
64VerifyRegAlloc("verify-regalloc", cl::location(RegAllocBase::VerifyEnabled),
65               cl::desc("Verify during register allocation"));
66
67const char *RegAllocBase::TimerGroupName = "Register Allocation";
68bool RegAllocBase::VerifyEnabled = false;
69
70namespace {
71  struct CompSpillWeight {
72    bool operator()(LiveInterval *A, LiveInterval *B) const {
73      return A->weight < B->weight;
74    }
75  };
76}
77
78namespace {
79/// RABasic provides a minimal implementation of the basic register allocation
80/// algorithm. It prioritizes live virtual registers by spill weight and spills
81/// whenever a register is unavailable. This is not practical in production but
82/// provides a useful baseline both for measuring other allocators and comparing
83/// the speed of the basic algorithm against other styles of allocators.
84class RABasic : public MachineFunctionPass, public RegAllocBase
85{
86  // context
87  MachineFunction *MF;
88
89  // analyses
90  LiveStacks *LS;
91  RenderMachineFunction *RMF;
92
93  // state
94  std::auto_ptr<Spiller> SpillerInstance;
95  std::priority_queue<LiveInterval*, std::vector<LiveInterval*>,
96                      CompSpillWeight> Queue;
97public:
98  RABasic();
99
100  /// Return the pass name.
101  virtual const char* getPassName() const {
102    return "Basic Register Allocator";
103  }
104
105  /// RABasic analysis usage.
106  virtual void getAnalysisUsage(AnalysisUsage &AU) const;
107
108  virtual void releaseMemory();
109
110  virtual Spiller &spiller() { return *SpillerInstance; }
111
112  virtual float getPriority(LiveInterval *LI) { return LI->weight; }
113
114  virtual void enqueue(LiveInterval *LI) {
115    Queue.push(LI);
116  }
117
118  virtual LiveInterval *dequeue() {
119    if (Queue.empty())
120      return 0;
121    LiveInterval *LI = Queue.top();
122    Queue.pop();
123    return LI;
124  }
125
126  virtual unsigned selectOrSplit(LiveInterval &VirtReg,
127                                 SmallVectorImpl<LiveInterval*> &SplitVRegs);
128
129  /// Perform register allocation.
130  virtual bool runOnMachineFunction(MachineFunction &mf);
131
132  static char ID;
133};
134
135char RABasic::ID = 0;
136
137} // end anonymous namespace
138
139RABasic::RABasic(): MachineFunctionPass(ID) {
140  initializeLiveDebugVariablesPass(*PassRegistry::getPassRegistry());
141  initializeLiveIntervalsPass(*PassRegistry::getPassRegistry());
142  initializeSlotIndexesPass(*PassRegistry::getPassRegistry());
143  initializeStrongPHIEliminationPass(*PassRegistry::getPassRegistry());
144  initializeRegisterCoalescerAnalysisGroup(*PassRegistry::getPassRegistry());
145  initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry());
146  initializeLiveStacksPass(*PassRegistry::getPassRegistry());
147  initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry());
148  initializeMachineLoopInfoPass(*PassRegistry::getPassRegistry());
149  initializeVirtRegMapPass(*PassRegistry::getPassRegistry());
150  initializeRenderMachineFunctionPass(*PassRegistry::getPassRegistry());
151}
152
153void RABasic::getAnalysisUsage(AnalysisUsage &AU) const {
154  AU.setPreservesCFG();
155  AU.addRequired<AliasAnalysis>();
156  AU.addPreserved<AliasAnalysis>();
157  AU.addRequired<LiveIntervals>();
158  AU.addPreserved<SlotIndexes>();
159  AU.addRequired<LiveDebugVariables>();
160  AU.addPreserved<LiveDebugVariables>();
161  if (StrongPHIElim)
162    AU.addRequiredID(StrongPHIEliminationID);
163  AU.addRequiredTransitive<RegisterCoalescer>();
164  AU.addRequired<CalculateSpillWeights>();
165  AU.addRequired<LiveStacks>();
166  AU.addPreserved<LiveStacks>();
167  AU.addRequiredID(MachineDominatorsID);
168  AU.addPreservedID(MachineDominatorsID);
169  AU.addRequired<MachineLoopInfo>();
170  AU.addPreserved<MachineLoopInfo>();
171  AU.addRequired<VirtRegMap>();
172  AU.addPreserved<VirtRegMap>();
173  DEBUG(AU.addRequired<RenderMachineFunction>());
174  MachineFunctionPass::getAnalysisUsage(AU);
175}
176
177void RABasic::releaseMemory() {
178  SpillerInstance.reset(0);
179  RegAllocBase::releaseMemory();
180}
181
182#ifndef NDEBUG
183// Verify each LiveIntervalUnion.
184void RegAllocBase::verify() {
185  LiveVirtRegBitSet VisitedVRegs;
186  OwningArrayPtr<LiveVirtRegBitSet>
187    unionVRegs(new LiveVirtRegBitSet[PhysReg2LiveUnion.numRegs()]);
188
189  // Verify disjoint unions.
190  for (unsigned PhysReg = 0; PhysReg < PhysReg2LiveUnion.numRegs(); ++PhysReg) {
191    DEBUG(PhysReg2LiveUnion[PhysReg].print(dbgs(), TRI));
192    LiveVirtRegBitSet &VRegs = unionVRegs[PhysReg];
193    PhysReg2LiveUnion[PhysReg].verify(VRegs);
194    // Union + intersection test could be done efficiently in one pass, but
195    // don't add a method to SparseBitVector unless we really need it.
196    assert(!VisitedVRegs.intersects(VRegs) && "vreg in multiple unions");
197    VisitedVRegs |= VRegs;
198  }
199
200  // Verify vreg coverage.
201  for (LiveIntervals::iterator liItr = LIS->begin(), liEnd = LIS->end();
202       liItr != liEnd; ++liItr) {
203    unsigned reg = liItr->first;
204    if (TargetRegisterInfo::isPhysicalRegister(reg)) continue;
205    if (!VRM->hasPhys(reg)) continue; // spilled?
206    unsigned PhysReg = VRM->getPhys(reg);
207    if (!unionVRegs[PhysReg].test(reg)) {
208      dbgs() << "LiveVirtReg " << reg << " not in union " <<
209        TRI->getName(PhysReg) << "\n";
210      llvm_unreachable("unallocated live vreg");
211    }
212  }
213  // FIXME: I'm not sure how to verify spilled intervals.
214}
215#endif //!NDEBUG
216
217//===----------------------------------------------------------------------===//
218//                         RegAllocBase Implementation
219//===----------------------------------------------------------------------===//
220
221// Instantiate a LiveIntervalUnion for each physical register.
222void RegAllocBase::LiveUnionArray::init(LiveIntervalUnion::Allocator &allocator,
223                                        unsigned NRegs) {
224  NumRegs = NRegs;
225  Array =
226    static_cast<LiveIntervalUnion*>(malloc(sizeof(LiveIntervalUnion)*NRegs));
227  for (unsigned r = 0; r != NRegs; ++r)
228    new(Array + r) LiveIntervalUnion(r, allocator);
229}
230
231void RegAllocBase::init(VirtRegMap &vrm, LiveIntervals &lis) {
232  NamedRegionTimer T("Initialize", TimerGroupName, TimePassesIsEnabled);
233  TRI = &vrm.getTargetRegInfo();
234  MRI = &vrm.getRegInfo();
235  VRM = &vrm;
236  LIS = &lis;
237  RegClassInfo.runOnMachineFunction(vrm.getMachineFunction());
238
239  const unsigned NumRegs = TRI->getNumRegs();
240  if (NumRegs != PhysReg2LiveUnion.numRegs()) {
241    PhysReg2LiveUnion.init(UnionAllocator, NumRegs);
242    // Cache an interferece query for each physical reg
243    Queries.reset(new LiveIntervalUnion::Query[PhysReg2LiveUnion.numRegs()]);
244  }
245}
246
247void RegAllocBase::LiveUnionArray::clear() {
248  if (!Array)
249    return;
250  for (unsigned r = 0; r != NumRegs; ++r)
251    Array[r].~LiveIntervalUnion();
252  free(Array);
253  NumRegs =  0;
254  Array = 0;
255}
256
257void RegAllocBase::releaseMemory() {
258  for (unsigned r = 0, e = PhysReg2LiveUnion.numRegs(); r != e; ++r)
259    PhysReg2LiveUnion[r].clear();
260}
261
262// Visit all the live registers. If they are already assigned to a physical
263// register, unify them with the corresponding LiveIntervalUnion, otherwise push
264// them on the priority queue for later assignment.
265void RegAllocBase::seedLiveRegs() {
266  NamedRegionTimer T("Seed Live Regs", TimerGroupName, TimePassesIsEnabled);
267  for (LiveIntervals::iterator I = LIS->begin(), E = LIS->end(); I != E; ++I) {
268    unsigned RegNum = I->first;
269    LiveInterval &VirtReg = *I->second;
270    if (TargetRegisterInfo::isPhysicalRegister(RegNum))
271      PhysReg2LiveUnion[RegNum].unify(VirtReg);
272    else
273      enqueue(&VirtReg);
274  }
275}
276
277void RegAllocBase::assign(LiveInterval &VirtReg, unsigned PhysReg) {
278  DEBUG(dbgs() << "assigning " << PrintReg(VirtReg.reg, TRI)
279               << " to " << PrintReg(PhysReg, TRI) << '\n');
280  assert(!VRM->hasPhys(VirtReg.reg) && "Duplicate VirtReg assignment");
281  VRM->assignVirt2Phys(VirtReg.reg, PhysReg);
282  MRI->setPhysRegUsed(PhysReg);
283  PhysReg2LiveUnion[PhysReg].unify(VirtReg);
284  ++NumAssigned;
285}
286
287void RegAllocBase::unassign(LiveInterval &VirtReg, unsigned PhysReg) {
288  DEBUG(dbgs() << "unassigning " << PrintReg(VirtReg.reg, TRI)
289               << " from " << PrintReg(PhysReg, TRI) << '\n');
290  assert(VRM->getPhys(VirtReg.reg) == PhysReg && "Inconsistent unassign");
291  PhysReg2LiveUnion[PhysReg].extract(VirtReg);
292  VRM->clearVirt(VirtReg.reg);
293  ++NumUnassigned;
294}
295
296// Top-level driver to manage the queue of unassigned VirtRegs and call the
297// selectOrSplit implementation.
298void RegAllocBase::allocatePhysRegs() {
299  seedLiveRegs();
300
301  // Continue assigning vregs one at a time to available physical registers.
302  while (LiveInterval *VirtReg = dequeue()) {
303    assert(!VRM->hasPhys(VirtReg->reg) && "Register already assigned");
304
305    // Unused registers can appear when the spiller coalesces snippets.
306    if (MRI->reg_nodbg_empty(VirtReg->reg)) {
307      DEBUG(dbgs() << "Dropping unused " << *VirtReg << '\n');
308      LIS->removeInterval(VirtReg->reg);
309      continue;
310    }
311
312    // Invalidate all interference queries, live ranges could have changed.
313    invalidateVirtRegs();
314
315    // selectOrSplit requests the allocator to return an available physical
316    // register if possible and populate a list of new live intervals that
317    // result from splitting.
318    DEBUG(dbgs() << "\nselectOrSplit "
319                 << MRI->getRegClass(VirtReg->reg)->getName()
320                 << ':' << *VirtReg << '\n');
321    typedef SmallVector<LiveInterval*, 4> VirtRegVec;
322    VirtRegVec SplitVRegs;
323    unsigned AvailablePhysReg = selectOrSplit(*VirtReg, SplitVRegs);
324
325    if (AvailablePhysReg == ~0u) {
326      // selectOrSplit failed to find a register!
327      std::string msg;
328      raw_string_ostream Msg(msg);
329      Msg << "Ran out of registers during register allocation!"
330             "\nCannot allocate: " << *VirtReg;
331      for (MachineRegisterInfo::reg_iterator I = MRI->reg_begin(VirtReg->reg);
332      MachineInstr *MI = I.skipInstruction();) {
333        if (!MI->isInlineAsm())
334          continue;
335        Msg << "\nPlease check your inline asm statement for "
336          "invalid constraints:\n";
337        MI->print(Msg, &VRM->getMachineFunction().getTarget());
338      }
339      report_fatal_error(Msg.str());
340    }
341
342    if (AvailablePhysReg)
343      assign(*VirtReg, AvailablePhysReg);
344
345    for (VirtRegVec::iterator I = SplitVRegs.begin(), E = SplitVRegs.end();
346         I != E; ++I) {
347      LiveInterval *SplitVirtReg = *I;
348      assert(!VRM->hasPhys(SplitVirtReg->reg) && "Register already assigned");
349      if (MRI->reg_nodbg_empty(SplitVirtReg->reg)) {
350        DEBUG(dbgs() << "not queueing unused  " << *SplitVirtReg << '\n');
351        LIS->removeInterval(SplitVirtReg->reg);
352        continue;
353      }
354      DEBUG(dbgs() << "queuing new interval: " << *SplitVirtReg << "\n");
355      assert(TargetRegisterInfo::isVirtualRegister(SplitVirtReg->reg) &&
356             "expect split value in virtual register");
357      enqueue(SplitVirtReg);
358      ++NumNewQueued;
359    }
360  }
361}
362
363// Check if this live virtual register interferes with a physical register. If
364// not, then check for interference on each register that aliases with the
365// physical register. Return the interfering register.
366unsigned RegAllocBase::checkPhysRegInterference(LiveInterval &VirtReg,
367                                                unsigned PhysReg) {
368  for (const unsigned *AliasI = TRI->getOverlaps(PhysReg); *AliasI; ++AliasI)
369    if (query(VirtReg, *AliasI).checkInterference())
370      return *AliasI;
371  return 0;
372}
373
374// Helper for spillInteferences() that spills all interfering vregs currently
375// assigned to this physical register.
376void RegAllocBase::spillReg(LiveInterval& VirtReg, unsigned PhysReg,
377                            SmallVectorImpl<LiveInterval*> &SplitVRegs) {
378  LiveIntervalUnion::Query &Q = query(VirtReg, PhysReg);
379  assert(Q.seenAllInterferences() && "need collectInterferences()");
380  const SmallVectorImpl<LiveInterval*> &PendingSpills = Q.interferingVRegs();
381
382  for (SmallVectorImpl<LiveInterval*>::const_iterator I = PendingSpills.begin(),
383         E = PendingSpills.end(); I != E; ++I) {
384    LiveInterval &SpilledVReg = **I;
385    DEBUG(dbgs() << "extracting from " <<
386          TRI->getName(PhysReg) << " " << SpilledVReg << '\n');
387
388    // Deallocate the interfering vreg by removing it from the union.
389    // A LiveInterval instance may not be in a union during modification!
390    unassign(SpilledVReg, PhysReg);
391
392    // Spill the extracted interval.
393    LiveRangeEdit LRE(SpilledVReg, SplitVRegs, 0, &PendingSpills);
394    spiller().spill(LRE);
395  }
396  // After extracting segments, the query's results are invalid. But keep the
397  // contents valid until we're done accessing pendingSpills.
398  Q.clear();
399}
400
401// Spill or split all live virtual registers currently unified under PhysReg
402// that interfere with VirtReg. The newly spilled or split live intervals are
403// returned by appending them to SplitVRegs.
404bool
405RegAllocBase::spillInterferences(LiveInterval &VirtReg, unsigned PhysReg,
406                                 SmallVectorImpl<LiveInterval*> &SplitVRegs) {
407  // Record each interference and determine if all are spillable before mutating
408  // either the union or live intervals.
409  unsigned NumInterferences = 0;
410  // Collect interferences assigned to any alias of the physical register.
411  for (const unsigned *asI = TRI->getOverlaps(PhysReg); *asI; ++asI) {
412    LiveIntervalUnion::Query &QAlias = query(VirtReg, *asI);
413    NumInterferences += QAlias.collectInterferingVRegs();
414    if (QAlias.seenUnspillableVReg()) {
415      return false;
416    }
417  }
418  DEBUG(dbgs() << "spilling " << TRI->getName(PhysReg) <<
419        " interferences with " << VirtReg << "\n");
420  assert(NumInterferences > 0 && "expect interference");
421
422  // Spill each interfering vreg allocated to PhysReg or an alias.
423  for (const unsigned *AliasI = TRI->getOverlaps(PhysReg); *AliasI; ++AliasI)
424    spillReg(VirtReg, *AliasI, SplitVRegs);
425  return true;
426}
427
428// Add newly allocated physical registers to the MBB live in sets.
429void RegAllocBase::addMBBLiveIns(MachineFunction *MF) {
430  NamedRegionTimer T("MBB Live Ins", TimerGroupName, TimePassesIsEnabled);
431  SlotIndexes *Indexes = LIS->getSlotIndexes();
432  if (MF->size() <= 1)
433    return;
434
435  LiveIntervalUnion::SegmentIter SI;
436  for (unsigned PhysReg = 0; PhysReg < PhysReg2LiveUnion.numRegs(); ++PhysReg) {
437    LiveIntervalUnion &LiveUnion = PhysReg2LiveUnion[PhysReg];
438    if (LiveUnion.empty())
439      continue;
440    MachineFunction::iterator MBB = llvm::next(MF->begin());
441    MachineFunction::iterator MFE = MF->end();
442    SlotIndex Start, Stop;
443    tie(Start, Stop) = Indexes->getMBBRange(MBB);
444    SI.setMap(LiveUnion.getMap());
445    SI.find(Start);
446    while (SI.valid()) {
447      if (SI.start() <= Start) {
448        if (!MBB->isLiveIn(PhysReg))
449          MBB->addLiveIn(PhysReg);
450      } else if (SI.start() > Stop)
451        MBB = Indexes->getMBBFromIndex(SI.start().getPrevIndex());
452      if (++MBB == MFE)
453        break;
454      tie(Start, Stop) = Indexes->getMBBRange(MBB);
455      SI.advanceTo(Start);
456    }
457  }
458}
459
460
461//===----------------------------------------------------------------------===//
462//                         RABasic Implementation
463//===----------------------------------------------------------------------===//
464
465// Driver for the register assignment and splitting heuristics.
466// Manages iteration over the LiveIntervalUnions.
467//
468// This is a minimal implementation of register assignment and splitting that
469// spills whenever we run out of registers.
470//
471// selectOrSplit can only be called once per live virtual register. We then do a
472// single interference test for each register the correct class until we find an
473// available register. So, the number of interference tests in the worst case is
474// |vregs| * |machineregs|. And since the number of interference tests is
475// minimal, there is no value in caching them outside the scope of
476// selectOrSplit().
477unsigned RABasic::selectOrSplit(LiveInterval &VirtReg,
478                                SmallVectorImpl<LiveInterval*> &SplitVRegs) {
479  // Populate a list of physical register spill candidates.
480  SmallVector<unsigned, 8> PhysRegSpillCands;
481
482  // Check for an available register in this class.
483  ArrayRef<unsigned> Order =
484    RegClassInfo.getOrder(MRI->getRegClass(VirtReg.reg));
485  for (ArrayRef<unsigned>::iterator I = Order.begin(), E = Order.end(); I != E;
486       ++I) {
487    unsigned PhysReg = *I;
488
489    // Check interference and as a side effect, intialize queries for this
490    // VirtReg and its aliases.
491    unsigned interfReg = checkPhysRegInterference(VirtReg, PhysReg);
492    if (interfReg == 0) {
493      // Found an available register.
494      return PhysReg;
495    }
496    LiveInterval *interferingVirtReg =
497      Queries[interfReg].firstInterference().liveUnionPos().value();
498
499    // The current VirtReg must either be spillable, or one of its interferences
500    // must have less spill weight.
501    if (interferingVirtReg->weight < VirtReg.weight ) {
502      PhysRegSpillCands.push_back(PhysReg);
503    }
504  }
505  // Try to spill another interfering reg with less spill weight.
506  for (SmallVectorImpl<unsigned>::iterator PhysRegI = PhysRegSpillCands.begin(),
507         PhysRegE = PhysRegSpillCands.end(); PhysRegI != PhysRegE; ++PhysRegI) {
508
509    if (!spillInterferences(VirtReg, *PhysRegI, SplitVRegs)) continue;
510
511    assert(checkPhysRegInterference(VirtReg, *PhysRegI) == 0 &&
512           "Interference after spill.");
513    // Tell the caller to allocate to this newly freed physical register.
514    return *PhysRegI;
515  }
516
517  // No other spill candidates were found, so spill the current VirtReg.
518  DEBUG(dbgs() << "spilling: " << VirtReg << '\n');
519  if (!VirtReg.isSpillable())
520    return ~0u;
521  LiveRangeEdit LRE(VirtReg, SplitVRegs);
522  spiller().spill(LRE);
523
524  // The live virtual register requesting allocation was spilled, so tell
525  // the caller not to allocate anything during this round.
526  return 0;
527}
528
529bool RABasic::runOnMachineFunction(MachineFunction &mf) {
530  DEBUG(dbgs() << "********** BASIC REGISTER ALLOCATION **********\n"
531               << "********** Function: "
532               << ((Value*)mf.getFunction())->getName() << '\n');
533
534  MF = &mf;
535  DEBUG(RMF = &getAnalysis<RenderMachineFunction>());
536
537  RegAllocBase::init(getAnalysis<VirtRegMap>(), getAnalysis<LiveIntervals>());
538  SpillerInstance.reset(createInlineSpiller(*this, *MF, *VRM));
539
540  allocatePhysRegs();
541
542  addMBBLiveIns(MF);
543
544  // Diagnostic output before rewriting
545  DEBUG(dbgs() << "Post alloc VirtRegMap:\n" << *VRM << "\n");
546
547  // optional HTML output
548  DEBUG(RMF->renderMachineFunction("After basic register allocation.", VRM));
549
550  // FIXME: Verification currently must run before VirtRegRewriter. We should
551  // make the rewriter a separate pass and override verifyAnalysis instead. When
552  // that happens, verification naturally falls under VerifyMachineCode.
553#ifndef NDEBUG
554  if (VerifyEnabled) {
555    // Verify accuracy of LiveIntervals. The standard machine code verifier
556    // ensures that each LiveIntervals covers all uses of the virtual reg.
557
558    // FIXME: MachineVerifier is badly broken when using the standard
559    // spiller. Always use -spiller=inline with -verify-regalloc. Even with the
560    // inline spiller, some tests fail to verify because the coalescer does not
561    // always generate verifiable code.
562    MF->verify(this, "In RABasic::verify");
563
564    // Verify that LiveIntervals are partitioned into unions and disjoint within
565    // the unions.
566    verify();
567  }
568#endif // !NDEBUG
569
570  // Run rewriter
571  VRM->rewrite(LIS->getSlotIndexes());
572
573  // Write out new DBG_VALUE instructions.
574  getAnalysis<LiveDebugVariables>().emitDebugValues(VRM);
575
576  // The pass output is in VirtRegMap. Release all the transient data.
577  releaseMemory();
578
579  return true;
580}
581
582FunctionPass* llvm::createBasicRegisterAllocator()
583{
584  return new RABasic();
585}
586