1 //===-- LCSSA.cpp - Convert loops into loop-closed SSA form ---------------===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by Owen Anderson and is distributed under the
6 // University of Illinois Open Source 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 #include "llvm/Transforms/Scalar.h"
31 #include "llvm/Constants.h"
32 #include "llvm/Pass.h"
33 #include "llvm/Function.h"
34 #include "llvm/Instructions.h"
35 #include "llvm/ADT/SetVector.h"
36 #include "llvm/ADT/Statistic.h"
37 #include "llvm/Analysis/Dominators.h"
38 #include "llvm/Analysis/LoopInfo.h"
39 #include "llvm/Support/CFG.h"
46 static Statistic
<> NumLCSSA("lcssa",
47 "Number of live out of a loop variables");
49 struct LCSSA
: public FunctionPass
{
50 // Cached analysis information for the current function.
53 std::vector
<BasicBlock
*> LoopBlocks
;
55 virtual bool runOnFunction(Function
&F
);
56 bool visitSubloop(Loop
* L
);
57 void ProcessInstruction(Instruction
* Instr
,
58 const std::vector
<BasicBlock
*>& exitBlocks
);
60 /// This transformation requires natural loop information & requires that
61 /// loop preheaders be inserted into the CFG. It maintains both of these,
62 /// as well as the CFG. It also requires dominator information.
64 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
66 AU
.addRequiredID(LoopSimplifyID
);
67 AU
.addPreservedID(LoopSimplifyID
);
68 AU
.addRequired
<LoopInfo
>();
69 AU
.addRequired
<DominatorTree
>();
72 SetVector
<Instruction
*> getLoopValuesUsedOutsideLoop(Loop
*L
);
74 PHINode
*GetValueForBlock(DominatorTree::Node
*BB
, Instruction
*OrigInst
,
75 std::map
<DominatorTree::Node
*, PHINode
*> &Phis
);
77 /// inLoop - returns true if the given block is within the current loop
78 const bool inLoop(BasicBlock
* B
) {
79 return std::binary_search(LoopBlocks
.begin(), LoopBlocks
.end(), B
);
83 RegisterOpt
<LCSSA
> X("lcssa", "Loop-Closed SSA Form Pass");
86 FunctionPass
*llvm::createLCSSAPass() { return new LCSSA(); }
87 const PassInfo
*llvm::LCSSAID
= X
.getPassInfo();
89 /// runOnFunction - Process all loops in the function, inner-most out.
90 bool LCSSA::runOnFunction(Function
&F
) {
93 LI
= &getAnalysis
<LoopInfo
>();
94 DT
= &getAnalysis
<DominatorTree
>();
96 for (LoopInfo::iterator I
= LI
->begin(), E
= LI
->end(); I
!= E
; ++I
)
97 changed
|= visitSubloop(*I
);
102 /// visitSubloop - Recursively process all subloops, and then process the given
103 /// loop if it has live-out values.
104 bool LCSSA::visitSubloop(Loop
* L
) {
105 for (Loop::iterator I
= L
->begin(), E
= L
->end(); I
!= E
; ++I
)
108 // Speed up queries by creating a sorted list of blocks
110 LoopBlocks
.insert(LoopBlocks
.end(), L
->block_begin(), L
->block_end());
111 std::sort(LoopBlocks
.begin(), LoopBlocks
.end());
113 SetVector
<Instruction
*> AffectedValues
= getLoopValuesUsedOutsideLoop(L
);
115 // If no values are affected, we can save a lot of work, since we know that
116 // nothing will be changed.
117 if (AffectedValues
.empty())
120 std::vector
<BasicBlock
*> exitBlocks
;
121 L
->getExitBlocks(exitBlocks
);
124 // Iterate over all affected values for this loop and insert Phi nodes
125 // for them in the appropriate exit blocks
127 for (SetVector
<Instruction
*>::iterator I
= AffectedValues
.begin(),
128 E
= AffectedValues
.end(); I
!= E
; ++I
)
129 ProcessInstruction(*I
, exitBlocks
);
131 assert(L
->isLCSSAForm());
136 /// processInstruction - Given a live-out instruction, insert LCSSA Phi nodes,
137 /// eliminate all out-of-loop uses.
138 void LCSSA::ProcessInstruction(Instruction
*Instr
,
139 const std::vector
<BasicBlock
*>& exitBlocks
) {
140 ++NumLCSSA
; // We are applying the transformation
142 // Keep track of the blocks that have the value available already.
143 std::map
<DominatorTree::Node
*, PHINode
*> Phis
;
145 DominatorTree::Node
*InstrNode
= DT
->getNode(Instr
->getParent());
147 // Insert the LCSSA phi's into the exit blocks (dominated by the value), and
148 // add them to the Phi's map.
149 for (std::vector
<BasicBlock
*>::const_iterator BBI
= exitBlocks
.begin(),
150 BBE
= exitBlocks
.end(); BBI
!= BBE
; ++BBI
) {
151 BasicBlock
*BB
= *BBI
;
152 DominatorTree::Node
*ExitBBNode
= DT
->getNode(BB
);
153 PHINode
*&Phi
= Phis
[ExitBBNode
];
154 if (!Phi
&& InstrNode
->dominates(ExitBBNode
)) {
155 Phi
= new PHINode(Instr
->getType(), Instr
->getName()+".lcssa",
157 Phi
->reserveOperandSpace(std::distance(pred_begin(BB
), pred_end(BB
)));
159 // Add inputs from inside the loop for this PHI.
160 for (pred_iterator PI
= pred_begin(BB
), E
= pred_end(BB
); PI
!= E
; ++PI
)
161 Phi
->addIncoming(Instr
, *PI
);
163 // Remember that this phi makes the value alive in this block.
164 Phis
[ExitBBNode
] = Phi
;
169 // Record all uses of Instr outside the loop. We need to rewrite these. The
170 // LCSSA phis won't be included because they use the value in the loop.
171 for (Value::use_iterator UI
= Instr
->use_begin(), E
= Instr
->use_end();
173 BasicBlock
*UserBB
= cast
<Instruction
>(*UI
)->getParent();
174 if (PHINode
*P
= dyn_cast
<PHINode
>(*UI
)) {
175 unsigned OperandNo
= UI
.getOperandNo();
176 UserBB
= P
->getIncomingBlock(OperandNo
/2);
179 // If the user is in the loop, don't rewrite it!
180 if (UserBB
== Instr
->getParent() || inLoop(UserBB
)) {
185 // Otherwise, patch up uses of the value with the appropriate LCSSA Phi,
186 // inserting PHI nodes into join points where needed.
187 Value
*Val
= GetValueForBlock(DT
->getNode(UserBB
), Instr
, Phis
);
189 // Preincrement the iterator to avoid invalidating it when we change the
191 Use
&U
= UI
.getUse();
197 /// getLoopValuesUsedOutsideLoop - Return any values defined in the loop that
198 /// are used by instructions outside of it.
199 SetVector
<Instruction
*> LCSSA::getLoopValuesUsedOutsideLoop(Loop
*L
) {
201 // FIXME: For large loops, we may be able to avoid a lot of use-scanning
202 // by using dominance information. In particular, if a block does not
203 // dominate any of the loop exits, then none of the values defined in the
204 // block could be used outside the loop.
206 SetVector
<Instruction
*> AffectedValues
;
207 for (Loop::block_iterator BB
= L
->block_begin(), E
= L
->block_end();
209 for (BasicBlock::iterator I
= (*BB
)->begin(), E
= (*BB
)->end(); I
!= E
; ++I
)
210 for (Value::use_iterator UI
= I
->use_begin(), E
= I
->use_end(); UI
!= E
;
212 BasicBlock
*UserBB
= cast
<Instruction
>(*UI
)->getParent();
213 if (PHINode
* p
= dyn_cast
<PHINode
>(*UI
)) {
214 unsigned OperandNo
= UI
.getOperandNo();
215 UserBB
= p
->getIncomingBlock(OperandNo
/2);
218 if (*BB
!= UserBB
&& !inLoop(UserBB
)) {
219 AffectedValues
.insert(I
);
224 return AffectedValues
;
227 /// GetValueForBlock - Get the value to use within the specified basic block.
228 /// available values are in Phis.
229 PHINode
*LCSSA::GetValueForBlock(DominatorTree::Node
*BB
, Instruction
*OrigInst
,
230 std::map
<DominatorTree::Node
*, PHINode
*> &Phis
) {
231 // If we have already computed this value, return the previously computed val.
232 PHINode
*&V
= Phis
[BB
];
235 DominatorTree::Node
*IDom
= BB
->getIDom();
237 // Otherwise, there are two cases: we either have to insert a PHI node or we
238 // don't. We need to insert a PHI node if this block is not dominated by one
239 // of the exit nodes from the loop (the loop could have multiple exits, and
240 // though the value defined *inside* the loop dominated all its uses, each
241 // exit by itself may not dominate all the uses).
243 // The simplest way to check for this condition is by checking to see if the
244 // idom is in the loop. If so, we *know* that none of the exit blocks
245 // dominate this block. Note that we *know* that the block defining the
246 // original instruction is in the idom chain, because if it weren't, then the
247 // original value didn't dominate this use.
248 if (!inLoop(IDom
->getBlock())) {
249 // Idom is not in the loop, we must still be "below" the exit block and must
250 // be fully dominated by the value live in the idom.
251 return V
= GetValueForBlock(IDom
, OrigInst
, Phis
);
254 BasicBlock
*BBN
= BB
->getBlock();
256 // Otherwise, the idom is the loop, so we need to insert a PHI node. Do so
257 // now, then get values to fill in the incoming values for the PHI.
258 V
= new PHINode(OrigInst
->getType(), OrigInst
->getName()+".lcssa",
260 V
->reserveOperandSpace(std::distance(pred_begin(BBN
), pred_end(BBN
)));
262 // Fill in the incoming values for the block.
263 for (pred_iterator PI
= pred_begin(BBN
), E
= pred_end(BBN
); PI
!= E
; ++PI
)
264 V
->addIncoming(GetValueForBlock(DT
->getNode(*PI
), OrigInst
, Phis
), *PI
);