1 //===- SimplifyCFG.cpp - Code to perform CFG simplification ---------------===// 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 // Peephole optimize the CFG. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #define DEBUG_TYPE "simplifycfg" 15 #include "llvm/Transforms/Utils/Local.h" 16 #include "llvm/Constants.h" 17 #include "llvm/Instructions.h" 18 #include "llvm/IntrinsicInst.h" 19 #include "llvm/Type.h" 20 #include "llvm/DerivedTypes.h" 21 #include "llvm/GlobalVariable.h" 22 #include "llvm/Analysis/InstructionSimplify.h" 23 #include "llvm/Target/TargetData.h" 24 #include "llvm/Transforms/Utils/BasicBlockUtils.h" 25 #include "llvm/ADT/DenseMap.h" 26 #include "llvm/ADT/SmallVector.h" 27 #include "llvm/ADT/SmallPtrSet.h" 28 #include "llvm/ADT/Statistic.h" 29 #include "llvm/ADT/STLExtras.h" 30 #include "llvm/Support/CFG.h" 31 #include "llvm/Support/CommandLine.h" 32 #include "llvm/Support/ConstantRange.h" 33 #include "llvm/Support/Debug.h" 34 #include "llvm/Support/raw_ostream.h" 35 #include <algorithm> 36 #include <set> 37 #include <map> 38 using namespace llvm; 39 40 static cl::opt<bool> 41 DupRet("simplifycfg-dup-ret", cl::Hidden, cl::init(false), 42 cl::desc("Duplicate return instructions into unconditional branches")); 43 44 STATISTIC(NumSpeculations, "Number of speculative executed instructions"); 45 46 namespace { 47 class SimplifyCFGOpt { 48 const TargetData *const TD; 49 50 Value *isValueEqualityComparison(TerminatorInst *TI); 51 BasicBlock *GetValueEqualityComparisonCases(TerminatorInst *TI, 52 std::vector<std::pair<ConstantInt*, BasicBlock*> > &Cases); 53 bool SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI, 54 BasicBlock *Pred); 55 bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI); 56 57 bool SimplifyReturn(ReturnInst *RI); 58 bool SimplifyUnwind(UnwindInst *UI); 59 bool SimplifyUnreachable(UnreachableInst *UI); 60 bool SimplifySwitch(SwitchInst *SI); 61 bool SimplifyIndirectBr(IndirectBrInst *IBI); 62 bool SimplifyUncondBranch(BranchInst *BI); 63 bool SimplifyCondBranch(BranchInst *BI); 64 65 public: 66 explicit SimplifyCFGOpt(const TargetData *td) : TD(td) {} 67 bool run(BasicBlock *BB); 68 }; 69 } 70 71 /// SafeToMergeTerminators - Return true if it is safe to merge these two 72 /// terminator instructions together. 73 /// 74 static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2) { 75 if (SI1 == SI2) return false; // Can't merge with self! 76 77 // It is not safe to merge these two switch instructions if they have a common 78 // successor, and if that successor has a PHI node, and if *that* PHI node has 79 // conflicting incoming values from the two switch blocks. 80 BasicBlock *SI1BB = SI1->getParent(); 81 BasicBlock *SI2BB = SI2->getParent(); 82 SmallPtrSet<BasicBlock*, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB)); 83 84 for (succ_iterator I = succ_begin(SI2BB), E = succ_end(SI2BB); I != E; ++I) 85 if (SI1Succs.count(*I)) 86 for (BasicBlock::iterator BBI = (*I)->begin(); 87 isa<PHINode>(BBI); ++BBI) { 88 PHINode *PN = cast<PHINode>(BBI); 89 if (PN->getIncomingValueForBlock(SI1BB) != 90 PN->getIncomingValueForBlock(SI2BB)) 91 return false; 92 } 93 94 return true; 95 } 96 97 /// AddPredecessorToBlock - Update PHI nodes in Succ to indicate that there will 98 /// now be entries in it from the 'NewPred' block. The values that will be 99 /// flowing into the PHI nodes will be the same as those coming in from 100 /// ExistPred, an existing predecessor of Succ. 101 static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred, 102 BasicBlock *ExistPred) { 103 if (!isa<PHINode>(Succ->begin())) return; // Quick exit if nothing to do 104 105 PHINode *PN; 106 for (BasicBlock::iterator I = Succ->begin(); 107 (PN = dyn_cast<PHINode>(I)); ++I) 108 PN->addIncoming(PN->getIncomingValueForBlock(ExistPred), NewPred); 109 } 110 111 112 /// GetIfCondition - Given a basic block (BB) with two predecessors (and at 113 /// least one PHI node in it), check to see if the merge at this block is due 114 /// to an "if condition". If so, return the boolean condition that determines 115 /// which entry into BB will be taken. Also, return by references the block 116 /// that will be entered from if the condition is true, and the block that will 117 /// be entered if the condition is false. 118 /// 119 /// This does no checking to see if the true/false blocks have large or unsavory 120 /// instructions in them. 121 static Value *GetIfCondition(BasicBlock *BB, BasicBlock *&IfTrue, 122 BasicBlock *&IfFalse) { 123 PHINode *SomePHI = cast<PHINode>(BB->begin()); 124 assert(SomePHI->getNumIncomingValues() == 2 && 125 "Function can only handle blocks with 2 predecessors!"); 126 BasicBlock *Pred1 = SomePHI->getIncomingBlock(0); 127 BasicBlock *Pred2 = SomePHI->getIncomingBlock(1); 128 129 // We can only handle branches. Other control flow will be lowered to 130 // branches if possible anyway. 131 BranchInst *Pred1Br = dyn_cast<BranchInst>(Pred1->getTerminator()); 132 BranchInst *Pred2Br = dyn_cast<BranchInst>(Pred2->getTerminator()); 133 if (Pred1Br == 0 || Pred2Br == 0) 134 return 0; 135 136 // Eliminate code duplication by ensuring that Pred1Br is conditional if 137 // either are. 138 if (Pred2Br->isConditional()) { 139 // If both branches are conditional, we don't have an "if statement". In 140 // reality, we could transform this case, but since the condition will be 141 // required anyway, we stand no chance of eliminating it, so the xform is 142 // probably not profitable. 143 if (Pred1Br->isConditional()) 144 return 0; 145 146 std::swap(Pred1, Pred2); 147 std::swap(Pred1Br, Pred2Br); 148 } 149 150 if (Pred1Br->isConditional()) { 151 // The only thing we have to watch out for here is to make sure that Pred2 152 // doesn't have incoming edges from other blocks. If it does, the condition 153 // doesn't dominate BB. 154 if (Pred2->getSinglePredecessor() == 0) 155 return 0; 156 157 // If we found a conditional branch predecessor, make sure that it branches 158 // to BB and Pred2Br. If it doesn't, this isn't an "if statement". 159 if (Pred1Br->getSuccessor(0) == BB && 160 Pred1Br->getSuccessor(1) == Pred2) { 161 IfTrue = Pred1; 162 IfFalse = Pred2; 163 } else if (Pred1Br->getSuccessor(0) == Pred2 && 164 Pred1Br->getSuccessor(1) == BB) { 165 IfTrue = Pred2; 166 IfFalse = Pred1; 167 } else { 168 // We know that one arm of the conditional goes to BB, so the other must 169 // go somewhere unrelated, and this must not be an "if statement". 170 return 0; 171 } 172 173 return Pred1Br->getCondition(); 174 } 175 176 // Ok, if we got here, both predecessors end with an unconditional branch to 177 // BB. Don't panic! If both blocks only have a single (identical) 178 // predecessor, and THAT is a conditional branch, then we're all ok! 179 BasicBlock *CommonPred = Pred1->getSinglePredecessor(); 180 if (CommonPred == 0 || CommonPred != Pred2->getSinglePredecessor()) 181 return 0; 182 183 // Otherwise, if this is a conditional branch, then we can use it! 184 BranchInst *BI = dyn_cast<BranchInst>(CommonPred->getTerminator()); 185 if (BI == 0) return 0; 186 187 assert(BI->isConditional() && "Two successors but not conditional?"); 188 if (BI->getSuccessor(0) == Pred1) { 189 IfTrue = Pred1; 190 IfFalse = Pred2; 191 } else { 192 IfTrue = Pred2; 193 IfFalse = Pred1; 194 } 195 return BI->getCondition(); 196 } 197 198 /// DominatesMergePoint - If we have a merge point of an "if condition" as 199 /// accepted above, return true if the specified value dominates the block. We 200 /// don't handle the true generality of domination here, just a special case 201 /// which works well enough for us. 202 /// 203 /// If AggressiveInsts is non-null, and if V does not dominate BB, we check to 204 /// see if V (which must be an instruction) is cheap to compute and is 205 /// non-trapping. If both are true, the instruction is inserted into the set 206 /// and true is returned. 207 static bool DominatesMergePoint(Value *V, BasicBlock *BB, 208 SmallPtrSet<Instruction*, 4> *AggressiveInsts) { 209 Instruction *I = dyn_cast<Instruction>(V); 210 if (!I) { 211 // Non-instructions all dominate instructions, but not all constantexprs 212 // can be executed unconditionally. 213 if (ConstantExpr *C = dyn_cast<ConstantExpr>(V)) 214 if (C->canTrap()) 215 return false; 216 return true; 217 } 218 BasicBlock *PBB = I->getParent(); 219 220 // We don't want to allow weird loops that might have the "if condition" in 221 // the bottom of this block. 222 if (PBB == BB) return false; 223 224 // If this instruction is defined in a block that contains an unconditional 225 // branch to BB, then it must be in the 'conditional' part of the "if 226 // statement". If not, it definitely dominates the region. 227 BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator()); 228 if (BI == 0 || BI->isConditional() || BI->getSuccessor(0) != BB) 229 return true; 230 231 // If we aren't allowing aggressive promotion anymore, then don't consider 232 // instructions in the 'if region'. 233 if (AggressiveInsts == 0) return false; 234 235 // Okay, it looks like the instruction IS in the "condition". Check to 236 // see if it's a cheap instruction to unconditionally compute, and if it 237 // only uses stuff defined outside of the condition. If so, hoist it out. 238 if (!I->isSafeToSpeculativelyExecute()) 239 return false; 240 241 switch (I->getOpcode()) { 242 default: return false; // Cannot hoist this out safely. 243 case Instruction::Load: 244 // We have to check to make sure there are no instructions before the 245 // load in its basic block, as we are going to hoist the load out to its 246 // predecessor. 247 if (PBB->getFirstNonPHIOrDbg() != I) 248 return false; 249 break; 250 case Instruction::Add: 251 case Instruction::Sub: 252 case Instruction::And: 253 case Instruction::Or: 254 case Instruction::Xor: 255 case Instruction::Shl: 256 case Instruction::LShr: 257 case Instruction::AShr: 258 case Instruction::ICmp: 259 break; // These are all cheap and non-trapping instructions. 260 } 261 262 // Okay, we can only really hoist these out if their operands are not 263 // defined in the conditional region. 264 for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i) 265 if (!DominatesMergePoint(*i, BB, 0)) 266 return false; 267 // Okay, it's safe to do this! Remember this instruction. 268 AggressiveInsts->insert(I); 269 return true; 270 } 271 272 /// GetConstantInt - Extract ConstantInt from value, looking through IntToPtr 273 /// and PointerNullValue. Return NULL if value is not a constant int. 274 static ConstantInt *GetConstantInt(Value *V, const TargetData *TD) { 275 // Normal constant int. 276 ConstantInt *CI = dyn_cast<ConstantInt>(V); 277 if (CI || !TD || !isa<Constant>(V) || !V->getType()->isPointerTy()) 278 return CI; 279 280 // This is some kind of pointer constant. Turn it into a pointer-sized 281 // ConstantInt if possible. 282 const IntegerType *PtrTy = TD->getIntPtrType(V->getContext()); 283 284 // Null pointer means 0, see SelectionDAGBuilder::getValue(const Value*). 285 if (isa<ConstantPointerNull>(V)) 286 return ConstantInt::get(PtrTy, 0); 287 288 // IntToPtr const int. 289 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) 290 if (CE->getOpcode() == Instruction::IntToPtr) 291 if (ConstantInt *CI = dyn_cast<ConstantInt>(CE->getOperand(0))) { 292 // The constant is very likely to have the right type already. 293 if (CI->getType() == PtrTy) 294 return CI; 295 else 296 return cast<ConstantInt> 297 (ConstantExpr::getIntegerCast(CI, PtrTy, /*isSigned=*/false)); 298 } 299 return 0; 300 } 301 302 /// GatherConstantCompares - Given a potentially 'or'd or 'and'd together 303 /// collection of icmp eq/ne instructions that compare a value against a 304 /// constant, return the value being compared, and stick the constant into the 305 /// Values vector. 306 static Value * 307 GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra, 308 const TargetData *TD, bool isEQ, unsigned &UsedICmps) { 309 Instruction *I = dyn_cast<Instruction>(V); 310 if (I == 0) return 0; 311 312 // If this is an icmp against a constant, handle this as one of the cases. 313 if (ICmpInst *ICI = dyn_cast<ICmpInst>(I)) { 314 if (ConstantInt *C = GetConstantInt(I->getOperand(1), TD)) { 315 if (ICI->getPredicate() == (isEQ ? ICmpInst::ICMP_EQ:ICmpInst::ICMP_NE)) { 316 UsedICmps++; 317 Vals.push_back(C); 318 return I->getOperand(0); 319 } 320 321 // If we have "x ult 3" comparison, for example, then we can add 0,1,2 to 322 // the set. 323 ConstantRange Span = 324 ConstantRange::makeICmpRegion(ICI->getPredicate(), C->getValue()); 325 326 // If this is an and/!= check then we want to optimize "x ugt 2" into 327 // x != 0 && x != 1. 328 if (!isEQ) 329 Span = Span.inverse(); 330 331 // If there are a ton of values, we don't want to make a ginormous switch. 332 if (Span.getSetSize().ugt(8) || Span.isEmptySet() || 333 // We don't handle wrapped sets yet. 334 Span.isWrappedSet()) 335 return 0; 336 337 for (APInt Tmp = Span.getLower(); Tmp != Span.getUpper(); ++Tmp) 338 Vals.push_back(ConstantInt::get(V->getContext(), Tmp)); 339 UsedICmps++; 340 return I->getOperand(0); 341 } 342 return 0; 343 } 344 345 // Otherwise, we can only handle an | or &, depending on isEQ. 346 if (I->getOpcode() != (isEQ ? Instruction::Or : Instruction::And)) 347 return 0; 348 349 unsigned NumValsBeforeLHS = Vals.size(); 350 unsigned UsedICmpsBeforeLHS = UsedICmps; 351 if (Value *LHS = GatherConstantCompares(I->getOperand(0), Vals, Extra, TD, 352 isEQ, UsedICmps)) { 353 unsigned NumVals = Vals.size(); 354 unsigned UsedICmpsBeforeRHS = UsedICmps; 355 if (Value *RHS = GatherConstantCompares(I->getOperand(1), Vals, Extra, TD, 356 isEQ, UsedICmps)) { 357 if (LHS == RHS) 358 return LHS; 359 Vals.resize(NumVals); 360 UsedICmps = UsedICmpsBeforeRHS; 361 } 362 363 // The RHS of the or/and can't be folded in and we haven't used "Extra" yet, 364 // set it and return success. 365 if (Extra == 0 || Extra == I->getOperand(1)) { 366 Extra = I->getOperand(1); 367 return LHS; 368 } 369 370 Vals.resize(NumValsBeforeLHS); 371 UsedICmps = UsedICmpsBeforeLHS; 372 return 0; 373 } 374 375 // If the LHS can't be folded in, but Extra is available and RHS can, try to 376 // use LHS as Extra. 377 if (Extra == 0 || Extra == I->getOperand(0)) { 378 Value *OldExtra = Extra; 379 Extra = I->getOperand(0); 380 if (Value *RHS = GatherConstantCompares(I->getOperand(1), Vals, Extra, TD, 381 isEQ, UsedICmps)) 382 return RHS; 383 assert(Vals.size() == NumValsBeforeLHS); 384 Extra = OldExtra; 385 } 386 387 return 0; 388 } 389 390 static void EraseTerminatorInstAndDCECond(TerminatorInst *TI) { 391 Instruction* Cond = 0; 392 if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { 393 Cond = dyn_cast<Instruction>(SI->getCondition()); 394 } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) { 395 if (BI->isConditional()) 396 Cond = dyn_cast<Instruction>(BI->getCondition()); 397 } else if (IndirectBrInst *IBI = dyn_cast<IndirectBrInst>(TI)) { 398 Cond = dyn_cast<Instruction>(IBI->getAddress()); 399 } 400 401 TI->eraseFromParent(); 402 if (Cond) RecursivelyDeleteTriviallyDeadInstructions(Cond); 403 } 404 405 /// isValueEqualityComparison - Return true if the specified terminator checks 406 /// to see if a value is equal to constant integer value. 407 Value *SimplifyCFGOpt::isValueEqualityComparison(TerminatorInst *TI) { 408 Value *CV = 0; 409 if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { 410 // Do not permit merging of large switch instructions into their 411 // predecessors unless there is only one predecessor. 412 if (SI->getNumSuccessors()*std::distance(pred_begin(SI->getParent()), 413 pred_end(SI->getParent())) <= 128) 414 CV = SI->getCondition(); 415 } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) 416 if (BI->isConditional() && BI->getCondition()->hasOneUse()) 417 if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition())) 418 if ((ICI->getPredicate() == ICmpInst::ICMP_EQ || 419 ICI->getPredicate() == ICmpInst::ICMP_NE) && 420 GetConstantInt(ICI->getOperand(1), TD)) 421 CV = ICI->getOperand(0); 422 423 // Unwrap any lossless ptrtoint cast. 424 if (TD && CV && CV->getType() == TD->getIntPtrType(CV->getContext())) 425 if (PtrToIntInst *PTII = dyn_cast<PtrToIntInst>(CV)) 426 CV = PTII->getOperand(0); 427 return CV; 428 } 429 430 /// GetValueEqualityComparisonCases - Given a value comparison instruction, 431 /// decode all of the 'cases' that it represents and return the 'default' block. 432 BasicBlock *SimplifyCFGOpt:: 433 GetValueEqualityComparisonCases(TerminatorInst *TI, 434 std::vector<std::pair<ConstantInt*, 435 BasicBlock*> > &Cases) { 436 if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { 437 Cases.reserve(SI->getNumCases()); 438 for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i) 439 Cases.push_back(std::make_pair(SI->getCaseValue(i), SI->getSuccessor(i))); 440 return SI->getDefaultDest(); 441 } 442 443 BranchInst *BI = cast<BranchInst>(TI); 444 ICmpInst *ICI = cast<ICmpInst>(BI->getCondition()); 445 Cases.push_back(std::make_pair(GetConstantInt(ICI->getOperand(1), TD), 446 BI->getSuccessor(ICI->getPredicate() == 447 ICmpInst::ICMP_NE))); 448 return BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_EQ); 449 } 450 451 452 /// EliminateBlockCases - Given a vector of bb/value pairs, remove any entries 453 /// in the list that match the specified block. 454 static void EliminateBlockCases(BasicBlock *BB, 455 std::vector<std::pair<ConstantInt*, BasicBlock*> > &Cases) { 456 for (unsigned i = 0, e = Cases.size(); i != e; ++i) 457 if (Cases[i].second == BB) { 458 Cases.erase(Cases.begin()+i); 459 --i; --e; 460 } 461 } 462 463 /// ValuesOverlap - Return true if there are any keys in C1 that exist in C2 as 464 /// well. 465 static bool 466 ValuesOverlap(std::vector<std::pair<ConstantInt*, BasicBlock*> > &C1, 467 std::vector<std::pair<ConstantInt*, BasicBlock*> > &C2) { 468 std::vector<std::pair<ConstantInt*, BasicBlock*> > *V1 = &C1, *V2 = &C2; 469 470 // Make V1 be smaller than V2. 471 if (V1->size() > V2->size()) 472 std::swap(V1, V2); 473 474 if (V1->size() == 0) return false; 475 if (V1->size() == 1) { 476 // Just scan V2. 477 ConstantInt *TheVal = (*V1)[0].first; 478 for (unsigned i = 0, e = V2->size(); i != e; ++i) 479 if (TheVal == (*V2)[i].first) 480 return true; 481 } 482 483 // Otherwise, just sort both lists and compare element by element. 484 array_pod_sort(V1->begin(), V1->end()); 485 array_pod_sort(V2->begin(), V2->end()); 486 unsigned i1 = 0, i2 = 0, e1 = V1->size(), e2 = V2->size(); 487 while (i1 != e1 && i2 != e2) { 488 if ((*V1)[i1].first == (*V2)[i2].first) 489 return true; 490 if ((*V1)[i1].first < (*V2)[i2].first) 491 ++i1; 492 else 493 ++i2; 494 } 495 return false; 496 } 497 498 /// SimplifyEqualityComparisonWithOnlyPredecessor - If TI is known to be a 499 /// terminator instruction and its block is known to only have a single 500 /// predecessor block, check to see if that predecessor is also a value 501 /// comparison with the same value, and if that comparison determines the 502 /// outcome of this comparison. If so, simplify TI. This does a very limited 503 /// form of jump threading. 504 bool SimplifyCFGOpt:: 505 SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI, 506 BasicBlock *Pred) { 507 Value *PredVal = isValueEqualityComparison(Pred->getTerminator()); 508 if (!PredVal) return false; // Not a value comparison in predecessor. 509 510 Value *ThisVal = isValueEqualityComparison(TI); 511 assert(ThisVal && "This isn't a value comparison!!"); 512 if (ThisVal != PredVal) return false; // Different predicates. 513 514 // Find out information about when control will move from Pred to TI's block. 515 std::vector<std::pair<ConstantInt*, BasicBlock*> > PredCases; 516 BasicBlock *PredDef = GetValueEqualityComparisonCases(Pred->getTerminator(), 517 PredCases); 518 EliminateBlockCases(PredDef, PredCases); // Remove default from cases. 519 520 // Find information about how control leaves this block. 521 std::vector<std::pair<ConstantInt*, BasicBlock*> > ThisCases; 522 BasicBlock *ThisDef = GetValueEqualityComparisonCases(TI, ThisCases); 523 EliminateBlockCases(ThisDef, ThisCases); // Remove default from cases. 524 525 // If TI's block is the default block from Pred's comparison, potentially 526 // simplify TI based on this knowledge. 527 if (PredDef == TI->getParent()) { 528 // If we are here, we know that the value is none of those cases listed in 529 // PredCases. If there are any cases in ThisCases that are in PredCases, we 530 // can simplify TI. 531 if (!ValuesOverlap(PredCases, ThisCases)) 532 return false; 533 534 if (isa<BranchInst>(TI)) { 535 // Okay, one of the successors of this condbr is dead. Convert it to a 536 // uncond br. 537 assert(ThisCases.size() == 1 && "Branch can only have one case!"); 538 // Insert the new branch. 539 Instruction *NI = BranchInst::Create(ThisDef, TI); 540 (void) NI; 541 542 // Remove PHI node entries for the dead edge. 543 ThisCases[0].second->removePredecessor(TI->getParent()); 544 545 DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator() 546 << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n"); 547 548 EraseTerminatorInstAndDCECond(TI); 549 return true; 550 } 551 552 SwitchInst *SI = cast<SwitchInst>(TI); 553 // Okay, TI has cases that are statically dead, prune them away. 554 SmallPtrSet<Constant*, 16> DeadCases; 555 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 556 DeadCases.insert(PredCases[i].first); 557 558 DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator() 559 << "Through successor TI: " << *TI); 560 561 for (unsigned i = SI->getNumCases()-1; i != 0; --i) 562 if (DeadCases.count(SI->getCaseValue(i))) { 563 SI->getSuccessor(i)->removePredecessor(TI->getParent()); 564 SI->removeCase(i); 565 } 566 567 DEBUG(dbgs() << "Leaving: " << *TI << "\n"); 568 return true; 569 } 570 571 // Otherwise, TI's block must correspond to some matched value. Find out 572 // which value (or set of values) this is. 573 ConstantInt *TIV = 0; 574 BasicBlock *TIBB = TI->getParent(); 575 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 576 if (PredCases[i].second == TIBB) { 577 if (TIV != 0) 578 return false; // Cannot handle multiple values coming to this block. 579 TIV = PredCases[i].first; 580 } 581 assert(TIV && "No edge from pred to succ?"); 582 583 // Okay, we found the one constant that our value can be if we get into TI's 584 // BB. Find out which successor will unconditionally be branched to. 585 BasicBlock *TheRealDest = 0; 586 for (unsigned i = 0, e = ThisCases.size(); i != e; ++i) 587 if (ThisCases[i].first == TIV) { 588 TheRealDest = ThisCases[i].second; 589 break; 590 } 591 592 // If not handled by any explicit cases, it is handled by the default case. 593 if (TheRealDest == 0) TheRealDest = ThisDef; 594 595 // Remove PHI node entries for dead edges. 596 BasicBlock *CheckEdge = TheRealDest; 597 for (succ_iterator SI = succ_begin(TIBB), e = succ_end(TIBB); SI != e; ++SI) 598 if (*SI != CheckEdge) 599 (*SI)->removePredecessor(TIBB); 600 else 601 CheckEdge = 0; 602 603 // Insert the new branch. 604 Instruction *NI = BranchInst::Create(TheRealDest, TI); 605 (void) NI; 606 607 DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator() 608 << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n"); 609 610 EraseTerminatorInstAndDCECond(TI); 611 return true; 612 } 613 614 namespace { 615 /// ConstantIntOrdering - This class implements a stable ordering of constant 616 /// integers that does not depend on their address. This is important for 617 /// applications that sort ConstantInt's to ensure uniqueness. 618 struct ConstantIntOrdering { 619 bool operator()(const ConstantInt *LHS, const ConstantInt *RHS) const { 620 return LHS->getValue().ult(RHS->getValue()); 621 } 622 }; 623 } 624 625 static int ConstantIntSortPredicate(const void *P1, const void *P2) { 626 const ConstantInt *LHS = *(const ConstantInt**)P1; 627 const ConstantInt *RHS = *(const ConstantInt**)P2; 628 if (LHS->getValue().ult(RHS->getValue())) 629 return 1; 630 if (LHS->getValue() == RHS->getValue()) 631 return 0; 632 return -1; 633 } 634 635 /// FoldValueComparisonIntoPredecessors - The specified terminator is a value 636 /// equality comparison instruction (either a switch or a branch on "X == c"). 637 /// See if any of the predecessors of the terminator block are value comparisons 638 /// on the same value. If so, and if safe to do so, fold them together. 639 bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(TerminatorInst *TI) { 640 BasicBlock *BB = TI->getParent(); 641 Value *CV = isValueEqualityComparison(TI); // CondVal 642 assert(CV && "Not a comparison?"); 643 bool Changed = false; 644 645 SmallVector<BasicBlock*, 16> Preds(pred_begin(BB), pred_end(BB)); 646 while (!Preds.empty()) { 647 BasicBlock *Pred = Preds.pop_back_val(); 648 649 // See if the predecessor is a comparison with the same value. 650 TerminatorInst *PTI = Pred->getTerminator(); 651 Value *PCV = isValueEqualityComparison(PTI); // PredCondVal 652 653 if (PCV == CV && SafeToMergeTerminators(TI, PTI)) { 654 // Figure out which 'cases' to copy from SI to PSI. 655 std::vector<std::pair<ConstantInt*, BasicBlock*> > BBCases; 656 BasicBlock *BBDefault = GetValueEqualityComparisonCases(TI, BBCases); 657 658 std::vector<std::pair<ConstantInt*, BasicBlock*> > PredCases; 659 BasicBlock *PredDefault = GetValueEqualityComparisonCases(PTI, PredCases); 660 661 // Based on whether the default edge from PTI goes to BB or not, fill in 662 // PredCases and PredDefault with the new switch cases we would like to 663 // build. 664 SmallVector<BasicBlock*, 8> NewSuccessors; 665 666 if (PredDefault == BB) { 667 // If this is the default destination from PTI, only the edges in TI 668 // that don't occur in PTI, or that branch to BB will be activated. 669 std::set<ConstantInt*, ConstantIntOrdering> PTIHandled; 670 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 671 if (PredCases[i].second != BB) 672 PTIHandled.insert(PredCases[i].first); 673 else { 674 // The default destination is BB, we don't need explicit targets. 675 std::swap(PredCases[i], PredCases.back()); 676 PredCases.pop_back(); 677 --i; --e; 678 } 679 680 // Reconstruct the new switch statement we will be building. 681 if (PredDefault != BBDefault) { 682 PredDefault->removePredecessor(Pred); 683 PredDefault = BBDefault; 684 NewSuccessors.push_back(BBDefault); 685 } 686 for (unsigned i = 0, e = BBCases.size(); i != e; ++i) 687 if (!PTIHandled.count(BBCases[i].first) && 688 BBCases[i].second != BBDefault) { 689 PredCases.push_back(BBCases[i]); 690 NewSuccessors.push_back(BBCases[i].second); 691 } 692 693 } else { 694 // If this is not the default destination from PSI, only the edges 695 // in SI that occur in PSI with a destination of BB will be 696 // activated. 697 std::set<ConstantInt*, ConstantIntOrdering> PTIHandled; 698 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 699 if (PredCases[i].second == BB) { 700 PTIHandled.insert(PredCases[i].first); 701 std::swap(PredCases[i], PredCases.back()); 702 PredCases.pop_back(); 703 --i; --e; 704 } 705 706 // Okay, now we know which constants were sent to BB from the 707 // predecessor. Figure out where they will all go now. 708 for (unsigned i = 0, e = BBCases.size(); i != e; ++i) 709 if (PTIHandled.count(BBCases[i].first)) { 710 // If this is one we are capable of getting... 711 PredCases.push_back(BBCases[i]); 712 NewSuccessors.push_back(BBCases[i].second); 713 PTIHandled.erase(BBCases[i].first);// This constant is taken care of 714 } 715 716 // If there are any constants vectored to BB that TI doesn't handle, 717 // they must go to the default destination of TI. 718 for (std::set<ConstantInt*, ConstantIntOrdering>::iterator I = 719 PTIHandled.begin(), 720 E = PTIHandled.end(); I != E; ++I) { 721 PredCases.push_back(std::make_pair(*I, BBDefault)); 722 NewSuccessors.push_back(BBDefault); 723 } 724 } 725 726 // Okay, at this point, we know which new successor Pred will get. Make 727 // sure we update the number of entries in the PHI nodes for these 728 // successors. 729 for (unsigned i = 0, e = NewSuccessors.size(); i != e; ++i) 730 AddPredecessorToBlock(NewSuccessors[i], Pred, BB); 731 732 // Convert pointer to int before we switch. 733 if (CV->getType()->isPointerTy()) { 734 assert(TD && "Cannot switch on pointer without TargetData"); 735 CV = new PtrToIntInst(CV, TD->getIntPtrType(CV->getContext()), 736 "magicptr", PTI); 737 } 738 739 // Now that the successors are updated, create the new Switch instruction. 740 SwitchInst *NewSI = SwitchInst::Create(CV, PredDefault, 741 PredCases.size(), PTI); 742 for (unsigned i = 0, e = PredCases.size(); i != e; ++i) 743 NewSI->addCase(PredCases[i].first, PredCases[i].second); 744 745 EraseTerminatorInstAndDCECond(PTI); 746 747 // Okay, last check. If BB is still a successor of PSI, then we must 748 // have an infinite loop case. If so, add an infinitely looping block 749 // to handle the case to preserve the behavior of the code. 750 BasicBlock *InfLoopBlock = 0; 751 for (unsigned i = 0, e = NewSI->getNumSuccessors(); i != e; ++i) 752 if (NewSI->getSuccessor(i) == BB) { 753 if (InfLoopBlock == 0) { 754 // Insert it at the end of the function, because it's either code, 755 // or it won't matter if it's hot. :) 756 InfLoopBlock = BasicBlock::Create(BB->getContext(), 757 "infloop", BB->getParent()); 758 BranchInst::Create(InfLoopBlock, InfLoopBlock); 759 } 760 NewSI->setSuccessor(i, InfLoopBlock); 761 } 762 763 Changed = true; 764 } 765 } 766 return Changed; 767 } 768 769 // isSafeToHoistInvoke - If we would need to insert a select that uses the 770 // value of this invoke (comments in HoistThenElseCodeToIf explain why we 771 // would need to do this), we can't hoist the invoke, as there is nowhere 772 // to put the select in this case. 773 static bool isSafeToHoistInvoke(BasicBlock *BB1, BasicBlock *BB2, 774 Instruction *I1, Instruction *I2) { 775 for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) { 776 PHINode *PN; 777 for (BasicBlock::iterator BBI = SI->begin(); 778 (PN = dyn_cast<PHINode>(BBI)); ++BBI) { 779 Value *BB1V = PN->getIncomingValueForBlock(BB1); 780 Value *BB2V = PN->getIncomingValueForBlock(BB2); 781 if (BB1V != BB2V && (BB1V==I1 || BB2V==I2)) { 782 return false; 783 } 784 } 785 } 786 return true; 787 } 788 789 /// HoistThenElseCodeToIf - Given a conditional branch that goes to BB1 and 790 /// BB2, hoist any common code in the two blocks up into the branch block. The 791 /// caller of this function guarantees that BI's block dominates BB1 and BB2. 792 static bool HoistThenElseCodeToIf(BranchInst *BI) { 793 // This does very trivial matching, with limited scanning, to find identical 794 // instructions in the two blocks. In particular, we don't want to get into 795 // O(M*N) situations here where M and N are the sizes of BB1 and BB2. As 796 // such, we currently just scan for obviously identical instructions in an 797 // identical order. 798 BasicBlock *BB1 = BI->getSuccessor(0); // The true destination. 799 BasicBlock *BB2 = BI->getSuccessor(1); // The false destination 800 801 BasicBlock::iterator BB1_Itr = BB1->begin(); 802 BasicBlock::iterator BB2_Itr = BB2->begin(); 803 804 Instruction *I1 = BB1_Itr++, *I2 = BB2_Itr++; 805 while (isa<DbgInfoIntrinsic>(I1)) 806 I1 = BB1_Itr++; 807 while (isa<DbgInfoIntrinsic>(I2)) 808 I2 = BB2_Itr++; 809 if (I1->getOpcode() != I2->getOpcode() || isa<PHINode>(I1) || 810 !I1->isIdenticalToWhenDefined(I2) || 811 (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2))) 812 return false; 813 814 // If we get here, we can hoist at least one instruction. 815 BasicBlock *BIParent = BI->getParent(); 816 817 do { 818 // If we are hoisting the terminator instruction, don't move one (making a 819 // broken BB), instead clone it, and remove BI. 820 if (isa<TerminatorInst>(I1)) 821 goto HoistTerminator; 822 823 // For a normal instruction, we just move one to right before the branch, 824 // then replace all uses of the other with the first. Finally, we remove 825 // the now redundant second instruction. 826 BIParent->getInstList().splice(BI, BB1->getInstList(), I1); 827 if (!I2->use_empty()) 828 I2->replaceAllUsesWith(I1); 829 I1->intersectOptionalDataWith(I2); 830 I2->eraseFromParent(); 831 832 I1 = BB1_Itr++; 833 while (isa<DbgInfoIntrinsic>(I1)) 834 I1 = BB1_Itr++; 835 I2 = BB2_Itr++; 836 while (isa<DbgInfoIntrinsic>(I2)) 837 I2 = BB2_Itr++; 838 } while (I1->getOpcode() == I2->getOpcode() && 839 I1->isIdenticalToWhenDefined(I2)); 840 841 return true; 842 843 HoistTerminator: 844 // It may not be possible to hoist an invoke. 845 if (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2)) 846 return true; 847 848 // Okay, it is safe to hoist the terminator. 849 Instruction *NT = I1->clone(); 850 BIParent->getInstList().insert(BI, NT); 851 if (!NT->getType()->isVoidTy()) { 852 I1->replaceAllUsesWith(NT); 853 I2->replaceAllUsesWith(NT); 854 NT->takeName(I1); 855 } 856 857 // Hoisting one of the terminators from our successor is a great thing. 858 // Unfortunately, the successors of the if/else blocks may have PHI nodes in 859 // them. If they do, all PHI entries for BB1/BB2 must agree for all PHI 860 // nodes, so we insert select instruction to compute the final result. 861 std::map<std::pair<Value*,Value*>, SelectInst*> InsertedSelects; 862 for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) { 863 PHINode *PN; 864 for (BasicBlock::iterator BBI = SI->begin(); 865 (PN = dyn_cast<PHINode>(BBI)); ++BBI) { 866 Value *BB1V = PN->getIncomingValueForBlock(BB1); 867 Value *BB2V = PN->getIncomingValueForBlock(BB2); 868 if (BB1V == BB2V) continue; 869 870 // These values do not agree. Insert a select instruction before NT 871 // that determines the right value. 872 SelectInst *&SI = InsertedSelects[std::make_pair(BB1V, BB2V)]; 873 if (SI == 0) 874 SI = SelectInst::Create(BI->getCondition(), BB1V, BB2V, 875 BB1V->getName()+"."+BB2V->getName(), NT); 876 // Make the PHI node use the select for all incoming values for BB1/BB2 877 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) 878 if (PN->getIncomingBlock(i) == BB1 || PN->getIncomingBlock(i) == BB2) 879 PN->setIncomingValue(i, SI); 880 } 881 } 882 883 // Update any PHI nodes in our new successors. 884 for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) 885 AddPredecessorToBlock(*SI, BIParent, BB1); 886 887 EraseTerminatorInstAndDCECond(BI); 888 return true; 889 } 890 891 /// SpeculativelyExecuteBB - Given a conditional branch that goes to BB1 892 /// and an BB2 and the only successor of BB1 is BB2, hoist simple code 893 /// (for now, restricted to a single instruction that's side effect free) from 894 /// the BB1 into the branch block to speculatively execute it. 895 static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) { 896 // Only speculatively execution a single instruction (not counting the 897 // terminator) for now. 898 Instruction *HInst = NULL; 899 Instruction *Term = BB1->getTerminator(); 900 for (BasicBlock::iterator BBI = BB1->begin(), BBE = BB1->end(); 901 BBI != BBE; ++BBI) { 902 Instruction *I = BBI; 903 // Skip debug info. 904 if (isa<DbgInfoIntrinsic>(I)) continue; 905 if (I == Term) break; 906 907 if (HInst) 908 return false; 909 HInst = I; 910 } 911 if (!HInst) 912 return false; 913 914 // Be conservative for now. FP select instruction can often be expensive. 915 Value *BrCond = BI->getCondition(); 916 if (isa<FCmpInst>(BrCond)) 917 return false; 918 919 // If BB1 is actually on the false edge of the conditional branch, remember 920 // to swap the select operands later. 921 bool Invert = false; 922 if (BB1 != BI->getSuccessor(0)) { 923 assert(BB1 == BI->getSuccessor(1) && "No edge from 'if' block?"); 924 Invert = true; 925 } 926 927 // Turn 928 // BB: 929 // %t1 = icmp 930 // br i1 %t1, label %BB1, label %BB2 931 // BB1: 932 // %t3 = add %t2, c 933 // br label BB2 934 // BB2: 935 // => 936 // BB: 937 // %t1 = icmp 938 // %t4 = add %t2, c 939 // %t3 = select i1 %t1, %t2, %t3 940 switch (HInst->getOpcode()) { 941 default: return false; // Not safe / profitable to hoist. 942 case Instruction::Add: 943 case Instruction::Sub: 944 // Not worth doing for vector ops. 945 if (HInst->getType()->isVectorTy()) 946 return false; 947 break; 948 case Instruction::And: 949 case Instruction::Or: 950 case Instruction::Xor: 951 case Instruction::Shl: 952 case Instruction::LShr: 953 case Instruction::AShr: 954 // Don't mess with vector operations. 955 if (HInst->getType()->isVectorTy()) 956 return false; 957 break; // These are all cheap and non-trapping instructions. 958 } 959 960 // If the instruction is obviously dead, don't try to predicate it. 961 if (HInst->use_empty()) { 962 HInst->eraseFromParent(); 963 return true; 964 } 965 966 // Can we speculatively execute the instruction? And what is the value 967 // if the condition is false? Consider the phi uses, if the incoming value 968 // from the "if" block are all the same V, then V is the value of the 969 // select if the condition is false. 970 BasicBlock *BIParent = BI->getParent(); 971 SmallVector<PHINode*, 4> PHIUses; 972 Value *FalseV = NULL; 973 974 BasicBlock *BB2 = BB1->getTerminator()->getSuccessor(0); 975 for (Value::use_iterator UI = HInst->use_begin(), E = HInst->use_end(); 976 UI != E; ++UI) { 977 // Ignore any user that is not a PHI node in BB2. These can only occur in 978 // unreachable blocks, because they would not be dominated by the instr. 979 PHINode *PN = dyn_cast<PHINode>(*UI); 980 if (!PN || PN->getParent() != BB2) 981 return false; 982 PHIUses.push_back(PN); 983 984 Value *PHIV = PN->getIncomingValueForBlock(BIParent); 985 if (!FalseV) 986 FalseV = PHIV; 987 else if (FalseV != PHIV) 988 return false; // Inconsistent value when condition is false. 989 } 990 991 assert(FalseV && "Must have at least one user, and it must be a PHI"); 992 993 // Do not hoist the instruction if any of its operands are defined but not 994 // used in this BB. The transformation will prevent the operand from 995 // being sunk into the use block. 996 for (User::op_iterator i = HInst->op_begin(), e = HInst->op_end(); 997 i != e; ++i) { 998 Instruction *OpI = dyn_cast<Instruction>(*i); 999 if (OpI && OpI->getParent() == BIParent && 1000 !OpI->isUsedInBasicBlock(BIParent)) 1001 return false; 1002 } 1003 1004 // If we get here, we can hoist the instruction. Try to place it 1005 // before the icmp instruction preceding the conditional branch. 1006 BasicBlock::iterator InsertPos = BI; 1007 if (InsertPos != BIParent->begin()) 1008 --InsertPos; 1009 // Skip debug info between condition and branch. 1010 while (InsertPos != BIParent->begin() && isa<DbgInfoIntrinsic>(InsertPos)) 1011 --InsertPos; 1012 if (InsertPos == BrCond && !isa<PHINode>(BrCond)) { 1013 SmallPtrSet<Instruction *, 4> BB1Insns; 1014 for(BasicBlock::iterator BB1I = BB1->begin(), BB1E = BB1->end(); 1015 BB1I != BB1E; ++BB1I) 1016 BB1Insns.insert(BB1I); 1017 for(Value::use_iterator UI = BrCond->use_begin(), UE = BrCond->use_end(); 1018 UI != UE; ++UI) { 1019 Instruction *Use = cast<Instruction>(*UI); 1020 if (!BB1Insns.count(Use)) continue; 1021 1022 // If BrCond uses the instruction that place it just before 1023 // branch instruction. 1024 InsertPos = BI; 1025 break; 1026 } 1027 } else 1028 InsertPos = BI; 1029 BIParent->getInstList().splice(InsertPos, BB1->getInstList(), HInst); 1030 1031 // Create a select whose true value is the speculatively executed value and 1032 // false value is the previously determined FalseV. 1033 SelectInst *SI; 1034 if (Invert) 1035 SI = SelectInst::Create(BrCond, FalseV, HInst, 1036 FalseV->getName() + "." + HInst->getName(), BI); 1037 else 1038 SI = SelectInst::Create(BrCond, HInst, FalseV, 1039 HInst->getName() + "." + FalseV->getName(), BI); 1040 1041 // Make the PHI node use the select for all incoming values for "then" and 1042 // "if" blocks. 1043 for (unsigned i = 0, e = PHIUses.size(); i != e; ++i) { 1044 PHINode *PN = PHIUses[i]; 1045 for (unsigned j = 0, ee = PN->getNumIncomingValues(); j != ee; ++j) 1046 if (PN->getIncomingBlock(j) == BB1 || PN->getIncomingBlock(j) == BIParent) 1047 PN->setIncomingValue(j, SI); 1048 } 1049 1050 ++NumSpeculations; 1051 return true; 1052 } 1053 1054 /// BlockIsSimpleEnoughToThreadThrough - Return true if we can thread a branch 1055 /// across this block. 1056 static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB) { 1057 BranchInst *BI = cast<BranchInst>(BB->getTerminator()); 1058 unsigned Size = 0; 1059 1060 for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) { 1061 if (isa<DbgInfoIntrinsic>(BBI)) 1062 continue; 1063 if (Size > 10) return false; // Don't clone large BB's. 1064 ++Size; 1065 1066 // We can only support instructions that do not define values that are 1067 // live outside of the current basic block. 1068 for (Value::use_iterator UI = BBI->use_begin(), E = BBI->use_end(); 1069 UI != E; ++UI) { 1070 Instruction *U = cast<Instruction>(*UI); 1071 if (U->getParent() != BB || isa<PHINode>(U)) return false; 1072 } 1073 1074 // Looks ok, continue checking. 1075 } 1076 1077 return true; 1078 } 1079 1080 /// FoldCondBranchOnPHI - If we have a conditional branch on a PHI node value 1081 /// that is defined in the same block as the branch and if any PHI entries are 1082 /// constants, thread edges corresponding to that entry to be branches to their 1083 /// ultimate destination. 1084 static bool FoldCondBranchOnPHI(BranchInst *BI, const TargetData *TD) { 1085 BasicBlock *BB = BI->getParent(); 1086 PHINode *PN = dyn_cast<PHINode>(BI->getCondition()); 1087 // NOTE: we currently cannot transform this case if the PHI node is used 1088 // outside of the block. 1089 if (!PN || PN->getParent() != BB || !PN->hasOneUse()) 1090 return false; 1091 1092 // Degenerate case of a single entry PHI. 1093 if (PN->getNumIncomingValues() == 1) { 1094 FoldSingleEntryPHINodes(PN->getParent()); 1095 return true; 1096 } 1097 1098 // Now we know that this block has multiple preds and two succs. 1099 if (!BlockIsSimpleEnoughToThreadThrough(BB)) return false; 1100 1101 // Okay, this is a simple enough basic block. See if any phi values are 1102 // constants. 1103 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { 1104 ConstantInt *CB = dyn_cast<ConstantInt>(PN->getIncomingValue(i)); 1105 if (CB == 0 || !CB->getType()->isIntegerTy(1)) continue; 1106 1107 // Okay, we now know that all edges from PredBB should be revectored to 1108 // branch to RealDest. 1109 BasicBlock *PredBB = PN->getIncomingBlock(i); 1110 BasicBlock *RealDest = BI->getSuccessor(!CB->getZExtValue()); 1111 1112 if (RealDest == BB) continue; // Skip self loops. 1113 1114 // The dest block might have PHI nodes, other predecessors and other 1115 // difficult cases. Instead of being smart about this, just insert a new 1116 // block that jumps to the destination block, effectively splitting 1117 // the edge we are about to create. 1118 BasicBlock *EdgeBB = BasicBlock::Create(BB->getContext(), 1119 RealDest->getName()+".critedge", 1120 RealDest->getParent(), RealDest); 1121 BranchInst::Create(RealDest, EdgeBB); 1122 1123 // Update PHI nodes. 1124 AddPredecessorToBlock(RealDest, EdgeBB, BB); 1125 1126 // BB may have instructions that are being threaded over. Clone these 1127 // instructions into EdgeBB. We know that there will be no uses of the 1128 // cloned instructions outside of EdgeBB. 1129 BasicBlock::iterator InsertPt = EdgeBB->begin(); 1130 DenseMap<Value*, Value*> TranslateMap; // Track translated values. 1131 for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) { 1132 if (PHINode *PN = dyn_cast<PHINode>(BBI)) { 1133 TranslateMap[PN] = PN->getIncomingValueForBlock(PredBB); 1134 continue; 1135 } 1136 // Clone the instruction. 1137 Instruction *N = BBI->clone(); 1138 if (BBI->hasName()) N->setName(BBI->getName()+".c"); 1139 1140 // Update operands due to translation. 1141 for (User::op_iterator i = N->op_begin(), e = N->op_end(); 1142 i != e; ++i) { 1143 DenseMap<Value*, Value*>::iterator PI = TranslateMap.find(*i); 1144 if (PI != TranslateMap.end()) 1145 *i = PI->second; 1146 } 1147 1148 // Check for trivial simplification. 1149 if (Value *V = SimplifyInstruction(N, TD)) { 1150 TranslateMap[BBI] = V; 1151 delete N; // Instruction folded away, don't need actual inst 1152 } else { 1153 // Insert the new instruction into its new home. 1154 EdgeBB->getInstList().insert(InsertPt, N); 1155 if (!BBI->use_empty()) 1156 TranslateMap[BBI] = N; 1157 } 1158 } 1159 1160 // Loop over all of the edges from PredBB to BB, changing them to branch 1161 // to EdgeBB instead. 1162 TerminatorInst *PredBBTI = PredBB->getTerminator(); 1163 for (unsigned i = 0, e = PredBBTI->getNumSuccessors(); i != e; ++i) 1164 if (PredBBTI->getSuccessor(i) == BB) { 1165 BB->removePredecessor(PredBB); 1166 PredBBTI->setSuccessor(i, EdgeBB); 1167 } 1168 1169 // Recurse, simplifying any other constants. 1170 return FoldCondBranchOnPHI(BI, TD) | true; 1171 } 1172 1173 return false; 1174 } 1175 1176 /// FoldTwoEntryPHINode - Given a BB that starts with the specified two-entry 1177 /// PHI node, see if we can eliminate it. 1178 static bool FoldTwoEntryPHINode(PHINode *PN, const TargetData *TD) { 1179 // Ok, this is a two entry PHI node. Check to see if this is a simple "if 1180 // statement", which has a very simple dominance structure. Basically, we 1181 // are trying to find the condition that is being branched on, which 1182 // subsequently causes this merge to happen. We really want control 1183 // dependence information for this check, but simplifycfg can't keep it up 1184 // to date, and this catches most of the cases we care about anyway. 1185 BasicBlock *BB = PN->getParent(); 1186 BasicBlock *IfTrue, *IfFalse; 1187 Value *IfCond = GetIfCondition(BB, IfTrue, IfFalse); 1188 if (!IfCond || 1189 // Don't bother if the branch will be constant folded trivially. 1190 isa<ConstantInt>(IfCond)) 1191 return false; 1192 1193 // Okay, we found that we can merge this two-entry phi node into a select. 1194 // Doing so would require us to fold *all* two entry phi nodes in this block. 1195 // At some point this becomes non-profitable (particularly if the target 1196 // doesn't support cmov's). Only do this transformation if there are two or 1197 // fewer PHI nodes in this block. 1198 unsigned NumPhis = 0; 1199 for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++NumPhis, ++I) 1200 if (NumPhis > 2) 1201 return false; 1202 1203 // Loop over the PHI's seeing if we can promote them all to select 1204 // instructions. While we are at it, keep track of the instructions 1205 // that need to be moved to the dominating block. 1206 SmallPtrSet<Instruction*, 4> AggressiveInsts; 1207 1208 for (BasicBlock::iterator II = BB->begin(); isa<PHINode>(II);) { 1209 PHINode *PN = cast<PHINode>(II++); 1210 if (Value *V = SimplifyInstruction(PN, TD)) { 1211 PN->replaceAllUsesWith(V); 1212 PN->eraseFromParent(); 1213 continue; 1214 } 1215 1216 if (!DominatesMergePoint(PN->getIncomingValue(0), BB, &AggressiveInsts) || 1217 !DominatesMergePoint(PN->getIncomingValue(1), BB, &AggressiveInsts)) 1218 return false; 1219 } 1220 1221 // If we folded the the first phi, PN dangles at this point. Refresh it. If 1222 // we ran out of PHIs then we simplified them all. 1223 PN = dyn_cast<PHINode>(BB->begin()); 1224 if (PN == 0) return true; 1225 1226 // Don't fold i1 branches on PHIs which contain binary operators. These can 1227 // often be turned into switches and other things. 1228 if (PN->getType()->isIntegerTy(1) && 1229 (isa<BinaryOperator>(PN->getIncomingValue(0)) || 1230 isa<BinaryOperator>(PN->getIncomingValue(1)) || 1231 isa<BinaryOperator>(IfCond))) 1232 return false; 1233 1234 // If we all PHI nodes are promotable, check to make sure that all 1235 // instructions in the predecessor blocks can be promoted as well. If 1236 // not, we won't be able to get rid of the control flow, so it's not 1237 // worth promoting to select instructions. 1238 BasicBlock *DomBlock = 0; 1239 BasicBlock *IfBlock1 = PN->getIncomingBlock(0); 1240 BasicBlock *IfBlock2 = PN->getIncomingBlock(1); 1241 if (cast<BranchInst>(IfBlock1->getTerminator())->isConditional()) { 1242 IfBlock1 = 0; 1243 } else { 1244 DomBlock = *pred_begin(IfBlock1); 1245 for (BasicBlock::iterator I = IfBlock1->begin();!isa<TerminatorInst>(I);++I) 1246 if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) { 1247 // This is not an aggressive instruction that we can promote. 1248 // Because of this, we won't be able to get rid of the control 1249 // flow, so the xform is not worth it. 1250 return false; 1251 } 1252 } 1253 1254 if (cast<BranchInst>(IfBlock2->getTerminator())->isConditional()) { 1255 IfBlock2 = 0; 1256 } else { 1257 DomBlock = *pred_begin(IfBlock2); 1258 for (BasicBlock::iterator I = IfBlock2->begin();!isa<TerminatorInst>(I);++I) 1259 if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) { 1260 // This is not an aggressive instruction that we can promote. 1261 // Because of this, we won't be able to get rid of the control 1262 // flow, so the xform is not worth it. 1263 return false; 1264 } 1265 } 1266 1267 DEBUG(dbgs() << "FOUND IF CONDITION! " << *IfCond << " T: " 1268 << IfTrue->getName() << " F: " << IfFalse->getName() << "\n"); 1269 1270 // If we can still promote the PHI nodes after this gauntlet of tests, 1271 // do all of the PHI's now. 1272 Instruction *InsertPt = DomBlock->getTerminator(); 1273 1274 // Move all 'aggressive' instructions, which are defined in the 1275 // conditional parts of the if's up to the dominating block. 1276 if (IfBlock1) 1277 DomBlock->getInstList().splice(InsertPt, 1278 IfBlock1->getInstList(), IfBlock1->begin(), 1279 IfBlock1->getTerminator()); 1280 if (IfBlock2) 1281 DomBlock->getInstList().splice(InsertPt, 1282 IfBlock2->getInstList(), IfBlock2->begin(), 1283 IfBlock2->getTerminator()); 1284 1285 while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) { 1286 // Change the PHI node into a select instruction. 1287 Value *TrueVal = PN->getIncomingValue(PN->getIncomingBlock(0) == IfFalse); 1288 Value *FalseVal = PN->getIncomingValue(PN->getIncomingBlock(0) == IfTrue); 1289 1290 Value *NV = SelectInst::Create(IfCond, TrueVal, FalseVal, "", InsertPt); 1291 PN->replaceAllUsesWith(NV); 1292 NV->takeName(PN); 1293 PN->eraseFromParent(); 1294 } 1295 1296 // At this point, IfBlock1 and IfBlock2 are both empty, so our if statement 1297 // has been flattened. Change DomBlock to jump directly to our new block to 1298 // avoid other simplifycfg's kicking in on the diamond. 1299 TerminatorInst *OldTI = DomBlock->getTerminator(); 1300 BranchInst::Create(BB, OldTI); 1301 OldTI->eraseFromParent(); 1302 return true; 1303 } 1304 1305 /// SimplifyCondBranchToTwoReturns - If we found a conditional branch that goes 1306 /// to two returning blocks, try to merge them together into one return, 1307 /// introducing a select if the return values disagree. 1308 static bool SimplifyCondBranchToTwoReturns(BranchInst *BI) { 1309 assert(BI->isConditional() && "Must be a conditional branch"); 1310 BasicBlock *TrueSucc = BI->getSuccessor(0); 1311 BasicBlock *FalseSucc = BI->getSuccessor(1); 1312 ReturnInst *TrueRet = cast<ReturnInst>(TrueSucc->getTerminator()); 1313 ReturnInst *FalseRet = cast<ReturnInst>(FalseSucc->getTerminator()); 1314 1315 // Check to ensure both blocks are empty (just a return) or optionally empty 1316 // with PHI nodes. If there are other instructions, merging would cause extra 1317 // computation on one path or the other. 1318 if (!TrueSucc->getFirstNonPHIOrDbg()->isTerminator()) 1319 return false; 1320 if (!FalseSucc->getFirstNonPHIOrDbg()->isTerminator()) 1321 return false; 1322 1323 // Okay, we found a branch that is going to two return nodes. If 1324 // there is no return value for this function, just change the 1325 // branch into a return. 1326 if (FalseRet->getNumOperands() == 0) { 1327 TrueSucc->removePredecessor(BI->getParent()); 1328 FalseSucc->removePredecessor(BI->getParent()); 1329 ReturnInst::Create(BI->getContext(), 0, BI); 1330 EraseTerminatorInstAndDCECond(BI); 1331 return true; 1332 } 1333 1334 // Otherwise, figure out what the true and false return values are 1335 // so we can insert a new select instruction. 1336 Value *TrueValue = TrueRet->getReturnValue(); 1337 Value *FalseValue = FalseRet->getReturnValue(); 1338 1339 // Unwrap any PHI nodes in the return blocks. 1340 if (PHINode *TVPN = dyn_cast_or_null<PHINode>(TrueValue)) 1341 if (TVPN->getParent() == TrueSucc) 1342 TrueValue = TVPN->getIncomingValueForBlock(BI->getParent()); 1343 if (PHINode *FVPN = dyn_cast_or_null<PHINode>(FalseValue)) 1344 if (FVPN->getParent() == FalseSucc) 1345 FalseValue = FVPN->getIncomingValueForBlock(BI->getParent()); 1346 1347 // In order for this transformation to be safe, we must be able to 1348 // unconditionally execute both operands to the return. This is 1349 // normally the case, but we could have a potentially-trapping 1350 // constant expression that prevents this transformation from being 1351 // safe. 1352 if (ConstantExpr *TCV = dyn_cast_or_null<ConstantExpr>(TrueValue)) 1353 if (TCV->canTrap()) 1354 return false; 1355 if (ConstantExpr *FCV = dyn_cast_or_null<ConstantExpr>(FalseValue)) 1356 if (FCV->canTrap()) 1357 return false; 1358 1359 // Okay, we collected all the mapped values and checked them for sanity, and 1360 // defined to really do this transformation. First, update the CFG. 1361 TrueSucc->removePredecessor(BI->getParent()); 1362 FalseSucc->removePredecessor(BI->getParent()); 1363 1364 // Insert select instructions where needed. 1365 Value *BrCond = BI->getCondition(); 1366 if (TrueValue) { 1367 // Insert a select if the results differ. 1368 if (TrueValue == FalseValue || isa<UndefValue>(FalseValue)) { 1369 } else if (isa<UndefValue>(TrueValue)) { 1370 TrueValue = FalseValue; 1371 } else { 1372 TrueValue = SelectInst::Create(BrCond, TrueValue, 1373 FalseValue, "retval", BI); 1374 } 1375 } 1376 1377 Value *RI = !TrueValue ? 1378 ReturnInst::Create(BI->getContext(), BI) : 1379 ReturnInst::Create(BI->getContext(), TrueValue, BI); 1380 (void) RI; 1381 1382 DEBUG(dbgs() << "\nCHANGING BRANCH TO TWO RETURNS INTO SELECT:" 1383 << "\n " << *BI << "NewRet = " << *RI 1384 << "TRUEBLOCK: " << *TrueSucc << "FALSEBLOCK: "<< *FalseSucc); 1385 1386 EraseTerminatorInstAndDCECond(BI); 1387 1388 return true; 1389 } 1390 1391 /// FoldBranchToCommonDest - If this basic block is ONLY a setcc and a branch, 1392 /// and if a predecessor branches to us and one of our successors, fold the 1393 /// setcc into the predecessor and use logical operations to pick the right 1394 /// destination. 1395 bool llvm::FoldBranchToCommonDest(BranchInst *BI) { 1396 BasicBlock *BB = BI->getParent(); 1397 Instruction *Cond = dyn_cast<Instruction>(BI->getCondition()); 1398 if (Cond == 0 || (!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond)) || 1399 Cond->getParent() != BB || !Cond->hasOneUse()) 1400 return false; 1401 1402 // Only allow this if the condition is a simple instruction that can be 1403 // executed unconditionally. It must be in the same block as the branch, and 1404 // must be at the front of the block. 1405 BasicBlock::iterator FrontIt = BB->front(); 1406 // Ignore dbg intrinsics. 1407 while (isa<DbgInfoIntrinsic>(FrontIt)) 1408 ++FrontIt; 1409 1410 // Allow a single instruction to be hoisted in addition to the compare 1411 // that feeds the branch. We later ensure that any values that _it_ uses 1412 // were also live in the predecessor, so that we don't unnecessarily create 1413 // register pressure or inhibit out-of-order execution. 1414 Instruction *BonusInst = 0; 1415 if (&*FrontIt != Cond && 1416 FrontIt->hasOneUse() && *FrontIt->use_begin() == Cond && 1417 FrontIt->isSafeToSpeculativelyExecute()) { 1418 BonusInst = &*FrontIt; 1419 ++FrontIt; 1420 } 1421 1422 // Only a single bonus inst is allowed. 1423 if (&*FrontIt != Cond) 1424 return false; 1425 1426 // Make sure the instruction after the condition is the cond branch. 1427 BasicBlock::iterator CondIt = Cond; ++CondIt; 1428 // Ingore dbg intrinsics. 1429 while(isa<DbgInfoIntrinsic>(CondIt)) 1430 ++CondIt; 1431 if (&*CondIt != BI) { 1432 assert (!isa<DbgInfoIntrinsic>(CondIt) && "Hey do not forget debug info!"); 1433 return false; 1434 } 1435 1436 // Cond is known to be a compare or binary operator. Check to make sure that 1437 // neither operand is a potentially-trapping constant expression. 1438 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(0))) 1439 if (CE->canTrap()) 1440 return false; 1441 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(1))) 1442 if (CE->canTrap()) 1443 return false; 1444 1445 1446 // Finally, don't infinitely unroll conditional loops. 1447 BasicBlock *TrueDest = BI->getSuccessor(0); 1448 BasicBlock *FalseDest = BI->getSuccessor(1); 1449 if (TrueDest == BB || FalseDest == BB) 1450 return false; 1451 1452 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { 1453 BasicBlock *PredBlock = *PI; 1454 BranchInst *PBI = dyn_cast<BranchInst>(PredBlock->getTerminator()); 1455 1456 // Check that we have two conditional branches. If there is a PHI node in 1457 // the common successor, verify that the same value flows in from both 1458 // blocks. 1459 if (PBI == 0 || PBI->isUnconditional() || 1460 !SafeToMergeTerminators(BI, PBI)) 1461 continue; 1462 1463 // Ensure that any values used in the bonus instruction are also used 1464 // by the terminator of the predecessor. This means that those values 1465 // must already have been resolved, so we won't be inhibiting the 1466 // out-of-order core by speculating them earlier. 1467 if (BonusInst) { 1468 // Collect the values used by the bonus inst 1469 SmallPtrSet<Value*, 4> UsedValues; 1470 for (Instruction::op_iterator OI = BonusInst->op_begin(), 1471 OE = BonusInst->op_end(); OI != OE; ++OI) { 1472 Value* V = *OI; 1473 if (!isa<Constant>(V)) 1474 UsedValues.insert(V); 1475 } 1476 1477 SmallVector<std::pair<Value*, unsigned>, 4> Worklist; 1478 Worklist.push_back(std::make_pair(PBI->getOperand(0), 0)); 1479 1480 // Walk up to four levels back up the use-def chain of the predecessor's 1481 // terminator to see if all those values were used. The choice of four 1482 // levels is arbitrary, to provide a compile-time-cost bound. 1483 while (!Worklist.empty()) { 1484 std::pair<Value*, unsigned> Pair = Worklist.back(); 1485 Worklist.pop_back(); 1486 1487 if (Pair.second >= 4) continue; 1488 UsedValues.erase(Pair.first); 1489 if (UsedValues.empty()) break; 1490 1491 if (Instruction *I = dyn_cast<Instruction>(Pair.first)) { 1492 for (Instruction::op_iterator OI = I->op_begin(), OE = I->op_end(); 1493 OI != OE; ++OI) 1494 Worklist.push_back(std::make_pair(OI->get(), Pair.second+1)); 1495 } 1496 } 1497 1498 if (!UsedValues.empty()) return false; 1499 } 1500 1501 Instruction::BinaryOps Opc; 1502 bool InvertPredCond = false; 1503 1504 if (PBI->getSuccessor(0) == TrueDest) 1505 Opc = Instruction::Or; 1506 else if (PBI->getSuccessor(1) == FalseDest) 1507 Opc = Instruction::And; 1508 else if (PBI->getSuccessor(0) == FalseDest) 1509 Opc = Instruction::And, InvertPredCond = true; 1510 else if (PBI->getSuccessor(1) == TrueDest) 1511 Opc = Instruction::Or, InvertPredCond = true; 1512 else 1513 continue; 1514 1515 DEBUG(dbgs() << "FOLDING BRANCH TO COMMON DEST:\n" << *PBI << *BB); 1516 1517 // If we need to invert the condition in the pred block to match, do so now. 1518 if (InvertPredCond) { 1519 Value *NewCond = PBI->getCondition(); 1520 1521 if (NewCond->hasOneUse() && isa<CmpInst>(NewCond)) { 1522 CmpInst *CI = cast<CmpInst>(NewCond); 1523 CI->setPredicate(CI->getInversePredicate()); 1524 } else { 1525 NewCond = BinaryOperator::CreateNot(NewCond, 1526 PBI->getCondition()->getName()+".not", PBI); 1527 } 1528 1529 PBI->setCondition(NewCond); 1530 BasicBlock *OldTrue = PBI->getSuccessor(0); 1531 BasicBlock *OldFalse = PBI->getSuccessor(1); 1532 PBI->setSuccessor(0, OldFalse); 1533 PBI->setSuccessor(1, OldTrue); 1534 } 1535 1536 // If we have a bonus inst, clone it into the predecessor block. 1537 Instruction *NewBonus = 0; 1538 if (BonusInst) { 1539 NewBonus = BonusInst->clone(); 1540 PredBlock->getInstList().insert(PBI, NewBonus); 1541 NewBonus->takeName(BonusInst); 1542 BonusInst->setName(BonusInst->getName()+".old"); 1543 } 1544 1545 // Clone Cond into the predecessor basic block, and or/and the 1546 // two conditions together. 1547 Instruction *New = Cond->clone(); 1548 if (BonusInst) New->replaceUsesOfWith(BonusInst, NewBonus); 1549 PredBlock->getInstList().insert(PBI, New); 1550 New->takeName(Cond); 1551 Cond->setName(New->getName()+".old"); 1552 1553 Value *NewCond = BinaryOperator::Create(Opc, PBI->getCondition(), 1554 New, "or.cond", PBI); 1555 PBI->setCondition(NewCond); 1556 if (PBI->getSuccessor(0) == BB) { 1557 AddPredecessorToBlock(TrueDest, PredBlock, BB); 1558 PBI->setSuccessor(0, TrueDest); 1559 } 1560 if (PBI->getSuccessor(1) == BB) { 1561 AddPredecessorToBlock(FalseDest, PredBlock, BB); 1562 PBI->setSuccessor(1, FalseDest); 1563 } 1564 return true; 1565 } 1566 return false; 1567 } 1568 1569 /// SimplifyCondBranchToCondBranch - If we have a conditional branch as a 1570 /// predecessor of another block, this function tries to simplify it. We know 1571 /// that PBI and BI are both conditional branches, and BI is in one of the 1572 /// successor blocks of PBI - PBI branches to BI. 1573 static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI) { 1574 assert(PBI->isConditional() && BI->isConditional()); 1575 BasicBlock *BB = BI->getParent(); 1576 1577 // If this block ends with a branch instruction, and if there is a 1578 // predecessor that ends on a branch of the same condition, make 1579 // this conditional branch redundant. 1580 if (PBI->getCondition() == BI->getCondition() && 1581 PBI->getSuccessor(0) != PBI->getSuccessor(1)) { 1582 // Okay, the outcome of this conditional branch is statically 1583 // knowable. If this block had a single pred, handle specially. 1584 if (BB->getSinglePredecessor()) { 1585 // Turn this into a branch on constant. 1586 bool CondIsTrue = PBI->getSuccessor(0) == BB; 1587 BI->setCondition(ConstantInt::get(Type::getInt1Ty(BB->getContext()), 1588 CondIsTrue)); 1589 return true; // Nuke the branch on constant. 1590 } 1591 1592 // Otherwise, if there are multiple predecessors, insert a PHI that merges 1593 // in the constant and simplify the block result. Subsequent passes of 1594 // simplifycfg will thread the block. 1595 if (BlockIsSimpleEnoughToThreadThrough(BB)) { 1596 PHINode *NewPN = PHINode::Create(Type::getInt1Ty(BB->getContext()), 1597 BI->getCondition()->getName() + ".pr", 1598 BB->begin()); 1599 // Okay, we're going to insert the PHI node. Since PBI is not the only 1600 // predecessor, compute the PHI'd conditional value for all of the preds. 1601 // Any predecessor where the condition is not computable we keep symbolic. 1602 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { 1603 BasicBlock *P = *PI; 1604 if ((PBI = dyn_cast<BranchInst>(P->getTerminator())) && 1605 PBI != BI && PBI->isConditional() && 1606 PBI->getCondition() == BI->getCondition() && 1607 PBI->getSuccessor(0) != PBI->getSuccessor(1)) { 1608 bool CondIsTrue = PBI->getSuccessor(0) == BB; 1609 NewPN->addIncoming(ConstantInt::get(Type::getInt1Ty(BB->getContext()), 1610 CondIsTrue), P); 1611 } else { 1612 NewPN->addIncoming(BI->getCondition(), P); 1613 } 1614 } 1615 1616 BI->setCondition(NewPN); 1617 return true; 1618 } 1619 } 1620 1621 // If this is a conditional branch in an empty block, and if any 1622 // predecessors is a conditional branch to one of our destinations, 1623 // fold the conditions into logical ops and one cond br. 1624 BasicBlock::iterator BBI = BB->begin(); 1625 // Ignore dbg intrinsics. 1626 while (isa<DbgInfoIntrinsic>(BBI)) 1627 ++BBI; 1628 if (&*BBI != BI) 1629 return false; 1630 1631 1632 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BI->getCondition())) 1633 if (CE->canTrap()) 1634 return false; 1635 1636 int PBIOp, BIOp; 1637 if (PBI->getSuccessor(0) == BI->getSuccessor(0)) 1638 PBIOp = BIOp = 0; 1639 else if (PBI->getSuccessor(0) == BI->getSuccessor(1)) 1640 PBIOp = 0, BIOp = 1; 1641 else if (PBI->getSuccessor(1) == BI->getSuccessor(0)) 1642 PBIOp = 1, BIOp = 0; 1643 else if (PBI->getSuccessor(1) == BI->getSuccessor(1)) 1644 PBIOp = BIOp = 1; 1645 else 1646 return false; 1647 1648 // Check to make sure that the other destination of this branch 1649 // isn't BB itself. If so, this is an infinite loop that will 1650 // keep getting unwound. 1651 if (PBI->getSuccessor(PBIOp) == BB) 1652 return false; 1653 1654 // Do not perform this transformation if it would require 1655 // insertion of a large number of select instructions. For targets 1656 // without predication/cmovs, this is a big pessimization. 1657 BasicBlock *CommonDest = PBI->getSuccessor(PBIOp); 1658 1659 unsigned NumPhis = 0; 1660 for (BasicBlock::iterator II = CommonDest->begin(); 1661 isa<PHINode>(II); ++II, ++NumPhis) 1662 if (NumPhis > 2) // Disable this xform. 1663 return false; 1664 1665 // Finally, if everything is ok, fold the branches to logical ops. 1666 BasicBlock *OtherDest = BI->getSuccessor(BIOp ^ 1); 1667 1668 DEBUG(dbgs() << "FOLDING BRs:" << *PBI->getParent() 1669 << "AND: " << *BI->getParent()); 1670 1671 1672 // If OtherDest *is* BB, then BB is a basic block with a single conditional 1673 // branch in it, where one edge (OtherDest) goes back to itself but the other 1674 // exits. We don't *know* that the program avoids the infinite loop 1675 // (even though that seems likely). If we do this xform naively, we'll end up 1676 // recursively unpeeling the loop. Since we know that (after the xform is 1677 // done) that the block *is* infinite if reached, we just make it an obviously 1678 // infinite loop with no cond branch. 1679 if (OtherDest == BB) { 1680 // Insert it at the end of the function, because it's either code, 1681 // or it won't matter if it's hot. :) 1682 BasicBlock *InfLoopBlock = BasicBlock::Create(BB->getContext(), 1683 "infloop", BB->getParent()); 1684 BranchInst::Create(InfLoopBlock, InfLoopBlock); 1685 OtherDest = InfLoopBlock; 1686 } 1687 1688 DEBUG(dbgs() << *PBI->getParent()->getParent()); 1689 1690 // BI may have other predecessors. Because of this, we leave 1691 // it alone, but modify PBI. 1692 1693 // Make sure we get to CommonDest on True&True directions. 1694 Value *PBICond = PBI->getCondition(); 1695 if (PBIOp) 1696 PBICond = BinaryOperator::CreateNot(PBICond, 1697 PBICond->getName()+".not", 1698 PBI); 1699 Value *BICond = BI->getCondition(); 1700 if (BIOp) 1701 BICond = BinaryOperator::CreateNot(BICond, 1702 BICond->getName()+".not", 1703 PBI); 1704 // Merge the conditions. 1705 Value *Cond = BinaryOperator::CreateOr(PBICond, BICond, "brmerge", PBI); 1706 1707 // Modify PBI to branch on the new condition to the new dests. 1708 PBI->setCondition(Cond); 1709 PBI->setSuccessor(0, CommonDest); 1710 PBI->setSuccessor(1, OtherDest); 1711 1712 // OtherDest may have phi nodes. If so, add an entry from PBI's 1713 // block that are identical to the entries for BI's block. 1714 AddPredecessorToBlock(OtherDest, PBI->getParent(), BB); 1715 1716 // We know that the CommonDest already had an edge from PBI to 1717 // it. If it has PHIs though, the PHIs may have different 1718 // entries for BB and PBI's BB. If so, insert a select to make 1719 // them agree. 1720 PHINode *PN; 1721 for (BasicBlock::iterator II = CommonDest->begin(); 1722 (PN = dyn_cast<PHINode>(II)); ++II) { 1723 Value *BIV = PN->getIncomingValueForBlock(BB); 1724 unsigned PBBIdx = PN->getBasicBlockIndex(PBI->getParent()); 1725 Value *PBIV = PN->getIncomingValue(PBBIdx); 1726 if (BIV != PBIV) { 1727 // Insert a select in PBI to pick the right value. 1728 Value *NV = SelectInst::Create(PBICond, PBIV, BIV, 1729 PBIV->getName()+".mux", PBI); 1730 PN->setIncomingValue(PBBIdx, NV); 1731 } 1732 } 1733 1734 DEBUG(dbgs() << "INTO: " << *PBI->getParent()); 1735 DEBUG(dbgs() << *PBI->getParent()->getParent()); 1736 1737 // This basic block is probably dead. We know it has at least 1738 // one fewer predecessor. 1739 return true; 1740 } 1741 1742 // SimplifyTerminatorOnSelect - Simplifies a terminator by replacing it with a 1743 // branch to TrueBB if Cond is true or to FalseBB if Cond is false. 1744 // Takes care of updating the successors and removing the old terminator. 1745 // Also makes sure not to introduce new successors by assuming that edges to 1746 // non-successor TrueBBs and FalseBBs aren't reachable. 1747 static bool SimplifyTerminatorOnSelect(TerminatorInst *OldTerm, Value *Cond, 1748 BasicBlock *TrueBB, BasicBlock *FalseBB){ 1749 // Remove any superfluous successor edges from the CFG. 1750 // First, figure out which successors to preserve. 1751 // If TrueBB and FalseBB are equal, only try to preserve one copy of that 1752 // successor. 1753 BasicBlock *KeepEdge1 = TrueBB; 1754 BasicBlock *KeepEdge2 = TrueBB != FalseBB ? FalseBB : 0; 1755 1756 // Then remove the rest. 1757 for (unsigned I = 0, E = OldTerm->getNumSuccessors(); I != E; ++I) { 1758 BasicBlock *Succ = OldTerm->getSuccessor(I); 1759 // Make sure only to keep exactly one copy of each edge. 1760 if (Succ == KeepEdge1) 1761 KeepEdge1 = 0; 1762 else if (Succ == KeepEdge2) 1763 KeepEdge2 = 0; 1764 else 1765 Succ->removePredecessor(OldTerm->getParent()); 1766 } 1767 1768 // Insert an appropriate new terminator. 1769 if ((KeepEdge1 == 0) && (KeepEdge2 == 0)) { 1770 if (TrueBB == FalseBB) 1771 // We were only looking for one successor, and it was present. 1772 // Create an unconditional branch to it. 1773 BranchInst::Create(TrueBB, OldTerm); 1774 else 1775 // We found both of the successors we were looking for. 1776 // Create a conditional branch sharing the condition of the select. 1777 BranchInst::Create(TrueBB, FalseBB, Cond, OldTerm); 1778 } else if (KeepEdge1 && (KeepEdge2 || TrueBB == FalseBB)) { 1779 // Neither of the selected blocks were successors, so this 1780 // terminator must be unreachable. 1781 new UnreachableInst(OldTerm->getContext(), OldTerm); 1782 } else { 1783 // One of the selected values was a successor, but the other wasn't. 1784 // Insert an unconditional branch to the one that was found; 1785 // the edge to the one that wasn't must be unreachable. 1786 if (KeepEdge1 == 0) 1787 // Only TrueBB was found. 1788 BranchInst::Create(TrueBB, OldTerm); 1789 else 1790 // Only FalseBB was found. 1791 BranchInst::Create(FalseBB, OldTerm); 1792 } 1793 1794 EraseTerminatorInstAndDCECond(OldTerm); 1795 return true; 1796 } 1797 1798 // SimplifyIndirectBrOnSelect - Replaces 1799 // (indirectbr (select cond, blockaddress(@fn, BlockA), 1800 // blockaddress(@fn, BlockB))) 1801 // with 1802 // (br cond, BlockA, BlockB). 1803 static bool SimplifyIndirectBrOnSelect(IndirectBrInst *IBI, SelectInst *SI) { 1804 // Check that both operands of the select are block addresses. 1805 BlockAddress *TBA = dyn_cast<BlockAddress>(SI->getTrueValue()); 1806 BlockAddress *FBA = dyn_cast<BlockAddress>(SI->getFalseValue()); 1807 if (!TBA || !FBA) 1808 return false; 1809 1810 // Extract the actual blocks. 1811 BasicBlock *TrueBB = TBA->getBasicBlock(); 1812 BasicBlock *FalseBB = FBA->getBasicBlock(); 1813 1814 // Perform the actual simplification. 1815 return SimplifyTerminatorOnSelect(IBI, SI->getCondition(), TrueBB, FalseBB); 1816 } 1817 1818 /// TryToSimplifyUncondBranchWithICmpInIt - This is called when we find an icmp 1819 /// instruction (a seteq/setne with a constant) as the only instruction in a 1820 /// block that ends with an uncond branch. We are looking for a very specific 1821 /// pattern that occurs when "A == 1 || A == 2 || A == 3" gets simplified. In 1822 /// this case, we merge the first two "or's of icmp" into a switch, but then the 1823 /// default value goes to an uncond block with a seteq in it, we get something 1824 /// like: 1825 /// 1826 /// switch i8 %A, label %DEFAULT [ i8 1, label %end i8 2, label %end ] 1827 /// DEFAULT: 1828 /// %tmp = icmp eq i8 %A, 92 1829 /// br label %end 1830 /// end: 1831 /// ... = phi i1 [ true, %entry ], [ %tmp, %DEFAULT ], [ true, %entry ] 1832 /// 1833 /// We prefer to split the edge to 'end' so that there is a true/false entry to 1834 /// the PHI, merging the third icmp into the switch. 1835 static bool TryToSimplifyUncondBranchWithICmpInIt(ICmpInst *ICI, 1836 const TargetData *TD) { 1837 BasicBlock *BB = ICI->getParent(); 1838 // If the block has any PHIs in it or the icmp has multiple uses, it is too 1839 // complex. 1840 if (isa<PHINode>(BB->begin()) || !ICI->hasOneUse()) return false; 1841 1842 Value *V = ICI->getOperand(0); 1843 ConstantInt *Cst = cast<ConstantInt>(ICI->getOperand(1)); 1844 1845 // The pattern we're looking for is where our only predecessor is a switch on 1846 // 'V' and this block is the default case for the switch. In this case we can 1847 // fold the compared value into the switch to simplify things. 1848 BasicBlock *Pred = BB->getSinglePredecessor(); 1849 if (Pred == 0 || !isa<SwitchInst>(Pred->getTerminator())) return false; 1850 1851 SwitchInst *SI = cast<SwitchInst>(Pred->getTerminator()); 1852 if (SI->getCondition() != V) 1853 return false; 1854 1855 // If BB is reachable on a non-default case, then we simply know the value of 1856 // V in this block. Substitute it and constant fold the icmp instruction 1857 // away. 1858 if (SI->getDefaultDest() != BB) { 1859 ConstantInt *VVal = SI->findCaseDest(BB); 1860 assert(VVal && "Should have a unique destination value"); 1861 ICI->setOperand(0, VVal); 1862 1863 if (Value *V = SimplifyInstruction(ICI, TD)) { 1864 ICI->replaceAllUsesWith(V); 1865 ICI->eraseFromParent(); 1866 } 1867 // BB is now empty, so it is likely to simplify away. 1868 return SimplifyCFG(BB) | true; 1869 } 1870 1871 // Ok, the block is reachable from the default dest. If the constant we're 1872 // comparing exists in one of the other edges, then we can constant fold ICI 1873 // and zap it. 1874 if (SI->findCaseValue(Cst) != 0) { 1875 Value *V; 1876 if (ICI->getPredicate() == ICmpInst::ICMP_EQ) 1877 V = ConstantInt::getFalse(BB->getContext()); 1878 else 1879 V = ConstantInt::getTrue(BB->getContext()); 1880 1881 ICI->replaceAllUsesWith(V); 1882 ICI->eraseFromParent(); 1883 // BB is now empty, so it is likely to simplify away. 1884 return SimplifyCFG(BB) | true; 1885 } 1886 1887 // The use of the icmp has to be in the 'end' block, by the only PHI node in 1888 // the block. 1889 BasicBlock *SuccBlock = BB->getTerminator()->getSuccessor(0); 1890 PHINode *PHIUse = dyn_cast<PHINode>(ICI->use_back()); 1891 if (PHIUse == 0 || PHIUse != &SuccBlock->front() || 1892 isa<PHINode>(++BasicBlock::iterator(PHIUse))) 1893 return false; 1894 1895 // If the icmp is a SETEQ, then the default dest gets false, the new edge gets 1896 // true in the PHI. 1897 Constant *DefaultCst = ConstantInt::getTrue(BB->getContext()); 1898 Constant *NewCst = ConstantInt::getFalse(BB->getContext()); 1899 1900 if (ICI->getPredicate() == ICmpInst::ICMP_EQ) 1901 std::swap(DefaultCst, NewCst); 1902 1903 // Replace ICI (which is used by the PHI for the default value) with true or 1904 // false depending on if it is EQ or NE. 1905 ICI->replaceAllUsesWith(DefaultCst); 1906 ICI->eraseFromParent(); 1907 1908 // Okay, the switch goes to this block on a default value. Add an edge from 1909 // the switch to the merge point on the compared value. 1910 BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "switch.edge", 1911 BB->getParent(), BB); 1912 SI->addCase(Cst, NewBB); 1913 1914 // NewBB branches to the phi block, add the uncond branch and the phi entry. 1915 BranchInst::Create(SuccBlock, NewBB); 1916 PHIUse->addIncoming(NewCst, NewBB); 1917 return true; 1918 } 1919 1920 /// SimplifyBranchOnICmpChain - The specified branch is a conditional branch. 1921 /// Check to see if it is branching on an or/and chain of icmp instructions, and 1922 /// fold it into a switch instruction if so. 1923 static bool SimplifyBranchOnICmpChain(BranchInst *BI, const TargetData *TD) { 1924 Instruction *Cond = dyn_cast<Instruction>(BI->getCondition()); 1925 if (Cond == 0) return false; 1926 1927 1928 // Change br (X == 0 | X == 1), T, F into a switch instruction. 1929 // If this is a bunch of seteq's or'd together, or if it's a bunch of 1930 // 'setne's and'ed together, collect them. 1931 Value *CompVal = 0; 1932 std::vector<ConstantInt*> Values; 1933 bool TrueWhenEqual = true; 1934 Value *ExtraCase = 0; 1935 unsigned UsedICmps = 0; 1936 1937 if (Cond->getOpcode() == Instruction::Or) { 1938 CompVal = GatherConstantCompares(Cond, Values, ExtraCase, TD, true, 1939 UsedICmps); 1940 } else if (Cond->getOpcode() == Instruction::And) { 1941 CompVal = GatherConstantCompares(Cond, Values, ExtraCase, TD, false, 1942 UsedICmps); 1943 TrueWhenEqual = false; 1944 } 1945 1946 // If we didn't have a multiply compared value, fail. 1947 if (CompVal == 0) return false; 1948 1949 // Avoid turning single icmps into a switch. 1950 if (UsedICmps <= 1) 1951 return false; 1952 1953 // There might be duplicate constants in the list, which the switch 1954 // instruction can't handle, remove them now. 1955 array_pod_sort(Values.begin(), Values.end(), ConstantIntSortPredicate); 1956 Values.erase(std::unique(Values.begin(), Values.end()), Values.end()); 1957 1958 // If Extra was used, we require at least two switch values to do the 1959 // transformation. A switch with one value is just an cond branch. 1960 if (ExtraCase && Values.size() < 2) return false; 1961 1962 // Figure out which block is which destination. 1963 BasicBlock *DefaultBB = BI->getSuccessor(1); 1964 BasicBlock *EdgeBB = BI->getSuccessor(0); 1965 if (!TrueWhenEqual) std::swap(DefaultBB, EdgeBB); 1966 1967 BasicBlock *BB = BI->getParent(); 1968 1969 DEBUG(dbgs() << "Converting 'icmp' chain with " << Values.size() 1970 << " cases into SWITCH. BB is:\n" << *BB); 1971 1972 // If there are any extra values that couldn't be folded into the switch 1973 // then we evaluate them with an explicit branch first. Split the block 1974 // right before the condbr to handle it. 1975 if (ExtraCase) { 1976 BasicBlock *NewBB = BB->splitBasicBlock(BI, "switch.early.test"); 1977 // Remove the uncond branch added to the old block. 1978 TerminatorInst *OldTI = BB->getTerminator(); 1979 1980 if (TrueWhenEqual) 1981 BranchInst::Create(EdgeBB, NewBB, ExtraCase, OldTI); 1982 else 1983 BranchInst::Create(NewBB, EdgeBB, ExtraCase, OldTI); 1984 1985 OldTI->eraseFromParent(); 1986 1987 // If there are PHI nodes in EdgeBB, then we need to add a new entry to them 1988 // for the edge we just added. 1989 AddPredecessorToBlock(EdgeBB, BB, NewBB); 1990 1991 DEBUG(dbgs() << " ** 'icmp' chain unhandled condition: " << *ExtraCase 1992 << "\nEXTRABB = " << *BB); 1993 BB = NewBB; 1994 } 1995 1996 // Convert pointer to int before we switch. 1997 if (CompVal->getType()->isPointerTy()) { 1998 assert(TD && "Cannot switch on pointer without TargetData"); 1999 CompVal = new PtrToIntInst(CompVal, 2000 TD->getIntPtrType(CompVal->getContext()), 2001 "magicptr", BI); 2002 } 2003 2004 // Create the new switch instruction now. 2005 SwitchInst *New = SwitchInst::Create(CompVal, DefaultBB, Values.size(), BI); 2006 2007 // Add all of the 'cases' to the switch instruction. 2008 for (unsigned i = 0, e = Values.size(); i != e; ++i) 2009 New->addCase(Values[i], EdgeBB); 2010 2011 // We added edges from PI to the EdgeBB. As such, if there were any 2012 // PHI nodes in EdgeBB, they need entries to be added corresponding to 2013 // the number of edges added. 2014 for (BasicBlock::iterator BBI = EdgeBB->begin(); 2015 isa<PHINode>(BBI); ++BBI) { 2016 PHINode *PN = cast<PHINode>(BBI); 2017 Value *InVal = PN->getIncomingValueForBlock(BB); 2018 for (unsigned i = 0, e = Values.size()-1; i != e; ++i) 2019 PN->addIncoming(InVal, BB); 2020 } 2021 2022 // Erase the old branch instruction. 2023 EraseTerminatorInstAndDCECond(BI); 2024 2025 DEBUG(dbgs() << " ** 'icmp' chain result is:\n" << *BB << '\n'); 2026 return true; 2027 } 2028 2029 bool SimplifyCFGOpt::SimplifyReturn(ReturnInst *RI) { 2030 BasicBlock *BB = RI->getParent(); 2031 if (!BB->getFirstNonPHIOrDbg()->isTerminator()) return false; 2032 2033 // Find predecessors that end with branches. 2034 SmallVector<BasicBlock*, 8> UncondBranchPreds; 2035 SmallVector<BranchInst*, 8> CondBranchPreds; 2036 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { 2037 BasicBlock *P = *PI; 2038 TerminatorInst *PTI = P->getTerminator(); 2039 if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) { 2040 if (BI->isUnconditional()) 2041 UncondBranchPreds.push_back(P); 2042 else 2043 CondBranchPreds.push_back(BI); 2044 } 2045 } 2046 2047 // If we found some, do the transformation! 2048 if (!UncondBranchPreds.empty() && DupRet) { 2049 while (!UncondBranchPreds.empty()) { 2050 BasicBlock *Pred = UncondBranchPreds.pop_back_val(); 2051 DEBUG(dbgs() << "FOLDING: " << *BB 2052 << "INTO UNCOND BRANCH PRED: " << *Pred); 2053 (void)FoldReturnIntoUncondBranch(RI, BB, Pred); 2054 } 2055 2056 // If we eliminated all predecessors of the block, delete the block now. 2057 if (pred_begin(BB) == pred_end(BB)) 2058 // We know there are no successors, so just nuke the block. 2059 BB->eraseFromParent(); 2060 2061 return true; 2062 } 2063 2064 // Check out all of the conditional branches going to this return 2065 // instruction. If any of them just select between returns, change the 2066 // branch itself into a select/return pair. 2067 while (!CondBranchPreds.empty()) { 2068 BranchInst *BI = CondBranchPreds.pop_back_val(); 2069 2070 // Check to see if the non-BB successor is also a return block. 2071 if (isa<ReturnInst>(BI->getSuccessor(0)->getTerminator()) && 2072 isa<ReturnInst>(BI->getSuccessor(1)->getTerminator()) && 2073 SimplifyCondBranchToTwoReturns(BI)) 2074 return true; 2075 } 2076 return false; 2077 } 2078 2079 bool SimplifyCFGOpt::SimplifyUnwind(UnwindInst *UI) { 2080 // Check to see if the first instruction in this block is just an unwind. 2081 // If so, replace any invoke instructions which use this as an exception 2082 // destination with call instructions. 2083 BasicBlock *BB = UI->getParent(); 2084 if (!BB->getFirstNonPHIOrDbg()->isTerminator()) return false; 2085 2086 bool Changed = false; 2087 SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB)); 2088 while (!Preds.empty()) { 2089 BasicBlock *Pred = Preds.back(); 2090 InvokeInst *II = dyn_cast<InvokeInst>(Pred->getTerminator()); 2091 if (II && II->getUnwindDest() == BB) { 2092 // Insert a new branch instruction before the invoke, because this 2093 // is now a fall through. 2094 BranchInst *BI = BranchInst::Create(II->getNormalDest(), II); 2095 Pred->getInstList().remove(II); // Take out of symbol table 2096 2097 // Insert the call now. 2098 SmallVector<Value*,8> Args(II->op_begin(), II->op_end()-3); 2099 CallInst *CI = CallInst::Create(II->getCalledValue(), 2100 Args.begin(), Args.end(), 2101 II->getName(), BI); 2102 CI->setCallingConv(II->getCallingConv()); 2103 CI->setAttributes(II->getAttributes()); 2104 // If the invoke produced a value, the Call now does instead. 2105 II->replaceAllUsesWith(CI); 2106 delete II; 2107 Changed = true; 2108 } 2109 2110 Preds.pop_back(); 2111 } 2112 2113 // If this block is now dead (and isn't the entry block), remove it. 2114 if (pred_begin(BB) == pred_end(BB) && 2115 BB != &BB->getParent()->getEntryBlock()) { 2116 // We know there are no successors, so just nuke the block. 2117 BB->eraseFromParent(); 2118 return true; 2119 } 2120 2121 return Changed; 2122 } 2123 2124 bool SimplifyCFGOpt::SimplifyUnreachable(UnreachableInst *UI) { 2125 BasicBlock *BB = UI->getParent(); 2126 2127 bool Changed = false; 2128 2129 // If there are any instructions immediately before the unreachable that can 2130 // be removed, do so. 2131 while (UI != BB->begin()) { 2132 BasicBlock::iterator BBI = UI; 2133 --BBI; 2134 // Do not delete instructions that can have side effects, like calls 2135 // (which may never return) and volatile loads and stores. 2136 if (isa<CallInst>(BBI) && !isa<DbgInfoIntrinsic>(BBI)) break; 2137 2138 if (StoreInst *SI = dyn_cast<StoreInst>(BBI)) 2139 if (SI->isVolatile()) 2140 break; 2141 2142 if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) 2143 if (LI->isVolatile()) 2144 break; 2145 2146 // Delete this instruction 2147 BBI->eraseFromParent(); 2148 Changed = true; 2149 } 2150 2151 // If the unreachable instruction is the first in the block, take a gander 2152 // at all of the predecessors of this instruction, and simplify them. 2153 if (&BB->front() != UI) return Changed; 2154 2155 SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB)); 2156 for (unsigned i = 0, e = Preds.size(); i != e; ++i) { 2157 TerminatorInst *TI = Preds[i]->getTerminator(); 2158 2159 if (BranchInst *BI = dyn_cast<BranchInst>(TI)) { 2160 if (BI->isUnconditional()) { 2161 if (BI->getSuccessor(0) == BB) { 2162 new UnreachableInst(TI->getContext(), TI); 2163 TI->eraseFromParent(); 2164 Changed = true; 2165 } 2166 } else { 2167 if (BI->getSuccessor(0) == BB) { 2168 BranchInst::Create(BI->getSuccessor(1), BI); 2169 EraseTerminatorInstAndDCECond(BI); 2170 } else if (BI->getSuccessor(1) == BB) { 2171 BranchInst::Create(BI->getSuccessor(0), BI); 2172 EraseTerminatorInstAndDCECond(BI); 2173 Changed = true; 2174 } 2175 } 2176 } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) { 2177 for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i) 2178 if (SI->getSuccessor(i) == BB) { 2179 BB->removePredecessor(SI->getParent()); 2180 SI->removeCase(i); 2181 --i; --e; 2182 Changed = true; 2183 } 2184 // If the default value is unreachable, figure out the most popular 2185 // destination and make it the default. 2186 if (SI->getSuccessor(0) == BB) { 2187 std::map<BasicBlock*, unsigned> Popularity; 2188 for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i) 2189 Popularity[SI->getSuccessor(i)]++; 2190 2191 // Find the most popular block. 2192 unsigned MaxPop = 0; 2193 BasicBlock *MaxBlock = 0; 2194 for (std::map<BasicBlock*, unsigned>::iterator 2195 I = Popularity.begin(), E = Popularity.end(); I != E; ++I) { 2196 if (I->second > MaxPop) { 2197 MaxPop = I->second; 2198 MaxBlock = I->first; 2199 } 2200 } 2201 if (MaxBlock) { 2202 // Make this the new default, allowing us to delete any explicit 2203 // edges to it. 2204 SI->setSuccessor(0, MaxBlock); 2205 Changed = true; 2206 2207 // If MaxBlock has phinodes in it, remove MaxPop-1 entries from 2208 // it. 2209 if (isa<PHINode>(MaxBlock->begin())) 2210 for (unsigned i = 0; i != MaxPop-1; ++i) 2211 MaxBlock->removePredecessor(SI->getParent()); 2212 2213 for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i) 2214 if (SI->getSuccessor(i) == MaxBlock) { 2215 SI->removeCase(i); 2216 --i; --e; 2217 } 2218 } 2219 } 2220 } else if (InvokeInst *II = dyn_cast<InvokeInst>(TI)) { 2221 if (II->getUnwindDest() == BB) { 2222 // Convert the invoke to a call instruction. This would be a good 2223 // place to note that the call does not throw though. 2224 BranchInst *BI = BranchInst::Create(II->getNormalDest(), II); 2225 II->removeFromParent(); // Take out of symbol table 2226 2227 // Insert the call now... 2228 SmallVector<Value*, 8> Args(II->op_begin(), II->op_end()-3); 2229 CallInst *CI = CallInst::Create(II->getCalledValue(), 2230 Args.begin(), Args.end(), 2231 II->getName(), BI); 2232 CI->setCallingConv(II->getCallingConv()); 2233 CI->setAttributes(II->getAttributes()); 2234 // If the invoke produced a value, the call does now instead. 2235 II->replaceAllUsesWith(CI); 2236 delete II; 2237 Changed = true; 2238 } 2239 } 2240 } 2241 2242 // If this block is now dead, remove it. 2243 if (pred_begin(BB) == pred_end(BB) && 2244 BB != &BB->getParent()->getEntryBlock()) { 2245 // We know there are no successors, so just nuke the block. 2246 BB->eraseFromParent(); 2247 return true; 2248 } 2249 2250 return Changed; 2251 } 2252 2253 /// TurnSwitchRangeIntoICmp - Turns a switch with that contains only a 2254 /// integer range comparison into a sub, an icmp and a branch. 2255 static bool TurnSwitchRangeIntoICmp(SwitchInst *SI) { 2256 assert(SI->getNumCases() > 2 && "Degenerate switch?"); 2257 2258 // Make sure all cases point to the same destination and gather the values. 2259 SmallVector<ConstantInt *, 16> Cases; 2260 Cases.push_back(SI->getCaseValue(1)); 2261 for (unsigned I = 2, E = SI->getNumCases(); I != E; ++I) { 2262 if (SI->getSuccessor(I-1) != SI->getSuccessor(I)) 2263 return false; 2264 Cases.push_back(SI->getCaseValue(I)); 2265 } 2266 assert(Cases.size() == SI->getNumCases()-1 && "Not all cases gathered"); 2267 2268 // Sort the case values, then check if they form a range we can transform. 2269 array_pod_sort(Cases.begin(), Cases.end(), ConstantIntSortPredicate); 2270 for (unsigned I = 1, E = Cases.size(); I != E; ++I) { 2271 if (Cases[I-1]->getValue() != Cases[I]->getValue()+1) 2272 return false; 2273 } 2274 2275 Constant *Offset = ConstantExpr::getNeg(Cases.back()); 2276 Constant *NumCases = ConstantInt::get(Offset->getType(), SI->getNumCases()-1); 2277 2278 Value *Sub = SI->getCondition(); 2279 if (!Offset->isNullValue()) 2280 Sub = BinaryOperator::CreateAdd(Sub, Offset, Sub->getName()+".off", SI); 2281 Value *Cmp = new ICmpInst(SI, ICmpInst::ICMP_ULT, Sub, NumCases, "switch"); 2282 BranchInst::Create(SI->getSuccessor(1), SI->getDefaultDest(), Cmp, SI); 2283 2284 // Prune obsolete incoming values off the successor's PHI nodes. 2285 for (BasicBlock::iterator BBI = SI->getSuccessor(1)->begin(); 2286 isa<PHINode>(BBI); ++BBI) { 2287 for (unsigned I = 0, E = SI->getNumCases()-2; I != E; ++I) 2288 cast<PHINode>(BBI)->removeIncomingValue(SI->getParent()); 2289 } 2290 SI->eraseFromParent(); 2291 2292 return true; 2293 } 2294 2295 bool SimplifyCFGOpt::SimplifySwitch(SwitchInst *SI) { 2296 // If this switch is too complex to want to look at, ignore it. 2297 if (!isValueEqualityComparison(SI)) 2298 return false; 2299 2300 BasicBlock *BB = SI->getParent(); 2301 2302 // If we only have one predecessor, and if it is a branch on this value, 2303 // see if that predecessor totally determines the outcome of this switch. 2304 if (BasicBlock *OnlyPred = BB->getSinglePredecessor()) 2305 if (SimplifyEqualityComparisonWithOnlyPredecessor(SI, OnlyPred)) 2306 return SimplifyCFG(BB) | true; 2307 2308 // If the block only contains the switch, see if we can fold the block 2309 // away into any preds. 2310 BasicBlock::iterator BBI = BB->begin(); 2311 // Ignore dbg intrinsics. 2312 while (isa<DbgInfoIntrinsic>(BBI)) 2313 ++BBI; 2314 if (SI == &*BBI) 2315 if (FoldValueComparisonIntoPredecessors(SI)) 2316 return SimplifyCFG(BB) | true; 2317 2318 // Try to transform the switch into an icmp and a branch. 2319 if (TurnSwitchRangeIntoICmp(SI)) 2320 return SimplifyCFG(BB) | true; 2321 2322 return false; 2323 } 2324 2325 bool SimplifyCFGOpt::SimplifyIndirectBr(IndirectBrInst *IBI) { 2326 BasicBlock *BB = IBI->getParent(); 2327 bool Changed = false; 2328 2329 // Eliminate redundant destinations. 2330 SmallPtrSet<Value *, 8> Succs; 2331 for (unsigned i = 0, e = IBI->getNumDestinations(); i != e; ++i) { 2332 BasicBlock *Dest = IBI->getDestination(i); 2333 if (!Dest->hasAddressTaken() || !Succs.insert(Dest)) { 2334 Dest->removePredecessor(BB); 2335 IBI->removeDestination(i); 2336 --i; --e; 2337 Changed = true; 2338 } 2339 } 2340 2341 if (IBI->getNumDestinations() == 0) { 2342 // If the indirectbr has no successors, change it to unreachable. 2343 new UnreachableInst(IBI->getContext(), IBI); 2344 EraseTerminatorInstAndDCECond(IBI); 2345 return true; 2346 } 2347 2348 if (IBI->getNumDestinations() == 1) { 2349 // If the indirectbr has one successor, change it to a direct branch. 2350 BranchInst::Create(IBI->getDestination(0), IBI); 2351 EraseTerminatorInstAndDCECond(IBI); 2352 return true; 2353 } 2354 2355 if (SelectInst *SI = dyn_cast<SelectInst>(IBI->getAddress())) { 2356 if (SimplifyIndirectBrOnSelect(IBI, SI)) 2357 return SimplifyCFG(BB) | true; 2358 } 2359 return Changed; 2360 } 2361 2362 bool SimplifyCFGOpt::SimplifyUncondBranch(BranchInst *BI) { 2363 BasicBlock *BB = BI->getParent(); 2364 2365 // If the Terminator is the only non-phi instruction, simplify the block. 2366 BasicBlock::iterator I = BB->getFirstNonPHIOrDbg(); 2367 if (I->isTerminator() && BB != &BB->getParent()->getEntryBlock() && 2368 TryToSimplifyUncondBranchFromEmptyBlock(BB)) 2369 return true; 2370 2371 // If the only instruction in the block is a seteq/setne comparison 2372 // against a constant, try to simplify the block. 2373 if (ICmpInst *ICI = dyn_cast<ICmpInst>(I)) 2374 if (ICI->isEquality() && isa<ConstantInt>(ICI->getOperand(1))) { 2375 for (++I; isa<DbgInfoIntrinsic>(I); ++I) 2376 ; 2377 if (I->isTerminator() && TryToSimplifyUncondBranchWithICmpInIt(ICI, TD)) 2378 return true; 2379 } 2380 2381 return false; 2382 } 2383 2384 2385 bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI) { 2386 BasicBlock *BB = BI->getParent(); 2387 2388 // Conditional branch 2389 if (isValueEqualityComparison(BI)) { 2390 // If we only have one predecessor, and if it is a branch on this value, 2391 // see if that predecessor totally determines the outcome of this 2392 // switch. 2393 if (BasicBlock *OnlyPred = BB->getSinglePredecessor()) 2394 if (SimplifyEqualityComparisonWithOnlyPredecessor(BI, OnlyPred)) 2395 return SimplifyCFG(BB) | true; 2396 2397 // This block must be empty, except for the setcond inst, if it exists. 2398 // Ignore dbg intrinsics. 2399 BasicBlock::iterator I = BB->begin(); 2400 // Ignore dbg intrinsics. 2401 while (isa<DbgInfoIntrinsic>(I)) 2402 ++I; 2403 if (&*I == BI) { 2404 if (FoldValueComparisonIntoPredecessors(BI)) 2405 return SimplifyCFG(BB) | true; 2406 } else if (&*I == cast<Instruction>(BI->getCondition())){ 2407 ++I; 2408 // Ignore dbg intrinsics. 2409 while (isa<DbgInfoIntrinsic>(I)) 2410 ++I; 2411 if (&*I == BI && FoldValueComparisonIntoPredecessors(BI)) 2412 return SimplifyCFG(BB) | true; 2413 } 2414 } 2415 2416 // Try to turn "br (X == 0 | X == 1), T, F" into a switch instruction. 2417 if (SimplifyBranchOnICmpChain(BI, TD)) 2418 return true; 2419 2420 // We have a conditional branch to two blocks that are only reachable 2421 // from BI. We know that the condbr dominates the two blocks, so see if 2422 // there is any identical code in the "then" and "else" blocks. If so, we 2423 // can hoist it up to the branching block. 2424 if (BI->getSuccessor(0)->getSinglePredecessor() != 0) { 2425 if (BI->getSuccessor(1)->getSinglePredecessor() != 0) { 2426 if (HoistThenElseCodeToIf(BI)) 2427 return SimplifyCFG(BB) | true; 2428 } else { 2429 // If Successor #1 has multiple preds, we may be able to conditionally 2430 // execute Successor #0 if it branches to successor #1. 2431 TerminatorInst *Succ0TI = BI->getSuccessor(0)->getTerminator(); 2432 if (Succ0TI->getNumSuccessors() == 1 && 2433 Succ0TI->getSuccessor(0) == BI->getSuccessor(1)) 2434 if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0))) 2435 return SimplifyCFG(BB) | true; 2436 } 2437 } else if (BI->getSuccessor(1)->getSinglePredecessor() != 0) { 2438 // If Successor #0 has multiple preds, we may be able to conditionally 2439 // execute Successor #1 if it branches to successor #0. 2440 TerminatorInst *Succ1TI = BI->getSuccessor(1)->getTerminator(); 2441 if (Succ1TI->getNumSuccessors() == 1 && 2442 Succ1TI->getSuccessor(0) == BI->getSuccessor(0)) 2443 if (SpeculativelyExecuteBB(BI, BI->getSuccessor(1))) 2444 return SimplifyCFG(BB) | true; 2445 } 2446 2447 // If this is a branch on a phi node in the current block, thread control 2448 // through this block if any PHI node entries are constants. 2449 if (PHINode *PN = dyn_cast<PHINode>(BI->getCondition())) 2450 if (PN->getParent() == BI->getParent()) 2451 if (FoldCondBranchOnPHI(BI, TD)) 2452 return SimplifyCFG(BB) | true; 2453 2454 // If this basic block is ONLY a setcc and a branch, and if a predecessor 2455 // branches to us and one of our successors, fold the setcc into the 2456 // predecessor and use logical operations to pick the right destination. 2457 if (FoldBranchToCommonDest(BI)) 2458 return SimplifyCFG(BB) | true; 2459 2460 // Scan predecessor blocks for conditional branches. 2461 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) 2462 if (BranchInst *PBI = dyn_cast<BranchInst>((*PI)->getTerminator())) 2463 if (PBI != BI && PBI->isConditional()) 2464 if (SimplifyCondBranchToCondBranch(PBI, BI)) 2465 return SimplifyCFG(BB) | true; 2466 2467 return false; 2468 } 2469 2470 bool SimplifyCFGOpt::run(BasicBlock *BB) { 2471 bool Changed = false; 2472 2473 assert(BB && BB->getParent() && "Block not embedded in function!"); 2474 assert(BB->getTerminator() && "Degenerate basic block encountered!"); 2475 2476 // Remove basic blocks that have no predecessors (except the entry block)... 2477 // or that just have themself as a predecessor. These are unreachable. 2478 if ((pred_begin(BB) == pred_end(BB) && 2479 BB != &BB->getParent()->getEntryBlock()) || 2480 BB->getSinglePredecessor() == BB) { 2481 DEBUG(dbgs() << "Removing BB: \n" << *BB); 2482 DeleteDeadBlock(BB); 2483 return true; 2484 } 2485 2486 // Check to see if we can constant propagate this terminator instruction 2487 // away... 2488 Changed |= ConstantFoldTerminator(BB); 2489 2490 // Check for and eliminate duplicate PHI nodes in this block. 2491 Changed |= EliminateDuplicatePHINodes(BB); 2492 2493 // Merge basic blocks into their predecessor if there is only one distinct 2494 // pred, and if there is only one distinct successor of the predecessor, and 2495 // if there are no PHI nodes. 2496 // 2497 if (MergeBlockIntoPredecessor(BB)) 2498 return true; 2499 2500 // If there is a trivial two-entry PHI node in this basic block, and we can 2501 // eliminate it, do so now. 2502 if (PHINode *PN = dyn_cast<PHINode>(BB->begin())) 2503 if (PN->getNumIncomingValues() == 2) 2504 Changed |= FoldTwoEntryPHINode(PN, TD); 2505 2506 if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) { 2507 if (BI->isUnconditional()) { 2508 if (SimplifyUncondBranch(BI)) return true; 2509 } else { 2510 if (SimplifyCondBranch(BI)) return true; 2511 } 2512 } else if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) { 2513 if (SimplifyReturn(RI)) return true; 2514 } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator())) { 2515 if (SimplifySwitch(SI)) return true; 2516 } else if (UnreachableInst *UI = 2517 dyn_cast<UnreachableInst>(BB->getTerminator())) { 2518 if (SimplifyUnreachable(UI)) return true; 2519 } else if (UnwindInst *UI = dyn_cast<UnwindInst>(BB->getTerminator())) { 2520 if (SimplifyUnwind(UI)) return true; 2521 } else if (IndirectBrInst *IBI = 2522 dyn_cast<IndirectBrInst>(BB->getTerminator())) { 2523 if (SimplifyIndirectBr(IBI)) return true; 2524 } 2525 2526 return Changed; 2527 } 2528 2529 /// SimplifyCFG - This function is used to do simplification of a CFG. For 2530 /// example, it adjusts branches to branches to eliminate the extra hop, it 2531 /// eliminates unreachable basic blocks, and does other "peephole" optimization 2532 /// of the CFG. It returns true if a modification was made. 2533 /// 2534 bool llvm::SimplifyCFG(BasicBlock *BB, const TargetData *TD) { 2535 return SimplifyCFGOpt(TD).run(BB); 2536 } 2537