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 (MachineInstr
*MI
: Kills
)
62 if (MI
->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
.pop_back_val();
123 MarkVirtRegAliveInBlock(VRInfo
, DefBlock
, Pred
, WorkList
);
127 void LiveVariables::HandleVirtRegUse(Register Reg
, MachineBasicBlock
*MBB
,
129 assert(MRI
->getVRegDef(Reg
) && "Register use before def!");
131 unsigned BBNum
= MBB
->getNumber();
133 VarInfo
&VRInfo
= getVarInfo(Reg
);
135 // Check to see if this basic block is already a kill block.
136 if (!VRInfo
.Kills
.empty() && VRInfo
.Kills
.back()->getParent() == MBB
) {
137 // Yes, this register is killed in this basic block already. Increase the
138 // live range by updating the kill instruction.
139 VRInfo
.Kills
.back() = &MI
;
144 for (MachineInstr
*Kill
: VRInfo
.Kills
)
145 assert(Kill
->getParent() != MBB
&& "entry should be at end!");
148 // This situation can occur:
153 // | t2 = phi ... t1 ...
157 // | ... = ... t1 ...
161 // where there is a use in a PHI node that's a predecessor to the defining
162 // block. We don't want to mark all predecessors as having the value "alive"
164 if (MBB
== MRI
->getVRegDef(Reg
)->getParent())
167 // Add a new kill entry for this basic block. If this virtual register is
168 // already marked as alive in this basic block, that means it is alive in at
169 // least one of the successor blocks, it's not a kill.
170 if (!VRInfo
.AliveBlocks
.test(BBNum
))
171 VRInfo
.Kills
.push_back(&MI
);
173 // Update all dominating blocks to mark them as "known live".
174 for (MachineBasicBlock
*Pred
: MBB
->predecessors())
175 MarkVirtRegAliveInBlock(VRInfo
, MRI
->getVRegDef(Reg
)->getParent(), Pred
);
178 void LiveVariables::HandleVirtRegDef(Register Reg
, MachineInstr
&MI
) {
179 VarInfo
&VRInfo
= getVarInfo(Reg
);
181 if (VRInfo
.AliveBlocks
.empty())
182 // If vr is not alive in any block, then defaults to dead.
183 VRInfo
.Kills
.push_back(&MI
);
186 /// FindLastPartialDef - Return the last partial def of the specified register.
187 /// Also returns the sub-registers that're defined by the instruction.
189 LiveVariables::FindLastPartialDef(Register Reg
,
190 SmallSet
<unsigned, 4> &PartDefRegs
) {
191 unsigned LastDefReg
= 0;
192 unsigned LastDefDist
= 0;
193 MachineInstr
*LastDef
= nullptr;
194 for (MCPhysReg SubReg
: TRI
->subregs(Reg
)) {
195 MachineInstr
*Def
= PhysRegDef
[SubReg
];
198 unsigned Dist
= DistanceMap
[Def
];
199 if (Dist
> LastDefDist
) {
209 PartDefRegs
.insert(LastDefReg
);
210 for (MachineOperand
&MO
: LastDef
->all_defs()) {
211 if (MO
.getReg() == 0)
213 Register DefReg
= MO
.getReg();
214 if (TRI
->isSubRegister(Reg
, DefReg
)) {
215 for (MCPhysReg SubReg
: TRI
->subregs_inclusive(DefReg
))
216 PartDefRegs
.insert(SubReg
);
222 /// HandlePhysRegUse - Turn previous partial def's into read/mod/writes. Add
223 /// implicit defs to a machine instruction if there was an earlier def of its
225 void LiveVariables::HandlePhysRegUse(Register Reg
, MachineInstr
&MI
) {
226 MachineInstr
*LastDef
= PhysRegDef
[Reg
];
227 // If there was a previous use or a "full" def all is well.
228 if (!LastDef
&& !PhysRegUse
[Reg
]) {
229 // Otherwise, the last sub-register def implicitly defines this register.
232 // AL = ... implicit-def EAX, implicit killed AH
236 // All of the sub-registers must have been defined before the use of Reg!
237 SmallSet
<unsigned, 4> PartDefRegs
;
238 MachineInstr
*LastPartialDef
= FindLastPartialDef(Reg
, PartDefRegs
);
239 // If LastPartialDef is NULL, it must be using a livein register.
240 if (LastPartialDef
) {
241 LastPartialDef
->addOperand(MachineOperand::CreateReg(Reg
, true/*IsDef*/,
243 PhysRegDef
[Reg
] = LastPartialDef
;
244 SmallSet
<unsigned, 8> Processed
;
245 for (MCPhysReg SubReg
: TRI
->subregs(Reg
)) {
246 if (Processed
.count(SubReg
))
248 if (PartDefRegs
.count(SubReg
))
250 // This part of Reg was defined before the last partial def. It's killed
252 LastPartialDef
->addOperand(MachineOperand::CreateReg(SubReg
,
255 PhysRegDef
[SubReg
] = LastPartialDef
;
256 for (MCPhysReg SS
: TRI
->subregs(SubReg
))
257 Processed
.insert(SS
);
260 } else if (LastDef
&& !PhysRegUse
[Reg
] &&
261 !LastDef
->findRegisterDefOperand(Reg
))
262 // Last def defines the super register, add an implicit def of reg.
263 LastDef
->addOperand(MachineOperand::CreateReg(Reg
, true/*IsDef*/,
266 // Remember this use.
267 for (MCPhysReg SubReg
: TRI
->subregs_inclusive(Reg
))
268 PhysRegUse
[SubReg
] = &MI
;
271 /// FindLastRefOrPartRef - Return the last reference or partial reference of
272 /// the specified register.
273 MachineInstr
*LiveVariables::FindLastRefOrPartRef(Register Reg
) {
274 MachineInstr
*LastDef
= PhysRegDef
[Reg
];
275 MachineInstr
*LastUse
= PhysRegUse
[Reg
];
276 if (!LastDef
&& !LastUse
)
279 MachineInstr
*LastRefOrPartRef
= LastUse
? LastUse
: LastDef
;
280 unsigned LastRefOrPartRefDist
= DistanceMap
[LastRefOrPartRef
];
281 unsigned LastPartDefDist
= 0;
282 for (MCPhysReg SubReg
: TRI
->subregs(Reg
)) {
283 MachineInstr
*Def
= PhysRegDef
[SubReg
];
284 if (Def
&& Def
!= LastDef
) {
285 // There was a def of this sub-register in between. This is a partial
286 // def, keep track of the last one.
287 unsigned Dist
= DistanceMap
[Def
];
288 if (Dist
> LastPartDefDist
)
289 LastPartDefDist
= Dist
;
290 } else if (MachineInstr
*Use
= PhysRegUse
[SubReg
]) {
291 unsigned Dist
= DistanceMap
[Use
];
292 if (Dist
> LastRefOrPartRefDist
) {
293 LastRefOrPartRefDist
= Dist
;
294 LastRefOrPartRef
= Use
;
299 return LastRefOrPartRef
;
302 bool LiveVariables::HandlePhysRegKill(Register Reg
, MachineInstr
*MI
) {
303 MachineInstr
*LastDef
= PhysRegDef
[Reg
];
304 MachineInstr
*LastUse
= PhysRegUse
[Reg
];
305 if (!LastDef
&& !LastUse
)
308 MachineInstr
*LastRefOrPartRef
= LastUse
? LastUse
: LastDef
;
309 unsigned LastRefOrPartRefDist
= DistanceMap
[LastRefOrPartRef
];
310 // The whole register is used.
315 // = AL, implicit killed AX
318 // Or whole register is defined, but not used at all.
323 // Or whole register is defined, but only partly used.
324 // dead AX = implicit-def AL
327 MachineInstr
*LastPartDef
= nullptr;
328 unsigned LastPartDefDist
= 0;
329 SmallSet
<unsigned, 8> PartUses
;
330 for (MCPhysReg SubReg
: TRI
->subregs(Reg
)) {
331 MachineInstr
*Def
= PhysRegDef
[SubReg
];
332 if (Def
&& Def
!= LastDef
) {
333 // There was a def of this sub-register in between. This is a partial
334 // def, keep track of the last one.
335 unsigned Dist
= DistanceMap
[Def
];
336 if (Dist
> LastPartDefDist
) {
337 LastPartDefDist
= Dist
;
342 if (MachineInstr
*Use
= PhysRegUse
[SubReg
]) {
343 for (MCPhysReg SS
: TRI
->subregs_inclusive(SubReg
))
345 unsigned Dist
= DistanceMap
[Use
];
346 if (Dist
> LastRefOrPartRefDist
) {
347 LastRefOrPartRefDist
= Dist
;
348 LastRefOrPartRef
= Use
;
353 if (!PhysRegUse
[Reg
]) {
354 // Partial uses. Mark register def dead and add implicit def of
355 // sub-registers which are used.
356 // dead EAX = op implicit-def AL
357 // That is, EAX def is dead but AL def extends pass it.
358 PhysRegDef
[Reg
]->addRegisterDead(Reg
, TRI
, true);
359 for (MCPhysReg SubReg
: TRI
->subregs(Reg
)) {
360 if (!PartUses
.count(SubReg
))
363 if (PhysRegDef
[Reg
] == PhysRegDef
[SubReg
]) {
364 MachineOperand
*MO
= PhysRegDef
[Reg
]->findRegisterDefOperand(SubReg
);
367 assert(!MO
->isDead());
371 PhysRegDef
[Reg
]->addOperand(MachineOperand::CreateReg(SubReg
,
372 true/*IsDef*/, true/*IsImp*/));
373 MachineInstr
*LastSubRef
= FindLastRefOrPartRef(SubReg
);
375 LastSubRef
->addRegisterKilled(SubReg
, TRI
, true);
377 LastRefOrPartRef
->addRegisterKilled(SubReg
, TRI
, true);
378 for (MCPhysReg SS
: TRI
->subregs_inclusive(SubReg
))
379 PhysRegUse
[SS
] = LastRefOrPartRef
;
381 for (MCPhysReg SS
: TRI
->subregs(SubReg
))
384 } else if (LastRefOrPartRef
== PhysRegDef
[Reg
] && LastRefOrPartRef
!= MI
) {
386 // The last partial def kills the register.
387 LastPartDef
->addOperand(MachineOperand::CreateReg(Reg
, false/*IsDef*/,
388 true/*IsImp*/, true/*IsKill*/));
391 LastRefOrPartRef
->findRegisterDefOperand(Reg
, false, false, TRI
);
392 bool NeedEC
= MO
->isEarlyClobber() && MO
->getReg() != Reg
;
393 // If the last reference is the last def, then it's not used at all.
394 // That is, unless we are currently processing the last reference itself.
395 LastRefOrPartRef
->addRegisterDead(Reg
, TRI
, true);
397 // If we are adding a subreg def and the superreg def is marked early
398 // clobber, add an early clobber marker to the subreg def.
399 MO
= LastRefOrPartRef
->findRegisterDefOperand(Reg
);
401 MO
->setIsEarlyClobber();
405 LastRefOrPartRef
->addRegisterKilled(Reg
, TRI
, true);
409 void LiveVariables::HandleRegMask(const MachineOperand
&MO
) {
410 // Call HandlePhysRegKill() for all live registers clobbered by Mask.
411 // Clobbered registers are always dead, sp there is no need to use
412 // HandlePhysRegDef().
413 for (unsigned Reg
= 1, NumRegs
= TRI
->getNumRegs(); Reg
!= NumRegs
; ++Reg
) {
415 if (!PhysRegDef
[Reg
] && !PhysRegUse
[Reg
])
417 // Skip mask-preserved regs.
418 if (!MO
.clobbersPhysReg(Reg
))
420 // Kill the largest clobbered super-register.
421 // This avoids needless implicit operands.
422 unsigned Super
= Reg
;
423 for (MCPhysReg SR
: TRI
->superregs(Reg
))
424 if ((PhysRegDef
[SR
] || PhysRegUse
[SR
]) && MO
.clobbersPhysReg(SR
))
426 HandlePhysRegKill(Super
, nullptr);
430 void LiveVariables::HandlePhysRegDef(Register Reg
, MachineInstr
*MI
,
431 SmallVectorImpl
<unsigned> &Defs
) {
432 // What parts of the register are previously defined?
433 SmallSet
<unsigned, 32> Live
;
434 if (PhysRegDef
[Reg
] || PhysRegUse
[Reg
]) {
435 for (MCPhysReg SubReg
: TRI
->subregs_inclusive(Reg
))
438 for (MCPhysReg SubReg
: TRI
->subregs(Reg
)) {
439 // If a register isn't itself defined, but all parts that make up of it
440 // are defined, then consider it also defined.
445 if (Live
.count(SubReg
))
447 if (PhysRegDef
[SubReg
] || PhysRegUse
[SubReg
]) {
448 for (MCPhysReg SS
: TRI
->subregs_inclusive(SubReg
))
454 // Start from the largest piece, find the last time any part of the register
456 HandlePhysRegKill(Reg
, MI
);
457 // Only some of the sub-registers are used.
458 for (MCPhysReg SubReg
: TRI
->subregs(Reg
)) {
459 if (!Live
.count(SubReg
))
460 // Skip if this sub-register isn't defined.
462 HandlePhysRegKill(SubReg
, MI
);
466 Defs
.push_back(Reg
); // Remember this def.
469 void LiveVariables::UpdatePhysRegDefs(MachineInstr
&MI
,
470 SmallVectorImpl
<unsigned> &Defs
) {
471 while (!Defs
.empty()) {
472 Register Reg
= Defs
.pop_back_val();
473 for (MCPhysReg SubReg
: TRI
->subregs_inclusive(Reg
)) {
474 PhysRegDef
[SubReg
] = &MI
;
475 PhysRegUse
[SubReg
] = nullptr;
480 void LiveVariables::runOnInstr(MachineInstr
&MI
,
481 SmallVectorImpl
<unsigned> &Defs
) {
482 assert(!MI
.isDebugOrPseudoInstr());
483 // Process all of the operands of the instruction...
484 unsigned NumOperandsToProcess
= MI
.getNumOperands();
486 // Unless it is a PHI node. In this case, ONLY process the DEF, not any
487 // of the uses. They will be handled in other basic blocks.
489 NumOperandsToProcess
= 1;
491 // Clear kill and dead markers. LV will recompute them.
492 SmallVector
<unsigned, 4> UseRegs
;
493 SmallVector
<unsigned, 4> DefRegs
;
494 SmallVector
<unsigned, 1> RegMasks
;
495 for (unsigned i
= 0; i
!= NumOperandsToProcess
; ++i
) {
496 MachineOperand
&MO
= MI
.getOperand(i
);
497 if (MO
.isRegMask()) {
498 RegMasks
.push_back(i
);
501 if (!MO
.isReg() || MO
.getReg() == 0)
503 Register MOReg
= MO
.getReg();
505 if (!(MOReg
.isPhysical() && MRI
->isReserved(MOReg
)))
508 UseRegs
.push_back(MOReg
);
511 // FIXME: We should not remove any dead flags. However the MIPS RDDSP
512 // instruction needs it at the moment: http://llvm.org/PR27116.
513 if (MOReg
.isPhysical() && !MRI
->isReserved(MOReg
))
515 DefRegs
.push_back(MOReg
);
519 MachineBasicBlock
*MBB
= MI
.getParent();
521 for (unsigned MOReg
: UseRegs
) {
522 if (Register::isVirtualRegister(MOReg
))
523 HandleVirtRegUse(MOReg
, MBB
, MI
);
524 else if (!MRI
->isReserved(MOReg
))
525 HandlePhysRegUse(MOReg
, MI
);
528 // Process all masked registers. (Call clobbers).
529 for (unsigned Mask
: RegMasks
)
530 HandleRegMask(MI
.getOperand(Mask
));
533 for (unsigned MOReg
: DefRegs
) {
534 if (Register::isVirtualRegister(MOReg
))
535 HandleVirtRegDef(MOReg
, MI
);
536 else if (!MRI
->isReserved(MOReg
))
537 HandlePhysRegDef(MOReg
, &MI
, Defs
);
539 UpdatePhysRegDefs(MI
, Defs
);
542 void LiveVariables::runOnBlock(MachineBasicBlock
*MBB
, const unsigned NumRegs
) {
543 // Mark live-in registers as live-in.
544 SmallVector
<unsigned, 4> Defs
;
545 for (const auto &LI
: MBB
->liveins()) {
546 assert(Register::isPhysicalRegister(LI
.PhysReg
) &&
547 "Cannot have a live-in virtual register!");
548 HandlePhysRegDef(LI
.PhysReg
, nullptr, Defs
);
551 // Loop over all of the instructions, processing them.
554 for (MachineInstr
&MI
: *MBB
) {
555 if (MI
.isDebugOrPseudoInstr())
557 DistanceMap
.insert(std::make_pair(&MI
, Dist
++));
559 runOnInstr(MI
, Defs
);
562 // Handle any virtual assignments from PHI nodes which might be at the
563 // bottom of this basic block. We check all of our successor blocks to see
564 // if they have PHI nodes, and if so, we simulate an assignment at the end
565 // of the current block.
566 if (!PHIVarInfo
[MBB
->getNumber()].empty()) {
567 SmallVectorImpl
<unsigned> &VarInfoVec
= PHIVarInfo
[MBB
->getNumber()];
569 for (unsigned I
: VarInfoVec
)
570 // Mark it alive only in the block we are representing.
571 MarkVirtRegAliveInBlock(getVarInfo(I
), MRI
->getVRegDef(I
)->getParent(),
575 // MachineCSE may CSE instructions which write to non-allocatable physical
576 // registers across MBBs. Remember if any reserved register is liveout.
577 SmallSet
<unsigned, 4> LiveOuts
;
578 for (const MachineBasicBlock
*SuccMBB
: MBB
->successors()) {
579 if (SuccMBB
->isEHPad())
581 for (const auto &LI
: SuccMBB
->liveins()) {
582 if (!TRI
->isInAllocatableClass(LI
.PhysReg
))
583 // Ignore other live-ins, e.g. those that are live into landing pads.
584 LiveOuts
.insert(LI
.PhysReg
);
588 // Loop over PhysRegDef / PhysRegUse, killing any registers that are
589 // available at the end of the basic block.
590 for (unsigned i
= 0; i
!= NumRegs
; ++i
)
591 if ((PhysRegDef
[i
] || PhysRegUse
[i
]) && !LiveOuts
.count(i
))
592 HandlePhysRegDef(i
, nullptr, Defs
);
595 bool LiveVariables::runOnMachineFunction(MachineFunction
&mf
) {
597 MRI
= &mf
.getRegInfo();
598 TRI
= MF
->getSubtarget().getRegisterInfo();
600 const unsigned NumRegs
= TRI
->getNumRegs();
601 PhysRegDef
.assign(NumRegs
, nullptr);
602 PhysRegUse
.assign(NumRegs
, nullptr);
603 PHIVarInfo
.resize(MF
->getNumBlockIDs());
606 // FIXME: LiveIntervals will be updated to remove its dependence on
607 // LiveVariables to improve compilation time and eliminate bizarre pass
608 // dependencies. Until then, we can't change much in -O0.
610 report_fatal_error("regalloc=... not currently supported with -O0");
614 // Calculate live variable information in depth first order on the CFG of the
615 // function. This guarantees that we will see the definition of a virtual
616 // register before its uses due to dominance properties of SSA (except for PHI
617 // nodes, which are treated as a special case).
618 MachineBasicBlock
*Entry
= &MF
->front();
619 df_iterator_default_set
<MachineBasicBlock
*,16> Visited
;
621 for (MachineBasicBlock
*MBB
: depth_first_ext(Entry
, Visited
)) {
622 runOnBlock(MBB
, NumRegs
);
624 PhysRegDef
.assign(NumRegs
, nullptr);
625 PhysRegUse
.assign(NumRegs
, nullptr);
628 // Convert and transfer the dead / killed information we have gathered into
629 // VirtRegInfo onto MI's.
630 for (unsigned i
= 0, e1
= VirtRegInfo
.size(); i
!= e1
; ++i
) {
631 const Register Reg
= Register::index2VirtReg(i
);
632 for (unsigned j
= 0, e2
= VirtRegInfo
[Reg
].Kills
.size(); j
!= e2
; ++j
)
633 if (VirtRegInfo
[Reg
].Kills
[j
] == MRI
->getVRegDef(Reg
))
634 VirtRegInfo
[Reg
].Kills
[j
]->addRegisterDead(Reg
, TRI
);
636 VirtRegInfo
[Reg
].Kills
[j
]->addRegisterKilled(Reg
, TRI
);
639 // Check to make sure there are no unreachable blocks in the MC CFG for the
640 // function. If so, it is due to a bug in the instruction selector or some
641 // other part of the code generator if this happens.
643 for (const MachineBasicBlock
&MBB
: *MF
)
644 assert(Visited
.contains(&MBB
) && "unreachable basic block found");
654 void LiveVariables::recomputeForSingleDefVirtReg(Register Reg
) {
655 assert(Reg
.isVirtual());
657 VarInfo
&VI
= getVarInfo(Reg
);
658 VI
.AliveBlocks
.clear();
661 MachineInstr
&DefMI
= *MRI
->getUniqueVRegDef(Reg
);
662 MachineBasicBlock
&DefBB
= *DefMI
.getParent();
664 // Handle the case where all uses have been removed.
665 if (MRI
->use_nodbg_empty(Reg
)) {
666 VI
.Kills
.push_back(&DefMI
);
667 DefMI
.addRegisterDead(Reg
, nullptr);
670 DefMI
.clearRegisterDeads(Reg
);
672 // Initialize a worklist of BBs that Reg is live-to-end of. (Here
673 // "live-to-end" means Reg is live at the end of a block even if it is only
674 // live because of phi uses in a successor. This is different from isLiveOut()
675 // which does not consider phi uses.)
676 SmallVector
<MachineBasicBlock
*> LiveToEndBlocks
;
677 SparseBitVector
<> UseBlocks
;
678 for (auto &UseMO
: MRI
->use_nodbg_operands(Reg
)) {
679 UseMO
.setIsKill(false);
680 MachineInstr
&UseMI
= *UseMO
.getParent();
681 MachineBasicBlock
&UseBB
= *UseMI
.getParent();
682 UseBlocks
.set(UseBB
.getNumber());
684 // If Reg is used in a phi then it is live-to-end of the corresponding
686 unsigned Idx
= UseMO
.getOperandNo();
687 LiveToEndBlocks
.push_back(UseMI
.getOperand(Idx
+ 1).getMBB());
688 } else if (&UseBB
== &DefBB
) {
689 // A non-phi use in the same BB as the single def must come after the def.
691 // Otherwise Reg must be live-to-end of all predecessors.
692 LiveToEndBlocks
.append(UseBB
.pred_begin(), UseBB
.pred_end());
696 // Iterate over the worklist adding blocks to AliveBlocks.
697 bool LiveToEndOfDefBB
= false;
698 while (!LiveToEndBlocks
.empty()) {
699 MachineBasicBlock
&BB
= *LiveToEndBlocks
.pop_back_val();
701 LiveToEndOfDefBB
= true;
704 if (VI
.AliveBlocks
.test(BB
.getNumber()))
706 VI
.AliveBlocks
.set(BB
.getNumber());
707 LiveToEndBlocks
.append(BB
.pred_begin(), BB
.pred_end());
710 // Recompute kill flags. For each block in which Reg is used but is not
711 // live-through, find the last instruction that uses Reg. Ignore phi nodes
712 // because they should not be included in Kills.
713 for (unsigned UseBBNum
: UseBlocks
) {
714 if (VI
.AliveBlocks
.test(UseBBNum
))
716 MachineBasicBlock
&UseBB
= *MF
->getBlockNumbered(UseBBNum
);
717 if (&UseBB
== &DefBB
&& LiveToEndOfDefBB
)
719 for (auto &MI
: reverse(UseBB
)) {
720 if (MI
.isDebugOrPseudoInstr())
724 if (MI
.readsRegister(Reg
)) {
725 assert(!MI
.killsRegister(Reg
));
726 MI
.addRegisterKilled(Reg
, nullptr);
727 VI
.Kills
.push_back(&MI
);
734 /// replaceKillInstruction - Update register kill info by replacing a kill
735 /// instruction with a new one.
736 void LiveVariables::replaceKillInstruction(Register Reg
, MachineInstr
&OldMI
,
737 MachineInstr
&NewMI
) {
738 VarInfo
&VI
= getVarInfo(Reg
);
739 std::replace(VI
.Kills
.begin(), VI
.Kills
.end(), &OldMI
, &NewMI
);
742 /// removeVirtualRegistersKilled - Remove all killed info for the specified
744 void LiveVariables::removeVirtualRegistersKilled(MachineInstr
&MI
) {
745 for (MachineOperand
&MO
: MI
.operands()) {
746 if (MO
.isReg() && MO
.isKill()) {
748 Register Reg
= MO
.getReg();
749 if (Reg
.isVirtual()) {
750 bool removed
= getVarInfo(Reg
).removeKill(MI
);
751 assert(removed
&& "kill not in register's VarInfo?");
758 /// analyzePHINodes - Gather information about the PHI nodes in here. In
759 /// particular, we want to map the variable information of a virtual register
760 /// which is used in a PHI node. We map that to the BB the vreg is coming from.
762 void LiveVariables::analyzePHINodes(const MachineFunction
& Fn
) {
763 for (const auto &MBB
: Fn
)
764 for (const auto &BBI
: MBB
) {
767 for (unsigned i
= 1, e
= BBI
.getNumOperands(); i
!= e
; i
+= 2)
768 if (BBI
.getOperand(i
).readsReg())
769 PHIVarInfo
[BBI
.getOperand(i
+ 1).getMBB()->getNumber()]
770 .push_back(BBI
.getOperand(i
).getReg());
774 bool LiveVariables::VarInfo::isLiveIn(const MachineBasicBlock
&MBB
,
775 Register Reg
, MachineRegisterInfo
&MRI
) {
776 unsigned Num
= MBB
.getNumber();
778 // Reg is live-through.
779 if (AliveBlocks
.test(Num
))
782 // Registers defined in MBB cannot be live in.
783 const MachineInstr
*Def
= MRI
.getVRegDef(Reg
);
784 if (Def
&& Def
->getParent() == &MBB
)
787 // Reg was not defined in MBB, was it killed here?
788 return findKill(&MBB
);
791 bool LiveVariables::isLiveOut(Register Reg
, const MachineBasicBlock
&MBB
) {
792 LiveVariables::VarInfo
&VI
= getVarInfo(Reg
);
794 SmallPtrSet
<const MachineBasicBlock
*, 8> Kills
;
795 for (MachineInstr
*MI
: VI
.Kills
)
796 Kills
.insert(MI
->getParent());
798 // Loop over all of the successors of the basic block, checking to see if
799 // the value is either live in the block, or if it is killed in the block.
800 for (const MachineBasicBlock
*SuccMBB
: MBB
.successors()) {
801 // Is it alive in this successor?
802 unsigned SuccIdx
= SuccMBB
->getNumber();
803 if (VI
.AliveBlocks
.test(SuccIdx
))
805 // Or is it live because there is a use in a successor that kills it?
806 if (Kills
.count(SuccMBB
))
813 /// addNewBlock - Add a new basic block BB as an empty succcessor to DomBB. All
814 /// variables that are live out of DomBB will be marked as passing live through
816 void LiveVariables::addNewBlock(MachineBasicBlock
*BB
,
817 MachineBasicBlock
*DomBB
,
818 MachineBasicBlock
*SuccBB
) {
819 const unsigned NumNew
= BB
->getNumber();
821 DenseSet
<unsigned> Defs
, Kills
;
823 MachineBasicBlock::iterator BBI
= SuccBB
->begin(), BBE
= SuccBB
->end();
824 for (; BBI
!= BBE
&& BBI
->isPHI(); ++BBI
) {
825 // Record the def of the PHI node.
826 Defs
.insert(BBI
->getOperand(0).getReg());
828 // All registers used by PHI nodes in SuccBB must be live through BB.
829 for (unsigned i
= 1, e
= BBI
->getNumOperands(); i
!= e
; i
+= 2)
830 if (BBI
->getOperand(i
+1).getMBB() == BB
)
831 getVarInfo(BBI
->getOperand(i
).getReg()).AliveBlocks
.set(NumNew
);
834 // Record all vreg defs and kills of all instructions in SuccBB.
835 for (; BBI
!= BBE
; ++BBI
) {
836 for (const MachineOperand
&Op
: BBI
->operands()) {
837 if (Op
.isReg() && Op
.getReg().isVirtual()) {
839 Defs
.insert(Op
.getReg());
840 else if (Op
.isKill())
841 Kills
.insert(Op
.getReg());
846 // Update info for all live variables
847 for (unsigned i
= 0, e
= MRI
->getNumVirtRegs(); i
!= e
; ++i
) {
848 Register Reg
= Register::index2VirtReg(i
);
850 // If the Defs is defined in the successor it can't be live in BB.
854 // If the register is either killed in or live through SuccBB it's also live
856 VarInfo
&VI
= getVarInfo(Reg
);
857 if (Kills
.count(Reg
) || VI
.AliveBlocks
.test(SuccBB
->getNumber()))
858 VI
.AliveBlocks
.set(NumNew
);
862 /// addNewBlock - Add a new basic block BB as an empty succcessor to DomBB. All
863 /// variables that are live out of DomBB will be marked as passing live through
864 /// BB. LiveInSets[BB] is *not* updated (because it is not needed during
866 void LiveVariables::addNewBlock(MachineBasicBlock
*BB
,
867 MachineBasicBlock
*DomBB
,
868 MachineBasicBlock
*SuccBB
,
869 std::vector
<SparseBitVector
<>> &LiveInSets
) {
870 const unsigned NumNew
= BB
->getNumber();
872 SparseBitVector
<> &BV
= LiveInSets
[SuccBB
->getNumber()];
873 for (unsigned R
: BV
) {
874 Register VirtReg
= Register::index2VirtReg(R
);
875 LiveVariables::VarInfo
&VI
= getVarInfo(VirtReg
);
876 VI
.AliveBlocks
.set(NumNew
);
878 // All registers used by PHI nodes in SuccBB must be live through BB.
879 for (MachineBasicBlock::iterator BBI
= SuccBB
->begin(),
881 BBI
!= BBE
&& BBI
->isPHI(); ++BBI
) {
882 for (unsigned i
= 1, e
= BBI
->getNumOperands(); i
!= e
; i
+= 2)
883 if (BBI
->getOperand(i
+ 1).getMBB() == BB
&&
884 BBI
->getOperand(i
).readsReg())
885 getVarInfo(BBI
->getOperand(i
).getReg())
886 .AliveBlocks
.set(NumNew
);