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