1 //===-- RegisterScavenging.cpp - Machine register scavenging --------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
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
15 //===----------------------------------------------------------------------===//
17 #define DEBUG_TYPE "reg-scavenging"
18 #include "llvm/CodeGen/RegisterScavenging.h"
19 #include "llvm/CodeGen/MachineFrameInfo.h"
20 #include "llvm/CodeGen/MachineFunction.h"
21 #include "llvm/CodeGen/MachineBasicBlock.h"
22 #include "llvm/CodeGen/MachineInstr.h"
23 #include "llvm/CodeGen/MachineRegisterInfo.h"
24 #include "llvm/Support/ErrorHandling.h"
25 #include "llvm/Target/TargetRegisterInfo.h"
26 #include "llvm/Target/TargetInstrInfo.h"
27 #include "llvm/Target/TargetMachine.h"
28 #include "llvm/ADT/SmallPtrSet.h"
29 #include "llvm/ADT/SmallVector.h"
30 #include "llvm/ADT/STLExtras.h"
33 /// RedefinesSuperRegPart - Return true if the specified register is redefining
34 /// part of a super-register.
35 static bool RedefinesSuperRegPart(const MachineInstr
*MI
, unsigned SubReg
,
36 const TargetRegisterInfo
*TRI
) {
37 bool SeenSuperUse
= false;
38 bool SeenSuperDef
= false;
39 for (unsigned i
= 0, e
= MI
->getNumOperands(); i
!= e
; ++i
) {
40 const MachineOperand
&MO
= MI
->getOperand(i
);
41 if (!MO
.isReg() || MO
.isUndef())
43 if (TRI
->isSuperRegister(SubReg
, MO
.getReg())) {
46 else if (MO
.isImplicit())
51 return SeenSuperDef
&& SeenSuperUse
;
54 static bool RedefinesSuperRegPart(const MachineInstr
*MI
,
55 const MachineOperand
&MO
,
56 const TargetRegisterInfo
*TRI
) {
57 assert(MO
.isReg() && MO
.isDef() && "Not a register def!");
58 return RedefinesSuperRegPart(MI
, MO
.getReg(), TRI
);
61 bool RegScavenger::isSuperRegUsed(unsigned Reg
) const {
62 for (const unsigned *SuperRegs
= TRI
->getSuperRegisters(Reg
);
63 unsigned SuperReg
= *SuperRegs
; ++SuperRegs
)
69 /// setUsed - Set the register and its sub-registers as being used.
70 void RegScavenger::setUsed(unsigned Reg
) {
71 RegsAvailable
.reset(Reg
);
73 for (const unsigned *SubRegs
= TRI
->getSubRegisters(Reg
);
74 unsigned SubReg
= *SubRegs
; ++SubRegs
)
75 RegsAvailable
.reset(SubReg
);
78 /// setUnused - Set the register and its sub-registers as being unused.
79 void RegScavenger::setUnused(unsigned Reg
, const MachineInstr
*MI
) {
80 RegsAvailable
.set(Reg
);
82 for (const unsigned *SubRegs
= TRI
->getSubRegisters(Reg
);
83 unsigned SubReg
= *SubRegs
; ++SubRegs
)
84 if (!RedefinesSuperRegPart(MI
, Reg
, TRI
))
85 RegsAvailable
.set(SubReg
);
88 void RegScavenger::initRegState() {
91 ScavengeRestore
= NULL
;
95 // All registers started out unused.
98 // Reserved registers are always used.
99 RegsAvailable
^= ReservedRegs
;
101 // Live-in registers are in use.
103 if (!MBB
->livein_empty())
104 for (MachineBasicBlock::const_livein_iterator I
= MBB
->livein_begin(),
105 E
= MBB
->livein_end(); I
!= E
; ++I
)
110 void RegScavenger::enterBasicBlock(MachineBasicBlock
*mbb
) {
111 MachineFunction
&MF
= *mbb
->getParent();
112 const TargetMachine
&TM
= MF
.getTarget();
113 TII
= TM
.getInstrInfo();
114 TRI
= TM
.getRegisterInfo();
115 MRI
= &MF
.getRegInfo();
117 assert((NumPhysRegs
== 0 || NumPhysRegs
== TRI
->getNumRegs()) &&
122 NumPhysRegs
= TRI
->getNumRegs();
123 RegsAvailable
.resize(NumPhysRegs
);
125 // Create reserved registers bitvector.
126 ReservedRegs
= TRI
->getReservedRegs(MF
);
128 // Create callee-saved registers bitvector.
129 CalleeSavedRegs
.resize(NumPhysRegs
);
130 const unsigned *CSRegs
= TRI
->getCalleeSavedRegs();
131 if (CSRegs
!= NULL
) {
132 // At this point we know which CSRs are used by the current function,
133 // so allow those that are _not_ already used to be available to RS.
134 MachineFrameInfo
*FFI
= MF
.getFrameInfo();
135 const std::vector
<CalleeSavedInfo
> &CSI
= FFI
->getCalleeSavedInfo();
137 for (unsigned i
= 0, e
= CSI
.size(); i
!= e
; ++i
) {
138 CalleeSavedRegs
.set(CSI
[i
].getReg());
143 // RS used within emit{Pro,Epi}logue()
152 void RegScavenger::restoreScavengedReg() {
153 TII
->loadRegFromStackSlot(*MBB
, MBBI
, ScavengedReg
,
154 ScavengingFrameIndex
, ScavengedRC
);
155 MachineBasicBlock::iterator II
= prior(MBBI
);
156 TRI
->eliminateFrameIndex(II
, 0, this);
157 setUsed(ScavengedReg
);
163 /// isLiveInButUnusedBefore - Return true if register is livein the MBB not
164 /// not used before it reaches the MI that defines register.
165 static bool isLiveInButUnusedBefore(unsigned Reg
, MachineInstr
*MI
,
166 MachineBasicBlock
*MBB
,
167 const TargetRegisterInfo
*TRI
,
168 MachineRegisterInfo
* MRI
) {
169 // First check if register is livein.
170 bool isLiveIn
= false;
171 for (MachineBasicBlock::const_livein_iterator I
= MBB
->livein_begin(),
172 E
= MBB
->livein_end(); I
!= E
; ++I
)
173 if (Reg
== *I
|| TRI
->isSuperRegister(Reg
, *I
)) {
180 // Is there any use of it before the specified MI?
181 SmallPtrSet
<MachineInstr
*, 4> UsesInMBB
;
182 for (MachineRegisterInfo::use_iterator UI
= MRI
->use_begin(Reg
),
183 UE
= MRI
->use_end(); UI
!= UE
; ++UI
) {
184 MachineOperand
&UseMO
= UI
.getOperand();
185 if (UseMO
.isReg() && UseMO
.isUndef())
187 MachineInstr
*UseMI
= &*UI
;
188 if (UseMI
->getParent() == MBB
)
189 UsesInMBB
.insert(UseMI
);
191 if (UsesInMBB
.empty())
194 for (MachineBasicBlock::iterator I
= MBB
->begin(), E
= MI
; I
!= E
; ++I
)
195 if (UsesInMBB
.count(&*I
))
201 void RegScavenger::forward() {
207 assert(MBBI
!= MBB
->end() && "Already at the end of the basic block!");
211 MachineInstr
*MI
= MBBI
;
212 DistanceMap
.insert(std::make_pair(MI
, CurrDist
++));
214 if (MI
== ScavengeRestore
) {
217 ScavengeRestore
= NULL
;
221 if (MI
->getOpcode() == TargetInstrInfo::IMPLICIT_DEF
)
225 // Separate register operands into 3 classes: uses, defs, earlyclobbers.
226 SmallVector
<std::pair
<const MachineOperand
*,unsigned>, 4> UseMOs
;
227 SmallVector
<std::pair
<const MachineOperand
*,unsigned>, 4> DefMOs
;
228 SmallVector
<std::pair
<const MachineOperand
*,unsigned>, 4> EarlyClobberMOs
;
229 for (unsigned i
= 0, e
= MI
->getNumOperands(); i
!= e
; ++i
) {
230 const MachineOperand
&MO
= MI
->getOperand(i
);
231 if (!MO
.isReg() || MO
.getReg() == 0 || MO
.isUndef())
234 UseMOs
.push_back(std::make_pair(&MO
,i
));
235 else if (MO
.isEarlyClobber())
236 EarlyClobberMOs
.push_back(std::make_pair(&MO
,i
));
238 DefMOs
.push_back(std::make_pair(&MO
,i
));
241 // Process uses first.
242 BitVector
KillRegs(NumPhysRegs
);
243 for (unsigned i
= 0, e
= UseMOs
.size(); i
!= e
; ++i
) {
244 const MachineOperand MO
= *UseMOs
[i
].first
;
245 unsigned Idx
= UseMOs
[i
].second
;
246 unsigned Reg
= MO
.getReg();
248 // Allow free CSRs to be processed as uses.
249 assert((isUsed(Reg
) || !CalleeSavedRegs
[Reg
]) &&
250 "Using an undefined register!");
252 // Two-address operands implicitly kill.
253 if ((MO
.isKill() || MI
->isRegTiedToDefOperand(Idx
)) && !isReserved(Reg
)) {
256 // Mark sub-registers as used.
257 for (const unsigned *SubRegs
= TRI
->getSubRegisters(Reg
);
258 unsigned SubReg
= *SubRegs
; ++SubRegs
)
259 KillRegs
.set(SubReg
);
263 // Change states of all registers after all the uses are processed to guard
264 // against multiple uses.
267 // Process early clobber defs then process defs. We can have a early clobber
268 // that is dead, it should not conflict with a def that happens one "slot"
269 // (see InstrSlots in LiveIntervalAnalysis.h) later.
270 unsigned NumECs
= EarlyClobberMOs
.size();
271 unsigned NumDefs
= DefMOs
.size();
273 for (unsigned i
= 0, e
= NumECs
+ NumDefs
; i
!= e
; ++i
) {
274 const MachineOperand
&MO
= (i
< NumECs
)
275 ? *EarlyClobberMOs
[i
].first
: *DefMOs
[i
-NumECs
].first
;
276 unsigned Reg
= MO
.getReg();
280 // If it's dead upon def, then it is now free.
286 // Skip if this is merely redefining part of a super-register.
287 if (RedefinesSuperRegPart(MI
, MO
, TRI
))
290 assert((isReserved(Reg
) || isUnused(Reg
) || isSuperRegUsed(Reg
) ||
291 isLiveInButUnusedBefore(Reg
, MI
, MBB
, TRI
, MRI
)) &&
292 "Re-defining a live register!");
297 void RegScavenger::getRegsUsed(BitVector
&used
, bool includeReserved
) {
299 used
= ~RegsAvailable
;
301 used
= ~RegsAvailable
& ~ReservedRegs
;
304 /// CreateRegClassMask - Set the bits that represent the registers in the
305 /// TargetRegisterClass.
306 static void CreateRegClassMask(const TargetRegisterClass
*RC
, BitVector
&Mask
) {
307 for (TargetRegisterClass::iterator I
= RC
->begin(), E
= RC
->end(); I
!= E
;
312 unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass
*RegClass
,
313 const BitVector
&Candidates
) const {
314 // Mask off the registers which are not in the TargetRegisterClass.
315 BitVector
RegsAvailableCopy(NumPhysRegs
, false);
316 CreateRegClassMask(RegClass
, RegsAvailableCopy
);
317 RegsAvailableCopy
&= RegsAvailable
;
319 // Restrict the search to candidates.
320 RegsAvailableCopy
&= Candidates
;
322 // Returns the first unused (bit is set) register, or 0 is none is found.
323 int Reg
= RegsAvailableCopy
.find_first();
324 return (Reg
== -1) ? 0 : Reg
;
327 unsigned RegScavenger::FindUnusedReg(const TargetRegisterClass
*RegClass
,
328 bool ExCalleeSaved
) const {
329 // Mask off the registers which are not in the TargetRegisterClass.
330 BitVector
RegsAvailableCopy(NumPhysRegs
, false);
331 CreateRegClassMask(RegClass
, RegsAvailableCopy
);
332 RegsAvailableCopy
&= RegsAvailable
;
334 // If looking for a non-callee-saved register, mask off all the callee-saved
337 RegsAvailableCopy
&= ~CalleeSavedRegs
;
339 // Returns the first unused (bit is set) register, or 0 is none is found.
340 int Reg
= RegsAvailableCopy
.find_first();
341 return (Reg
== -1) ? 0 : Reg
;
344 /// findFirstUse - Calculate the distance to the first use of the
345 /// specified register.
347 RegScavenger::findFirstUse(MachineBasicBlock
*MBB
,
348 MachineBasicBlock::iterator I
, unsigned Reg
,
350 MachineInstr
*UseMI
= 0;
352 for (MachineRegisterInfo::reg_iterator RI
= MRI
->reg_begin(Reg
),
353 RE
= MRI
->reg_end(); RI
!= RE
; ++RI
) {
354 MachineInstr
*UDMI
= &*RI
;
355 if (UDMI
->getParent() != MBB
)
357 DenseMap
<MachineInstr
*, unsigned>::iterator DI
= DistanceMap
.find(UDMI
);
358 if (DI
== DistanceMap
.end()) {
359 // If it's not in map, it's below current MI, let's initialize the
362 unsigned Dist
= CurrDist
+ 1;
363 while (I
!= MBB
->end()) {
364 DistanceMap
.insert(std::make_pair(I
, Dist
++));
368 DI
= DistanceMap
.find(UDMI
);
369 if (DI
->second
> CurrDist
&& DI
->second
< Dist
) {
377 unsigned RegScavenger::scavengeRegister(const TargetRegisterClass
*RC
,
378 MachineBasicBlock::iterator I
,
380 assert(ScavengingFrameIndex
>= 0 &&
381 "Cannot scavenge a register without an emergency spill slot!");
383 // Mask off the registers which are not in the TargetRegisterClass.
384 BitVector
Candidates(NumPhysRegs
, false);
385 CreateRegClassMask(RC
, Candidates
);
386 // Do not include reserved registers.
387 Candidates
^= ReservedRegs
& Candidates
;
389 // Exclude all the registers being used by the instruction.
390 for (unsigned i
= 0, e
= I
->getNumOperands(); i
!= e
; ++i
) {
391 MachineOperand
&MO
= I
->getOperand(i
);
393 Candidates
.reset(MO
.getReg());
396 // Find the register whose use is furthest away.
398 unsigned MaxDist
= 0;
399 MachineInstr
*MaxUseMI
= 0;
400 int Reg
= Candidates
.find_first();
403 MachineInstr
*UseMI
= findFirstUse(MBB
, I
, Reg
, Dist
);
404 for (const unsigned *AS
= TRI
->getAliasSet(Reg
); *AS
; ++AS
) {
406 MachineInstr
*AsUseMI
= findFirstUse(MBB
, I
, *AS
, AsDist
);
412 if (Dist
>= MaxDist
) {
417 Reg
= Candidates
.find_next(Reg
);
420 assert(ScavengedReg
== 0 &&
421 "Scavenger slot is live, unable to scavenge another register!");
423 // Avoid infinite regress
426 // Make sure SReg is marked as used. It could be considered available
427 // if it is one of the callee saved registers, but hasn't been spilled.
429 MBB
->addLiveIn(SReg
);
433 // Spill the scavenged register before I.
434 TII
->storeRegToStackSlot(*MBB
, I
, SReg
, true, ScavengingFrameIndex
, RC
);
435 MachineBasicBlock::iterator II
= prior(I
);
436 TRI
->eliminateFrameIndex(II
, SPAdj
, this);
438 // Restore the scavenged register before its use (or first terminator).
440 ? MachineBasicBlock::iterator(MaxUseMI
) : MBB
->getFirstTerminator();
441 TII
->loadRegFromStackSlot(*MBB
, II
, SReg
, ScavengingFrameIndex
, RC
);
442 ScavengeRestore
= prior(II
);
443 // Doing this here leads to infinite regress
444 // ScavengedReg = SReg;