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