1 //===-- PhiElimination.cpp - Eliminate PHI nodes by inserting copies ------===//
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 pass eliminates machine instruction PHI nodes by inserting copy
11 // instructions. This destroys SSA information, but is the desired input for
12 // some register allocators.
14 //===----------------------------------------------------------------------===//
16 #define DEBUG_TYPE "phielim"
17 #include "llvm/BasicBlock.h"
18 #include "llvm/Instructions.h"
19 #include "llvm/CodeGen/LiveVariables.h"
20 #include "llvm/CodeGen/Passes.h"
21 #include "llvm/CodeGen/MachineFunctionPass.h"
22 #include "llvm/CodeGen/MachineInstr.h"
23 #include "llvm/CodeGen/MachineInstrBuilder.h"
24 #include "llvm/CodeGen/MachineRegisterInfo.h"
25 #include "llvm/Target/TargetInstrInfo.h"
26 #include "llvm/Target/TargetMachine.h"
27 #include "llvm/ADT/SmallPtrSet.h"
28 #include "llvm/ADT/STLExtras.h"
29 #include "llvm/ADT/Statistic.h"
30 #include "llvm/Support/Compiler.h"
35 STATISTIC(NumAtomic
, "Number of atomic phis lowered");
38 class VISIBILITY_HIDDEN PNE
: public MachineFunctionPass
{
39 MachineRegisterInfo
*MRI
; // Machine register information
42 static char ID
; // Pass identification, replacement for typeid
43 PNE() : MachineFunctionPass(&ID
) {}
45 virtual bool runOnMachineFunction(MachineFunction
&Fn
);
47 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
48 AU
.addPreserved
<LiveVariables
>();
49 AU
.addPreservedID(MachineLoopInfoID
);
50 AU
.addPreservedID(MachineDominatorsID
);
51 MachineFunctionPass::getAnalysisUsage(AU
);
55 /// EliminatePHINodes - Eliminate phi nodes by inserting copy instructions
56 /// in predecessor basic blocks.
58 bool EliminatePHINodes(MachineFunction
&MF
, MachineBasicBlock
&MBB
);
59 void LowerAtomicPHINode(MachineBasicBlock
&MBB
,
60 MachineBasicBlock::iterator AfterPHIsIt
);
62 /// analyzePHINodes - Gather information about the PHI nodes in
63 /// here. In particular, we want to map the number of uses of a virtual
64 /// register which is used in a PHI node. We map that to the BB the
65 /// vreg is coming from. This is used later to determine when the vreg
66 /// is killed in the BB.
68 void analyzePHINodes(const MachineFunction
& Fn
);
70 // FindCopyInsertPoint - Find a safe place in MBB to insert a copy from
71 // SrcReg. This needs to be after any def or uses of SrcReg, but before
72 // any subsequent point where control flow might jump out of the basic
74 MachineBasicBlock::iterator
FindCopyInsertPoint(MachineBasicBlock
&MBB
,
77 // SkipPHIsAndLabels - Copies need to be inserted after phi nodes and
78 // also after any exception handling labels: in landing pads execution
79 // starts at the label, so any copies placed before it won't be executed!
80 MachineBasicBlock::iterator
SkipPHIsAndLabels(MachineBasicBlock
&MBB
,
81 MachineBasicBlock::iterator I
) {
82 // Rather than assuming that EH labels come before other kinds of labels,
83 // just skip all labels.
84 while (I
!= MBB
.end() &&
85 (I
->getOpcode() == TargetInstrInfo::PHI
|| I
->isLabel()))
90 typedef std::pair
<const MachineBasicBlock
*, unsigned> BBVRegPair
;
91 typedef std::map
<BBVRegPair
, unsigned> VRegPHIUse
;
93 VRegPHIUse VRegPHIUseCount
;
95 // Defs of PHI sources which are implicit_def.
96 SmallPtrSet
<MachineInstr
*, 4> ImpDefs
;
101 static RegisterPass
<PNE
>
102 X("phi-node-elimination", "Eliminate PHI nodes for register allocation");
104 const PassInfo
*const llvm::PHIEliminationID
= &X
;
106 bool PNE::runOnMachineFunction(MachineFunction
&Fn
) {
107 MRI
= &Fn
.getRegInfo();
111 bool Changed
= false;
113 // Eliminate PHI instructions by inserting copies into predecessor blocks.
114 for (MachineFunction::iterator I
= Fn
.begin(), E
= Fn
.end(); I
!= E
; ++I
)
115 Changed
|= EliminatePHINodes(Fn
, *I
);
117 // Remove dead IMPLICIT_DEF instructions.
118 for (SmallPtrSet
<MachineInstr
*,4>::iterator I
= ImpDefs
.begin(),
119 E
= ImpDefs
.end(); I
!= E
; ++I
) {
120 MachineInstr
*DefMI
= *I
;
121 unsigned DefReg
= DefMI
->getOperand(0).getReg();
122 if (MRI
->use_empty(DefReg
))
123 DefMI
->eraseFromParent();
127 VRegPHIUseCount
.clear();
132 /// EliminatePHINodes - Eliminate phi nodes by inserting copy instructions in
133 /// predecessor basic blocks.
135 bool PNE::EliminatePHINodes(MachineFunction
&MF
, MachineBasicBlock
&MBB
) {
136 if (MBB
.empty() || MBB
.front().getOpcode() != TargetInstrInfo::PHI
)
137 return false; // Quick exit for basic blocks without PHIs.
139 // Get an iterator to the first instruction after the last PHI node (this may
140 // also be the end of the basic block).
141 MachineBasicBlock::iterator AfterPHIsIt
= SkipPHIsAndLabels(MBB
, MBB
.begin());
143 while (MBB
.front().getOpcode() == TargetInstrInfo::PHI
)
144 LowerAtomicPHINode(MBB
, AfterPHIsIt
);
149 /// isSourceDefinedByImplicitDef - Return true if all sources of the phi node
150 /// are implicit_def's.
151 static bool isSourceDefinedByImplicitDef(const MachineInstr
*MPhi
,
152 const MachineRegisterInfo
*MRI
) {
153 for (unsigned i
= 1; i
!= MPhi
->getNumOperands(); i
+= 2) {
154 unsigned SrcReg
= MPhi
->getOperand(i
).getReg();
155 const MachineInstr
*DefMI
= MRI
->getVRegDef(SrcReg
);
156 if (!DefMI
|| DefMI
->getOpcode() != TargetInstrInfo::IMPLICIT_DEF
)
162 // FindCopyInsertPoint - Find a safe place in MBB to insert a copy from SrcReg.
163 // This needs to be after any def or uses of SrcReg, but before any subsequent
164 // point where control flow might jump out of the basic block.
165 MachineBasicBlock::iterator
PNE::FindCopyInsertPoint(MachineBasicBlock
&MBB
,
167 // Handle the trivial case trivially.
171 // If this basic block does not contain an invoke, then control flow always
172 // reaches the end of it, so place the copy there. The logic below works in
173 // this case too, but is more expensive.
174 if (!isa
<InvokeInst
>(MBB
.getBasicBlock()->getTerminator()))
175 return MBB
.getFirstTerminator();
177 // Discover any definition/uses in this basic block.
178 SmallPtrSet
<MachineInstr
*, 8> DefUsesInMBB
;
179 for (MachineRegisterInfo::reg_iterator RI
= MRI
->reg_begin(SrcReg
),
180 RE
= MRI
->reg_end(); RI
!= RE
; ++RI
) {
181 MachineInstr
*DefUseMI
= &*RI
;
182 if (DefUseMI
->getParent() == &MBB
)
183 DefUsesInMBB
.insert(DefUseMI
);
186 MachineBasicBlock::iterator InsertPoint
;
187 if (DefUsesInMBB
.empty()) {
188 // No def/uses. Insert the copy at the start of the basic block.
189 InsertPoint
= MBB
.begin();
190 } else if (DefUsesInMBB
.size() == 1) {
191 // Insert the copy immediately after the definition/use.
192 InsertPoint
= *DefUsesInMBB
.begin();
195 // Insert the copy immediately after the last definition/use.
196 InsertPoint
= MBB
.end();
197 while (!DefUsesInMBB
.count(&*--InsertPoint
)) {}
201 // Make sure the copy goes after any phi nodes however.
202 return SkipPHIsAndLabels(MBB
, InsertPoint
);
205 /// LowerAtomicPHINode - Lower the PHI node at the top of the specified block,
206 /// under the assuption that it needs to be lowered in a way that supports
207 /// atomic execution of PHIs. This lowering method is always correct all of the
210 void PNE::LowerAtomicPHINode(MachineBasicBlock
&MBB
,
211 MachineBasicBlock::iterator AfterPHIsIt
) {
212 // Unlink the PHI node from the basic block, but don't delete the PHI yet.
213 MachineInstr
*MPhi
= MBB
.remove(MBB
.begin());
215 unsigned NumSrcs
= (MPhi
->getNumOperands() - 1) / 2;
216 unsigned DestReg
= MPhi
->getOperand(0).getReg();
217 bool isDead
= MPhi
->getOperand(0).isDead();
219 // Create a new register for the incoming PHI arguments.
220 MachineFunction
&MF
= *MBB
.getParent();
221 const TargetRegisterClass
*RC
= MF
.getRegInfo().getRegClass(DestReg
);
222 unsigned IncomingReg
= 0;
224 // Insert a register to register copy at the top of the current block (but
225 // after any remaining phi nodes) which copies the new incoming register
226 // into the phi node destination.
227 const TargetInstrInfo
*TII
= MF
.getTarget().getInstrInfo();
228 if (isSourceDefinedByImplicitDef(MPhi
, MRI
))
229 // If all sources of a PHI node are implicit_def, just emit an
230 // implicit_def instead of a copy.
231 BuildMI(MBB
, AfterPHIsIt
, MPhi
->getDebugLoc(),
232 TII
->get(TargetInstrInfo::IMPLICIT_DEF
), DestReg
);
234 IncomingReg
= MF
.getRegInfo().createVirtualRegister(RC
);
235 TII
->copyRegToReg(MBB
, AfterPHIsIt
, DestReg
, IncomingReg
, RC
, RC
);
238 // Update live variable information if there is any.
239 LiveVariables
*LV
= getAnalysisIfAvailable
<LiveVariables
>();
241 MachineInstr
*PHICopy
= prior(AfterPHIsIt
);
244 // Increment use count of the newly created virtual register.
245 LV
->getVarInfo(IncomingReg
).NumUses
++;
247 // Add information to LiveVariables to know that the incoming value is
248 // killed. Note that because the value is defined in several places (once
249 // each for each incoming block), the "def" block and instruction fields
250 // for the VarInfo is not filled in.
251 LV
->addVirtualRegisterKilled(IncomingReg
, PHICopy
);
253 LV
->getVarInfo(IncomingReg
).UsedBlocks
[MBB
.getNumber()] = true;
256 // Since we are going to be deleting the PHI node, if it is the last use of
257 // any registers, or if the value itself is dead, we need to move this
258 // information over to the new copy we just inserted.
259 LV
->removeVirtualRegistersKilled(MPhi
);
261 // If the result is dead, update LV.
263 LV
->addVirtualRegisterDead(DestReg
, PHICopy
);
264 LV
->removeVirtualRegisterDead(DestReg
, MPhi
);
268 // Adjust the VRegPHIUseCount map to account for the removal of this PHI node.
269 for (unsigned i
= 1; i
!= MPhi
->getNumOperands(); i
+= 2)
270 --VRegPHIUseCount
[BBVRegPair(MPhi
->getOperand(i
+ 1).getMBB(),
271 MPhi
->getOperand(i
).getReg())];
273 // Now loop over all of the incoming arguments, changing them to copy into the
274 // IncomingReg register in the corresponding predecessor basic block.
275 SmallPtrSet
<MachineBasicBlock
*, 8> MBBsInsertedInto
;
276 for (int i
= NumSrcs
- 1; i
>= 0; --i
) {
277 unsigned SrcReg
= MPhi
->getOperand(i
*2+1).getReg();
278 assert(TargetRegisterInfo::isVirtualRegister(SrcReg
) &&
279 "Machine PHI Operands must all be virtual registers!");
281 // If source is defined by an implicit def, there is no need to insert a
283 MachineInstr
*DefMI
= MRI
->getVRegDef(SrcReg
);
284 if (DefMI
->getOpcode() == TargetInstrInfo::IMPLICIT_DEF
) {
285 ImpDefs
.insert(DefMI
);
289 // Get the MachineBasicBlock equivalent of the BasicBlock that is the source
291 MachineBasicBlock
&opBlock
= *MPhi
->getOperand(i
*2+2).getMBB();
293 // Check to make sure we haven't already emitted the copy for this block.
294 // This can happen because PHI nodes may have multiple entries for the same
296 if (!MBBsInsertedInto
.insert(&opBlock
))
297 continue; // If the copy has already been emitted, we're done.
299 // Find a safe location to insert the copy, this may be the first terminator
300 // in the block (or end()).
301 MachineBasicBlock::iterator InsertPos
= FindCopyInsertPoint(opBlock
, SrcReg
);
304 TII
->copyRegToReg(opBlock
, InsertPos
, IncomingReg
, SrcReg
, RC
, RC
);
306 // Now update live variable information if we have it. Otherwise we're done
309 // We want to be able to insert a kill of the register if this PHI (aka, the
310 // copy we just inserted) is the last use of the source value. Live
311 // variable analysis conservatively handles this by saying that the value is
312 // live until the end of the block the PHI entry lives in. If the value
313 // really is dead at the PHI copy, there will be no successor blocks which
314 // have the value live-in.
316 // Check to see if the copy is the last use, and if so, update the live
317 // variables information so that it knows the copy source instruction kills
318 // the incoming value.
319 LiveVariables::VarInfo
&InRegVI
= LV
->getVarInfo(SrcReg
);
320 InRegVI
.UsedBlocks
[opBlock
.getNumber()] = true;
322 // Loop over all of the successors of the basic block, checking to see if
323 // the value is either live in the block, or if it is killed in the block.
324 // Also check to see if this register is in use by another PHI node which
325 // has not yet been eliminated. If so, it will be killed at an appropriate
328 // Is it used by any PHI instructions in this block?
329 bool ValueIsLive
= VRegPHIUseCount
[BBVRegPair(&opBlock
, SrcReg
)] != 0;
331 std::vector
<MachineBasicBlock
*> OpSuccBlocks
;
333 // Otherwise, scan successors, including the BB the PHI node lives in.
334 for (MachineBasicBlock::succ_iterator SI
= opBlock
.succ_begin(),
335 E
= opBlock
.succ_end(); SI
!= E
&& !ValueIsLive
; ++SI
) {
336 MachineBasicBlock
*SuccMBB
= *SI
;
338 // Is it alive in this successor?
339 unsigned SuccIdx
= SuccMBB
->getNumber();
340 if (SuccIdx
< InRegVI
.AliveBlocks
.size() &&
341 InRegVI
.AliveBlocks
[SuccIdx
]) {
346 OpSuccBlocks
.push_back(SuccMBB
);
349 // Check to see if this value is live because there is a use in a successor
352 switch (OpSuccBlocks
.size()) {
354 MachineBasicBlock
*MBB
= OpSuccBlocks
[0];
355 for (unsigned i
= 0, e
= InRegVI
.Kills
.size(); i
!= e
; ++i
)
356 if (InRegVI
.Kills
[i
]->getParent() == MBB
) {
363 MachineBasicBlock
*MBB1
= OpSuccBlocks
[0], *MBB2
= OpSuccBlocks
[1];
364 for (unsigned i
= 0, e
= InRegVI
.Kills
.size(); i
!= e
; ++i
)
365 if (InRegVI
.Kills
[i
]->getParent() == MBB1
||
366 InRegVI
.Kills
[i
]->getParent() == MBB2
) {
373 std::sort(OpSuccBlocks
.begin(), OpSuccBlocks
.end());
374 for (unsigned i
= 0, e
= InRegVI
.Kills
.size(); i
!= e
; ++i
)
375 if (std::binary_search(OpSuccBlocks
.begin(), OpSuccBlocks
.end(),
376 InRegVI
.Kills
[i
]->getParent())) {
383 // Okay, if we now know that the value is not live out of the block, we can
384 // add a kill marker in this block saying that it kills the incoming value!
386 // In our final twist, we have to decide which instruction kills the
387 // register. In most cases this is the copy, however, the first
388 // terminator instruction at the end of the block may also use the value.
389 // In this case, we should mark *it* as being the killing block, not the
391 MachineBasicBlock::iterator KillInst
= prior(InsertPos
);
392 MachineBasicBlock::iterator Term
= opBlock
.getFirstTerminator();
393 if (Term
!= opBlock
.end()) {
394 if (Term
->readsRegister(SrcReg
))
397 // Check that no other terminators use values.
399 for (MachineBasicBlock::iterator TI
= next(Term
); TI
!= opBlock
.end();
401 assert(!TI
->readsRegister(SrcReg
) &&
402 "Terminator instructions cannot use virtual registers unless"
403 "they are the first terminator in a block!");
408 // Finally, mark it killed.
409 LV
->addVirtualRegisterKilled(SrcReg
, KillInst
);
411 // This vreg no longer lives all of the way through opBlock.
412 unsigned opBlockNum
= opBlock
.getNumber();
413 if (opBlockNum
< InRegVI
.AliveBlocks
.size())
414 InRegVI
.AliveBlocks
[opBlockNum
] = false;
418 // Really delete the PHI instruction now!
419 MF
.DeleteMachineInstr(MPhi
);
423 /// analyzePHINodes - Gather information about the PHI nodes in here. In
424 /// particular, we want to map the number of uses of a virtual register which is
425 /// used in a PHI node. We map that to the BB the vreg is coming from. This is
426 /// used later to determine when the vreg is killed in the BB.
428 void PNE::analyzePHINodes(const MachineFunction
& Fn
) {
429 for (MachineFunction::const_iterator I
= Fn
.begin(), E
= Fn
.end();
431 for (MachineBasicBlock::const_iterator BBI
= I
->begin(), BBE
= I
->end();
432 BBI
!= BBE
&& BBI
->getOpcode() == TargetInstrInfo::PHI
; ++BBI
)
433 for (unsigned i
= 1, e
= BBI
->getNumOperands(); i
!= e
; i
+= 2)
434 ++VRegPHIUseCount
[BBVRegPair(BBI
->getOperand(i
+ 1).getMBB(),
435 BBI
->getOperand(i
).getReg())];