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