LCSSA.cpp revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1//===-- LCSSA.cpp - Convert loops into loop-closed SSA form ---------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
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:
13//
14// for (...)                for (...)
15//   if (c)                   if (c)
16//     X1 = ...                 X1 = ...
17//   else                     else
18//     X2 = ...                 X2 = ...
19//   X3 = phi(X1, X2)         X3 = phi(X1, X2)
20// ... = X3 + 4             X4 = phi(X3)
21//                          ... = X4 + 4
22//
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.
27//
28//===----------------------------------------------------------------------===//
29
30#define DEBUG_TYPE "lcssa"
31#include "llvm/Transforms/Scalar.h"
32#include "llvm/ADT/STLExtras.h"
33#include "llvm/ADT/Statistic.h"
34#include "llvm/Analysis/AliasAnalysis.h"
35#include "llvm/Analysis/LoopPass.h"
36#include "llvm/Analysis/ScalarEvolution.h"
37#include "llvm/IR/Constants.h"
38#include "llvm/IR/Dominators.h"
39#include "llvm/IR/Function.h"
40#include "llvm/IR/Instructions.h"
41#include "llvm/IR/PredIteratorCache.h"
42#include "llvm/Pass.h"
43#include "llvm/Transforms/Utils/LoopUtils.h"
44#include "llvm/Transforms/Utils/SSAUpdater.h"
45using namespace llvm;
46
47STATISTIC(NumLCSSA, "Number of live out of a loop variables");
48
49/// Return true if the specified block is in the list.
50static bool isExitBlock(BasicBlock *BB,
51                        const SmallVectorImpl<BasicBlock *> &ExitBlocks) {
52  for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i)
53    if (ExitBlocks[i] == BB)
54      return true;
55  return false;
56}
57
58/// Given an instruction in the loop, check to see if it has any uses that are
59/// outside the current loop.  If so, insert LCSSA PHI nodes and rewrite the
60/// uses.
61static bool processInstruction(Loop &L, Instruction &Inst, DominatorTree &DT,
62                               const SmallVectorImpl<BasicBlock *> &ExitBlocks,
63                               PredIteratorCache &PredCache) {
64  SmallVector<Use *, 16> UsesToRewrite;
65
66  BasicBlock *InstBB = Inst.getParent();
67
68  for (Use &U : Inst.uses()) {
69    Instruction *User = cast<Instruction>(U.getUser());
70    BasicBlock *UserBB = User->getParent();
71    if (PHINode *PN = dyn_cast<PHINode>(User))
72      UserBB = PN->getIncomingBlock(U);
73
74    if (InstBB != UserBB && !L.contains(UserBB))
75      UsesToRewrite.push_back(&U);
76  }
77
78  // If there are no uses outside the loop, exit with no change.
79  if (UsesToRewrite.empty())
80    return false;
81
82  ++NumLCSSA; // We are applying the transformation
83
84  // Invoke instructions are special in that their result value is not available
85  // along their unwind edge. The code below tests to see whether DomBB
86  // dominates
87  // the value, so adjust DomBB to the normal destination block, which is
88  // effectively where the value is first usable.
89  BasicBlock *DomBB = Inst.getParent();
90  if (InvokeInst *Inv = dyn_cast<InvokeInst>(&Inst))
91    DomBB = Inv->getNormalDest();
92
93  DomTreeNode *DomNode = DT.getNode(DomBB);
94
95  SmallVector<PHINode *, 16> AddedPHIs;
96
97  SSAUpdater SSAUpdate;
98  SSAUpdate.Initialize(Inst.getType(), Inst.getName());
99
100  // Insert the LCSSA phi's into all of the exit blocks dominated by the
101  // value, and add them to the Phi's map.
102  for (SmallVectorImpl<BasicBlock *>::const_iterator BBI = ExitBlocks.begin(),
103                                                     BBE = ExitBlocks.end();
104       BBI != BBE; ++BBI) {
105    BasicBlock *ExitBB = *BBI;
106    if (!DT.dominates(DomNode, DT.getNode(ExitBB)))
107      continue;
108
109    // If we already inserted something for this BB, don't reprocess it.
110    if (SSAUpdate.HasValueForBlock(ExitBB))
111      continue;
112
113    PHINode *PN = PHINode::Create(Inst.getType(), PredCache.GetNumPreds(ExitBB),
114                                  Inst.getName() + ".lcssa", ExitBB->begin());
115
116    // Add inputs from inside the loop for this PHI.
117    for (BasicBlock **PI = PredCache.GetPreds(ExitBB); *PI; ++PI) {
118      PN->addIncoming(&Inst, *PI);
119
120      // If the exit block has a predecessor not within the loop, arrange for
121      // the incoming value use corresponding to that predecessor to be
122      // rewritten in terms of a different LCSSA PHI.
123      if (!L.contains(*PI))
124        UsesToRewrite.push_back(
125            &PN->getOperandUse(PN->getOperandNumForIncomingValue(
126                 PN->getNumIncomingValues() - 1)));
127    }
128
129    AddedPHIs.push_back(PN);
130
131    // Remember that this phi makes the value alive in this block.
132    SSAUpdate.AddAvailableValue(ExitBB, PN);
133  }
134
135  // Rewrite all uses outside the loop in terms of the new PHIs we just
136  // inserted.
137  for (unsigned i = 0, e = UsesToRewrite.size(); i != e; ++i) {
138    // If this use is in an exit block, rewrite to use the newly inserted PHI.
139    // This is required for correctness because SSAUpdate doesn't handle uses in
140    // the same block.  It assumes the PHI we inserted is at the end of the
141    // block.
142    Instruction *User = cast<Instruction>(UsesToRewrite[i]->getUser());
143    BasicBlock *UserBB = User->getParent();
144    if (PHINode *PN = dyn_cast<PHINode>(User))
145      UserBB = PN->getIncomingBlock(*UsesToRewrite[i]);
146
147    if (isa<PHINode>(UserBB->begin()) && isExitBlock(UserBB, ExitBlocks)) {
148      // Tell the VHs that the uses changed. This updates SCEV's caches.
149      if (UsesToRewrite[i]->get()->hasValueHandle())
150        ValueHandleBase::ValueIsRAUWd(*UsesToRewrite[i], UserBB->begin());
151      UsesToRewrite[i]->set(UserBB->begin());
152      continue;
153    }
154
155    // Otherwise, do full PHI insertion.
156    SSAUpdate.RewriteUse(*UsesToRewrite[i]);
157  }
158
159  // Remove PHI nodes that did not have any uses rewritten.
160  for (unsigned i = 0, e = AddedPHIs.size(); i != e; ++i) {
161    if (AddedPHIs[i]->use_empty())
162      AddedPHIs[i]->eraseFromParent();
163  }
164
165  return true;
166}
167
168/// Return true if the specified block dominates at least
169/// one of the blocks in the specified list.
170static bool
171blockDominatesAnExit(BasicBlock *BB,
172                     DominatorTree &DT,
173                     const SmallVectorImpl<BasicBlock *> &ExitBlocks) {
174  DomTreeNode *DomNode = DT.getNode(BB);
175  for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i)
176    if (DT.dominates(DomNode, DT.getNode(ExitBlocks[i])))
177      return true;
178
179  return false;
180}
181
182bool llvm::formLCSSA(Loop &L, DominatorTree &DT, ScalarEvolution *SE) {
183  bool Changed = false;
184
185  // Get the set of exiting blocks.
186  SmallVector<BasicBlock *, 8> ExitBlocks;
187  L.getExitBlocks(ExitBlocks);
188
189  if (ExitBlocks.empty())
190    return false;
191
192  PredIteratorCache PredCache;
193
194  // Look at all the instructions in the loop, checking to see if they have uses
195  // outside the loop.  If so, rewrite those uses.
196  for (Loop::block_iterator BBI = L.block_begin(), BBE = L.block_end();
197       BBI != BBE; ++BBI) {
198    BasicBlock *BB = *BBI;
199
200    // For large loops, avoid use-scanning by using dominance information:  In
201    // particular, if a block does not dominate any of the loop exits, then none
202    // of the values defined in the block could be used outside the loop.
203    if (!blockDominatesAnExit(BB, DT, ExitBlocks))
204      continue;
205
206    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) {
207      // Reject two common cases fast: instructions with no uses (like stores)
208      // and instructions with one use that is in the same block as this.
209      if (I->use_empty() ||
210          (I->hasOneUse() && I->user_back()->getParent() == BB &&
211           !isa<PHINode>(I->user_back())))
212        continue;
213
214      Changed |= processInstruction(L, *I, DT, ExitBlocks, PredCache);
215    }
216  }
217
218  // If we modified the code, remove any caches about the loop from SCEV to
219  // avoid dangling entries.
220  // FIXME: This is a big hammer, can we clear the cache more selectively?
221  if (SE && Changed)
222    SE->forgetLoop(&L);
223
224  assert(L.isLCSSAForm(DT));
225
226  return Changed;
227}
228
229/// Process a loop nest depth first.
230bool llvm::formLCSSARecursively(Loop &L, DominatorTree &DT,
231                                ScalarEvolution *SE) {
232  bool Changed = false;
233
234  // Recurse depth-first through inner loops.
235  for (Loop::iterator LI = L.begin(), LE = L.end(); LI != LE; ++LI)
236    Changed |= formLCSSARecursively(**LI, DT, SE);
237
238  Changed |= formLCSSA(L, DT, SE);
239  return Changed;
240}
241
242namespace {
243struct LCSSA : public FunctionPass {
244  static char ID; // Pass identification, replacement for typeid
245  LCSSA() : FunctionPass(ID) {
246    initializeLCSSAPass(*PassRegistry::getPassRegistry());
247  }
248
249  // Cached analysis information for the current function.
250  DominatorTree *DT;
251  LoopInfo *LI;
252  ScalarEvolution *SE;
253
254  bool runOnFunction(Function &F) override;
255
256  /// This transformation requires natural loop information & requires that
257  /// loop preheaders be inserted into the CFG.  It maintains both of these,
258  /// as well as the CFG.  It also requires dominator information.
259  void getAnalysisUsage(AnalysisUsage &AU) const override {
260    AU.setPreservesCFG();
261
262    AU.addRequired<DominatorTreeWrapperPass>();
263    AU.addRequired<LoopInfo>();
264    AU.addPreservedID(LoopSimplifyID);
265    AU.addPreserved<AliasAnalysis>();
266    AU.addPreserved<ScalarEvolution>();
267  }
268
269private:
270  bool processLoop(Loop &L);
271
272  void verifyAnalysis() const override;
273};
274}
275
276char LCSSA::ID = 0;
277INITIALIZE_PASS_BEGIN(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
278INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
279INITIALIZE_PASS_DEPENDENCY(LoopInfo)
280INITIALIZE_PASS_END(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
281
282Pass *llvm::createLCSSAPass() { return new LCSSA(); }
283char &llvm::LCSSAID = LCSSA::ID;
284
285
286/// Process all loops in the function, inner-most out.
287bool LCSSA::runOnFunction(Function &F) {
288  bool Changed = false;
289  LI = &getAnalysis<LoopInfo>();
290  DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
291  SE = getAnalysisIfAvailable<ScalarEvolution>();
292
293  // Simplify each loop nest in the function.
294  for (LoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I)
295    Changed |= formLCSSARecursively(**I, *DT, SE);
296
297  return Changed;
298}
299
300static void verifyLoop(Loop &L, DominatorTree &DT) {
301  // Recurse depth-first through inner loops.
302  for (Loop::iterator LI = L.begin(), LE = L.end(); LI != LE; ++LI)
303    verifyLoop(**LI, DT);
304
305  // Check the special guarantees that LCSSA makes.
306  //assert(L.isLCSSAForm(DT) && "LCSSA form not preserved!");
307}
308
309void LCSSA::verifyAnalysis() const {
310  // Verify each loop nest in the function, assuming LI still points at that
311  // function's loop info.
312  for (LoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I)
313    verifyLoop(**I, *DT);
314}
315