1 //===-- LCSSA.cpp - Convert loops into loop-closed SSA form ---------------===//
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 transforms loops by placing phi nodes at the end of the loops for
11 // all values that are live across the loop boundary. For example, it turns
12 // the left into the right code:
14 // for (...) for (...)
19 // X3 = phi(X1, X2) X3 = phi(X1, X2)
20 // ... = X3 + 4 X4 = phi(X3)
23 // This is still valid LLVM; the extra phi nodes are purely redundant, and will
24 // be trivially eliminated by InstCombine. The major benefit of this
25 // transformation is that it makes many other loop optimizations, such as
26 // LoopUnswitching, simpler.
28 //===----------------------------------------------------------------------===//
30 #define DEBUG_TYPE "lcssa"
31 #include "llvm/Transforms/Scalar.h"
32 #include "llvm/Constants.h"
33 #include "llvm/Pass.h"
34 #include "llvm/Function.h"
35 #include "llvm/Instructions.h"
36 #include "llvm/LLVMContext.h"
37 #include "llvm/ADT/SetVector.h"
38 #include "llvm/ADT/Statistic.h"
39 #include "llvm/Analysis/Dominators.h"
40 #include "llvm/Analysis/LoopPass.h"
41 #include "llvm/Analysis/ScalarEvolution.h"
42 #include "llvm/Support/CFG.h"
43 #include "llvm/Support/Compiler.h"
44 #include "llvm/Support/PredIteratorCache.h"
49 STATISTIC(NumLCSSA
, "Number of live out of a loop variables");
52 struct VISIBILITY_HIDDEN LCSSA
: public LoopPass
{
53 static char ID
; // Pass identification, replacement for typeid
54 LCSSA() : LoopPass(&ID
) {}
56 // Cached analysis information for the current function.
59 std::vector
<BasicBlock
*> LoopBlocks
;
60 PredIteratorCache PredCache
;
63 virtual bool runOnLoop(Loop
*L
, LPPassManager
&LPM
);
65 void ProcessInstruction(Instruction
* Instr
,
66 const SmallVector
<BasicBlock
*, 8>& exitBlocks
);
68 /// This transformation requires natural loop information & requires that
69 /// loop preheaders be inserted into the CFG. It maintains both of these,
70 /// as well as the CFG. It also requires dominator information.
72 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
74 AU
.addRequiredID(LoopSimplifyID
);
75 AU
.addPreservedID(LoopSimplifyID
);
76 AU
.addRequiredTransitive
<LoopInfo
>();
77 AU
.addPreserved
<LoopInfo
>();
78 AU
.addRequiredTransitive
<DominatorTree
>();
79 AU
.addPreserved
<ScalarEvolution
>();
80 AU
.addPreserved
<DominatorTree
>();
82 // Request DominanceFrontier now, even though LCSSA does
83 // not use it. This allows Pass Manager to schedule Dominance
84 // Frontier early enough such that one LPPassManager can handle
85 // multiple loop transformation passes.
86 AU
.addRequired
<DominanceFrontier
>();
87 AU
.addPreserved
<DominanceFrontier
>();
91 /// verifyAnalysis() - Verify loop nest.
92 virtual void verifyAnalysis() const {
94 // Check the special guarantees that LCSSA makes.
95 assert(L
->isLCSSAForm());
99 void getLoopValuesUsedOutsideLoop(Loop
*L
,
100 SetVector
<Instruction
*> &AffectedValues
,
101 const SmallVector
<BasicBlock
*, 8>& exitBlocks
);
103 Value
*GetValueForBlock(DomTreeNode
*BB
, Instruction
*OrigInst
,
104 DenseMap
<DomTreeNode
*, Value
*> &Phis
);
106 /// inLoop - returns true if the given block is within the current loop
107 bool inLoop(BasicBlock
* B
) {
108 return std::binary_search(LoopBlocks
.begin(), LoopBlocks
.end(), B
);
114 static RegisterPass
<LCSSA
> X("lcssa", "Loop-Closed SSA Form Pass");
116 Pass
*llvm::createLCSSAPass() { return new LCSSA(); }
117 const PassInfo
*const llvm::LCSSAID
= &X
;
119 /// runOnFunction - Process all loops in the function, inner-most out.
120 bool LCSSA::runOnLoop(Loop
*l
, LPPassManager
&LPM
) {
124 LI
= &LPM
.getAnalysis
<LoopInfo
>();
125 DT
= &getAnalysis
<DominatorTree
>();
127 // Speed up queries by creating a sorted list of blocks
129 LoopBlocks
.insert(LoopBlocks
.end(), L
->block_begin(), L
->block_end());
130 std::sort(LoopBlocks
.begin(), LoopBlocks
.end());
132 SmallVector
<BasicBlock
*, 8> exitBlocks
;
133 L
->getExitBlocks(exitBlocks
);
135 SetVector
<Instruction
*> AffectedValues
;
136 getLoopValuesUsedOutsideLoop(L
, AffectedValues
, exitBlocks
);
138 // If no values are affected, we can save a lot of work, since we know that
139 // nothing will be changed.
140 if (AffectedValues
.empty())
143 // Iterate over all affected values for this loop and insert Phi nodes
144 // for them in the appropriate exit blocks
146 for (SetVector
<Instruction
*>::iterator I
= AffectedValues
.begin(),
147 E
= AffectedValues
.end(); I
!= E
; ++I
)
148 ProcessInstruction(*I
, exitBlocks
);
150 assert(L
->isLCSSAForm());
155 /// processInstruction - Given a live-out instruction, insert LCSSA Phi nodes,
156 /// eliminate all out-of-loop uses.
157 void LCSSA::ProcessInstruction(Instruction
*Instr
,
158 const SmallVector
<BasicBlock
*, 8>& exitBlocks
) {
159 ++NumLCSSA
; // We are applying the transformation
161 // Keep track of the blocks that have the value available already.
162 DenseMap
<DomTreeNode
*, Value
*> Phis
;
164 BasicBlock
*DomBB
= Instr
->getParent();
166 // Invoke instructions are special in that their result value is not available
167 // along their unwind edge. The code below tests to see whether DomBB dominates
168 // the value, so adjust DomBB to the normal destination block, which is
169 // effectively where the value is first usable.
170 if (InvokeInst
*Inv
= dyn_cast
<InvokeInst
>(Instr
))
171 DomBB
= Inv
->getNormalDest();
173 DomTreeNode
*DomNode
= DT
->getNode(DomBB
);
175 // Insert the LCSSA phi's into the exit blocks (dominated by the value), and
176 // add them to the Phi's map.
177 for (SmallVector
<BasicBlock
*, 8>::const_iterator BBI
= exitBlocks
.begin(),
178 BBE
= exitBlocks
.end(); BBI
!= BBE
; ++BBI
) {
179 BasicBlock
*BB
= *BBI
;
180 DomTreeNode
*ExitBBNode
= DT
->getNode(BB
);
181 Value
*&Phi
= Phis
[ExitBBNode
];
182 if (!Phi
&& DT
->dominates(DomNode
, ExitBBNode
)) {
183 PHINode
*PN
= PHINode::Create(Instr
->getType(), Instr
->getName()+".lcssa",
185 PN
->reserveOperandSpace(PredCache
.GetNumPreds(BB
));
187 // Remember that this phi makes the value alive in this block.
190 // Add inputs from inside the loop for this PHI.
191 for (BasicBlock
** PI
= PredCache
.GetPreds(BB
); *PI
; ++PI
)
192 PN
->addIncoming(Instr
, *PI
);
197 // Record all uses of Instr outside the loop. We need to rewrite these. The
198 // LCSSA phis won't be included because they use the value in the loop.
199 for (Value::use_iterator UI
= Instr
->use_begin(), E
= Instr
->use_end();
201 BasicBlock
*UserBB
= cast
<Instruction
>(*UI
)->getParent();
202 if (PHINode
*P
= dyn_cast
<PHINode
>(*UI
)) {
203 UserBB
= P
->getIncomingBlock(UI
);
206 // If the user is in the loop, don't rewrite it!
207 if (UserBB
== Instr
->getParent() || inLoop(UserBB
)) {
212 // Otherwise, patch up uses of the value with the appropriate LCSSA Phi,
213 // inserting PHI nodes into join points where needed.
214 Value
*Val
= GetValueForBlock(DT
->getNode(UserBB
), Instr
, Phis
);
216 // Preincrement the iterator to avoid invalidating it when we change the
218 Use
&U
= UI
.getUse();
224 /// getLoopValuesUsedOutsideLoop - Return any values defined in the loop that
225 /// are used by instructions outside of it.
226 void LCSSA::getLoopValuesUsedOutsideLoop(Loop
*L
,
227 SetVector
<Instruction
*> &AffectedValues
,
228 const SmallVector
<BasicBlock
*, 8>& exitBlocks
) {
229 // FIXME: For large loops, we may be able to avoid a lot of use-scanning
230 // by using dominance information. In particular, if a block does not
231 // dominate any of the loop exits, then none of the values defined in the
232 // block could be used outside the loop.
233 for (Loop::block_iterator BB
= L
->block_begin(), BE
= L
->block_end();
235 for (BasicBlock::iterator I
= (*BB
)->begin(), E
= (*BB
)->end(); I
!= E
; ++I
)
236 for (Value::use_iterator UI
= I
->use_begin(), UE
= I
->use_end(); UI
!= UE
;
238 BasicBlock
*UserBB
= cast
<Instruction
>(*UI
)->getParent();
239 if (PHINode
* p
= dyn_cast
<PHINode
>(*UI
)) {
240 UserBB
= p
->getIncomingBlock(UI
);
243 if (*BB
!= UserBB
&& !inLoop(UserBB
)) {
244 AffectedValues
.insert(I
);
251 /// GetValueForBlock - Get the value to use within the specified basic block.
252 /// available values are in Phis.
253 Value
*LCSSA::GetValueForBlock(DomTreeNode
*BB
, Instruction
*OrigInst
,
254 DenseMap
<DomTreeNode
*, Value
*> &Phis
) {
255 // If there is no dominator info for this BB, it is unreachable.
257 return UndefValue::get(OrigInst
->getType());
259 // If we have already computed this value, return the previously computed val.
260 if (Phis
.count(BB
)) return Phis
[BB
];
262 DomTreeNode
*IDom
= BB
->getIDom();
264 // Otherwise, there are two cases: we either have to insert a PHI node or we
265 // don't. We need to insert a PHI node if this block is not dominated by one
266 // of the exit nodes from the loop (the loop could have multiple exits, and
267 // though the value defined *inside* the loop dominated all its uses, each
268 // exit by itself may not dominate all the uses).
270 // The simplest way to check for this condition is by checking to see if the
271 // idom is in the loop. If so, we *know* that none of the exit blocks
272 // dominate this block. Note that we *know* that the block defining the
273 // original instruction is in the idom chain, because if it weren't, then the
274 // original value didn't dominate this use.
275 if (!inLoop(IDom
->getBlock())) {
276 // Idom is not in the loop, we must still be "below" the exit block and must
277 // be fully dominated by the value live in the idom.
278 Value
* val
= GetValueForBlock(IDom
, OrigInst
, Phis
);
279 Phis
.insert(std::make_pair(BB
, val
));
283 BasicBlock
*BBN
= BB
->getBlock();
285 // Otherwise, the idom is the loop, so we need to insert a PHI node. Do so
286 // now, then get values to fill in the incoming values for the PHI.
287 PHINode
*PN
= PHINode::Create(OrigInst
->getType(),
288 OrigInst
->getName() + ".lcssa", BBN
->begin());
289 PN
->reserveOperandSpace(PredCache
.GetNumPreds(BBN
));
290 Phis
.insert(std::make_pair(BB
, PN
));
292 // Fill in the incoming values for the block.
293 for (BasicBlock
** PI
= PredCache
.GetPreds(BBN
); *PI
; ++PI
)
294 PN
->addIncoming(GetValueForBlock(DT
->getNode(*PI
), OrigInst
, Phis
), *PI
);