1 //===-- LiveVariables.cpp - Live Variable Analysis for Machine Code -------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file implements the LiveVariable analysis pass. For each machine
10 // instruction in the function, this pass calculates the set of registers that
11 // are immediately dead after the instruction (i.e., the instruction calculates
12 // the value, but it is never used) and the set of registers that are used by
13 // the instruction, but are never used after the instruction (i.e., they are
16 // This class computes live variables using a sparse implementation based on
17 // the machine code SSA form. This class computes live variable information for
18 // each virtual and _register allocatable_ physical register in a function. It
19 // uses the dominance properties of SSA form to efficiently compute live
20 // variables for virtual registers, and assumes that physical registers are only
21 // live within a single basic block (allowing it to do a single local analysis
22 // to resolve physical register lifetimes in each basic block). If a physical
23 // register is not register allocatable, it is not tracked. This is useful for
24 // things like the stack pointer and condition codes.
26 //===----------------------------------------------------------------------===//
28 #include "llvm/CodeGen/LiveVariables.h"
29 #include "llvm/ADT/DenseSet.h"
30 #include "llvm/ADT/DepthFirstIterator.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include "llvm/ADT/SmallPtrSet.h"
33 #include "llvm/ADT/SmallSet.h"
34 #include "llvm/CodeGen/MachineInstr.h"
35 #include "llvm/CodeGen/MachineRegisterInfo.h"
36 #include "llvm/CodeGen/Passes.h"
37 #include "llvm/Config/llvm-config.h"
38 #include "llvm/Support/Debug.h"
39 #include "llvm/Support/ErrorHandling.h"
40 #include "llvm/Support/raw_ostream.h"
44 char LiveVariables::ID
= 0;
45 char &llvm::LiveVariablesID
= LiveVariables::ID
;
46 INITIALIZE_PASS_BEGIN(LiveVariables
, "livevars",
47 "Live Variable Analysis", false, false)
48 INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElim
)
49 INITIALIZE_PASS_END(LiveVariables
, "livevars",
50 "Live Variable Analysis", false, false)
53 void LiveVariables::getAnalysisUsage(AnalysisUsage
&AU
) const {
54 AU
.addRequiredID(UnreachableMachineBlockElimID
);
56 MachineFunctionPass::getAnalysisUsage(AU
);
60 LiveVariables::VarInfo::findKill(const MachineBasicBlock
*MBB
) const {
61 for (unsigned i
= 0, e
= Kills
.size(); i
!= e
; ++i
)
62 if (Kills
[i
]->getParent() == MBB
)
67 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
68 LLVM_DUMP_METHOD
void LiveVariables::VarInfo::dump() const {
69 dbgs() << " Alive in blocks: ";
70 for (unsigned AB
: AliveBlocks
)
72 dbgs() << "\n Killed by:";
74 dbgs() << " No instructions.\n";
76 for (unsigned i
= 0, e
= Kills
.size(); i
!= e
; ++i
)
77 dbgs() << "\n #" << i
<< ": " << *Kills
[i
];
83 /// getVarInfo - Get (possibly creating) a VarInfo object for the given vreg.
84 LiveVariables::VarInfo
&LiveVariables::getVarInfo(Register Reg
) {
85 assert(Reg
.isVirtual() && "getVarInfo: not a virtual register!");
86 VirtRegInfo
.grow(Reg
);
87 return VirtRegInfo
[Reg
];
90 void LiveVariables::MarkVirtRegAliveInBlock(
91 VarInfo
&VRInfo
, MachineBasicBlock
*DefBlock
, MachineBasicBlock
*MBB
,
92 SmallVectorImpl
<MachineBasicBlock
*> &WorkList
) {
93 unsigned BBNum
= MBB
->getNumber();
95 // Check to see if this basic block is one of the killing blocks. If so,
97 for (unsigned i
= 0, e
= VRInfo
.Kills
.size(); i
!= e
; ++i
)
98 if (VRInfo
.Kills
[i
]->getParent() == MBB
) {
99 VRInfo
.Kills
.erase(VRInfo
.Kills
.begin()+i
); // Erase entry
103 if (MBB
== DefBlock
) return; // Terminate recursion
105 if (VRInfo
.AliveBlocks
.test(BBNum
))
106 return; // We already know the block is live
108 // Mark the variable known alive in this bb
109 VRInfo
.AliveBlocks
.set(BBNum
);
111 assert(MBB
!= &MF
->front() && "Can't find reaching def for virtreg");
112 WorkList
.insert(WorkList
.end(), MBB
->pred_rbegin(), MBB
->pred_rend());
115 void LiveVariables::MarkVirtRegAliveInBlock(VarInfo
&VRInfo
,
116 MachineBasicBlock
*DefBlock
,
117 MachineBasicBlock
*MBB
) {
118 SmallVector
<MachineBasicBlock
*, 16> WorkList
;
119 MarkVirtRegAliveInBlock(VRInfo
, DefBlock
, MBB
, WorkList
);
121 while (!WorkList
.empty()) {
122 MachineBasicBlock
*Pred
= WorkList
.back();
124 MarkVirtRegAliveInBlock(VRInfo
, DefBlock
, Pred
, WorkList
);
128 void LiveVariables::HandleVirtRegUse(Register Reg
, MachineBasicBlock
*MBB
,
130 assert(MRI
->getVRegDef(Reg
) && "Register use before def!");
132 unsigned BBNum
= MBB
->getNumber();
134 VarInfo
&VRInfo
= getVarInfo(Reg
);
136 // Check to see if this basic block is already a kill block.
137 if (!VRInfo
.Kills
.empty() && VRInfo
.Kills
.back()->getParent() == MBB
) {
138 // Yes, this register is killed in this basic block already. Increase the
139 // live range by updating the kill instruction.
140 VRInfo
.Kills
.back() = &MI
;
145 for (unsigned i
= 0, e
= VRInfo
.Kills
.size(); i
!= e
; ++i
)
146 assert(VRInfo
.Kills
[i
]->getParent() != MBB
&& "entry should be at end!");
149 // This situation can occur:
154 // | t2 = phi ... t1 ...
158 // | ... = ... t1 ...
162 // where there is a use in a PHI node that's a predecessor to the defining
163 // block. We don't want to mark all predecessors as having the value "alive"
165 if (MBB
== MRI
->getVRegDef(Reg
)->getParent())
168 // Add a new kill entry for this basic block. If this virtual register is
169 // already marked as alive in this basic block, that means it is alive in at
170 // least one of the successor blocks, it's not a kill.
171 if (!VRInfo
.AliveBlocks
.test(BBNum
))
172 VRInfo
.Kills
.push_back(&MI
);
174 // Update all dominating blocks to mark them as "known live".
175 for (MachineBasicBlock
*Pred
: MBB
->predecessors())
176 MarkVirtRegAliveInBlock(VRInfo
, MRI
->getVRegDef(Reg
)->getParent(), Pred
);
179 void LiveVariables::HandleVirtRegDef(Register Reg
, MachineInstr
&MI
) {
180 VarInfo
&VRInfo
= getVarInfo(Reg
);
182 if (VRInfo
.AliveBlocks
.empty())
183 // If vr is not alive in any block, then defaults to dead.
184 VRInfo
.Kills
.push_back(&MI
);
187 /// FindLastPartialDef - Return the last partial def of the specified register.
188 /// Also returns the sub-registers that're defined by the instruction.
190 LiveVariables::FindLastPartialDef(Register Reg
,
191 SmallSet
<unsigned, 4> &PartDefRegs
) {
192 unsigned LastDefReg
= 0;
193 unsigned LastDefDist
= 0;
194 MachineInstr
*LastDef
= nullptr;
195 for (MCSubRegIterator
SubRegs(Reg
, TRI
); SubRegs
.isValid(); ++SubRegs
) {
196 unsigned SubReg
= *SubRegs
;
197 MachineInstr
*Def
= PhysRegDef
[SubReg
];
200 unsigned Dist
= DistanceMap
[Def
];
201 if (Dist
> LastDefDist
) {
211 PartDefRegs
.insert(LastDefReg
);
212 for (unsigned i
= 0, e
= LastDef
->getNumOperands(); i
!= e
; ++i
) {
213 MachineOperand
&MO
= LastDef
->getOperand(i
);
214 if (!MO
.isReg() || !MO
.isDef() || MO
.getReg() == 0)
216 Register DefReg
= MO
.getReg();
217 if (TRI
->isSubRegister(Reg
, DefReg
)) {
218 for (MCSubRegIterator
SubRegs(DefReg
, TRI
, /*IncludeSelf=*/true);
219 SubRegs
.isValid(); ++SubRegs
)
220 PartDefRegs
.insert(*SubRegs
);
226 /// HandlePhysRegUse - Turn previous partial def's into read/mod/writes. Add
227 /// implicit defs to a machine instruction if there was an earlier def of its
229 void LiveVariables::HandlePhysRegUse(Register Reg
, MachineInstr
&MI
) {
230 MachineInstr
*LastDef
= PhysRegDef
[Reg
];
231 // If there was a previous use or a "full" def all is well.
232 if (!LastDef
&& !PhysRegUse
[Reg
]) {
233 // Otherwise, the last sub-register def implicitly defines this register.
236 // AL = ... implicit-def EAX, implicit killed AH
240 // All of the sub-registers must have been defined before the use of Reg!
241 SmallSet
<unsigned, 4> PartDefRegs
;
242 MachineInstr
*LastPartialDef
= FindLastPartialDef(Reg
, PartDefRegs
);
243 // If LastPartialDef is NULL, it must be using a livein register.
244 if (LastPartialDef
) {
245 LastPartialDef
->addOperand(MachineOperand::CreateReg(Reg
, true/*IsDef*/,
247 PhysRegDef
[Reg
] = LastPartialDef
;
248 SmallSet
<unsigned, 8> Processed
;
249 for (MCSubRegIterator
SubRegs(Reg
, TRI
); SubRegs
.isValid(); ++SubRegs
) {
250 unsigned SubReg
= *SubRegs
;
251 if (Processed
.count(SubReg
))
253 if (PartDefRegs
.count(SubReg
))
255 // This part of Reg was defined before the last partial def. It's killed
257 LastPartialDef
->addOperand(MachineOperand::CreateReg(SubReg
,
260 PhysRegDef
[SubReg
] = LastPartialDef
;
261 for (MCSubRegIterator
SS(SubReg
, TRI
); SS
.isValid(); ++SS
)
262 Processed
.insert(*SS
);
265 } else if (LastDef
&& !PhysRegUse
[Reg
] &&
266 !LastDef
->findRegisterDefOperand(Reg
))
267 // Last def defines the super register, add an implicit def of reg.
268 LastDef
->addOperand(MachineOperand::CreateReg(Reg
, true/*IsDef*/,
271 // Remember this use.
272 for (MCSubRegIterator
SubRegs(Reg
, TRI
, /*IncludeSelf=*/true);
273 SubRegs
.isValid(); ++SubRegs
)
274 PhysRegUse
[*SubRegs
] = &MI
;
277 /// FindLastRefOrPartRef - Return the last reference or partial reference of
278 /// the specified register.
279 MachineInstr
*LiveVariables::FindLastRefOrPartRef(Register Reg
) {
280 MachineInstr
*LastDef
= PhysRegDef
[Reg
];
281 MachineInstr
*LastUse
= PhysRegUse
[Reg
];
282 if (!LastDef
&& !LastUse
)
285 MachineInstr
*LastRefOrPartRef
= LastUse
? LastUse
: LastDef
;
286 unsigned LastRefOrPartRefDist
= DistanceMap
[LastRefOrPartRef
];
287 unsigned LastPartDefDist
= 0;
288 for (MCSubRegIterator
SubRegs(Reg
, TRI
); SubRegs
.isValid(); ++SubRegs
) {
289 unsigned SubReg
= *SubRegs
;
290 MachineInstr
*Def
= PhysRegDef
[SubReg
];
291 if (Def
&& Def
!= LastDef
) {
292 // There was a def of this sub-register in between. This is a partial
293 // def, keep track of the last one.
294 unsigned Dist
= DistanceMap
[Def
];
295 if (Dist
> LastPartDefDist
)
296 LastPartDefDist
= Dist
;
297 } else if (MachineInstr
*Use
= PhysRegUse
[SubReg
]) {
298 unsigned Dist
= DistanceMap
[Use
];
299 if (Dist
> LastRefOrPartRefDist
) {
300 LastRefOrPartRefDist
= Dist
;
301 LastRefOrPartRef
= Use
;
306 return LastRefOrPartRef
;
309 bool LiveVariables::HandlePhysRegKill(Register Reg
, MachineInstr
*MI
) {
310 MachineInstr
*LastDef
= PhysRegDef
[Reg
];
311 MachineInstr
*LastUse
= PhysRegUse
[Reg
];
312 if (!LastDef
&& !LastUse
)
315 MachineInstr
*LastRefOrPartRef
= LastUse
? LastUse
: LastDef
;
316 unsigned LastRefOrPartRefDist
= DistanceMap
[LastRefOrPartRef
];
317 // The whole register is used.
322 // = AL, implicit killed AX
325 // Or whole register is defined, but not used at all.
330 // Or whole register is defined, but only partly used.
331 // dead AX = implicit-def AL
334 MachineInstr
*LastPartDef
= nullptr;
335 unsigned LastPartDefDist
= 0;
336 SmallSet
<unsigned, 8> PartUses
;
337 for (MCSubRegIterator
SubRegs(Reg
, TRI
); SubRegs
.isValid(); ++SubRegs
) {
338 unsigned SubReg
= *SubRegs
;
339 MachineInstr
*Def
= PhysRegDef
[SubReg
];
340 if (Def
&& Def
!= LastDef
) {
341 // There was a def of this sub-register in between. This is a partial
342 // def, keep track of the last one.
343 unsigned Dist
= DistanceMap
[Def
];
344 if (Dist
> LastPartDefDist
) {
345 LastPartDefDist
= Dist
;
350 if (MachineInstr
*Use
= PhysRegUse
[SubReg
]) {
351 for (MCSubRegIterator
SS(SubReg
, TRI
, /*IncludeSelf=*/true); SS
.isValid();
353 PartUses
.insert(*SS
);
354 unsigned Dist
= DistanceMap
[Use
];
355 if (Dist
> LastRefOrPartRefDist
) {
356 LastRefOrPartRefDist
= Dist
;
357 LastRefOrPartRef
= Use
;
362 if (!PhysRegUse
[Reg
]) {
363 // Partial uses. Mark register def dead and add implicit def of
364 // sub-registers which are used.
365 // dead EAX = op implicit-def AL
366 // That is, EAX def is dead but AL def extends pass it.
367 PhysRegDef
[Reg
]->addRegisterDead(Reg
, TRI
, true);
368 for (MCSubRegIterator
SubRegs(Reg
, TRI
); SubRegs
.isValid(); ++SubRegs
) {
369 unsigned SubReg
= *SubRegs
;
370 if (!PartUses
.count(SubReg
))
373 if (PhysRegDef
[Reg
] == PhysRegDef
[SubReg
]) {
374 MachineOperand
*MO
= PhysRegDef
[Reg
]->findRegisterDefOperand(SubReg
);
377 assert(!MO
->isDead());
381 PhysRegDef
[Reg
]->addOperand(MachineOperand::CreateReg(SubReg
,
382 true/*IsDef*/, true/*IsImp*/));
383 MachineInstr
*LastSubRef
= FindLastRefOrPartRef(SubReg
);
385 LastSubRef
->addRegisterKilled(SubReg
, TRI
, true);
387 LastRefOrPartRef
->addRegisterKilled(SubReg
, TRI
, true);
388 for (MCSubRegIterator
SS(SubReg
, TRI
, /*IncludeSelf=*/true);
390 PhysRegUse
[*SS
] = LastRefOrPartRef
;
392 for (MCSubRegIterator
SS(SubReg
, TRI
); SS
.isValid(); ++SS
)
395 } else if (LastRefOrPartRef
== PhysRegDef
[Reg
] && LastRefOrPartRef
!= MI
) {
397 // The last partial def kills the register.
398 LastPartDef
->addOperand(MachineOperand::CreateReg(Reg
, false/*IsDef*/,
399 true/*IsImp*/, true/*IsKill*/));
402 LastRefOrPartRef
->findRegisterDefOperand(Reg
, false, false, TRI
);
403 bool NeedEC
= MO
->isEarlyClobber() && MO
->getReg() != Reg
;
404 // If the last reference is the last def, then it's not used at all.
405 // That is, unless we are currently processing the last reference itself.
406 LastRefOrPartRef
->addRegisterDead(Reg
, TRI
, true);
408 // If we are adding a subreg def and the superreg def is marked early
409 // clobber, add an early clobber marker to the subreg def.
410 MO
= LastRefOrPartRef
->findRegisterDefOperand(Reg
);
412 MO
->setIsEarlyClobber();
416 LastRefOrPartRef
->addRegisterKilled(Reg
, TRI
, true);
420 void LiveVariables::HandleRegMask(const MachineOperand
&MO
) {
421 // Call HandlePhysRegKill() for all live registers clobbered by Mask.
422 // Clobbered registers are always dead, sp there is no need to use
423 // HandlePhysRegDef().
424 for (unsigned Reg
= 1, NumRegs
= TRI
->getNumRegs(); Reg
!= NumRegs
; ++Reg
) {
426 if (!PhysRegDef
[Reg
] && !PhysRegUse
[Reg
])
428 // Skip mask-preserved regs.
429 if (!MO
.clobbersPhysReg(Reg
))
431 // Kill the largest clobbered super-register.
432 // This avoids needless implicit operands.
433 unsigned Super
= Reg
;
434 for (MCSuperRegIterator
SR(Reg
, TRI
); SR
.isValid(); ++SR
)
435 if ((PhysRegDef
[*SR
] || PhysRegUse
[*SR
]) && MO
.clobbersPhysReg(*SR
))
437 HandlePhysRegKill(Super
, nullptr);
441 void LiveVariables::HandlePhysRegDef(Register Reg
, MachineInstr
*MI
,
442 SmallVectorImpl
<unsigned> &Defs
) {
443 // What parts of the register are previously defined?
444 SmallSet
<unsigned, 32> Live
;
445 if (PhysRegDef
[Reg
] || PhysRegUse
[Reg
]) {
446 for (MCSubRegIterator
SubRegs(Reg
, TRI
, /*IncludeSelf=*/true);
447 SubRegs
.isValid(); ++SubRegs
)
448 Live
.insert(*SubRegs
);
450 for (MCSubRegIterator
SubRegs(Reg
, TRI
); SubRegs
.isValid(); ++SubRegs
) {
451 unsigned SubReg
= *SubRegs
;
452 // If a register isn't itself defined, but all parts that make up of it
453 // are defined, then consider it also defined.
458 if (Live
.count(SubReg
))
460 if (PhysRegDef
[SubReg
] || PhysRegUse
[SubReg
]) {
461 for (MCSubRegIterator
SS(SubReg
, TRI
, /*IncludeSelf=*/true);
468 // Start from the largest piece, find the last time any part of the register
470 HandlePhysRegKill(Reg
, MI
);
471 // Only some of the sub-registers are used.
472 for (MCSubRegIterator
SubRegs(Reg
, TRI
); SubRegs
.isValid(); ++SubRegs
) {
473 unsigned SubReg
= *SubRegs
;
474 if (!Live
.count(SubReg
))
475 // Skip if this sub-register isn't defined.
477 HandlePhysRegKill(SubReg
, MI
);
481 Defs
.push_back(Reg
); // Remember this def.
484 void LiveVariables::UpdatePhysRegDefs(MachineInstr
&MI
,
485 SmallVectorImpl
<unsigned> &Defs
) {
486 while (!Defs
.empty()) {
487 Register Reg
= Defs
.back();
489 for (MCSubRegIterator
SubRegs(Reg
, TRI
, /*IncludeSelf=*/true);
490 SubRegs
.isValid(); ++SubRegs
) {
491 unsigned SubReg
= *SubRegs
;
492 PhysRegDef
[SubReg
] = &MI
;
493 PhysRegUse
[SubReg
] = nullptr;
498 void LiveVariables::runOnInstr(MachineInstr
&MI
,
499 SmallVectorImpl
<unsigned> &Defs
) {
500 assert(!MI
.isDebugOrPseudoInstr());
501 // Process all of the operands of the instruction...
502 unsigned NumOperandsToProcess
= MI
.getNumOperands();
504 // Unless it is a PHI node. In this case, ONLY process the DEF, not any
505 // of the uses. They will be handled in other basic blocks.
507 NumOperandsToProcess
= 1;
509 // Clear kill and dead markers. LV will recompute them.
510 SmallVector
<unsigned, 4> UseRegs
;
511 SmallVector
<unsigned, 4> DefRegs
;
512 SmallVector
<unsigned, 1> RegMasks
;
513 for (unsigned i
= 0; i
!= NumOperandsToProcess
; ++i
) {
514 MachineOperand
&MO
= MI
.getOperand(i
);
515 if (MO
.isRegMask()) {
516 RegMasks
.push_back(i
);
519 if (!MO
.isReg() || MO
.getReg() == 0)
521 Register MOReg
= MO
.getReg();
523 if (!(Register::isPhysicalRegister(MOReg
) && MRI
->isReserved(MOReg
)))
526 UseRegs
.push_back(MOReg
);
529 // FIXME: We should not remove any dead flags. However the MIPS RDDSP
530 // instruction needs it at the moment: http://llvm.org/PR27116.
531 if (Register::isPhysicalRegister(MOReg
) && !MRI
->isReserved(MOReg
))
533 DefRegs
.push_back(MOReg
);
537 MachineBasicBlock
*MBB
= MI
.getParent();
539 for (unsigned i
= 0, e
= UseRegs
.size(); i
!= e
; ++i
) {
540 unsigned MOReg
= UseRegs
[i
];
541 if (Register::isVirtualRegister(MOReg
))
542 HandleVirtRegUse(MOReg
, MBB
, MI
);
543 else if (!MRI
->isReserved(MOReg
))
544 HandlePhysRegUse(MOReg
, MI
);
547 // Process all masked registers. (Call clobbers).
548 for (unsigned i
= 0, e
= RegMasks
.size(); i
!= e
; ++i
)
549 HandleRegMask(MI
.getOperand(RegMasks
[i
]));
552 for (unsigned i
= 0, e
= DefRegs
.size(); i
!= e
; ++i
) {
553 unsigned MOReg
= DefRegs
[i
];
554 if (Register::isVirtualRegister(MOReg
))
555 HandleVirtRegDef(MOReg
, MI
);
556 else if (!MRI
->isReserved(MOReg
))
557 HandlePhysRegDef(MOReg
, &MI
, Defs
);
559 UpdatePhysRegDefs(MI
, Defs
);
562 void LiveVariables::runOnBlock(MachineBasicBlock
*MBB
, const unsigned NumRegs
) {
563 // Mark live-in registers as live-in.
564 SmallVector
<unsigned, 4> Defs
;
565 for (const auto &LI
: MBB
->liveins()) {
566 assert(Register::isPhysicalRegister(LI
.PhysReg
) &&
567 "Cannot have a live-in virtual register!");
568 HandlePhysRegDef(LI
.PhysReg
, nullptr, Defs
);
571 // Loop over all of the instructions, processing them.
574 for (MachineInstr
&MI
: *MBB
) {
575 if (MI
.isDebugOrPseudoInstr())
577 DistanceMap
.insert(std::make_pair(&MI
, Dist
++));
579 runOnInstr(MI
, Defs
);
582 // Handle any virtual assignments from PHI nodes which might be at the
583 // bottom of this basic block. We check all of our successor blocks to see
584 // if they have PHI nodes, and if so, we simulate an assignment at the end
585 // of the current block.
586 if (!PHIVarInfo
[MBB
->getNumber()].empty()) {
587 SmallVectorImpl
<unsigned> &VarInfoVec
= PHIVarInfo
[MBB
->getNumber()];
589 for (unsigned I
: VarInfoVec
)
590 // Mark it alive only in the block we are representing.
591 MarkVirtRegAliveInBlock(getVarInfo(I
), MRI
->getVRegDef(I
)->getParent(),
595 // MachineCSE may CSE instructions which write to non-allocatable physical
596 // registers across MBBs. Remember if any reserved register is liveout.
597 SmallSet
<unsigned, 4> LiveOuts
;
598 for (const MachineBasicBlock
*SuccMBB
: MBB
->successors()) {
599 if (SuccMBB
->isEHPad())
601 for (const auto &LI
: SuccMBB
->liveins()) {
602 if (!TRI
->isInAllocatableClass(LI
.PhysReg
))
603 // Ignore other live-ins, e.g. those that are live into landing pads.
604 LiveOuts
.insert(LI
.PhysReg
);
608 // Loop over PhysRegDef / PhysRegUse, killing any registers that are
609 // available at the end of the basic block.
610 for (unsigned i
= 0; i
!= NumRegs
; ++i
)
611 if ((PhysRegDef
[i
] || PhysRegUse
[i
]) && !LiveOuts
.count(i
))
612 HandlePhysRegDef(i
, nullptr, Defs
);
615 bool LiveVariables::runOnMachineFunction(MachineFunction
&mf
) {
617 MRI
= &mf
.getRegInfo();
618 TRI
= MF
->getSubtarget().getRegisterInfo();
620 const unsigned NumRegs
= TRI
->getNumRegs();
621 PhysRegDef
.assign(NumRegs
, nullptr);
622 PhysRegUse
.assign(NumRegs
, nullptr);
623 PHIVarInfo
.resize(MF
->getNumBlockIDs());
626 // FIXME: LiveIntervals will be updated to remove its dependence on
627 // LiveVariables to improve compilation time and eliminate bizarre pass
628 // dependencies. Until then, we can't change much in -O0.
630 report_fatal_error("regalloc=... not currently supported with -O0");
634 // Calculate live variable information in depth first order on the CFG of the
635 // function. This guarantees that we will see the definition of a virtual
636 // register before its uses due to dominance properties of SSA (except for PHI
637 // nodes, which are treated as a special case).
638 MachineBasicBlock
*Entry
= &MF
->front();
639 df_iterator_default_set
<MachineBasicBlock
*,16> Visited
;
641 for (MachineBasicBlock
*MBB
: depth_first_ext(Entry
, Visited
)) {
642 runOnBlock(MBB
, NumRegs
);
644 PhysRegDef
.assign(NumRegs
, nullptr);
645 PhysRegUse
.assign(NumRegs
, nullptr);
648 // Convert and transfer the dead / killed information we have gathered into
649 // VirtRegInfo onto MI's.
650 for (unsigned i
= 0, e1
= VirtRegInfo
.size(); i
!= e1
; ++i
) {
651 const Register Reg
= Register::index2VirtReg(i
);
652 for (unsigned j
= 0, e2
= VirtRegInfo
[Reg
].Kills
.size(); j
!= e2
; ++j
)
653 if (VirtRegInfo
[Reg
].Kills
[j
] == MRI
->getVRegDef(Reg
))
654 VirtRegInfo
[Reg
].Kills
[j
]->addRegisterDead(Reg
, TRI
);
656 VirtRegInfo
[Reg
].Kills
[j
]->addRegisterKilled(Reg
, TRI
);
659 // Check to make sure there are no unreachable blocks in the MC CFG for the
660 // function. If so, it is due to a bug in the instruction selector or some
661 // other part of the code generator if this happens.
663 for (const MachineBasicBlock
&MBB
: *MF
)
664 assert(Visited
.contains(&MBB
) && "unreachable basic block found");
674 /// replaceKillInstruction - Update register kill info by replacing a kill
675 /// instruction with a new one.
676 void LiveVariables::replaceKillInstruction(Register Reg
, MachineInstr
&OldMI
,
677 MachineInstr
&NewMI
) {
678 VarInfo
&VI
= getVarInfo(Reg
);
679 std::replace(VI
.Kills
.begin(), VI
.Kills
.end(), &OldMI
, &NewMI
);
682 /// removeVirtualRegistersKilled - Remove all killed info for the specified
684 void LiveVariables::removeVirtualRegistersKilled(MachineInstr
&MI
) {
685 for (unsigned i
= 0, e
= MI
.getNumOperands(); i
!= e
; ++i
) {
686 MachineOperand
&MO
= MI
.getOperand(i
);
687 if (MO
.isReg() && MO
.isKill()) {
689 Register Reg
= MO
.getReg();
690 if (Register::isVirtualRegister(Reg
)) {
691 bool removed
= getVarInfo(Reg
).removeKill(MI
);
692 assert(removed
&& "kill not in register's VarInfo?");
699 /// analyzePHINodes - Gather information about the PHI nodes in here. In
700 /// particular, we want to map the variable information of a virtual register
701 /// which is used in a PHI node. We map that to the BB the vreg is coming from.
703 void LiveVariables::analyzePHINodes(const MachineFunction
& Fn
) {
704 for (const auto &MBB
: Fn
)
705 for (const auto &BBI
: MBB
) {
708 for (unsigned i
= 1, e
= BBI
.getNumOperands(); i
!= e
; i
+= 2)
709 if (BBI
.getOperand(i
).readsReg())
710 PHIVarInfo
[BBI
.getOperand(i
+ 1).getMBB()->getNumber()]
711 .push_back(BBI
.getOperand(i
).getReg());
715 bool LiveVariables::VarInfo::isLiveIn(const MachineBasicBlock
&MBB
,
716 Register Reg
, MachineRegisterInfo
&MRI
) {
717 unsigned Num
= MBB
.getNumber();
719 // Reg is live-through.
720 if (AliveBlocks
.test(Num
))
723 // Registers defined in MBB cannot be live in.
724 const MachineInstr
*Def
= MRI
.getVRegDef(Reg
);
725 if (Def
&& Def
->getParent() == &MBB
)
728 // Reg was not defined in MBB, was it killed here?
729 return findKill(&MBB
);
732 bool LiveVariables::isLiveOut(Register Reg
, const MachineBasicBlock
&MBB
) {
733 LiveVariables::VarInfo
&VI
= getVarInfo(Reg
);
735 SmallPtrSet
<const MachineBasicBlock
*, 8> Kills
;
736 for (unsigned i
= 0, e
= VI
.Kills
.size(); i
!= e
; ++i
)
737 Kills
.insert(VI
.Kills
[i
]->getParent());
739 // Loop over all of the successors of the basic block, checking to see if
740 // the value is either live in the block, or if it is killed in the block.
741 for (const MachineBasicBlock
*SuccMBB
: MBB
.successors()) {
742 // Is it alive in this successor?
743 unsigned SuccIdx
= SuccMBB
->getNumber();
744 if (VI
.AliveBlocks
.test(SuccIdx
))
746 // Or is it live because there is a use in a successor that kills it?
747 if (Kills
.count(SuccMBB
))
754 /// addNewBlock - Add a new basic block BB as an empty succcessor to DomBB. All
755 /// variables that are live out of DomBB will be marked as passing live through
757 void LiveVariables::addNewBlock(MachineBasicBlock
*BB
,
758 MachineBasicBlock
*DomBB
,
759 MachineBasicBlock
*SuccBB
) {
760 const unsigned NumNew
= BB
->getNumber();
762 DenseSet
<unsigned> Defs
, Kills
;
764 MachineBasicBlock::iterator BBI
= SuccBB
->begin(), BBE
= SuccBB
->end();
765 for (; BBI
!= BBE
&& BBI
->isPHI(); ++BBI
) {
766 // Record the def of the PHI node.
767 Defs
.insert(BBI
->getOperand(0).getReg());
769 // All registers used by PHI nodes in SuccBB must be live through BB.
770 for (unsigned i
= 1, e
= BBI
->getNumOperands(); i
!= e
; i
+= 2)
771 if (BBI
->getOperand(i
+1).getMBB() == BB
)
772 getVarInfo(BBI
->getOperand(i
).getReg()).AliveBlocks
.set(NumNew
);
775 // Record all vreg defs and kills of all instructions in SuccBB.
776 for (; BBI
!= BBE
; ++BBI
) {
777 for (const MachineOperand
&Op
: BBI
->operands()) {
778 if (Op
.isReg() && Register::isVirtualRegister(Op
.getReg())) {
780 Defs
.insert(Op
.getReg());
781 else if (Op
.isKill())
782 Kills
.insert(Op
.getReg());
787 // Update info for all live variables
788 for (unsigned i
= 0, e
= MRI
->getNumVirtRegs(); i
!= e
; ++i
) {
789 Register Reg
= Register::index2VirtReg(i
);
791 // If the Defs is defined in the successor it can't be live in BB.
795 // If the register is either killed in or live through SuccBB it's also live
797 VarInfo
&VI
= getVarInfo(Reg
);
798 if (Kills
.count(Reg
) || VI
.AliveBlocks
.test(SuccBB
->getNumber()))
799 VI
.AliveBlocks
.set(NumNew
);
803 /// addNewBlock - Add a new basic block BB as an empty succcessor to DomBB. All
804 /// variables that are live out of DomBB will be marked as passing live through
805 /// BB. LiveInSets[BB] is *not* updated (because it is not needed during
807 void LiveVariables::addNewBlock(MachineBasicBlock
*BB
,
808 MachineBasicBlock
*DomBB
,
809 MachineBasicBlock
*SuccBB
,
810 std::vector
<SparseBitVector
<>> &LiveInSets
) {
811 const unsigned NumNew
= BB
->getNumber();
813 SparseBitVector
<> &BV
= LiveInSets
[SuccBB
->getNumber()];
814 for (unsigned R
: BV
) {
815 Register VirtReg
= Register::index2VirtReg(R
);
816 LiveVariables::VarInfo
&VI
= getVarInfo(VirtReg
);
817 VI
.AliveBlocks
.set(NumNew
);
819 // All registers used by PHI nodes in SuccBB must be live through BB.
820 for (MachineBasicBlock::iterator BBI
= SuccBB
->begin(),
822 BBI
!= BBE
&& BBI
->isPHI(); ++BBI
) {
823 for (unsigned i
= 1, e
= BBI
->getNumOperands(); i
!= e
; i
+= 2)
824 if (BBI
->getOperand(i
+ 1).getMBB() == BB
&&
825 BBI
->getOperand(i
).readsReg())
826 getVarInfo(BBI
->getOperand(i
).getReg())
827 .AliveBlocks
.set(NumNew
);