LICM.cpp revision 0513e9fe03f6e3c7d0272b8f4f82359e8d1a2e44
1//===-- LICM.cpp - Loop Invariant Code Motion Pass ------------------------===//
2//
3// This pass is a simple loop invariant code motion pass.
4//
5// Note that this pass does NOT require pre-headers to exist on loops in the
6// CFG, but if there is not distinct preheader for a loop, the hoisted code will
7// be *DUPLICATED* in every basic block, outside of the loop, that preceeds the
8// loop header.  Additionally, any use of one of these hoisted expressions
9// cannot be loop invariant itself, because the expression hoisted gets a PHI
10// node that is loop variant.
11//
12// For these reasons, and many more, it makes sense to run a pass before this
13// that ensures that there are preheaders on all loops.  That said, we don't
14// REQUIRE it. :)
15//
16//===----------------------------------------------------------------------===//
17
18#include "llvm/Transforms/Scalar.h"
19#include "llvm/Transforms/Utils/Local.h"
20#include "llvm/Analysis/LoopInfo.h"
21#include "llvm/iOperators.h"
22#include "llvm/iPHINode.h"
23#include "llvm/Support/InstVisitor.h"
24#include "llvm/Support/CFG.h"
25#include "Support/STLExtras.h"
26#include "Support/StatisticReporter.h"
27#include <algorithm>
28using std::string;
29
30static Statistic<> NumHoistedNPH("licm\t\t- Number of insts hoisted to multiple"
31                                 " loop preds (bad, no loop pre-header)");
32static Statistic<> NumHoistedPH("licm\t\t- Number of insts hoisted to a loop "
33                                "pre-header");
34
35namespace {
36  struct LICM : public FunctionPass, public InstVisitor<LICM> {
37    virtual bool runOnFunction(Function &F);
38
39    // This transformation requires natural loop information...
40    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
41      AU.preservesCFG();
42      AU.addRequired<LoopInfo>();
43    }
44
45  private:
46    // List of predecessor blocks for the current loop - These blocks are where
47    // we hoist loop invariants to for the current loop.
48    //
49    std::vector<BasicBlock*> LoopPreds, LoopBackEdges;
50
51    Loop *CurLoop;  // The current loop we are working on...
52    bool Changed;   // Set to true when we change anything.
53
54    // visitLoop - Hoist expressions out of the specified loop...
55    void visitLoop(Loop *L);
56
57    // notInCurrentLoop - Little predicate that returns true if the specified
58    // basic block is in a subloop of the current one, not the current one
59    // itself.
60    //
61    bool notInCurrentLoop(BasicBlock *BB) {
62      for (unsigned i = 0, e = CurLoop->getSubLoops().size(); i != e; ++i)
63        if (CurLoop->getSubLoops()[i]->contains(BB))
64          return true;  // A subloop actually contains this block!
65      return false;
66    }
67
68    // hoist - When an instruction is found to only use loop invariant operands
69    // that is safe to hoist, this instruction is called to do the dirty work.
70    //
71    void hoist(Instruction &I);
72
73    // isLoopInvariant - Return true if the specified value is loop invariant
74    inline bool isLoopInvariant(Value *V) {
75      if (Instruction *I = dyn_cast<Instruction>(V))
76        return !CurLoop->contains(I->getParent());
77      return true;  // All non-instructions are loop invariant
78    }
79
80    // visitBasicBlock - Run LICM on a particular block.
81    void visitBasicBlock(BasicBlock *BB);
82
83    // Instruction visitation handlers... these basically control whether or not
84    // the specified instruction types are hoisted.
85    //
86    friend class InstVisitor<LICM>;
87    void visitBinaryOperator(Instruction &I) {
88      if (isLoopInvariant(I.getOperand(0)) && isLoopInvariant(I.getOperand(1)))
89        hoist(I);
90    }
91    void visitCastInst(CastInst &I) {
92      if (isLoopInvariant(I.getOperand(0))) hoist((Instruction&)I);
93    }
94    void visitShiftInst(ShiftInst &I) { visitBinaryOperator((Instruction&)I); }
95
96    void visitGetElementPtrInst(GetElementPtrInst &GEPI) {
97      Instruction &I = (Instruction&)GEPI;
98      for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
99        if (!isLoopInvariant(I.getOperand(i))) return;
100      hoist(I);
101    }
102  };
103
104  RegisterOpt<LICM> X("licm", "Loop Invariant Code Motion");
105}
106
107Pass *createLICMPass() { return new LICM(); }
108
109bool LICM::runOnFunction(Function &) {
110  // get our loop information...
111  const std::vector<Loop*> &TopLevelLoops =
112    getAnalysis<LoopInfo>().getTopLevelLoops();
113
114  // Traverse loops in postorder, hoisting expressions out of the deepest loops
115  // first.
116  //
117  Changed = false;
118  std::for_each(TopLevelLoops.begin(), TopLevelLoops.end(),
119                bind_obj(this, &LICM::visitLoop));
120  return Changed;
121}
122
123void LICM::visitLoop(Loop *L) {
124  // Recurse through all subloops before we process this loop...
125  std::for_each(L->getSubLoops().begin(), L->getSubLoops().end(),
126                bind_obj(this, &LICM::visitLoop));
127  CurLoop = L;
128
129  // Calculate the set of predecessors for this loop.  The predecessors for this
130  // loop are equal to the predecessors for the header node of the loop that are
131  // not themselves in the loop.
132  //
133  BasicBlock *Header = L->getHeader();
134
135  // Calculate the sets of predecessors and backedges of the loop...
136  LoopBackEdges.insert(LoopBackEdges.end(),pred_begin(Header),pred_end(Header));
137
138  std::vector<BasicBlock*>::iterator LPI =
139    std::partition(LoopBackEdges.begin(), LoopBackEdges.end(),
140                   bind_obj(CurLoop, &Loop::contains));
141
142  // Move all predecessors to the LoopPreds vector...
143  LoopPreds.insert(LoopPreds.end(), LPI, LoopBackEdges.end());
144
145  // Remove predecessors from backedges list...
146  LoopBackEdges.erase(LPI, LoopBackEdges.end());
147
148
149  // The only way that there could be no predecessors to a loop is if the loop
150  // is not reachable.  Since we don't care about optimizing dead loops,
151  // summarily ignore them.
152  //
153  if (LoopPreds.empty()) return;
154
155  // We want to visit all of the instructions in this loop... that are not parts
156  // of our subloops (they have already had their invariants hoisted out of
157  // their loop, into this loop, so there is no need to process the BODIES of
158  // the subloops).
159  //
160  std::vector<BasicBlock*> BBs(L->getBlocks().begin(), L->getBlocks().end());
161
162  // Remove blocks that are actually in subloops...
163  BBs.erase(std::remove_if(BBs.begin(), BBs.end(),
164                           bind_obj(this, &LICM::notInCurrentLoop)), BBs.end());
165
166  // Visit all of the basic blocks we have chosen, hoisting out the instructions
167  // as neccesary.  This leaves dead copies of the instruction in the loop
168  // unfortunately...
169  //
170  for_each(BBs.begin(), BBs.end(), bind_obj(this, &LICM::visitBasicBlock));
171
172  // Clear out loops state information for the next iteration
173  CurLoop = 0;
174  LoopPreds.clear();
175  LoopBackEdges.clear();
176}
177
178void LICM::visitBasicBlock(BasicBlock *BB) {
179  for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ) {
180    visit(*I);
181
182    if (dceInstruction(I))
183      Changed = true;
184    else
185      ++I;
186  }
187}
188
189
190void LICM::hoist(Instruction &Inst) {
191  if (Inst.use_empty()) return;  // Don't (re) hoist dead instructions!
192  //cerr << "Hoisting " << Inst;
193
194  BasicBlock *Header = CurLoop->getHeader();
195
196  // Old instruction will be removed, so take it's name...
197  string InstName = Inst.getName();
198  Inst.setName("");
199
200  // The common case is that we have a pre-header.  Generate special case code
201  // that is faster if that is the case.
202  //
203  if (LoopPreds.size() == 1) {
204    BasicBlock *Pred = LoopPreds[0];
205
206    // Create a new copy of the instruction, for insertion into Pred.
207    Instruction *New = Inst.clone();
208    New->setName(InstName);
209
210    // Insert the new node in Pred, before the terminator.
211    Pred->getInstList().insert(--Pred->end(), New);
212
213    // Kill the old instruction...
214    Inst.replaceAllUsesWith(New);
215    ++NumHoistedPH;
216
217  } else {
218    // No loop pre-header, insert a PHI node into header to capture all of the
219    // incoming versions of the value.
220    //
221    PHINode *LoopVal = new PHINode(Inst.getType(), InstName+".phi");
222
223    // Insert the new PHI node into the loop header...
224    Header->getInstList().push_front(LoopVal);
225
226    // Insert cloned versions of the instruction into all of the loop preds.
227    for (unsigned i = 0, e = LoopPreds.size(); i != e; ++i) {
228      BasicBlock *Pred = LoopPreds[i];
229
230      // Create a new copy of the instruction, for insertion into Pred.
231      Instruction *New = Inst.clone();
232      New->setName(InstName);
233
234      // Insert the new node in Pred, before the terminator.
235      Pred->getInstList().insert(--Pred->end(), New);
236
237      // Add the incoming value to the PHI node.
238      LoopVal->addIncoming(New, Pred);
239    }
240
241    // Add incoming values to the PHI node for all backedges in the loop...
242    for (unsigned i = 0, e = LoopBackEdges.size(); i != e; ++i)
243      LoopVal->addIncoming(LoopVal, LoopBackEdges[i]);
244
245    // Replace all uses of the old version of the instruction in the loop with
246    // the new version that is out of the loop.  We know that this is ok,
247    // because the new definition is in the loop header, which dominates the
248    // entire loop body.  The old definition was defined _inside_ of the loop,
249    // so the scope cannot extend outside of the loop, so we're ok.
250    //
251    Inst.replaceAllUsesWith(LoopVal);
252    ++NumHoistedNPH;
253  }
254
255  Changed = true;
256}
257
258