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