Rename ComputeMaskedBits to computeKnownBits. "Masked" has been
[oota-llvm.git] / lib / Transforms / Utils / SimplifyCFG.cpp
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>
49 using namespace llvm;
50 using namespace PatternMatch;
51
52 #define DEBUG_TYPE "simplifycfg"
53
54 static cl::opt<unsigned>
55 PHINodeFoldingThreshold("phi-node-folding-threshold", cl::Hidden, cl::init(1),
56    cl::desc("Control the amount of phi node folding to perform (default = 1)"));
57
58 static cl::opt<bool>
59 DupRet("simplifycfg-dup-ret", cl::Hidden, cl::init(false),
60        cl::desc("Duplicate return instructions into unconditional branches"));
61
62 static cl::opt<bool>
63 SinkCommon("simplifycfg-sink-common", cl::Hidden, cl::init(true),
64        cl::desc("Sink common instructions down to the end block"));
65
66 static 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
70 STATISTIC(NumBitMaps, "Number of switch instructions turned into bitmaps");
71 STATISTIC(NumLookupTables, "Number of switch instructions turned into lookup tables");
72 STATISTIC(NumLookupTablesHoles, "Number of switch instructions turned into lookup tables (holes checked)");
73 STATISTIC(NumSinkCommons, "Number of common instructions sunk down to the end block");
74 STATISTIC(NumSpeculations, "Number of speculative executed instructions");
75
76 namespace {
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
93 class 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
113 public:
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 ///
123 static 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 ///
151 static 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.
191 static 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.
204 static 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.
255 static 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.
312 static 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.
344 static Value *
345 GatherConstantCompares(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
450 static 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.
467 Value *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.
494 BasicBlock *SimplifyCFGOpt::
495 GetValueEqualityComparisonCases(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.
518 static 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.
525 static bool
526 ValuesOverlap(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.
564 bool SimplifyCFGOpt::
565 SimplifyEqualityComparisonWithOnlyPredecessor(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
699 namespace {
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
710 static 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
721 static 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.
733 static 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.
754 static 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.
767 bool 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.
978 static 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.
997 static 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
1057 HoistTerminator:
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.
1128 static 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.
1319 static 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.
1390 static 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.
1562 static 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.
1575 static 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.
1602 static 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.
1700 static 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.
1837 static 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.
1926 static 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 ///
1943 static 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.
1961 bool 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.
2292 static 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.
2494 static 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.
2559 static 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).
2595 static 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.
2628 static 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.
2735 static 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
2847 bool 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
2907 bool 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
2957 bool 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.
3120 static 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.
3189 static 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.
3242 static 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.
3275 static 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.
3310 static 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.
3323 static 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.
3334 static Constant *
3335 ConstantFold(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.
3368 static bool
3369 GetCaseResults(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
3436 namespace {
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
3491 SwitchLookupTable::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
3573 Value *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
3608 bool 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.
3628 static 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.
3673 static 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
3886 bool 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
3929 bool 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
3966 bool 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
3999 bool 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.
4085 static 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.
4127 static 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
4152 bool 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 ///
4222 bool llvm::SimplifyCFG(BasicBlock *BB, const TargetTransformInfo &TTI,
4223                        const DataLayout *DL) {
4224   return SimplifyCFGOpt(TTI, DL).run(BB);
4225 }