SimplifyCFG.cpp revision daf4cfc8d890c7f17241ff7127b64c13ed2cb4d4
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/DataLayout.h"
18#include "llvm/DerivedTypes.h"
19#include "llvm/GlobalVariable.h"
20#include "llvm/IRBuilder.h"
21#include "llvm/Instructions.h"
22#include "llvm/IntrinsicInst.h"
23#include "llvm/LLVMContext.h"
24#include "llvm/MDBuilder.h"
25#include "llvm/Metadata.h"
26#include "llvm/Module.h"
27#include "llvm/Operator.h"
28#include "llvm/Type.h"
29#include "llvm/ADT/DenseMap.h"
30#include "llvm/ADT/STLExtras.h"
31#include "llvm/ADT/SetVector.h"
32#include "llvm/ADT/SmallPtrSet.h"
33#include "llvm/ADT/SmallVector.h"
34#include "llvm/ADT/Statistic.h"
35#include "llvm/Analysis/InstructionSimplify.h"
36#include "llvm/Analysis/ValueTracking.h"
37#include "llvm/Support/CFG.h"
38#include "llvm/Support/CommandLine.h"
39#include "llvm/Support/ConstantRange.h"
40#include "llvm/Support/Debug.h"
41#include "llvm/Support/NoFolder.h"
42#include "llvm/Support/raw_ostream.h"
43#include "llvm/TargetTransformInfo.h"
44#include "llvm/Transforms/Utils/BasicBlockUtils.h"
45#include <algorithm>
46#include <set>
47#include <map>
48using namespace llvm;
49
50static cl::opt<unsigned>
51PHINodeFoldingThreshold("phi-node-folding-threshold", cl::Hidden, cl::init(1),
52   cl::desc("Control the amount of phi node folding to perform (default = 1)"));
53
54static cl::opt<bool>
55DupRet("simplifycfg-dup-ret", cl::Hidden, cl::init(false),
56       cl::desc("Duplicate return instructions into unconditional branches"));
57
58static cl::opt<bool>
59SinkCommon("simplifycfg-sink-common", cl::Hidden, cl::init(true),
60       cl::desc("Sink common instructions down to the end block"));
61
62STATISTIC(NumBitMaps, "Number of switch instructions turned into bitmaps");
63STATISTIC(NumLookupTables, "Number of switch instructions turned into lookup tables");
64STATISTIC(NumSinkCommons, "Number of common instructions sunk down to the end block");
65STATISTIC(NumSpeculations, "Number of speculative executed instructions");
66
67namespace {
68  /// ValueEqualityComparisonCase - Represents a case of a switch.
69  struct ValueEqualityComparisonCase {
70    ConstantInt *Value;
71    BasicBlock *Dest;
72
73    ValueEqualityComparisonCase(ConstantInt *Value, BasicBlock *Dest)
74      : Value(Value), Dest(Dest) {}
75
76    bool operator<(ValueEqualityComparisonCase RHS) const {
77      // Comparing pointers is ok as we only rely on the order for uniquing.
78      return Value < RHS.Value;
79    }
80
81    bool operator==(BasicBlock *RHSDest) const { return Dest == RHSDest; }
82  };
83
84class SimplifyCFGOpt {
85  const DataLayout *const TD;
86  const TargetTransformInfo *const TTI;
87
88  Value *isValueEqualityComparison(TerminatorInst *TI);
89  BasicBlock *GetValueEqualityComparisonCases(TerminatorInst *TI,
90                               std::vector<ValueEqualityComparisonCase> &Cases);
91  bool SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
92                                                     BasicBlock *Pred,
93                                                     IRBuilder<> &Builder);
94  bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI,
95                                           IRBuilder<> &Builder);
96
97  bool SimplifyReturn(ReturnInst *RI, IRBuilder<> &Builder);
98  bool SimplifyResume(ResumeInst *RI, IRBuilder<> &Builder);
99  bool SimplifyUnreachable(UnreachableInst *UI);
100  bool SimplifySwitch(SwitchInst *SI, IRBuilder<> &Builder);
101  bool SimplifyIndirectBr(IndirectBrInst *IBI);
102  bool SimplifyUncondBranch(BranchInst *BI, IRBuilder <> &Builder);
103  bool SimplifyCondBranch(BranchInst *BI, IRBuilder <>&Builder);
104
105public:
106  SimplifyCFGOpt(const DataLayout *td, const TargetTransformInfo *tti)
107      : TD(td), TTI(tti) {}
108  bool run(BasicBlock *BB);
109};
110}
111
112/// SafeToMergeTerminators - Return true if it is safe to merge these two
113/// terminator instructions together.
114///
115static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2) {
116  if (SI1 == SI2) return false;  // Can't merge with self!
117
118  // It is not safe to merge these two switch instructions if they have a common
119  // successor, and if that successor has a PHI node, and if *that* PHI node has
120  // conflicting incoming values from the two switch blocks.
121  BasicBlock *SI1BB = SI1->getParent();
122  BasicBlock *SI2BB = SI2->getParent();
123  SmallPtrSet<BasicBlock*, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB));
124
125  for (succ_iterator I = succ_begin(SI2BB), E = succ_end(SI2BB); I != E; ++I)
126    if (SI1Succs.count(*I))
127      for (BasicBlock::iterator BBI = (*I)->begin();
128           isa<PHINode>(BBI); ++BBI) {
129        PHINode *PN = cast<PHINode>(BBI);
130        if (PN->getIncomingValueForBlock(SI1BB) !=
131            PN->getIncomingValueForBlock(SI2BB))
132          return false;
133      }
134
135  return true;
136}
137
138/// isProfitableToFoldUnconditional - Return true if it is safe and profitable
139/// to merge these two terminator instructions together, where SI1 is an
140/// unconditional branch. PhiNodes will store all PHI nodes in common
141/// successors.
142///
143static bool isProfitableToFoldUnconditional(BranchInst *SI1,
144                                          BranchInst *SI2,
145                                          Instruction *Cond,
146                                          SmallVectorImpl<PHINode*> &PhiNodes) {
147  if (SI1 == SI2) return false;  // Can't merge with self!
148  assert(SI1->isUnconditional() && SI2->isConditional());
149
150  // We fold the unconditional branch if we can easily update all PHI nodes in
151  // common successors:
152  // 1> We have a constant incoming value for the conditional branch;
153  // 2> We have "Cond" as the incoming value for the unconditional branch;
154  // 3> SI2->getCondition() and Cond have same operands.
155  CmpInst *Ci2 = dyn_cast<CmpInst>(SI2->getCondition());
156  if (!Ci2) return false;
157  if (!(Cond->getOperand(0) == Ci2->getOperand(0) &&
158        Cond->getOperand(1) == Ci2->getOperand(1)) &&
159      !(Cond->getOperand(0) == Ci2->getOperand(1) &&
160        Cond->getOperand(1) == Ci2->getOperand(0)))
161    return false;
162
163  BasicBlock *SI1BB = SI1->getParent();
164  BasicBlock *SI2BB = SI2->getParent();
165  SmallPtrSet<BasicBlock*, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB));
166  for (succ_iterator I = succ_begin(SI2BB), E = succ_end(SI2BB); I != E; ++I)
167    if (SI1Succs.count(*I))
168      for (BasicBlock::iterator BBI = (*I)->begin();
169           isa<PHINode>(BBI); ++BBI) {
170        PHINode *PN = cast<PHINode>(BBI);
171        if (PN->getIncomingValueForBlock(SI1BB) != Cond ||
172            !isa<ConstantInt>(PN->getIncomingValueForBlock(SI2BB)))
173          return false;
174        PhiNodes.push_back(PN);
175      }
176  return true;
177}
178
179/// AddPredecessorToBlock - Update PHI nodes in Succ to indicate that there will
180/// now be entries in it from the 'NewPred' block.  The values that will be
181/// flowing into the PHI nodes will be the same as those coming in from
182/// ExistPred, an existing predecessor of Succ.
183static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred,
184                                  BasicBlock *ExistPred) {
185  if (!isa<PHINode>(Succ->begin())) return; // Quick exit if nothing to do
186
187  PHINode *PN;
188  for (BasicBlock::iterator I = Succ->begin();
189       (PN = dyn_cast<PHINode>(I)); ++I)
190    PN->addIncoming(PN->getIncomingValueForBlock(ExistPred), NewPred);
191}
192
193
194/// GetIfCondition - Given a basic block (BB) with two predecessors (and at
195/// least one PHI node in it), check to see if the merge at this block is due
196/// to an "if condition".  If so, return the boolean condition that determines
197/// which entry into BB will be taken.  Also, return by references the block
198/// that will be entered from if the condition is true, and the block that will
199/// be entered if the condition is false.
200///
201/// This does no checking to see if the true/false blocks have large or unsavory
202/// instructions in them.
203static Value *GetIfCondition(BasicBlock *BB, BasicBlock *&IfTrue,
204                             BasicBlock *&IfFalse) {
205  PHINode *SomePHI = cast<PHINode>(BB->begin());
206  assert(SomePHI->getNumIncomingValues() == 2 &&
207         "Function can only handle blocks with 2 predecessors!");
208  BasicBlock *Pred1 = SomePHI->getIncomingBlock(0);
209  BasicBlock *Pred2 = SomePHI->getIncomingBlock(1);
210
211  // We can only handle branches.  Other control flow will be lowered to
212  // branches if possible anyway.
213  BranchInst *Pred1Br = dyn_cast<BranchInst>(Pred1->getTerminator());
214  BranchInst *Pred2Br = dyn_cast<BranchInst>(Pred2->getTerminator());
215  if (Pred1Br == 0 || Pred2Br == 0)
216    return 0;
217
218  // Eliminate code duplication by ensuring that Pred1Br is conditional if
219  // either are.
220  if (Pred2Br->isConditional()) {
221    // If both branches are conditional, we don't have an "if statement".  In
222    // reality, we could transform this case, but since the condition will be
223    // required anyway, we stand no chance of eliminating it, so the xform is
224    // probably not profitable.
225    if (Pred1Br->isConditional())
226      return 0;
227
228    std::swap(Pred1, Pred2);
229    std::swap(Pred1Br, Pred2Br);
230  }
231
232  if (Pred1Br->isConditional()) {
233    // The only thing we have to watch out for here is to make sure that Pred2
234    // doesn't have incoming edges from other blocks.  If it does, the condition
235    // doesn't dominate BB.
236    if (Pred2->getSinglePredecessor() == 0)
237      return 0;
238
239    // If we found a conditional branch predecessor, make sure that it branches
240    // to BB and Pred2Br.  If it doesn't, this isn't an "if statement".
241    if (Pred1Br->getSuccessor(0) == BB &&
242        Pred1Br->getSuccessor(1) == Pred2) {
243      IfTrue = Pred1;
244      IfFalse = Pred2;
245    } else if (Pred1Br->getSuccessor(0) == Pred2 &&
246               Pred1Br->getSuccessor(1) == BB) {
247      IfTrue = Pred2;
248      IfFalse = Pred1;
249    } else {
250      // We know that one arm of the conditional goes to BB, so the other must
251      // go somewhere unrelated, and this must not be an "if statement".
252      return 0;
253    }
254
255    return Pred1Br->getCondition();
256  }
257
258  // Ok, if we got here, both predecessors end with an unconditional branch to
259  // BB.  Don't panic!  If both blocks only have a single (identical)
260  // predecessor, and THAT is a conditional branch, then we're all ok!
261  BasicBlock *CommonPred = Pred1->getSinglePredecessor();
262  if (CommonPred == 0 || CommonPred != Pred2->getSinglePredecessor())
263    return 0;
264
265  // Otherwise, if this is a conditional branch, then we can use it!
266  BranchInst *BI = dyn_cast<BranchInst>(CommonPred->getTerminator());
267  if (BI == 0) return 0;
268
269  assert(BI->isConditional() && "Two successors but not conditional?");
270  if (BI->getSuccessor(0) == Pred1) {
271    IfTrue = Pred1;
272    IfFalse = Pred2;
273  } else {
274    IfTrue = Pred2;
275    IfFalse = Pred1;
276  }
277  return BI->getCondition();
278}
279
280/// ComputeSpeculuationCost - Compute an abstract "cost" of speculating the
281/// given instruction, which is assumed to be safe to speculate. 1 means
282/// cheap, 2 means less cheap, and UINT_MAX means prohibitively expensive.
283static unsigned ComputeSpeculationCost(const User *I) {
284  assert(isSafeToSpeculativelyExecute(I) &&
285         "Instruction is not safe to speculatively execute!");
286  switch (Operator::getOpcode(I)) {
287  default:
288    // In doubt, be conservative.
289    return UINT_MAX;
290  case Instruction::GetElementPtr:
291    // GEPs are cheap if all indices are constant.
292    if (!cast<GEPOperator>(I)->hasAllConstantIndices())
293      return UINT_MAX;
294    return 1;
295  case Instruction::Load:
296  case Instruction::Add:
297  case Instruction::Sub:
298  case Instruction::And:
299  case Instruction::Or:
300  case Instruction::Xor:
301  case Instruction::Shl:
302  case Instruction::LShr:
303  case Instruction::AShr:
304  case Instruction::ICmp:
305  case Instruction::Trunc:
306  case Instruction::ZExt:
307  case Instruction::SExt:
308    return 1; // These are all cheap.
309
310  case Instruction::Call:
311  case Instruction::Select:
312    return 2;
313  }
314}
315
316/// DominatesMergePoint - If we have a merge point of an "if condition" as
317/// accepted above, return true if the specified value dominates the block.  We
318/// don't handle the true generality of domination here, just a special case
319/// which works well enough for us.
320///
321/// If AggressiveInsts is non-null, and if V does not dominate BB, we check to
322/// see if V (which must be an instruction) and its recursive operands
323/// that do not dominate BB have a combined cost lower than CostRemaining and
324/// are non-trapping.  If both are true, the instruction is inserted into the
325/// set and true is returned.
326///
327/// The cost for most non-trapping instructions is defined as 1 except for
328/// Select whose cost is 2.
329///
330/// After this function returns, CostRemaining is decreased by the cost of
331/// V plus its non-dominating operands.  If that cost is greater than
332/// CostRemaining, false is returned and CostRemaining is undefined.
333static bool DominatesMergePoint(Value *V, BasicBlock *BB,
334                                SmallPtrSet<Instruction*, 4> *AggressiveInsts,
335                                unsigned &CostRemaining) {
336  Instruction *I = dyn_cast<Instruction>(V);
337  if (!I) {
338    // Non-instructions all dominate instructions, but not all constantexprs
339    // can be executed unconditionally.
340    if (ConstantExpr *C = dyn_cast<ConstantExpr>(V))
341      if (C->canTrap())
342        return false;
343    return true;
344  }
345  BasicBlock *PBB = I->getParent();
346
347  // We don't want to allow weird loops that might have the "if condition" in
348  // the bottom of this block.
349  if (PBB == BB) return false;
350
351  // If this instruction is defined in a block that contains an unconditional
352  // branch to BB, then it must be in the 'conditional' part of the "if
353  // statement".  If not, it definitely dominates the region.
354  BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator());
355  if (BI == 0 || BI->isConditional() || BI->getSuccessor(0) != BB)
356    return true;
357
358  // If we aren't allowing aggressive promotion anymore, then don't consider
359  // instructions in the 'if region'.
360  if (AggressiveInsts == 0) return false;
361
362  // If we have seen this instruction before, don't count it again.
363  if (AggressiveInsts->count(I)) return true;
364
365  // Okay, it looks like the instruction IS in the "condition".  Check to
366  // see if it's a cheap instruction to unconditionally compute, and if it
367  // only uses stuff defined outside of the condition.  If so, hoist it out.
368  if (!isSafeToSpeculativelyExecute(I))
369    return false;
370
371  unsigned Cost = ComputeSpeculationCost(I);
372
373  if (Cost > CostRemaining)
374    return false;
375
376  CostRemaining -= Cost;
377
378  // Okay, we can only really hoist these out if their operands do
379  // not take us over the cost threshold.
380  for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i)
381    if (!DominatesMergePoint(*i, BB, AggressiveInsts, CostRemaining))
382      return false;
383  // Okay, it's safe to do this!  Remember this instruction.
384  AggressiveInsts->insert(I);
385  return true;
386}
387
388/// GetConstantInt - Extract ConstantInt from value, looking through IntToPtr
389/// and PointerNullValue. Return NULL if value is not a constant int.
390static ConstantInt *GetConstantInt(Value *V, const DataLayout *TD) {
391  // Normal constant int.
392  ConstantInt *CI = dyn_cast<ConstantInt>(V);
393  if (CI || !TD || !isa<Constant>(V) || !V->getType()->isPointerTy())
394    return CI;
395
396  // This is some kind of pointer constant. Turn it into a pointer-sized
397  // ConstantInt if possible.
398  IntegerType *PtrTy = cast<IntegerType>(TD->getIntPtrType(V->getType()));
399
400  // Null pointer means 0, see SelectionDAGBuilder::getValue(const Value*).
401  if (isa<ConstantPointerNull>(V))
402    return ConstantInt::get(PtrTy, 0);
403
404  // IntToPtr const int.
405  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V))
406    if (CE->getOpcode() == Instruction::IntToPtr)
407      if (ConstantInt *CI = dyn_cast<ConstantInt>(CE->getOperand(0))) {
408        // The constant is very likely to have the right type already.
409        if (CI->getType() == PtrTy)
410          return CI;
411        else
412          return cast<ConstantInt>
413            (ConstantExpr::getIntegerCast(CI, PtrTy, /*isSigned=*/false));
414      }
415  return 0;
416}
417
418/// GatherConstantCompares - Given a potentially 'or'd or 'and'd together
419/// collection of icmp eq/ne instructions that compare a value against a
420/// constant, return the value being compared, and stick the constant into the
421/// Values vector.
422static Value *
423GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra,
424                       const DataLayout *TD, bool isEQ, unsigned &UsedICmps) {
425  Instruction *I = dyn_cast<Instruction>(V);
426  if (I == 0) return 0;
427
428  // If this is an icmp against a constant, handle this as one of the cases.
429  if (ICmpInst *ICI = dyn_cast<ICmpInst>(I)) {
430    if (ConstantInt *C = GetConstantInt(I->getOperand(1), TD)) {
431      if (ICI->getPredicate() == (isEQ ? ICmpInst::ICMP_EQ:ICmpInst::ICMP_NE)) {
432        UsedICmps++;
433        Vals.push_back(C);
434        return I->getOperand(0);
435      }
436
437      // If we have "x ult 3" comparison, for example, then we can add 0,1,2 to
438      // the set.
439      ConstantRange Span =
440        ConstantRange::makeICmpRegion(ICI->getPredicate(), C->getValue());
441
442      // If this is an and/!= check then we want to optimize "x ugt 2" into
443      // x != 0 && x != 1.
444      if (!isEQ)
445        Span = Span.inverse();
446
447      // If there are a ton of values, we don't want to make a ginormous switch.
448      if (Span.getSetSize().ugt(8) || Span.isEmptySet())
449        return 0;
450
451      for (APInt Tmp = Span.getLower(); Tmp != Span.getUpper(); ++Tmp)
452        Vals.push_back(ConstantInt::get(V->getContext(), Tmp));
453      UsedICmps++;
454      return I->getOperand(0);
455    }
456    return 0;
457  }
458
459  // Otherwise, we can only handle an | or &, depending on isEQ.
460  if (I->getOpcode() != (isEQ ? Instruction::Or : Instruction::And))
461    return 0;
462
463  unsigned NumValsBeforeLHS = Vals.size();
464  unsigned UsedICmpsBeforeLHS = UsedICmps;
465  if (Value *LHS = GatherConstantCompares(I->getOperand(0), Vals, Extra, TD,
466                                          isEQ, UsedICmps)) {
467    unsigned NumVals = Vals.size();
468    unsigned UsedICmpsBeforeRHS = UsedICmps;
469    if (Value *RHS = GatherConstantCompares(I->getOperand(1), Vals, Extra, TD,
470                                            isEQ, UsedICmps)) {
471      if (LHS == RHS)
472        return LHS;
473      Vals.resize(NumVals);
474      UsedICmps = UsedICmpsBeforeRHS;
475    }
476
477    // The RHS of the or/and can't be folded in and we haven't used "Extra" yet,
478    // set it and return success.
479    if (Extra == 0 || Extra == I->getOperand(1)) {
480      Extra = I->getOperand(1);
481      return LHS;
482    }
483
484    Vals.resize(NumValsBeforeLHS);
485    UsedICmps = UsedICmpsBeforeLHS;
486    return 0;
487  }
488
489  // If the LHS can't be folded in, but Extra is available and RHS can, try to
490  // use LHS as Extra.
491  if (Extra == 0 || Extra == I->getOperand(0)) {
492    Value *OldExtra = Extra;
493    Extra = I->getOperand(0);
494    if (Value *RHS = GatherConstantCompares(I->getOperand(1), Vals, Extra, TD,
495                                            isEQ, UsedICmps))
496      return RHS;
497    assert(Vals.size() == NumValsBeforeLHS);
498    Extra = OldExtra;
499  }
500
501  return 0;
502}
503
504static void EraseTerminatorInstAndDCECond(TerminatorInst *TI) {
505  Instruction *Cond = 0;
506  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
507    Cond = dyn_cast<Instruction>(SI->getCondition());
508  } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
509    if (BI->isConditional())
510      Cond = dyn_cast<Instruction>(BI->getCondition());
511  } else if (IndirectBrInst *IBI = dyn_cast<IndirectBrInst>(TI)) {
512    Cond = dyn_cast<Instruction>(IBI->getAddress());
513  }
514
515  TI->eraseFromParent();
516  if (Cond) RecursivelyDeleteTriviallyDeadInstructions(Cond);
517}
518
519/// isValueEqualityComparison - Return true if the specified terminator checks
520/// to see if a value is equal to constant integer value.
521Value *SimplifyCFGOpt::isValueEqualityComparison(TerminatorInst *TI) {
522  Value *CV = 0;
523  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
524    // Do not permit merging of large switch instructions into their
525    // predecessors unless there is only one predecessor.
526    if (SI->getNumSuccessors()*std::distance(pred_begin(SI->getParent()),
527                                             pred_end(SI->getParent())) <= 128)
528      CV = SI->getCondition();
529  } else if (BranchInst *BI = dyn_cast<BranchInst>(TI))
530    if (BI->isConditional() && BI->getCondition()->hasOneUse())
531      if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition()))
532        if ((ICI->getPredicate() == ICmpInst::ICMP_EQ ||
533             ICI->getPredicate() == ICmpInst::ICMP_NE) &&
534            GetConstantInt(ICI->getOperand(1), TD))
535          CV = ICI->getOperand(0);
536
537  // Unwrap any lossless ptrtoint cast.
538  if (TD && CV) {
539    PtrToIntInst *PTII = NULL;
540    if ((PTII = dyn_cast<PtrToIntInst>(CV)) &&
541        CV->getType() == TD->getIntPtrType(CV->getContext(),
542          PTII->getPointerAddressSpace()))
543      CV = PTII->getOperand(0);
544  }
545  return CV;
546}
547
548/// GetValueEqualityComparisonCases - Given a value comparison instruction,
549/// decode all of the 'cases' that it represents and return the 'default' block.
550BasicBlock *SimplifyCFGOpt::
551GetValueEqualityComparisonCases(TerminatorInst *TI,
552                                std::vector<ValueEqualityComparisonCase>
553                                                                       &Cases) {
554  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
555    Cases.reserve(SI->getNumCases());
556    for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end(); i != e; ++i)
557      Cases.push_back(ValueEqualityComparisonCase(i.getCaseValue(),
558                                                  i.getCaseSuccessor()));
559    return SI->getDefaultDest();
560  }
561
562  BranchInst *BI = cast<BranchInst>(TI);
563  ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
564  BasicBlock *Succ = BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_NE);
565  Cases.push_back(ValueEqualityComparisonCase(GetConstantInt(ICI->getOperand(1),
566                                                             TD),
567                                              Succ));
568  return BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_EQ);
569}
570
571
572/// EliminateBlockCases - Given a vector of bb/value pairs, remove any entries
573/// in the list that match the specified block.
574static void EliminateBlockCases(BasicBlock *BB,
575                              std::vector<ValueEqualityComparisonCase> &Cases) {
576  Cases.erase(std::remove(Cases.begin(), Cases.end(), BB), Cases.end());
577}
578
579/// ValuesOverlap - Return true if there are any keys in C1 that exist in C2 as
580/// well.
581static bool
582ValuesOverlap(std::vector<ValueEqualityComparisonCase> &C1,
583              std::vector<ValueEqualityComparisonCase > &C2) {
584  std::vector<ValueEqualityComparisonCase> *V1 = &C1, *V2 = &C2;
585
586  // Make V1 be smaller than V2.
587  if (V1->size() > V2->size())
588    std::swap(V1, V2);
589
590  if (V1->size() == 0) return false;
591  if (V1->size() == 1) {
592    // Just scan V2.
593    ConstantInt *TheVal = (*V1)[0].Value;
594    for (unsigned i = 0, e = V2->size(); i != e; ++i)
595      if (TheVal == (*V2)[i].Value)
596        return true;
597  }
598
599  // Otherwise, just sort both lists and compare element by element.
600  array_pod_sort(V1->begin(), V1->end());
601  array_pod_sort(V2->begin(), V2->end());
602  unsigned i1 = 0, i2 = 0, e1 = V1->size(), e2 = V2->size();
603  while (i1 != e1 && i2 != e2) {
604    if ((*V1)[i1].Value == (*V2)[i2].Value)
605      return true;
606    if ((*V1)[i1].Value < (*V2)[i2].Value)
607      ++i1;
608    else
609      ++i2;
610  }
611  return false;
612}
613
614/// SimplifyEqualityComparisonWithOnlyPredecessor - If TI is known to be a
615/// terminator instruction and its block is known to only have a single
616/// predecessor block, check to see if that predecessor is also a value
617/// comparison with the same value, and if that comparison determines the
618/// outcome of this comparison.  If so, simplify TI.  This does a very limited
619/// form of jump threading.
620bool SimplifyCFGOpt::
621SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
622                                              BasicBlock *Pred,
623                                              IRBuilder<> &Builder) {
624  Value *PredVal = isValueEqualityComparison(Pred->getTerminator());
625  if (!PredVal) return false;  // Not a value comparison in predecessor.
626
627  Value *ThisVal = isValueEqualityComparison(TI);
628  assert(ThisVal && "This isn't a value comparison!!");
629  if (ThisVal != PredVal) return false;  // Different predicates.
630
631  // TODO: Preserve branch weight metadata, similarly to how
632  // FoldValueComparisonIntoPredecessors preserves it.
633
634  // Find out information about when control will move from Pred to TI's block.
635  std::vector<ValueEqualityComparisonCase> PredCases;
636  BasicBlock *PredDef = GetValueEqualityComparisonCases(Pred->getTerminator(),
637                                                        PredCases);
638  EliminateBlockCases(PredDef, PredCases);  // Remove default from cases.
639
640  // Find information about how control leaves this block.
641  std::vector<ValueEqualityComparisonCase> ThisCases;
642  BasicBlock *ThisDef = GetValueEqualityComparisonCases(TI, ThisCases);
643  EliminateBlockCases(ThisDef, ThisCases);  // Remove default from cases.
644
645  // If TI's block is the default block from Pred's comparison, potentially
646  // simplify TI based on this knowledge.
647  if (PredDef == TI->getParent()) {
648    // If we are here, we know that the value is none of those cases listed in
649    // PredCases.  If there are any cases in ThisCases that are in PredCases, we
650    // can simplify TI.
651    if (!ValuesOverlap(PredCases, ThisCases))
652      return false;
653
654    if (isa<BranchInst>(TI)) {
655      // Okay, one of the successors of this condbr is dead.  Convert it to a
656      // uncond br.
657      assert(ThisCases.size() == 1 && "Branch can only have one case!");
658      // Insert the new branch.
659      Instruction *NI = Builder.CreateBr(ThisDef);
660      (void) NI;
661
662      // Remove PHI node entries for the dead edge.
663      ThisCases[0].Dest->removePredecessor(TI->getParent());
664
665      DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
666           << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n");
667
668      EraseTerminatorInstAndDCECond(TI);
669      return true;
670    }
671
672    SwitchInst *SI = cast<SwitchInst>(TI);
673    // Okay, TI has cases that are statically dead, prune them away.
674    SmallPtrSet<Constant*, 16> DeadCases;
675    for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
676      DeadCases.insert(PredCases[i].Value);
677
678    DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
679                 << "Through successor TI: " << *TI);
680
681    // Collect branch weights into a vector.
682    SmallVector<uint32_t, 8> Weights;
683    MDNode* MD = SI->getMetadata(LLVMContext::MD_prof);
684    bool HasWeight = MD && (MD->getNumOperands() == 2 + SI->getNumCases());
685    if (HasWeight)
686      for (unsigned MD_i = 1, MD_e = MD->getNumOperands(); MD_i < MD_e;
687           ++MD_i) {
688        ConstantInt* CI = dyn_cast<ConstantInt>(MD->getOperand(MD_i));
689        assert(CI);
690        Weights.push_back(CI->getValue().getZExtValue());
691      }
692    for (SwitchInst::CaseIt i = SI->case_end(), e = SI->case_begin(); i != e;) {
693      --i;
694      if (DeadCases.count(i.getCaseValue())) {
695        if (HasWeight) {
696          std::swap(Weights[i.getCaseIndex()+1], Weights.back());
697          Weights.pop_back();
698        }
699        i.getCaseSuccessor()->removePredecessor(TI->getParent());
700        SI->removeCase(i);
701      }
702    }
703    if (HasWeight && Weights.size() >= 2)
704      SI->setMetadata(LLVMContext::MD_prof,
705                      MDBuilder(SI->getParent()->getContext()).
706                      createBranchWeights(Weights));
707
708    DEBUG(dbgs() << "Leaving: " << *TI << "\n");
709    return true;
710  }
711
712  // Otherwise, TI's block must correspond to some matched value.  Find out
713  // which value (or set of values) this is.
714  ConstantInt *TIV = 0;
715  BasicBlock *TIBB = TI->getParent();
716  for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
717    if (PredCases[i].Dest == TIBB) {
718      if (TIV != 0)
719        return false;  // Cannot handle multiple values coming to this block.
720      TIV = PredCases[i].Value;
721    }
722  assert(TIV && "No edge from pred to succ?");
723
724  // Okay, we found the one constant that our value can be if we get into TI's
725  // BB.  Find out which successor will unconditionally be branched to.
726  BasicBlock *TheRealDest = 0;
727  for (unsigned i = 0, e = ThisCases.size(); i != e; ++i)
728    if (ThisCases[i].Value == TIV) {
729      TheRealDest = ThisCases[i].Dest;
730      break;
731    }
732
733  // If not handled by any explicit cases, it is handled by the default case.
734  if (TheRealDest == 0) TheRealDest = ThisDef;
735
736  // Remove PHI node entries for dead edges.
737  BasicBlock *CheckEdge = TheRealDest;
738  for (succ_iterator SI = succ_begin(TIBB), e = succ_end(TIBB); SI != e; ++SI)
739    if (*SI != CheckEdge)
740      (*SI)->removePredecessor(TIBB);
741    else
742      CheckEdge = 0;
743
744  // Insert the new branch.
745  Instruction *NI = Builder.CreateBr(TheRealDest);
746  (void) NI;
747
748  DEBUG(dbgs() << "Threading pred instr: " << *Pred->getTerminator()
749            << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n");
750
751  EraseTerminatorInstAndDCECond(TI);
752  return true;
753}
754
755namespace {
756  /// ConstantIntOrdering - This class implements a stable ordering of constant
757  /// integers that does not depend on their address.  This is important for
758  /// applications that sort ConstantInt's to ensure uniqueness.
759  struct ConstantIntOrdering {
760    bool operator()(const ConstantInt *LHS, const ConstantInt *RHS) const {
761      return LHS->getValue().ult(RHS->getValue());
762    }
763  };
764}
765
766static int ConstantIntSortPredicate(const void *P1, const void *P2) {
767  const ConstantInt *LHS = *(const ConstantInt*const*)P1;
768  const ConstantInt *RHS = *(const ConstantInt*const*)P2;
769  if (LHS->getValue().ult(RHS->getValue()))
770    return 1;
771  if (LHS->getValue() == RHS->getValue())
772    return 0;
773  return -1;
774}
775
776static inline bool HasBranchWeights(const Instruction* I) {
777  MDNode* ProfMD = I->getMetadata(LLVMContext::MD_prof);
778  if (ProfMD && ProfMD->getOperand(0))
779    if (MDString* MDS = dyn_cast<MDString>(ProfMD->getOperand(0)))
780      return MDS->getString().equals("branch_weights");
781
782  return false;
783}
784
785/// Get Weights of a given TerminatorInst, the default weight is at the front
786/// of the vector. If TI is a conditional eq, we need to swap the branch-weight
787/// metadata.
788static void GetBranchWeights(TerminatorInst *TI,
789                             SmallVectorImpl<uint64_t> &Weights) {
790  MDNode* MD = TI->getMetadata(LLVMContext::MD_prof);
791  assert(MD);
792  for (unsigned i = 1, e = MD->getNumOperands(); i < e; ++i) {
793    ConstantInt* CI = dyn_cast<ConstantInt>(MD->getOperand(i));
794    assert(CI);
795    Weights.push_back(CI->getValue().getZExtValue());
796  }
797
798  // If TI is a conditional eq, the default case is the false case,
799  // and the corresponding branch-weight data is at index 2. We swap the
800  // default weight to be the first entry.
801  if (BranchInst* BI = dyn_cast<BranchInst>(TI)) {
802    assert(Weights.size() == 2);
803    ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
804    if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
805      std::swap(Weights.front(), Weights.back());
806  }
807}
808
809/// Sees if any of the weights are too big for a uint32_t, and halves all the
810/// weights if any are.
811static void FitWeights(MutableArrayRef<uint64_t> Weights) {
812  bool Halve = false;
813  for (unsigned i = 0; i < Weights.size(); ++i)
814    if (Weights[i] > UINT_MAX) {
815      Halve = true;
816      break;
817    }
818
819  if (! Halve)
820    return;
821
822  for (unsigned i = 0; i < Weights.size(); ++i)
823    Weights[i] /= 2;
824}
825
826/// FoldValueComparisonIntoPredecessors - The specified terminator is a value
827/// equality comparison instruction (either a switch or a branch on "X == c").
828/// See if any of the predecessors of the terminator block are value comparisons
829/// on the same value.  If so, and if safe to do so, fold them together.
830bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(TerminatorInst *TI,
831                                                         IRBuilder<> &Builder) {
832  BasicBlock *BB = TI->getParent();
833  Value *CV = isValueEqualityComparison(TI);  // CondVal
834  assert(CV && "Not a comparison?");
835  bool Changed = false;
836
837  SmallVector<BasicBlock*, 16> Preds(pred_begin(BB), pred_end(BB));
838  while (!Preds.empty()) {
839    BasicBlock *Pred = Preds.pop_back_val();
840
841    // See if the predecessor is a comparison with the same value.
842    TerminatorInst *PTI = Pred->getTerminator();
843    Value *PCV = isValueEqualityComparison(PTI);  // PredCondVal
844
845    if (PCV == CV && SafeToMergeTerminators(TI, PTI)) {
846      // Figure out which 'cases' to copy from SI to PSI.
847      std::vector<ValueEqualityComparisonCase> BBCases;
848      BasicBlock *BBDefault = GetValueEqualityComparisonCases(TI, BBCases);
849
850      std::vector<ValueEqualityComparisonCase> PredCases;
851      BasicBlock *PredDefault = GetValueEqualityComparisonCases(PTI, PredCases);
852
853      // Based on whether the default edge from PTI goes to BB or not, fill in
854      // PredCases and PredDefault with the new switch cases we would like to
855      // build.
856      SmallVector<BasicBlock*, 8> NewSuccessors;
857
858      // Update the branch weight metadata along the way
859      SmallVector<uint64_t, 8> Weights;
860      bool PredHasWeights = HasBranchWeights(PTI);
861      bool SuccHasWeights = HasBranchWeights(TI);
862
863      if (PredHasWeights) {
864        GetBranchWeights(PTI, Weights);
865        // branch-weight metadata is inconsistant here.
866        if (Weights.size() != 1 + PredCases.size())
867          PredHasWeights = SuccHasWeights = false;
868      } else if (SuccHasWeights)
869        // If there are no predecessor weights but there are successor weights,
870        // populate Weights with 1, which will later be scaled to the sum of
871        // successor's weights
872        Weights.assign(1 + PredCases.size(), 1);
873
874      SmallVector<uint64_t, 8> SuccWeights;
875      if (SuccHasWeights) {
876        GetBranchWeights(TI, SuccWeights);
877        // branch-weight metadata is inconsistant here.
878        if (SuccWeights.size() != 1 + BBCases.size())
879          PredHasWeights = SuccHasWeights = false;
880      } else if (PredHasWeights)
881        SuccWeights.assign(1 + BBCases.size(), 1);
882
883      if (PredDefault == BB) {
884        // If this is the default destination from PTI, only the edges in TI
885        // that don't occur in PTI, or that branch to BB will be activated.
886        std::set<ConstantInt*, ConstantIntOrdering> PTIHandled;
887        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
888          if (PredCases[i].Dest != BB)
889            PTIHandled.insert(PredCases[i].Value);
890          else {
891            // The default destination is BB, we don't need explicit targets.
892            std::swap(PredCases[i], PredCases.back());
893
894            if (PredHasWeights || SuccHasWeights) {
895              // Increase weight for the default case.
896              Weights[0] += Weights[i+1];
897              std::swap(Weights[i+1], Weights.back());
898              Weights.pop_back();
899            }
900
901            PredCases.pop_back();
902            --i; --e;
903          }
904
905        // Reconstruct the new switch statement we will be building.
906        if (PredDefault != BBDefault) {
907          PredDefault->removePredecessor(Pred);
908          PredDefault = BBDefault;
909          NewSuccessors.push_back(BBDefault);
910        }
911
912        unsigned CasesFromPred = Weights.size();
913        uint64_t ValidTotalSuccWeight = 0;
914        for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
915          if (!PTIHandled.count(BBCases[i].Value) &&
916              BBCases[i].Dest != BBDefault) {
917            PredCases.push_back(BBCases[i]);
918            NewSuccessors.push_back(BBCases[i].Dest);
919            if (SuccHasWeights || PredHasWeights) {
920              // The default weight is at index 0, so weight for the ith case
921              // should be at index i+1. Scale the cases from successor by
922              // PredDefaultWeight (Weights[0]).
923              Weights.push_back(Weights[0] * SuccWeights[i+1]);
924              ValidTotalSuccWeight += SuccWeights[i+1];
925            }
926          }
927
928        if (SuccHasWeights || PredHasWeights) {
929          ValidTotalSuccWeight += SuccWeights[0];
930          // Scale the cases from predecessor by ValidTotalSuccWeight.
931          for (unsigned i = 1; i < CasesFromPred; ++i)
932            Weights[i] *= ValidTotalSuccWeight;
933          // Scale the default weight by SuccDefaultWeight (SuccWeights[0]).
934          Weights[0] *= SuccWeights[0];
935        }
936      } else {
937        // If this is not the default destination from PSI, only the edges
938        // in SI that occur in PSI with a destination of BB will be
939        // activated.
940        std::set<ConstantInt*, ConstantIntOrdering> PTIHandled;
941        std::map<ConstantInt*, uint64_t> WeightsForHandled;
942        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
943          if (PredCases[i].Dest == BB) {
944            PTIHandled.insert(PredCases[i].Value);
945
946            if (PredHasWeights || SuccHasWeights) {
947              WeightsForHandled[PredCases[i].Value] = Weights[i+1];
948              std::swap(Weights[i+1], Weights.back());
949              Weights.pop_back();
950            }
951
952            std::swap(PredCases[i], PredCases.back());
953            PredCases.pop_back();
954            --i; --e;
955          }
956
957        // Okay, now we know which constants were sent to BB from the
958        // predecessor.  Figure out where they will all go now.
959        for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
960          if (PTIHandled.count(BBCases[i].Value)) {
961            // If this is one we are capable of getting...
962            if (PredHasWeights || SuccHasWeights)
963              Weights.push_back(WeightsForHandled[BBCases[i].Value]);
964            PredCases.push_back(BBCases[i]);
965            NewSuccessors.push_back(BBCases[i].Dest);
966            PTIHandled.erase(BBCases[i].Value);// This constant is taken care of
967          }
968
969        // If there are any constants vectored to BB that TI doesn't handle,
970        // they must go to the default destination of TI.
971        for (std::set<ConstantInt*, ConstantIntOrdering>::iterator I =
972                                    PTIHandled.begin(),
973               E = PTIHandled.end(); I != E; ++I) {
974          if (PredHasWeights || SuccHasWeights)
975            Weights.push_back(WeightsForHandled[*I]);
976          PredCases.push_back(ValueEqualityComparisonCase(*I, BBDefault));
977          NewSuccessors.push_back(BBDefault);
978        }
979      }
980
981      // Okay, at this point, we know which new successor Pred will get.  Make
982      // sure we update the number of entries in the PHI nodes for these
983      // successors.
984      for (unsigned i = 0, e = NewSuccessors.size(); i != e; ++i)
985        AddPredecessorToBlock(NewSuccessors[i], Pred, BB);
986
987      Builder.SetInsertPoint(PTI);
988      // Convert pointer to int before we switch.
989      if (CV->getType()->isPointerTy()) {
990        assert(TD && "Cannot switch on pointer without DataLayout");
991        CV = Builder.CreatePtrToInt(CV, TD->getIntPtrType(CV->getType()),
992                                    "magicptr");
993      }
994
995      // Now that the successors are updated, create the new Switch instruction.
996      SwitchInst *NewSI = Builder.CreateSwitch(CV, PredDefault,
997                                               PredCases.size());
998      NewSI->setDebugLoc(PTI->getDebugLoc());
999      for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
1000        NewSI->addCase(PredCases[i].Value, PredCases[i].Dest);
1001
1002      if (PredHasWeights || SuccHasWeights) {
1003        // Halve the weights if any of them cannot fit in an uint32_t
1004        FitWeights(Weights);
1005
1006        SmallVector<uint32_t, 8> MDWeights(Weights.begin(), Weights.end());
1007
1008        NewSI->setMetadata(LLVMContext::MD_prof,
1009                           MDBuilder(BB->getContext()).
1010                           createBranchWeights(MDWeights));
1011      }
1012
1013      EraseTerminatorInstAndDCECond(PTI);
1014
1015      // Okay, last check.  If BB is still a successor of PSI, then we must
1016      // have an infinite loop case.  If so, add an infinitely looping block
1017      // to handle the case to preserve the behavior of the code.
1018      BasicBlock *InfLoopBlock = 0;
1019      for (unsigned i = 0, e = NewSI->getNumSuccessors(); i != e; ++i)
1020        if (NewSI->getSuccessor(i) == BB) {
1021          if (InfLoopBlock == 0) {
1022            // Insert it at the end of the function, because it's either code,
1023            // or it won't matter if it's hot. :)
1024            InfLoopBlock = BasicBlock::Create(BB->getContext(),
1025                                              "infloop", BB->getParent());
1026            BranchInst::Create(InfLoopBlock, InfLoopBlock);
1027          }
1028          NewSI->setSuccessor(i, InfLoopBlock);
1029        }
1030
1031      Changed = true;
1032    }
1033  }
1034  return Changed;
1035}
1036
1037// isSafeToHoistInvoke - If we would need to insert a select that uses the
1038// value of this invoke (comments in HoistThenElseCodeToIf explain why we
1039// would need to do this), we can't hoist the invoke, as there is nowhere
1040// to put the select in this case.
1041static bool isSafeToHoistInvoke(BasicBlock *BB1, BasicBlock *BB2,
1042                                Instruction *I1, Instruction *I2) {
1043  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) {
1044    PHINode *PN;
1045    for (BasicBlock::iterator BBI = SI->begin();
1046         (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
1047      Value *BB1V = PN->getIncomingValueForBlock(BB1);
1048      Value *BB2V = PN->getIncomingValueForBlock(BB2);
1049      if (BB1V != BB2V && (BB1V==I1 || BB2V==I2)) {
1050        return false;
1051      }
1052    }
1053  }
1054  return true;
1055}
1056
1057/// HoistThenElseCodeToIf - Given a conditional branch that goes to BB1 and
1058/// BB2, hoist any common code in the two blocks up into the branch block.  The
1059/// caller of this function guarantees that BI's block dominates BB1 and BB2.
1060static bool HoistThenElseCodeToIf(BranchInst *BI) {
1061  // This does very trivial matching, with limited scanning, to find identical
1062  // instructions in the two blocks.  In particular, we don't want to get into
1063  // O(M*N) situations here where M and N are the sizes of BB1 and BB2.  As
1064  // such, we currently just scan for obviously identical instructions in an
1065  // identical order.
1066  BasicBlock *BB1 = BI->getSuccessor(0);  // The true destination.
1067  BasicBlock *BB2 = BI->getSuccessor(1);  // The false destination
1068
1069  BasicBlock::iterator BB1_Itr = BB1->begin();
1070  BasicBlock::iterator BB2_Itr = BB2->begin();
1071
1072  Instruction *I1 = BB1_Itr++, *I2 = BB2_Itr++;
1073  // Skip debug info if it is not identical.
1074  DbgInfoIntrinsic *DBI1 = dyn_cast<DbgInfoIntrinsic>(I1);
1075  DbgInfoIntrinsic *DBI2 = dyn_cast<DbgInfoIntrinsic>(I2);
1076  if (!DBI1 || !DBI2 || !DBI1->isIdenticalToWhenDefined(DBI2)) {
1077    while (isa<DbgInfoIntrinsic>(I1))
1078      I1 = BB1_Itr++;
1079    while (isa<DbgInfoIntrinsic>(I2))
1080      I2 = BB2_Itr++;
1081  }
1082  if (isa<PHINode>(I1) || !I1->isIdenticalToWhenDefined(I2) ||
1083      (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2)))
1084    return false;
1085
1086  // If we get here, we can hoist at least one instruction.
1087  BasicBlock *BIParent = BI->getParent();
1088
1089  do {
1090    // If we are hoisting the terminator instruction, don't move one (making a
1091    // broken BB), instead clone it, and remove BI.
1092    if (isa<TerminatorInst>(I1))
1093      goto HoistTerminator;
1094
1095    // For a normal instruction, we just move one to right before the branch,
1096    // then replace all uses of the other with the first.  Finally, we remove
1097    // the now redundant second instruction.
1098    BIParent->getInstList().splice(BI, BB1->getInstList(), I1);
1099    if (!I2->use_empty())
1100      I2->replaceAllUsesWith(I1);
1101    I1->intersectOptionalDataWith(I2);
1102    I2->eraseFromParent();
1103
1104    I1 = BB1_Itr++;
1105    I2 = BB2_Itr++;
1106    // Skip debug info if it is not identical.
1107    DbgInfoIntrinsic *DBI1 = dyn_cast<DbgInfoIntrinsic>(I1);
1108    DbgInfoIntrinsic *DBI2 = dyn_cast<DbgInfoIntrinsic>(I2);
1109    if (!DBI1 || !DBI2 || !DBI1->isIdenticalToWhenDefined(DBI2)) {
1110      while (isa<DbgInfoIntrinsic>(I1))
1111        I1 = BB1_Itr++;
1112      while (isa<DbgInfoIntrinsic>(I2))
1113        I2 = BB2_Itr++;
1114    }
1115  } while (I1->isIdenticalToWhenDefined(I2));
1116
1117  return true;
1118
1119HoistTerminator:
1120  // It may not be possible to hoist an invoke.
1121  if (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2))
1122    return true;
1123
1124  // Okay, it is safe to hoist the terminator.
1125  Instruction *NT = I1->clone();
1126  BIParent->getInstList().insert(BI, NT);
1127  if (!NT->getType()->isVoidTy()) {
1128    I1->replaceAllUsesWith(NT);
1129    I2->replaceAllUsesWith(NT);
1130    NT->takeName(I1);
1131  }
1132
1133  IRBuilder<true, NoFolder> Builder(NT);
1134  // Hoisting one of the terminators from our successor is a great thing.
1135  // Unfortunately, the successors of the if/else blocks may have PHI nodes in
1136  // them.  If they do, all PHI entries for BB1/BB2 must agree for all PHI
1137  // nodes, so we insert select instruction to compute the final result.
1138  std::map<std::pair<Value*,Value*>, SelectInst*> InsertedSelects;
1139  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) {
1140    PHINode *PN;
1141    for (BasicBlock::iterator BBI = SI->begin();
1142         (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
1143      Value *BB1V = PN->getIncomingValueForBlock(BB1);
1144      Value *BB2V = PN->getIncomingValueForBlock(BB2);
1145      if (BB1V == BB2V) continue;
1146
1147      // These values do not agree.  Insert a select instruction before NT
1148      // that determines the right value.
1149      SelectInst *&SI = InsertedSelects[std::make_pair(BB1V, BB2V)];
1150      if (SI == 0)
1151        SI = cast<SelectInst>
1152          (Builder.CreateSelect(BI->getCondition(), BB1V, BB2V,
1153                                BB1V->getName()+"."+BB2V->getName()));
1154
1155      // Make the PHI node use the select for all incoming values for BB1/BB2
1156      for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
1157        if (PN->getIncomingBlock(i) == BB1 || PN->getIncomingBlock(i) == BB2)
1158          PN->setIncomingValue(i, SI);
1159    }
1160  }
1161
1162  // Update any PHI nodes in our new successors.
1163  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI)
1164    AddPredecessorToBlock(*SI, BIParent, BB1);
1165
1166  EraseTerminatorInstAndDCECond(BI);
1167  return true;
1168}
1169
1170/// SinkThenElseCodeToEnd - Given an unconditional branch that goes to BBEnd,
1171/// check whether BBEnd has only two predecessors and the other predecessor
1172/// ends with an unconditional branch. If it is true, sink any common code
1173/// in the two predecessors to BBEnd.
1174static bool SinkThenElseCodeToEnd(BranchInst *BI1) {
1175  assert(BI1->isUnconditional());
1176  BasicBlock *BB1 = BI1->getParent();
1177  BasicBlock *BBEnd = BI1->getSuccessor(0);
1178
1179  // Check that BBEnd has two predecessors and the other predecessor ends with
1180  // an unconditional branch.
1181  pred_iterator PI = pred_begin(BBEnd), PE = pred_end(BBEnd);
1182  BasicBlock *Pred0 = *PI++;
1183  if (PI == PE) // Only one predecessor.
1184    return false;
1185  BasicBlock *Pred1 = *PI++;
1186  if (PI != PE) // More than two predecessors.
1187    return false;
1188  BasicBlock *BB2 = (Pred0 == BB1) ? Pred1 : Pred0;
1189  BranchInst *BI2 = dyn_cast<BranchInst>(BB2->getTerminator());
1190  if (!BI2 || !BI2->isUnconditional())
1191    return false;
1192
1193  // Gather the PHI nodes in BBEnd.
1194  std::map<Value*, std::pair<Value*, PHINode*> > MapValueFromBB1ToBB2;
1195  Instruction *FirstNonPhiInBBEnd = 0;
1196  for (BasicBlock::iterator I = BBEnd->begin(), E = BBEnd->end();
1197       I != E; ++I) {
1198    if (PHINode *PN = dyn_cast<PHINode>(I)) {
1199      Value *BB1V = PN->getIncomingValueForBlock(BB1);
1200      Value *BB2V = PN->getIncomingValueForBlock(BB2);
1201      MapValueFromBB1ToBB2[BB1V] = std::make_pair(BB2V, PN);
1202    } else {
1203      FirstNonPhiInBBEnd = &*I;
1204      break;
1205    }
1206  }
1207  if (!FirstNonPhiInBBEnd)
1208    return false;
1209
1210
1211  // This does very trivial matching, with limited scanning, to find identical
1212  // instructions in the two blocks.  We scan backward for obviously identical
1213  // instructions in an identical order.
1214  BasicBlock::InstListType::reverse_iterator RI1 = BB1->getInstList().rbegin(),
1215      RE1 = BB1->getInstList().rend(), RI2 = BB2->getInstList().rbegin(),
1216      RE2 = BB2->getInstList().rend();
1217  // Skip debug info.
1218  while (RI1 != RE1 && isa<DbgInfoIntrinsic>(&*RI1)) ++RI1;
1219  if (RI1 == RE1)
1220    return false;
1221  while (RI2 != RE2 && isa<DbgInfoIntrinsic>(&*RI2)) ++RI2;
1222  if (RI2 == RE2)
1223    return false;
1224  // Skip the unconditional branches.
1225  ++RI1;
1226  ++RI2;
1227
1228  bool Changed = false;
1229  while (RI1 != RE1 && RI2 != RE2) {
1230    // Skip debug info.
1231    while (RI1 != RE1 && isa<DbgInfoIntrinsic>(&*RI1)) ++RI1;
1232    if (RI1 == RE1)
1233      return Changed;
1234    while (RI2 != RE2 && isa<DbgInfoIntrinsic>(&*RI2)) ++RI2;
1235    if (RI2 == RE2)
1236      return Changed;
1237
1238    Instruction *I1 = &*RI1, *I2 = &*RI2;
1239    // I1 and I2 should have a single use in the same PHI node, and they
1240    // perform the same operation.
1241    // Cannot move control-flow-involving, volatile loads, vaarg, etc.
1242    if (isa<PHINode>(I1) || isa<PHINode>(I2) ||
1243        isa<TerminatorInst>(I1) || isa<TerminatorInst>(I2) ||
1244        isa<LandingPadInst>(I1) || isa<LandingPadInst>(I2) ||
1245        isa<AllocaInst>(I1) || isa<AllocaInst>(I2) ||
1246        I1->mayHaveSideEffects() || I2->mayHaveSideEffects() ||
1247        I1->mayReadOrWriteMemory() || I2->mayReadOrWriteMemory() ||
1248        !I1->hasOneUse() || !I2->hasOneUse() ||
1249        MapValueFromBB1ToBB2.find(I1) == MapValueFromBB1ToBB2.end() ||
1250        MapValueFromBB1ToBB2[I1].first != I2)
1251      return Changed;
1252
1253    // Check whether we should swap the operands of ICmpInst.
1254    ICmpInst *ICmp1 = dyn_cast<ICmpInst>(I1), *ICmp2 = dyn_cast<ICmpInst>(I2);
1255    bool SwapOpnds = false;
1256    if (ICmp1 && ICmp2 &&
1257        ICmp1->getOperand(0) != ICmp2->getOperand(0) &&
1258        ICmp1->getOperand(1) != ICmp2->getOperand(1) &&
1259        (ICmp1->getOperand(0) == ICmp2->getOperand(1) ||
1260         ICmp1->getOperand(1) == ICmp2->getOperand(0))) {
1261      ICmp2->swapOperands();
1262      SwapOpnds = true;
1263    }
1264    if (!I1->isSameOperationAs(I2)) {
1265      if (SwapOpnds)
1266        ICmp2->swapOperands();
1267      return Changed;
1268    }
1269
1270    // The operands should be either the same or they need to be generated
1271    // with a PHI node after sinking. We only handle the case where there is
1272    // a single pair of different operands.
1273    Value *DifferentOp1 = 0, *DifferentOp2 = 0;
1274    unsigned Op1Idx = 0;
1275    for (unsigned I = 0, E = I1->getNumOperands(); I != E; ++I) {
1276      if (I1->getOperand(I) == I2->getOperand(I))
1277        continue;
1278      // Early exit if we have more-than one pair of different operands or
1279      // the different operand is already in MapValueFromBB1ToBB2.
1280      // Early exit if we need a PHI node to replace a constant.
1281      if (DifferentOp1 ||
1282          MapValueFromBB1ToBB2.find(I1->getOperand(I)) !=
1283          MapValueFromBB1ToBB2.end() ||
1284          isa<Constant>(I1->getOperand(I)) ||
1285          isa<Constant>(I2->getOperand(I))) {
1286        // If we can't sink the instructions, undo the swapping.
1287        if (SwapOpnds)
1288          ICmp2->swapOperands();
1289        return Changed;
1290      }
1291      DifferentOp1 = I1->getOperand(I);
1292      Op1Idx = I;
1293      DifferentOp2 = I2->getOperand(I);
1294    }
1295
1296    // We insert the pair of different operands to MapValueFromBB1ToBB2 and
1297    // remove (I1, I2) from MapValueFromBB1ToBB2.
1298    if (DifferentOp1) {
1299      PHINode *NewPN = PHINode::Create(DifferentOp1->getType(), 2,
1300                                       DifferentOp1->getName() + ".sink",
1301                                       BBEnd->begin());
1302      MapValueFromBB1ToBB2[DifferentOp1] = std::make_pair(DifferentOp2, NewPN);
1303      // I1 should use NewPN instead of DifferentOp1.
1304      I1->setOperand(Op1Idx, NewPN);
1305      NewPN->addIncoming(DifferentOp1, BB1);
1306      NewPN->addIncoming(DifferentOp2, BB2);
1307      DEBUG(dbgs() << "Create PHI node " << *NewPN << "\n";);
1308    }
1309    PHINode *OldPN = MapValueFromBB1ToBB2[I1].second;
1310    MapValueFromBB1ToBB2.erase(I1);
1311
1312    DEBUG(dbgs() << "SINK common instructions " << *I1 << "\n";);
1313    DEBUG(dbgs() << "                         " << *I2 << "\n";);
1314    // We need to update RE1 and RE2 if we are going to sink the first
1315    // instruction in the basic block down.
1316    bool UpdateRE1 = (I1 == BB1->begin()), UpdateRE2 = (I2 == BB2->begin());
1317    // Sink the instruction.
1318    BBEnd->getInstList().splice(FirstNonPhiInBBEnd, BB1->getInstList(), I1);
1319    if (!OldPN->use_empty())
1320      OldPN->replaceAllUsesWith(I1);
1321    OldPN->eraseFromParent();
1322
1323    if (!I2->use_empty())
1324      I2->replaceAllUsesWith(I1);
1325    I1->intersectOptionalDataWith(I2);
1326    I2->eraseFromParent();
1327
1328    if (UpdateRE1)
1329      RE1 = BB1->getInstList().rend();
1330    if (UpdateRE2)
1331      RE2 = BB2->getInstList().rend();
1332    FirstNonPhiInBBEnd = I1;
1333    NumSinkCommons++;
1334    Changed = true;
1335  }
1336  return Changed;
1337}
1338
1339/// SpeculativelyExecuteBB - Given a conditional branch that goes to BB1
1340/// and an BB2 and the only successor of BB1 is BB2, hoist simple code
1341/// (for now, restricted to a single instruction that's side effect free) from
1342/// the BB1 into the branch block to speculatively execute it.
1343///
1344/// Turn
1345/// BB:
1346///     %t1 = icmp
1347///     br i1 %t1, label %BB1, label %BB2
1348/// BB1:
1349///     %t3 = add %t2, c
1350///     br label BB2
1351/// BB2:
1352/// =>
1353/// BB:
1354///     %t1 = icmp
1355///     %t4 = add %t2, c
1356///     %t3 = select i1 %t1, %t2, %t3
1357static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) {
1358  // Only speculatively execution a single instruction (not counting the
1359  // terminator) for now.
1360  Instruction *HInst = NULL;
1361  Instruction *Term = BB1->getTerminator();
1362  for (BasicBlock::iterator BBI = BB1->begin(), BBE = BB1->end();
1363       BBI != BBE; ++BBI) {
1364    Instruction *I = BBI;
1365    // Skip debug info.
1366    if (isa<DbgInfoIntrinsic>(I)) continue;
1367    if (I == Term) break;
1368
1369    if (HInst)
1370      return false;
1371    HInst = I;
1372  }
1373
1374  BasicBlock *BIParent = BI->getParent();
1375
1376  // Check the instruction to be hoisted, if there is one.
1377  if (HInst) {
1378    // Don't hoist the instruction if it's unsafe or expensive.
1379    if (!isSafeToSpeculativelyExecute(HInst))
1380      return false;
1381    if (ComputeSpeculationCost(HInst) > PHINodeFoldingThreshold)
1382      return false;
1383
1384    // Do not hoist the instruction if any of its operands are defined but not
1385    // used in this BB. The transformation will prevent the operand from
1386    // being sunk into the use block.
1387    for (User::op_iterator i = HInst->op_begin(), e = HInst->op_end();
1388         i != e; ++i) {
1389      Instruction *OpI = dyn_cast<Instruction>(*i);
1390      if (OpI && OpI->getParent() == BIParent &&
1391          !OpI->mayHaveSideEffects() &&
1392          !OpI->isUsedInBasicBlock(BIParent))
1393        return false;
1394    }
1395  }
1396
1397  // Be conservative for now. FP select instruction can often be expensive.
1398  Value *BrCond = BI->getCondition();
1399  if (isa<FCmpInst>(BrCond))
1400    return false;
1401
1402  // If BB1 is actually on the false edge of the conditional branch, remember
1403  // to swap the select operands later.
1404  bool Invert = false;
1405  if (BB1 != BI->getSuccessor(0)) {
1406    assert(BB1 == BI->getSuccessor(1) && "No edge from 'if' block?");
1407    Invert = true;
1408  }
1409
1410  // Collect interesting PHIs, and scan for hazards.
1411  SmallSetVector<std::pair<Value *, Value *>, 4> PHIs;
1412  BasicBlock *BB2 = BB1->getTerminator()->getSuccessor(0);
1413  for (BasicBlock::iterator I = BB2->begin();
1414       PHINode *PN = dyn_cast<PHINode>(I); ++I) {
1415    Value *BB1V = PN->getIncomingValueForBlock(BB1);
1416    Value *BIParentV = PN->getIncomingValueForBlock(BIParent);
1417
1418    // Skip PHIs which are trivial.
1419    if (BB1V == BIParentV)
1420      continue;
1421
1422    // Check for saftey.
1423    if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BB1V)) {
1424      // An unfolded ConstantExpr could end up getting expanded into
1425      // Instructions. Don't speculate this and another instruction at
1426      // the same time.
1427      if (HInst)
1428        return false;
1429      if (!isSafeToSpeculativelyExecute(CE))
1430        return false;
1431      if (ComputeSpeculationCost(CE) > PHINodeFoldingThreshold)
1432        return false;
1433    }
1434
1435    // Ok, we may insert a select for this PHI.
1436    PHIs.insert(std::make_pair(BB1V, BIParentV));
1437  }
1438
1439  // If there are no PHIs to process, bail early. This helps ensure idempotence
1440  // as well.
1441  if (PHIs.empty())
1442    return false;
1443
1444  // If we get here, we can hoist the instruction and if-convert.
1445  DEBUG(dbgs() << "SPECULATIVELY EXECUTING BB" << *BB1 << "\n";);
1446
1447  // Hoist the instruction.
1448  if (HInst)
1449    BIParent->getInstList().splice(BI, BB1->getInstList(), HInst);
1450
1451  // Insert selects and rewrite the PHI operands.
1452  IRBuilder<true, NoFolder> Builder(BI);
1453  for (unsigned i = 0, e = PHIs.size(); i != e; ++i) {
1454    Value *TrueV = PHIs[i].first;
1455    Value *FalseV = PHIs[i].second;
1456
1457    // Create a select whose true value is the speculatively executed value and
1458    // false value is the previously determined FalseV.
1459    SelectInst *SI;
1460    if (Invert)
1461      SI = cast<SelectInst>
1462        (Builder.CreateSelect(BrCond, FalseV, TrueV,
1463                              FalseV->getName() + "." + TrueV->getName()));
1464    else
1465      SI = cast<SelectInst>
1466        (Builder.CreateSelect(BrCond, TrueV, FalseV,
1467                              TrueV->getName() + "." + FalseV->getName()));
1468
1469    // Make the PHI node use the select for all incoming values for "then" and
1470    // "if" blocks.
1471    for (BasicBlock::iterator I = BB2->begin();
1472         PHINode *PN = dyn_cast<PHINode>(I); ++I) {
1473      unsigned BB1I = PN->getBasicBlockIndex(BB1);
1474      unsigned BIParentI = PN->getBasicBlockIndex(BIParent);
1475      Value *BB1V = PN->getIncomingValue(BB1I);
1476      Value *BIParentV = PN->getIncomingValue(BIParentI);
1477      if (TrueV == BB1V && FalseV == BIParentV) {
1478        PN->setIncomingValue(BB1I, SI);
1479        PN->setIncomingValue(BIParentI, SI);
1480      }
1481    }
1482  }
1483
1484  ++NumSpeculations;
1485  return true;
1486}
1487
1488/// BlockIsSimpleEnoughToThreadThrough - Return true if we can thread a branch
1489/// across this block.
1490static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB) {
1491  BranchInst *BI = cast<BranchInst>(BB->getTerminator());
1492  unsigned Size = 0;
1493
1494  for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
1495    if (isa<DbgInfoIntrinsic>(BBI))
1496      continue;
1497    if (Size > 10) return false;  // Don't clone large BB's.
1498    ++Size;
1499
1500    // We can only support instructions that do not define values that are
1501    // live outside of the current basic block.
1502    for (Value::use_iterator UI = BBI->use_begin(), E = BBI->use_end();
1503         UI != E; ++UI) {
1504      Instruction *U = cast<Instruction>(*UI);
1505      if (U->getParent() != BB || isa<PHINode>(U)) return false;
1506    }
1507
1508    // Looks ok, continue checking.
1509  }
1510
1511  return true;
1512}
1513
1514/// FoldCondBranchOnPHI - If we have a conditional branch on a PHI node value
1515/// that is defined in the same block as the branch and if any PHI entries are
1516/// constants, thread edges corresponding to that entry to be branches to their
1517/// ultimate destination.
1518static bool FoldCondBranchOnPHI(BranchInst *BI, const DataLayout *TD) {
1519  BasicBlock *BB = BI->getParent();
1520  PHINode *PN = dyn_cast<PHINode>(BI->getCondition());
1521  // NOTE: we currently cannot transform this case if the PHI node is used
1522  // outside of the block.
1523  if (!PN || PN->getParent() != BB || !PN->hasOneUse())
1524    return false;
1525
1526  // Degenerate case of a single entry PHI.
1527  if (PN->getNumIncomingValues() == 1) {
1528    FoldSingleEntryPHINodes(PN->getParent());
1529    return true;
1530  }
1531
1532  // Now we know that this block has multiple preds and two succs.
1533  if (!BlockIsSimpleEnoughToThreadThrough(BB)) return false;
1534
1535  // Okay, this is a simple enough basic block.  See if any phi values are
1536  // constants.
1537  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
1538    ConstantInt *CB = dyn_cast<ConstantInt>(PN->getIncomingValue(i));
1539    if (CB == 0 || !CB->getType()->isIntegerTy(1)) continue;
1540
1541    // Okay, we now know that all edges from PredBB should be revectored to
1542    // branch to RealDest.
1543    BasicBlock *PredBB = PN->getIncomingBlock(i);
1544    BasicBlock *RealDest = BI->getSuccessor(!CB->getZExtValue());
1545
1546    if (RealDest == BB) continue;  // Skip self loops.
1547    // Skip if the predecessor's terminator is an indirect branch.
1548    if (isa<IndirectBrInst>(PredBB->getTerminator())) continue;
1549
1550    // The dest block might have PHI nodes, other predecessors and other
1551    // difficult cases.  Instead of being smart about this, just insert a new
1552    // block that jumps to the destination block, effectively splitting
1553    // the edge we are about to create.
1554    BasicBlock *EdgeBB = BasicBlock::Create(BB->getContext(),
1555                                            RealDest->getName()+".critedge",
1556                                            RealDest->getParent(), RealDest);
1557    BranchInst::Create(RealDest, EdgeBB);
1558
1559    // Update PHI nodes.
1560    AddPredecessorToBlock(RealDest, EdgeBB, BB);
1561
1562    // BB may have instructions that are being threaded over.  Clone these
1563    // instructions into EdgeBB.  We know that there will be no uses of the
1564    // cloned instructions outside of EdgeBB.
1565    BasicBlock::iterator InsertPt = EdgeBB->begin();
1566    DenseMap<Value*, Value*> TranslateMap;  // Track translated values.
1567    for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
1568      if (PHINode *PN = dyn_cast<PHINode>(BBI)) {
1569        TranslateMap[PN] = PN->getIncomingValueForBlock(PredBB);
1570        continue;
1571      }
1572      // Clone the instruction.
1573      Instruction *N = BBI->clone();
1574      if (BBI->hasName()) N->setName(BBI->getName()+".c");
1575
1576      // Update operands due to translation.
1577      for (User::op_iterator i = N->op_begin(), e = N->op_end();
1578           i != e; ++i) {
1579        DenseMap<Value*, Value*>::iterator PI = TranslateMap.find(*i);
1580        if (PI != TranslateMap.end())
1581          *i = PI->second;
1582      }
1583
1584      // Check for trivial simplification.
1585      if (Value *V = SimplifyInstruction(N, TD)) {
1586        TranslateMap[BBI] = V;
1587        delete N;   // Instruction folded away, don't need actual inst
1588      } else {
1589        // Insert the new instruction into its new home.
1590        EdgeBB->getInstList().insert(InsertPt, N);
1591        if (!BBI->use_empty())
1592          TranslateMap[BBI] = N;
1593      }
1594    }
1595
1596    // Loop over all of the edges from PredBB to BB, changing them to branch
1597    // to EdgeBB instead.
1598    TerminatorInst *PredBBTI = PredBB->getTerminator();
1599    for (unsigned i = 0, e = PredBBTI->getNumSuccessors(); i != e; ++i)
1600      if (PredBBTI->getSuccessor(i) == BB) {
1601        BB->removePredecessor(PredBB);
1602        PredBBTI->setSuccessor(i, EdgeBB);
1603      }
1604
1605    // Recurse, simplifying any other constants.
1606    return FoldCondBranchOnPHI(BI, TD) | true;
1607  }
1608
1609  return false;
1610}
1611
1612/// FoldTwoEntryPHINode - Given a BB that starts with the specified two-entry
1613/// PHI node, see if we can eliminate it.
1614static bool FoldTwoEntryPHINode(PHINode *PN, const DataLayout *TD) {
1615  // Ok, this is a two entry PHI node.  Check to see if this is a simple "if
1616  // statement", which has a very simple dominance structure.  Basically, we
1617  // are trying to find the condition that is being branched on, which
1618  // subsequently causes this merge to happen.  We really want control
1619  // dependence information for this check, but simplifycfg can't keep it up
1620  // to date, and this catches most of the cases we care about anyway.
1621  BasicBlock *BB = PN->getParent();
1622  BasicBlock *IfTrue, *IfFalse;
1623  Value *IfCond = GetIfCondition(BB, IfTrue, IfFalse);
1624  if (!IfCond ||
1625      // Don't bother if the branch will be constant folded trivially.
1626      isa<ConstantInt>(IfCond))
1627    return false;
1628
1629  // Okay, we found that we can merge this two-entry phi node into a select.
1630  // Doing so would require us to fold *all* two entry phi nodes in this block.
1631  // At some point this becomes non-profitable (particularly if the target
1632  // doesn't support cmov's).  Only do this transformation if there are two or
1633  // fewer PHI nodes in this block.
1634  unsigned NumPhis = 0;
1635  for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++NumPhis, ++I)
1636    if (NumPhis > 2)
1637      return false;
1638
1639  // Loop over the PHI's seeing if we can promote them all to select
1640  // instructions.  While we are at it, keep track of the instructions
1641  // that need to be moved to the dominating block.
1642  SmallPtrSet<Instruction*, 4> AggressiveInsts;
1643  unsigned MaxCostVal0 = PHINodeFoldingThreshold,
1644           MaxCostVal1 = PHINodeFoldingThreshold;
1645
1646  for (BasicBlock::iterator II = BB->begin(); isa<PHINode>(II);) {
1647    PHINode *PN = cast<PHINode>(II++);
1648    if (Value *V = SimplifyInstruction(PN, TD)) {
1649      PN->replaceAllUsesWith(V);
1650      PN->eraseFromParent();
1651      continue;
1652    }
1653
1654    if (!DominatesMergePoint(PN->getIncomingValue(0), BB, &AggressiveInsts,
1655                             MaxCostVal0) ||
1656        !DominatesMergePoint(PN->getIncomingValue(1), BB, &AggressiveInsts,
1657                             MaxCostVal1))
1658      return false;
1659  }
1660
1661  // If we folded the first phi, PN dangles at this point.  Refresh it.  If
1662  // we ran out of PHIs then we simplified them all.
1663  PN = dyn_cast<PHINode>(BB->begin());
1664  if (PN == 0) return true;
1665
1666  // Don't fold i1 branches on PHIs which contain binary operators.  These can
1667  // often be turned into switches and other things.
1668  if (PN->getType()->isIntegerTy(1) &&
1669      (isa<BinaryOperator>(PN->getIncomingValue(0)) ||
1670       isa<BinaryOperator>(PN->getIncomingValue(1)) ||
1671       isa<BinaryOperator>(IfCond)))
1672    return false;
1673
1674  // If we all PHI nodes are promotable, check to make sure that all
1675  // instructions in the predecessor blocks can be promoted as well.  If
1676  // not, we won't be able to get rid of the control flow, so it's not
1677  // worth promoting to select instructions.
1678  BasicBlock *DomBlock = 0;
1679  BasicBlock *IfBlock1 = PN->getIncomingBlock(0);
1680  BasicBlock *IfBlock2 = PN->getIncomingBlock(1);
1681  if (cast<BranchInst>(IfBlock1->getTerminator())->isConditional()) {
1682    IfBlock1 = 0;
1683  } else {
1684    DomBlock = *pred_begin(IfBlock1);
1685    for (BasicBlock::iterator I = IfBlock1->begin();!isa<TerminatorInst>(I);++I)
1686      if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) {
1687        // This is not an aggressive instruction that we can promote.
1688        // Because of this, we won't be able to get rid of the control
1689        // flow, so the xform is not worth it.
1690        return false;
1691      }
1692  }
1693
1694  if (cast<BranchInst>(IfBlock2->getTerminator())->isConditional()) {
1695    IfBlock2 = 0;
1696  } else {
1697    DomBlock = *pred_begin(IfBlock2);
1698    for (BasicBlock::iterator I = IfBlock2->begin();!isa<TerminatorInst>(I);++I)
1699      if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) {
1700        // This is not an aggressive instruction that we can promote.
1701        // Because of this, we won't be able to get rid of the control
1702        // flow, so the xform is not worth it.
1703        return false;
1704      }
1705  }
1706
1707  DEBUG(dbgs() << "FOUND IF CONDITION!  " << *IfCond << "  T: "
1708               << IfTrue->getName() << "  F: " << IfFalse->getName() << "\n");
1709
1710  // If we can still promote the PHI nodes after this gauntlet of tests,
1711  // do all of the PHI's now.
1712  Instruction *InsertPt = DomBlock->getTerminator();
1713  IRBuilder<true, NoFolder> Builder(InsertPt);
1714
1715  // Move all 'aggressive' instructions, which are defined in the
1716  // conditional parts of the if's up to the dominating block.
1717  if (IfBlock1)
1718    DomBlock->getInstList().splice(InsertPt,
1719                                   IfBlock1->getInstList(), IfBlock1->begin(),
1720                                   IfBlock1->getTerminator());
1721  if (IfBlock2)
1722    DomBlock->getInstList().splice(InsertPt,
1723                                   IfBlock2->getInstList(), IfBlock2->begin(),
1724                                   IfBlock2->getTerminator());
1725
1726  while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) {
1727    // Change the PHI node into a select instruction.
1728    Value *TrueVal  = PN->getIncomingValue(PN->getIncomingBlock(0) == IfFalse);
1729    Value *FalseVal = PN->getIncomingValue(PN->getIncomingBlock(0) == IfTrue);
1730
1731    SelectInst *NV =
1732      cast<SelectInst>(Builder.CreateSelect(IfCond, TrueVal, FalseVal, ""));
1733    PN->replaceAllUsesWith(NV);
1734    NV->takeName(PN);
1735    PN->eraseFromParent();
1736  }
1737
1738  // At this point, IfBlock1 and IfBlock2 are both empty, so our if statement
1739  // has been flattened.  Change DomBlock to jump directly to our new block to
1740  // avoid other simplifycfg's kicking in on the diamond.
1741  TerminatorInst *OldTI = DomBlock->getTerminator();
1742  Builder.SetInsertPoint(OldTI);
1743  Builder.CreateBr(BB);
1744  OldTI->eraseFromParent();
1745  return true;
1746}
1747
1748/// SimplifyCondBranchToTwoReturns - If we found a conditional branch that goes
1749/// to two returning blocks, try to merge them together into one return,
1750/// introducing a select if the return values disagree.
1751static bool SimplifyCondBranchToTwoReturns(BranchInst *BI,
1752                                           IRBuilder<> &Builder) {
1753  assert(BI->isConditional() && "Must be a conditional branch");
1754  BasicBlock *TrueSucc = BI->getSuccessor(0);
1755  BasicBlock *FalseSucc = BI->getSuccessor(1);
1756  ReturnInst *TrueRet = cast<ReturnInst>(TrueSucc->getTerminator());
1757  ReturnInst *FalseRet = cast<ReturnInst>(FalseSucc->getTerminator());
1758
1759  // Check to ensure both blocks are empty (just a return) or optionally empty
1760  // with PHI nodes.  If there are other instructions, merging would cause extra
1761  // computation on one path or the other.
1762  if (!TrueSucc->getFirstNonPHIOrDbg()->isTerminator())
1763    return false;
1764  if (!FalseSucc->getFirstNonPHIOrDbg()->isTerminator())
1765    return false;
1766
1767  Builder.SetInsertPoint(BI);
1768  // Okay, we found a branch that is going to two return nodes.  If
1769  // there is no return value for this function, just change the
1770  // branch into a return.
1771  if (FalseRet->getNumOperands() == 0) {
1772    TrueSucc->removePredecessor(BI->getParent());
1773    FalseSucc->removePredecessor(BI->getParent());
1774    Builder.CreateRetVoid();
1775    EraseTerminatorInstAndDCECond(BI);
1776    return true;
1777  }
1778
1779  // Otherwise, figure out what the true and false return values are
1780  // so we can insert a new select instruction.
1781  Value *TrueValue = TrueRet->getReturnValue();
1782  Value *FalseValue = FalseRet->getReturnValue();
1783
1784  // Unwrap any PHI nodes in the return blocks.
1785  if (PHINode *TVPN = dyn_cast_or_null<PHINode>(TrueValue))
1786    if (TVPN->getParent() == TrueSucc)
1787      TrueValue = TVPN->getIncomingValueForBlock(BI->getParent());
1788  if (PHINode *FVPN = dyn_cast_or_null<PHINode>(FalseValue))
1789    if (FVPN->getParent() == FalseSucc)
1790      FalseValue = FVPN->getIncomingValueForBlock(BI->getParent());
1791
1792  // In order for this transformation to be safe, we must be able to
1793  // unconditionally execute both operands to the return.  This is
1794  // normally the case, but we could have a potentially-trapping
1795  // constant expression that prevents this transformation from being
1796  // safe.
1797  if (ConstantExpr *TCV = dyn_cast_or_null<ConstantExpr>(TrueValue))
1798    if (TCV->canTrap())
1799      return false;
1800  if (ConstantExpr *FCV = dyn_cast_or_null<ConstantExpr>(FalseValue))
1801    if (FCV->canTrap())
1802      return false;
1803
1804  // Okay, we collected all the mapped values and checked them for sanity, and
1805  // defined to really do this transformation.  First, update the CFG.
1806  TrueSucc->removePredecessor(BI->getParent());
1807  FalseSucc->removePredecessor(BI->getParent());
1808
1809  // Insert select instructions where needed.
1810  Value *BrCond = BI->getCondition();
1811  if (TrueValue) {
1812    // Insert a select if the results differ.
1813    if (TrueValue == FalseValue || isa<UndefValue>(FalseValue)) {
1814    } else if (isa<UndefValue>(TrueValue)) {
1815      TrueValue = FalseValue;
1816    } else {
1817      TrueValue = Builder.CreateSelect(BrCond, TrueValue,
1818                                       FalseValue, "retval");
1819    }
1820  }
1821
1822  Value *RI = !TrueValue ?
1823    Builder.CreateRetVoid() : Builder.CreateRet(TrueValue);
1824
1825  (void) RI;
1826
1827  DEBUG(dbgs() << "\nCHANGING BRANCH TO TWO RETURNS INTO SELECT:"
1828               << "\n  " << *BI << "NewRet = " << *RI
1829               << "TRUEBLOCK: " << *TrueSucc << "FALSEBLOCK: "<< *FalseSucc);
1830
1831  EraseTerminatorInstAndDCECond(BI);
1832
1833  return true;
1834}
1835
1836/// ExtractBranchMetadata - Given a conditional BranchInstruction, retrieve the
1837/// probabilities of the branch taking each edge. Fills in the two APInt
1838/// parameters and return true, or returns false if no or invalid metadata was
1839/// found.
1840static bool ExtractBranchMetadata(BranchInst *BI,
1841                                  uint64_t &ProbTrue, uint64_t &ProbFalse) {
1842  assert(BI->isConditional() &&
1843         "Looking for probabilities on unconditional branch?");
1844  MDNode *ProfileData = BI->getMetadata(LLVMContext::MD_prof);
1845  if (!ProfileData || ProfileData->getNumOperands() != 3) return false;
1846  ConstantInt *CITrue = dyn_cast<ConstantInt>(ProfileData->getOperand(1));
1847  ConstantInt *CIFalse = dyn_cast<ConstantInt>(ProfileData->getOperand(2));
1848  if (!CITrue || !CIFalse) return false;
1849  ProbTrue = CITrue->getValue().getZExtValue();
1850  ProbFalse = CIFalse->getValue().getZExtValue();
1851  return true;
1852}
1853
1854/// checkCSEInPredecessor - Return true if the given instruction is available
1855/// in its predecessor block. If yes, the instruction will be removed.
1856///
1857static bool checkCSEInPredecessor(Instruction *Inst, BasicBlock *PB) {
1858  if (!isa<BinaryOperator>(Inst) && !isa<CmpInst>(Inst))
1859    return false;
1860  for (BasicBlock::iterator I = PB->begin(), E = PB->end(); I != E; I++) {
1861    Instruction *PBI = &*I;
1862    // Check whether Inst and PBI generate the same value.
1863    if (Inst->isIdenticalTo(PBI)) {
1864      Inst->replaceAllUsesWith(PBI);
1865      Inst->eraseFromParent();
1866      return true;
1867    }
1868  }
1869  return false;
1870}
1871
1872/// FoldBranchToCommonDest - If this basic block is simple enough, and if a
1873/// predecessor branches to us and one of our successors, fold the block into
1874/// the predecessor and use logical operations to pick the right destination.
1875bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
1876  BasicBlock *BB = BI->getParent();
1877
1878  Instruction *Cond = 0;
1879  if (BI->isConditional())
1880    Cond = dyn_cast<Instruction>(BI->getCondition());
1881  else {
1882    // For unconditional branch, check for a simple CFG pattern, where
1883    // BB has a single predecessor and BB's successor is also its predecessor's
1884    // successor. If such pattern exisits, check for CSE between BB and its
1885    // predecessor.
1886    if (BasicBlock *PB = BB->getSinglePredecessor())
1887      if (BranchInst *PBI = dyn_cast<BranchInst>(PB->getTerminator()))
1888        if (PBI->isConditional() &&
1889            (BI->getSuccessor(0) == PBI->getSuccessor(0) ||
1890             BI->getSuccessor(0) == PBI->getSuccessor(1))) {
1891          for (BasicBlock::iterator I = BB->begin(), E = BB->end();
1892               I != E; ) {
1893            Instruction *Curr = I++;
1894            if (isa<CmpInst>(Curr)) {
1895              Cond = Curr;
1896              break;
1897            }
1898            // Quit if we can't remove this instruction.
1899            if (!checkCSEInPredecessor(Curr, PB))
1900              return false;
1901          }
1902        }
1903
1904    if (Cond == 0)
1905      return false;
1906  }
1907
1908  if (Cond == 0 || (!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond)) ||
1909    Cond->getParent() != BB || !Cond->hasOneUse())
1910  return false;
1911
1912  // Only allow this if the condition is a simple instruction that can be
1913  // executed unconditionally.  It must be in the same block as the branch, and
1914  // must be at the front of the block.
1915  BasicBlock::iterator FrontIt = BB->front();
1916
1917  // Ignore dbg intrinsics.
1918  while (isa<DbgInfoIntrinsic>(FrontIt)) ++FrontIt;
1919
1920  // Allow a single instruction to be hoisted in addition to the compare
1921  // that feeds the branch.  We later ensure that any values that _it_ uses
1922  // were also live in the predecessor, so that we don't unnecessarily create
1923  // register pressure or inhibit out-of-order execution.
1924  Instruction *BonusInst = 0;
1925  if (&*FrontIt != Cond &&
1926      FrontIt->hasOneUse() && *FrontIt->use_begin() == Cond &&
1927      isSafeToSpeculativelyExecute(FrontIt)) {
1928    BonusInst = &*FrontIt;
1929    ++FrontIt;
1930
1931    // Ignore dbg intrinsics.
1932    while (isa<DbgInfoIntrinsic>(FrontIt)) ++FrontIt;
1933  }
1934
1935  // Only a single bonus inst is allowed.
1936  if (&*FrontIt != Cond)
1937    return false;
1938
1939  // Make sure the instruction after the condition is the cond branch.
1940  BasicBlock::iterator CondIt = Cond; ++CondIt;
1941
1942  // Ingore dbg intrinsics.
1943  while (isa<DbgInfoIntrinsic>(CondIt)) ++CondIt;
1944
1945  if (&*CondIt != BI)
1946    return false;
1947
1948  // Cond is known to be a compare or binary operator.  Check to make sure that
1949  // neither operand is a potentially-trapping constant expression.
1950  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(0)))
1951    if (CE->canTrap())
1952      return false;
1953  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(1)))
1954    if (CE->canTrap())
1955      return false;
1956
1957  // Finally, don't infinitely unroll conditional loops.
1958  BasicBlock *TrueDest  = BI->getSuccessor(0);
1959  BasicBlock *FalseDest = (BI->isConditional()) ? BI->getSuccessor(1) : 0;
1960  if (TrueDest == BB || FalseDest == BB)
1961    return false;
1962
1963  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
1964    BasicBlock *PredBlock = *PI;
1965    BranchInst *PBI = dyn_cast<BranchInst>(PredBlock->getTerminator());
1966
1967    // Check that we have two conditional branches.  If there is a PHI node in
1968    // the common successor, verify that the same value flows in from both
1969    // blocks.
1970    SmallVector<PHINode*, 4> PHIs;
1971    if (PBI == 0 || PBI->isUnconditional() ||
1972        (BI->isConditional() &&
1973         !SafeToMergeTerminators(BI, PBI)) ||
1974        (!BI->isConditional() &&
1975         !isProfitableToFoldUnconditional(BI, PBI, Cond, PHIs)))
1976      continue;
1977
1978    // Determine if the two branches share a common destination.
1979    Instruction::BinaryOps Opc = Instruction::BinaryOpsEnd;
1980    bool InvertPredCond = false;
1981
1982    if (BI->isConditional()) {
1983      if (PBI->getSuccessor(0) == TrueDest)
1984        Opc = Instruction::Or;
1985      else if (PBI->getSuccessor(1) == FalseDest)
1986        Opc = Instruction::And;
1987      else if (PBI->getSuccessor(0) == FalseDest)
1988        Opc = Instruction::And, InvertPredCond = true;
1989      else if (PBI->getSuccessor(1) == TrueDest)
1990        Opc = Instruction::Or, InvertPredCond = true;
1991      else
1992        continue;
1993    } else {
1994      if (PBI->getSuccessor(0) != TrueDest && PBI->getSuccessor(1) != TrueDest)
1995        continue;
1996    }
1997
1998    // Ensure that any values used in the bonus instruction are also used
1999    // by the terminator of the predecessor.  This means that those values
2000    // must already have been resolved, so we won't be inhibiting the
2001    // out-of-order core by speculating them earlier.
2002    if (BonusInst) {
2003      // Collect the values used by the bonus inst
2004      SmallPtrSet<Value*, 4> UsedValues;
2005      for (Instruction::op_iterator OI = BonusInst->op_begin(),
2006           OE = BonusInst->op_end(); OI != OE; ++OI) {
2007        Value *V = *OI;
2008        if (!isa<Constant>(V))
2009          UsedValues.insert(V);
2010      }
2011
2012      SmallVector<std::pair<Value*, unsigned>, 4> Worklist;
2013      Worklist.push_back(std::make_pair(PBI->getOperand(0), 0));
2014
2015      // Walk up to four levels back up the use-def chain of the predecessor's
2016      // terminator to see if all those values were used.  The choice of four
2017      // levels is arbitrary, to provide a compile-time-cost bound.
2018      while (!Worklist.empty()) {
2019        std::pair<Value*, unsigned> Pair = Worklist.back();
2020        Worklist.pop_back();
2021
2022        if (Pair.second >= 4) continue;
2023        UsedValues.erase(Pair.first);
2024        if (UsedValues.empty()) break;
2025
2026        if (Instruction *I = dyn_cast<Instruction>(Pair.first)) {
2027          for (Instruction::op_iterator OI = I->op_begin(), OE = I->op_end();
2028               OI != OE; ++OI)
2029            Worklist.push_back(std::make_pair(OI->get(), Pair.second+1));
2030        }
2031      }
2032
2033      if (!UsedValues.empty()) return false;
2034    }
2035
2036    DEBUG(dbgs() << "FOLDING BRANCH TO COMMON DEST:\n" << *PBI << *BB);
2037    IRBuilder<> Builder(PBI);
2038
2039    // If we need to invert the condition in the pred block to match, do so now.
2040    if (InvertPredCond) {
2041      Value *NewCond = PBI->getCondition();
2042
2043      if (NewCond->hasOneUse() && isa<CmpInst>(NewCond)) {
2044        CmpInst *CI = cast<CmpInst>(NewCond);
2045        CI->setPredicate(CI->getInversePredicate());
2046      } else {
2047        NewCond = Builder.CreateNot(NewCond,
2048                                    PBI->getCondition()->getName()+".not");
2049      }
2050
2051      PBI->setCondition(NewCond);
2052      PBI->swapSuccessors();
2053    }
2054
2055    // If we have a bonus inst, clone it into the predecessor block.
2056    Instruction *NewBonus = 0;
2057    if (BonusInst) {
2058      NewBonus = BonusInst->clone();
2059      PredBlock->getInstList().insert(PBI, NewBonus);
2060      NewBonus->takeName(BonusInst);
2061      BonusInst->setName(BonusInst->getName()+".old");
2062    }
2063
2064    // Clone Cond into the predecessor basic block, and or/and the
2065    // two conditions together.
2066    Instruction *New = Cond->clone();
2067    if (BonusInst) New->replaceUsesOfWith(BonusInst, NewBonus);
2068    PredBlock->getInstList().insert(PBI, New);
2069    New->takeName(Cond);
2070    Cond->setName(New->getName()+".old");
2071
2072    if (BI->isConditional()) {
2073      Instruction *NewCond =
2074        cast<Instruction>(Builder.CreateBinOp(Opc, PBI->getCondition(),
2075                                            New, "or.cond"));
2076      PBI->setCondition(NewCond);
2077
2078      uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
2079      bool PredHasWeights = ExtractBranchMetadata(PBI, PredTrueWeight,
2080                                                  PredFalseWeight);
2081      bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
2082                                                  SuccFalseWeight);
2083      SmallVector<uint64_t, 8> NewWeights;
2084
2085      if (PBI->getSuccessor(0) == BB) {
2086        if (PredHasWeights && SuccHasWeights) {
2087          // PBI: br i1 %x, BB, FalseDest
2088          // BI:  br i1 %y, TrueDest, FalseDest
2089          //TrueWeight is TrueWeight for PBI * TrueWeight for BI.
2090          NewWeights.push_back(PredTrueWeight * SuccTrueWeight);
2091          //FalseWeight is FalseWeight for PBI * TotalWeight for BI +
2092          //               TrueWeight for PBI * FalseWeight for BI.
2093          // We assume that total weights of a BranchInst can fit into 32 bits.
2094          // Therefore, we will not have overflow using 64-bit arithmetic.
2095          NewWeights.push_back(PredFalseWeight * (SuccFalseWeight +
2096               SuccTrueWeight) + PredTrueWeight * SuccFalseWeight);
2097        }
2098        AddPredecessorToBlock(TrueDest, PredBlock, BB);
2099        PBI->setSuccessor(0, TrueDest);
2100      }
2101      if (PBI->getSuccessor(1) == BB) {
2102        if (PredHasWeights && SuccHasWeights) {
2103          // PBI: br i1 %x, TrueDest, BB
2104          // BI:  br i1 %y, TrueDest, FalseDest
2105          //TrueWeight is TrueWeight for PBI * TotalWeight for BI +
2106          //              FalseWeight for PBI * TrueWeight for BI.
2107          NewWeights.push_back(PredTrueWeight * (SuccFalseWeight +
2108              SuccTrueWeight) + PredFalseWeight * SuccTrueWeight);
2109          //FalseWeight is FalseWeight for PBI * FalseWeight for BI.
2110          NewWeights.push_back(PredFalseWeight * SuccFalseWeight);
2111        }
2112        AddPredecessorToBlock(FalseDest, PredBlock, BB);
2113        PBI->setSuccessor(1, FalseDest);
2114      }
2115      if (NewWeights.size() == 2) {
2116        // Halve the weights if any of them cannot fit in an uint32_t
2117        FitWeights(NewWeights);
2118
2119        SmallVector<uint32_t, 8> MDWeights(NewWeights.begin(),NewWeights.end());
2120        PBI->setMetadata(LLVMContext::MD_prof,
2121                         MDBuilder(BI->getContext()).
2122                         createBranchWeights(MDWeights));
2123      } else
2124        PBI->setMetadata(LLVMContext::MD_prof, NULL);
2125    } else {
2126      // Update PHI nodes in the common successors.
2127      for (unsigned i = 0, e = PHIs.size(); i != e; ++i) {
2128        ConstantInt *PBI_C = cast<ConstantInt>(
2129          PHIs[i]->getIncomingValueForBlock(PBI->getParent()));
2130        assert(PBI_C->getType()->isIntegerTy(1));
2131        Instruction *MergedCond = 0;
2132        if (PBI->getSuccessor(0) == TrueDest) {
2133          // Create (PBI_Cond and PBI_C) or (!PBI_Cond and BI_Value)
2134          // PBI_C is true: PBI_Cond or (!PBI_Cond and BI_Value)
2135          //       is false: !PBI_Cond and BI_Value
2136          Instruction *NotCond =
2137            cast<Instruction>(Builder.CreateNot(PBI->getCondition(),
2138                                "not.cond"));
2139          MergedCond =
2140            cast<Instruction>(Builder.CreateBinOp(Instruction::And,
2141                                NotCond, New,
2142                                "and.cond"));
2143          if (PBI_C->isOne())
2144            MergedCond =
2145              cast<Instruction>(Builder.CreateBinOp(Instruction::Or,
2146                                  PBI->getCondition(), MergedCond,
2147                                  "or.cond"));
2148        } else {
2149          // Create (PBI_Cond and BI_Value) or (!PBI_Cond and PBI_C)
2150          // PBI_C is true: (PBI_Cond and BI_Value) or (!PBI_Cond)
2151          //       is false: PBI_Cond and BI_Value
2152          MergedCond =
2153            cast<Instruction>(Builder.CreateBinOp(Instruction::And,
2154                                PBI->getCondition(), New,
2155                                "and.cond"));
2156          if (PBI_C->isOne()) {
2157            Instruction *NotCond =
2158              cast<Instruction>(Builder.CreateNot(PBI->getCondition(),
2159                                  "not.cond"));
2160            MergedCond =
2161              cast<Instruction>(Builder.CreateBinOp(Instruction::Or,
2162                                  NotCond, MergedCond,
2163                                  "or.cond"));
2164          }
2165        }
2166        // Update PHI Node.
2167        PHIs[i]->setIncomingValue(PHIs[i]->getBasicBlockIndex(PBI->getParent()),
2168                                  MergedCond);
2169      }
2170      // Change PBI from Conditional to Unconditional.
2171      BranchInst *New_PBI = BranchInst::Create(TrueDest, PBI);
2172      EraseTerminatorInstAndDCECond(PBI);
2173      PBI = New_PBI;
2174    }
2175
2176    // TODO: If BB is reachable from all paths through PredBlock, then we
2177    // could replace PBI's branch probabilities with BI's.
2178
2179    // Copy any debug value intrinsics into the end of PredBlock.
2180    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
2181      if (isa<DbgInfoIntrinsic>(*I))
2182        I->clone()->insertBefore(PBI);
2183
2184    return true;
2185  }
2186  return false;
2187}
2188
2189/// SimplifyCondBranchToCondBranch - If we have a conditional branch as a
2190/// predecessor of another block, this function tries to simplify it.  We know
2191/// that PBI and BI are both conditional branches, and BI is in one of the
2192/// successor blocks of PBI - PBI branches to BI.
2193static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI) {
2194  assert(PBI->isConditional() && BI->isConditional());
2195  BasicBlock *BB = BI->getParent();
2196
2197  // If this block ends with a branch instruction, and if there is a
2198  // predecessor that ends on a branch of the same condition, make
2199  // this conditional branch redundant.
2200  if (PBI->getCondition() == BI->getCondition() &&
2201      PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
2202    // Okay, the outcome of this conditional branch is statically
2203    // knowable.  If this block had a single pred, handle specially.
2204    if (BB->getSinglePredecessor()) {
2205      // Turn this into a branch on constant.
2206      bool CondIsTrue = PBI->getSuccessor(0) == BB;
2207      BI->setCondition(ConstantInt::get(Type::getInt1Ty(BB->getContext()),
2208                                        CondIsTrue));
2209      return true;  // Nuke the branch on constant.
2210    }
2211
2212    // Otherwise, if there are multiple predecessors, insert a PHI that merges
2213    // in the constant and simplify the block result.  Subsequent passes of
2214    // simplifycfg will thread the block.
2215    if (BlockIsSimpleEnoughToThreadThrough(BB)) {
2216      pred_iterator PB = pred_begin(BB), PE = pred_end(BB);
2217      PHINode *NewPN = PHINode::Create(Type::getInt1Ty(BB->getContext()),
2218                                       std::distance(PB, PE),
2219                                       BI->getCondition()->getName() + ".pr",
2220                                       BB->begin());
2221      // Okay, we're going to insert the PHI node.  Since PBI is not the only
2222      // predecessor, compute the PHI'd conditional value for all of the preds.
2223      // Any predecessor where the condition is not computable we keep symbolic.
2224      for (pred_iterator PI = PB; PI != PE; ++PI) {
2225        BasicBlock *P = *PI;
2226        if ((PBI = dyn_cast<BranchInst>(P->getTerminator())) &&
2227            PBI != BI && PBI->isConditional() &&
2228            PBI->getCondition() == BI->getCondition() &&
2229            PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
2230          bool CondIsTrue = PBI->getSuccessor(0) == BB;
2231          NewPN->addIncoming(ConstantInt::get(Type::getInt1Ty(BB->getContext()),
2232                                              CondIsTrue), P);
2233        } else {
2234          NewPN->addIncoming(BI->getCondition(), P);
2235        }
2236      }
2237
2238      BI->setCondition(NewPN);
2239      return true;
2240    }
2241  }
2242
2243  // If this is a conditional branch in an empty block, and if any
2244  // predecessors is a conditional branch to one of our destinations,
2245  // fold the conditions into logical ops and one cond br.
2246  BasicBlock::iterator BBI = BB->begin();
2247  // Ignore dbg intrinsics.
2248  while (isa<DbgInfoIntrinsic>(BBI))
2249    ++BBI;
2250  if (&*BBI != BI)
2251    return false;
2252
2253
2254  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BI->getCondition()))
2255    if (CE->canTrap())
2256      return false;
2257
2258  int PBIOp, BIOp;
2259  if (PBI->getSuccessor(0) == BI->getSuccessor(0))
2260    PBIOp = BIOp = 0;
2261  else if (PBI->getSuccessor(0) == BI->getSuccessor(1))
2262    PBIOp = 0, BIOp = 1;
2263  else if (PBI->getSuccessor(1) == BI->getSuccessor(0))
2264    PBIOp = 1, BIOp = 0;
2265  else if (PBI->getSuccessor(1) == BI->getSuccessor(1))
2266    PBIOp = BIOp = 1;
2267  else
2268    return false;
2269
2270  // Check to make sure that the other destination of this branch
2271  // isn't BB itself.  If so, this is an infinite loop that will
2272  // keep getting unwound.
2273  if (PBI->getSuccessor(PBIOp) == BB)
2274    return false;
2275
2276  // Do not perform this transformation if it would require
2277  // insertion of a large number of select instructions. For targets
2278  // without predication/cmovs, this is a big pessimization.
2279  BasicBlock *CommonDest = PBI->getSuccessor(PBIOp);
2280
2281  unsigned NumPhis = 0;
2282  for (BasicBlock::iterator II = CommonDest->begin();
2283       isa<PHINode>(II); ++II, ++NumPhis)
2284    if (NumPhis > 2) // Disable this xform.
2285      return false;
2286
2287  // Finally, if everything is ok, fold the branches to logical ops.
2288  BasicBlock *OtherDest  = BI->getSuccessor(BIOp ^ 1);
2289
2290  DEBUG(dbgs() << "FOLDING BRs:" << *PBI->getParent()
2291               << "AND: " << *BI->getParent());
2292
2293
2294  // If OtherDest *is* BB, then BB is a basic block with a single conditional
2295  // branch in it, where one edge (OtherDest) goes back to itself but the other
2296  // exits.  We don't *know* that the program avoids the infinite loop
2297  // (even though that seems likely).  If we do this xform naively, we'll end up
2298  // recursively unpeeling the loop.  Since we know that (after the xform is
2299  // done) that the block *is* infinite if reached, we just make it an obviously
2300  // infinite loop with no cond branch.
2301  if (OtherDest == BB) {
2302    // Insert it at the end of the function, because it's either code,
2303    // or it won't matter if it's hot. :)
2304    BasicBlock *InfLoopBlock = BasicBlock::Create(BB->getContext(),
2305                                                  "infloop", BB->getParent());
2306    BranchInst::Create(InfLoopBlock, InfLoopBlock);
2307    OtherDest = InfLoopBlock;
2308  }
2309
2310  DEBUG(dbgs() << *PBI->getParent()->getParent());
2311
2312  // BI may have other predecessors.  Because of this, we leave
2313  // it alone, but modify PBI.
2314
2315  // Make sure we get to CommonDest on True&True directions.
2316  Value *PBICond = PBI->getCondition();
2317  IRBuilder<true, NoFolder> Builder(PBI);
2318  if (PBIOp)
2319    PBICond = Builder.CreateNot(PBICond, PBICond->getName()+".not");
2320
2321  Value *BICond = BI->getCondition();
2322  if (BIOp)
2323    BICond = Builder.CreateNot(BICond, BICond->getName()+".not");
2324
2325  // Merge the conditions.
2326  Value *Cond = Builder.CreateOr(PBICond, BICond, "brmerge");
2327
2328  // Modify PBI to branch on the new condition to the new dests.
2329  PBI->setCondition(Cond);
2330  PBI->setSuccessor(0, CommonDest);
2331  PBI->setSuccessor(1, OtherDest);
2332
2333  // Update branch weight for PBI.
2334  uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
2335  bool PredHasWeights = ExtractBranchMetadata(PBI, PredTrueWeight,
2336                                              PredFalseWeight);
2337  bool SuccHasWeights = ExtractBranchMetadata(BI, SuccTrueWeight,
2338                                              SuccFalseWeight);
2339  if (PredHasWeights && SuccHasWeights) {
2340    uint64_t PredCommon = PBIOp ? PredFalseWeight : PredTrueWeight;
2341    uint64_t PredOther = PBIOp ?PredTrueWeight : PredFalseWeight;
2342    uint64_t SuccCommon = BIOp ? SuccFalseWeight : SuccTrueWeight;
2343    uint64_t SuccOther = BIOp ? SuccTrueWeight : SuccFalseWeight;
2344    // The weight to CommonDest should be PredCommon * SuccTotal +
2345    //                                    PredOther * SuccCommon.
2346    // The weight to OtherDest should be PredOther * SuccOther.
2347    SmallVector<uint64_t, 2> NewWeights;
2348    NewWeights.push_back(PredCommon * (SuccCommon + SuccOther) +
2349                         PredOther * SuccCommon);
2350    NewWeights.push_back(PredOther * SuccOther);
2351    // Halve the weights if any of them cannot fit in an uint32_t
2352    FitWeights(NewWeights);
2353
2354    SmallVector<uint32_t, 2> MDWeights(NewWeights.begin(),NewWeights.end());
2355    PBI->setMetadata(LLVMContext::MD_prof,
2356                     MDBuilder(BI->getContext()).
2357                     createBranchWeights(MDWeights));
2358  }
2359
2360  // OtherDest may have phi nodes.  If so, add an entry from PBI's
2361  // block that are identical to the entries for BI's block.
2362  AddPredecessorToBlock(OtherDest, PBI->getParent(), BB);
2363
2364  // We know that the CommonDest already had an edge from PBI to
2365  // it.  If it has PHIs though, the PHIs may have different
2366  // entries for BB and PBI's BB.  If so, insert a select to make
2367  // them agree.
2368  PHINode *PN;
2369  for (BasicBlock::iterator II = CommonDest->begin();
2370       (PN = dyn_cast<PHINode>(II)); ++II) {
2371    Value *BIV = PN->getIncomingValueForBlock(BB);
2372    unsigned PBBIdx = PN->getBasicBlockIndex(PBI->getParent());
2373    Value *PBIV = PN->getIncomingValue(PBBIdx);
2374    if (BIV != PBIV) {
2375      // Insert a select in PBI to pick the right value.
2376      Value *NV = cast<SelectInst>
2377        (Builder.CreateSelect(PBICond, PBIV, BIV, PBIV->getName()+".mux"));
2378      PN->setIncomingValue(PBBIdx, NV);
2379    }
2380  }
2381
2382  DEBUG(dbgs() << "INTO: " << *PBI->getParent());
2383  DEBUG(dbgs() << *PBI->getParent()->getParent());
2384
2385  // This basic block is probably dead.  We know it has at least
2386  // one fewer predecessor.
2387  return true;
2388}
2389
2390// SimplifyTerminatorOnSelect - Simplifies a terminator by replacing it with a
2391// branch to TrueBB if Cond is true or to FalseBB if Cond is false.
2392// Takes care of updating the successors and removing the old terminator.
2393// Also makes sure not to introduce new successors by assuming that edges to
2394// non-successor TrueBBs and FalseBBs aren't reachable.
2395static bool SimplifyTerminatorOnSelect(TerminatorInst *OldTerm, Value *Cond,
2396                                       BasicBlock *TrueBB, BasicBlock *FalseBB,
2397                                       uint32_t TrueWeight,
2398                                       uint32_t FalseWeight){
2399  // Remove any superfluous successor edges from the CFG.
2400  // First, figure out which successors to preserve.
2401  // If TrueBB and FalseBB are equal, only try to preserve one copy of that
2402  // successor.
2403  BasicBlock *KeepEdge1 = TrueBB;
2404  BasicBlock *KeepEdge2 = TrueBB != FalseBB ? FalseBB : 0;
2405
2406  // Then remove the rest.
2407  for (unsigned I = 0, E = OldTerm->getNumSuccessors(); I != E; ++I) {
2408    BasicBlock *Succ = OldTerm->getSuccessor(I);
2409    // Make sure only to keep exactly one copy of each edge.
2410    if (Succ == KeepEdge1)
2411      KeepEdge1 = 0;
2412    else if (Succ == KeepEdge2)
2413      KeepEdge2 = 0;
2414    else
2415      Succ->removePredecessor(OldTerm->getParent());
2416  }
2417
2418  IRBuilder<> Builder(OldTerm);
2419  Builder.SetCurrentDebugLocation(OldTerm->getDebugLoc());
2420
2421  // Insert an appropriate new terminator.
2422  if ((KeepEdge1 == 0) && (KeepEdge2 == 0)) {
2423    if (TrueBB == FalseBB)
2424      // We were only looking for one successor, and it was present.
2425      // Create an unconditional branch to it.
2426      Builder.CreateBr(TrueBB);
2427    else {
2428      // We found both of the successors we were looking for.
2429      // Create a conditional branch sharing the condition of the select.
2430      BranchInst *NewBI = Builder.CreateCondBr(Cond, TrueBB, FalseBB);
2431      if (TrueWeight != FalseWeight)
2432        NewBI->setMetadata(LLVMContext::MD_prof,
2433                           MDBuilder(OldTerm->getContext()).
2434                           createBranchWeights(TrueWeight, FalseWeight));
2435    }
2436  } else if (KeepEdge1 && (KeepEdge2 || TrueBB == FalseBB)) {
2437    // Neither of the selected blocks were successors, so this
2438    // terminator must be unreachable.
2439    new UnreachableInst(OldTerm->getContext(), OldTerm);
2440  } else {
2441    // One of the selected values was a successor, but the other wasn't.
2442    // Insert an unconditional branch to the one that was found;
2443    // the edge to the one that wasn't must be unreachable.
2444    if (KeepEdge1 == 0)
2445      // Only TrueBB was found.
2446      Builder.CreateBr(TrueBB);
2447    else
2448      // Only FalseBB was found.
2449      Builder.CreateBr(FalseBB);
2450  }
2451
2452  EraseTerminatorInstAndDCECond(OldTerm);
2453  return true;
2454}
2455
2456// SimplifySwitchOnSelect - Replaces
2457//   (switch (select cond, X, Y)) on constant X, Y
2458// with a branch - conditional if X and Y lead to distinct BBs,
2459// unconditional otherwise.
2460static bool SimplifySwitchOnSelect(SwitchInst *SI, SelectInst *Select) {
2461  // Check for constant integer values in the select.
2462  ConstantInt *TrueVal = dyn_cast<ConstantInt>(Select->getTrueValue());
2463  ConstantInt *FalseVal = dyn_cast<ConstantInt>(Select->getFalseValue());
2464  if (!TrueVal || !FalseVal)
2465    return false;
2466
2467  // Find the relevant condition and destinations.
2468  Value *Condition = Select->getCondition();
2469  BasicBlock *TrueBB = SI->findCaseValue(TrueVal).getCaseSuccessor();
2470  BasicBlock *FalseBB = SI->findCaseValue(FalseVal).getCaseSuccessor();
2471
2472  // Get weight for TrueBB and FalseBB.
2473  uint32_t TrueWeight = 0, FalseWeight = 0;
2474  SmallVector<uint64_t, 8> Weights;
2475  bool HasWeights = HasBranchWeights(SI);
2476  if (HasWeights) {
2477    GetBranchWeights(SI, Weights);
2478    if (Weights.size() == 1 + SI->getNumCases()) {
2479      TrueWeight = (uint32_t)Weights[SI->findCaseValue(TrueVal).
2480                                     getSuccessorIndex()];
2481      FalseWeight = (uint32_t)Weights[SI->findCaseValue(FalseVal).
2482                                      getSuccessorIndex()];
2483    }
2484  }
2485
2486  // Perform the actual simplification.
2487  return SimplifyTerminatorOnSelect(SI, Condition, TrueBB, FalseBB,
2488                                    TrueWeight, FalseWeight);
2489}
2490
2491// SimplifyIndirectBrOnSelect - Replaces
2492//   (indirectbr (select cond, blockaddress(@fn, BlockA),
2493//                             blockaddress(@fn, BlockB)))
2494// with
2495//   (br cond, BlockA, BlockB).
2496static bool SimplifyIndirectBrOnSelect(IndirectBrInst *IBI, SelectInst *SI) {
2497  // Check that both operands of the select are block addresses.
2498  BlockAddress *TBA = dyn_cast<BlockAddress>(SI->getTrueValue());
2499  BlockAddress *FBA = dyn_cast<BlockAddress>(SI->getFalseValue());
2500  if (!TBA || !FBA)
2501    return false;
2502
2503  // Extract the actual blocks.
2504  BasicBlock *TrueBB = TBA->getBasicBlock();
2505  BasicBlock *FalseBB = FBA->getBasicBlock();
2506
2507  // Perform the actual simplification.
2508  return SimplifyTerminatorOnSelect(IBI, SI->getCondition(), TrueBB, FalseBB,
2509                                    0, 0);
2510}
2511
2512/// TryToSimplifyUncondBranchWithICmpInIt - This is called when we find an icmp
2513/// instruction (a seteq/setne with a constant) as the only instruction in a
2514/// block that ends with an uncond branch.  We are looking for a very specific
2515/// pattern that occurs when "A == 1 || A == 2 || A == 3" gets simplified.  In
2516/// this case, we merge the first two "or's of icmp" into a switch, but then the
2517/// default value goes to an uncond block with a seteq in it, we get something
2518/// like:
2519///
2520///   switch i8 %A, label %DEFAULT [ i8 1, label %end    i8 2, label %end ]
2521/// DEFAULT:
2522///   %tmp = icmp eq i8 %A, 92
2523///   br label %end
2524/// end:
2525///   ... = phi i1 [ true, %entry ], [ %tmp, %DEFAULT ], [ true, %entry ]
2526///
2527/// We prefer to split the edge to 'end' so that there is a true/false entry to
2528/// the PHI, merging the third icmp into the switch.
2529static bool TryToSimplifyUncondBranchWithICmpInIt(ICmpInst *ICI,
2530                                                  const DataLayout *TD,
2531                                                  IRBuilder<> &Builder) {
2532  BasicBlock *BB = ICI->getParent();
2533
2534  // If the block has any PHIs in it or the icmp has multiple uses, it is too
2535  // complex.
2536  if (isa<PHINode>(BB->begin()) || !ICI->hasOneUse()) return false;
2537
2538  Value *V = ICI->getOperand(0);
2539  ConstantInt *Cst = cast<ConstantInt>(ICI->getOperand(1));
2540
2541  // The pattern we're looking for is where our only predecessor is a switch on
2542  // 'V' and this block is the default case for the switch.  In this case we can
2543  // fold the compared value into the switch to simplify things.
2544  BasicBlock *Pred = BB->getSinglePredecessor();
2545  if (Pred == 0 || !isa<SwitchInst>(Pred->getTerminator())) return false;
2546
2547  SwitchInst *SI = cast<SwitchInst>(Pred->getTerminator());
2548  if (SI->getCondition() != V)
2549    return false;
2550
2551  // If BB is reachable on a non-default case, then we simply know the value of
2552  // V in this block.  Substitute it and constant fold the icmp instruction
2553  // away.
2554  if (SI->getDefaultDest() != BB) {
2555    ConstantInt *VVal = SI->findCaseDest(BB);
2556    assert(VVal && "Should have a unique destination value");
2557    ICI->setOperand(0, VVal);
2558
2559    if (Value *V = SimplifyInstruction(ICI, TD)) {
2560      ICI->replaceAllUsesWith(V);
2561      ICI->eraseFromParent();
2562    }
2563    // BB is now empty, so it is likely to simplify away.
2564    return SimplifyCFG(BB) | true;
2565  }
2566
2567  // Ok, the block is reachable from the default dest.  If the constant we're
2568  // comparing exists in one of the other edges, then we can constant fold ICI
2569  // and zap it.
2570  if (SI->findCaseValue(Cst) != SI->case_default()) {
2571    Value *V;
2572    if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
2573      V = ConstantInt::getFalse(BB->getContext());
2574    else
2575      V = ConstantInt::getTrue(BB->getContext());
2576
2577    ICI->replaceAllUsesWith(V);
2578    ICI->eraseFromParent();
2579    // BB is now empty, so it is likely to simplify away.
2580    return SimplifyCFG(BB) | true;
2581  }
2582
2583  // The use of the icmp has to be in the 'end' block, by the only PHI node in
2584  // the block.
2585  BasicBlock *SuccBlock = BB->getTerminator()->getSuccessor(0);
2586  PHINode *PHIUse = dyn_cast<PHINode>(ICI->use_back());
2587  if (PHIUse == 0 || PHIUse != &SuccBlock->front() ||
2588      isa<PHINode>(++BasicBlock::iterator(PHIUse)))
2589    return false;
2590
2591  // If the icmp is a SETEQ, then the default dest gets false, the new edge gets
2592  // true in the PHI.
2593  Constant *DefaultCst = ConstantInt::getTrue(BB->getContext());
2594  Constant *NewCst     = ConstantInt::getFalse(BB->getContext());
2595
2596  if (ICI->getPredicate() == ICmpInst::ICMP_EQ)
2597    std::swap(DefaultCst, NewCst);
2598
2599  // Replace ICI (which is used by the PHI for the default value) with true or
2600  // false depending on if it is EQ or NE.
2601  ICI->replaceAllUsesWith(DefaultCst);
2602  ICI->eraseFromParent();
2603
2604  // Okay, the switch goes to this block on a default value.  Add an edge from
2605  // the switch to the merge point on the compared value.
2606  BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "switch.edge",
2607                                         BB->getParent(), BB);
2608  SmallVector<uint64_t, 8> Weights;
2609  bool HasWeights = HasBranchWeights(SI);
2610  if (HasWeights) {
2611    GetBranchWeights(SI, Weights);
2612    if (Weights.size() == 1 + SI->getNumCases()) {
2613      // Split weight for default case to case for "Cst".
2614      Weights[0] = (Weights[0]+1) >> 1;
2615      Weights.push_back(Weights[0]);
2616
2617      SmallVector<uint32_t, 8> MDWeights(Weights.begin(), Weights.end());
2618      SI->setMetadata(LLVMContext::MD_prof,
2619                      MDBuilder(SI->getContext()).
2620                      createBranchWeights(MDWeights));
2621    }
2622  }
2623  SI->addCase(Cst, NewBB);
2624
2625  // NewBB branches to the phi block, add the uncond branch and the phi entry.
2626  Builder.SetInsertPoint(NewBB);
2627  Builder.SetCurrentDebugLocation(SI->getDebugLoc());
2628  Builder.CreateBr(SuccBlock);
2629  PHIUse->addIncoming(NewCst, NewBB);
2630  return true;
2631}
2632
2633/// SimplifyBranchOnICmpChain - The specified branch is a conditional branch.
2634/// Check to see if it is branching on an or/and chain of icmp instructions, and
2635/// fold it into a switch instruction if so.
2636static bool SimplifyBranchOnICmpChain(BranchInst *BI, const DataLayout *TD,
2637                                      IRBuilder<> &Builder) {
2638  Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
2639  if (Cond == 0) return false;
2640
2641
2642  // Change br (X == 0 | X == 1), T, F into a switch instruction.
2643  // If this is a bunch of seteq's or'd together, or if it's a bunch of
2644  // 'setne's and'ed together, collect them.
2645  Value *CompVal = 0;
2646  std::vector<ConstantInt*> Values;
2647  bool TrueWhenEqual = true;
2648  Value *ExtraCase = 0;
2649  unsigned UsedICmps = 0;
2650
2651  if (Cond->getOpcode() == Instruction::Or) {
2652    CompVal = GatherConstantCompares(Cond, Values, ExtraCase, TD, true,
2653                                     UsedICmps);
2654  } else if (Cond->getOpcode() == Instruction::And) {
2655    CompVal = GatherConstantCompares(Cond, Values, ExtraCase, TD, false,
2656                                     UsedICmps);
2657    TrueWhenEqual = false;
2658  }
2659
2660  // If we didn't have a multiply compared value, fail.
2661  if (CompVal == 0) return false;
2662
2663  // Avoid turning single icmps into a switch.
2664  if (UsedICmps <= 1)
2665    return false;
2666
2667  // There might be duplicate constants in the list, which the switch
2668  // instruction can't handle, remove them now.
2669  array_pod_sort(Values.begin(), Values.end(), ConstantIntSortPredicate);
2670  Values.erase(std::unique(Values.begin(), Values.end()), Values.end());
2671
2672  // If Extra was used, we require at least two switch values to do the
2673  // transformation.  A switch with one value is just an cond branch.
2674  if (ExtraCase && Values.size() < 2) return false;
2675
2676  // TODO: Preserve branch weight metadata, similarly to how
2677  // FoldValueComparisonIntoPredecessors preserves it.
2678
2679  // Figure out which block is which destination.
2680  BasicBlock *DefaultBB = BI->getSuccessor(1);
2681  BasicBlock *EdgeBB    = BI->getSuccessor(0);
2682  if (!TrueWhenEqual) std::swap(DefaultBB, EdgeBB);
2683
2684  BasicBlock *BB = BI->getParent();
2685
2686  DEBUG(dbgs() << "Converting 'icmp' chain with " << Values.size()
2687               << " cases into SWITCH.  BB is:\n" << *BB);
2688
2689  // If there are any extra values that couldn't be folded into the switch
2690  // then we evaluate them with an explicit branch first.  Split the block
2691  // right before the condbr to handle it.
2692  if (ExtraCase) {
2693    BasicBlock *NewBB = BB->splitBasicBlock(BI, "switch.early.test");
2694    // Remove the uncond branch added to the old block.
2695    TerminatorInst *OldTI = BB->getTerminator();
2696    Builder.SetInsertPoint(OldTI);
2697
2698    if (TrueWhenEqual)
2699      Builder.CreateCondBr(ExtraCase, EdgeBB, NewBB);
2700    else
2701      Builder.CreateCondBr(ExtraCase, NewBB, EdgeBB);
2702
2703    OldTI->eraseFromParent();
2704
2705    // If there are PHI nodes in EdgeBB, then we need to add a new entry to them
2706    // for the edge we just added.
2707    AddPredecessorToBlock(EdgeBB, BB, NewBB);
2708
2709    DEBUG(dbgs() << "  ** 'icmp' chain unhandled condition: " << *ExtraCase
2710          << "\nEXTRABB = " << *BB);
2711    BB = NewBB;
2712  }
2713
2714  Builder.SetInsertPoint(BI);
2715  // Convert pointer to int before we switch.
2716  if (CompVal->getType()->isPointerTy()) {
2717    assert(TD && "Cannot switch on pointer without DataLayout");
2718    CompVal = Builder.CreatePtrToInt(CompVal,
2719                                     TD->getIntPtrType(CompVal->getType()),
2720                                     "magicptr");
2721  }
2722
2723  // Create the new switch instruction now.
2724  SwitchInst *New = Builder.CreateSwitch(CompVal, DefaultBB, Values.size());
2725
2726  // Add all of the 'cases' to the switch instruction.
2727  for (unsigned i = 0, e = Values.size(); i != e; ++i)
2728    New->addCase(Values[i], EdgeBB);
2729
2730  // We added edges from PI to the EdgeBB.  As such, if there were any
2731  // PHI nodes in EdgeBB, they need entries to be added corresponding to
2732  // the number of edges added.
2733  for (BasicBlock::iterator BBI = EdgeBB->begin();
2734       isa<PHINode>(BBI); ++BBI) {
2735    PHINode *PN = cast<PHINode>(BBI);
2736    Value *InVal = PN->getIncomingValueForBlock(BB);
2737    for (unsigned i = 0, e = Values.size()-1; i != e; ++i)
2738      PN->addIncoming(InVal, BB);
2739  }
2740
2741  // Erase the old branch instruction.
2742  EraseTerminatorInstAndDCECond(BI);
2743
2744  DEBUG(dbgs() << "  ** 'icmp' chain result is:\n" << *BB << '\n');
2745  return true;
2746}
2747
2748bool SimplifyCFGOpt::SimplifyResume(ResumeInst *RI, IRBuilder<> &Builder) {
2749  // If this is a trivial landing pad that just continues unwinding the caught
2750  // exception then zap the landing pad, turning its invokes into calls.
2751  BasicBlock *BB = RI->getParent();
2752  LandingPadInst *LPInst = dyn_cast<LandingPadInst>(BB->getFirstNonPHI());
2753  if (RI->getValue() != LPInst)
2754    // Not a landing pad, or the resume is not unwinding the exception that
2755    // caused control to branch here.
2756    return false;
2757
2758  // Check that there are no other instructions except for debug intrinsics.
2759  BasicBlock::iterator I = LPInst, E = RI;
2760  while (++I != E)
2761    if (!isa<DbgInfoIntrinsic>(I))
2762      return false;
2763
2764  // Turn all invokes that unwind here into calls and delete the basic block.
2765  for (pred_iterator PI = pred_begin(BB), PE = pred_end(BB); PI != PE;) {
2766    InvokeInst *II = cast<InvokeInst>((*PI++)->getTerminator());
2767    SmallVector<Value*, 8> Args(II->op_begin(), II->op_end() - 3);
2768    // Insert a call instruction before the invoke.
2769    CallInst *Call = CallInst::Create(II->getCalledValue(), Args, "", II);
2770    Call->takeName(II);
2771    Call->setCallingConv(II->getCallingConv());
2772    Call->setAttributes(II->getAttributes());
2773    Call->setDebugLoc(II->getDebugLoc());
2774
2775    // Anything that used the value produced by the invoke instruction now uses
2776    // the value produced by the call instruction.  Note that we do this even
2777    // for void functions and calls with no uses so that the callgraph edge is
2778    // updated.
2779    II->replaceAllUsesWith(Call);
2780    BB->removePredecessor(II->getParent());
2781
2782    // Insert a branch to the normal destination right before the invoke.
2783    BranchInst::Create(II->getNormalDest(), II);
2784
2785    // Finally, delete the invoke instruction!
2786    II->eraseFromParent();
2787  }
2788
2789  // The landingpad is now unreachable.  Zap it.
2790  BB->eraseFromParent();
2791  return true;
2792}
2793
2794bool SimplifyCFGOpt::SimplifyReturn(ReturnInst *RI, IRBuilder<> &Builder) {
2795  BasicBlock *BB = RI->getParent();
2796  if (!BB->getFirstNonPHIOrDbg()->isTerminator()) return false;
2797
2798  // Find predecessors that end with branches.
2799  SmallVector<BasicBlock*, 8> UncondBranchPreds;
2800  SmallVector<BranchInst*, 8> CondBranchPreds;
2801  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
2802    BasicBlock *P = *PI;
2803    TerminatorInst *PTI = P->getTerminator();
2804    if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) {
2805      if (BI->isUnconditional())
2806        UncondBranchPreds.push_back(P);
2807      else
2808        CondBranchPreds.push_back(BI);
2809    }
2810  }
2811
2812  // If we found some, do the transformation!
2813  if (!UncondBranchPreds.empty() && DupRet) {
2814    while (!UncondBranchPreds.empty()) {
2815      BasicBlock *Pred = UncondBranchPreds.pop_back_val();
2816      DEBUG(dbgs() << "FOLDING: " << *BB
2817            << "INTO UNCOND BRANCH PRED: " << *Pred);
2818      (void)FoldReturnIntoUncondBranch(RI, BB, Pred);
2819    }
2820
2821    // If we eliminated all predecessors of the block, delete the block now.
2822    if (pred_begin(BB) == pred_end(BB))
2823      // We know there are no successors, so just nuke the block.
2824      BB->eraseFromParent();
2825
2826    return true;
2827  }
2828
2829  // Check out all of the conditional branches going to this return
2830  // instruction.  If any of them just select between returns, change the
2831  // branch itself into a select/return pair.
2832  while (!CondBranchPreds.empty()) {
2833    BranchInst *BI = CondBranchPreds.pop_back_val();
2834
2835    // Check to see if the non-BB successor is also a return block.
2836    if (isa<ReturnInst>(BI->getSuccessor(0)->getTerminator()) &&
2837        isa<ReturnInst>(BI->getSuccessor(1)->getTerminator()) &&
2838        SimplifyCondBranchToTwoReturns(BI, Builder))
2839      return true;
2840  }
2841  return false;
2842}
2843
2844bool SimplifyCFGOpt::SimplifyUnreachable(UnreachableInst *UI) {
2845  BasicBlock *BB = UI->getParent();
2846
2847  bool Changed = false;
2848
2849  // If there are any instructions immediately before the unreachable that can
2850  // be removed, do so.
2851  while (UI != BB->begin()) {
2852    BasicBlock::iterator BBI = UI;
2853    --BBI;
2854    // Do not delete instructions that can have side effects which might cause
2855    // the unreachable to not be reachable; specifically, calls and volatile
2856    // operations may have this effect.
2857    if (isa<CallInst>(BBI) && !isa<DbgInfoIntrinsic>(BBI)) break;
2858
2859    if (BBI->mayHaveSideEffects()) {
2860      if (StoreInst *SI = dyn_cast<StoreInst>(BBI)) {
2861        if (SI->isVolatile())
2862          break;
2863      } else if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
2864        if (LI->isVolatile())
2865          break;
2866      } else if (AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(BBI)) {
2867        if (RMWI->isVolatile())
2868          break;
2869      } else if (AtomicCmpXchgInst *CXI = dyn_cast<AtomicCmpXchgInst>(BBI)) {
2870        if (CXI->isVolatile())
2871          break;
2872      } else if (!isa<FenceInst>(BBI) && !isa<VAArgInst>(BBI) &&
2873                 !isa<LandingPadInst>(BBI)) {
2874        break;
2875      }
2876      // Note that deleting LandingPad's here is in fact okay, although it
2877      // involves a bit of subtle reasoning. If this inst is a LandingPad,
2878      // all the predecessors of this block will be the unwind edges of Invokes,
2879      // and we can therefore guarantee this block will be erased.
2880    }
2881
2882    // Delete this instruction (any uses are guaranteed to be dead)
2883    if (!BBI->use_empty())
2884      BBI->replaceAllUsesWith(UndefValue::get(BBI->getType()));
2885    BBI->eraseFromParent();
2886    Changed = true;
2887  }
2888
2889  // If the unreachable instruction is the first in the block, take a gander
2890  // at all of the predecessors of this instruction, and simplify them.
2891  if (&BB->front() != UI) return Changed;
2892
2893  SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB));
2894  for (unsigned i = 0, e = Preds.size(); i != e; ++i) {
2895    TerminatorInst *TI = Preds[i]->getTerminator();
2896    IRBuilder<> Builder(TI);
2897    if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
2898      if (BI->isUnconditional()) {
2899        if (BI->getSuccessor(0) == BB) {
2900          new UnreachableInst(TI->getContext(), TI);
2901          TI->eraseFromParent();
2902          Changed = true;
2903        }
2904      } else {
2905        if (BI->getSuccessor(0) == BB) {
2906          Builder.CreateBr(BI->getSuccessor(1));
2907          EraseTerminatorInstAndDCECond(BI);
2908        } else if (BI->getSuccessor(1) == BB) {
2909          Builder.CreateBr(BI->getSuccessor(0));
2910          EraseTerminatorInstAndDCECond(BI);
2911          Changed = true;
2912        }
2913      }
2914    } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
2915      for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end();
2916           i != e; ++i)
2917        if (i.getCaseSuccessor() == BB) {
2918          BB->removePredecessor(SI->getParent());
2919          SI->removeCase(i);
2920          --i; --e;
2921          Changed = true;
2922        }
2923      // If the default value is unreachable, figure out the most popular
2924      // destination and make it the default.
2925      if (SI->getDefaultDest() == BB) {
2926        std::map<BasicBlock*, std::pair<unsigned, unsigned> > Popularity;
2927        for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end();
2928             i != e; ++i) {
2929          std::pair<unsigned, unsigned> &entry =
2930              Popularity[i.getCaseSuccessor()];
2931          if (entry.first == 0) {
2932            entry.first = 1;
2933            entry.second = i.getCaseIndex();
2934          } else {
2935            entry.first++;
2936          }
2937        }
2938
2939        // Find the most popular block.
2940        unsigned MaxPop = 0;
2941        unsigned MaxIndex = 0;
2942        BasicBlock *MaxBlock = 0;
2943        for (std::map<BasicBlock*, std::pair<unsigned, unsigned> >::iterator
2944             I = Popularity.begin(), E = Popularity.end(); I != E; ++I) {
2945          if (I->second.first > MaxPop ||
2946              (I->second.first == MaxPop && MaxIndex > I->second.second)) {
2947            MaxPop = I->second.first;
2948            MaxIndex = I->second.second;
2949            MaxBlock = I->first;
2950          }
2951        }
2952        if (MaxBlock) {
2953          // Make this the new default, allowing us to delete any explicit
2954          // edges to it.
2955          SI->setDefaultDest(MaxBlock);
2956          Changed = true;
2957
2958          // If MaxBlock has phinodes in it, remove MaxPop-1 entries from
2959          // it.
2960          if (isa<PHINode>(MaxBlock->begin()))
2961            for (unsigned i = 0; i != MaxPop-1; ++i)
2962              MaxBlock->removePredecessor(SI->getParent());
2963
2964          for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end();
2965               i != e; ++i)
2966            if (i.getCaseSuccessor() == MaxBlock) {
2967              SI->removeCase(i);
2968              --i; --e;
2969            }
2970        }
2971      }
2972    } else if (InvokeInst *II = dyn_cast<InvokeInst>(TI)) {
2973      if (II->getUnwindDest() == BB) {
2974        // Convert the invoke to a call instruction.  This would be a good
2975        // place to note that the call does not throw though.
2976        BranchInst *BI = Builder.CreateBr(II->getNormalDest());
2977        II->removeFromParent();   // Take out of symbol table
2978
2979        // Insert the call now...
2980        SmallVector<Value*, 8> Args(II->op_begin(), II->op_end()-3);
2981        Builder.SetInsertPoint(BI);
2982        CallInst *CI = Builder.CreateCall(II->getCalledValue(),
2983                                          Args, II->getName());
2984        CI->setCallingConv(II->getCallingConv());
2985        CI->setAttributes(II->getAttributes());
2986        // If the invoke produced a value, the call does now instead.
2987        II->replaceAllUsesWith(CI);
2988        delete II;
2989        Changed = true;
2990      }
2991    }
2992  }
2993
2994  // If this block is now dead, remove it.
2995  if (pred_begin(BB) == pred_end(BB) &&
2996      BB != &BB->getParent()->getEntryBlock()) {
2997    // We know there are no successors, so just nuke the block.
2998    BB->eraseFromParent();
2999    return true;
3000  }
3001
3002  return Changed;
3003}
3004
3005/// TurnSwitchRangeIntoICmp - Turns a switch with that contains only a
3006/// integer range comparison into a sub, an icmp and a branch.
3007static bool TurnSwitchRangeIntoICmp(SwitchInst *SI, IRBuilder<> &Builder) {
3008  assert(SI->getNumCases() > 1 && "Degenerate switch?");
3009
3010  // Make sure all cases point to the same destination and gather the values.
3011  SmallVector<ConstantInt *, 16> Cases;
3012  SwitchInst::CaseIt I = SI->case_begin();
3013  Cases.push_back(I.getCaseValue());
3014  SwitchInst::CaseIt PrevI = I++;
3015  for (SwitchInst::CaseIt E = SI->case_end(); I != E; PrevI = I++) {
3016    if (PrevI.getCaseSuccessor() != I.getCaseSuccessor())
3017      return false;
3018    Cases.push_back(I.getCaseValue());
3019  }
3020  assert(Cases.size() == SI->getNumCases() && "Not all cases gathered");
3021
3022  // Sort the case values, then check if they form a range we can transform.
3023  array_pod_sort(Cases.begin(), Cases.end(), ConstantIntSortPredicate);
3024  for (unsigned I = 1, E = Cases.size(); I != E; ++I) {
3025    if (Cases[I-1]->getValue() != Cases[I]->getValue()+1)
3026      return false;
3027  }
3028
3029  Constant *Offset = ConstantExpr::getNeg(Cases.back());
3030  Constant *NumCases = ConstantInt::get(Offset->getType(), SI->getNumCases());
3031
3032  Value *Sub = SI->getCondition();
3033  if (!Offset->isNullValue())
3034    Sub = Builder.CreateAdd(Sub, Offset, Sub->getName()+".off");
3035  Value *Cmp = Builder.CreateICmpULT(Sub, NumCases, "switch");
3036  BranchInst *NewBI = Builder.CreateCondBr(
3037      Cmp, SI->case_begin().getCaseSuccessor(), SI->getDefaultDest());
3038
3039  // Update weight for the newly-created conditional branch.
3040  SmallVector<uint64_t, 8> Weights;
3041  bool HasWeights = HasBranchWeights(SI);
3042  if (HasWeights) {
3043    GetBranchWeights(SI, Weights);
3044    if (Weights.size() == 1 + SI->getNumCases()) {
3045      // Combine all weights for the cases to be the true weight of NewBI.
3046      // We assume that the sum of all weights for a Terminator can fit into 32
3047      // bits.
3048      uint32_t NewTrueWeight = 0;
3049      for (unsigned I = 1, E = Weights.size(); I != E; ++I)
3050        NewTrueWeight += (uint32_t)Weights[I];
3051      NewBI->setMetadata(LLVMContext::MD_prof,
3052                         MDBuilder(SI->getContext()).
3053                         createBranchWeights(NewTrueWeight,
3054                                             (uint32_t)Weights[0]));
3055    }
3056  }
3057
3058  // Prune obsolete incoming values off the successor's PHI nodes.
3059  for (BasicBlock::iterator BBI = SI->case_begin().getCaseSuccessor()->begin();
3060       isa<PHINode>(BBI); ++BBI) {
3061    for (unsigned I = 0, E = SI->getNumCases()-1; I != E; ++I)
3062      cast<PHINode>(BBI)->removeIncomingValue(SI->getParent());
3063  }
3064  SI->eraseFromParent();
3065
3066  return true;
3067}
3068
3069/// EliminateDeadSwitchCases - Compute masked bits for the condition of a switch
3070/// and use it to remove dead cases.
3071static bool EliminateDeadSwitchCases(SwitchInst *SI) {
3072  Value *Cond = SI->getCondition();
3073  unsigned Bits = cast<IntegerType>(Cond->getType())->getBitWidth();
3074  APInt KnownZero(Bits, 0), KnownOne(Bits, 0);
3075  ComputeMaskedBits(Cond, KnownZero, KnownOne);
3076
3077  // Gather dead cases.
3078  SmallVector<ConstantInt*, 8> DeadCases;
3079  for (SwitchInst::CaseIt I = SI->case_begin(), E = SI->case_end(); I != E; ++I) {
3080    if ((I.getCaseValue()->getValue() & KnownZero) != 0 ||
3081        (I.getCaseValue()->getValue() & KnownOne) != KnownOne) {
3082      DeadCases.push_back(I.getCaseValue());
3083      DEBUG(dbgs() << "SimplifyCFG: switch case '"
3084                   << I.getCaseValue() << "' is dead.\n");
3085    }
3086  }
3087
3088  SmallVector<uint64_t, 8> Weights;
3089  bool HasWeight = HasBranchWeights(SI);
3090  if (HasWeight) {
3091    GetBranchWeights(SI, Weights);
3092    HasWeight = (Weights.size() == 1 + SI->getNumCases());
3093  }
3094
3095  // Remove dead cases from the switch.
3096  for (unsigned I = 0, E = DeadCases.size(); I != E; ++I) {
3097    SwitchInst::CaseIt Case = SI->findCaseValue(DeadCases[I]);
3098    assert(Case != SI->case_default() &&
3099           "Case was not found. Probably mistake in DeadCases forming.");
3100    if (HasWeight) {
3101      std::swap(Weights[Case.getCaseIndex()+1], Weights.back());
3102      Weights.pop_back();
3103    }
3104
3105    // Prune unused values from PHI nodes.
3106    Case.getCaseSuccessor()->removePredecessor(SI->getParent());
3107    SI->removeCase(Case);
3108  }
3109  if (HasWeight) {
3110    SmallVector<uint32_t, 8> MDWeights(Weights.begin(), Weights.end());
3111    SI->setMetadata(LLVMContext::MD_prof,
3112                    MDBuilder(SI->getParent()->getContext()).
3113                    createBranchWeights(MDWeights));
3114  }
3115
3116  return !DeadCases.empty();
3117}
3118
3119/// FindPHIForConditionForwarding - If BB would be eligible for simplification
3120/// by TryToSimplifyUncondBranchFromEmptyBlock (i.e. it is empty and terminated
3121/// by an unconditional branch), look at the phi node for BB in the successor
3122/// block and see if the incoming value is equal to CaseValue. If so, return
3123/// the phi node, and set PhiIndex to BB's index in the phi node.
3124static PHINode *FindPHIForConditionForwarding(ConstantInt *CaseValue,
3125                                              BasicBlock *BB,
3126                                              int *PhiIndex) {
3127  if (BB->getFirstNonPHIOrDbg() != BB->getTerminator())
3128    return NULL; // BB must be empty to be a candidate for simplification.
3129  if (!BB->getSinglePredecessor())
3130    return NULL; // BB must be dominated by the switch.
3131
3132  BranchInst *Branch = dyn_cast<BranchInst>(BB->getTerminator());
3133  if (!Branch || !Branch->isUnconditional())
3134    return NULL; // Terminator must be unconditional branch.
3135
3136  BasicBlock *Succ = Branch->getSuccessor(0);
3137
3138  BasicBlock::iterator I = Succ->begin();
3139  while (PHINode *PHI = dyn_cast<PHINode>(I++)) {
3140    int Idx = PHI->getBasicBlockIndex(BB);
3141    assert(Idx >= 0 && "PHI has no entry for predecessor?");
3142
3143    Value *InValue = PHI->getIncomingValue(Idx);
3144    if (InValue != CaseValue) continue;
3145
3146    *PhiIndex = Idx;
3147    return PHI;
3148  }
3149
3150  return NULL;
3151}
3152
3153/// ForwardSwitchConditionToPHI - Try to forward the condition of a switch
3154/// instruction to a phi node dominated by the switch, if that would mean that
3155/// some of the destination blocks of the switch can be folded away.
3156/// Returns true if a change is made.
3157static bool ForwardSwitchConditionToPHI(SwitchInst *SI) {
3158  typedef DenseMap<PHINode*, SmallVector<int,4> > ForwardingNodesMap;
3159  ForwardingNodesMap ForwardingNodes;
3160
3161  for (SwitchInst::CaseIt I = SI->case_begin(), E = SI->case_end(); I != E; ++I) {
3162    ConstantInt *CaseValue = I.getCaseValue();
3163    BasicBlock *CaseDest = I.getCaseSuccessor();
3164
3165    int PhiIndex;
3166    PHINode *PHI = FindPHIForConditionForwarding(CaseValue, CaseDest,
3167                                                 &PhiIndex);
3168    if (!PHI) continue;
3169
3170    ForwardingNodes[PHI].push_back(PhiIndex);
3171  }
3172
3173  bool Changed = false;
3174
3175  for (ForwardingNodesMap::iterator I = ForwardingNodes.begin(),
3176       E = ForwardingNodes.end(); I != E; ++I) {
3177    PHINode *Phi = I->first;
3178    SmallVector<int,4> &Indexes = I->second;
3179
3180    if (Indexes.size() < 2) continue;
3181
3182    for (size_t I = 0, E = Indexes.size(); I != E; ++I)
3183      Phi->setIncomingValue(Indexes[I], SI->getCondition());
3184    Changed = true;
3185  }
3186
3187  return Changed;
3188}
3189
3190/// ValidLookupTableConstant - Return true if the backend will be able to handle
3191/// initializing an array of constants like C.
3192static bool ValidLookupTableConstant(Constant *C) {
3193  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
3194    return CE->isGEPWithNoNotionalOverIndexing();
3195
3196  return isa<ConstantFP>(C) ||
3197      isa<ConstantInt>(C) ||
3198      isa<ConstantPointerNull>(C) ||
3199      isa<GlobalValue>(C) ||
3200      isa<UndefValue>(C);
3201}
3202
3203/// LookupConstant - If V is a Constant, return it. Otherwise, try to look up
3204/// its constant value in ConstantPool, returning 0 if it's not there.
3205static Constant *LookupConstant(Value *V,
3206                         const SmallDenseMap<Value*, Constant*>& ConstantPool) {
3207  if (Constant *C = dyn_cast<Constant>(V))
3208    return C;
3209  return ConstantPool.lookup(V);
3210}
3211
3212/// ConstantFold - Try to fold instruction I into a constant. This works for
3213/// simple instructions such as binary operations where both operands are
3214/// constant or can be replaced by constants from the ConstantPool. Returns the
3215/// resulting constant on success, 0 otherwise.
3216static Constant *ConstantFold(Instruction *I,
3217                         const SmallDenseMap<Value*, Constant*>& ConstantPool) {
3218  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(I)) {
3219    Constant *A = LookupConstant(BO->getOperand(0), ConstantPool);
3220    if (!A)
3221      return 0;
3222    Constant *B = LookupConstant(BO->getOperand(1), ConstantPool);
3223    if (!B)
3224      return 0;
3225    return ConstantExpr::get(BO->getOpcode(), A, B);
3226  }
3227
3228  if (CmpInst *Cmp = dyn_cast<CmpInst>(I)) {
3229    Constant *A = LookupConstant(I->getOperand(0), ConstantPool);
3230    if (!A)
3231      return 0;
3232    Constant *B = LookupConstant(I->getOperand(1), ConstantPool);
3233    if (!B)
3234      return 0;
3235    return ConstantExpr::getCompare(Cmp->getPredicate(), A, B);
3236  }
3237
3238  if (SelectInst *Select = dyn_cast<SelectInst>(I)) {
3239    Constant *A = LookupConstant(Select->getCondition(), ConstantPool);
3240    if (!A)
3241      return 0;
3242    if (A->isAllOnesValue())
3243      return LookupConstant(Select->getTrueValue(), ConstantPool);
3244    if (A->isNullValue())
3245      return LookupConstant(Select->getFalseValue(), ConstantPool);
3246    return 0;
3247  }
3248
3249  if (CastInst *Cast = dyn_cast<CastInst>(I)) {
3250    Constant *A = LookupConstant(I->getOperand(0), ConstantPool);
3251    if (!A)
3252      return 0;
3253    return ConstantExpr::getCast(Cast->getOpcode(), A, Cast->getDestTy());
3254  }
3255
3256  return 0;
3257}
3258
3259/// GetCaseResults - Try to determine the resulting constant values in phi nodes
3260/// at the common destination basic block, *CommonDest, for one of the case
3261/// destionations CaseDest corresponding to value CaseVal (0 for the default
3262/// case), of a switch instruction SI.
3263static bool GetCaseResults(SwitchInst *SI,
3264                           ConstantInt *CaseVal,
3265                           BasicBlock *CaseDest,
3266                           BasicBlock **CommonDest,
3267                           SmallVector<std::pair<PHINode*,Constant*>, 4> &Res) {
3268  // The block from which we enter the common destination.
3269  BasicBlock *Pred = SI->getParent();
3270
3271  // If CaseDest is empty except for some side-effect free instructions through
3272  // which we can constant-propagate the CaseVal, continue to its successor.
3273  SmallDenseMap<Value*, Constant*> ConstantPool;
3274  ConstantPool.insert(std::make_pair(SI->getCondition(), CaseVal));
3275  for (BasicBlock::iterator I = CaseDest->begin(), E = CaseDest->end(); I != E;
3276       ++I) {
3277    if (TerminatorInst *T = dyn_cast<TerminatorInst>(I)) {
3278      // If the terminator is a simple branch, continue to the next block.
3279      if (T->getNumSuccessors() != 1)
3280        return false;
3281      Pred = CaseDest;
3282      CaseDest = T->getSuccessor(0);
3283    } else if (isa<DbgInfoIntrinsic>(I)) {
3284      // Skip debug intrinsic.
3285      continue;
3286    } else if (Constant *C = ConstantFold(I, ConstantPool)) {
3287      // Instruction is side-effect free and constant.
3288      ConstantPool.insert(std::make_pair(I, C));
3289    } else {
3290      break;
3291    }
3292  }
3293
3294  // If we did not have a CommonDest before, use the current one.
3295  if (!*CommonDest)
3296    *CommonDest = CaseDest;
3297  // If the destination isn't the common one, abort.
3298  if (CaseDest != *CommonDest)
3299    return false;
3300
3301  // Get the values for this case from phi nodes in the destination block.
3302  BasicBlock::iterator I = (*CommonDest)->begin();
3303  while (PHINode *PHI = dyn_cast<PHINode>(I++)) {
3304    int Idx = PHI->getBasicBlockIndex(Pred);
3305    if (Idx == -1)
3306      continue;
3307
3308    Constant *ConstVal = LookupConstant(PHI->getIncomingValue(Idx),
3309                                        ConstantPool);
3310    if (!ConstVal)
3311      return false;
3312
3313    // Note: If the constant comes from constant-propagating the case value
3314    // through the CaseDest basic block, it will be safe to remove the
3315    // instructions in that block. They cannot be used (except in the phi nodes
3316    // we visit) outside CaseDest, because that block does not dominate its
3317    // successor. If it did, we would not be in this phi node.
3318
3319    // Be conservative about which kinds of constants we support.
3320    if (!ValidLookupTableConstant(ConstVal))
3321      return false;
3322
3323    Res.push_back(std::make_pair(PHI, ConstVal));
3324  }
3325
3326  return true;
3327}
3328
3329namespace {
3330  /// SwitchLookupTable - This class represents a lookup table that can be used
3331  /// to replace a switch.
3332  class SwitchLookupTable {
3333  public:
3334    /// SwitchLookupTable - Create a lookup table to use as a switch replacement
3335    /// with the contents of Values, using DefaultValue to fill any holes in the
3336    /// table.
3337    SwitchLookupTable(Module &M,
3338                      uint64_t TableSize,
3339                      ConstantInt *Offset,
3340               const SmallVector<std::pair<ConstantInt*, Constant*>, 4>& Values,
3341                      Constant *DefaultValue,
3342                      const DataLayout *TD);
3343
3344    /// BuildLookup - Build instructions with Builder to retrieve the value at
3345    /// the position given by Index in the lookup table.
3346    Value *BuildLookup(Value *Index, IRBuilder<> &Builder);
3347
3348    /// WouldFitInRegister - Return true if a table with TableSize elements of
3349    /// type ElementType would fit in a target-legal register.
3350    static bool WouldFitInRegister(const DataLayout *TD,
3351                                   uint64_t TableSize,
3352                                   const Type *ElementType);
3353
3354  private:
3355    // Depending on the contents of the table, it can be represented in
3356    // different ways.
3357    enum {
3358      // For tables where each element contains the same value, we just have to
3359      // store that single value and return it for each lookup.
3360      SingleValueKind,
3361
3362      // For small tables with integer elements, we can pack them into a bitmap
3363      // that fits into a target-legal register. Values are retrieved by
3364      // shift and mask operations.
3365      BitMapKind,
3366
3367      // The table is stored as an array of values. Values are retrieved by load
3368      // instructions from the table.
3369      ArrayKind
3370    } Kind;
3371
3372    // For SingleValueKind, this is the single value.
3373    Constant *SingleValue;
3374
3375    // For BitMapKind, this is the bitmap.
3376    ConstantInt *BitMap;
3377    IntegerType *BitMapElementTy;
3378
3379    // For ArrayKind, this is the array.
3380    GlobalVariable *Array;
3381  };
3382}
3383
3384SwitchLookupTable::SwitchLookupTable(Module &M,
3385                                     uint64_t TableSize,
3386                                     ConstantInt *Offset,
3387               const SmallVector<std::pair<ConstantInt*, Constant*>, 4>& Values,
3388                                     Constant *DefaultValue,
3389                                     const DataLayout *TD) {
3390  assert(Values.size() && "Can't build lookup table without values!");
3391  assert(TableSize >= Values.size() && "Can't fit values in table!");
3392
3393  // If all values in the table are equal, this is that value.
3394  SingleValue = Values.begin()->second;
3395
3396  // Build up the table contents.
3397  SmallVector<Constant*, 64> TableContents(TableSize);
3398  for (size_t I = 0, E = Values.size(); I != E; ++I) {
3399    ConstantInt *CaseVal = Values[I].first;
3400    Constant *CaseRes = Values[I].second;
3401    assert(CaseRes->getType() == DefaultValue->getType());
3402
3403    uint64_t Idx = (CaseVal->getValue() - Offset->getValue())
3404                   .getLimitedValue();
3405    TableContents[Idx] = CaseRes;
3406
3407    if (CaseRes != SingleValue)
3408      SingleValue = 0;
3409  }
3410
3411  // Fill in any holes in the table with the default result.
3412  if (Values.size() < TableSize) {
3413    for (uint64_t I = 0; I < TableSize; ++I) {
3414      if (!TableContents[I])
3415        TableContents[I] = DefaultValue;
3416    }
3417
3418    if (DefaultValue != SingleValue)
3419      SingleValue = 0;
3420  }
3421
3422  // If each element in the table contains the same value, we only need to store
3423  // that single value.
3424  if (SingleValue) {
3425    Kind = SingleValueKind;
3426    return;
3427  }
3428
3429  // If the type is integer and the table fits in a register, build a bitmap.
3430  if (WouldFitInRegister(TD, TableSize, DefaultValue->getType())) {
3431    IntegerType *IT = cast<IntegerType>(DefaultValue->getType());
3432    APInt TableInt(TableSize * IT->getBitWidth(), 0);
3433    for (uint64_t I = TableSize; I > 0; --I) {
3434      TableInt <<= IT->getBitWidth();
3435      // Insert values into the bitmap. Undef values are set to zero.
3436      if (!isa<UndefValue>(TableContents[I - 1])) {
3437        ConstantInt *Val = cast<ConstantInt>(TableContents[I - 1]);
3438        TableInt |= Val->getValue().zext(TableInt.getBitWidth());
3439      }
3440    }
3441    BitMap = ConstantInt::get(M.getContext(), TableInt);
3442    BitMapElementTy = IT;
3443    Kind = BitMapKind;
3444    ++NumBitMaps;
3445    return;
3446  }
3447
3448  // Store the table in an array.
3449  ArrayType *ArrayTy = ArrayType::get(DefaultValue->getType(), TableSize);
3450  Constant *Initializer = ConstantArray::get(ArrayTy, TableContents);
3451
3452  Array = new GlobalVariable(M, ArrayTy, /*constant=*/ true,
3453                             GlobalVariable::PrivateLinkage,
3454                             Initializer,
3455                             "switch.table");
3456  Array->setUnnamedAddr(true);
3457  Kind = ArrayKind;
3458}
3459
3460Value *SwitchLookupTable::BuildLookup(Value *Index, IRBuilder<> &Builder) {
3461  switch (Kind) {
3462    case SingleValueKind:
3463      return SingleValue;
3464    case BitMapKind: {
3465      // Type of the bitmap (e.g. i59).
3466      IntegerType *MapTy = BitMap->getType();
3467
3468      // Cast Index to the same type as the bitmap.
3469      // Note: The Index is <= the number of elements in the table, so
3470      // truncating it to the width of the bitmask is safe.
3471      Value *ShiftAmt = Builder.CreateZExtOrTrunc(Index, MapTy, "switch.cast");
3472
3473      // Multiply the shift amount by the element width.
3474      ShiftAmt = Builder.CreateMul(ShiftAmt,
3475                      ConstantInt::get(MapTy, BitMapElementTy->getBitWidth()),
3476                                   "switch.shiftamt");
3477
3478      // Shift down.
3479      Value *DownShifted = Builder.CreateLShr(BitMap, ShiftAmt,
3480                                              "switch.downshift");
3481      // Mask off.
3482      return Builder.CreateTrunc(DownShifted, BitMapElementTy,
3483                                 "switch.masked");
3484    }
3485    case ArrayKind: {
3486      Value *GEPIndices[] = { Builder.getInt32(0), Index };
3487      Value *GEP = Builder.CreateInBoundsGEP(Array, GEPIndices,
3488                                             "switch.gep");
3489      return Builder.CreateLoad(GEP, "switch.load");
3490    }
3491  }
3492  llvm_unreachable("Unknown lookup table kind!");
3493}
3494
3495bool SwitchLookupTable::WouldFitInRegister(const DataLayout *TD,
3496                                           uint64_t TableSize,
3497                                           const Type *ElementType) {
3498  if (!TD)
3499    return false;
3500  const IntegerType *IT = dyn_cast<IntegerType>(ElementType);
3501  if (!IT)
3502    return false;
3503  // FIXME: If the type is wider than it needs to be, e.g. i8 but all values
3504  // are <= 15, we could try to narrow the type.
3505
3506  // Avoid overflow, fitsInLegalInteger uses unsigned int for the width.
3507  if (TableSize >= UINT_MAX/IT->getBitWidth())
3508    return false;
3509  return TD->fitsInLegalInteger(TableSize * IT->getBitWidth());
3510}
3511
3512/// ShouldBuildLookupTable - Determine whether a lookup table should be built
3513/// for this switch, based on the number of caes, size of the table and the
3514/// types of the results.
3515static bool ShouldBuildLookupTable(SwitchInst *SI,
3516                                   uint64_t TableSize,
3517                                   const DataLayout *TD,
3518                            const SmallDenseMap<PHINode*, Type*>& ResultTypes) {
3519  // The table density should be at least 40%. This is the same criterion as for
3520  // jump tables, see SelectionDAGBuilder::handleJTSwitchCase.
3521  // FIXME: Find the best cut-off.
3522  if (SI->getNumCases() > TableSize || TableSize >= UINT64_MAX / 10)
3523    return false; // TableSize overflowed, or mul below might overflow.
3524  if (SI->getNumCases() * 10 >= TableSize * 4)
3525    return true;
3526
3527  // If each table would fit in a register, we should build it anyway.
3528  for (SmallDenseMap<PHINode*, Type*>::const_iterator I = ResultTypes.begin(),
3529       E = ResultTypes.end(); I != E; ++I) {
3530    if (!SwitchLookupTable::WouldFitInRegister(TD, TableSize, I->second))
3531      return false;
3532  }
3533  return true;
3534}
3535
3536/// SwitchToLookupTable - If the switch is only used to initialize one or more
3537/// phi nodes in a common successor block with different constant values,
3538/// replace the switch with lookup tables.
3539static bool SwitchToLookupTable(SwitchInst *SI,
3540                                IRBuilder<> &Builder,
3541                                const DataLayout* TD,
3542                                const TargetTransformInfo *TTI) {
3543  assert(SI->getNumCases() > 1 && "Degenerate switch?");
3544
3545  if (TTI && !TTI->getScalarTargetTransformInfo()->shouldBuildLookupTables())
3546    return false;
3547
3548  // FIXME: Handle unreachable cases.
3549
3550  // FIXME: If the switch is too sparse for a lookup table, perhaps we could
3551  // split off a dense part and build a lookup table for that.
3552
3553  // FIXME: This creates arrays of GEPs to constant strings, which means each
3554  // GEP needs a runtime relocation in PIC code. We should just build one big
3555  // string and lookup indices into that.
3556
3557  // Ignore the switch if the number of cases is too small.
3558  // This is similar to the check when building jump tables in
3559  // SelectionDAGBuilder::handleJTSwitchCase.
3560  // FIXME: Determine the best cut-off.
3561  if (SI->getNumCases() < 4)
3562    return false;
3563
3564  // Figure out the corresponding result for each case value and phi node in the
3565  // common destination, as well as the the min and max case values.
3566  assert(SI->case_begin() != SI->case_end());
3567  SwitchInst::CaseIt CI = SI->case_begin();
3568  ConstantInt *MinCaseVal = CI.getCaseValue();
3569  ConstantInt *MaxCaseVal = CI.getCaseValue();
3570
3571  BasicBlock *CommonDest = 0;
3572  typedef SmallVector<std::pair<ConstantInt*, Constant*>, 4> ResultListTy;
3573  SmallDenseMap<PHINode*, ResultListTy> ResultLists;
3574  SmallDenseMap<PHINode*, Constant*> DefaultResults;
3575  SmallDenseMap<PHINode*, Type*> ResultTypes;
3576  SmallVector<PHINode*, 4> PHIs;
3577
3578  for (SwitchInst::CaseIt E = SI->case_end(); CI != E; ++CI) {
3579    ConstantInt *CaseVal = CI.getCaseValue();
3580    if (CaseVal->getValue().slt(MinCaseVal->getValue()))
3581      MinCaseVal = CaseVal;
3582    if (CaseVal->getValue().sgt(MaxCaseVal->getValue()))
3583      MaxCaseVal = CaseVal;
3584
3585    // Resulting value at phi nodes for this case value.
3586    typedef SmallVector<std::pair<PHINode*, Constant*>, 4> ResultsTy;
3587    ResultsTy Results;
3588    if (!GetCaseResults(SI, CaseVal, CI.getCaseSuccessor(), &CommonDest,
3589                        Results))
3590      return false;
3591
3592    // Append the result from this case to the list for each phi.
3593    for (ResultsTy::iterator I = Results.begin(), E = Results.end(); I!=E; ++I) {
3594      if (!ResultLists.count(I->first))
3595        PHIs.push_back(I->first);
3596      ResultLists[I->first].push_back(std::make_pair(CaseVal, I->second));
3597    }
3598  }
3599
3600  // Get the resulting values for the default case.
3601  SmallVector<std::pair<PHINode*, Constant*>, 4> DefaultResultsList;
3602  if (!GetCaseResults(SI, 0, SI->getDefaultDest(), &CommonDest,
3603                      DefaultResultsList))
3604    return false;
3605  for (size_t I = 0, E = DefaultResultsList.size(); I != E; ++I) {
3606    PHINode *PHI = DefaultResultsList[I].first;
3607    Constant *Result = DefaultResultsList[I].second;
3608    DefaultResults[PHI] = Result;
3609    ResultTypes[PHI] = Result->getType();
3610  }
3611
3612  APInt RangeSpread = MaxCaseVal->getValue() - MinCaseVal->getValue();
3613  uint64_t TableSize = RangeSpread.getLimitedValue() + 1;
3614  if (!ShouldBuildLookupTable(SI, TableSize, TD, ResultTypes))
3615    return false;
3616
3617  // Create the BB that does the lookups.
3618  Module &Mod = *CommonDest->getParent()->getParent();
3619  BasicBlock *LookupBB = BasicBlock::Create(Mod.getContext(),
3620                                            "switch.lookup",
3621                                            CommonDest->getParent(),
3622                                            CommonDest);
3623
3624  // Check whether the condition value is within the case range, and branch to
3625  // the new BB.
3626  Builder.SetInsertPoint(SI);
3627  Value *TableIndex = Builder.CreateSub(SI->getCondition(), MinCaseVal,
3628                                        "switch.tableidx");
3629  Value *Cmp = Builder.CreateICmpULT(TableIndex, ConstantInt::get(
3630      MinCaseVal->getType(), TableSize));
3631  Builder.CreateCondBr(Cmp, LookupBB, SI->getDefaultDest());
3632
3633  // Populate the BB that does the lookups.
3634  Builder.SetInsertPoint(LookupBB);
3635  bool ReturnedEarly = false;
3636  for (size_t I = 0, E = PHIs.size(); I != E; ++I) {
3637    PHINode *PHI = PHIs[I];
3638
3639    SwitchLookupTable Table(Mod, TableSize, MinCaseVal, ResultLists[PHI],
3640                            DefaultResults[PHI], TD);
3641
3642    Value *Result = Table.BuildLookup(TableIndex, Builder);
3643
3644    // If the result is used to return immediately from the function, we want to
3645    // do that right here.
3646    if (PHI->hasOneUse() && isa<ReturnInst>(*PHI->use_begin()) &&
3647        *PHI->use_begin() == CommonDest->getFirstNonPHIOrDbg()) {
3648      Builder.CreateRet(Result);
3649      ReturnedEarly = true;
3650      break;
3651    }
3652
3653    PHI->addIncoming(Result, LookupBB);
3654  }
3655
3656  if (!ReturnedEarly)
3657    Builder.CreateBr(CommonDest);
3658
3659  // Remove the switch.
3660  for (unsigned i = 0; i < SI->getNumSuccessors(); ++i) {
3661    BasicBlock *Succ = SI->getSuccessor(i);
3662    if (Succ == SI->getDefaultDest()) continue;
3663    Succ->removePredecessor(SI->getParent());
3664  }
3665  SI->eraseFromParent();
3666
3667  ++NumLookupTables;
3668  return true;
3669}
3670
3671bool SimplifyCFGOpt::SimplifySwitch(SwitchInst *SI, IRBuilder<> &Builder) {
3672  BasicBlock *BB = SI->getParent();
3673
3674  if (isValueEqualityComparison(SI)) {
3675    // If we only have one predecessor, and if it is a branch on this value,
3676    // see if that predecessor totally determines the outcome of this switch.
3677    if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
3678      if (SimplifyEqualityComparisonWithOnlyPredecessor(SI, OnlyPred, Builder))
3679        return SimplifyCFG(BB) | true;
3680
3681    Value *Cond = SI->getCondition();
3682    if (SelectInst *Select = dyn_cast<SelectInst>(Cond))
3683      if (SimplifySwitchOnSelect(SI, Select))
3684        return SimplifyCFG(BB) | true;
3685
3686    // If the block only contains the switch, see if we can fold the block
3687    // away into any preds.
3688    BasicBlock::iterator BBI = BB->begin();
3689    // Ignore dbg intrinsics.
3690    while (isa<DbgInfoIntrinsic>(BBI))
3691      ++BBI;
3692    if (SI == &*BBI)
3693      if (FoldValueComparisonIntoPredecessors(SI, Builder))
3694        return SimplifyCFG(BB) | true;
3695  }
3696
3697  // Try to transform the switch into an icmp and a branch.
3698  if (TurnSwitchRangeIntoICmp(SI, Builder))
3699    return SimplifyCFG(BB) | true;
3700
3701  // Remove unreachable cases.
3702  if (EliminateDeadSwitchCases(SI))
3703    return SimplifyCFG(BB) | true;
3704
3705  if (ForwardSwitchConditionToPHI(SI))
3706    return SimplifyCFG(BB) | true;
3707
3708  if (SwitchToLookupTable(SI, Builder, TD, TTI))
3709    return SimplifyCFG(BB) | true;
3710
3711  return false;
3712}
3713
3714bool SimplifyCFGOpt::SimplifyIndirectBr(IndirectBrInst *IBI) {
3715  BasicBlock *BB = IBI->getParent();
3716  bool Changed = false;
3717
3718  // Eliminate redundant destinations.
3719  SmallPtrSet<Value *, 8> Succs;
3720  for (unsigned i = 0, e = IBI->getNumDestinations(); i != e; ++i) {
3721    BasicBlock *Dest = IBI->getDestination(i);
3722    if (!Dest->hasAddressTaken() || !Succs.insert(Dest)) {
3723      Dest->removePredecessor(BB);
3724      IBI->removeDestination(i);
3725      --i; --e;
3726      Changed = true;
3727    }
3728  }
3729
3730  if (IBI->getNumDestinations() == 0) {
3731    // If the indirectbr has no successors, change it to unreachable.
3732    new UnreachableInst(IBI->getContext(), IBI);
3733    EraseTerminatorInstAndDCECond(IBI);
3734    return true;
3735  }
3736
3737  if (IBI->getNumDestinations() == 1) {
3738    // If the indirectbr has one successor, change it to a direct branch.
3739    BranchInst::Create(IBI->getDestination(0), IBI);
3740    EraseTerminatorInstAndDCECond(IBI);
3741    return true;
3742  }
3743
3744  if (SelectInst *SI = dyn_cast<SelectInst>(IBI->getAddress())) {
3745    if (SimplifyIndirectBrOnSelect(IBI, SI))
3746      return SimplifyCFG(BB) | true;
3747  }
3748  return Changed;
3749}
3750
3751bool SimplifyCFGOpt::SimplifyUncondBranch(BranchInst *BI, IRBuilder<> &Builder){
3752  BasicBlock *BB = BI->getParent();
3753
3754  if (SinkCommon && SinkThenElseCodeToEnd(BI))
3755    return true;
3756
3757  // If the Terminator is the only non-phi instruction, simplify the block.
3758  BasicBlock::iterator I = BB->getFirstNonPHIOrDbgOrLifetime();
3759  if (I->isTerminator() && BB != &BB->getParent()->getEntryBlock() &&
3760      TryToSimplifyUncondBranchFromEmptyBlock(BB))
3761    return true;
3762
3763  // If the only instruction in the block is a seteq/setne comparison
3764  // against a constant, try to simplify the block.
3765  if (ICmpInst *ICI = dyn_cast<ICmpInst>(I))
3766    if (ICI->isEquality() && isa<ConstantInt>(ICI->getOperand(1))) {
3767      for (++I; isa<DbgInfoIntrinsic>(I); ++I)
3768        ;
3769      if (I->isTerminator() &&
3770          TryToSimplifyUncondBranchWithICmpInIt(ICI, TD, Builder))
3771        return true;
3772    }
3773
3774  // If this basic block is ONLY a compare and a branch, and if a predecessor
3775  // branches to us and our successor, fold the comparison into the
3776  // predecessor and use logical operations to update the incoming value
3777  // for PHI nodes in common successor.
3778  if (FoldBranchToCommonDest(BI))
3779    return SimplifyCFG(BB) | true;
3780  return false;
3781}
3782
3783
3784bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
3785  BasicBlock *BB = BI->getParent();
3786
3787  // Conditional branch
3788  if (isValueEqualityComparison(BI)) {
3789    // If we only have one predecessor, and if it is a branch on this value,
3790    // see if that predecessor totally determines the outcome of this
3791    // switch.
3792    if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
3793      if (SimplifyEqualityComparisonWithOnlyPredecessor(BI, OnlyPred, Builder))
3794        return SimplifyCFG(BB) | true;
3795
3796    // This block must be empty, except for the setcond inst, if it exists.
3797    // Ignore dbg intrinsics.
3798    BasicBlock::iterator I = BB->begin();
3799    // Ignore dbg intrinsics.
3800    while (isa<DbgInfoIntrinsic>(I))
3801      ++I;
3802    if (&*I == BI) {
3803      if (FoldValueComparisonIntoPredecessors(BI, Builder))
3804        return SimplifyCFG(BB) | true;
3805    } else if (&*I == cast<Instruction>(BI->getCondition())){
3806      ++I;
3807      // Ignore dbg intrinsics.
3808      while (isa<DbgInfoIntrinsic>(I))
3809        ++I;
3810      if (&*I == BI && FoldValueComparisonIntoPredecessors(BI, Builder))
3811        return SimplifyCFG(BB) | true;
3812    }
3813  }
3814
3815  // Try to turn "br (X == 0 | X == 1), T, F" into a switch instruction.
3816  if (SimplifyBranchOnICmpChain(BI, TD, Builder))
3817    return true;
3818
3819  // If this basic block is ONLY a compare and a branch, and if a predecessor
3820  // branches to us and one of our successors, fold the comparison into the
3821  // predecessor and use logical operations to pick the right destination.
3822  if (FoldBranchToCommonDest(BI))
3823    return SimplifyCFG(BB) | true;
3824
3825  // We have a conditional branch to two blocks that are only reachable
3826  // from BI.  We know that the condbr dominates the two blocks, so see if
3827  // there is any identical code in the "then" and "else" blocks.  If so, we
3828  // can hoist it up to the branching block.
3829  if (BI->getSuccessor(0)->getSinglePredecessor() != 0) {
3830    if (BI->getSuccessor(1)->getSinglePredecessor() != 0) {
3831      if (HoistThenElseCodeToIf(BI))
3832        return SimplifyCFG(BB) | true;
3833    } else {
3834      // If Successor #1 has multiple preds, we may be able to conditionally
3835      // execute Successor #0 if it branches to successor #1.
3836      TerminatorInst *Succ0TI = BI->getSuccessor(0)->getTerminator();
3837      if (Succ0TI->getNumSuccessors() == 1 &&
3838          Succ0TI->getSuccessor(0) == BI->getSuccessor(1))
3839        if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0)))
3840          return SimplifyCFG(BB) | true;
3841    }
3842  } else if (BI->getSuccessor(1)->getSinglePredecessor() != 0) {
3843    // If Successor #0 has multiple preds, we may be able to conditionally
3844    // execute Successor #1 if it branches to successor #0.
3845    TerminatorInst *Succ1TI = BI->getSuccessor(1)->getTerminator();
3846    if (Succ1TI->getNumSuccessors() == 1 &&
3847        Succ1TI->getSuccessor(0) == BI->getSuccessor(0))
3848      if (SpeculativelyExecuteBB(BI, BI->getSuccessor(1)))
3849        return SimplifyCFG(BB) | true;
3850  }
3851
3852  // If this is a branch on a phi node in the current block, thread control
3853  // through this block if any PHI node entries are constants.
3854  if (PHINode *PN = dyn_cast<PHINode>(BI->getCondition()))
3855    if (PN->getParent() == BI->getParent())
3856      if (FoldCondBranchOnPHI(BI, TD))
3857        return SimplifyCFG(BB) | true;
3858
3859  // Scan predecessor blocks for conditional branches.
3860  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
3861    if (BranchInst *PBI = dyn_cast<BranchInst>((*PI)->getTerminator()))
3862      if (PBI != BI && PBI->isConditional())
3863        if (SimplifyCondBranchToCondBranch(PBI, BI))
3864          return SimplifyCFG(BB) | true;
3865
3866  return false;
3867}
3868
3869/// Check if passing a value to an instruction will cause undefined behavior.
3870static bool passingValueIsAlwaysUndefined(Value *V, Instruction *I) {
3871  Constant *C = dyn_cast<Constant>(V);
3872  if (!C)
3873    return false;
3874
3875  if (I->use_empty())
3876    return false;
3877
3878  if (C->isNullValue()) {
3879    // Only look at the first use, avoid hurting compile time with long uselists
3880    User *Use = *I->use_begin();
3881
3882    // Now make sure that there are no instructions in between that can alter
3883    // control flow (eg. calls)
3884    for (BasicBlock::iterator i = ++BasicBlock::iterator(I); &*i != Use; ++i)
3885      if (i == I->getParent()->end() || i->mayHaveSideEffects())
3886        return false;
3887
3888    // Look through GEPs. A load from a GEP derived from NULL is still undefined
3889    if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Use))
3890      if (GEP->getPointerOperand() == I)
3891        return passingValueIsAlwaysUndefined(V, GEP);
3892
3893    // Look through bitcasts.
3894    if (BitCastInst *BC = dyn_cast<BitCastInst>(Use))
3895      return passingValueIsAlwaysUndefined(V, BC);
3896
3897    // Load from null is undefined.
3898    if (LoadInst *LI = dyn_cast<LoadInst>(Use))
3899      return LI->getPointerAddressSpace() == 0;
3900
3901    // Store to null is undefined.
3902    if (StoreInst *SI = dyn_cast<StoreInst>(Use))
3903      return SI->getPointerAddressSpace() == 0 && SI->getPointerOperand() == I;
3904  }
3905  return false;
3906}
3907
3908/// If BB has an incoming value that will always trigger undefined behavior
3909/// (eg. null pointer dereference), remove the branch leading here.
3910static bool removeUndefIntroducingPredecessor(BasicBlock *BB) {
3911  for (BasicBlock::iterator i = BB->begin();
3912       PHINode *PHI = dyn_cast<PHINode>(i); ++i)
3913    for (unsigned i = 0, e = PHI->getNumIncomingValues(); i != e; ++i)
3914      if (passingValueIsAlwaysUndefined(PHI->getIncomingValue(i), PHI)) {
3915        TerminatorInst *T = PHI->getIncomingBlock(i)->getTerminator();
3916        IRBuilder<> Builder(T);
3917        if (BranchInst *BI = dyn_cast<BranchInst>(T)) {
3918          BB->removePredecessor(PHI->getIncomingBlock(i));
3919          // Turn uncoditional branches into unreachables and remove the dead
3920          // destination from conditional branches.
3921          if (BI->isUnconditional())
3922            Builder.CreateUnreachable();
3923          else
3924            Builder.CreateBr(BI->getSuccessor(0) == BB ? BI->getSuccessor(1) :
3925                                                         BI->getSuccessor(0));
3926          BI->eraseFromParent();
3927          return true;
3928        }
3929        // TODO: SwitchInst.
3930      }
3931
3932  return false;
3933}
3934
3935bool SimplifyCFGOpt::run(BasicBlock *BB) {
3936  bool Changed = false;
3937
3938  assert(BB && BB->getParent() && "Block not embedded in function!");
3939  assert(BB->getTerminator() && "Degenerate basic block encountered!");
3940
3941  // Remove basic blocks that have no predecessors (except the entry block)...
3942  // or that just have themself as a predecessor.  These are unreachable.
3943  if ((pred_begin(BB) == pred_end(BB) &&
3944       BB != &BB->getParent()->getEntryBlock()) ||
3945      BB->getSinglePredecessor() == BB) {
3946    DEBUG(dbgs() << "Removing BB: \n" << *BB);
3947    DeleteDeadBlock(BB);
3948    return true;
3949  }
3950
3951  // Check to see if we can constant propagate this terminator instruction
3952  // away...
3953  Changed |= ConstantFoldTerminator(BB, true);
3954
3955  // Check for and eliminate duplicate PHI nodes in this block.
3956  Changed |= EliminateDuplicatePHINodes(BB);
3957
3958  // Check for and remove branches that will always cause undefined behavior.
3959  Changed |= removeUndefIntroducingPredecessor(BB);
3960
3961  // Merge basic blocks into their predecessor if there is only one distinct
3962  // pred, and if there is only one distinct successor of the predecessor, and
3963  // if there are no PHI nodes.
3964  //
3965  if (MergeBlockIntoPredecessor(BB))
3966    return true;
3967
3968  IRBuilder<> Builder(BB);
3969
3970  // If there is a trivial two-entry PHI node in this basic block, and we can
3971  // eliminate it, do so now.
3972  if (PHINode *PN = dyn_cast<PHINode>(BB->begin()))
3973    if (PN->getNumIncomingValues() == 2)
3974      Changed |= FoldTwoEntryPHINode(PN, TD);
3975
3976  Builder.SetInsertPoint(BB->getTerminator());
3977  if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) {
3978    if (BI->isUnconditional()) {
3979      if (SimplifyUncondBranch(BI, Builder)) return true;
3980    } else {
3981      if (SimplifyCondBranch(BI, Builder)) return true;
3982    }
3983  } else if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
3984    if (SimplifyReturn(RI, Builder)) return true;
3985  } else if (ResumeInst *RI = dyn_cast<ResumeInst>(BB->getTerminator())) {
3986    if (SimplifyResume(RI, Builder)) return true;
3987  } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator())) {
3988    if (SimplifySwitch(SI, Builder)) return true;
3989  } else if (UnreachableInst *UI =
3990               dyn_cast<UnreachableInst>(BB->getTerminator())) {
3991    if (SimplifyUnreachable(UI)) return true;
3992  } else if (IndirectBrInst *IBI =
3993               dyn_cast<IndirectBrInst>(BB->getTerminator())) {
3994    if (SimplifyIndirectBr(IBI)) return true;
3995  }
3996
3997  return Changed;
3998}
3999
4000/// SimplifyCFG - This function is used to do simplification of a CFG.  For
4001/// example, it adjusts branches to branches to eliminate the extra hop, it
4002/// eliminates unreachable basic blocks, and does other "peephole" optimization
4003/// of the CFG.  It returns true if a modification was made.
4004///
4005bool llvm::SimplifyCFG(BasicBlock *BB, const DataLayout *TD,
4006                       const TargetTransformInfo *TTI) {
4007  return SimplifyCFGOpt(TD, TTI).run(BB);
4008}
4009