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 // forward dominator (set, immediate dominators, tree, and frontier) 15 // information. 16 // 17 //===----------------------------------------------------------------------===// 18 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/Function.h" 25 #include "llvm/Instructions.h" 26 #include "llvm/Type.h" 27 #include "llvm/Support/CFG.h" 28 #include "llvm/Support/Compiler.h" 29 #include "llvm/Support/ErrorHandling.h" 30 #include "llvm/ADT/SmallVector.h" 31 #include "llvm/ADT/Statistic.h" 32 using namespace llvm; 33 34 STATISTIC(NumBroken, "Number of blocks inserted"); 35 36 namespace { 37 struct VISIBILITY_HIDDEN BreakCriticalEdges : public FunctionPass { 38 static char ID; // Pass identification, replacement for typeid 39 BreakCriticalEdges() : FunctionPass(&ID) {} 40 41 virtual bool runOnFunction(Function &F); 42 43 virtual void getAnalysisUsage(AnalysisUsage &AU) const { 44 AU.addPreserved<DominatorTree>(); 45 AU.addPreserved<DominanceFrontier>(); 46 AU.addPreserved<LoopInfo>(); 47 48 // No loop canonicalization guarantees are broken by this pass. 49 AU.addPreservedID(LoopSimplifyID); 50 } 51 }; 52 } 53 54 char BreakCriticalEdges::ID = 0; 55 static RegisterPass<BreakCriticalEdges> 56 X("break-crit-edges", "Break critical edges in CFG"); 57 58 // Publically exposed interface to pass... 59 const PassInfo *const llvm::BreakCriticalEdgesID = &X; 60 FunctionPass *llvm::createBreakCriticalEdgesPass() { 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) 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 // isCriticalEdge - Return true if the specified edge is a critical edge. 87 // Critical edges are edges from a block with multiple successors to a block 88 // with multiple predecessors. 89 // 90 bool llvm::isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum, 91 bool AllowIdenticalEdges) { 92 assert(SuccNum < TI->getNumSuccessors() && "Illegal edge specification!"); 93 if (TI->getNumSuccessors() == 1) return false; 94 95 const BasicBlock *Dest = TI->getSuccessor(SuccNum); 96 pred_const_iterator I = pred_begin(Dest), E = pred_end(Dest); 97 98 // If there is more than one predecessor, this is a critical edge... 99 assert(I != E && "No preds, but we have an edge to the block?"); 100 const BasicBlock *FirstPred = *I; 101 ++I; // Skip one edge due to the incoming arc from TI. 102 if (!AllowIdenticalEdges) 103 return I != E; 104 105 // If AllowIdenticalEdges is true, then we allow this edge to be considered 106 // non-critical iff all preds come from TI's block. 107 while (I != E) { 108 if (*I != FirstPred) 109 return true; 110 // Note: leave this as is until no one ever compiles with either gcc 4.0.1 111 // or Xcode 2. This seems to work around the pred_iterator assert in PR 2207 112 E = pred_end(*I); 113 ++I; 114 } 115 return false; 116 } 117 118 /// SplitCriticalEdge - If this edge is a critical edge, insert a new node to 119 /// split the critical edge. This will update DominatorTree and 120 /// DominatorFrontier information if it is available, thus calling this pass 121 /// will not invalidate any of them. This returns true if the edge was split, 122 /// false otherwise. This ensures that all edges to that dest go to one block 123 /// instead of each going to a different block. 124 // 125 bool llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P, 126 bool MergeIdenticalEdges) { 127 if (!isCriticalEdge(TI, SuccNum, MergeIdenticalEdges)) return false; 128 BasicBlock *TIBB = TI->getParent(); 129 BasicBlock *DestBB = TI->getSuccessor(SuccNum); 130 131 // Create a new basic block, linking it into the CFG. 132 BasicBlock *NewBB = BasicBlock::Create(TIBB->getName() + "." + 133 DestBB->getName() + "_crit_edge"); 134 // Create our unconditional branch... 135 BranchInst::Create(DestBB, NewBB); 136 137 // Branch to the new block, breaking the edge. 138 TI->setSuccessor(SuccNum, NewBB); 139 140 // Insert the block into the function... right after the block TI lives in. 141 Function &F = *TIBB->getParent(); 142 Function::iterator FBBI = TIBB; 143 F.getBasicBlockList().insert(++FBBI, NewBB); 144 145 // If there are any PHI nodes in DestBB, we need to update them so that they 146 // merge incoming values from NewBB instead of from TIBB. 147 // 148 for (BasicBlock::iterator I = DestBB->begin(); isa<PHINode>(I); ++I) { 149 PHINode *PN = cast<PHINode>(I); 150 // We no longer enter through TIBB, now we come in through NewBB. Revector 151 // exactly one entry in the PHI node that used to come from TIBB to come 152 // from NewBB. 153 int BBIdx = PN->getBasicBlockIndex(TIBB); 154 PN->setIncomingBlock(BBIdx, NewBB); 155 } 156 157 // If there are any other edges from TIBB to DestBB, update those to go 158 // through the split block, making those edges non-critical as well (and 159 // reducing the number of phi entries in the DestBB if relevant). 160 if (MergeIdenticalEdges) { 161 for (unsigned i = SuccNum+1, e = TI->getNumSuccessors(); i != e; ++i) { 162 if (TI->getSuccessor(i) != DestBB) continue; 163 164 // Remove an entry for TIBB from DestBB phi nodes. 165 DestBB->removePredecessor(TIBB); 166 167 // We found another edge to DestBB, go to NewBB instead. 168 TI->setSuccessor(i, NewBB); 169 } 170 } 171 172 173 174 // If we don't have a pass object, we can't update anything... 175 if (P == 0) return true; 176 177 // Now update analysis information. Since the only predecessor of NewBB is 178 // the TIBB, TIBB clearly dominates NewBB. TIBB usually doesn't dominate 179 // anything, as there are other successors of DestBB. However, if all other 180 // predecessors of DestBB are already dominated by DestBB (e.g. DestBB is a 181 // loop header) then NewBB dominates DestBB. 182 SmallVector<BasicBlock*, 8> OtherPreds; 183 184 for (pred_iterator I = pred_begin(DestBB), E = pred_end(DestBB); I != E; ++I) 185 if (*I != NewBB) 186 OtherPreds.push_back(*I); 187 188 bool NewBBDominatesDestBB = true; 189 190 // Should we update DominatorTree information? 191 if (DominatorTree *DT = P->getAnalysisIfAvailable<DominatorTree>()) { 192 DomTreeNode *TINode = DT->getNode(TIBB); 193 194 // The new block is not the immediate dominator for any other nodes, but 195 // TINode is the immediate dominator for the new node. 196 // 197 if (TINode) { // Don't break unreachable code! 198 DomTreeNode *NewBBNode = DT->addNewBlock(NewBB, TIBB); 199 DomTreeNode *DestBBNode = 0; 200 201 // If NewBBDominatesDestBB hasn't been computed yet, do so with DT. 202 if (!OtherPreds.empty()) { 203 DestBBNode = DT->getNode(DestBB); 204 while (!OtherPreds.empty() && NewBBDominatesDestBB) { 205 if (DomTreeNode *OPNode = DT->getNode(OtherPreds.back())) 206 NewBBDominatesDestBB = DT->dominates(DestBBNode, OPNode); 207 OtherPreds.pop_back(); 208 } 209 OtherPreds.clear(); 210 } 211 212 // If NewBBDominatesDestBB, then NewBB dominates DestBB, otherwise it 213 // doesn't dominate anything. 214 if (NewBBDominatesDestBB) { 215 if (!DestBBNode) DestBBNode = DT->getNode(DestBB); 216 DT->changeImmediateDominator(DestBBNode, NewBBNode); 217 } 218 } 219 } 220 221 // Should we update DominanceFrontier information? 222 if (DominanceFrontier *DF = P->getAnalysisIfAvailable<DominanceFrontier>()) { 223 // If NewBBDominatesDestBB hasn't been computed yet, do so with DF. 224 if (!OtherPreds.empty()) { 225 // FIXME: IMPLEMENT THIS! 226 llvm_unreachable("Requiring domfrontiers but not idom/domtree/domset." 227 " not implemented yet!"); 228 } 229 230 // Since the new block is dominated by its only predecessor TIBB, 231 // it cannot be in any block's dominance frontier. If NewBB dominates 232 // DestBB, its dominance frontier is the same as DestBB's, otherwise it is 233 // just {DestBB}. 234 DominanceFrontier::DomSetType NewDFSet; 235 if (NewBBDominatesDestBB) { 236 DominanceFrontier::iterator I = DF->find(DestBB); 237 if (I != DF->end()) { 238 DF->addBasicBlock(NewBB, I->second); 239 240 if (I->second.count(DestBB)) { 241 // However NewBB's frontier does not include DestBB. 242 DominanceFrontier::iterator NF = DF->find(NewBB); 243 DF->removeFromFrontier(NF, DestBB); 244 } 245 } 246 else 247 DF->addBasicBlock(NewBB, DominanceFrontier::DomSetType()); 248 } else { 249 DominanceFrontier::DomSetType NewDFSet; 250 NewDFSet.insert(DestBB); 251 DF->addBasicBlock(NewBB, NewDFSet); 252 } 253 } 254 255 // Update LoopInfo if it is around. 256 if (LoopInfo *LI = P->getAnalysisIfAvailable<LoopInfo>()) { 257 // If one or the other blocks were not in a loop, the new block is not 258 // either, and thus LI doesn't need to be updated. 259 if (Loop *TIL = LI->getLoopFor(TIBB)) 260 if (Loop *DestLoop = LI->getLoopFor(DestBB)) { 261 if (TIL == DestLoop) { 262 // Both in the same loop, the NewBB joins loop. 263 DestLoop->addBasicBlockToLoop(NewBB, LI->getBase()); 264 } else if (TIL->contains(DestLoop->getHeader())) { 265 // Edge from an outer loop to an inner loop. Add to the outer loop. 266 TIL->addBasicBlockToLoop(NewBB, LI->getBase()); 267 } else if (DestLoop->contains(TIL->getHeader())) { 268 // Edge from an inner loop to an outer loop. Add to the outer loop. 269 DestLoop->addBasicBlockToLoop(NewBB, LI->getBase()); 270 } else { 271 // Edge from two loops with no containment relation. Because these 272 // are natural loops, we know that the destination block must be the 273 // header of its loop (adding a branch into a loop elsewhere would 274 // create an irreducible loop). 275 assert(DestLoop->getHeader() == DestBB && 276 "Should not create irreducible loops!"); 277 if (Loop *P = DestLoop->getParentLoop()) 278 P->addBasicBlockToLoop(NewBB, LI->getBase()); 279 } 280 } 281 } 282 return true; 283 } 284