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