1 //===-- llvm/CodeGen/MachineRegisterInfo.h ----------------------*- C++ -*-===// 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 MachineRegisterInfo class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CODEGEN_MACHINEREGISTERINFO_H 15 #define LLVM_CODEGEN_MACHINEREGISTERINFO_H 16 17 #include "llvm/ADT/BitVector.h" 18 #include "llvm/ADT/IndexedMap.h" 19 #include "llvm/ADT/iterator_range.h" 20 #include "llvm/CodeGen/MachineFunction.h" 21 #include "llvm/CodeGen/MachineInstrBundle.h" 22 #include "llvm/Target/TargetRegisterInfo.h" 23 #include "llvm/Target/TargetSubtargetInfo.h" 24 #include <vector> 25 26 namespace llvm { 27 class PSetIterator; 28 29 /// MachineRegisterInfo - Keep track of information for virtual and physical 30 /// registers, including vreg register classes, use/def chains for registers, 31 /// etc. 32 class MachineRegisterInfo { 33 public: 34 class Delegate { 35 virtual void anchor(); 36 public: 37 virtual void MRI_NoteNewVirtualRegister(unsigned Reg) = 0; 38 39 virtual ~Delegate() {} 40 }; 41 42 private: 43 const MachineFunction *MF; 44 Delegate *TheDelegate; 45 46 /// IsSSA - True when the machine function is in SSA form and virtual 47 /// registers have a single def. 48 bool IsSSA; 49 50 /// TracksLiveness - True while register liveness is being tracked accurately. 51 /// Basic block live-in lists, kill flags, and implicit defs may not be 52 /// accurate when after this flag is cleared. 53 bool TracksLiveness; 54 55 /// True if subregister liveness is tracked. 56 bool TracksSubRegLiveness; 57 58 /// VRegInfo - Information we keep for each virtual register. 59 /// 60 /// Each element in this list contains the register class of the vreg and the 61 /// start of the use/def list for the register. 62 IndexedMap<std::pair<const TargetRegisterClass*, MachineOperand*>, 63 VirtReg2IndexFunctor> VRegInfo; 64 65 /// RegAllocHints - This vector records register allocation hints for virtual 66 /// registers. For each virtual register, it keeps a register and hint type 67 /// pair making up the allocation hint. Hint type is target specific except 68 /// for the value 0 which means the second value of the pair is the preferred 69 /// register for allocation. For example, if the hint is <0, 1024>, it means 70 /// the allocator should prefer the physical register allocated to the virtual 71 /// register of the hint. 72 IndexedMap<std::pair<unsigned, unsigned>, VirtReg2IndexFunctor> RegAllocHints; 73 74 /// PhysRegUseDefLists - This is an array of the head of the use/def list for 75 /// physical registers. 76 std::unique_ptr<MachineOperand *[]> PhysRegUseDefLists; 77 78 /// getRegUseDefListHead - Return the head pointer for the register use/def 79 /// list for the specified virtual or physical register. 80 MachineOperand *&getRegUseDefListHead(unsigned RegNo) { 81 if (TargetRegisterInfo::isVirtualRegister(RegNo)) 82 return VRegInfo[RegNo].second; 83 return PhysRegUseDefLists[RegNo]; 84 } 85 86 MachineOperand *getRegUseDefListHead(unsigned RegNo) const { 87 if (TargetRegisterInfo::isVirtualRegister(RegNo)) 88 return VRegInfo[RegNo].second; 89 return PhysRegUseDefLists[RegNo]; 90 } 91 92 /// Get the next element in the use-def chain. 93 static MachineOperand *getNextOperandForReg(const MachineOperand *MO) { 94 assert(MO && MO->isReg() && "This is not a register operand!"); 95 return MO->Contents.Reg.Next; 96 } 97 98 /// UsedPhysRegMask - Additional used physregs including aliases. 99 /// This bit vector represents all the registers clobbered by function calls. 100 BitVector UsedPhysRegMask; 101 102 /// ReservedRegs - This is a bit vector of reserved registers. The target 103 /// may change its mind about which registers should be reserved. This 104 /// vector is the frozen set of reserved registers when register allocation 105 /// started. 106 BitVector ReservedRegs; 107 108 /// Keep track of the physical registers that are live in to the function. 109 /// Live in values are typically arguments in registers. LiveIn values are 110 /// allowed to have virtual registers associated with them, stored in the 111 /// second element. 112 std::vector<std::pair<unsigned, unsigned> > LiveIns; 113 114 MachineRegisterInfo(const MachineRegisterInfo&) = delete; 115 void operator=(const MachineRegisterInfo&) = delete; 116 public: 117 explicit MachineRegisterInfo(const MachineFunction *MF); 118 119 const TargetRegisterInfo *getTargetRegisterInfo() const { 120 return MF->getSubtarget().getRegisterInfo(); 121 } 122 123 void resetDelegate(Delegate *delegate) { 124 // Ensure another delegate does not take over unless the current 125 // delegate first unattaches itself. If we ever need to multicast 126 // notifications, we will need to change to using a list. 127 assert(TheDelegate == delegate && 128 "Only the current delegate can perform reset!"); 129 TheDelegate = nullptr; 130 } 131 132 void setDelegate(Delegate *delegate) { 133 assert(delegate && !TheDelegate && 134 "Attempted to set delegate to null, or to change it without " 135 "first resetting it!"); 136 137 TheDelegate = delegate; 138 } 139 140 //===--------------------------------------------------------------------===// 141 // Function State 142 //===--------------------------------------------------------------------===// 143 144 // isSSA - Returns true when the machine function is in SSA form. Early 145 // passes require the machine function to be in SSA form where every virtual 146 // register has a single defining instruction. 147 // 148 // The TwoAddressInstructionPass and PHIElimination passes take the machine 149 // function out of SSA form when they introduce multiple defs per virtual 150 // register. 151 bool isSSA() const { return IsSSA; } 152 153 // leaveSSA - Indicates that the machine function is no longer in SSA form. 154 void leaveSSA() { IsSSA = false; } 155 156 /// tracksLiveness - Returns true when tracking register liveness accurately. 157 /// 158 /// While this flag is true, register liveness information in basic block 159 /// live-in lists and machine instruction operands is accurate. This means it 160 /// can be used to change the code in ways that affect the values in 161 /// registers, for example by the register scavenger. 162 /// 163 /// When this flag is false, liveness is no longer reliable. 164 bool tracksLiveness() const { return TracksLiveness; } 165 166 /// invalidateLiveness - Indicates that register liveness is no longer being 167 /// tracked accurately. 168 /// 169 /// This should be called by late passes that invalidate the liveness 170 /// information. 171 void invalidateLiveness() { TracksLiveness = false; } 172 173 /// Returns true if liveness for register class @p RC should be tracked at 174 /// the subregister level. 175 bool shouldTrackSubRegLiveness(const TargetRegisterClass &RC) const { 176 return subRegLivenessEnabled() && RC.HasDisjunctSubRegs; 177 } 178 bool shouldTrackSubRegLiveness(unsigned VReg) const { 179 assert(TargetRegisterInfo::isVirtualRegister(VReg) && "Must pass a VReg"); 180 return shouldTrackSubRegLiveness(*getRegClass(VReg)); 181 } 182 bool subRegLivenessEnabled() const { 183 return TracksSubRegLiveness; 184 } 185 186 void enableSubRegLiveness(bool Enable = true) { 187 TracksSubRegLiveness = Enable; 188 } 189 190 //===--------------------------------------------------------------------===// 191 // Register Info 192 //===--------------------------------------------------------------------===// 193 194 // Strictly for use by MachineInstr.cpp. 195 void addRegOperandToUseList(MachineOperand *MO); 196 197 // Strictly for use by MachineInstr.cpp. 198 void removeRegOperandFromUseList(MachineOperand *MO); 199 200 // Strictly for use by MachineInstr.cpp. 201 void moveOperands(MachineOperand *Dst, MachineOperand *Src, unsigned NumOps); 202 203 /// Verify the sanity of the use list for Reg. 204 void verifyUseList(unsigned Reg) const; 205 206 /// Verify the use list of all registers. 207 void verifyUseLists() const; 208 209 /// reg_begin/reg_end - Provide iteration support to walk over all definitions 210 /// and uses of a register within the MachineFunction that corresponds to this 211 /// MachineRegisterInfo object. 212 template<bool Uses, bool Defs, bool SkipDebug, 213 bool ByOperand, bool ByInstr, bool ByBundle> 214 class defusechain_iterator; 215 template<bool Uses, bool Defs, bool SkipDebug, 216 bool ByOperand, bool ByInstr, bool ByBundle> 217 class defusechain_instr_iterator; 218 219 // Make it a friend so it can access getNextOperandForReg(). 220 template<bool, bool, bool, bool, bool, bool> 221 friend class defusechain_iterator; 222 template<bool, bool, bool, bool, bool, bool> 223 friend class defusechain_instr_iterator; 224 225 226 227 /// reg_iterator/reg_begin/reg_end - Walk all defs and uses of the specified 228 /// register. 229 typedef defusechain_iterator<true,true,false,true,false,false> 230 reg_iterator; 231 reg_iterator reg_begin(unsigned RegNo) const { 232 return reg_iterator(getRegUseDefListHead(RegNo)); 233 } 234 static reg_iterator reg_end() { return reg_iterator(nullptr); } 235 236 inline iterator_range<reg_iterator> reg_operands(unsigned Reg) const { 237 return make_range(reg_begin(Reg), reg_end()); 238 } 239 240 /// reg_instr_iterator/reg_instr_begin/reg_instr_end - Walk all defs and uses 241 /// of the specified register, stepping by MachineInstr. 242 typedef defusechain_instr_iterator<true,true,false,false,true,false> 243 reg_instr_iterator; 244 reg_instr_iterator reg_instr_begin(unsigned RegNo) const { 245 return reg_instr_iterator(getRegUseDefListHead(RegNo)); 246 } 247 static reg_instr_iterator reg_instr_end() { 248 return reg_instr_iterator(nullptr); 249 } 250 251 inline iterator_range<reg_instr_iterator> 252 reg_instructions(unsigned Reg) const { 253 return make_range(reg_instr_begin(Reg), reg_instr_end()); 254 } 255 256 /// reg_bundle_iterator/reg_bundle_begin/reg_bundle_end - Walk all defs and uses 257 /// of the specified register, stepping by bundle. 258 typedef defusechain_instr_iterator<true,true,false,false,false,true> 259 reg_bundle_iterator; 260 reg_bundle_iterator reg_bundle_begin(unsigned RegNo) const { 261 return reg_bundle_iterator(getRegUseDefListHead(RegNo)); 262 } 263 static reg_bundle_iterator reg_bundle_end() { 264 return reg_bundle_iterator(nullptr); 265 } 266 267 inline iterator_range<reg_bundle_iterator> reg_bundles(unsigned Reg) const { 268 return make_range(reg_bundle_begin(Reg), reg_bundle_end()); 269 } 270 271 /// reg_empty - Return true if there are no instructions using or defining the 272 /// specified register (it may be live-in). 273 bool reg_empty(unsigned RegNo) const { return reg_begin(RegNo) == reg_end(); } 274 275 /// reg_nodbg_iterator/reg_nodbg_begin/reg_nodbg_end - Walk all defs and uses 276 /// of the specified register, skipping those marked as Debug. 277 typedef defusechain_iterator<true,true,true,true,false,false> 278 reg_nodbg_iterator; 279 reg_nodbg_iterator reg_nodbg_begin(unsigned RegNo) const { 280 return reg_nodbg_iterator(getRegUseDefListHead(RegNo)); 281 } 282 static reg_nodbg_iterator reg_nodbg_end() { 283 return reg_nodbg_iterator(nullptr); 284 } 285 286 inline iterator_range<reg_nodbg_iterator> 287 reg_nodbg_operands(unsigned Reg) const { 288 return make_range(reg_nodbg_begin(Reg), reg_nodbg_end()); 289 } 290 291 /// reg_instr_nodbg_iterator/reg_instr_nodbg_begin/reg_instr_nodbg_end - Walk 292 /// all defs and uses of the specified register, stepping by MachineInstr, 293 /// skipping those marked as Debug. 294 typedef defusechain_instr_iterator<true,true,true,false,true,false> 295 reg_instr_nodbg_iterator; 296 reg_instr_nodbg_iterator reg_instr_nodbg_begin(unsigned RegNo) const { 297 return reg_instr_nodbg_iterator(getRegUseDefListHead(RegNo)); 298 } 299 static reg_instr_nodbg_iterator reg_instr_nodbg_end() { 300 return reg_instr_nodbg_iterator(nullptr); 301 } 302 303 inline iterator_range<reg_instr_nodbg_iterator> 304 reg_nodbg_instructions(unsigned Reg) const { 305 return make_range(reg_instr_nodbg_begin(Reg), reg_instr_nodbg_end()); 306 } 307 308 /// reg_bundle_nodbg_iterator/reg_bundle_nodbg_begin/reg_bundle_nodbg_end - Walk 309 /// all defs and uses of the specified register, stepping by bundle, 310 /// skipping those marked as Debug. 311 typedef defusechain_instr_iterator<true,true,true,false,false,true> 312 reg_bundle_nodbg_iterator; 313 reg_bundle_nodbg_iterator reg_bundle_nodbg_begin(unsigned RegNo) const { 314 return reg_bundle_nodbg_iterator(getRegUseDefListHead(RegNo)); 315 } 316 static reg_bundle_nodbg_iterator reg_bundle_nodbg_end() { 317 return reg_bundle_nodbg_iterator(nullptr); 318 } 319 320 inline iterator_range<reg_bundle_nodbg_iterator> 321 reg_nodbg_bundles(unsigned Reg) const { 322 return make_range(reg_bundle_nodbg_begin(Reg), reg_bundle_nodbg_end()); 323 } 324 325 /// reg_nodbg_empty - Return true if the only instructions using or defining 326 /// Reg are Debug instructions. 327 bool reg_nodbg_empty(unsigned RegNo) const { 328 return reg_nodbg_begin(RegNo) == reg_nodbg_end(); 329 } 330 331 /// def_iterator/def_begin/def_end - Walk all defs of the specified register. 332 typedef defusechain_iterator<false,true,false,true,false,false> 333 def_iterator; 334 def_iterator def_begin(unsigned RegNo) const { 335 return def_iterator(getRegUseDefListHead(RegNo)); 336 } 337 static def_iterator def_end() { return def_iterator(nullptr); } 338 339 inline iterator_range<def_iterator> def_operands(unsigned Reg) const { 340 return make_range(def_begin(Reg), def_end()); 341 } 342 343 /// def_instr_iterator/def_instr_begin/def_instr_end - Walk all defs of the 344 /// specified register, stepping by MachineInst. 345 typedef defusechain_instr_iterator<false,true,false,false,true,false> 346 def_instr_iterator; 347 def_instr_iterator def_instr_begin(unsigned RegNo) const { 348 return def_instr_iterator(getRegUseDefListHead(RegNo)); 349 } 350 static def_instr_iterator def_instr_end() { 351 return def_instr_iterator(nullptr); 352 } 353 354 inline iterator_range<def_instr_iterator> 355 def_instructions(unsigned Reg) const { 356 return make_range(def_instr_begin(Reg), def_instr_end()); 357 } 358 359 /// def_bundle_iterator/def_bundle_begin/def_bundle_end - Walk all defs of the 360 /// specified register, stepping by bundle. 361 typedef defusechain_instr_iterator<false,true,false,false,false,true> 362 def_bundle_iterator; 363 def_bundle_iterator def_bundle_begin(unsigned RegNo) const { 364 return def_bundle_iterator(getRegUseDefListHead(RegNo)); 365 } 366 static def_bundle_iterator def_bundle_end() { 367 return def_bundle_iterator(nullptr); 368 } 369 370 inline iterator_range<def_bundle_iterator> def_bundles(unsigned Reg) const { 371 return make_range(def_bundle_begin(Reg), def_bundle_end()); 372 } 373 374 /// def_empty - Return true if there are no instructions defining the 375 /// specified register (it may be live-in). 376 bool def_empty(unsigned RegNo) const { return def_begin(RegNo) == def_end(); } 377 378 /// hasOneDef - Return true if there is exactly one instruction defining the 379 /// specified register. 380 bool hasOneDef(unsigned RegNo) const { 381 def_iterator DI = def_begin(RegNo); 382 if (DI == def_end()) 383 return false; 384 return ++DI == def_end(); 385 } 386 387 /// use_iterator/use_begin/use_end - Walk all uses of the specified register. 388 typedef defusechain_iterator<true,false,false,true,false,false> 389 use_iterator; 390 use_iterator use_begin(unsigned RegNo) const { 391 return use_iterator(getRegUseDefListHead(RegNo)); 392 } 393 static use_iterator use_end() { return use_iterator(nullptr); } 394 395 inline iterator_range<use_iterator> use_operands(unsigned Reg) const { 396 return make_range(use_begin(Reg), use_end()); 397 } 398 399 /// use_instr_iterator/use_instr_begin/use_instr_end - Walk all uses of the 400 /// specified register, stepping by MachineInstr. 401 typedef defusechain_instr_iterator<true,false,false,false,true,false> 402 use_instr_iterator; 403 use_instr_iterator use_instr_begin(unsigned RegNo) const { 404 return use_instr_iterator(getRegUseDefListHead(RegNo)); 405 } 406 static use_instr_iterator use_instr_end() { 407 return use_instr_iterator(nullptr); 408 } 409 410 inline iterator_range<use_instr_iterator> 411 use_instructions(unsigned Reg) const { 412 return make_range(use_instr_begin(Reg), use_instr_end()); 413 } 414 415 /// use_bundle_iterator/use_bundle_begin/use_bundle_end - Walk all uses of the 416 /// specified register, stepping by bundle. 417 typedef defusechain_instr_iterator<true,false,false,false,false,true> 418 use_bundle_iterator; 419 use_bundle_iterator use_bundle_begin(unsigned RegNo) const { 420 return use_bundle_iterator(getRegUseDefListHead(RegNo)); 421 } 422 static use_bundle_iterator use_bundle_end() { 423 return use_bundle_iterator(nullptr); 424 } 425 426 inline iterator_range<use_bundle_iterator> use_bundles(unsigned Reg) const { 427 return make_range(use_bundle_begin(Reg), use_bundle_end()); 428 } 429 430 /// use_empty - Return true if there are no instructions using the specified 431 /// register. 432 bool use_empty(unsigned RegNo) const { return use_begin(RegNo) == use_end(); } 433 434 /// hasOneUse - Return true if there is exactly one instruction using the 435 /// specified register. 436 bool hasOneUse(unsigned RegNo) const { 437 use_iterator UI = use_begin(RegNo); 438 if (UI == use_end()) 439 return false; 440 return ++UI == use_end(); 441 } 442 443 /// use_nodbg_iterator/use_nodbg_begin/use_nodbg_end - Walk all uses of the 444 /// specified register, skipping those marked as Debug. 445 typedef defusechain_iterator<true,false,true,true,false,false> 446 use_nodbg_iterator; 447 use_nodbg_iterator use_nodbg_begin(unsigned RegNo) const { 448 return use_nodbg_iterator(getRegUseDefListHead(RegNo)); 449 } 450 static use_nodbg_iterator use_nodbg_end() { 451 return use_nodbg_iterator(nullptr); 452 } 453 454 inline iterator_range<use_nodbg_iterator> 455 use_nodbg_operands(unsigned Reg) const { 456 return make_range(use_nodbg_begin(Reg), use_nodbg_end()); 457 } 458 459 /// use_instr_nodbg_iterator/use_instr_nodbg_begin/use_instr_nodbg_end - Walk 460 /// all uses of the specified register, stepping by MachineInstr, skipping 461 /// those marked as Debug. 462 typedef defusechain_instr_iterator<true,false,true,false,true,false> 463 use_instr_nodbg_iterator; 464 use_instr_nodbg_iterator use_instr_nodbg_begin(unsigned RegNo) const { 465 return use_instr_nodbg_iterator(getRegUseDefListHead(RegNo)); 466 } 467 static use_instr_nodbg_iterator use_instr_nodbg_end() { 468 return use_instr_nodbg_iterator(nullptr); 469 } 470 471 inline iterator_range<use_instr_nodbg_iterator> 472 use_nodbg_instructions(unsigned Reg) const { 473 return make_range(use_instr_nodbg_begin(Reg), use_instr_nodbg_end()); 474 } 475 476 /// use_bundle_nodbg_iterator/use_bundle_nodbg_begin/use_bundle_nodbg_end - Walk 477 /// all uses of the specified register, stepping by bundle, skipping 478 /// those marked as Debug. 479 typedef defusechain_instr_iterator<true,false,true,false,false,true> 480 use_bundle_nodbg_iterator; 481 use_bundle_nodbg_iterator use_bundle_nodbg_begin(unsigned RegNo) const { 482 return use_bundle_nodbg_iterator(getRegUseDefListHead(RegNo)); 483 } 484 static use_bundle_nodbg_iterator use_bundle_nodbg_end() { 485 return use_bundle_nodbg_iterator(nullptr); 486 } 487 488 inline iterator_range<use_bundle_nodbg_iterator> 489 use_nodbg_bundles(unsigned Reg) const { 490 return make_range(use_bundle_nodbg_begin(Reg), use_bundle_nodbg_end()); 491 } 492 493 /// use_nodbg_empty - Return true if there are no non-Debug instructions 494 /// using the specified register. 495 bool use_nodbg_empty(unsigned RegNo) const { 496 return use_nodbg_begin(RegNo) == use_nodbg_end(); 497 } 498 499 /// hasOneNonDBGUse - Return true if there is exactly one non-Debug 500 /// instruction using the specified register. 501 bool hasOneNonDBGUse(unsigned RegNo) const; 502 503 /// replaceRegWith - Replace all instances of FromReg with ToReg in the 504 /// machine function. This is like llvm-level X->replaceAllUsesWith(Y), 505 /// except that it also changes any definitions of the register as well. 506 /// 507 /// Note that it is usually necessary to first constrain ToReg's register 508 /// class to match the FromReg constraints using: 509 /// 510 /// constrainRegClass(ToReg, getRegClass(FromReg)) 511 /// 512 /// That function will return NULL if the virtual registers have incompatible 513 /// constraints. 514 /// 515 /// Note that if ToReg is a physical register the function will replace and 516 /// apply sub registers to ToReg in order to obtain a final/proper physical 517 /// register. 518 void replaceRegWith(unsigned FromReg, unsigned ToReg); 519 520 /// getVRegDef - Return the machine instr that defines the specified virtual 521 /// register or null if none is found. This assumes that the code is in SSA 522 /// form, so there should only be one definition. 523 MachineInstr *getVRegDef(unsigned Reg) const; 524 525 /// getUniqueVRegDef - Return the unique machine instr that defines the 526 /// specified virtual register or null if none is found. If there are 527 /// multiple definitions or no definition, return null. 528 MachineInstr *getUniqueVRegDef(unsigned Reg) const; 529 530 /// clearKillFlags - Iterate over all the uses of the given register and 531 /// clear the kill flag from the MachineOperand. This function is used by 532 /// optimization passes which extend register lifetimes and need only 533 /// preserve conservative kill flag information. 534 void clearKillFlags(unsigned Reg) const; 535 536 #ifndef NDEBUG 537 void dumpUses(unsigned RegNo) const; 538 #endif 539 540 /// isConstantPhysReg - Returns true if PhysReg is unallocatable and constant 541 /// throughout the function. It is safe to move instructions that read such 542 /// a physreg. 543 bool isConstantPhysReg(unsigned PhysReg, const MachineFunction &MF) const; 544 545 /// Get an iterator over the pressure sets affected by the given physical or 546 /// virtual register. If RegUnit is physical, it must be a register unit (from 547 /// MCRegUnitIterator). 548 PSetIterator getPressureSets(unsigned RegUnit) const; 549 550 //===--------------------------------------------------------------------===// 551 // Virtual Register Info 552 //===--------------------------------------------------------------------===// 553 554 /// getRegClass - Return the register class of the specified virtual register. 555 /// 556 const TargetRegisterClass *getRegClass(unsigned Reg) const { 557 return VRegInfo[Reg].first; 558 } 559 560 /// setRegClass - Set the register class of the specified virtual register. 561 /// 562 void setRegClass(unsigned Reg, const TargetRegisterClass *RC); 563 564 /// constrainRegClass - Constrain the register class of the specified virtual 565 /// register to be a common subclass of RC and the current register class, 566 /// but only if the new class has at least MinNumRegs registers. Return the 567 /// new register class, or NULL if no such class exists. 568 /// This should only be used when the constraint is known to be trivial, like 569 /// GR32 -> GR32_NOSP. Beware of increasing register pressure. 570 /// 571 const TargetRegisterClass *constrainRegClass(unsigned Reg, 572 const TargetRegisterClass *RC, 573 unsigned MinNumRegs = 0); 574 575 /// recomputeRegClass - Try to find a legal super-class of Reg's register 576 /// class that still satisfies the constraints from the instructions using 577 /// Reg. Returns true if Reg was upgraded. 578 /// 579 /// This method can be used after constraints have been removed from a 580 /// virtual register, for example after removing instructions or splitting 581 /// the live range. 582 /// 583 bool recomputeRegClass(unsigned Reg); 584 585 /// createVirtualRegister - Create and return a new virtual register in the 586 /// function with the specified register class. 587 /// 588 unsigned createVirtualRegister(const TargetRegisterClass *RegClass); 589 590 /// getNumVirtRegs - Return the number of virtual registers created. 591 /// 592 unsigned getNumVirtRegs() const { return VRegInfo.size(); } 593 594 /// clearVirtRegs - Remove all virtual registers (after physreg assignment). 595 void clearVirtRegs(); 596 597 /// setRegAllocationHint - Specify a register allocation hint for the 598 /// specified virtual register. 599 void setRegAllocationHint(unsigned VReg, unsigned Type, unsigned PrefReg) { 600 assert(TargetRegisterInfo::isVirtualRegister(VReg)); 601 RegAllocHints[VReg].first = Type; 602 RegAllocHints[VReg].second = PrefReg; 603 } 604 605 /// Specify the preferred register allocation hint for the specified virtual 606 /// register. 607 void setSimpleHint(unsigned VReg, unsigned PrefReg) { 608 setRegAllocationHint(VReg, /*Type=*/0, PrefReg); 609 } 610 611 /// getRegAllocationHint - Return the register allocation hint for the 612 /// specified virtual register. 613 std::pair<unsigned, unsigned> 614 getRegAllocationHint(unsigned VReg) const { 615 assert(TargetRegisterInfo::isVirtualRegister(VReg)); 616 return RegAllocHints[VReg]; 617 } 618 619 /// getSimpleHint - Return the preferred register allocation hint, or 0 if a 620 /// standard simple hint (Type == 0) is not set. 621 unsigned getSimpleHint(unsigned VReg) const { 622 assert(TargetRegisterInfo::isVirtualRegister(VReg)); 623 std::pair<unsigned, unsigned> Hint = getRegAllocationHint(VReg); 624 return Hint.first ? 0 : Hint.second; 625 } 626 627 /// markUsesInDebugValueAsUndef - Mark every DBG_VALUE referencing the 628 /// specified register as undefined which causes the DBG_VALUE to be 629 /// deleted during LiveDebugVariables analysis. 630 void markUsesInDebugValueAsUndef(unsigned Reg) const; 631 632 /// Return true if the specified register is modified in this function. 633 /// This checks that no defining machine operands exist for the register or 634 /// any of its aliases. Definitions found on functions marked noreturn are 635 /// ignored. The register is also considered modified when it is set in the 636 /// UsedPhysRegMask. 637 bool isPhysRegModified(unsigned PhysReg) const; 638 639 /// Return true if the specified register is modified or read in this 640 /// function. This checks that no machine operands exist for the register or 641 /// any of its aliases. The register is also considered used when it is set 642 /// in the UsedPhysRegMask. 643 bool isPhysRegUsed(unsigned PhysReg) const; 644 645 /// addPhysRegsUsedFromRegMask - Mark any registers not in RegMask as used. 646 /// This corresponds to the bit mask attached to register mask operands. 647 void addPhysRegsUsedFromRegMask(const uint32_t *RegMask) { 648 UsedPhysRegMask.setBitsNotInMask(RegMask); 649 } 650 651 const BitVector &getUsedPhysRegsMask() const { return UsedPhysRegMask; } 652 653 void setUsedPhysRegMask(BitVector &Mask) { UsedPhysRegMask = Mask; } 654 655 //===--------------------------------------------------------------------===// 656 // Reserved Register Info 657 //===--------------------------------------------------------------------===// 658 // 659 // The set of reserved registers must be invariant during register 660 // allocation. For example, the target cannot suddenly decide it needs a 661 // frame pointer when the register allocator has already used the frame 662 // pointer register for something else. 663 // 664 // These methods can be used by target hooks like hasFP() to avoid changing 665 // the reserved register set during register allocation. 666 667 /// freezeReservedRegs - Called by the register allocator to freeze the set 668 /// of reserved registers before allocation begins. 669 void freezeReservedRegs(const MachineFunction&); 670 671 /// reservedRegsFrozen - Returns true after freezeReservedRegs() was called 672 /// to ensure the set of reserved registers stays constant. 673 bool reservedRegsFrozen() const { 674 return !ReservedRegs.empty(); 675 } 676 677 /// canReserveReg - Returns true if PhysReg can be used as a reserved 678 /// register. Any register can be reserved before freezeReservedRegs() is 679 /// called. 680 bool canReserveReg(unsigned PhysReg) const { 681 return !reservedRegsFrozen() || ReservedRegs.test(PhysReg); 682 } 683 684 /// getReservedRegs - Returns a reference to the frozen set of reserved 685 /// registers. This method should always be preferred to calling 686 /// TRI::getReservedRegs() when possible. 687 const BitVector &getReservedRegs() const { 688 assert(reservedRegsFrozen() && 689 "Reserved registers haven't been frozen yet. " 690 "Use TRI::getReservedRegs()."); 691 return ReservedRegs; 692 } 693 694 /// isReserved - Returns true when PhysReg is a reserved register. 695 /// 696 /// Reserved registers may belong to an allocatable register class, but the 697 /// target has explicitly requested that they are not used. 698 /// 699 bool isReserved(unsigned PhysReg) const { 700 return getReservedRegs().test(PhysReg); 701 } 702 703 /// isAllocatable - Returns true when PhysReg belongs to an allocatable 704 /// register class and it hasn't been reserved. 705 /// 706 /// Allocatable registers may show up in the allocation order of some virtual 707 /// register, so a register allocator needs to track its liveness and 708 /// availability. 709 bool isAllocatable(unsigned PhysReg) const { 710 return getTargetRegisterInfo()->isInAllocatableClass(PhysReg) && 711 !isReserved(PhysReg); 712 } 713 714 //===--------------------------------------------------------------------===// 715 // LiveIn Management 716 //===--------------------------------------------------------------------===// 717 718 /// addLiveIn - Add the specified register as a live-in. Note that it 719 /// is an error to add the same register to the same set more than once. 720 void addLiveIn(unsigned Reg, unsigned vreg = 0) { 721 LiveIns.push_back(std::make_pair(Reg, vreg)); 722 } 723 724 // Iteration support for the live-ins set. It's kept in sorted order 725 // by register number. 726 typedef std::vector<std::pair<unsigned,unsigned> >::const_iterator 727 livein_iterator; 728 livein_iterator livein_begin() const { return LiveIns.begin(); } 729 livein_iterator livein_end() const { return LiveIns.end(); } 730 bool livein_empty() const { return LiveIns.empty(); } 731 732 bool isLiveIn(unsigned Reg) const; 733 734 /// getLiveInPhysReg - If VReg is a live-in virtual register, return the 735 /// corresponding live-in physical register. 736 unsigned getLiveInPhysReg(unsigned VReg) const; 737 738 /// getLiveInVirtReg - If PReg is a live-in physical register, return the 739 /// corresponding live-in physical register. 740 unsigned getLiveInVirtReg(unsigned PReg) const; 741 742 /// EmitLiveInCopies - Emit copies to initialize livein virtual registers 743 /// into the given entry block. 744 void EmitLiveInCopies(MachineBasicBlock *EntryMBB, 745 const TargetRegisterInfo &TRI, 746 const TargetInstrInfo &TII); 747 748 /// Returns a mask covering all bits that can appear in lane masks of 749 /// subregisters of the virtual register @p Reg. 750 LaneBitmask getMaxLaneMaskForVReg(unsigned Reg) const; 751 752 /// defusechain_iterator - This class provides iterator support for machine 753 /// operands in the function that use or define a specific register. If 754 /// ReturnUses is true it returns uses of registers, if ReturnDefs is true it 755 /// returns defs. If neither are true then you are silly and it always 756 /// returns end(). If SkipDebug is true it skips uses marked Debug 757 /// when incrementing. 758 template<bool ReturnUses, bool ReturnDefs, bool SkipDebug, 759 bool ByOperand, bool ByInstr, bool ByBundle> 760 class defusechain_iterator 761 : public std::iterator<std::forward_iterator_tag, MachineInstr, ptrdiff_t> { 762 MachineOperand *Op; 763 explicit defusechain_iterator(MachineOperand *op) : Op(op) { 764 // If the first node isn't one we're interested in, advance to one that 765 // we are interested in. 766 if (op) { 767 if ((!ReturnUses && op->isUse()) || 768 (!ReturnDefs && op->isDef()) || 769 (SkipDebug && op->isDebug())) 770 advance(); 771 } 772 } 773 friend class MachineRegisterInfo; 774 775 void advance() { 776 assert(Op && "Cannot increment end iterator!"); 777 Op = getNextOperandForReg(Op); 778 779 // All defs come before the uses, so stop def_iterator early. 780 if (!ReturnUses) { 781 if (Op) { 782 if (Op->isUse()) 783 Op = nullptr; 784 else 785 assert(!Op->isDebug() && "Can't have debug defs"); 786 } 787 } else { 788 // If this is an operand we don't care about, skip it. 789 while (Op && ((!ReturnDefs && Op->isDef()) || 790 (SkipDebug && Op->isDebug()))) 791 Op = getNextOperandForReg(Op); 792 } 793 } 794 public: 795 typedef std::iterator<std::forward_iterator_tag, 796 MachineInstr, ptrdiff_t>::reference reference; 797 typedef std::iterator<std::forward_iterator_tag, 798 MachineInstr, ptrdiff_t>::pointer pointer; 799 800 defusechain_iterator() : Op(nullptr) {} 801 802 bool operator==(const defusechain_iterator &x) const { 803 return Op == x.Op; 804 } 805 bool operator!=(const defusechain_iterator &x) const { 806 return !operator==(x); 807 } 808 809 /// atEnd - return true if this iterator is equal to reg_end() on the value. 810 bool atEnd() const { return Op == nullptr; } 811 812 // Iterator traversal: forward iteration only 813 defusechain_iterator &operator++() { // Preincrement 814 assert(Op && "Cannot increment end iterator!"); 815 if (ByOperand) 816 advance(); 817 else if (ByInstr) { 818 MachineInstr *P = Op->getParent(); 819 do { 820 advance(); 821 } while (Op && Op->getParent() == P); 822 } else if (ByBundle) { 823 MachineInstr *P = getBundleStart(Op->getParent()); 824 do { 825 advance(); 826 } while (Op && getBundleStart(Op->getParent()) == P); 827 } 828 829 return *this; 830 } 831 defusechain_iterator operator++(int) { // Postincrement 832 defusechain_iterator tmp = *this; ++*this; return tmp; 833 } 834 835 /// getOperandNo - Return the operand # of this MachineOperand in its 836 /// MachineInstr. 837 unsigned getOperandNo() const { 838 assert(Op && "Cannot dereference end iterator!"); 839 return Op - &Op->getParent()->getOperand(0); 840 } 841 842 // Retrieve a reference to the current operand. 843 MachineOperand &operator*() const { 844 assert(Op && "Cannot dereference end iterator!"); 845 return *Op; 846 } 847 848 MachineOperand *operator->() const { 849 assert(Op && "Cannot dereference end iterator!"); 850 return Op; 851 } 852 }; 853 854 /// defusechain_iterator - This class provides iterator support for machine 855 /// operands in the function that use or define a specific register. If 856 /// ReturnUses is true it returns uses of registers, if ReturnDefs is true it 857 /// returns defs. If neither are true then you are silly and it always 858 /// returns end(). If SkipDebug is true it skips uses marked Debug 859 /// when incrementing. 860 template<bool ReturnUses, bool ReturnDefs, bool SkipDebug, 861 bool ByOperand, bool ByInstr, bool ByBundle> 862 class defusechain_instr_iterator 863 : public std::iterator<std::forward_iterator_tag, MachineInstr, ptrdiff_t> { 864 MachineOperand *Op; 865 explicit defusechain_instr_iterator(MachineOperand *op) : Op(op) { 866 // If the first node isn't one we're interested in, advance to one that 867 // we are interested in. 868 if (op) { 869 if ((!ReturnUses && op->isUse()) || 870 (!ReturnDefs && op->isDef()) || 871 (SkipDebug && op->isDebug())) 872 advance(); 873 } 874 } 875 friend class MachineRegisterInfo; 876 877 void advance() { 878 assert(Op && "Cannot increment end iterator!"); 879 Op = getNextOperandForReg(Op); 880 881 // All defs come before the uses, so stop def_iterator early. 882 if (!ReturnUses) { 883 if (Op) { 884 if (Op->isUse()) 885 Op = nullptr; 886 else 887 assert(!Op->isDebug() && "Can't have debug defs"); 888 } 889 } else { 890 // If this is an operand we don't care about, skip it. 891 while (Op && ((!ReturnDefs && Op->isDef()) || 892 (SkipDebug && Op->isDebug()))) 893 Op = getNextOperandForReg(Op); 894 } 895 } 896 public: 897 typedef std::iterator<std::forward_iterator_tag, 898 MachineInstr, ptrdiff_t>::reference reference; 899 typedef std::iterator<std::forward_iterator_tag, 900 MachineInstr, ptrdiff_t>::pointer pointer; 901 902 defusechain_instr_iterator() : Op(nullptr) {} 903 904 bool operator==(const defusechain_instr_iterator &x) const { 905 return Op == x.Op; 906 } 907 bool operator!=(const defusechain_instr_iterator &x) const { 908 return !operator==(x); 909 } 910 911 /// atEnd - return true if this iterator is equal to reg_end() on the value. 912 bool atEnd() const { return Op == nullptr; } 913 914 // Iterator traversal: forward iteration only 915 defusechain_instr_iterator &operator++() { // Preincrement 916 assert(Op && "Cannot increment end iterator!"); 917 if (ByOperand) 918 advance(); 919 else if (ByInstr) { 920 MachineInstr *P = Op->getParent(); 921 do { 922 advance(); 923 } while (Op && Op->getParent() == P); 924 } else if (ByBundle) { 925 MachineInstr *P = getBundleStart(Op->getParent()); 926 do { 927 advance(); 928 } while (Op && getBundleStart(Op->getParent()) == P); 929 } 930 931 return *this; 932 } 933 defusechain_instr_iterator operator++(int) { // Postincrement 934 defusechain_instr_iterator tmp = *this; ++*this; return tmp; 935 } 936 937 // Retrieve a reference to the current operand. 938 MachineInstr &operator*() const { 939 assert(Op && "Cannot dereference end iterator!"); 940 if (ByBundle) return *(getBundleStart(Op->getParent())); 941 return *Op->getParent(); 942 } 943 944 MachineInstr *operator->() const { 945 assert(Op && "Cannot dereference end iterator!"); 946 if (ByBundle) return getBundleStart(Op->getParent()); 947 return Op->getParent(); 948 } 949 }; 950 }; 951 952 /// Iterate over the pressure sets affected by the given physical or virtual 953 /// register. If Reg is physical, it must be a register unit (from 954 /// MCRegUnitIterator). 955 class PSetIterator { 956 const int *PSet; 957 unsigned Weight; 958 public: 959 PSetIterator(): PSet(nullptr), Weight(0) {} 960 PSetIterator(unsigned RegUnit, const MachineRegisterInfo *MRI) { 961 const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo(); 962 if (TargetRegisterInfo::isVirtualRegister(RegUnit)) { 963 const TargetRegisterClass *RC = MRI->getRegClass(RegUnit); 964 PSet = TRI->getRegClassPressureSets(RC); 965 Weight = TRI->getRegClassWeight(RC).RegWeight; 966 } 967 else { 968 PSet = TRI->getRegUnitPressureSets(RegUnit); 969 Weight = TRI->getRegUnitWeight(RegUnit); 970 } 971 if (*PSet == -1) 972 PSet = nullptr; 973 } 974 bool isValid() const { return PSet; } 975 976 unsigned getWeight() const { return Weight; } 977 978 unsigned operator*() const { return *PSet; } 979 980 void operator++() { 981 assert(isValid() && "Invalid PSetIterator."); 982 ++PSet; 983 if (*PSet == -1) 984 PSet = nullptr; 985 } 986 }; 987 988 inline PSetIterator MachineRegisterInfo:: 989 getPressureSets(unsigned RegUnit) const { 990 return PSetIterator(RegUnit, this); 991 } 992 993 } // End llvm namespace 994 995 #endif 996