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