LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BreakCriticalEdges.cpp
Go to the documentation of this file.
1 //===- BreakCriticalEdges.cpp - Critical Edge Elimination Pass ------------===//
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 // BreakCriticalEdges pass - Break all of the critical edges in the CFG by
11 // inserting a dummy basic block. This pass may be "required" by passes that
12 // cannot deal with critical edges. For this usage, the structure type is
13 // forward declared. This pass obviously invalidates the CFG, but can update
14 // dominator trees.
15 //
16 //===----------------------------------------------------------------------===//
17 
18 #define DEBUG_TYPE "break-crit-edges"
19 #include "llvm/Transforms/Scalar.h"
20 #include "llvm/ADT/SmallVector.h"
21 #include "llvm/ADT/Statistic.h"
22 #include "llvm/Analysis/CFG.h"
24 #include "llvm/Analysis/LoopInfo.h"
25 #include "llvm/IR/Function.h"
26 #include "llvm/IR/Instructions.h"
27 #include "llvm/IR/Type.h"
28 #include "llvm/Support/CFG.h"
31 using namespace llvm;
32 
33 STATISTIC(NumBroken, "Number of blocks inserted");
34 
35 namespace {
36  struct BreakCriticalEdges : public FunctionPass {
37  static char ID; // Pass identification, replacement for typeid
38  BreakCriticalEdges() : FunctionPass(ID) {
40  }
41 
42  virtual bool runOnFunction(Function &F);
43 
44  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
46  AU.addPreserved<LoopInfo>();
47 
48  // No loop canonicalization guarantees are broken by this pass.
50  }
51  };
52 }
53 
54 char BreakCriticalEdges::ID = 0;
55 INITIALIZE_PASS(BreakCriticalEdges, "break-crit-edges",
56  "Break critical edges in CFG", false, false)
57 
58 // Publicly exposed interface to pass...
59 char &llvm::BreakCriticalEdgesID = BreakCriticalEdges::ID;
61  return new BreakCriticalEdges();
62 }
63 
64 // runOnFunction - Loop over all of the edges in the CFG, breaking critical
65 // edges as they are found.
66 //
67 bool BreakCriticalEdges::runOnFunction(Function &F) {
68  bool Changed = false;
69  for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) {
70  TerminatorInst *TI = I->getTerminator();
71  if (TI->getNumSuccessors() > 1 && !isa<IndirectBrInst>(TI))
72  for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
73  if (SplitCriticalEdge(TI, i, this)) {
74  ++NumBroken;
75  Changed = true;
76  }
77  }
78 
79  return Changed;
80 }
81 
82 //===----------------------------------------------------------------------===//
83 // Implementation of the external critical edge manipulation functions
84 //===----------------------------------------------------------------------===//
85 
86 /// createPHIsForSplitLoopExit - When a loop exit edge is split, LCSSA form
87 /// may require new PHIs in the new exit block. This function inserts the
88 /// new PHIs, as needed. Preds is a list of preds inside the loop, SplitBB
89 /// is the new loop exit block, and DestBB is the old loop exit, now the
90 /// successor of SplitBB.
92  BasicBlock *SplitBB,
93  BasicBlock *DestBB) {
94  // SplitBB shouldn't have anything non-trivial in it yet.
95  assert((SplitBB->getFirstNonPHI() == SplitBB->getTerminator() ||
96  SplitBB->isLandingPad()) && "SplitBB has non-PHI nodes!");
97 
98  // For each PHI in the destination block.
99  for (BasicBlock::iterator I = DestBB->begin();
100  PHINode *PN = dyn_cast<PHINode>(I); ++I) {
101  unsigned Idx = PN->getBasicBlockIndex(SplitBB);
102  Value *V = PN->getIncomingValue(Idx);
103 
104  // If the input is a PHI which already satisfies LCSSA, don't create
105  // a new one.
106  if (const PHINode *VP = dyn_cast<PHINode>(V))
107  if (VP->getParent() == SplitBB)
108  continue;
109 
110  // Otherwise a new PHI is needed. Create one and populate it.
111  PHINode *NewPN =
112  PHINode::Create(PN->getType(), Preds.size(), "split",
113  SplitBB->isLandingPad() ?
114  SplitBB->begin() : SplitBB->getTerminator());
115  for (unsigned i = 0, e = Preds.size(); i != e; ++i)
116  NewPN->addIncoming(V, Preds[i]);
117 
118  // Update the original PHI.
119  PN->setIncomingValue(Idx, NewPN);
120  }
121 }
122 
123 /// SplitCriticalEdge - If this edge is a critical edge, insert a new node to
124 /// split the critical edge. This will update DominatorTree information if it
125 /// is available, thus calling this pass will not invalidate either of them.
126 /// This returns the new block if the edge was split, null otherwise.
127 ///
128 /// If MergeIdenticalEdges is true (not the default), *all* edges from TI to the
129 /// specified successor will be merged into the same critical edge block.
130 /// This is most commonly interesting with switch instructions, which may
131 /// have many edges to any one destination. This ensures that all edges to that
132 /// dest go to one block instead of each going to a different block, but isn't
133 /// the standard definition of a "critical edge".
134 ///
135 /// It is invalid to call this function on a critical edge that starts at an
136 /// IndirectBrInst. Splitting these edges will almost always create an invalid
137 /// program because the address of the new block won't be the one that is jumped
138 /// to.
139 ///
141  Pass *P, bool MergeIdenticalEdges,
142  bool DontDeleteUselessPhis,
143  bool SplitLandingPads) {
144  if (!isCriticalEdge(TI, SuccNum, MergeIdenticalEdges)) return 0;
145 
146  assert(!isa<IndirectBrInst>(TI) &&
147  "Cannot split critical edge from IndirectBrInst");
148 
149  BasicBlock *TIBB = TI->getParent();
150  BasicBlock *DestBB = TI->getSuccessor(SuccNum);
151 
152  // Splitting the critical edge to a landing pad block is non-trivial. Don't do
153  // it in this generic function.
154  if (DestBB->isLandingPad()) return 0;
155 
156  // Create a new basic block, linking it into the CFG.
158  TIBB->getName() + "." + DestBB->getName() + "_crit_edge");
159  // Create our unconditional branch.
160  BranchInst *NewBI = BranchInst::Create(DestBB, NewBB);
161  NewBI->setDebugLoc(TI->getDebugLoc());
162 
163  // Branch to the new block, breaking the edge.
164  TI->setSuccessor(SuccNum, NewBB);
165 
166  // Insert the block into the function... right after the block TI lives in.
167  Function &F = *TIBB->getParent();
168  Function::iterator FBBI = TIBB;
169  F.getBasicBlockList().insert(++FBBI, NewBB);
170 
171  // If there are any PHI nodes in DestBB, we need to update them so that they
172  // merge incoming values from NewBB instead of from TIBB.
173  {
174  unsigned BBIdx = 0;
175  for (BasicBlock::iterator I = DestBB->begin(); isa<PHINode>(I); ++I) {
176  // We no longer enter through TIBB, now we come in through NewBB.
177  // Revector exactly one entry in the PHI node that used to come from
178  // TIBB to come from NewBB.
179  PHINode *PN = cast<PHINode>(I);
180 
181  // Reuse the previous value of BBIdx if it lines up. In cases where we
182  // have multiple phi nodes with *lots* of predecessors, this is a speed
183  // win because we don't have to scan the PHI looking for TIBB. This
184  // happens because the BB list of PHI nodes are usually in the same
185  // order.
186  if (PN->getIncomingBlock(BBIdx) != TIBB)
187  BBIdx = PN->getBasicBlockIndex(TIBB);
188  PN->setIncomingBlock(BBIdx, NewBB);
189  }
190  }
191 
192  // If there are any other edges from TIBB to DestBB, update those to go
193  // through the split block, making those edges non-critical as well (and
194  // reducing the number of phi entries in the DestBB if relevant).
195  if (MergeIdenticalEdges) {
196  for (unsigned i = SuccNum+1, e = TI->getNumSuccessors(); i != e; ++i) {
197  if (TI->getSuccessor(i) != DestBB) continue;
198 
199  // Remove an entry for TIBB from DestBB phi nodes.
200  DestBB->removePredecessor(TIBB, DontDeleteUselessPhis);
201 
202  // We found another edge to DestBB, go to NewBB instead.
203  TI->setSuccessor(i, NewBB);
204  }
205  }
206 
207 
208 
209  // If we don't have a pass object, we can't update anything...
210  if (P == 0) return NewBB;
211 
214 
215  // If we have nothing to update, just return.
216  if (DT == 0 && LI == 0)
217  return NewBB;
218 
219  // Now update analysis information. Since the only predecessor of NewBB is
220  // the TIBB, TIBB clearly dominates NewBB. TIBB usually doesn't dominate
221  // anything, as there are other successors of DestBB. However, if all other
222  // predecessors of DestBB are already dominated by DestBB (e.g. DestBB is a
223  // loop header) then NewBB dominates DestBB.
224  SmallVector<BasicBlock*, 8> OtherPreds;
225 
226  // If there is a PHI in the block, loop over predecessors with it, which is
227  // faster than iterating pred_begin/end.
228  if (PHINode *PN = dyn_cast<PHINode>(DestBB->begin())) {
229  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
230  if (PN->getIncomingBlock(i) != NewBB)
231  OtherPreds.push_back(PN->getIncomingBlock(i));
232  } else {
233  for (pred_iterator I = pred_begin(DestBB), E = pred_end(DestBB);
234  I != E; ++I) {
235  BasicBlock *P = *I;
236  if (P != NewBB)
237  OtherPreds.push_back(P);
238  }
239  }
240 
241  bool NewBBDominatesDestBB = true;
242 
243  // Should we update DominatorTree information?
244  if (DT) {
245  DomTreeNode *TINode = DT->getNode(TIBB);
246 
247  // The new block is not the immediate dominator for any other nodes, but
248  // TINode is the immediate dominator for the new node.
249  //
250  if (TINode) { // Don't break unreachable code!
251  DomTreeNode *NewBBNode = DT->addNewBlock(NewBB, TIBB);
252  DomTreeNode *DestBBNode = 0;
253 
254  // If NewBBDominatesDestBB hasn't been computed yet, do so with DT.
255  if (!OtherPreds.empty()) {
256  DestBBNode = DT->getNode(DestBB);
257  while (!OtherPreds.empty() && NewBBDominatesDestBB) {
258  if (DomTreeNode *OPNode = DT->getNode(OtherPreds.back()))
259  NewBBDominatesDestBB = DT->dominates(DestBBNode, OPNode);
260  OtherPreds.pop_back();
261  }
262  OtherPreds.clear();
263  }
264 
265  // If NewBBDominatesDestBB, then NewBB dominates DestBB, otherwise it
266  // doesn't dominate anything.
267  if (NewBBDominatesDestBB) {
268  if (!DestBBNode) DestBBNode = DT->getNode(DestBB);
269  DT->changeImmediateDominator(DestBBNode, NewBBNode);
270  }
271  }
272  }
273 
274  // Update LoopInfo if it is around.
275  if (LI) {
276  if (Loop *TIL = LI->getLoopFor(TIBB)) {
277  // If one or the other blocks were not in a loop, the new block is not
278  // either, and thus LI doesn't need to be updated.
279  if (Loop *DestLoop = LI->getLoopFor(DestBB)) {
280  if (TIL == DestLoop) {
281  // Both in the same loop, the NewBB joins loop.
282  DestLoop->addBasicBlockToLoop(NewBB, LI->getBase());
283  } else if (TIL->contains(DestLoop)) {
284  // Edge from an outer loop to an inner loop. Add to the outer loop.
285  TIL->addBasicBlockToLoop(NewBB, LI->getBase());
286  } else if (DestLoop->contains(TIL)) {
287  // Edge from an inner loop to an outer loop. Add to the outer loop.
288  DestLoop->addBasicBlockToLoop(NewBB, LI->getBase());
289  } else {
290  // Edge from two loops with no containment relation. Because these
291  // are natural loops, we know that the destination block must be the
292  // header of its loop (adding a branch into a loop elsewhere would
293  // create an irreducible loop).
294  assert(DestLoop->getHeader() == DestBB &&
295  "Should not create irreducible loops!");
296  if (Loop *P = DestLoop->getParentLoop())
297  P->addBasicBlockToLoop(NewBB, LI->getBase());
298  }
299  }
300  // If TIBB is in a loop and DestBB is outside of that loop, split the
301  // other exit blocks of the loop that also have predecessors outside
302  // the loop, to maintain a LoopSimplify guarantee.
303  if (!TIL->contains(DestBB) &&
305  assert(!TIL->contains(NewBB) &&
306  "Split point for loop exit is contained in loop!");
307 
308  // Update LCSSA form in the newly created exit block.
310  createPHIsForSplitLoopExit(TIBB, NewBB, DestBB);
311 
312  // For each unique exit block...
313  // FIXME: This code is functionally equivalent to the corresponding
314  // loop in LoopSimplify.
315  SmallVector<BasicBlock *, 4> ExitBlocks;
316  TIL->getExitBlocks(ExitBlocks);
317  for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) {
318  // Collect all the preds that are inside the loop, and note
319  // whether there are any preds outside the loop.
321  bool HasPredOutsideOfLoop = false;
322  BasicBlock *Exit = ExitBlocks[i];
323  for (pred_iterator I = pred_begin(Exit), E = pred_end(Exit);
324  I != E; ++I) {
325  BasicBlock *P = *I;
326  if (TIL->contains(P)) {
327  if (isa<IndirectBrInst>(P->getTerminator())) {
328  Preds.clear();
329  break;
330  }
331  Preds.push_back(P);
332  } else {
333  HasPredOutsideOfLoop = true;
334  }
335  }
336  // If there are any preds not in the loop, we'll need to split
337  // the edges. The Preds.empty() check is needed because a block
338  // may appear multiple times in the list. We can't use
339  // getUniqueExitBlocks above because that depends on LoopSimplify
340  // form, which we're in the process of restoring!
341  if (!Preds.empty() && HasPredOutsideOfLoop) {
342  if (!Exit->isLandingPad()) {
343  BasicBlock *NewExitBB =
344  SplitBlockPredecessors(Exit, Preds, "split", P);
346  createPHIsForSplitLoopExit(Preds, NewExitBB, Exit);
347  } else if (SplitLandingPads) {
349  SplitLandingPadPredecessors(Exit, Preds,
350  ".split1", ".split2",
351  P, NewBBs);
353  createPHIsForSplitLoopExit(Preds, NewBBs[0], Exit);
354  }
355  }
356  }
357  }
358  // LCSSA form was updated above for the case where LoopSimplify is
359  // available, which means that all predecessors of loop exit blocks
360  // are within the loop. Without LoopSimplify form, it would be
361  // necessary to insert a new phi.
362  assert((!P->mustPreserveAnalysisID(LCSSAID) ||
364  "SplitCriticalEdge doesn't know how to update LCCSA form "
365  "without LoopSimplify!");
366  }
367  }
368 
369  return NewBB;
370 }
DomTreeNode * getNode(BasicBlock *BB) const
Definition: Dominators.h:844
AnalysisUsage & addPreserved()
void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs=false)
Notify the BasicBlock that the predecessor Pred is no longer able to reach it.
Definition: BasicBlock.cpp:216
void addIncoming(Value *V, BasicBlock *BB)
static PassRegistry * getPassRegistry()
iterator end()
Definition: Function.h:397
BasicBlock * SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P=0, bool MergeIdenticalEdges=false, bool DontDeleteUselessPHIs=false, bool SplitLandingPads=false)
enable_if_c<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:266
const Function * getParent() const
Return the enclosing method, or null if none.
Definition: BasicBlock.h:116
F(f)
void initializeBreakCriticalEdgesPass(PassRegistry &)
LoopInfoBase< BlockT, LoopT > * LI
Definition: LoopInfoImpl.h:411
StringRef getName() const
Definition: Value.cpp:167
iterator begin()
Definition: BasicBlock.h:193
AnalysisType * getAnalysisIfAvailable() const
void changeImmediateDominator(BasicBlock *N, BasicBlock *NewIDom)
Definition: Dominators.h:858
Instruction * getFirstNonPHI()
Returns a pointer to the first instruction in this block that is not a PHINode instruction.
Definition: BasicBlock.cpp:130
static BranchInst * Create(BasicBlock *IfTrue, Instruction *InsertBefore=0)
bool mustPreserveAnalysisID(char &AID) const
Definition: Pass.cpp:45
ID
LLVM Calling Convention Representation.
Definition: CallingConv.h:26
BasicBlock * SplitBlockPredecessors(BasicBlock *BB, ArrayRef< BasicBlock * > Preds, const char *Suffix, Pass *P=0)
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
Definition: SmallVector.h:56
AnalysisUsage & addPreservedID(const void *ID)
void setSuccessor(unsigned idx, BasicBlock *B)
Definition: InstrTypes.h:71
iterator begin()
Definition: Function.h:395
size_t size() const
size - Get the array size.
Definition: ArrayRef.h:109
unsigned getNumSuccessors() const
Definition: InstrTypes.h:59
#define P(N)
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
BasicBlock * getSuccessor(unsigned idx) const
Definition: InstrTypes.h:65
char & BreakCriticalEdgesID
STATISTIC(NumBroken,"Number of blocks inserted")
FunctionPass * createBreakCriticalEdgesPass()
char & LCSSAID
Definition: LCSSA.cpp:94
Interval::pred_iterator pred_begin(Interval *I)
Definition: Interval.h:117
const DebugLoc & getDebugLoc() const
getDebugLoc - Return the debug location for this node as a DebugLoc.
Definition: Instruction.h:178
static PHINode * Create(Type *Ty, unsigned NumReservedValues, const Twine &NameStr="", Instruction *InsertBefore=0)
BasicBlock * getIncomingBlock(unsigned i) const
iterator insert(iterator where, NodeTy *New)
Definition: ilist.h:412
Interval::pred_iterator pred_end(Interval *I)
Definition: Interval.h:120
bool dominates(const DomTreeNode *A, const DomTreeNode *B) const
Definition: Dominators.h:801
LLVMContext & getContext() const
All values hold a context through their type.
Definition: Value.cpp:517
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:153
char & LoopSimplifyID
const BasicBlockListType & getBasicBlockList() const
Definition: Function.h:374
void setIncomingBlock(unsigned i, BasicBlock *BB)
Value * getIncomingValue(unsigned i) const
Type * getType() const
Definition: Value.h:111
#define I(x, y, z)
Definition: MD5.cpp:54
TerminatorInst * getTerminator()
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition: BasicBlock.cpp:120
bool isLandingPad() const
Return true if this basic block is a landing pad.
Definition: BasicBlock.cpp:360
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=0, BasicBlock *InsertBefore=0)
Creates a new BasicBlock.
Definition: BasicBlock.h:109
DomTreeNode * addNewBlock(BasicBlock *BB, BasicBlock *DomBB)
Definition: Dominators.h:851
LLVM Value Representation.
Definition: Value.h:66
void SplitLandingPadPredecessors(BasicBlock *OrigBB, ArrayRef< BasicBlock * > Preds, const char *Suffix, const char *Suffix2, Pass *P, SmallVectorImpl< BasicBlock * > &NewBBs)
static void createPHIsForSplitLoopExit(ArrayRef< BasicBlock * > Preds, BasicBlock *SplitBB, BasicBlock *DestBB)
void setIncomingValue(unsigned i, Value *V)
int getBasicBlockIndex(const BasicBlock *BB) const
const BasicBlock * getParent() const
Definition: Instruction.h:52
bool isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum, bool AllowIdenticalEdges=false)
Definition: CFG.cpp:88