1
//===- BreakCriticalEdges.cpp - Critical Edge Elimination Pass ------------===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
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
// forward dominator (set, immediate dominators, tree, and frontier)
17
//===----------------------------------------------------------------------===//
19
#define DEBUG_TYPE "break-crit-edges"
20
#include "llvm/Transforms/Scalar.h"
21
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
22
#include "llvm/Analysis/Dominators.h"
23
#include "llvm/Analysis/LoopInfo.h"
24
#include "llvm/Analysis/ProfileInfo.h"
25
#include "llvm/Function.h"
26
#include "llvm/Instructions.h"
27
#include "llvm/Type.h"
28
#include "llvm/Support/CFG.h"
29
#include "llvm/Support/ErrorHandling.h"
30
#include "llvm/ADT/SmallVector.h"
31
#include "llvm/ADT/Statistic.h"
34
STATISTIC(NumBroken, "Number of blocks inserted");
37
struct BreakCriticalEdges : public FunctionPass {
38
static char ID; // Pass identification, replacement for typeid
39
BreakCriticalEdges() : FunctionPass(&ID) {}
41
virtual bool runOnFunction(Function &F);
43
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
44
AU.addPreserved<DominatorTree>();
45
AU.addPreserved<DominanceFrontier>();
46
AU.addPreserved<LoopInfo>();
47
AU.addPreserved<ProfileInfo>();
49
// No loop canonicalization guarantees are broken by this pass.
50
AU.addPreservedID(LoopSimplifyID);
55
char BreakCriticalEdges::ID = 0;
56
static RegisterPass<BreakCriticalEdges>
57
X("break-crit-edges", "Break critical edges in CFG");
59
// Publically exposed interface to pass...
60
const PassInfo *const llvm::BreakCriticalEdgesID = &X;
61
FunctionPass *llvm::createBreakCriticalEdgesPass() {
62
return new BreakCriticalEdges();
65
// runOnFunction - Loop over all of the edges in the CFG, breaking critical
66
// edges as they are found.
68
bool BreakCriticalEdges::runOnFunction(Function &F) {
70
for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) {
71
TerminatorInst *TI = I->getTerminator();
72
if (TI->getNumSuccessors() > 1 && !isa<IndirectBrInst>(TI))
73
for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i)
74
if (SplitCriticalEdge(TI, i, this)) {
83
//===----------------------------------------------------------------------===//
84
// Implementation of the external critical edge manipulation functions
85
//===----------------------------------------------------------------------===//
87
// isCriticalEdge - Return true if the specified edge is a critical edge.
88
// Critical edges are edges from a block with multiple successors to a block
89
// with multiple predecessors.
91
bool llvm::isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum,
92
bool AllowIdenticalEdges) {
93
assert(SuccNum < TI->getNumSuccessors() && "Illegal edge specification!");
94
if (TI->getNumSuccessors() == 1) return false;
96
const BasicBlock *Dest = TI->getSuccessor(SuccNum);
97
pred_const_iterator I = pred_begin(Dest), E = pred_end(Dest);
99
// If there is more than one predecessor, this is a critical edge...
100
assert(I != E && "No preds, but we have an edge to the block?");
101
const BasicBlock *FirstPred = *I;
102
++I; // Skip one edge due to the incoming arc from TI.
103
if (!AllowIdenticalEdges)
106
// If AllowIdenticalEdges is true, then we allow this edge to be considered
107
// non-critical iff all preds come from TI's block.
111
// Note: leave this as is until no one ever compiles with either gcc 4.0.1
112
// or Xcode 2. This seems to work around the pred_iterator assert in PR 2207
119
/// CreatePHIsForSplitLoopExit - When a loop exit edge is split, LCSSA form
120
/// may require new PHIs in the new exit block. This function inserts the
121
/// new PHIs, as needed. Preds is a list of preds inside the loop, SplitBB
122
/// is the new loop exit block, and DestBB is the old loop exit, now the
123
/// successor of SplitBB.
124
static void CreatePHIsForSplitLoopExit(SmallVectorImpl<BasicBlock *> &Preds,
126
BasicBlock *DestBB) {
127
// SplitBB shouldn't have anything non-trivial in it yet.
128
assert(SplitBB->getFirstNonPHI() == SplitBB->getTerminator() &&
129
"SplitBB has non-PHI nodes!");
131
// For each PHI in the destination block...
132
for (BasicBlock::iterator I = DestBB->begin();
133
PHINode *PN = dyn_cast<PHINode>(I); ++I) {
134
unsigned Idx = PN->getBasicBlockIndex(SplitBB);
135
Value *V = PN->getIncomingValue(Idx);
136
// If the input is a PHI which already satisfies LCSSA, don't create
138
if (const PHINode *VP = dyn_cast<PHINode>(V))
139
if (VP->getParent() == SplitBB)
141
// Otherwise a new PHI is needed. Create one and populate it.
142
PHINode *NewPN = PHINode::Create(PN->getType(), "split",
143
SplitBB->getTerminator());
144
for (unsigned i = 0, e = Preds.size(); i != e; ++i)
145
NewPN->addIncoming(V, Preds[i]);
146
// Update the original PHI.
147
PN->setIncomingValue(Idx, NewPN);
151
/// SplitCriticalEdge - If this edge is a critical edge, insert a new node to
152
/// split the critical edge. This will update DominatorTree and
153
/// DominatorFrontier information if it is available, thus calling this pass
154
/// will not invalidate either of them. This returns the new block if the edge
155
/// was split, null otherwise.
157
/// If MergeIdenticalEdges is true (not the default), *all* edges from TI to the
158
/// specified successor will be merged into the same critical edge block.
159
/// This is most commonly interesting with switch instructions, which may
160
/// have many edges to any one destination. This ensures that all edges to that
161
/// dest go to one block instead of each going to a different block, but isn't
162
/// the standard definition of a "critical edge".
164
/// It is invalid to call this function on a critical edge that starts at an
165
/// IndirectBrInst. Splitting these edges will almost always create an invalid
166
/// program because the address of the new block won't be the one that is jumped
169
BasicBlock *llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum,
170
Pass *P, bool MergeIdenticalEdges) {
171
if (!isCriticalEdge(TI, SuccNum, MergeIdenticalEdges)) return 0;
173
assert(!isa<IndirectBrInst>(TI) &&
174
"Cannot split critical edge from IndirectBrInst");
176
BasicBlock *TIBB = TI->getParent();
177
BasicBlock *DestBB = TI->getSuccessor(SuccNum);
179
// Create a new basic block, linking it into the CFG.
180
BasicBlock *NewBB = BasicBlock::Create(TI->getContext(),
181
TIBB->getName() + "." + DestBB->getName() + "_crit_edge");
182
// Create our unconditional branch.
183
BranchInst::Create(DestBB, NewBB);
185
// Branch to the new block, breaking the edge.
186
TI->setSuccessor(SuccNum, NewBB);
188
// Insert the block into the function... right after the block TI lives in.
189
Function &F = *TIBB->getParent();
190
Function::iterator FBBI = TIBB;
191
F.getBasicBlockList().insert(++FBBI, NewBB);
193
// If there are any PHI nodes in DestBB, we need to update them so that they
194
// merge incoming values from NewBB instead of from TIBB.
195
if (PHINode *APHI = dyn_cast<PHINode>(DestBB->begin())) {
196
// This conceptually does:
197
// foreach (PHINode *PN in DestBB)
198
// PN->setIncomingBlock(PN->getIncomingBlock(TIBB), NewBB);
199
// but is optimized for two cases.
201
if (APHI->getNumIncomingValues() <= 8) { // Small # preds case.
203
for (BasicBlock::iterator I = DestBB->begin(); isa<PHINode>(I); ++I) {
204
// We no longer enter through TIBB, now we come in through NewBB.
205
// Revector exactly one entry in the PHI node that used to come from
206
// TIBB to come from NewBB.
207
PHINode *PN = cast<PHINode>(I);
209
// Reuse the previous value of BBIdx if it lines up. In cases where we
210
// have multiple phi nodes with *lots* of predecessors, this is a speed
211
// win because we don't have to scan the PHI looking for TIBB. This
212
// happens because the BB list of PHI nodes are usually in the same
214
if (PN->getIncomingBlock(BBIdx) != TIBB)
215
BBIdx = PN->getBasicBlockIndex(TIBB);
216
PN->setIncomingBlock(BBIdx, NewBB);
219
// However, the foreach loop is slow for blocks with lots of predecessors
220
// because PHINode::getIncomingBlock is O(n) in # preds. Instead, walk
221
// the user list of TIBB to find the PHI nodes.
222
SmallPtrSet<PHINode*, 16> UpdatedPHIs;
224
for (Value::use_iterator UI = TIBB->use_begin(), E = TIBB->use_end();
226
Value::use_iterator Use = UI++;
227
if (PHINode *PN = dyn_cast<PHINode>(Use)) {
228
// Remove one entry from each PHI.
229
if (PN->getParent() == DestBB && UpdatedPHIs.insert(PN))
230
PN->setOperand(Use.getOperandNo(), NewBB);
236
// If there are any other edges from TIBB to DestBB, update those to go
237
// through the split block, making those edges non-critical as well (and
238
// reducing the number of phi entries in the DestBB if relevant).
239
if (MergeIdenticalEdges) {
240
for (unsigned i = SuccNum+1, e = TI->getNumSuccessors(); i != e; ++i) {
241
if (TI->getSuccessor(i) != DestBB) continue;
243
// Remove an entry for TIBB from DestBB phi nodes.
244
DestBB->removePredecessor(TIBB);
246
// We found another edge to DestBB, go to NewBB instead.
247
TI->setSuccessor(i, NewBB);
253
// If we don't have a pass object, we can't update anything...
254
if (P == 0) return NewBB;
256
DominatorTree *DT = P->getAnalysisIfAvailable<DominatorTree>();
257
DominanceFrontier *DF = P->getAnalysisIfAvailable<DominanceFrontier>();
258
LoopInfo *LI = P->getAnalysisIfAvailable<LoopInfo>();
259
ProfileInfo *PI = P->getAnalysisIfAvailable<ProfileInfo>();
261
// If we have nothing to update, just return.
262
if (DT == 0 && DF == 0 && LI == 0 && PI == 0)
265
// Now update analysis information. Since the only predecessor of NewBB is
266
// the TIBB, TIBB clearly dominates NewBB. TIBB usually doesn't dominate
267
// anything, as there are other successors of DestBB. However, if all other
268
// predecessors of DestBB are already dominated by DestBB (e.g. DestBB is a
269
// loop header) then NewBB dominates DestBB.
270
SmallVector<BasicBlock*, 8> OtherPreds;
272
// If there is a PHI in the block, loop over predecessors with it, which is
273
// faster than iterating pred_begin/end.
274
if (PHINode *PN = dyn_cast<PHINode>(DestBB->begin())) {
275
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
276
if (PN->getIncomingBlock(i) != NewBB)
277
OtherPreds.push_back(PN->getIncomingBlock(i));
279
for (pred_iterator I = pred_begin(DestBB), E = pred_end(DestBB);
282
OtherPreds.push_back(*I);
285
bool NewBBDominatesDestBB = true;
287
// Should we update DominatorTree information?
289
DomTreeNode *TINode = DT->getNode(TIBB);
291
// The new block is not the immediate dominator for any other nodes, but
292
// TINode is the immediate dominator for the new node.
294
if (TINode) { // Don't break unreachable code!
295
DomTreeNode *NewBBNode = DT->addNewBlock(NewBB, TIBB);
296
DomTreeNode *DestBBNode = 0;
298
// If NewBBDominatesDestBB hasn't been computed yet, do so with DT.
299
if (!OtherPreds.empty()) {
300
DestBBNode = DT->getNode(DestBB);
301
while (!OtherPreds.empty() && NewBBDominatesDestBB) {
302
if (DomTreeNode *OPNode = DT->getNode(OtherPreds.back()))
303
NewBBDominatesDestBB = DT->dominates(DestBBNode, OPNode);
304
OtherPreds.pop_back();
309
// If NewBBDominatesDestBB, then NewBB dominates DestBB, otherwise it
310
// doesn't dominate anything.
311
if (NewBBDominatesDestBB) {
312
if (!DestBBNode) DestBBNode = DT->getNode(DestBB);
313
DT->changeImmediateDominator(DestBBNode, NewBBNode);
318
// Should we update DominanceFrontier information?
320
// If NewBBDominatesDestBB hasn't been computed yet, do so with DF.
321
if (!OtherPreds.empty()) {
322
// FIXME: IMPLEMENT THIS!
323
llvm_unreachable("Requiring domfrontiers but not idom/domtree/domset."
324
" not implemented yet!");
327
// Since the new block is dominated by its only predecessor TIBB,
328
// it cannot be in any block's dominance frontier. If NewBB dominates
329
// DestBB, its dominance frontier is the same as DestBB's, otherwise it is
331
DominanceFrontier::DomSetType NewDFSet;
332
if (NewBBDominatesDestBB) {
333
DominanceFrontier::iterator I = DF->find(DestBB);
334
if (I != DF->end()) {
335
DF->addBasicBlock(NewBB, I->second);
337
if (I->second.count(DestBB)) {
338
// However NewBB's frontier does not include DestBB.
339
DominanceFrontier::iterator NF = DF->find(NewBB);
340
DF->removeFromFrontier(NF, DestBB);
344
DF->addBasicBlock(NewBB, DominanceFrontier::DomSetType());
346
DominanceFrontier::DomSetType NewDFSet;
347
NewDFSet.insert(DestBB);
348
DF->addBasicBlock(NewBB, NewDFSet);
352
// Update LoopInfo if it is around.
354
if (Loop *TIL = LI->getLoopFor(TIBB)) {
355
// If one or the other blocks were not in a loop, the new block is not
356
// either, and thus LI doesn't need to be updated.
357
if (Loop *DestLoop = LI->getLoopFor(DestBB)) {
358
if (TIL == DestLoop) {
359
// Both in the same loop, the NewBB joins loop.
360
DestLoop->addBasicBlockToLoop(NewBB, LI->getBase());
361
} else if (TIL->contains(DestLoop)) {
362
// Edge from an outer loop to an inner loop. Add to the outer loop.
363
TIL->addBasicBlockToLoop(NewBB, LI->getBase());
364
} else if (DestLoop->contains(TIL)) {
365
// Edge from an inner loop to an outer loop. Add to the outer loop.
366
DestLoop->addBasicBlockToLoop(NewBB, LI->getBase());
368
// Edge from two loops with no containment relation. Because these
369
// are natural loops, we know that the destination block must be the
370
// header of its loop (adding a branch into a loop elsewhere would
371
// create an irreducible loop).
372
assert(DestLoop->getHeader() == DestBB &&
373
"Should not create irreducible loops!");
374
if (Loop *P = DestLoop->getParentLoop())
375
P->addBasicBlockToLoop(NewBB, LI->getBase());
378
// If TIBB is in a loop and DestBB is outside of that loop, split the
379
// other exit blocks of the loop that also have predecessors outside
380
// the loop, to maintain a LoopSimplify guarantee.
381
if (!TIL->contains(DestBB) &&
382
P->mustPreserveAnalysisID(LoopSimplifyID)) {
383
assert(!TIL->contains(NewBB) &&
384
"Split point for loop exit is contained in loop!");
386
// Update LCSSA form in the newly created exit block.
387
if (P->mustPreserveAnalysisID(LCSSAID)) {
388
SmallVector<BasicBlock *, 1> OrigPred;
389
OrigPred.push_back(TIBB);
390
CreatePHIsForSplitLoopExit(OrigPred, NewBB, DestBB);
393
// For each unique exit block...
394
SmallVector<BasicBlock *, 4> ExitBlocks;
395
TIL->getExitBlocks(ExitBlocks);
396
for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) {
397
// Collect all the preds that are inside the loop, and note
398
// whether there are any preds outside the loop.
399
SmallVector<BasicBlock *, 4> Preds;
400
bool HasPredOutsideOfLoop = false;
401
BasicBlock *Exit = ExitBlocks[i];
402
for (pred_iterator I = pred_begin(Exit), E = pred_end(Exit);
404
if (TIL->contains(*I))
407
HasPredOutsideOfLoop = true;
408
// If there are any preds not in the loop, we'll need to split
409
// the edges. The Preds.empty() check is needed because a block
410
// may appear multiple times in the list. We can't use
411
// getUniqueExitBlocks above because that depends on LoopSimplify
412
// form, which we're in the process of restoring!
413
if (!Preds.empty() && HasPredOutsideOfLoop) {
414
BasicBlock *NewExitBB =
415
SplitBlockPredecessors(Exit, Preds.data(), Preds.size(),
417
if (P->mustPreserveAnalysisID(LCSSAID))
418
CreatePHIsForSplitLoopExit(Preds, NewExitBB, Exit);
422
// LCSSA form was updated above for the case where LoopSimplify is
423
// available, which means that all predecessors of loop exit blocks
424
// are within the loop. Without LoopSimplify form, it would be
425
// necessary to insert a new phi.
426
assert((!P->mustPreserveAnalysisID(LCSSAID) ||
427
P->mustPreserveAnalysisID(LoopSimplifyID)) &&
428
"SplitCriticalEdge doesn't know how to update LCCSA form "
429
"without LoopSimplify!");
433
// Update ProfileInfo if it is around.
435
PI->splitEdge(TIBB, DestBB, NewBB, MergeIdenticalEdges);