RegisterScavenging.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. //===-- RegisterScavenging.cpp - Machine register scavenging --------------===//
  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 implements the machine register scavenger. It can provide
  11. // information, such as unused registers, at any point in a machine basic block.
  12. // It also provides a mechanism to make registers available by evicting them to
  13. // spill slots.
  14. //
  15. //===----------------------------------------------------------------------===//
  16. #define DEBUG_TYPE "reg-scavenging"
  17. #include "llvm/CodeGen/RegisterScavenging.h"
  18. #include "llvm/CodeGen/MachineFunction.h"
  19. #include "llvm/CodeGen/MachineBasicBlock.h"
  20. #include "llvm/CodeGen/MachineInstr.h"
  21. #include "llvm/CodeGen/MachineRegisterInfo.h"
  22. #include "llvm/Target/TargetRegisterInfo.h"
  23. #include "llvm/Target/TargetInstrInfo.h"
  24. #include "llvm/Target/TargetMachine.h"
  25. #include "llvm/ADT/SmallPtrSet.h"
  26. #include "llvm/ADT/SmallVector.h"
  27. #include "llvm/ADT/STLExtras.h"
  28. using namespace llvm;
  29. /// RedefinesSuperRegPart - Return true if the specified register is redefining
  30. /// part of a super-register.
  31. static bool RedefinesSuperRegPart(const MachineInstr *MI, unsigned SubReg,
  32. const TargetRegisterInfo *TRI) {
  33. bool SeenSuperUse = false;
  34. bool SeenSuperDef = false;
  35. for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
  36. const MachineOperand &MO = MI->getOperand(i);
  37. if (!MO.isReg())
  38. continue;
  39. if (TRI->isSuperRegister(SubReg, MO.getReg())) {
  40. if (MO.isUse())
  41. SeenSuperUse = true;
  42. else if (MO.isImplicit())
  43. SeenSuperDef = true;
  44. }
  45. }
  46. return SeenSuperDef && SeenSuperUse;
  47. }
  48. static bool RedefinesSuperRegPart(const MachineInstr *MI,
  49. const MachineOperand &MO,
  50. const TargetRegisterInfo *TRI) {
  51. assert(MO.isReg() && MO.isDef() && "Not a register def!");
  52. return RedefinesSuperRegPart(MI, MO.getReg(), TRI);
  53. }
  54. /// setUsed - Set the register and its sub-registers as being used.
  55. void RegScavenger::setUsed(unsigned Reg, bool ImpDef) {
  56. RegsAvailable.reset(Reg);
  57. ImplicitDefed[Reg] = ImpDef;
  58. for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
  59. unsigned SubReg = *SubRegs; ++SubRegs) {
  60. RegsAvailable.reset(SubReg);
  61. ImplicitDefed[SubReg] = ImpDef;
  62. }
  63. }
  64. /// setUnused - Set the register and its sub-registers as being unused.
  65. void RegScavenger::setUnused(unsigned Reg, const MachineInstr *MI) {
  66. RegsAvailable.set(Reg);
  67. ImplicitDefed.reset(Reg);
  68. for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
  69. unsigned SubReg = *SubRegs; ++SubRegs)
  70. if (!RedefinesSuperRegPart(MI, Reg, TRI)) {
  71. RegsAvailable.set(SubReg);
  72. ImplicitDefed.reset(SubReg);
  73. }
  74. }
  75. void RegScavenger::enterBasicBlock(MachineBasicBlock *mbb) {
  76. MachineFunction &MF = *mbb->getParent();
  77. const TargetMachine &TM = MF.getTarget();
  78. TII = TM.getInstrInfo();
  79. TRI = TM.getRegisterInfo();
  80. MRI = &MF.getRegInfo();
  81. assert((NumPhysRegs == 0 || NumPhysRegs == TRI->getNumRegs()) &&
  82. "Target changed?");
  83. if (!MBB) {
  84. NumPhysRegs = TRI->getNumRegs();
  85. RegsAvailable.resize(NumPhysRegs);
  86. ImplicitDefed.resize(NumPhysRegs);
  87. // Create reserved registers bitvector.
  88. ReservedRegs = TRI->getReservedRegs(MF);
  89. // Create callee-saved registers bitvector.
  90. CalleeSavedRegs.resize(NumPhysRegs);
  91. const unsigned *CSRegs = TRI->getCalleeSavedRegs();
  92. if (CSRegs != NULL)
  93. for (unsigned i = 0; CSRegs[i]; ++i)
  94. CalleeSavedRegs.set(CSRegs[i]);
  95. }
  96. MBB = mbb;
  97. ScavengedReg = 0;
  98. ScavengedRC = NULL;
  99. ScavengeRestore = NULL;
  100. CurrDist = 0;
  101. DistanceMap.clear();
  102. ImplicitDefed.reset();
  103. // All registers started out unused.
  104. RegsAvailable.set();
  105. // Reserved registers are always used.
  106. RegsAvailable ^= ReservedRegs;
  107. // Live-in registers are in use.
  108. if (!MBB->livein_empty())
  109. for (MachineBasicBlock::const_livein_iterator I = MBB->livein_begin(),
  110. E = MBB->livein_end(); I != E; ++I)
  111. setUsed(*I);
  112. Tracking = false;
  113. }
  114. void RegScavenger::restoreScavengedReg() {
  115. TII->loadRegFromStackSlot(*MBB, MBBI, ScavengedReg,
  116. ScavengingFrameIndex, ScavengedRC);
  117. MachineBasicBlock::iterator II = prior(MBBI);
  118. TRI->eliminateFrameIndex(II, 0, this);
  119. setUsed(ScavengedReg);
  120. ScavengedReg = 0;
  121. ScavengedRC = NULL;
  122. }
  123. #ifndef NDEBUG
  124. /// isLiveInButUnusedBefore - Return true if register is livein the MBB not
  125. /// not used before it reaches the MI that defines register.
  126. static bool isLiveInButUnusedBefore(unsigned Reg, MachineInstr *MI,
  127. MachineBasicBlock *MBB,
  128. const TargetRegisterInfo *TRI,
  129. MachineRegisterInfo* MRI) {
  130. // First check if register is livein.
  131. bool isLiveIn = false;
  132. for (MachineBasicBlock::const_livein_iterator I = MBB->livein_begin(),
  133. E = MBB->livein_end(); I != E; ++I)
  134. if (Reg == *I || TRI->isSuperRegister(Reg, *I)) {
  135. isLiveIn = true;
  136. break;
  137. }
  138. if (!isLiveIn)
  139. return false;
  140. // Is there any use of it before the specified MI?
  141. SmallPtrSet<MachineInstr*, 4> UsesInMBB;
  142. for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(Reg),
  143. UE = MRI->use_end(); UI != UE; ++UI) {
  144. MachineInstr *UseMI = &*UI;
  145. if (UseMI->getParent() == MBB)
  146. UsesInMBB.insert(UseMI);
  147. }
  148. if (UsesInMBB.empty())
  149. return true;
  150. for (MachineBasicBlock::iterator I = MBB->begin(), E = MI; I != E; ++I)
  151. if (UsesInMBB.count(&*I))
  152. return false;
  153. return true;
  154. }
  155. #endif
  156. void RegScavenger::forward() {
  157. // Move ptr forward.
  158. if (!Tracking) {
  159. MBBI = MBB->begin();
  160. Tracking = true;
  161. } else {
  162. assert(MBBI != MBB->end() && "Already at the end of the basic block!");
  163. MBBI = next(MBBI);
  164. }
  165. MachineInstr *MI = MBBI;
  166. DistanceMap.insert(std::make_pair(MI, CurrDist++));
  167. const TargetInstrDesc &TID = MI->getDesc();
  168. if (MI == ScavengeRestore) {
  169. ScavengedReg = 0;
  170. ScavengedRC = NULL;
  171. ScavengeRestore = NULL;
  172. }
  173. bool IsImpDef = MI->getOpcode() == TargetInstrInfo::IMPLICIT_DEF;
  174. // Separate register operands into 3 classes: uses, defs, earlyclobbers.
  175. SmallVector<std::pair<const MachineOperand*,unsigned>, 4> UseMOs;
  176. SmallVector<std::pair<const MachineOperand*,unsigned>, 4> DefMOs;
  177. SmallVector<std::pair<const MachineOperand*,unsigned>, 4> EarlyClobberMOs;
  178. for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
  179. const MachineOperand &MO = MI->getOperand(i);
  180. if (!MO.isReg() || MO.getReg() == 0)
  181. continue;
  182. if (MO.isUse())
  183. UseMOs.push_back(std::make_pair(&MO,i));
  184. else if (MO.isEarlyClobber())
  185. EarlyClobberMOs.push_back(std::make_pair(&MO,i));
  186. else
  187. DefMOs.push_back(std::make_pair(&MO,i));
  188. }
  189. // Process uses first.
  190. BitVector UseRegs(NumPhysRegs);
  191. for (unsigned i = 0, e = UseMOs.size(); i != e; ++i) {
  192. const MachineOperand MO = *UseMOs[i].first;
  193. unsigned Reg = MO.getReg();
  194. assert(isUsed(Reg) && "Using an undefined register!");
  195. if (MO.isKill() && !isReserved(Reg)) {
  196. UseRegs.set(Reg);
  197. // Mark sub-registers as used.
  198. for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
  199. unsigned SubReg = *SubRegs; ++SubRegs)
  200. UseRegs.set(SubReg);
  201. }
  202. }
  203. // Change states of all registers after all the uses are processed to guard
  204. // against multiple uses.
  205. setUnused(UseRegs);
  206. // Process early clobber defs then process defs. We can have a early clobber
  207. // that is dead, it should not conflict with a def that happens one "slot"
  208. // (see InstrSlots in LiveIntervalAnalysis.h) later.
  209. unsigned NumECs = EarlyClobberMOs.size();
  210. unsigned NumDefs = DefMOs.size();
  211. for (unsigned i = 0, e = NumECs + NumDefs; i != e; ++i) {
  212. const MachineOperand &MO = (i < NumECs)
  213. ? *EarlyClobberMOs[i].first : *DefMOs[i-NumECs].first;
  214. unsigned Idx = (i < NumECs)
  215. ? EarlyClobberMOs[i].second : DefMOs[i-NumECs].second;
  216. unsigned Reg = MO.getReg();
  217. // If it's dead upon def, then it is now free.
  218. if (MO.isDead()) {
  219. setUnused(Reg, MI);
  220. continue;
  221. }
  222. // Skip two-address destination operand.
  223. if (TID.findTiedToSrcOperand(Idx) != -1) {
  224. assert(isUsed(Reg) && "Using an undefined register!");
  225. continue;
  226. }
  227. // Skip if this is merely redefining part of a super-register.
  228. if (RedefinesSuperRegPart(MI, MO, TRI))
  229. continue;
  230. // Implicit def is allowed to "re-define" any register. Similarly,
  231. // implicitly defined registers can be clobbered.
  232. assert((isReserved(Reg) || isUnused(Reg) ||
  233. IsImpDef || isImplicitlyDefined(Reg) ||
  234. isLiveInButUnusedBefore(Reg, MI, MBB, TRI, MRI)) &&
  235. "Re-defining a live register!");
  236. setUsed(Reg, IsImpDef);
  237. }
  238. }
  239. void RegScavenger::backward() {
  240. assert(Tracking && "Not tracking states!");
  241. assert(MBBI != MBB->begin() && "Already at start of basic block!");
  242. // Move ptr backward.
  243. MBBI = prior(MBBI);
  244. MachineInstr *MI = MBBI;
  245. DistanceMap.erase(MI);
  246. --CurrDist;
  247. const TargetInstrDesc &TID = MI->getDesc();
  248. // Separate register operands into 3 classes: uses, defs, earlyclobbers.
  249. SmallVector<std::pair<const MachineOperand*,unsigned>, 4> UseMOs;
  250. SmallVector<std::pair<const MachineOperand*,unsigned>, 4> DefMOs;
  251. SmallVector<std::pair<const MachineOperand*,unsigned>, 4> EarlyClobberMOs;
  252. for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
  253. const MachineOperand &MO = MI->getOperand(i);
  254. if (!MO.isReg() || MO.getReg() == 0)
  255. continue;
  256. if (MO.isUse())
  257. UseMOs.push_back(std::make_pair(&MO,i));
  258. else if (MO.isEarlyClobber())
  259. EarlyClobberMOs.push_back(std::make_pair(&MO,i));
  260. else
  261. DefMOs.push_back(std::make_pair(&MO,i));
  262. }
  263. // Process defs first.
  264. unsigned NumECs = EarlyClobberMOs.size();
  265. unsigned NumDefs = DefMOs.size();
  266. for (unsigned i = 0, e = NumECs + NumDefs; i != e; ++i) {
  267. const MachineOperand &MO = (i < NumDefs)
  268. ? *DefMOs[i].first : *EarlyClobberMOs[i-NumDefs].first;
  269. unsigned Idx = (i < NumECs)
  270. ? DefMOs[i].second : EarlyClobberMOs[i-NumDefs].second;
  271. // Skip two-address destination operand.
  272. if (TID.findTiedToSrcOperand(Idx) != -1)
  273. continue;
  274. unsigned Reg = MO.getReg();
  275. assert(isUsed(Reg));
  276. if (!isReserved(Reg))
  277. setUnused(Reg, MI);
  278. }
  279. // Process uses.
  280. BitVector UseRegs(NumPhysRegs);
  281. for (unsigned i = 0, e = UseMOs.size(); i != e; ++i) {
  282. const MachineOperand MO = *UseMOs[i].first;
  283. unsigned Reg = MO.getReg();
  284. assert(isUnused(Reg) || isReserved(Reg));
  285. UseRegs.set(Reg);
  286. // Set the sub-registers as "used".
  287. for (const unsigned *SubRegs = TRI->getSubRegisters(Reg);
  288. unsigned SubReg = *SubRegs; ++SubRegs)
  289. UseRegs.set(SubReg);
  290. }
  291. setUsed(UseRegs);
  292. }
  293. void RegScavenger::getRegsUsed(BitVector &used, bool includeReserved) {
  294. if (includeReserved)
  295. used = ~RegsAvailable;
  296. else
  297. used = ~RegsAvailable & ~ReservedRegs;
  298. }
  299. /// CreateRegClassMask - Set the bits that represent the registers in the
  300. /// TargetRegisterClass.
  301. static void CreateRegClassMask(const TargetRegisterClass *RC, BitVector &Mask) {
  302. for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end(); I != E;
  303. ++I)
  304. Mask.set(*I);
  305. }
  306. unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass *RegClass,
  307. const BitVector &Candidates) const {
  308. // Mask off the registers which are not in the TargetRegisterClass.
  309. BitVector RegsAvailableCopy(NumPhysRegs, false);
  310. CreateRegClassMask(RegClass, RegsAvailableCopy);
  311. RegsAvailableCopy &= RegsAvailable;
  312. // Restrict the search to candidates.
  313. RegsAvailableCopy &= Candidates;
  314. // Returns the first unused (bit is set) register, or 0 is none is found.
  315. int Reg = RegsAvailableCopy.find_first();
  316. return (Reg == -1) ? 0 : Reg;
  317. }
  318. unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass *RegClass,
  319. bool ExCalleeSaved) const {
  320. // Mask off the registers which are not in the TargetRegisterClass.
  321. BitVector RegsAvailableCopy(NumPhysRegs, false);
  322. CreateRegClassMask(RegClass, RegsAvailableCopy);
  323. RegsAvailableCopy &= RegsAvailable;
  324. // If looking for a non-callee-saved register, mask off all the callee-saved
  325. // registers.
  326. if (ExCalleeSaved)
  327. RegsAvailableCopy &= ~CalleeSavedRegs;
  328. // Returns the first unused (bit is set) register, or 0 is none is found.
  329. int Reg = RegsAvailableCopy.find_first();
  330. return (Reg == -1) ? 0 : Reg;
  331. }
  332. /// findFirstUse - Calculate the distance to the first use of the
  333. /// specified register.
  334. MachineInstr*
  335. RegScavenger::findFirstUse(MachineBasicBlock *MBB,
  336. MachineBasicBlock::iterator I, unsigned Reg,
  337. unsigned &Dist) {
  338. MachineInstr *UseMI = 0;
  339. Dist = ~0U;
  340. for (MachineRegisterInfo::reg_iterator RI = MRI->reg_begin(Reg),
  341. RE = MRI->reg_end(); RI != RE; ++RI) {
  342. MachineInstr *UDMI = &*RI;
  343. if (UDMI->getParent() != MBB)
  344. continue;
  345. DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(UDMI);
  346. if (DI == DistanceMap.end()) {
  347. // If it's not in map, it's below current MI, let's initialize the
  348. // map.
  349. I = next(I);
  350. unsigned Dist = CurrDist + 1;
  351. while (I != MBB->end()) {
  352. DistanceMap.insert(std::make_pair(I, Dist++));
  353. I = next(I);
  354. }
  355. }
  356. DI = DistanceMap.find(UDMI);
  357. if (DI->second > CurrDist && DI->second < Dist) {
  358. Dist = DI->second;
  359. UseMI = UDMI;
  360. }
  361. }
  362. return UseMI;
  363. }
  364. unsigned RegScavenger::scavengeRegister(const TargetRegisterClass *RC,
  365. MachineBasicBlock::iterator I,
  366. int SPAdj) {
  367. assert(ScavengingFrameIndex >= 0 &&
  368. "Cannot scavenge a register without an emergency spill slot!");
  369. // Mask off the registers which are not in the TargetRegisterClass.
  370. BitVector Candidates(NumPhysRegs, false);
  371. CreateRegClassMask(RC, Candidates);
  372. Candidates ^= ReservedRegs; // Do not include reserved registers.
  373. // Exclude all the registers being used by the instruction.
  374. for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
  375. MachineOperand &MO = I->getOperand(i);
  376. if (MO.isReg())
  377. Candidates.reset(MO.getReg());
  378. }
  379. // Find the register whose use is furthest away.
  380. unsigned SReg = 0;
  381. unsigned MaxDist = 0;
  382. MachineInstr *MaxUseMI = 0;
  383. int Reg = Candidates.find_first();
  384. while (Reg != -1) {
  385. unsigned Dist;
  386. MachineInstr *UseMI = findFirstUse(MBB, I, Reg, Dist);
  387. for (const unsigned *AS = TRI->getAliasSet(Reg); *AS; ++AS) {
  388. unsigned AsDist;
  389. MachineInstr *AsUseMI = findFirstUse(MBB, I, *AS, AsDist);
  390. if (AsDist < Dist) {
  391. Dist = AsDist;
  392. UseMI = AsUseMI;
  393. }
  394. }
  395. if (Dist >= MaxDist) {
  396. MaxDist = Dist;
  397. MaxUseMI = UseMI;
  398. SReg = Reg;
  399. }
  400. Reg = Candidates.find_next(Reg);
  401. }
  402. if (ScavengedReg != 0) {
  403. assert(0 && "Scavenger slot is live, unable to scavenge another register!");
  404. abort();
  405. }
  406. // Spill the scavenged register before I.
  407. TII->storeRegToStackSlot(*MBB, I, SReg, true, ScavengingFrameIndex, RC);
  408. MachineBasicBlock::iterator II = prior(I);
  409. TRI->eliminateFrameIndex(II, SPAdj, this);
  410. // Restore the scavenged register before its use (or first terminator).
  411. II = MaxUseMI
  412. ? MachineBasicBlock::iterator(MaxUseMI) : MBB->getFirstTerminator();
  413. TII->loadRegFromStackSlot(*MBB, II, SReg, ScavengingFrameIndex, RC);
  414. ScavengeRestore = prior(II);
  415. ScavengedReg = SReg;
  416. ScavengedRC = RC;
  417. return SReg;
  418. }