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