SimplifyCFG.cpp revision 58cfa3b13752579c86cf85270d49f9ced0942f2f
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/Instructions.h"
18#include "llvm/IntrinsicInst.h"
19#include "llvm/LLVMContext.h"
20#include "llvm/Type.h"
21#include "llvm/DerivedTypes.h"
22#include "llvm/GlobalVariable.h"
23#include "llvm/Support/CFG.h"
24#include "llvm/Support/Debug.h"
25#include "llvm/Support/raw_ostream.h"
26#include "llvm/Analysis/ConstantFolding.h"
27#include "llvm/Transforms/Utils/BasicBlockUtils.h"
28#include "llvm/ADT/SmallVector.h"
29#include "llvm/ADT/SmallPtrSet.h"
30#include "llvm/ADT/Statistic.h"
31#include <algorithm>
32#include <functional>
33#include <set>
34#include <map>
35using namespace llvm;
36
37STATISTIC(NumSpeculations, "Number of speculative executed instructions");
38
39/// SafeToMergeTerminators - Return true if it is safe to merge these two
40/// terminator instructions together.
41///
42static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2) {
43  if (SI1 == SI2) return false;  // Can't merge with self!
44
45  // It is not safe to merge these two switch instructions if they have a common
46  // successor, and if that successor has a PHI node, and if *that* PHI node has
47  // conflicting incoming values from the two switch blocks.
48  BasicBlock *SI1BB = SI1->getParent();
49  BasicBlock *SI2BB = SI2->getParent();
50  SmallPtrSet<BasicBlock*, 16> SI1Succs(succ_begin(SI1BB), succ_end(SI1BB));
51
52  for (succ_iterator I = succ_begin(SI2BB), E = succ_end(SI2BB); I != E; ++I)
53    if (SI1Succs.count(*I))
54      for (BasicBlock::iterator BBI = (*I)->begin();
55           isa<PHINode>(BBI); ++BBI) {
56        PHINode *PN = cast<PHINode>(BBI);
57        if (PN->getIncomingValueForBlock(SI1BB) !=
58            PN->getIncomingValueForBlock(SI2BB))
59          return false;
60      }
61
62  return true;
63}
64
65/// AddPredecessorToBlock - Update PHI nodes in Succ to indicate that there will
66/// now be entries in it from the 'NewPred' block.  The values that will be
67/// flowing into the PHI nodes will be the same as those coming in from
68/// ExistPred, an existing predecessor of Succ.
69static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred,
70                                  BasicBlock *ExistPred) {
71  assert(std::find(succ_begin(ExistPred), succ_end(ExistPred), Succ) !=
72         succ_end(ExistPred) && "ExistPred is not a predecessor of Succ!");
73  if (!isa<PHINode>(Succ->begin())) return; // Quick exit if nothing to do
74
75  PHINode *PN;
76  for (BasicBlock::iterator I = Succ->begin();
77       (PN = dyn_cast<PHINode>(I)); ++I)
78    PN->addIncoming(PN->getIncomingValueForBlock(ExistPred), NewPred);
79}
80
81/// CanPropagatePredecessorsForPHIs - Return true if we can fold BB, an
82/// almost-empty BB ending in an unconditional branch to Succ, into succ.
83///
84/// Assumption: Succ is the single successor for BB.
85///
86static bool CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) {
87  assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!");
88
89  DEBUG(errs() << "Looking to fold " << BB->getName() << " into "
90        << Succ->getName() << "\n");
91  // Shortcut, if there is only a single predecessor it must be BB and merging
92  // is always safe
93  if (Succ->getSinglePredecessor()) return true;
94
95  // Make a list of the predecessors of BB
96  typedef SmallPtrSet<BasicBlock*, 16> BlockSet;
97  BlockSet BBPreds(pred_begin(BB), pred_end(BB));
98
99  // Use that list to make another list of common predecessors of BB and Succ
100  BlockSet CommonPreds;
101  for (pred_iterator PI = pred_begin(Succ), PE = pred_end(Succ);
102        PI != PE; ++PI)
103    if (BBPreds.count(*PI))
104      CommonPreds.insert(*PI);
105
106  // Shortcut, if there are no common predecessors, merging is always safe
107  if (CommonPreds.empty())
108    return true;
109
110  // Look at all the phi nodes in Succ, to see if they present a conflict when
111  // merging these blocks
112  for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
113    PHINode *PN = cast<PHINode>(I);
114
115    // If the incoming value from BB is again a PHINode in
116    // BB which has the same incoming value for *PI as PN does, we can
117    // merge the phi nodes and then the blocks can still be merged
118    PHINode *BBPN = dyn_cast<PHINode>(PN->getIncomingValueForBlock(BB));
119    if (BBPN && BBPN->getParent() == BB) {
120      for (BlockSet::iterator PI = CommonPreds.begin(), PE = CommonPreds.end();
121            PI != PE; PI++) {
122        if (BBPN->getIncomingValueForBlock(*PI)
123              != PN->getIncomingValueForBlock(*PI)) {
124          DEBUG(errs() << "Can't fold, phi node " << PN->getName() << " in "
125                << Succ->getName() << " is conflicting with "
126                << BBPN->getName() << " with regard to common predecessor "
127                << (*PI)->getName() << "\n");
128          return false;
129        }
130      }
131    } else {
132      Value* Val = PN->getIncomingValueForBlock(BB);
133      for (BlockSet::iterator PI = CommonPreds.begin(), PE = CommonPreds.end();
134            PI != PE; PI++) {
135        // See if the incoming value for the common predecessor is equal to the
136        // one for BB, in which case this phi node will not prevent the merging
137        // of the block.
138        if (Val != PN->getIncomingValueForBlock(*PI)) {
139          DEBUG(errs() << "Can't fold, phi node " << PN->getName() << " in "
140                << Succ->getName() << " is conflicting with regard to common "
141                << "predecessor " << (*PI)->getName() << "\n");
142          return false;
143        }
144      }
145    }
146  }
147
148  return true;
149}
150
151/// TryToSimplifyUncondBranchFromEmptyBlock - BB contains an unconditional
152/// branch to Succ, and contains no instructions other than PHI nodes and the
153/// branch.  If possible, eliminate BB.
154static bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
155                                                    BasicBlock *Succ) {
156  // Check to see if merging these blocks would cause conflicts for any of the
157  // phi nodes in BB or Succ. If not, we can safely merge.
158  if (!CanPropagatePredecessorsForPHIs(BB, Succ)) return false;
159
160  // Check for cases where Succ has multiple predecessors and a PHI node in BB
161  // has uses which will not disappear when the PHI nodes are merged.  It is
162  // possible to handle such cases, but difficult: it requires checking whether
163  // BB dominates Succ, which is non-trivial to calculate in the case where
164  // Succ has multiple predecessors.  Also, it requires checking whether
165  // constructing the necessary self-referential PHI node doesn't intoduce any
166  // conflicts; this isn't too difficult, but the previous code for doing this
167  // was incorrect.
168  //
169  // Note that if this check finds a live use, BB dominates Succ, so BB is
170  // something like a loop pre-header (or rarely, a part of an irreducible CFG);
171  // folding the branch isn't profitable in that case anyway.
172  if (!Succ->getSinglePredecessor()) {
173    BasicBlock::iterator BBI = BB->begin();
174    while (isa<PHINode>(*BBI)) {
175      for (Value::use_iterator UI = BBI->use_begin(), E = BBI->use_end();
176           UI != E; ++UI) {
177        if (PHINode* PN = dyn_cast<PHINode>(*UI)) {
178          if (PN->getIncomingBlock(UI) != BB)
179            return false;
180        } else {
181          return false;
182        }
183      }
184      ++BBI;
185    }
186  }
187
188  DEBUG(errs() << "Killing Trivial BB: \n" << *BB);
189
190  if (isa<PHINode>(Succ->begin())) {
191    // If there is more than one pred of succ, and there are PHI nodes in
192    // the successor, then we need to add incoming edges for the PHI nodes
193    //
194    const SmallVector<BasicBlock*, 16> BBPreds(pred_begin(BB), pred_end(BB));
195
196    // Loop over all of the PHI nodes in the successor of BB.
197    for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
198      PHINode *PN = cast<PHINode>(I);
199      Value *OldVal = PN->removeIncomingValue(BB, false);
200      assert(OldVal && "No entry in PHI for Pred BB!");
201
202      // If this incoming value is one of the PHI nodes in BB, the new entries
203      // in the PHI node are the entries from the old PHI.
204      if (isa<PHINode>(OldVal) && cast<PHINode>(OldVal)->getParent() == BB) {
205        PHINode *OldValPN = cast<PHINode>(OldVal);
206        for (unsigned i = 0, e = OldValPN->getNumIncomingValues(); i != e; ++i)
207          // Note that, since we are merging phi nodes and BB and Succ might
208          // have common predecessors, we could end up with a phi node with
209          // identical incoming branches. This will be cleaned up later (and
210          // will trigger asserts if we try to clean it up now, without also
211          // simplifying the corresponding conditional branch).
212          PN->addIncoming(OldValPN->getIncomingValue(i),
213                          OldValPN->getIncomingBlock(i));
214      } else {
215        // Add an incoming value for each of the new incoming values.
216        for (unsigned i = 0, e = BBPreds.size(); i != e; ++i)
217          PN->addIncoming(OldVal, BBPreds[i]);
218      }
219    }
220  }
221
222  while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) {
223    if (Succ->getSinglePredecessor()) {
224      // BB is the only predecessor of Succ, so Succ will end up with exactly
225      // the same predecessors BB had.
226      Succ->getInstList().splice(Succ->begin(),
227                                 BB->getInstList(), BB->begin());
228    } else {
229      // We explicitly check for such uses in CanPropagatePredecessorsForPHIs.
230      assert(PN->use_empty() && "There shouldn't be any uses here!");
231      PN->eraseFromParent();
232    }
233  }
234
235  // Everything that jumped to BB now goes to Succ.
236  BB->replaceAllUsesWith(Succ);
237  if (!Succ->hasName()) Succ->takeName(BB);
238  BB->eraseFromParent();              // Delete the old basic block.
239  return true;
240}
241
242/// GetIfCondition - Given a basic block (BB) with two predecessors (and
243/// presumably PHI nodes in it), check to see if the merge at this block is due
244/// to an "if condition".  If so, return the boolean condition that determines
245/// which entry into BB will be taken.  Also, return by references the block
246/// that will be entered from if the condition is true, and the block that will
247/// be entered if the condition is false.
248///
249///
250static Value *GetIfCondition(BasicBlock *BB,
251                             BasicBlock *&IfTrue, BasicBlock *&IfFalse) {
252  assert(std::distance(pred_begin(BB), pred_end(BB)) == 2 &&
253         "Function can only handle blocks with 2 predecessors!");
254  BasicBlock *Pred1 = *pred_begin(BB);
255  BasicBlock *Pred2 = *++pred_begin(BB);
256
257  // We can only handle branches.  Other control flow will be lowered to
258  // branches if possible anyway.
259  if (!isa<BranchInst>(Pred1->getTerminator()) ||
260      !isa<BranchInst>(Pred2->getTerminator()))
261    return 0;
262  BranchInst *Pred1Br = cast<BranchInst>(Pred1->getTerminator());
263  BranchInst *Pred2Br = cast<BranchInst>(Pred2->getTerminator());
264
265  // Eliminate code duplication by ensuring that Pred1Br is conditional if
266  // either are.
267  if (Pred2Br->isConditional()) {
268    // If both branches are conditional, we don't have an "if statement".  In
269    // reality, we could transform this case, but since the condition will be
270    // required anyway, we stand no chance of eliminating it, so the xform is
271    // probably not profitable.
272    if (Pred1Br->isConditional())
273      return 0;
274
275    std::swap(Pred1, Pred2);
276    std::swap(Pred1Br, Pred2Br);
277  }
278
279  if (Pred1Br->isConditional()) {
280    // If we found a conditional branch predecessor, make sure that it branches
281    // to BB and Pred2Br.  If it doesn't, this isn't an "if statement".
282    if (Pred1Br->getSuccessor(0) == BB &&
283        Pred1Br->getSuccessor(1) == Pred2) {
284      IfTrue = Pred1;
285      IfFalse = Pred2;
286    } else if (Pred1Br->getSuccessor(0) == Pred2 &&
287               Pred1Br->getSuccessor(1) == BB) {
288      IfTrue = Pred2;
289      IfFalse = Pred1;
290    } else {
291      // We know that one arm of the conditional goes to BB, so the other must
292      // go somewhere unrelated, and this must not be an "if statement".
293      return 0;
294    }
295
296    // The only thing we have to watch out for here is to make sure that Pred2
297    // doesn't have incoming edges from other blocks.  If it does, the condition
298    // doesn't dominate BB.
299    if (++pred_begin(Pred2) != pred_end(Pred2))
300      return 0;
301
302    return Pred1Br->getCondition();
303  }
304
305  // Ok, if we got here, both predecessors end with an unconditional branch to
306  // BB.  Don't panic!  If both blocks only have a single (identical)
307  // predecessor, and THAT is a conditional branch, then we're all ok!
308  if (pred_begin(Pred1) == pred_end(Pred1) ||
309      ++pred_begin(Pred1) != pred_end(Pred1) ||
310      pred_begin(Pred2) == pred_end(Pred2) ||
311      ++pred_begin(Pred2) != pred_end(Pred2) ||
312      *pred_begin(Pred1) != *pred_begin(Pred2))
313    return 0;
314
315  // Otherwise, if this is a conditional branch, then we can use it!
316  BasicBlock *CommonPred = *pred_begin(Pred1);
317  if (BranchInst *BI = dyn_cast<BranchInst>(CommonPred->getTerminator())) {
318    assert(BI->isConditional() && "Two successors but not conditional?");
319    if (BI->getSuccessor(0) == Pred1) {
320      IfTrue = Pred1;
321      IfFalse = Pred2;
322    } else {
323      IfTrue = Pred2;
324      IfFalse = Pred1;
325    }
326    return BI->getCondition();
327  }
328  return 0;
329}
330
331/// DominatesMergePoint - If we have a merge point of an "if condition" as
332/// accepted above, return true if the specified value dominates the block.  We
333/// don't handle the true generality of domination here, just a special case
334/// which works well enough for us.
335///
336/// If AggressiveInsts is non-null, and if V does not dominate BB, we check to
337/// see if V (which must be an instruction) is cheap to compute and is
338/// non-trapping.  If both are true, the instruction is inserted into the set
339/// and true is returned.
340static bool DominatesMergePoint(Value *V, BasicBlock *BB,
341                                std::set<Instruction*> *AggressiveInsts) {
342  Instruction *I = dyn_cast<Instruction>(V);
343  if (!I) {
344    // Non-instructions all dominate instructions, but not all constantexprs
345    // can be executed unconditionally.
346    if (ConstantExpr *C = dyn_cast<ConstantExpr>(V))
347      if (C->canTrap())
348        return false;
349    return true;
350  }
351  BasicBlock *PBB = I->getParent();
352
353  // We don't want to allow weird loops that might have the "if condition" in
354  // the bottom of this block.
355  if (PBB == BB) return false;
356
357  // If this instruction is defined in a block that contains an unconditional
358  // branch to BB, then it must be in the 'conditional' part of the "if
359  // statement".
360  if (BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator()))
361    if (BI->isUnconditional() && BI->getSuccessor(0) == BB) {
362      if (!AggressiveInsts) return false;
363      // Okay, it looks like the instruction IS in the "condition".  Check to
364      // see if its a cheap instruction to unconditionally compute, and if it
365      // only uses stuff defined outside of the condition.  If so, hoist it out.
366      if (!I->isSafeToSpeculativelyExecute())
367        return false;
368
369      switch (I->getOpcode()) {
370      default: return false;  // Cannot hoist this out safely.
371      case Instruction::Load: {
372        // We have to check to make sure there are no instructions before the
373        // load in its basic block, as we are going to hoist the loop out to
374        // its predecessor.
375        BasicBlock::iterator IP = PBB->begin();
376        while (isa<DbgInfoIntrinsic>(IP))
377          IP++;
378        if (IP != BasicBlock::iterator(I))
379          return false;
380        break;
381      }
382      case Instruction::Add:
383      case Instruction::Sub:
384      case Instruction::And:
385      case Instruction::Or:
386      case Instruction::Xor:
387      case Instruction::Shl:
388      case Instruction::LShr:
389      case Instruction::AShr:
390      case Instruction::ICmp:
391        break;   // These are all cheap and non-trapping instructions.
392      }
393
394      // Okay, we can only really hoist these out if their operands are not
395      // defined in the conditional region.
396      for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i)
397        if (!DominatesMergePoint(*i, BB, 0))
398          return false;
399      // Okay, it's safe to do this!  Remember this instruction.
400      AggressiveInsts->insert(I);
401    }
402
403  return true;
404}
405
406/// GatherConstantSetEQs - Given a potentially 'or'd together collection of
407/// icmp_eq instructions that compare a value against a constant, return the
408/// value being compared, and stick the constant into the Values vector.
409static Value *GatherConstantSetEQs(Value *V, std::vector<ConstantInt*> &Values){
410  if (Instruction *Inst = dyn_cast<Instruction>(V)) {
411    if (Inst->getOpcode() == Instruction::ICmp &&
412        cast<ICmpInst>(Inst)->getPredicate() == ICmpInst::ICMP_EQ) {
413      if (ConstantInt *C = dyn_cast<ConstantInt>(Inst->getOperand(1))) {
414        Values.push_back(C);
415        return Inst->getOperand(0);
416      } else if (ConstantInt *C = dyn_cast<ConstantInt>(Inst->getOperand(0))) {
417        Values.push_back(C);
418        return Inst->getOperand(1);
419      }
420    } else if (Inst->getOpcode() == Instruction::Or) {
421      if (Value *LHS = GatherConstantSetEQs(Inst->getOperand(0), Values))
422        if (Value *RHS = GatherConstantSetEQs(Inst->getOperand(1), Values))
423          if (LHS == RHS)
424            return LHS;
425    }
426  }
427  return 0;
428}
429
430/// GatherConstantSetNEs - Given a potentially 'and'd together collection of
431/// setne instructions that compare a value against a constant, return the value
432/// being compared, and stick the constant into the Values vector.
433static Value *GatherConstantSetNEs(Value *V, std::vector<ConstantInt*> &Values){
434  if (Instruction *Inst = dyn_cast<Instruction>(V)) {
435    if (Inst->getOpcode() == Instruction::ICmp &&
436               cast<ICmpInst>(Inst)->getPredicate() == ICmpInst::ICMP_NE) {
437      if (ConstantInt *C = dyn_cast<ConstantInt>(Inst->getOperand(1))) {
438        Values.push_back(C);
439        return Inst->getOperand(0);
440      } else if (ConstantInt *C = dyn_cast<ConstantInt>(Inst->getOperand(0))) {
441        Values.push_back(C);
442        return Inst->getOperand(1);
443      }
444    } else if (Inst->getOpcode() == Instruction::And) {
445      if (Value *LHS = GatherConstantSetNEs(Inst->getOperand(0), Values))
446        if (Value *RHS = GatherConstantSetNEs(Inst->getOperand(1), Values))
447          if (LHS == RHS)
448            return LHS;
449    }
450  }
451  return 0;
452}
453
454/// GatherValueComparisons - If the specified Cond is an 'and' or 'or' of a
455/// bunch of comparisons of one value against constants, return the value and
456/// the constants being compared.
457static bool GatherValueComparisons(Instruction *Cond, Value *&CompVal,
458                                   std::vector<ConstantInt*> &Values) {
459  if (Cond->getOpcode() == Instruction::Or) {
460    CompVal = GatherConstantSetEQs(Cond, Values);
461
462    // Return true to indicate that the condition is true if the CompVal is
463    // equal to one of the constants.
464    return true;
465  } else if (Cond->getOpcode() == Instruction::And) {
466    CompVal = GatherConstantSetNEs(Cond, Values);
467
468    // Return false to indicate that the condition is false if the CompVal is
469    // equal to one of the constants.
470    return false;
471  }
472  return false;
473}
474
475static void EraseTerminatorInstAndDCECond(TerminatorInst *TI) {
476  Instruction* Cond = 0;
477  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
478    Cond = dyn_cast<Instruction>(SI->getCondition());
479  } else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
480    if (BI->isConditional())
481      Cond = dyn_cast<Instruction>(BI->getCondition());
482  }
483
484  TI->eraseFromParent();
485  if (Cond) RecursivelyDeleteTriviallyDeadInstructions(Cond);
486}
487
488/// isValueEqualityComparison - Return true if the specified terminator checks
489/// to see if a value is equal to constant integer value.
490static Value *isValueEqualityComparison(TerminatorInst *TI) {
491  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
492    // Do not permit merging of large switch instructions into their
493    // predecessors unless there is only one predecessor.
494    if (SI->getNumSuccessors() * std::distance(pred_begin(SI->getParent()),
495                                               pred_end(SI->getParent())) > 128)
496      return 0;
497
498    return SI->getCondition();
499  }
500  if (BranchInst *BI = dyn_cast<BranchInst>(TI))
501    if (BI->isConditional() && BI->getCondition()->hasOneUse())
502      if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition()))
503        if ((ICI->getPredicate() == ICmpInst::ICMP_EQ ||
504             ICI->getPredicate() == ICmpInst::ICMP_NE) &&
505            isa<ConstantInt>(ICI->getOperand(1)))
506          return ICI->getOperand(0);
507  return 0;
508}
509
510/// GetValueEqualityComparisonCases - Given a value comparison instruction,
511/// decode all of the 'cases' that it represents and return the 'default' block.
512static BasicBlock *
513GetValueEqualityComparisonCases(TerminatorInst *TI,
514                                std::vector<std::pair<ConstantInt*,
515                                                      BasicBlock*> > &Cases) {
516  if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
517    Cases.reserve(SI->getNumCases());
518    for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
519      Cases.push_back(std::make_pair(SI->getCaseValue(i), SI->getSuccessor(i)));
520    return SI->getDefaultDest();
521  }
522
523  BranchInst *BI = cast<BranchInst>(TI);
524  ICmpInst *ICI = cast<ICmpInst>(BI->getCondition());
525  Cases.push_back(std::make_pair(cast<ConstantInt>(ICI->getOperand(1)),
526                                 BI->getSuccessor(ICI->getPredicate() ==
527                                                  ICmpInst::ICMP_NE)));
528  return BI->getSuccessor(ICI->getPredicate() == ICmpInst::ICMP_EQ);
529}
530
531
532/// EliminateBlockCases - Given a vector of bb/value pairs, remove any entries
533/// in the list that match the specified block.
534static void EliminateBlockCases(BasicBlock *BB,
535               std::vector<std::pair<ConstantInt*, BasicBlock*> > &Cases) {
536  for (unsigned i = 0, e = Cases.size(); i != e; ++i)
537    if (Cases[i].second == BB) {
538      Cases.erase(Cases.begin()+i);
539      --i; --e;
540    }
541}
542
543/// ValuesOverlap - Return true if there are any keys in C1 that exist in C2 as
544/// well.
545static bool
546ValuesOverlap(std::vector<std::pair<ConstantInt*, BasicBlock*> > &C1,
547              std::vector<std::pair<ConstantInt*, BasicBlock*> > &C2) {
548  std::vector<std::pair<ConstantInt*, BasicBlock*> > *V1 = &C1, *V2 = &C2;
549
550  // Make V1 be smaller than V2.
551  if (V1->size() > V2->size())
552    std::swap(V1, V2);
553
554  if (V1->size() == 0) return false;
555  if (V1->size() == 1) {
556    // Just scan V2.
557    ConstantInt *TheVal = (*V1)[0].first;
558    for (unsigned i = 0, e = V2->size(); i != e; ++i)
559      if (TheVal == (*V2)[i].first)
560        return true;
561  }
562
563  // Otherwise, just sort both lists and compare element by element.
564  std::sort(V1->begin(), V1->end());
565  std::sort(V2->begin(), V2->end());
566  unsigned i1 = 0, i2 = 0, e1 = V1->size(), e2 = V2->size();
567  while (i1 != e1 && i2 != e2) {
568    if ((*V1)[i1].first == (*V2)[i2].first)
569      return true;
570    if ((*V1)[i1].first < (*V2)[i2].first)
571      ++i1;
572    else
573      ++i2;
574  }
575  return false;
576}
577
578/// SimplifyEqualityComparisonWithOnlyPredecessor - If TI is known to be a
579/// terminator instruction and its block is known to only have a single
580/// predecessor block, check to see if that predecessor is also a value
581/// comparison with the same value, and if that comparison determines the
582/// outcome of this comparison.  If so, simplify TI.  This does a very limited
583/// form of jump threading.
584static bool SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
585                                                          BasicBlock *Pred) {
586  Value *PredVal = isValueEqualityComparison(Pred->getTerminator());
587  if (!PredVal) return false;  // Not a value comparison in predecessor.
588
589  Value *ThisVal = isValueEqualityComparison(TI);
590  assert(ThisVal && "This isn't a value comparison!!");
591  if (ThisVal != PredVal) return false;  // Different predicates.
592
593  // Find out information about when control will move from Pred to TI's block.
594  std::vector<std::pair<ConstantInt*, BasicBlock*> > PredCases;
595  BasicBlock *PredDef = GetValueEqualityComparisonCases(Pred->getTerminator(),
596                                                        PredCases);
597  EliminateBlockCases(PredDef, PredCases);  // Remove default from cases.
598
599  // Find information about how control leaves this block.
600  std::vector<std::pair<ConstantInt*, BasicBlock*> > ThisCases;
601  BasicBlock *ThisDef = GetValueEqualityComparisonCases(TI, ThisCases);
602  EliminateBlockCases(ThisDef, ThisCases);  // Remove default from cases.
603
604  // If TI's block is the default block from Pred's comparison, potentially
605  // simplify TI based on this knowledge.
606  if (PredDef == TI->getParent()) {
607    // If we are here, we know that the value is none of those cases listed in
608    // PredCases.  If there are any cases in ThisCases that are in PredCases, we
609    // can simplify TI.
610    if (ValuesOverlap(PredCases, ThisCases)) {
611      if (isa<BranchInst>(TI)) {
612        // Okay, one of the successors of this condbr is dead.  Convert it to a
613        // uncond br.
614        assert(ThisCases.size() == 1 && "Branch can only have one case!");
615        // Insert the new branch.
616        Instruction *NI = BranchInst::Create(ThisDef, TI);
617        (void) NI;
618
619        // Remove PHI node entries for the dead edge.
620        ThisCases[0].second->removePredecessor(TI->getParent());
621
622        DEBUG(errs() << "Threading pred instr: " << *Pred->getTerminator()
623             << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n");
624
625        EraseTerminatorInstAndDCECond(TI);
626        return true;
627
628      } else {
629        SwitchInst *SI = cast<SwitchInst>(TI);
630        // Okay, TI has cases that are statically dead, prune them away.
631        SmallPtrSet<Constant*, 16> DeadCases;
632        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
633          DeadCases.insert(PredCases[i].first);
634
635        DEBUG(errs() << "Threading pred instr: " << *Pred->getTerminator()
636                     << "Through successor TI: " << *TI);
637
638        for (unsigned i = SI->getNumCases()-1; i != 0; --i)
639          if (DeadCases.count(SI->getCaseValue(i))) {
640            SI->getSuccessor(i)->removePredecessor(TI->getParent());
641            SI->removeCase(i);
642          }
643
644        DEBUG(errs() << "Leaving: " << *TI << "\n");
645        return true;
646      }
647    }
648
649  } else {
650    // Otherwise, TI's block must correspond to some matched value.  Find out
651    // which value (or set of values) this is.
652    ConstantInt *TIV = 0;
653    BasicBlock *TIBB = TI->getParent();
654    for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
655      if (PredCases[i].second == TIBB) {
656        if (TIV == 0)
657          TIV = PredCases[i].first;
658        else
659          return false;  // Cannot handle multiple values coming to this block.
660      }
661    assert(TIV && "No edge from pred to succ?");
662
663    // Okay, we found the one constant that our value can be if we get into TI's
664    // BB.  Find out which successor will unconditionally be branched to.
665    BasicBlock *TheRealDest = 0;
666    for (unsigned i = 0, e = ThisCases.size(); i != e; ++i)
667      if (ThisCases[i].first == TIV) {
668        TheRealDest = ThisCases[i].second;
669        break;
670      }
671
672    // If not handled by any explicit cases, it is handled by the default case.
673    if (TheRealDest == 0) TheRealDest = ThisDef;
674
675    // Remove PHI node entries for dead edges.
676    BasicBlock *CheckEdge = TheRealDest;
677    for (succ_iterator SI = succ_begin(TIBB), e = succ_end(TIBB); SI != e; ++SI)
678      if (*SI != CheckEdge)
679        (*SI)->removePredecessor(TIBB);
680      else
681        CheckEdge = 0;
682
683    // Insert the new branch.
684    Instruction *NI = BranchInst::Create(TheRealDest, TI);
685    (void) NI;
686
687    DEBUG(errs() << "Threading pred instr: " << *Pred->getTerminator()
688              << "Through successor TI: " << *TI << "Leaving: " << *NI << "\n");
689
690    EraseTerminatorInstAndDCECond(TI);
691    return true;
692  }
693  return false;
694}
695
696namespace {
697  /// ConstantIntOrdering - This class implements a stable ordering of constant
698  /// integers that does not depend on their address.  This is important for
699  /// applications that sort ConstantInt's to ensure uniqueness.
700  struct ConstantIntOrdering {
701    bool operator()(const ConstantInt *LHS, const ConstantInt *RHS) const {
702      return LHS->getValue().ult(RHS->getValue());
703    }
704  };
705}
706
707/// FoldValueComparisonIntoPredecessors - The specified terminator is a value
708/// equality comparison instruction (either a switch or a branch on "X == c").
709/// See if any of the predecessors of the terminator block are value comparisons
710/// on the same value.  If so, and if safe to do so, fold them together.
711static bool FoldValueComparisonIntoPredecessors(TerminatorInst *TI) {
712  BasicBlock *BB = TI->getParent();
713  Value *CV = isValueEqualityComparison(TI);  // CondVal
714  assert(CV && "Not a comparison?");
715  bool Changed = false;
716
717  SmallVector<BasicBlock*, 16> Preds(pred_begin(BB), pred_end(BB));
718  while (!Preds.empty()) {
719    BasicBlock *Pred = Preds.pop_back_val();
720
721    // See if the predecessor is a comparison with the same value.
722    TerminatorInst *PTI = Pred->getTerminator();
723    Value *PCV = isValueEqualityComparison(PTI);  // PredCondVal
724
725    if (PCV == CV && SafeToMergeTerminators(TI, PTI)) {
726      // Figure out which 'cases' to copy from SI to PSI.
727      std::vector<std::pair<ConstantInt*, BasicBlock*> > BBCases;
728      BasicBlock *BBDefault = GetValueEqualityComparisonCases(TI, BBCases);
729
730      std::vector<std::pair<ConstantInt*, BasicBlock*> > PredCases;
731      BasicBlock *PredDefault = GetValueEqualityComparisonCases(PTI, PredCases);
732
733      // Based on whether the default edge from PTI goes to BB or not, fill in
734      // PredCases and PredDefault with the new switch cases we would like to
735      // build.
736      SmallVector<BasicBlock*, 8> NewSuccessors;
737
738      if (PredDefault == BB) {
739        // If this is the default destination from PTI, only the edges in TI
740        // that don't occur in PTI, or that branch to BB will be activated.
741        std::set<ConstantInt*, ConstantIntOrdering> PTIHandled;
742        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
743          if (PredCases[i].second != BB)
744            PTIHandled.insert(PredCases[i].first);
745          else {
746            // The default destination is BB, we don't need explicit targets.
747            std::swap(PredCases[i], PredCases.back());
748            PredCases.pop_back();
749            --i; --e;
750          }
751
752        // Reconstruct the new switch statement we will be building.
753        if (PredDefault != BBDefault) {
754          PredDefault->removePredecessor(Pred);
755          PredDefault = BBDefault;
756          NewSuccessors.push_back(BBDefault);
757        }
758        for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
759          if (!PTIHandled.count(BBCases[i].first) &&
760              BBCases[i].second != BBDefault) {
761            PredCases.push_back(BBCases[i]);
762            NewSuccessors.push_back(BBCases[i].second);
763          }
764
765      } else {
766        // If this is not the default destination from PSI, only the edges
767        // in SI that occur in PSI with a destination of BB will be
768        // activated.
769        std::set<ConstantInt*, ConstantIntOrdering> PTIHandled;
770        for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
771          if (PredCases[i].second == BB) {
772            PTIHandled.insert(PredCases[i].first);
773            std::swap(PredCases[i], PredCases.back());
774            PredCases.pop_back();
775            --i; --e;
776          }
777
778        // Okay, now we know which constants were sent to BB from the
779        // predecessor.  Figure out where they will all go now.
780        for (unsigned i = 0, e = BBCases.size(); i != e; ++i)
781          if (PTIHandled.count(BBCases[i].first)) {
782            // If this is one we are capable of getting...
783            PredCases.push_back(BBCases[i]);
784            NewSuccessors.push_back(BBCases[i].second);
785            PTIHandled.erase(BBCases[i].first);// This constant is taken care of
786          }
787
788        // If there are any constants vectored to BB that TI doesn't handle,
789        // they must go to the default destination of TI.
790        for (std::set<ConstantInt*, ConstantIntOrdering>::iterator I =
791                                    PTIHandled.begin(),
792               E = PTIHandled.end(); I != E; ++I) {
793          PredCases.push_back(std::make_pair(*I, BBDefault));
794          NewSuccessors.push_back(BBDefault);
795        }
796      }
797
798      // Okay, at this point, we know which new successor Pred will get.  Make
799      // sure we update the number of entries in the PHI nodes for these
800      // successors.
801      for (unsigned i = 0, e = NewSuccessors.size(); i != e; ++i)
802        AddPredecessorToBlock(NewSuccessors[i], Pred, BB);
803
804      // Now that the successors are updated, create the new Switch instruction.
805      SwitchInst *NewSI = SwitchInst::Create(CV, PredDefault,
806                                             PredCases.size(), PTI);
807      for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
808        NewSI->addCase(PredCases[i].first, PredCases[i].second);
809
810      EraseTerminatorInstAndDCECond(PTI);
811
812      // Okay, last check.  If BB is still a successor of PSI, then we must
813      // have an infinite loop case.  If so, add an infinitely looping block
814      // to handle the case to preserve the behavior of the code.
815      BasicBlock *InfLoopBlock = 0;
816      for (unsigned i = 0, e = NewSI->getNumSuccessors(); i != e; ++i)
817        if (NewSI->getSuccessor(i) == BB) {
818          if (InfLoopBlock == 0) {
819            // Insert it at the end of the function, because it's either code,
820            // or it won't matter if it's hot. :)
821            InfLoopBlock = BasicBlock::Create(BB->getContext(),
822                                              "infloop", BB->getParent());
823            BranchInst::Create(InfLoopBlock, InfLoopBlock);
824          }
825          NewSI->setSuccessor(i, InfLoopBlock);
826        }
827
828      Changed = true;
829    }
830  }
831  return Changed;
832}
833
834// isSafeToHoistInvoke - If we would need to insert a select that uses the
835// value of this invoke (comments in HoistThenElseCodeToIf explain why we
836// would need to do this), we can't hoist the invoke, as there is nowhere
837// to put the select in this case.
838static bool isSafeToHoistInvoke(BasicBlock *BB1, BasicBlock *BB2,
839                                Instruction *I1, Instruction *I2) {
840  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) {
841    PHINode *PN;
842    for (BasicBlock::iterator BBI = SI->begin();
843         (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
844      Value *BB1V = PN->getIncomingValueForBlock(BB1);
845      Value *BB2V = PN->getIncomingValueForBlock(BB2);
846      if (BB1V != BB2V && (BB1V==I1 || BB2V==I2)) {
847        return false;
848      }
849    }
850  }
851  return true;
852}
853
854/// HoistThenElseCodeToIf - Given a conditional branch that goes to BB1 and
855/// BB2, hoist any common code in the two blocks up into the branch block.  The
856/// caller of this function guarantees that BI's block dominates BB1 and BB2.
857static bool HoistThenElseCodeToIf(BranchInst *BI) {
858  // This does very trivial matching, with limited scanning, to find identical
859  // instructions in the two blocks.  In particular, we don't want to get into
860  // O(M*N) situations here where M and N are the sizes of BB1 and BB2.  As
861  // such, we currently just scan for obviously identical instructions in an
862  // identical order.
863  BasicBlock *BB1 = BI->getSuccessor(0);  // The true destination.
864  BasicBlock *BB2 = BI->getSuccessor(1);  // The false destination
865
866  BasicBlock::iterator BB1_Itr = BB1->begin();
867  BasicBlock::iterator BB2_Itr = BB2->begin();
868
869  Instruction *I1 = BB1_Itr++, *I2 = BB2_Itr++;
870  while (isa<DbgInfoIntrinsic>(I1))
871    I1 = BB1_Itr++;
872  while (isa<DbgInfoIntrinsic>(I2))
873    I2 = BB2_Itr++;
874  if (I1->getOpcode() != I2->getOpcode() || isa<PHINode>(I1) ||
875      !I1->isIdenticalToWhenDefined(I2) ||
876      (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2)))
877    return false;
878
879  // If we get here, we can hoist at least one instruction.
880  BasicBlock *BIParent = BI->getParent();
881
882  do {
883    // If we are hoisting the terminator instruction, don't move one (making a
884    // broken BB), instead clone it, and remove BI.
885    if (isa<TerminatorInst>(I1))
886      goto HoistTerminator;
887
888    // For a normal instruction, we just move one to right before the branch,
889    // then replace all uses of the other with the first.  Finally, we remove
890    // the now redundant second instruction.
891    BIParent->getInstList().splice(BI, BB1->getInstList(), I1);
892    if (!I2->use_empty())
893      I2->replaceAllUsesWith(I1);
894    I1->intersectOptionalDataWith(I2);
895    BB2->getInstList().erase(I2);
896
897    I1 = BB1_Itr++;
898    while (isa<DbgInfoIntrinsic>(I1))
899      I1 = BB1_Itr++;
900    I2 = BB2_Itr++;
901    while (isa<DbgInfoIntrinsic>(I2))
902      I2 = BB2_Itr++;
903  } while (I1->getOpcode() == I2->getOpcode() &&
904           I1->isIdenticalToWhenDefined(I2));
905
906  return true;
907
908HoistTerminator:
909  // It may not be possible to hoist an invoke.
910  if (isa<InvokeInst>(I1) && !isSafeToHoistInvoke(BB1, BB2, I1, I2))
911    return true;
912
913  // Okay, it is safe to hoist the terminator.
914  Instruction *NT = I1->clone(BB1->getContext());
915  BIParent->getInstList().insert(BI, NT);
916  if (NT->getType() != Type::getVoidTy(BB1->getContext())) {
917    I1->replaceAllUsesWith(NT);
918    I2->replaceAllUsesWith(NT);
919    NT->takeName(I1);
920  }
921
922  // Hoisting one of the terminators from our successor is a great thing.
923  // Unfortunately, the successors of the if/else blocks may have PHI nodes in
924  // them.  If they do, all PHI entries for BB1/BB2 must agree for all PHI
925  // nodes, so we insert select instruction to compute the final result.
926  std::map<std::pair<Value*,Value*>, SelectInst*> InsertedSelects;
927  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI) {
928    PHINode *PN;
929    for (BasicBlock::iterator BBI = SI->begin();
930         (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
931      Value *BB1V = PN->getIncomingValueForBlock(BB1);
932      Value *BB2V = PN->getIncomingValueForBlock(BB2);
933      if (BB1V != BB2V) {
934        // These values do not agree.  Insert a select instruction before NT
935        // that determines the right value.
936        SelectInst *&SI = InsertedSelects[std::make_pair(BB1V, BB2V)];
937        if (SI == 0)
938          SI = SelectInst::Create(BI->getCondition(), BB1V, BB2V,
939                                  BB1V->getName()+"."+BB2V->getName(), NT);
940        // Make the PHI node use the select for all incoming values for BB1/BB2
941        for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
942          if (PN->getIncomingBlock(i) == BB1 || PN->getIncomingBlock(i) == BB2)
943            PN->setIncomingValue(i, SI);
944      }
945    }
946  }
947
948  // Update any PHI nodes in our new successors.
949  for (succ_iterator SI = succ_begin(BB1), E = succ_end(BB1); SI != E; ++SI)
950    AddPredecessorToBlock(*SI, BIParent, BB1);
951
952  EraseTerminatorInstAndDCECond(BI);
953  return true;
954}
955
956/// SpeculativelyExecuteBB - Given a conditional branch that goes to BB1
957/// and an BB2 and the only successor of BB1 is BB2, hoist simple code
958/// (for now, restricted to a single instruction that's side effect free) from
959/// the BB1 into the branch block to speculatively execute it.
960static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) {
961  // Only speculatively execution a single instruction (not counting the
962  // terminator) for now.
963  Instruction *HInst = NULL;
964  Instruction *Term = BB1->getTerminator();
965  for (BasicBlock::iterator BBI = BB1->begin(), BBE = BB1->end();
966       BBI != BBE; ++BBI) {
967    Instruction *I = BBI;
968    // Skip debug info.
969    if (isa<DbgInfoIntrinsic>(I))   continue;
970    if (I == Term)  break;
971
972    if (!HInst)
973      HInst = I;
974    else
975      return false;
976  }
977  if (!HInst)
978    return false;
979
980  // Be conservative for now. FP select instruction can often be expensive.
981  Value *BrCond = BI->getCondition();
982  if (isa<Instruction>(BrCond) &&
983      cast<Instruction>(BrCond)->getOpcode() == Instruction::FCmp)
984    return false;
985
986  // If BB1 is actually on the false edge of the conditional branch, remember
987  // to swap the select operands later.
988  bool Invert = false;
989  if (BB1 != BI->getSuccessor(0)) {
990    assert(BB1 == BI->getSuccessor(1) && "No edge from 'if' block?");
991    Invert = true;
992  }
993
994  // Turn
995  // BB:
996  //     %t1 = icmp
997  //     br i1 %t1, label %BB1, label %BB2
998  // BB1:
999  //     %t3 = add %t2, c
1000  //     br label BB2
1001  // BB2:
1002  // =>
1003  // BB:
1004  //     %t1 = icmp
1005  //     %t4 = add %t2, c
1006  //     %t3 = select i1 %t1, %t2, %t3
1007  switch (HInst->getOpcode()) {
1008  default: return false;  // Not safe / profitable to hoist.
1009  case Instruction::Add:
1010  case Instruction::Sub:
1011    // Not worth doing for vector ops.
1012    if (isa<VectorType>(HInst->getType()))
1013      return false;
1014    break;
1015  case Instruction::And:
1016  case Instruction::Or:
1017  case Instruction::Xor:
1018  case Instruction::Shl:
1019  case Instruction::LShr:
1020  case Instruction::AShr:
1021    // Don't mess with vector operations.
1022    if (isa<VectorType>(HInst->getType()))
1023      return false;
1024    break;   // These are all cheap and non-trapping instructions.
1025  }
1026
1027  // If the instruction is obviously dead, don't try to predicate it.
1028  if (HInst->use_empty()) {
1029    HInst->eraseFromParent();
1030    return true;
1031  }
1032
1033  // Can we speculatively execute the instruction? And what is the value
1034  // if the condition is false? Consider the phi uses, if the incoming value
1035  // from the "if" block are all the same V, then V is the value of the
1036  // select if the condition is false.
1037  BasicBlock *BIParent = BI->getParent();
1038  SmallVector<PHINode*, 4> PHIUses;
1039  Value *FalseV = NULL;
1040
1041  BasicBlock *BB2 = BB1->getTerminator()->getSuccessor(0);
1042  for (Value::use_iterator UI = HInst->use_begin(), E = HInst->use_end();
1043       UI != E; ++UI) {
1044    // Ignore any user that is not a PHI node in BB2.  These can only occur in
1045    // unreachable blocks, because they would not be dominated by the instr.
1046    PHINode *PN = dyn_cast<PHINode>(UI);
1047    if (!PN || PN->getParent() != BB2)
1048      return false;
1049    PHIUses.push_back(PN);
1050
1051    Value *PHIV = PN->getIncomingValueForBlock(BIParent);
1052    if (!FalseV)
1053      FalseV = PHIV;
1054    else if (FalseV != PHIV)
1055      return false;  // Inconsistent value when condition is false.
1056  }
1057
1058  assert(FalseV && "Must have at least one user, and it must be a PHI");
1059
1060  // Do not hoist the instruction if any of its operands are defined but not
1061  // used in this BB. The transformation will prevent the operand from
1062  // being sunk into the use block.
1063  for (User::op_iterator i = HInst->op_begin(), e = HInst->op_end();
1064       i != e; ++i) {
1065    Instruction *OpI = dyn_cast<Instruction>(*i);
1066    if (OpI && OpI->getParent() == BIParent &&
1067        !OpI->isUsedInBasicBlock(BIParent))
1068      return false;
1069  }
1070
1071  // If we get here, we can hoist the instruction. Try to place it
1072  // before the icmp instruction preceding the conditional branch.
1073  BasicBlock::iterator InsertPos = BI;
1074  if (InsertPos != BIParent->begin())
1075    --InsertPos;
1076  // Skip debug info between condition and branch.
1077  while (InsertPos != BIParent->begin() && isa<DbgInfoIntrinsic>(InsertPos))
1078    --InsertPos;
1079  if (InsertPos == BrCond && !isa<PHINode>(BrCond)) {
1080    SmallPtrSet<Instruction *, 4> BB1Insns;
1081    for(BasicBlock::iterator BB1I = BB1->begin(), BB1E = BB1->end();
1082        BB1I != BB1E; ++BB1I)
1083      BB1Insns.insert(BB1I);
1084    for(Value::use_iterator UI = BrCond->use_begin(), UE = BrCond->use_end();
1085        UI != UE; ++UI) {
1086      Instruction *Use = cast<Instruction>(*UI);
1087      if (BB1Insns.count(Use)) {
1088        // If BrCond uses the instruction that place it just before
1089        // branch instruction.
1090        InsertPos = BI;
1091        break;
1092      }
1093    }
1094  } else
1095    InsertPos = BI;
1096  BIParent->getInstList().splice(InsertPos, BB1->getInstList(), HInst);
1097
1098  // Create a select whose true value is the speculatively executed value and
1099  // false value is the previously determined FalseV.
1100  SelectInst *SI;
1101  if (Invert)
1102    SI = SelectInst::Create(BrCond, FalseV, HInst,
1103                            FalseV->getName() + "." + HInst->getName(), BI);
1104  else
1105    SI = SelectInst::Create(BrCond, HInst, FalseV,
1106                            HInst->getName() + "." + FalseV->getName(), BI);
1107
1108  // Make the PHI node use the select for all incoming values for "then" and
1109  // "if" blocks.
1110  for (unsigned i = 0, e = PHIUses.size(); i != e; ++i) {
1111    PHINode *PN = PHIUses[i];
1112    for (unsigned j = 0, ee = PN->getNumIncomingValues(); j != ee; ++j)
1113      if (PN->getIncomingBlock(j) == BB1 ||
1114          PN->getIncomingBlock(j) == BIParent)
1115        PN->setIncomingValue(j, SI);
1116  }
1117
1118  ++NumSpeculations;
1119  return true;
1120}
1121
1122/// BlockIsSimpleEnoughToThreadThrough - Return true if we can thread a branch
1123/// across this block.
1124static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB) {
1125  BranchInst *BI = cast<BranchInst>(BB->getTerminator());
1126  unsigned Size = 0;
1127
1128  for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
1129    if (isa<DbgInfoIntrinsic>(BBI))
1130      continue;
1131    if (Size > 10) return false;  // Don't clone large BB's.
1132    ++Size;
1133
1134    // We can only support instructions that do not define values that are
1135    // live outside of the current basic block.
1136    for (Value::use_iterator UI = BBI->use_begin(), E = BBI->use_end();
1137         UI != E; ++UI) {
1138      Instruction *U = cast<Instruction>(*UI);
1139      if (U->getParent() != BB || isa<PHINode>(U)) return false;
1140    }
1141
1142    // Looks ok, continue checking.
1143  }
1144
1145  return true;
1146}
1147
1148/// FoldCondBranchOnPHI - If we have a conditional branch on a PHI node value
1149/// that is defined in the same block as the branch and if any PHI entries are
1150/// constants, thread edges corresponding to that entry to be branches to their
1151/// ultimate destination.
1152static bool FoldCondBranchOnPHI(BranchInst *BI) {
1153  BasicBlock *BB = BI->getParent();
1154  LLVMContext &Context = BB->getContext();
1155  PHINode *PN = dyn_cast<PHINode>(BI->getCondition());
1156  // NOTE: we currently cannot transform this case if the PHI node is used
1157  // outside of the block.
1158  if (!PN || PN->getParent() != BB || !PN->hasOneUse())
1159    return false;
1160
1161  // Degenerate case of a single entry PHI.
1162  if (PN->getNumIncomingValues() == 1) {
1163    FoldSingleEntryPHINodes(PN->getParent());
1164    return true;
1165  }
1166
1167  // Now we know that this block has multiple preds and two succs.
1168  if (!BlockIsSimpleEnoughToThreadThrough(BB)) return false;
1169
1170  // Okay, this is a simple enough basic block.  See if any phi values are
1171  // constants.
1172  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
1173    ConstantInt *CB;
1174    if ((CB = dyn_cast<ConstantInt>(PN->getIncomingValue(i))) &&
1175        CB->getType() == Type::getInt1Ty(BB->getContext())) {
1176      // Okay, we now know that all edges from PredBB should be revectored to
1177      // branch to RealDest.
1178      BasicBlock *PredBB = PN->getIncomingBlock(i);
1179      BasicBlock *RealDest = BI->getSuccessor(!CB->getZExtValue());
1180
1181      if (RealDest == BB) continue;  // Skip self loops.
1182
1183      // The dest block might have PHI nodes, other predecessors and other
1184      // difficult cases.  Instead of being smart about this, just insert a new
1185      // block that jumps to the destination block, effectively splitting
1186      // the edge we are about to create.
1187      BasicBlock *EdgeBB = BasicBlock::Create(BB->getContext(),
1188                                              RealDest->getName()+".critedge",
1189                                              RealDest->getParent(), RealDest);
1190      BranchInst::Create(RealDest, EdgeBB);
1191      PHINode *PN;
1192      for (BasicBlock::iterator BBI = RealDest->begin();
1193           (PN = dyn_cast<PHINode>(BBI)); ++BBI) {
1194        Value *V = PN->getIncomingValueForBlock(BB);
1195        PN->addIncoming(V, EdgeBB);
1196      }
1197
1198      // BB may have instructions that are being threaded over.  Clone these
1199      // instructions into EdgeBB.  We know that there will be no uses of the
1200      // cloned instructions outside of EdgeBB.
1201      BasicBlock::iterator InsertPt = EdgeBB->begin();
1202      std::map<Value*, Value*> TranslateMap;  // Track translated values.
1203      for (BasicBlock::iterator BBI = BB->begin(); &*BBI != BI; ++BBI) {
1204        if (PHINode *PN = dyn_cast<PHINode>(BBI)) {
1205          TranslateMap[PN] = PN->getIncomingValueForBlock(PredBB);
1206        } else {
1207          // Clone the instruction.
1208          Instruction *N = BBI->clone(Context);
1209          if (BBI->hasName()) N->setName(BBI->getName()+".c");
1210
1211          // Update operands due to translation.
1212          for (User::op_iterator i = N->op_begin(), e = N->op_end();
1213               i != e; ++i) {
1214            std::map<Value*, Value*>::iterator PI =
1215              TranslateMap.find(*i);
1216            if (PI != TranslateMap.end())
1217              *i = PI->second;
1218          }
1219
1220          // Check for trivial simplification.
1221          if (Constant *C = ConstantFoldInstruction(N, Context)) {
1222            TranslateMap[BBI] = C;
1223            delete N;   // Constant folded away, don't need actual inst
1224          } else {
1225            // Insert the new instruction into its new home.
1226            EdgeBB->getInstList().insert(InsertPt, N);
1227            if (!BBI->use_empty())
1228              TranslateMap[BBI] = N;
1229          }
1230        }
1231      }
1232
1233      // Loop over all of the edges from PredBB to BB, changing them to branch
1234      // to EdgeBB instead.
1235      TerminatorInst *PredBBTI = PredBB->getTerminator();
1236      for (unsigned i = 0, e = PredBBTI->getNumSuccessors(); i != e; ++i)
1237        if (PredBBTI->getSuccessor(i) == BB) {
1238          BB->removePredecessor(PredBB);
1239          PredBBTI->setSuccessor(i, EdgeBB);
1240        }
1241
1242      // Recurse, simplifying any other constants.
1243      return FoldCondBranchOnPHI(BI) | true;
1244    }
1245  }
1246
1247  return false;
1248}
1249
1250/// FoldTwoEntryPHINode - Given a BB that starts with the specified two-entry
1251/// PHI node, see if we can eliminate it.
1252static bool FoldTwoEntryPHINode(PHINode *PN) {
1253  // Ok, this is a two entry PHI node.  Check to see if this is a simple "if
1254  // statement", which has a very simple dominance structure.  Basically, we
1255  // are trying to find the condition that is being branched on, which
1256  // subsequently causes this merge to happen.  We really want control
1257  // dependence information for this check, but simplifycfg can't keep it up
1258  // to date, and this catches most of the cases we care about anyway.
1259  //
1260  BasicBlock *BB = PN->getParent();
1261  BasicBlock *IfTrue, *IfFalse;
1262  Value *IfCond = GetIfCondition(BB, IfTrue, IfFalse);
1263  if (!IfCond) return false;
1264
1265  // Okay, we found that we can merge this two-entry phi node into a select.
1266  // Doing so would require us to fold *all* two entry phi nodes in this block.
1267  // At some point this becomes non-profitable (particularly if the target
1268  // doesn't support cmov's).  Only do this transformation if there are two or
1269  // fewer PHI nodes in this block.
1270  unsigned NumPhis = 0;
1271  for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++NumPhis, ++I)
1272    if (NumPhis > 2)
1273      return false;
1274
1275  DEBUG(errs() << "FOUND IF CONDITION!  " << *IfCond << "  T: "
1276        << IfTrue->getName() << "  F: " << IfFalse->getName() << "\n");
1277
1278  // Loop over the PHI's seeing if we can promote them all to select
1279  // instructions.  While we are at it, keep track of the instructions
1280  // that need to be moved to the dominating block.
1281  std::set<Instruction*> AggressiveInsts;
1282
1283  BasicBlock::iterator AfterPHIIt = BB->begin();
1284  while (isa<PHINode>(AfterPHIIt)) {
1285    PHINode *PN = cast<PHINode>(AfterPHIIt++);
1286    if (PN->getIncomingValue(0) == PN->getIncomingValue(1)) {
1287      if (PN->getIncomingValue(0) != PN)
1288        PN->replaceAllUsesWith(PN->getIncomingValue(0));
1289      else
1290        PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
1291    } else if (!DominatesMergePoint(PN->getIncomingValue(0), BB,
1292                                    &AggressiveInsts) ||
1293               !DominatesMergePoint(PN->getIncomingValue(1), BB,
1294                                    &AggressiveInsts)) {
1295      return false;
1296    }
1297  }
1298
1299  // If we all PHI nodes are promotable, check to make sure that all
1300  // instructions in the predecessor blocks can be promoted as well.  If
1301  // not, we won't be able to get rid of the control flow, so it's not
1302  // worth promoting to select instructions.
1303  BasicBlock *DomBlock = 0, *IfBlock1 = 0, *IfBlock2 = 0;
1304  PN = cast<PHINode>(BB->begin());
1305  BasicBlock *Pred = PN->getIncomingBlock(0);
1306  if (cast<BranchInst>(Pred->getTerminator())->isUnconditional()) {
1307    IfBlock1 = Pred;
1308    DomBlock = *pred_begin(Pred);
1309    for (BasicBlock::iterator I = Pred->begin();
1310         !isa<TerminatorInst>(I); ++I)
1311      if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) {
1312        // This is not an aggressive instruction that we can promote.
1313        // Because of this, we won't be able to get rid of the control
1314        // flow, so the xform is not worth it.
1315        return false;
1316      }
1317  }
1318
1319  Pred = PN->getIncomingBlock(1);
1320  if (cast<BranchInst>(Pred->getTerminator())->isUnconditional()) {
1321    IfBlock2 = Pred;
1322    DomBlock = *pred_begin(Pred);
1323    for (BasicBlock::iterator I = Pred->begin();
1324         !isa<TerminatorInst>(I); ++I)
1325      if (!AggressiveInsts.count(I) && !isa<DbgInfoIntrinsic>(I)) {
1326        // This is not an aggressive instruction that we can promote.
1327        // Because of this, we won't be able to get rid of the control
1328        // flow, so the xform is not worth it.
1329        return false;
1330      }
1331  }
1332
1333  // If we can still promote the PHI nodes after this gauntlet of tests,
1334  // do all of the PHI's now.
1335
1336  // Move all 'aggressive' instructions, which are defined in the
1337  // conditional parts of the if's up to the dominating block.
1338  if (IfBlock1) {
1339    DomBlock->getInstList().splice(DomBlock->getTerminator(),
1340                                   IfBlock1->getInstList(),
1341                                   IfBlock1->begin(),
1342                                   IfBlock1->getTerminator());
1343  }
1344  if (IfBlock2) {
1345    DomBlock->getInstList().splice(DomBlock->getTerminator(),
1346                                   IfBlock2->getInstList(),
1347                                   IfBlock2->begin(),
1348                                   IfBlock2->getTerminator());
1349  }
1350
1351  while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) {
1352    // Change the PHI node into a select instruction.
1353    Value *TrueVal =
1354      PN->getIncomingValue(PN->getIncomingBlock(0) == IfFalse);
1355    Value *FalseVal =
1356      PN->getIncomingValue(PN->getIncomingBlock(0) == IfTrue);
1357
1358    Value *NV = SelectInst::Create(IfCond, TrueVal, FalseVal, "", AfterPHIIt);
1359    PN->replaceAllUsesWith(NV);
1360    NV->takeName(PN);
1361
1362    BB->getInstList().erase(PN);
1363  }
1364  return true;
1365}
1366
1367/// isTerminatorFirstRelevantInsn - Return true if Term is very first
1368/// instruction ignoring Phi nodes and dbg intrinsics.
1369static bool isTerminatorFirstRelevantInsn(BasicBlock *BB, Instruction *Term) {
1370  BasicBlock::iterator BBI = Term;
1371  while (BBI != BB->begin()) {
1372    --BBI;
1373    if (!isa<DbgInfoIntrinsic>(BBI))
1374      break;
1375  }
1376
1377  if (isa<PHINode>(BBI) || &*BBI == Term || isa<DbgInfoIntrinsic>(BBI))
1378    return true;
1379  return false;
1380}
1381
1382/// SimplifyCondBranchToTwoReturns - If we found a conditional branch that goes
1383/// to two returning blocks, try to merge them together into one return,
1384/// introducing a select if the return values disagree.
1385static bool SimplifyCondBranchToTwoReturns(BranchInst *BI) {
1386  assert(BI->isConditional() && "Must be a conditional branch");
1387  BasicBlock *TrueSucc = BI->getSuccessor(0);
1388  BasicBlock *FalseSucc = BI->getSuccessor(1);
1389  ReturnInst *TrueRet = cast<ReturnInst>(TrueSucc->getTerminator());
1390  ReturnInst *FalseRet = cast<ReturnInst>(FalseSucc->getTerminator());
1391
1392  // Check to ensure both blocks are empty (just a return) or optionally empty
1393  // with PHI nodes.  If there are other instructions, merging would cause extra
1394  // computation on one path or the other.
1395  if (!isTerminatorFirstRelevantInsn(TrueSucc, TrueRet))
1396    return false;
1397  if (!isTerminatorFirstRelevantInsn(FalseSucc, FalseRet))
1398    return false;
1399
1400  // Okay, we found a branch that is going to two return nodes.  If
1401  // there is no return value for this function, just change the
1402  // branch into a return.
1403  if (FalseRet->getNumOperands() == 0) {
1404    TrueSucc->removePredecessor(BI->getParent());
1405    FalseSucc->removePredecessor(BI->getParent());
1406    ReturnInst::Create(BI->getContext(), 0, BI);
1407    EraseTerminatorInstAndDCECond(BI);
1408    return true;
1409  }
1410
1411  // Otherwise, figure out what the true and false return values are
1412  // so we can insert a new select instruction.
1413  Value *TrueValue = TrueRet->getReturnValue();
1414  Value *FalseValue = FalseRet->getReturnValue();
1415
1416  // Unwrap any PHI nodes in the return blocks.
1417  if (PHINode *TVPN = dyn_cast_or_null<PHINode>(TrueValue))
1418    if (TVPN->getParent() == TrueSucc)
1419      TrueValue = TVPN->getIncomingValueForBlock(BI->getParent());
1420  if (PHINode *FVPN = dyn_cast_or_null<PHINode>(FalseValue))
1421    if (FVPN->getParent() == FalseSucc)
1422      FalseValue = FVPN->getIncomingValueForBlock(BI->getParent());
1423
1424  // In order for this transformation to be safe, we must be able to
1425  // unconditionally execute both operands to the return.  This is
1426  // normally the case, but we could have a potentially-trapping
1427  // constant expression that prevents this transformation from being
1428  // safe.
1429  if (ConstantExpr *TCV = dyn_cast_or_null<ConstantExpr>(TrueValue))
1430    if (TCV->canTrap())
1431      return false;
1432  if (ConstantExpr *FCV = dyn_cast_or_null<ConstantExpr>(FalseValue))
1433    if (FCV->canTrap())
1434      return false;
1435
1436  // Okay, we collected all the mapped values and checked them for sanity, and
1437  // defined to really do this transformation.  First, update the CFG.
1438  TrueSucc->removePredecessor(BI->getParent());
1439  FalseSucc->removePredecessor(BI->getParent());
1440
1441  // Insert select instructions where needed.
1442  Value *BrCond = BI->getCondition();
1443  if (TrueValue) {
1444    // Insert a select if the results differ.
1445    if (TrueValue == FalseValue || isa<UndefValue>(FalseValue)) {
1446    } else if (isa<UndefValue>(TrueValue)) {
1447      TrueValue = FalseValue;
1448    } else {
1449      TrueValue = SelectInst::Create(BrCond, TrueValue,
1450                                     FalseValue, "retval", BI);
1451    }
1452  }
1453
1454  Value *RI = !TrueValue ?
1455              ReturnInst::Create(BI->getContext(), BI) :
1456              ReturnInst::Create(BI->getContext(), TrueValue, BI);
1457  (void) RI;
1458
1459  DEBUG(errs() << "\nCHANGING BRANCH TO TWO RETURNS INTO SELECT:"
1460               << "\n  " << *BI << "NewRet = " << *RI
1461               << "TRUEBLOCK: " << *TrueSucc << "FALSEBLOCK: "<< *FalseSucc);
1462
1463  EraseTerminatorInstAndDCECond(BI);
1464
1465  return true;
1466}
1467
1468/// FoldBranchToCommonDest - If this basic block is ONLY a setcc and a branch,
1469/// and if a predecessor branches to us and one of our successors, fold the
1470/// setcc into the predecessor and use logical operations to pick the right
1471/// destination.
1472bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
1473  BasicBlock *BB = BI->getParent();
1474  Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
1475  if (Cond == 0) return false;
1476
1477
1478  // Only allow this if the condition is a simple instruction that can be
1479  // executed unconditionally.  It must be in the same block as the branch, and
1480  // must be at the front of the block.
1481  BasicBlock::iterator FrontIt = BB->front();
1482  // Ignore dbg intrinsics.
1483  while(isa<DbgInfoIntrinsic>(FrontIt))
1484    ++FrontIt;
1485  if ((!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond)) ||
1486      Cond->getParent() != BB || &*FrontIt != Cond || !Cond->hasOneUse()) {
1487    return false;
1488  }
1489
1490  // Make sure the instruction after the condition is the cond branch.
1491  BasicBlock::iterator CondIt = Cond; ++CondIt;
1492  // Ingore dbg intrinsics.
1493  while(isa<DbgInfoIntrinsic>(CondIt))
1494    ++CondIt;
1495  if (&*CondIt != BI) {
1496    assert (!isa<DbgInfoIntrinsic>(CondIt) && "Hey do not forget debug info!");
1497    return false;
1498  }
1499
1500  // Cond is known to be a compare or binary operator.  Check to make sure that
1501  // neither operand is a potentially-trapping constant expression.
1502  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(0)))
1503    if (CE->canTrap())
1504      return false;
1505  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Cond->getOperand(1)))
1506    if (CE->canTrap())
1507      return false;
1508
1509
1510  // Finally, don't infinitely unroll conditional loops.
1511  BasicBlock *TrueDest  = BI->getSuccessor(0);
1512  BasicBlock *FalseDest = BI->getSuccessor(1);
1513  if (TrueDest == BB || FalseDest == BB)
1514    return false;
1515
1516  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
1517    BasicBlock *PredBlock = *PI;
1518    BranchInst *PBI = dyn_cast<BranchInst>(PredBlock->getTerminator());
1519
1520    // Check that we have two conditional branches.  If there is a PHI node in
1521    // the common successor, verify that the same value flows in from both
1522    // blocks.
1523    if (PBI == 0 || PBI->isUnconditional() ||
1524        !SafeToMergeTerminators(BI, PBI))
1525      continue;
1526
1527    Instruction::BinaryOps Opc;
1528    bool InvertPredCond = false;
1529
1530    if (PBI->getSuccessor(0) == TrueDest)
1531      Opc = Instruction::Or;
1532    else if (PBI->getSuccessor(1) == FalseDest)
1533      Opc = Instruction::And;
1534    else if (PBI->getSuccessor(0) == FalseDest)
1535      Opc = Instruction::And, InvertPredCond = true;
1536    else if (PBI->getSuccessor(1) == TrueDest)
1537      Opc = Instruction::Or, InvertPredCond = true;
1538    else
1539      continue;
1540
1541    DEBUG(errs() << "FOLDING BRANCH TO COMMON DEST:\n" << *PBI << *BB);
1542
1543    // If we need to invert the condition in the pred block to match, do so now.
1544    if (InvertPredCond) {
1545      Value *NewCond =
1546        BinaryOperator::CreateNot(PBI->getCondition(),
1547                                  PBI->getCondition()->getName()+".not", PBI);
1548      PBI->setCondition(NewCond);
1549      BasicBlock *OldTrue = PBI->getSuccessor(0);
1550      BasicBlock *OldFalse = PBI->getSuccessor(1);
1551      PBI->setSuccessor(0, OldFalse);
1552      PBI->setSuccessor(1, OldTrue);
1553    }
1554
1555    // Clone Cond into the predecessor basic block, and or/and the
1556    // two conditions together.
1557    Instruction *New = Cond->clone(BB->getContext());
1558    PredBlock->getInstList().insert(PBI, New);
1559    New->takeName(Cond);
1560    Cond->setName(New->getName()+".old");
1561
1562    Value *NewCond = BinaryOperator::Create(Opc, PBI->getCondition(),
1563                                            New, "or.cond", PBI);
1564    PBI->setCondition(NewCond);
1565    if (PBI->getSuccessor(0) == BB) {
1566      AddPredecessorToBlock(TrueDest, PredBlock, BB);
1567      PBI->setSuccessor(0, TrueDest);
1568    }
1569    if (PBI->getSuccessor(1) == BB) {
1570      AddPredecessorToBlock(FalseDest, PredBlock, BB);
1571      PBI->setSuccessor(1, FalseDest);
1572    }
1573    return true;
1574  }
1575  return false;
1576}
1577
1578/// SimplifyCondBranchToCondBranch - If we have a conditional branch as a
1579/// predecessor of another block, this function tries to simplify it.  We know
1580/// that PBI and BI are both conditional branches, and BI is in one of the
1581/// successor blocks of PBI - PBI branches to BI.
1582static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI) {
1583  assert(PBI->isConditional() && BI->isConditional());
1584  BasicBlock *BB = BI->getParent();
1585
1586  // If this block ends with a branch instruction, and if there is a
1587  // predecessor that ends on a branch of the same condition, make
1588  // this conditional branch redundant.
1589  if (PBI->getCondition() == BI->getCondition() &&
1590      PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
1591    // Okay, the outcome of this conditional branch is statically
1592    // knowable.  If this block had a single pred, handle specially.
1593    if (BB->getSinglePredecessor()) {
1594      // Turn this into a branch on constant.
1595      bool CondIsTrue = PBI->getSuccessor(0) == BB;
1596      BI->setCondition(ConstantInt::get(Type::getInt1Ty(BB->getContext()),
1597                                        CondIsTrue));
1598      return true;  // Nuke the branch on constant.
1599    }
1600
1601    // Otherwise, if there are multiple predecessors, insert a PHI that merges
1602    // in the constant and simplify the block result.  Subsequent passes of
1603    // simplifycfg will thread the block.
1604    if (BlockIsSimpleEnoughToThreadThrough(BB)) {
1605      PHINode *NewPN = PHINode::Create(Type::getInt1Ty(BB->getContext()),
1606                                       BI->getCondition()->getName() + ".pr",
1607                                       BB->begin());
1608      // Okay, we're going to insert the PHI node.  Since PBI is not the only
1609      // predecessor, compute the PHI'd conditional value for all of the preds.
1610      // Any predecessor where the condition is not computable we keep symbolic.
1611      for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
1612        if ((PBI = dyn_cast<BranchInst>((*PI)->getTerminator())) &&
1613            PBI != BI && PBI->isConditional() &&
1614            PBI->getCondition() == BI->getCondition() &&
1615            PBI->getSuccessor(0) != PBI->getSuccessor(1)) {
1616          bool CondIsTrue = PBI->getSuccessor(0) == BB;
1617          NewPN->addIncoming(ConstantInt::get(Type::getInt1Ty(BB->getContext()),
1618                                              CondIsTrue), *PI);
1619        } else {
1620          NewPN->addIncoming(BI->getCondition(), *PI);
1621        }
1622
1623      BI->setCondition(NewPN);
1624      return true;
1625    }
1626  }
1627
1628  // If this is a conditional branch in an empty block, and if any
1629  // predecessors is a conditional branch to one of our destinations,
1630  // fold the conditions into logical ops and one cond br.
1631  BasicBlock::iterator BBI = BB->begin();
1632  // Ignore dbg intrinsics.
1633  while (isa<DbgInfoIntrinsic>(BBI))
1634    ++BBI;
1635  if (&*BBI != BI)
1636    return false;
1637
1638
1639  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BI->getCondition()))
1640    if (CE->canTrap())
1641      return false;
1642
1643  int PBIOp, BIOp;
1644  if (PBI->getSuccessor(0) == BI->getSuccessor(0))
1645    PBIOp = BIOp = 0;
1646  else if (PBI->getSuccessor(0) == BI->getSuccessor(1))
1647    PBIOp = 0, BIOp = 1;
1648  else if (PBI->getSuccessor(1) == BI->getSuccessor(0))
1649    PBIOp = 1, BIOp = 0;
1650  else if (PBI->getSuccessor(1) == BI->getSuccessor(1))
1651    PBIOp = BIOp = 1;
1652  else
1653    return false;
1654
1655  // Check to make sure that the other destination of this branch
1656  // isn't BB itself.  If so, this is an infinite loop that will
1657  // keep getting unwound.
1658  if (PBI->getSuccessor(PBIOp) == BB)
1659    return false;
1660
1661  // Do not perform this transformation if it would require
1662  // insertion of a large number of select instructions. For targets
1663  // without predication/cmovs, this is a big pessimization.
1664  BasicBlock *CommonDest = PBI->getSuccessor(PBIOp);
1665
1666  unsigned NumPhis = 0;
1667  for (BasicBlock::iterator II = CommonDest->begin();
1668       isa<PHINode>(II); ++II, ++NumPhis)
1669    if (NumPhis > 2) // Disable this xform.
1670      return false;
1671
1672  // Finally, if everything is ok, fold the branches to logical ops.
1673  BasicBlock *OtherDest  = BI->getSuccessor(BIOp ^ 1);
1674
1675  DEBUG(errs() << "FOLDING BRs:" << *PBI->getParent()
1676               << "AND: " << *BI->getParent());
1677
1678
1679  // If OtherDest *is* BB, then BB is a basic block with a single conditional
1680  // branch in it, where one edge (OtherDest) goes back to itself but the other
1681  // exits.  We don't *know* that the program avoids the infinite loop
1682  // (even though that seems likely).  If we do this xform naively, we'll end up
1683  // recursively unpeeling the loop.  Since we know that (after the xform is
1684  // done) that the block *is* infinite if reached, we just make it an obviously
1685  // infinite loop with no cond branch.
1686  if (OtherDest == BB) {
1687    // Insert it at the end of the function, because it's either code,
1688    // or it won't matter if it's hot. :)
1689    BasicBlock *InfLoopBlock = BasicBlock::Create(BB->getContext(),
1690                                                  "infloop", BB->getParent());
1691    BranchInst::Create(InfLoopBlock, InfLoopBlock);
1692    OtherDest = InfLoopBlock;
1693  }
1694
1695  DEBUG(errs() << *PBI->getParent()->getParent());
1696
1697  // BI may have other predecessors.  Because of this, we leave
1698  // it alone, but modify PBI.
1699
1700  // Make sure we get to CommonDest on True&True directions.
1701  Value *PBICond = PBI->getCondition();
1702  if (PBIOp)
1703    PBICond = BinaryOperator::CreateNot(PBICond,
1704                                        PBICond->getName()+".not",
1705                                        PBI);
1706  Value *BICond = BI->getCondition();
1707  if (BIOp)
1708    BICond = BinaryOperator::CreateNot(BICond,
1709                                       BICond->getName()+".not",
1710                                       PBI);
1711  // Merge the conditions.
1712  Value *Cond = BinaryOperator::CreateOr(PBICond, BICond, "brmerge", PBI);
1713
1714  // Modify PBI to branch on the new condition to the new dests.
1715  PBI->setCondition(Cond);
1716  PBI->setSuccessor(0, CommonDest);
1717  PBI->setSuccessor(1, OtherDest);
1718
1719  // OtherDest may have phi nodes.  If so, add an entry from PBI's
1720  // block that are identical to the entries for BI's block.
1721  PHINode *PN;
1722  for (BasicBlock::iterator II = OtherDest->begin();
1723       (PN = dyn_cast<PHINode>(II)); ++II) {
1724    Value *V = PN->getIncomingValueForBlock(BB);
1725    PN->addIncoming(V, PBI->getParent());
1726  }
1727
1728  // We know that the CommonDest already had an edge from PBI to
1729  // it.  If it has PHIs though, the PHIs may have different
1730  // entries for BB and PBI's BB.  If so, insert a select to make
1731  // them agree.
1732  for (BasicBlock::iterator II = CommonDest->begin();
1733       (PN = dyn_cast<PHINode>(II)); ++II) {
1734    Value *BIV = PN->getIncomingValueForBlock(BB);
1735    unsigned PBBIdx = PN->getBasicBlockIndex(PBI->getParent());
1736    Value *PBIV = PN->getIncomingValue(PBBIdx);
1737    if (BIV != PBIV) {
1738      // Insert a select in PBI to pick the right value.
1739      Value *NV = SelectInst::Create(PBICond, PBIV, BIV,
1740                                     PBIV->getName()+".mux", PBI);
1741      PN->setIncomingValue(PBBIdx, NV);
1742    }
1743  }
1744
1745  DEBUG(errs() << "INTO: " << *PBI->getParent());
1746  DEBUG(errs() << *PBI->getParent()->getParent());
1747
1748  // This basic block is probably dead.  We know it has at least
1749  // one fewer predecessor.
1750  return true;
1751}
1752
1753
1754/// SimplifyCFG - This function is used to do simplification of a CFG.  For
1755/// example, it adjusts branches to branches to eliminate the extra hop, it
1756/// eliminates unreachable basic blocks, and does other "peephole" optimization
1757/// of the CFG.  It returns true if a modification was made.
1758///
1759/// WARNING:  The entry node of a function may not be simplified.
1760///
1761bool llvm::SimplifyCFG(BasicBlock *BB) {
1762  bool Changed = false;
1763  Function *M = BB->getParent();
1764
1765  assert(BB && BB->getParent() && "Block not embedded in function!");
1766  assert(BB->getTerminator() && "Degenerate basic block encountered!");
1767  assert(&BB->getParent()->getEntryBlock() != BB &&
1768         "Can't Simplify entry block!");
1769
1770  // Remove basic blocks that have no predecessors... or that just have themself
1771  // as a predecessor.  These are unreachable.
1772  if (pred_begin(BB) == pred_end(BB) || BB->getSinglePredecessor() == BB) {
1773    DEBUG(errs() << "Removing BB: \n" << *BB);
1774    DeleteDeadBlock(BB);
1775    return true;
1776  }
1777
1778  // Check to see if we can constant propagate this terminator instruction
1779  // away...
1780  Changed |= ConstantFoldTerminator(BB);
1781
1782  // If there is a trivial two-entry PHI node in this basic block, and we can
1783  // eliminate it, do so now.
1784  if (PHINode *PN = dyn_cast<PHINode>(BB->begin()))
1785    if (PN->getNumIncomingValues() == 2)
1786      Changed |= FoldTwoEntryPHINode(PN);
1787
1788  // If this is a returning block with only PHI nodes in it, fold the return
1789  // instruction into any unconditional branch predecessors.
1790  //
1791  // If any predecessor is a conditional branch that just selects among
1792  // different return values, fold the replace the branch/return with a select
1793  // and return.
1794  if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) {
1795    if (isTerminatorFirstRelevantInsn(BB, BB->getTerminator())) {
1796      // Find predecessors that end with branches.
1797      SmallVector<BasicBlock*, 8> UncondBranchPreds;
1798      SmallVector<BranchInst*, 8> CondBranchPreds;
1799      for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
1800        TerminatorInst *PTI = (*PI)->getTerminator();
1801        if (BranchInst *BI = dyn_cast<BranchInst>(PTI)) {
1802          if (BI->isUnconditional())
1803            UncondBranchPreds.push_back(*PI);
1804          else
1805            CondBranchPreds.push_back(BI);
1806        }
1807      }
1808
1809      // If we found some, do the transformation!
1810      if (!UncondBranchPreds.empty()) {
1811        while (!UncondBranchPreds.empty()) {
1812          BasicBlock *Pred = UncondBranchPreds.pop_back_val();
1813          DEBUG(errs() << "FOLDING: " << *BB
1814                       << "INTO UNCOND BRANCH PRED: " << *Pred);
1815          Instruction *UncondBranch = Pred->getTerminator();
1816          // Clone the return and add it to the end of the predecessor.
1817          Instruction *NewRet = RI->clone(BB->getContext());
1818          Pred->getInstList().push_back(NewRet);
1819
1820          BasicBlock::iterator BBI = RI;
1821          if (BBI != BB->begin()) {
1822            // Move region end info into the predecessor.
1823            if (DbgRegionEndInst *DREI = dyn_cast<DbgRegionEndInst>(--BBI))
1824              DREI->moveBefore(NewRet);
1825          }
1826
1827          // If the return instruction returns a value, and if the value was a
1828          // PHI node in "BB", propagate the right value into the return.
1829          for (User::op_iterator i = NewRet->op_begin(), e = NewRet->op_end();
1830               i != e; ++i)
1831            if (PHINode *PN = dyn_cast<PHINode>(*i))
1832              if (PN->getParent() == BB)
1833                *i = PN->getIncomingValueForBlock(Pred);
1834
1835          // Update any PHI nodes in the returning block to realize that we no
1836          // longer branch to them.
1837          BB->removePredecessor(Pred);
1838          Pred->getInstList().erase(UncondBranch);
1839        }
1840
1841        // If we eliminated all predecessors of the block, delete the block now.
1842        if (pred_begin(BB) == pred_end(BB))
1843          // We know there are no successors, so just nuke the block.
1844          M->getBasicBlockList().erase(BB);
1845
1846        return true;
1847      }
1848
1849      // Check out all of the conditional branches going to this return
1850      // instruction.  If any of them just select between returns, change the
1851      // branch itself into a select/return pair.
1852      while (!CondBranchPreds.empty()) {
1853        BranchInst *BI = CondBranchPreds.pop_back_val();
1854
1855        // Check to see if the non-BB successor is also a return block.
1856        if (isa<ReturnInst>(BI->getSuccessor(0)->getTerminator()) &&
1857            isa<ReturnInst>(BI->getSuccessor(1)->getTerminator()) &&
1858            SimplifyCondBranchToTwoReturns(BI))
1859          return true;
1860      }
1861    }
1862  } else if (isa<UnwindInst>(BB->begin())) {
1863    // Check to see if the first instruction in this block is just an unwind.
1864    // If so, replace any invoke instructions which use this as an exception
1865    // destination with call instructions, and any unconditional branch
1866    // predecessor with an unwind.
1867    //
1868    SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB));
1869    while (!Preds.empty()) {
1870      BasicBlock *Pred = Preds.back();
1871      if (BranchInst *BI = dyn_cast<BranchInst>(Pred->getTerminator())) {
1872        if (BI->isUnconditional()) {
1873          Pred->getInstList().pop_back();  // nuke uncond branch
1874          new UnwindInst(Pred->getContext(), Pred);            // Use unwind.
1875          Changed = true;
1876        }
1877      } else if (InvokeInst *II = dyn_cast<InvokeInst>(Pred->getTerminator()))
1878        if (II->getUnwindDest() == BB) {
1879          // Insert a new branch instruction before the invoke, because this
1880          // is now a fall through...
1881          BranchInst *BI = BranchInst::Create(II->getNormalDest(), II);
1882          Pred->getInstList().remove(II);   // Take out of symbol table
1883
1884          // Insert the call now...
1885          SmallVector<Value*,8> Args(II->op_begin()+3, II->op_end());
1886          CallInst *CI = CallInst::Create(II->getCalledValue(),
1887                                          Args.begin(), Args.end(),
1888                                          II->getName(), BI);
1889          CI->setCallingConv(II->getCallingConv());
1890          CI->setAttributes(II->getAttributes());
1891          // If the invoke produced a value, the Call now does instead
1892          II->replaceAllUsesWith(CI);
1893          delete II;
1894          Changed = true;
1895        }
1896
1897      Preds.pop_back();
1898    }
1899
1900    // If this block is now dead, remove it.
1901    if (pred_begin(BB) == pred_end(BB)) {
1902      // We know there are no successors, so just nuke the block.
1903      M->getBasicBlockList().erase(BB);
1904      return true;
1905    }
1906
1907  } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator())) {
1908    if (isValueEqualityComparison(SI)) {
1909      // If we only have one predecessor, and if it is a branch on this value,
1910      // see if that predecessor totally determines the outcome of this switch.
1911      if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
1912        if (SimplifyEqualityComparisonWithOnlyPredecessor(SI, OnlyPred))
1913          return SimplifyCFG(BB) || 1;
1914
1915      // If the block only contains the switch, see if we can fold the block
1916      // away into any preds.
1917      BasicBlock::iterator BBI = BB->begin();
1918      // Ignore dbg intrinsics.
1919      while (isa<DbgInfoIntrinsic>(BBI))
1920        ++BBI;
1921      if (SI == &*BBI)
1922        if (FoldValueComparisonIntoPredecessors(SI))
1923          return SimplifyCFG(BB) || 1;
1924    }
1925  } else if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) {
1926    if (BI->isUnconditional()) {
1927      BasicBlock::iterator BBI = BB->getFirstNonPHI();
1928
1929      BasicBlock *Succ = BI->getSuccessor(0);
1930      // Ignore dbg intrinsics.
1931      while (isa<DbgInfoIntrinsic>(BBI))
1932        ++BBI;
1933      if (BBI->isTerminator() &&  // Terminator is the only non-phi instruction!
1934          Succ != BB)             // Don't hurt infinite loops!
1935        if (TryToSimplifyUncondBranchFromEmptyBlock(BB, Succ))
1936          return true;
1937
1938    } else {  // Conditional branch
1939      if (isValueEqualityComparison(BI)) {
1940        // If we only have one predecessor, and if it is a branch on this value,
1941        // see if that predecessor totally determines the outcome of this
1942        // switch.
1943        if (BasicBlock *OnlyPred = BB->getSinglePredecessor())
1944          if (SimplifyEqualityComparisonWithOnlyPredecessor(BI, OnlyPred))
1945            return SimplifyCFG(BB) || 1;
1946
1947        // This block must be empty, except for the setcond inst, if it exists.
1948        // Ignore dbg intrinsics.
1949        BasicBlock::iterator I = BB->begin();
1950        // Ignore dbg intrinsics.
1951        while (isa<DbgInfoIntrinsic>(I))
1952          ++I;
1953        if (&*I == BI) {
1954          if (FoldValueComparisonIntoPredecessors(BI))
1955            return SimplifyCFG(BB) | true;
1956        } else if (&*I == cast<Instruction>(BI->getCondition())){
1957          ++I;
1958          // Ignore dbg intrinsics.
1959          while (isa<DbgInfoIntrinsic>(I))
1960            ++I;
1961          if(&*I == BI) {
1962            if (FoldValueComparisonIntoPredecessors(BI))
1963              return SimplifyCFG(BB) | true;
1964          }
1965        }
1966      }
1967
1968      // If this is a branch on a phi node in the current block, thread control
1969      // through this block if any PHI node entries are constants.
1970      if (PHINode *PN = dyn_cast<PHINode>(BI->getCondition()))
1971        if (PN->getParent() == BI->getParent())
1972          if (FoldCondBranchOnPHI(BI))
1973            return SimplifyCFG(BB) | true;
1974
1975      // If this basic block is ONLY a setcc and a branch, and if a predecessor
1976      // branches to us and one of our successors, fold the setcc into the
1977      // predecessor and use logical operations to pick the right destination.
1978      if (FoldBranchToCommonDest(BI))
1979        return SimplifyCFG(BB) | 1;
1980
1981
1982      // Scan predecessor blocks for conditional branches.
1983      for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
1984        if (BranchInst *PBI = dyn_cast<BranchInst>((*PI)->getTerminator()))
1985          if (PBI != BI && PBI->isConditional())
1986            if (SimplifyCondBranchToCondBranch(PBI, BI))
1987              return SimplifyCFG(BB) | true;
1988    }
1989  } else if (isa<UnreachableInst>(BB->getTerminator())) {
1990    // If there are any instructions immediately before the unreachable that can
1991    // be removed, do so.
1992    Instruction *Unreachable = BB->getTerminator();
1993    while (Unreachable != BB->begin()) {
1994      BasicBlock::iterator BBI = Unreachable;
1995      --BBI;
1996      // Do not delete instructions that can have side effects, like calls
1997      // (which may never return) and volatile loads and stores.
1998      if (isa<CallInst>(BBI) && !isa<DbgInfoIntrinsic>(BBI)) break;
1999
2000      if (StoreInst *SI = dyn_cast<StoreInst>(BBI))
2001        if (SI->isVolatile())
2002          break;
2003
2004      if (LoadInst *LI = dyn_cast<LoadInst>(BBI))
2005        if (LI->isVolatile())
2006          break;
2007
2008      // Delete this instruction
2009      BB->getInstList().erase(BBI);
2010      Changed = true;
2011    }
2012
2013    // If the unreachable instruction is the first in the block, take a gander
2014    // at all of the predecessors of this instruction, and simplify them.
2015    if (&BB->front() == Unreachable) {
2016      SmallVector<BasicBlock*, 8> Preds(pred_begin(BB), pred_end(BB));
2017      for (unsigned i = 0, e = Preds.size(); i != e; ++i) {
2018        TerminatorInst *TI = Preds[i]->getTerminator();
2019
2020        if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
2021          if (BI->isUnconditional()) {
2022            if (BI->getSuccessor(0) == BB) {
2023              new UnreachableInst(TI->getContext(), TI);
2024              TI->eraseFromParent();
2025              Changed = true;
2026            }
2027          } else {
2028            if (BI->getSuccessor(0) == BB) {
2029              BranchInst::Create(BI->getSuccessor(1), BI);
2030              EraseTerminatorInstAndDCECond(BI);
2031            } else if (BI->getSuccessor(1) == BB) {
2032              BranchInst::Create(BI->getSuccessor(0), BI);
2033              EraseTerminatorInstAndDCECond(BI);
2034              Changed = true;
2035            }
2036          }
2037        } else if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
2038          for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
2039            if (SI->getSuccessor(i) == BB) {
2040              BB->removePredecessor(SI->getParent());
2041              SI->removeCase(i);
2042              --i; --e;
2043              Changed = true;
2044            }
2045          // If the default value is unreachable, figure out the most popular
2046          // destination and make it the default.
2047          if (SI->getSuccessor(0) == BB) {
2048            std::map<BasicBlock*, unsigned> Popularity;
2049            for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
2050              Popularity[SI->getSuccessor(i)]++;
2051
2052            // Find the most popular block.
2053            unsigned MaxPop = 0;
2054            BasicBlock *MaxBlock = 0;
2055            for (std::map<BasicBlock*, unsigned>::iterator
2056                   I = Popularity.begin(), E = Popularity.end(); I != E; ++I) {
2057              if (I->second > MaxPop) {
2058                MaxPop = I->second;
2059                MaxBlock = I->first;
2060              }
2061            }
2062            if (MaxBlock) {
2063              // Make this the new default, allowing us to delete any explicit
2064              // edges to it.
2065              SI->setSuccessor(0, MaxBlock);
2066              Changed = true;
2067
2068              // If MaxBlock has phinodes in it, remove MaxPop-1 entries from
2069              // it.
2070              if (isa<PHINode>(MaxBlock->begin()))
2071                for (unsigned i = 0; i != MaxPop-1; ++i)
2072                  MaxBlock->removePredecessor(SI->getParent());
2073
2074              for (unsigned i = 1, e = SI->getNumCases(); i != e; ++i)
2075                if (SI->getSuccessor(i) == MaxBlock) {
2076                  SI->removeCase(i);
2077                  --i; --e;
2078                }
2079            }
2080          }
2081        } else if (InvokeInst *II = dyn_cast<InvokeInst>(TI)) {
2082          if (II->getUnwindDest() == BB) {
2083            // Convert the invoke to a call instruction.  This would be a good
2084            // place to note that the call does not throw though.
2085            BranchInst *BI = BranchInst::Create(II->getNormalDest(), II);
2086            II->removeFromParent();   // Take out of symbol table
2087
2088            // Insert the call now...
2089            SmallVector<Value*, 8> Args(II->op_begin()+3, II->op_end());
2090            CallInst *CI = CallInst::Create(II->getCalledValue(),
2091                                            Args.begin(), Args.end(),
2092                                            II->getName(), BI);
2093            CI->setCallingConv(II->getCallingConv());
2094            CI->setAttributes(II->getAttributes());
2095            // If the invoke produced a value, the Call does now instead.
2096            II->replaceAllUsesWith(CI);
2097            delete II;
2098            Changed = true;
2099          }
2100        }
2101      }
2102
2103      // If this block is now dead, remove it.
2104      if (pred_begin(BB) == pred_end(BB)) {
2105        // We know there are no successors, so just nuke the block.
2106        M->getBasicBlockList().erase(BB);
2107        return true;
2108      }
2109    }
2110  }
2111
2112  // Merge basic blocks into their predecessor if there is only one distinct
2113  // pred, and if there is only one distinct successor of the predecessor, and
2114  // if there are no PHI nodes.
2115  //
2116  if (MergeBlockIntoPredecessor(BB))
2117    return true;
2118
2119  // Otherwise, if this block only has a single predecessor, and if that block
2120  // is a conditional branch, see if we can hoist any code from this block up
2121  // into our predecessor.
2122  pred_iterator PI(pred_begin(BB)), PE(pred_end(BB));
2123  BasicBlock *OnlyPred = *PI++;
2124  for (; PI != PE; ++PI)  // Search all predecessors, see if they are all same
2125    if (*PI != OnlyPred) {
2126      OnlyPred = 0;       // There are multiple different predecessors...
2127      break;
2128    }
2129
2130  if (OnlyPred)
2131    if (BranchInst *BI = dyn_cast<BranchInst>(OnlyPred->getTerminator()))
2132      if (BI->isConditional()) {
2133        // Get the other block.
2134        BasicBlock *OtherBB = BI->getSuccessor(BI->getSuccessor(0) == BB);
2135        PI = pred_begin(OtherBB);
2136        ++PI;
2137
2138        if (PI == pred_end(OtherBB)) {
2139          // We have a conditional branch to two blocks that are only reachable
2140          // from the condbr.  We know that the condbr dominates the two blocks,
2141          // so see if there is any identical code in the "then" and "else"
2142          // blocks.  If so, we can hoist it up to the branching block.
2143          Changed |= HoistThenElseCodeToIf(BI);
2144        } else {
2145          BasicBlock* OnlySucc = NULL;
2146          for (succ_iterator SI = succ_begin(BB), SE = succ_end(BB);
2147               SI != SE; ++SI) {
2148            if (!OnlySucc)
2149              OnlySucc = *SI;
2150            else if (*SI != OnlySucc) {
2151              OnlySucc = 0;     // There are multiple distinct successors!
2152              break;
2153            }
2154          }
2155
2156          if (OnlySucc == OtherBB) {
2157            // If BB's only successor is the other successor of the predecessor,
2158            // i.e. a triangle, see if we can hoist any code from this block up
2159            // to the "if" block.
2160            Changed |= SpeculativelyExecuteBB(BI, BB);
2161          }
2162        }
2163      }
2164
2165  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
2166    if (BranchInst *BI = dyn_cast<BranchInst>((*PI)->getTerminator()))
2167      // Change br (X == 0 | X == 1), T, F into a switch instruction.
2168      if (BI->isConditional() && isa<Instruction>(BI->getCondition())) {
2169        Instruction *Cond = cast<Instruction>(BI->getCondition());
2170        // If this is a bunch of seteq's or'd together, or if it's a bunch of
2171        // 'setne's and'ed together, collect them.
2172        Value *CompVal = 0;
2173        std::vector<ConstantInt*> Values;
2174        bool TrueWhenEqual = GatherValueComparisons(Cond, CompVal, Values);
2175        if (CompVal && CompVal->getType()->isInteger()) {
2176          // There might be duplicate constants in the list, which the switch
2177          // instruction can't handle, remove them now.
2178          std::sort(Values.begin(), Values.end(), ConstantIntOrdering());
2179          Values.erase(std::unique(Values.begin(), Values.end()), Values.end());
2180
2181          // Figure out which block is which destination.
2182          BasicBlock *DefaultBB = BI->getSuccessor(1);
2183          BasicBlock *EdgeBB    = BI->getSuccessor(0);
2184          if (!TrueWhenEqual) std::swap(DefaultBB, EdgeBB);
2185
2186          // Create the new switch instruction now.
2187          SwitchInst *New = SwitchInst::Create(CompVal, DefaultBB,
2188                                               Values.size(), BI);
2189
2190          // Add all of the 'cases' to the switch instruction.
2191          for (unsigned i = 0, e = Values.size(); i != e; ++i)
2192            New->addCase(Values[i], EdgeBB);
2193
2194          // We added edges from PI to the EdgeBB.  As such, if there were any
2195          // PHI nodes in EdgeBB, they need entries to be added corresponding to
2196          // the number of edges added.
2197          for (BasicBlock::iterator BBI = EdgeBB->begin();
2198               isa<PHINode>(BBI); ++BBI) {
2199            PHINode *PN = cast<PHINode>(BBI);
2200            Value *InVal = PN->getIncomingValueForBlock(*PI);
2201            for (unsigned i = 0, e = Values.size()-1; i != e; ++i)
2202              PN->addIncoming(InVal, *PI);
2203          }
2204
2205          // Erase the old branch instruction.
2206          EraseTerminatorInstAndDCECond(BI);
2207          return true;
2208        }
2209      }
2210
2211  return Changed;
2212}
2213