1 //===- SimplifyCFG.cpp - Code to perform CFG simplification ---------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file was developed by the LLVM research group and is distributed under 6 // the University of Illinois Open Source License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Peephole optimize the CFG. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/Transforms/Utils/Local.h" 15 #include "llvm/Constants.h" 16 #include "llvm/Instructions.h" 17 #include "llvm/Type.h" 18 #include "llvm/Support/CFG.h" 19 #include <algorithm> 20 #include <functional> 21 #include <set> 22 using namespace llvm; 23 24 // PropagatePredecessorsForPHIs - This gets "Succ" ready to have the 25 // predecessors from "BB". This is a little tricky because "Succ" has PHI 26 // nodes, which need to have extra slots added to them to hold the merge edges 27 // from BB's predecessors, and BB itself might have had PHI nodes in it. This 28 // function returns true (failure) if the Succ BB already has a predecessor that 29 // is a predecessor of BB and incoming PHI arguments would not be discernible. 30 // 31 // Assumption: Succ is the single successor for BB. 32 // 33 static bool PropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) { 34 assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!"); 35 36 if (!isa<PHINode>(Succ->front())) 37 return false; // We can make the transformation, no problem. 38 39 // If there is more than one predecessor, and there are PHI nodes in 40 // the successor, then we need to add incoming edges for the PHI nodes 41 // 42 const std::vector<BasicBlock*> BBPreds(pred_begin(BB), pred_end(BB)); 43 44 // Check to see if one of the predecessors of BB is already a predecessor of 45 // Succ. If so, we cannot do the transformation if there are any PHI nodes 46 // with incompatible values coming in from the two edges! 47 // 48 for (pred_iterator PI = pred_begin(Succ), PE = pred_end(Succ); PI != PE; ++PI) 49 if (find(BBPreds.begin(), BBPreds.end(), *PI) != BBPreds.end()) { 50 // Loop over all of the PHI nodes checking to see if there are 51 // incompatible values coming in. 52 for (BasicBlock::iterator I = Succ->begin(); 53 PHINode *PN = dyn_cast<PHINode>(I); ++I) { 54 // Loop up the entries in the PHI node for BB and for *PI if the values 55 // coming in are non-equal, we cannot merge these two blocks (instead we 56 // should insert a conditional move or something, then merge the 57 // blocks). 58 int Idx1 = PN->getBasicBlockIndex(BB); 59 int Idx2 = PN->getBasicBlockIndex(*PI); 60 assert(Idx1 != -1 && Idx2 != -1 && 61 "Didn't have entries for my predecessors??"); 62 if (PN->getIncomingValue(Idx1) != PN->getIncomingValue(Idx2)) 63 return true; // Values are not equal... 64 } 65 } 66 67 // Loop over all of the PHI nodes in the successor BB 68 for (BasicBlock::iterator I = Succ->begin(); 69 PHINode *PN = dyn_cast<PHINode>(I); ++I) { 70 Value *OldVal = PN->removeIncomingValue(BB, false); 71 assert(OldVal && "No entry in PHI for Pred BB!"); 72 73 // If this incoming value is one of the PHI nodes in BB... 74 if (isa<PHINode>(OldVal) && cast<PHINode>(OldVal)->getParent() == BB) { 75 PHINode *OldValPN = cast<PHINode>(OldVal); 76 for (std::vector<BasicBlock*>::const_iterator PredI = BBPreds.begin(), 77 End = BBPreds.end(); PredI != End; ++PredI) { 78 PN->addIncoming(OldValPN->getIncomingValueForBlock(*PredI), *PredI); 79 } 80 } else { 81 for (std::vector<BasicBlock*>::const_iterator PredI = BBPreds.begin(), 82 End = BBPreds.end(); PredI != End; ++PredI) { 83 // Add an incoming value for each of the new incoming values... 84 PN->addIncoming(OldVal, *PredI); 85 } 86 } 87 } 88 return false; 89 } 90 91 /// GetIfCondition - Given a basic block (BB) with two predecessors (and 92 /// presumably PHI nodes in it), check to see if the merge at this block is due 93 /// to an "if condition". If so, return the boolean condition that determines 94 /// which entry into BB will be taken. Also, return by references the block 95 /// that will be entered from if the condition is true, and the block that will 96 /// be entered if the condition is false. 97 /// 98 /// 99 static Value *GetIfCondition(BasicBlock *BB, 100 BasicBlock *&IfTrue, BasicBlock *&IfFalse) { 101 assert(std::distance(pred_begin(BB), pred_end(BB)) == 2 && 102 "Function can only handle blocks with 2 predecessors!"); 103 BasicBlock *Pred1 = *pred_begin(BB); 104 BasicBlock *Pred2 = *++pred_begin(BB); 105 106 // We can only handle branches. Other control flow will be lowered to 107 // branches if possible anyway. 108 if (!isa<BranchInst>(Pred1->getTerminator()) || 109 !isa<BranchInst>(Pred2->getTerminator())) 110 return 0; 111 BranchInst *Pred1Br = cast<BranchInst>(Pred1->getTerminator()); 112 BranchInst *Pred2Br = cast<BranchInst>(Pred2->getTerminator()); 113 114 // Eliminate code duplication by ensuring that Pred1Br is conditional if 115 // either are. 116 if (Pred2Br->isConditional()) { 117 // If both branches are conditional, we don't have an "if statement". In 118 // reality, we could transform this case, but since the condition will be 119 // required anyway, we stand no chance of eliminating it, so the xform is 120 // probably not profitable. 121 if (Pred1Br->isConditional()) 122 return 0; 123 124 std::swap(Pred1, Pred2); 125 std::swap(Pred1Br, Pred2Br); 126 } 127 128 if (Pred1Br->isConditional()) { 129 // If we found a conditional branch predecessor, make sure that it branches 130 // to BB and Pred2Br. If it doesn't, this isn't an "if statement". 131 if (Pred1Br->getSuccessor(0) == BB && 132 Pred1Br->getSuccessor(1) == Pred2) { 133 IfTrue = Pred1; 134 IfFalse = Pred2; 135 } else if (Pred1Br->getSuccessor(0) == Pred2 && 136 Pred1Br->getSuccessor(1) == BB) { 137 IfTrue = Pred2; 138 IfFalse = Pred1; 139 } else { 140 // We know that one arm of the conditional goes to BB, so the other must 141 // go somewhere unrelated, and this must not be an "if statement". 142 return 0; 143 } 144 145 // The only thing we have to watch out for here is to make sure that Pred2 146 // doesn't have incoming edges from other blocks. If it does, the condition 147 // doesn't dominate BB. 148 if (++pred_begin(Pred2) != pred_end(Pred2)) 149 return 0; 150 151 return Pred1Br->getCondition(); 152 } 153 154 // Ok, if we got here, both predecessors end with an unconditional branch to 155 // BB. Don't panic! If both blocks only have a single (identical) 156 // predecessor, and THAT is a conditional branch, then we're all ok! 157 if (pred_begin(Pred1) == pred_end(Pred1) || 158 ++pred_begin(Pred1) != pred_end(Pred1) || 159 pred_begin(Pred2) == pred_end(Pred2) || 160 ++pred_begin(Pred2) != pred_end(Pred2) || 161 *pred_begin(Pred1) != *pred_begin(Pred2)) 162 return 0; 163 164 // Otherwise, if this is a conditional branch, then we can use it! 165 BasicBlock *CommonPred = *pred_begin(Pred1); 166 if (BranchInst *BI = dyn_cast<BranchInst>(CommonPred->getTerminator())) { 167 assert(BI->isConditional() && "Two successors but not conditional?"); 168 if (BI->getSuccessor(0) == Pred1) { 169 IfTrue = Pred1; 170 IfFalse = Pred2; 171 } else { 172 IfTrue = Pred2; 173 IfFalse = Pred1; 174 } 175 return BI->getCondition(); 176 } 177 return 0; 178 } 179 180 181 // If we have a merge point of an "if condition" as accepted above, return true 182 // if the specified value dominates the block. We don't handle the true 183 // generality of domination here, just a special case which works well enough 184 // for us. 185 static bool DominatesMergePoint(Value *V, BasicBlock *BB, bool AllowAggressive){ 186 Instruction *I = dyn_cast<Instruction>(V); 187 if (!I) return true; // Non-instructions all dominate instructions. 188 BasicBlock *PBB = I->getParent(); 189 190 // We don't want to allow wierd loops that might have the "if condition" in 191 // the bottom of this block. 192 if (PBB == BB) return false; 193 194 // If this instruction is defined in a block that contains an unconditional 195 // branch to BB, then it must be in the 'conditional' part of the "if 196 // statement". 197 if (BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator())) 198 if (BI->isUnconditional() && BI->getSuccessor(0) == BB) { 199 if (!AllowAggressive) return false; 200 // Okay, it looks like the instruction IS in the "condition". Check to 201 // see if its a cheap instruction to unconditionally compute, and if it 202 // only uses stuff defined outside of the condition. If so, hoist it out. 203 switch (I->getOpcode()) { 204 default: return false; // Cannot hoist this out safely. 205 case Instruction::Load: 206 // We can hoist loads that are non-volatile and obviously cannot trap. 207 if (cast<LoadInst>(I)->isVolatile()) 208 return false; 209 if (!isa<AllocaInst>(I->getOperand(0)) && 210 !isa<Constant>(I->getOperand(0)) && 211 !isa<GlobalValue>(I->getOperand(0))) 212 return false; 213 214 // Finally, we have to check to make sure there are no instructions 215 // before the load in its basic block, as we are going to hoist the loop 216 // out to its predecessor. 217 if (PBB->begin() != BasicBlock::iterator(I)) 218 return false; 219 break; 220 case Instruction::Add: 221 case Instruction::Sub: 222 case Instruction::And: 223 case Instruction::Or: 224 case Instruction::Xor: 225 case Instruction::Shl: 226 case Instruction::Shr: 227 break; // These are all cheap and non-trapping instructions. 228 } 229 230 // Okay, we can only really hoist these out if their operands are not 231 // defined in the conditional region. 232 for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) 233 if (!DominatesMergePoint(I->getOperand(i), BB, false)) 234 return false; 235 // Okay, it's safe to do this! 236 } 237 238 return true; 239 } 240 241 // GatherConstantSetEQs - Given a potentially 'or'd together collection of seteq 242 // instructions that compare a value against a constant, return the value being 243 // compared, and stick the constant into the Values vector. 244 static Value *GatherConstantSetEQs(Value *V, std::vector<Constant*> &Values) { 245 if (Instruction *Inst = dyn_cast<Instruction>(V)) 246 if (Inst->getOpcode() == Instruction::SetEQ) { 247 if (Constant *C = dyn_cast<Constant>(Inst->getOperand(1))) { 248 Values.push_back(C); 249 return Inst->getOperand(0); 250 } else if (Constant *C = dyn_cast<Constant>(Inst->getOperand(0))) { 251 Values.push_back(C); 252 return Inst->getOperand(1); 253 } 254 } else if (Inst->getOpcode() == Instruction::Or) { 255 if (Value *LHS = GatherConstantSetEQs(Inst->getOperand(0), Values)) 256 if (Value *RHS = GatherConstantSetEQs(Inst->getOperand(1), Values)) 257 if (LHS == RHS) 258 return LHS; 259 } 260 return 0; 261 } 262 263 // GatherConstantSetNEs - Given a potentially 'and'd together collection of 264 // setne instructions that compare a value against a constant, return the value 265 // being compared, and stick the constant into the Values vector. 266 static Value *GatherConstantSetNEs(Value *V, std::vector<Constant*> &Values) { 267 if (Instruction *Inst = dyn_cast<Instruction>(V)) 268 if (Inst->getOpcode() == Instruction::SetNE) { 269 if (Constant *C = dyn_cast<Constant>(Inst->getOperand(1))) { 270 Values.push_back(C); 271 return Inst->getOperand(0); 272 } else if (Constant *C = dyn_cast<Constant>(Inst->getOperand(0))) { 273 Values.push_back(C); 274 return Inst->getOperand(1); 275 } 276 } else if (Inst->getOpcode() == Instruction::Cast) { 277 // Cast of X to bool is really a comparison against zero. 278 assert(Inst->getType() == Type::BoolTy && "Can only handle bool values!"); 279 Values.push_back(Constant::getNullValue(Inst->getOperand(0)->getType())); 280 return Inst->getOperand(0); 281 } else if (Inst->getOpcode() == Instruction::And) { 282 if (Value *LHS = GatherConstantSetNEs(Inst->getOperand(0), Values)) 283 if (Value *RHS = GatherConstantSetNEs(Inst->getOperand(1), Values)) 284 if (LHS == RHS) 285 return LHS; 286 } 287 return 0; 288 } 289 290 291 292 /// GatherValueComparisons - If the specified Cond is an 'and' or 'or' of a 293 /// bunch of comparisons of one value against constants, return the value and 294 /// the constants being compared. 295 static bool GatherValueComparisons(Instruction *Cond, Value *&CompVal, 296 std::vector<Constant*> &Values) { 297 if (Cond->getOpcode() == Instruction::Or) { 298 CompVal = GatherConstantSetEQs(Cond, Values); 299 300 // Return true to indicate that the condition is true if the CompVal is 301 // equal to one of the constants. 302 return true; 303 } else if (Cond->getOpcode() == Instruction::And) { 304 CompVal = GatherConstantSetNEs(Cond, Values); 305 306 // Return false to indicate that the condition is false if the CompVal is 307 // equal to one of the constants. 308 return false; 309 } 310 return false; 311 } 312 313 /// ErasePossiblyDeadInstructionTree - If the specified instruction is dead and 314 /// has no side effects, nuke it. If it uses any instructions that become dead 315 /// because the instruction is now gone, nuke them too. 316 static void ErasePossiblyDeadInstructionTree(Instruction *I) { 317 if (isInstructionTriviallyDead(I)) { 318 std::vector<Value*> Operands(I->op_begin(), I->op_end()); 319 I->getParent()->getInstList().erase(I); 320 for (unsigned i = 0, e = Operands.size(); i != e; ++i) 321 if (Instruction *OpI = dyn_cast<Instruction>(Operands[i])) 322 ErasePossiblyDeadInstructionTree(OpI); 323 } 324 } 325 326 /// SafeToMergeTerminators - Return true if it is safe to merge these two 327 /// terminator instructions together. 328 /// 329 static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2) { 330 if (SI1 == SI2) return false; // Can't merge with self! 331 332 // It is not safe to merge these two switch instructions if they have a common 333 // successor, and if that successor has a PHI node, and if that PHI node has 334 // conflicting incoming values from the two switch blocks. 335 BasicBlock *SI1BB = SI1->getParent(); 336 BasicBlock *SI2BB = SI2->getParent(); 337 std::set<BasicBlock*> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB)); 338 339 for (succ_iterator I = succ_begin(SI2BB), E = succ_end(SI2BB); I != E; ++I) 340 if (SI1Succs.count(*I)) 341 for (BasicBlock::iterator BBI = (*I)->begin(); 342 PHINode *PN = dyn_cast<PHINode>(BBI); ++BBI) 343 if (PN->getIncomingValueForBlock(SI1BB) != 344 PN->getIncomingValueForBlock(SI2BB)) 345 return false; 346 347 return true; 348 } 349 350 /// AddPredecessorToBlock - Update PHI nodes in Succ to indicate that there will 351 /// now be entries in it from the 'NewPred' block. The values that will be 352 /// flowing into the PHI nodes will be the same as those coming in from 353 /// ExistPred, and existing predecessor of Succ. 354 static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred, 355 BasicBlock *ExistPred) { 356 assert(std::find(succ_begin(ExistPred), succ_end(ExistPred), Succ) != 357 succ_end(ExistPred) && "ExistPred is not a predecessor of Succ!"); 358 if (!isa<PHINode>(Succ->begin())) return; // Quick exit if nothing to do 359 360 for (BasicBlock::iterator I = Succ->begin(); 361 PHINode *PN = dyn_cast<PHINode>(I); ++I) { 362 Value *V = PN->getIncomingValueForBlock(ExistPred); 363 PN->addIncoming(V, NewPred); 364 } 365 } 366 367 // isValueEqualityComparison - Return true if the specified terminator checks to 368 // see if a value is equal to constant integer value. 369 static Value *isValueEqualityComparison(TerminatorInst *TI) { 370 if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { 371 // Do not permit merging of large switch instructions into their 372 // predecessors unless there is only one predecessor. 373 if (SI->getNumSuccessors() * std::distance(pred_begin(SI->getParent()), 374 pred_end(SI->getParent())) > 128) 375 return 0; 376 377 return SI->getCondition(); 378 } 379 if (BranchInst *BI = dyn_cast<BranchInst>(TI)) 380 if (BI->isConditional() && BI->getCondition()->hasOneUse()) 381 if (SetCondInst *SCI = dyn_cast<SetCondInst>(BI->getCondition())) 382 if ((SCI->getOpcode() == Instruction::SetEQ || 383 SCI->getOpcode() == Instruction::SetNE) && 384 isa<ConstantInt>(SCI->getOperand(1))) 385 return SCI->getOperand(0); 386 return 0; 387 } 388 389 // Given a value comparison instruction, decode all of the 'cases' that it 390 // represents and return the 'default' block. 391 static BasicBlock * 392 GetValueEqualityComparisonCases(TerminatorInst *TI, 393 std::vector<std::pair<ConstantInt*, 394 BasicBlock*> > &Cases) { 395 if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { 396 Cases.reserve(SI->getNumCases()); 397 for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i) 398 Cases.push_back(std::make_pair(cast<ConstantInt>(SI->getCaseValue(i)), 399 SI->getSuccessor(i))); 400 return SI->getDefaultDest(); 401 } 402 403 BranchInst *BI = cast<BranchInst>(TI); 404 SetCondInst *SCI = cast<SetCondInst>(BI->getCondition()); 405 Cases.push_back(std::make_pair(cast<ConstantInt>(SCI->getOperand(1)), 406 BI->getSuccessor(SCI->getOpcode() == 407 Instruction::SetNE))); 408 return BI->getSuccessor(SCI->getOpcode() == Instruction::SetEQ); 409 } 410 411 412 // FoldValueComparisonIntoPredecessors - The specified terminator is a value 413 // equality comparison instruction (either a switch or a branch on "X == c"). 414 // See if any of the predecessors of the terminator block are value comparisons 415 // on the same value. If so, and if safe to do so, fold them together. 416 static bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI) { 417 BasicBlock *BB = TI->getParent(); 418 Value *CV = isValueEqualityComparison(TI); // CondVal 419 assert(CV && "Not a comparison?"); 420 bool Changed = false; 421 422 std::vector<BasicBlock*> Preds(pred_begin(BB), pred_end(BB)); 423 while (!Preds.empty()) { 424 BasicBlock *Pred = Preds.back(); 425 Preds.pop_back(); 426 427 // See if the predecessor is a comparison with the same value. 428 TerminatorInst *PTI = Pred->getTerminator(); 429 Value *PCV = isValueEqualityComparison(PTI); // PredCondVal 430 431 if (PCV == CV && SafeToMergeTerminators(TI, PTI)) { 432 // Figure out which 'cases' to copy from SI to PSI. 433 std::vector<std::pair<ConstantInt*, BasicBlock*> > BBCases; 434 BasicBlock *BBDefault = GetValueEqualityComparisonCases(TI, BBCases); 435 436 std::vector<std::pair<ConstantInt*, BasicBlock*> > PredCases; 437 BasicBlock *PredDefault = GetValueEqualityComparisonCases(PTI, PredCases); 438 439 // Based on whether the default edge from PTI goes to BB or not, fill in 440 // PredCases and PredDefault with the new switch cases we would like to 441 // build. 442 std::vector<BasicBlock*> NewSuccessors; 443 444 if (PredDefault == BB) { 445 // If this is the default destination from PTI, only the edges in TI 446 // that don't occur in PTI, or that branch to BB will be activated. 447 std::set<ConstantInt*> PTIHandled; 448 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 449 if (PredCases[i].second != BB) 450 PTIHandled.insert(PredCases[i].first); 451 else { 452 // The default destination is BB, we don't need explicit targets. 453 std::swap(PredCases[i], PredCases.back()); 454 PredCases.pop_back(); 455 --i; --e; 456 } 457 458 // Reconstruct the new switch statement we will be building. 459 if (PredDefault != BBDefault) { 460 PredDefault->removePredecessor(Pred); 461 PredDefault = BBDefault; 462 NewSuccessors.push_back(BBDefault); 463 } 464 for (unsigned i = 0, e = BBCases.size(); i != e; ++i) 465 if (!PTIHandled.count(BBCases[i].first) && 466 BBCases[i].second != BBDefault) { 467 PredCases.push_back(BBCases[i]); 468 NewSuccessors.push_back(BBCases[i].second); 469 } 470 471 } else { 472 // If this is not the default destination from PSI, only the edges 473 // in SI that occur in PSI with a destination of BB will be 474 // activated. 475 std::set<ConstantInt*> PTIHandled; 476 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 477 if (PredCases[i].second == BB) { 478 PTIHandled.insert(PredCases[i].first); 479 std::swap(PredCases[i], PredCases.back()); 480 PredCases.pop_back(); 481 --i; --e; 482 } 483 484 // Okay, now we know which constants were sent to BB from the 485 // predecessor. Figure out where they will all go now. 486 for (unsigned i = 0, e = BBCases.size(); i != e; ++i) 487 if (PTIHandled.count(BBCases[i].first)) { 488 // If this is one we are capable of getting... 489 PredCases.push_back(BBCases[i]); 490 NewSuccessors.push_back(BBCases[i].second); 491 PTIHandled.erase(BBCases[i].first);// This constant is taken care of 492 } 493 494 // If there are any constants vectored to BB that TI doesn't handle, 495 // they must go to the default destination of TI. 496 for (std::set<ConstantInt*>::iterator I = PTIHandled.begin(), 497 E = PTIHandled.end(); I != E; ++I) { 498 PredCases.push_back(std::make_pair(*I, BBDefault)); 499 NewSuccessors.push_back(BBDefault); 500 } 501 } 502 503 // Okay, at this point, we know which new successor Pred will get. Make 504 // sure we update the number of entries in the PHI nodes for these 505 // successors. 506 for (unsigned i = 0, e = NewSuccessors.size(); i != e; ++i) 507 AddPredecessorToBlock(NewSuccessors[i], Pred, BB); 508 509 // Now that the successors are updated, create the new Switch instruction. 510 SwitchInst *NewSI = new SwitchInst(CV, PredDefault, PTI); 511 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 512 NewSI->addCase(PredCases[i].first, PredCases[i].second); 513 Pred->getInstList().erase(PTI); 514 515 // Okay, last check. If BB is still a successor of PSI, then we must 516 // have an infinite loop case. If so, add an infinitely looping block 517 // to handle the case to preserve the behavior of the code. 518 BasicBlock *InfLoopBlock = 0; 519 for (unsigned i = 0, e = NewSI->getNumSuccessors(); i != e; ++i) 520 if (NewSI->getSuccessor(i) == BB) { 521 if (InfLoopBlock == 0) { 522 // Insert it at the end of the loop, because it's either code, 523 // or it won't matter if it's hot. :) 524 InfLoopBlock = new BasicBlock("infloop", BB->getParent()); 525 new BranchInst(InfLoopBlock, InfLoopBlock); 526 } 527 NewSI->setSuccessor(i, InfLoopBlock); 528 } 529 530 Changed = true; 531 } 532 } 533 return Changed; 534 } 535 536 537 // SimplifyCFG - This function is used to do simplification of a CFG. For 538 // example, it adjusts branches to branches to eliminate the extra hop, it 539 // eliminates unreachable basic blocks, and does other "peephole" optimization 540 // of the CFG. It returns true if a modification was made. 541 // 542 // WARNING: The entry node of a function may not be simplified. 543 // 544 bool llvm::SimplifyCFG(BasicBlock *BB) { 545 bool Changed = false; 546 Function *M = BB->getParent(); 547 548 assert(BB && BB->getParent() && "Block not embedded in function!"); 549 assert(BB->getTerminator() && "Degenerate basic block encountered!"); 550 assert(&BB->getParent()->front() != BB && "Can't Simplify entry block!"); 551 552 // Remove basic blocks that have no predecessors... which are unreachable. 553 if (pred_begin(BB) == pred_end(BB) || 554 *pred_begin(BB) == BB && ++pred_begin(BB) == pred_end(BB)) { 555 //cerr << "Removing BB: \n" << BB; 556 557 // Loop through all of our successors and make sure they know that one 558 // of their predecessors is going away. 559 for_each(succ_begin(BB), succ_end(BB), 560 std::bind2nd(std::mem_fun(&BasicBlock::removePredecessor), BB)); 561 562 while (!BB->empty()) { 563 Instruction &I = BB->back(); 564 // If this instruction is used, replace uses with an arbitrary 565 // constant value. Because control flow can't get here, we don't care 566 // what we replace the value with. Note that since this block is 567 // unreachable, and all values contained within it must dominate their 568 // uses, that all uses will eventually be removed. 569 if (!I.use_empty()) 570 // Make all users of this instruction reference the constant instead 571 I.replaceAllUsesWith(Constant::getNullValue(I.getType())); 572 573 // Remove the instruction from the basic block 574 BB->getInstList().pop_back(); 575 } 576 M->getBasicBlockList().erase(BB); 577 return true; 578 } 579 580 // Check to see if we can constant propagate this terminator instruction 581 // away... 582 Changed |= ConstantFoldTerminator(BB); 583 584 // Check to see if this block has no non-phi instructions and only a single 585 // successor. If so, replace references to this basic block with references 586 // to the successor. 587 succ_iterator SI(succ_begin(BB)); 588 if (SI != succ_end(BB) && ++SI == succ_end(BB)) { // One succ? 589 590 BasicBlock::iterator BBI = BB->begin(); // Skip over phi nodes... 591 while (isa<PHINode>(*BBI)) ++BBI; 592 593 if (BBI->isTerminator()) { // Terminator is the only non-phi instruction! 594 BasicBlock *Succ = *succ_begin(BB); // There is exactly one successor 595 596 if (Succ != BB) { // Arg, don't hurt infinite loops! 597 // If our successor has PHI nodes, then we need to update them to 598 // include entries for BB's predecessors, not for BB itself. 599 // Be careful though, if this transformation fails (returns true) then 600 // we cannot do this transformation! 601 // 602 if (!PropagatePredecessorsForPHIs(BB, Succ)) { 603 //cerr << "Killing Trivial BB: \n" << BB; 604 std::string OldName = BB->getName(); 605 606 std::vector<BasicBlock*> 607 OldSuccPreds(pred_begin(Succ), pred_end(Succ)); 608 609 // Move all PHI nodes in BB to Succ if they are alive, otherwise 610 // delete them. 611 while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) 612 if (PN->use_empty()) 613 BB->getInstList().erase(BB->begin()); // Nuke instruction... 614 else { 615 // The instruction is alive, so this means that Succ must have 616 // *ONLY* had BB as a predecessor, and the PHI node is still valid 617 // now. Simply move it into Succ, because we know that BB 618 // strictly dominated Succ. 619 BB->getInstList().remove(BB->begin()); 620 Succ->getInstList().push_front(PN); 621 622 // We need to add new entries for the PHI node to account for 623 // predecessors of Succ that the PHI node does not take into 624 // account. At this point, since we know that BB dominated succ, 625 // this means that we should any newly added incoming edges should 626 // use the PHI node as the value for these edges, because they are 627 // loop back edges. 628 629 for (unsigned i = 0, e = OldSuccPreds.size(); i != e; ++i) 630 if (OldSuccPreds[i] != BB) 631 PN->addIncoming(PN, OldSuccPreds[i]); 632 } 633 634 // Everything that jumped to BB now goes to Succ... 635 BB->replaceAllUsesWith(Succ); 636 637 // Delete the old basic block... 638 M->getBasicBlockList().erase(BB); 639 640 if (!OldName.empty() && !Succ->hasName()) // Transfer name if we can 641 Succ->setName(OldName); 642 643 //cerr << "Function after removal: \n" << M; 644 return true; 645 } 646 } 647 } 648 } 649 650 // If this is a returning block with only PHI nodes in it, fold the return 651 // instruction into any unconditional branch predecessors. 652 // 653 // If any predecessor is a conditional branch that just selects among 654 // different return values, fold the replace the branch/return with a select 655 // and return. 656 if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) { 657 BasicBlock::iterator BBI = BB->getTerminator(); 658 if (BBI == BB->begin() || isa<PHINode>(--BBI)) { 659 // Find predecessors that end with branches. 660 std::vector<BasicBlock*> UncondBranchPreds; 661 std::vector<BranchInst*> CondBranchPreds; 662 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { 663 TerminatorInst *PTI = (*PI)->getTerminator(); 664 if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) 665 if (BI->isUnconditional()) 666 UncondBranchPreds.push_back(*PI); 667 else 668 CondBranchPreds.push_back(BI); 669 } 670 671 // If we found some, do the transformation! 672 if (!UncondBranchPreds.empty()) { 673 while (!UncondBranchPreds.empty()) { 674 BasicBlock *Pred = UncondBranchPreds.back(); 675 UncondBranchPreds.pop_back(); 676 Instruction *UncondBranch = Pred->getTerminator(); 677 // Clone the return and add it to the end of the predecessor. 678 Instruction *NewRet = RI->clone(); 679 Pred->getInstList().push_back(NewRet); 680 681 // If the return instruction returns a value, and if the value was a 682 // PHI node in "BB", propagate the right value into the return. 683 if (NewRet->getNumOperands() == 1) 684 if (PHINode *PN = dyn_cast<PHINode>(NewRet->getOperand(0))) 685 if (PN->getParent() == BB) 686 NewRet->setOperand(0, PN->getIncomingValueForBlock(Pred)); 687 // Update any PHI nodes in the returning block to realize that we no 688 // longer branch to them. 689 BB->removePredecessor(Pred); 690 Pred->getInstList().erase(UncondBranch); 691 } 692 693 // If we eliminated all predecessors of the block, delete the block now. 694 if (pred_begin(BB) == pred_end(BB)) 695 // We know there are no successors, so just nuke the block. 696 M->getBasicBlockList().erase(BB); 697 698 return true; 699 } 700 701 // Check out all of the conditional branches going to this return 702 // instruction. If any of them just select between returns, change the 703 // branch itself into a select/return pair. 704 while (!CondBranchPreds.empty()) { 705 BranchInst *BI = CondBranchPreds.back(); 706 CondBranchPreds.pop_back(); 707 BasicBlock *TrueSucc = BI->getSuccessor(0); 708 BasicBlock *FalseSucc = BI->getSuccessor(1); 709 BasicBlock *OtherSucc = TrueSucc == BB ? FalseSucc : TrueSucc; 710 711 // Check to see if the non-BB successor is also a return block. 712 if (isa<ReturnInst>(OtherSucc->getTerminator())) { 713 // Check to see if there are only PHI instructions in this block. 714 BasicBlock::iterator OSI = OtherSucc->getTerminator(); 715 if (OSI == OtherSucc->begin() || isa<PHINode>(--OSI)) { 716 // Okay, we found a branch that is going to two return nodes. If 717 // there is no return value for this function, just change the 718 // branch into a return. 719 if (RI->getNumOperands() == 0) { 720 TrueSucc->removePredecessor(BI->getParent()); 721 FalseSucc->removePredecessor(BI->getParent()); 722 new ReturnInst(0, BI); 723 BI->getParent()->getInstList().erase(BI); 724 return true; 725 } 726 727 // Otherwise, figure out what the true and false return values are 728 // so we can insert a new select instruction. 729 Value *TrueValue = TrueSucc->getTerminator()->getOperand(0); 730 Value *FalseValue = FalseSucc->getTerminator()->getOperand(0); 731 732 // Unwrap any PHI nodes in the return blocks. 733 if (PHINode *TVPN = dyn_cast<PHINode>(TrueValue)) 734 if (TVPN->getParent() == TrueSucc) 735 TrueValue = TVPN->getIncomingValueForBlock(BI->getParent()); 736 if (PHINode *FVPN = dyn_cast<PHINode>(FalseValue)) 737 if (FVPN->getParent() == FalseSucc) 738 FalseValue = FVPN->getIncomingValueForBlock(BI->getParent()); 739 740 TrueSucc->removePredecessor(BI->getParent()); 741 FalseSucc->removePredecessor(BI->getParent()); 742 743 // Insert a new select instruction. 744 Value *NewRetVal = new SelectInst(BI->getCondition(), TrueValue, 745 FalseValue, "retval", BI); 746 new ReturnInst(NewRetVal, BI); 747 BI->getParent()->getInstList().erase(BI); 748 return true; 749 } 750 } 751 } 752 } 753 } else if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->begin())) { 754 // Check to see if the first instruction in this block is just an unwind. 755 // If so, replace any invoke instructions which use this as an exception 756 // destination with call instructions. 757 // 758 std::vector<BasicBlock*> Preds(pred_begin(BB), pred_end(BB)); 759 while (!Preds.empty()) { 760 BasicBlock *Pred = Preds.back(); 761 if (InvokeInst *II = dyn_cast<InvokeInst>(Pred->getTerminator())) 762 if (II->getUnwindDest() == BB) { 763 // Insert a new branch instruction before the invoke, because this 764 // is now a fall through... 765 BranchInst *BI = new BranchInst(II->getNormalDest(), II); 766 Pred->getInstList().remove(II); // Take out of symbol table 767 768 // Insert the call now... 769 std::vector<Value*> Args(II->op_begin()+3, II->op_end()); 770 CallInst *CI = new CallInst(II->getCalledValue(), Args, 771 II->getName(), BI); 772 // If the invoke produced a value, the Call now does instead 773 II->replaceAllUsesWith(CI); 774 delete II; 775 Changed = true; 776 } 777 778 Preds.pop_back(); 779 } 780 781 // If this block is now dead, remove it. 782 if (pred_begin(BB) == pred_end(BB)) { 783 // We know there are no successors, so just nuke the block. 784 M->getBasicBlockList().erase(BB); 785 return true; 786 } 787 788 } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->begin())) { 789 if (isValueEqualityComparison(SI)) 790 if (FoldValueComparisonIntoPredecessors(SI)) 791 return SimplifyCFG(BB) || 1; 792 } else if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) { 793 if (BI->isConditional()) { 794 if (Value *CompVal = isValueEqualityComparison(BI)) { 795 // This block must be empty, except for the setcond inst, if it exists. 796 BasicBlock::iterator I = BB->begin(); 797 if (&*I == BI || 798 (&*I == cast<Instruction>(BI->getCondition()) && 799 &*++I == BI)) 800 if (FoldValueComparisonIntoPredecessors(BI)) 801 return SimplifyCFG(BB) | true; 802 } 803 804 // If this basic block is ONLY a setcc and a branch, and if a predecessor 805 // branches to us and one of our successors, fold the setcc into the 806 // predecessor and use logical operations to pick the right destination. 807 BasicBlock *TrueDest = BI->getSuccessor(0); 808 BasicBlock *FalseDest = BI->getSuccessor(1); 809 if (BinaryOperator *Cond = dyn_cast<BinaryOperator>(BI->getCondition())) 810 if (Cond->getParent() == BB && &BB->front() == Cond && 811 Cond->getNext() == BI && Cond->hasOneUse() && 812 TrueDest != BB && FalseDest != BB) 813 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI!=E; ++PI) 814 if (BranchInst *PBI = dyn_cast<BranchInst>((*PI)->getTerminator())) 815 if (PBI->isConditional() && SafeToMergeTerminators(BI, PBI)) { 816 if (PBI->getSuccessor(0) == FalseDest || 817 PBI->getSuccessor(1) == TrueDest) { 818 // Invert the predecessors condition test (xor it with true), 819 // which allows us to write this code once. 820 Value *NewCond = 821 BinaryOperator::createNot(PBI->getCondition(), 822 PBI->getCondition()->getName()+".not", PBI); 823 PBI->setCondition(NewCond); 824 BasicBlock *OldTrue = PBI->getSuccessor(0); 825 BasicBlock *OldFalse = PBI->getSuccessor(1); 826 PBI->setSuccessor(0, OldFalse); 827 PBI->setSuccessor(1, OldTrue); 828 } 829 830 if (PBI->getSuccessor(0) == TrueDest || 831 PBI->getSuccessor(1) == FalseDest) { 832 // Clone Cond into the predecessor basic block, and and the 833 // two conditions together. 834 Instruction *New = Cond->clone(); 835 New->setName(Cond->getName()); 836 Cond->setName(Cond->getName()+".old"); 837 (*PI)->getInstList().insert(PBI, New); 838 Instruction::BinaryOps Opcode = 839 PBI->getSuccessor(0) == TrueDest ? 840 Instruction::Or : Instruction::And; 841 Value *NewCond = 842 BinaryOperator::create(Opcode, PBI->getCondition(), 843 New, "bothcond", PBI); 844 PBI->setCondition(NewCond); 845 if (PBI->getSuccessor(0) == BB) { 846 AddPredecessorToBlock(TrueDest, *PI, BB); 847 PBI->setSuccessor(0, TrueDest); 848 } 849 if (PBI->getSuccessor(1) == BB) { 850 AddPredecessorToBlock(FalseDest, *PI, BB); 851 PBI->setSuccessor(1, FalseDest); 852 } 853 return SimplifyCFG(BB) | 1; 854 } 855 } 856 857 // If this block ends with a branch instruction, and if there is one 858 // predecessor, see if the previous block ended with a branch on the same 859 // condition, which makes this conditional branch redundant. 860 pred_iterator PI(pred_begin(BB)), PE(pred_end(BB)); 861 BasicBlock *OnlyPred = *PI++; 862 for (; PI != PE; ++PI)// Search all predecessors, see if they are all same 863 if (*PI != OnlyPred) { 864 OnlyPred = 0; // There are multiple different predecessors... 865 break; 866 } 867 868 if (OnlyPred) 869 if (BranchInst *PBI = dyn_cast<BranchInst>(OnlyPred->getTerminator())) 870 if (PBI->isConditional() && 871 PBI->getCondition() == BI->getCondition() && 872 (PBI->getSuccessor(0) != BB || PBI->getSuccessor(1) != BB)) { 873 // Okay, the outcome of this conditional branch is statically 874 // knowable. Delete the outgoing CFG edge that is impossible to 875 // execute. 876 bool CondIsTrue = PBI->getSuccessor(0) == BB; 877 BI->getSuccessor(CondIsTrue)->removePredecessor(BB); 878 new BranchInst(BI->getSuccessor(!CondIsTrue), BB); 879 BB->getInstList().erase(BI); 880 return SimplifyCFG(BB) | true; 881 } 882 } 883 } 884 885 // Merge basic blocks into their predecessor if there is only one distinct 886 // pred, and if there is only one distinct successor of the predecessor, and 887 // if there are no PHI nodes. 888 // 889 pred_iterator PI(pred_begin(BB)), PE(pred_end(BB)); 890 BasicBlock *OnlyPred = *PI++; 891 for (; PI != PE; ++PI) // Search all predecessors, see if they are all same 892 if (*PI != OnlyPred) { 893 OnlyPred = 0; // There are multiple different predecessors... 894 break; 895 } 896 897 BasicBlock *OnlySucc = 0; 898 if (OnlyPred && OnlyPred != BB && // Don't break self loops 899 OnlyPred->getTerminator()->getOpcode() != Instruction::Invoke) { 900 // Check to see if there is only one distinct successor... 901 succ_iterator SI(succ_begin(OnlyPred)), SE(succ_end(OnlyPred)); 902 OnlySucc = BB; 903 for (; SI != SE; ++SI) 904 if (*SI != OnlySucc) { 905 OnlySucc = 0; // There are multiple distinct successors! 906 break; 907 } 908 } 909 910 if (OnlySucc) { 911 //cerr << "Merging: " << BB << "into: " << OnlyPred; 912 TerminatorInst *Term = OnlyPred->getTerminator(); 913 914 // Resolve any PHI nodes at the start of the block. They are all 915 // guaranteed to have exactly one entry if they exist, unless there are 916 // multiple duplicate (but guaranteed to be equal) entries for the 917 // incoming edges. This occurs when there are multiple edges from 918 // OnlyPred to OnlySucc. 919 // 920 while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) { 921 PN->replaceAllUsesWith(PN->getIncomingValue(0)); 922 BB->getInstList().pop_front(); // Delete the phi node... 923 } 924 925 // Delete the unconditional branch from the predecessor... 926 OnlyPred->getInstList().pop_back(); 927 928 // Move all definitions in the successor to the predecessor... 929 OnlyPred->getInstList().splice(OnlyPred->end(), BB->getInstList()); 930 931 // Make all PHI nodes that referred to BB now refer to Pred as their 932 // source... 933 BB->replaceAllUsesWith(OnlyPred); 934 935 std::string OldName = BB->getName(); 936 937 // Erase basic block from the function... 938 M->getBasicBlockList().erase(BB); 939 940 // Inherit predecessors name if it exists... 941 if (!OldName.empty() && !OnlyPred->hasName()) 942 OnlyPred->setName(OldName); 943 944 return true; 945 } 946 947 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) 948 if (BranchInst *BI = dyn_cast<BranchInst>((*PI)->getTerminator())) 949 // Change br (X == 0 | X == 1), T, F into a switch instruction. 950 if (BI->isConditional() && isa<Instruction>(BI->getCondition())) { 951 Instruction *Cond = cast<Instruction>(BI->getCondition()); 952 // If this is a bunch of seteq's or'd together, or if it's a bunch of 953 // 'setne's and'ed together, collect them. 954 Value *CompVal = 0; 955 std::vector<Constant*> Values; 956 bool TrueWhenEqual = GatherValueComparisons(Cond, CompVal, Values); 957 if (CompVal && CompVal->getType()->isInteger()) { 958 // There might be duplicate constants in the list, which the switch 959 // instruction can't handle, remove them now. 960 std::sort(Values.begin(), Values.end()); 961 Values.erase(std::unique(Values.begin(), Values.end()), Values.end()); 962 963 // Figure out which block is which destination. 964 BasicBlock *DefaultBB = BI->getSuccessor(1); 965 BasicBlock *EdgeBB = BI->getSuccessor(0); 966 if (!TrueWhenEqual) std::swap(DefaultBB, EdgeBB); 967 968 // Create the new switch instruction now. 969 SwitchInst *New = new SwitchInst(CompVal, DefaultBB, BI); 970 971 // Add all of the 'cases' to the switch instruction. 972 for (unsigned i = 0, e = Values.size(); i != e; ++i) 973 New->addCase(Values[i], EdgeBB); 974 975 // We added edges from PI to the EdgeBB. As such, if there were any 976 // PHI nodes in EdgeBB, they need entries to be added corresponding to 977 // the number of edges added. 978 for (BasicBlock::iterator BBI = EdgeBB->begin(); 979 PHINode *PN = dyn_cast<PHINode>(BBI); ++BBI) { 980 Value *InVal = PN->getIncomingValueForBlock(*PI); 981 for (unsigned i = 0, e = Values.size()-1; i != e; ++i) 982 PN->addIncoming(InVal, *PI); 983 } 984 985 // Erase the old branch instruction. 986 (*PI)->getInstList().erase(BI); 987 988 // Erase the potentially condition tree that was used to computed the 989 // branch condition. 990 ErasePossiblyDeadInstructionTree(Cond); 991 return true; 992 } 993 } 994 995 // If there is a trivial two-entry PHI node in this basic block, and we can 996 // eliminate it, do so now. 997 if (PHINode *PN = dyn_cast<PHINode>(BB->begin())) 998 if (PN->getNumIncomingValues() == 2) { 999 // Ok, this is a two entry PHI node. Check to see if this is a simple "if 1000 // statement", which has a very simple dominance structure. Basically, we 1001 // are trying to find the condition that is being branched on, which 1002 // subsequently causes this merge to happen. We really want control 1003 // dependence information for this check, but simplifycfg can't keep it up 1004 // to date, and this catches most of the cases we care about anyway. 1005 // 1006 BasicBlock *IfTrue, *IfFalse; 1007 if (Value *IfCond = GetIfCondition(BB, IfTrue, IfFalse)) { 1008 //std::cerr << "FOUND IF CONDITION! " << *IfCond << " T: " 1009 // << IfTrue->getName() << " F: " << IfFalse->getName() << "\n"; 1010 1011 // Figure out where to insert instructions as necessary. 1012 BasicBlock::iterator AfterPHIIt = BB->begin(); 1013 while (isa<PHINode>(AfterPHIIt)) ++AfterPHIIt; 1014 1015 BasicBlock::iterator I = BB->begin(); 1016 while (PHINode *PN = dyn_cast<PHINode>(I)) { 1017 ++I; 1018 1019 // If we can eliminate this PHI by directly computing it based on the 1020 // condition, do so now. We can't eliminate PHI nodes where the 1021 // incoming values are defined in the conditional parts of the branch, 1022 // so check for this. 1023 // 1024 if (DominatesMergePoint(PN->getIncomingValue(0), BB, true) && 1025 DominatesMergePoint(PN->getIncomingValue(1), BB, true)) { 1026 Value *TrueVal = 1027 PN->getIncomingValue(PN->getIncomingBlock(0) == IfFalse); 1028 Value *FalseVal = 1029 PN->getIncomingValue(PN->getIncomingBlock(0) == IfTrue); 1030 1031 // If one of the incoming values is defined in the conditional 1032 // region, move it into it's predecessor block, which we know is 1033 // safe. 1034 if (!DominatesMergePoint(TrueVal, BB, false)) { 1035 Instruction *TrueI = cast<Instruction>(TrueVal); 1036 BasicBlock *OldBB = TrueI->getParent(); 1037 OldBB->getInstList().remove(TrueI); 1038 BasicBlock *NewBB = *pred_begin(OldBB); 1039 NewBB->getInstList().insert(NewBB->getTerminator(), TrueI); 1040 } 1041 if (!DominatesMergePoint(FalseVal, BB, false)) { 1042 Instruction *FalseI = cast<Instruction>(FalseVal); 1043 BasicBlock *OldBB = FalseI->getParent(); 1044 OldBB->getInstList().remove(FalseI); 1045 BasicBlock *NewBB = *pred_begin(OldBB); 1046 NewBB->getInstList().insert(NewBB->getTerminator(), FalseI); 1047 } 1048 1049 // Change the PHI node into a select instruction. 1050 BasicBlock::iterator InsertPos = PN; 1051 while (isa<PHINode>(InsertPos)) ++InsertPos; 1052 1053 std::string Name = PN->getName(); PN->setName(""); 1054 PN->replaceAllUsesWith(new SelectInst(IfCond, TrueVal, FalseVal, 1055 Name, InsertPos)); 1056 BB->getInstList().erase(PN); 1057 Changed = true; 1058 } 1059 } 1060 } 1061 } 1062 1063 return Changed; 1064 } 1065