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