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