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