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 // Sanity check: Check basic loop invariants.
96 // Check the special guarantees that LCSSA makes.
97 assert(L
->isLCSSAForm());
101 void getLoopValuesUsedOutsideLoop(Loop
*L
,
102 SetVector
<Instruction
*> &AffectedValues
,
103 const SmallVector
<BasicBlock
*, 8>& exitBlocks
);
105 Value
*GetValueForBlock(DomTreeNode
*BB
, Instruction
*OrigInst
,
106 DenseMap
<DomTreeNode
*, Value
*> &Phis
);
108 /// inLoop - returns true if the given block is within the current loop
109 bool inLoop(BasicBlock
* B
) {
110 return std::binary_search(LoopBlocks
.begin(), LoopBlocks
.end(), B
);
116 static RegisterPass
<LCSSA
> X("lcssa", "Loop-Closed SSA Form Pass");
118 Pass
*llvm::createLCSSAPass() { return new LCSSA(); }
119 const PassInfo
*const llvm::LCSSAID
= &X
;
121 /// runOnFunction - Process all loops in the function, inner-most out.
122 bool LCSSA::runOnLoop(Loop
*l
, LPPassManager
&LPM
) {
126 LI
= &LPM
.getAnalysis
<LoopInfo
>();
127 DT
= &getAnalysis
<DominatorTree
>();
129 // Speed up queries by creating a sorted list of blocks
131 LoopBlocks
.insert(LoopBlocks
.end(), L
->block_begin(), L
->block_end());
132 std::sort(LoopBlocks
.begin(), LoopBlocks
.end());
134 SmallVector
<BasicBlock
*, 8> exitBlocks
;
135 L
->getExitBlocks(exitBlocks
);
137 SetVector
<Instruction
*> AffectedValues
;
138 getLoopValuesUsedOutsideLoop(L
, AffectedValues
, exitBlocks
);
140 // If no values are affected, we can save a lot of work, since we know that
141 // nothing will be changed.
142 if (AffectedValues
.empty())
145 // Iterate over all affected values for this loop and insert Phi nodes
146 // for them in the appropriate exit blocks
148 for (SetVector
<Instruction
*>::iterator I
= AffectedValues
.begin(),
149 E
= AffectedValues
.end(); I
!= E
; ++I
)
150 ProcessInstruction(*I
, exitBlocks
);
152 assert(L
->isLCSSAForm());
157 /// processInstruction - Given a live-out instruction, insert LCSSA Phi nodes,
158 /// eliminate all out-of-loop uses.
159 void LCSSA::ProcessInstruction(Instruction
*Instr
,
160 const SmallVector
<BasicBlock
*, 8>& exitBlocks
) {
161 ++NumLCSSA
; // We are applying the transformation
163 // Keep track of the blocks that have the value available already.
164 DenseMap
<DomTreeNode
*, Value
*> Phis
;
166 BasicBlock
*DomBB
= Instr
->getParent();
168 // Invoke instructions are special in that their result value is not available
169 // along their unwind edge. The code below tests to see whether DomBB dominates
170 // the value, so adjust DomBB to the normal destination block, which is
171 // effectively where the value is first usable.
172 if (InvokeInst
*Inv
= dyn_cast
<InvokeInst
>(Instr
))
173 DomBB
= Inv
->getNormalDest();
175 DomTreeNode
*DomNode
= DT
->getNode(DomBB
);
177 // Insert the LCSSA phi's into the exit blocks (dominated by the value), and
178 // add them to the Phi's map.
179 for (SmallVector
<BasicBlock
*, 8>::const_iterator BBI
= exitBlocks
.begin(),
180 BBE
= exitBlocks
.end(); BBI
!= BBE
; ++BBI
) {
181 BasicBlock
*BB
= *BBI
;
182 DomTreeNode
*ExitBBNode
= DT
->getNode(BB
);
183 Value
*&Phi
= Phis
[ExitBBNode
];
184 if (!Phi
&& DT
->dominates(DomNode
, ExitBBNode
)) {
185 PHINode
*PN
= PHINode::Create(Instr
->getType(), Instr
->getName()+".lcssa",
187 PN
->reserveOperandSpace(PredCache
.GetNumPreds(BB
));
189 // Remember that this phi makes the value alive in this block.
192 // Add inputs from inside the loop for this PHI.
193 for (BasicBlock
** PI
= PredCache
.GetPreds(BB
); *PI
; ++PI
)
194 PN
->addIncoming(Instr
, *PI
);
199 // Record all uses of Instr outside the loop. We need to rewrite these. The
200 // LCSSA phis won't be included because they use the value in the loop.
201 for (Value::use_iterator UI
= Instr
->use_begin(), E
= Instr
->use_end();
203 BasicBlock
*UserBB
= cast
<Instruction
>(*UI
)->getParent();
204 if (PHINode
*P
= dyn_cast
<PHINode
>(*UI
)) {
205 UserBB
= P
->getIncomingBlock(UI
);
208 // If the user is in the loop, don't rewrite it!
209 if (UserBB
== Instr
->getParent() || inLoop(UserBB
)) {
214 // Otherwise, patch up uses of the value with the appropriate LCSSA Phi,
215 // inserting PHI nodes into join points where needed.
216 Value
*Val
= GetValueForBlock(DT
->getNode(UserBB
), Instr
, Phis
);
218 // Preincrement the iterator to avoid invalidating it when we change the
220 Use
&U
= UI
.getUse();
226 /// getLoopValuesUsedOutsideLoop - Return any values defined in the loop that
227 /// are used by instructions outside of it.
228 void LCSSA::getLoopValuesUsedOutsideLoop(Loop
*L
,
229 SetVector
<Instruction
*> &AffectedValues
,
230 const SmallVector
<BasicBlock
*, 8>& exitBlocks
) {
231 // FIXME: For large loops, we may be able to avoid a lot of use-scanning
232 // by using dominance information. In particular, if a block does not
233 // dominate any of the loop exits, then none of the values defined in the
234 // block could be used outside the loop.
235 for (Loop::block_iterator BB
= L
->block_begin(), BE
= L
->block_end();
237 for (BasicBlock::iterator I
= (*BB
)->begin(), E
= (*BB
)->end(); I
!= E
; ++I
)
238 for (Value::use_iterator UI
= I
->use_begin(), UE
= I
->use_end(); UI
!= UE
;
240 BasicBlock
*UserBB
= cast
<Instruction
>(*UI
)->getParent();
241 if (PHINode
* p
= dyn_cast
<PHINode
>(*UI
)) {
242 UserBB
= p
->getIncomingBlock(UI
);
245 if (*BB
!= UserBB
&& !inLoop(UserBB
)) {
246 AffectedValues
.insert(I
);
253 /// GetValueForBlock - Get the value to use within the specified basic block.
254 /// available values are in Phis.
255 Value
*LCSSA::GetValueForBlock(DomTreeNode
*BB
, Instruction
*OrigInst
,
256 DenseMap
<DomTreeNode
*, Value
*> &Phis
) {
257 // If there is no dominator info for this BB, it is unreachable.
259 return UndefValue::get(OrigInst
->getType());
261 // If we have already computed this value, return the previously computed val.
262 if (Phis
.count(BB
)) return Phis
[BB
];
264 DomTreeNode
*IDom
= BB
->getIDom();
266 // Otherwise, there are two cases: we either have to insert a PHI node or we
267 // don't. We need to insert a PHI node if this block is not dominated by one
268 // of the exit nodes from the loop (the loop could have multiple exits, and
269 // though the value defined *inside* the loop dominated all its uses, each
270 // exit by itself may not dominate all the uses).
272 // The simplest way to check for this condition is by checking to see if the
273 // idom is in the loop. If so, we *know* that none of the exit blocks
274 // dominate this block. Note that we *know* that the block defining the
275 // original instruction is in the idom chain, because if it weren't, then the
276 // original value didn't dominate this use.
277 if (!inLoop(IDom
->getBlock())) {
278 // Idom is not in the loop, we must still be "below" the exit block and must
279 // be fully dominated by the value live in the idom.
280 Value
* val
= GetValueForBlock(IDom
, OrigInst
, Phis
);
281 Phis
.insert(std::make_pair(BB
, val
));
285 BasicBlock
*BBN
= BB
->getBlock();
287 // Otherwise, the idom is the loop, so we need to insert a PHI node. Do so
288 // now, then get values to fill in the incoming values for the PHI.
289 PHINode
*PN
= PHINode::Create(OrigInst
->getType(),
290 OrigInst
->getName() + ".lcssa", BBN
->begin());
291 PN
->reserveOperandSpace(PredCache
.GetNumPreds(BBN
));
292 Phis
.insert(std::make_pair(BB
, PN
));
294 // Fill in the incoming values for the block.
295 for (BasicBlock
** PI
= PredCache
.GetPreds(BBN
); *PI
; ++PI
)
296 PN
->addIncoming(GetValueForBlock(DT
->getNode(*PI
), OrigInst
, Phis
), *PI
);