JumpThreading.cpp revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
1//===- JumpThreading.cpp - Thread control through conditional blocks ------===//
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// This file implements the Jump Threading pass.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/Transforms/Scalar.h"
15#include "llvm/ADT/DenseMap.h"
16#include "llvm/ADT/DenseSet.h"
17#include "llvm/ADT/STLExtras.h"
18#include "llvm/ADT/SmallPtrSet.h"
19#include "llvm/ADT/SmallSet.h"
20#include "llvm/ADT/Statistic.h"
21#include "llvm/Analysis/CFG.h"
22#include "llvm/Analysis/ConstantFolding.h"
23#include "llvm/Analysis/InstructionSimplify.h"
24#include "llvm/Analysis/LazyValueInfo.h"
25#include "llvm/Analysis/Loads.h"
26#include "llvm/IR/DataLayout.h"
27#include "llvm/IR/IntrinsicInst.h"
28#include "llvm/IR/LLVMContext.h"
29#include "llvm/IR/ValueHandle.h"
30#include "llvm/Pass.h"
31#include "llvm/Support/CommandLine.h"
32#include "llvm/Support/Debug.h"
33#include "llvm/Support/raw_ostream.h"
34#include "llvm/Target/TargetLibraryInfo.h"
35#include "llvm/Transforms/Utils/BasicBlockUtils.h"
36#include "llvm/Transforms/Utils/Local.h"
37#include "llvm/Transforms/Utils/SSAUpdater.h"
38using namespace llvm;
39
40#define DEBUG_TYPE "jump-threading"
41
42STATISTIC(NumThreads, "Number of jumps threaded");
43STATISTIC(NumFolds,   "Number of terminators folded");
44STATISTIC(NumDupes,   "Number of branch blocks duplicated to eliminate phi");
45
46static cl::opt<unsigned>
47Threshold("jump-threading-threshold",
48          cl::desc("Max block size to duplicate for jump threading"),
49          cl::init(6), cl::Hidden);
50
51namespace {
52  // These are at global scope so static functions can use them too.
53  typedef SmallVectorImpl<std::pair<Constant*, BasicBlock*> > PredValueInfo;
54  typedef SmallVector<std::pair<Constant*, BasicBlock*>, 8> PredValueInfoTy;
55
56  // This is used to keep track of what kind of constant we're currently hoping
57  // to find.
58  enum ConstantPreference {
59    WantInteger,
60    WantBlockAddress
61  };
62
63  /// This pass performs 'jump threading', which looks at blocks that have
64  /// multiple predecessors and multiple successors.  If one or more of the
65  /// predecessors of the block can be proven to always jump to one of the
66  /// successors, we forward the edge from the predecessor to the successor by
67  /// duplicating the contents of this block.
68  ///
69  /// An example of when this can occur is code like this:
70  ///
71  ///   if () { ...
72  ///     X = 4;
73  ///   }
74  ///   if (X < 3) {
75  ///
76  /// In this case, the unconditional branch at the end of the first if can be
77  /// revectored to the false side of the second if.
78  ///
79  class JumpThreading : public FunctionPass {
80    const DataLayout *DL;
81    TargetLibraryInfo *TLI;
82    LazyValueInfo *LVI;
83#ifdef NDEBUG
84    SmallPtrSet<BasicBlock*, 16> LoopHeaders;
85#else
86    SmallSet<AssertingVH<BasicBlock>, 16> LoopHeaders;
87#endif
88    DenseSet<std::pair<Value*, BasicBlock*> > RecursionSet;
89
90    // RAII helper for updating the recursion stack.
91    struct RecursionSetRemover {
92      DenseSet<std::pair<Value*, BasicBlock*> > &TheSet;
93      std::pair<Value*, BasicBlock*> ThePair;
94
95      RecursionSetRemover(DenseSet<std::pair<Value*, BasicBlock*> > &S,
96                          std::pair<Value*, BasicBlock*> P)
97        : TheSet(S), ThePair(P) { }
98
99      ~RecursionSetRemover() {
100        TheSet.erase(ThePair);
101      }
102    };
103  public:
104    static char ID; // Pass identification
105    JumpThreading() : FunctionPass(ID) {
106      initializeJumpThreadingPass(*PassRegistry::getPassRegistry());
107    }
108
109    bool runOnFunction(Function &F) override;
110
111    void getAnalysisUsage(AnalysisUsage &AU) const override {
112      AU.addRequired<LazyValueInfo>();
113      AU.addPreserved<LazyValueInfo>();
114      AU.addRequired<TargetLibraryInfo>();
115    }
116
117    void FindLoopHeaders(Function &F);
118    bool ProcessBlock(BasicBlock *BB);
119    bool ThreadEdge(BasicBlock *BB, const SmallVectorImpl<BasicBlock*> &PredBBs,
120                    BasicBlock *SuccBB);
121    bool DuplicateCondBranchOnPHIIntoPred(BasicBlock *BB,
122                                  const SmallVectorImpl<BasicBlock *> &PredBBs);
123
124    bool ComputeValueKnownInPredecessors(Value *V, BasicBlock *BB,
125                                         PredValueInfo &Result,
126                                         ConstantPreference Preference);
127    bool ProcessThreadableEdges(Value *Cond, BasicBlock *BB,
128                                ConstantPreference Preference);
129
130    bool ProcessBranchOnPHI(PHINode *PN);
131    bool ProcessBranchOnXOR(BinaryOperator *BO);
132
133    bool SimplifyPartiallyRedundantLoad(LoadInst *LI);
134    bool TryToUnfoldSelect(CmpInst *CondCmp, BasicBlock *BB);
135  };
136}
137
138char JumpThreading::ID = 0;
139INITIALIZE_PASS_BEGIN(JumpThreading, "jump-threading",
140                "Jump Threading", false, false)
141INITIALIZE_PASS_DEPENDENCY(LazyValueInfo)
142INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfo)
143INITIALIZE_PASS_END(JumpThreading, "jump-threading",
144                "Jump Threading", false, false)
145
146// Public interface to the Jump Threading pass
147FunctionPass *llvm::createJumpThreadingPass() { return new JumpThreading(); }
148
149/// runOnFunction - Top level algorithm.
150///
151bool JumpThreading::runOnFunction(Function &F) {
152  if (skipOptnoneFunction(F))
153    return false;
154
155  DEBUG(dbgs() << "Jump threading on function '" << F.getName() << "'\n");
156  DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
157  DL = DLP ? &DLP->getDataLayout() : nullptr;
158  TLI = &getAnalysis<TargetLibraryInfo>();
159  LVI = &getAnalysis<LazyValueInfo>();
160
161  // Remove unreachable blocks from function as they may result in infinite
162  // loop. We do threading if we found something profitable. Jump threading a
163  // branch can create other opportunities. If these opportunities form a cycle
164  // i.e. if any jump treading is undoing previous threading in the path, then
165  // we will loop forever. We take care of this issue by not jump threading for
166  // back edges. This works for normal cases but not for unreachable blocks as
167  // they may have cycle with no back edge.
168  removeUnreachableBlocks(F);
169
170  FindLoopHeaders(F);
171
172  bool Changed, EverChanged = false;
173  do {
174    Changed = false;
175    for (Function::iterator I = F.begin(), E = F.end(); I != E;) {
176      BasicBlock *BB = I;
177      // Thread all of the branches we can over this block.
178      while (ProcessBlock(BB))
179        Changed = true;
180
181      ++I;
182
183      // If the block is trivially dead, zap it.  This eliminates the successor
184      // edges which simplifies the CFG.
185      if (pred_begin(BB) == pred_end(BB) &&
186          BB != &BB->getParent()->getEntryBlock()) {
187        DEBUG(dbgs() << "  JT: Deleting dead block '" << BB->getName()
188              << "' with terminator: " << *BB->getTerminator() << '\n');
189        LoopHeaders.erase(BB);
190        LVI->eraseBlock(BB);
191        DeleteDeadBlock(BB);
192        Changed = true;
193        continue;
194      }
195
196      BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator());
197
198      // Can't thread an unconditional jump, but if the block is "almost
199      // empty", we can replace uses of it with uses of the successor and make
200      // this dead.
201      if (BI && BI->isUnconditional() &&
202          BB != &BB->getParent()->getEntryBlock() &&
203          // If the terminator is the only non-phi instruction, try to nuke it.
204          BB->getFirstNonPHIOrDbg()->isTerminator()) {
205        // Since TryToSimplifyUncondBranchFromEmptyBlock may delete the
206        // block, we have to make sure it isn't in the LoopHeaders set.  We
207        // reinsert afterward if needed.
208        bool ErasedFromLoopHeaders = LoopHeaders.erase(BB);
209        BasicBlock *Succ = BI->getSuccessor(0);
210
211        // FIXME: It is always conservatively correct to drop the info
212        // for a block even if it doesn't get erased.  This isn't totally
213        // awesome, but it allows us to use AssertingVH to prevent nasty
214        // dangling pointer issues within LazyValueInfo.
215        LVI->eraseBlock(BB);
216        if (TryToSimplifyUncondBranchFromEmptyBlock(BB)) {
217          Changed = true;
218          // If we deleted BB and BB was the header of a loop, then the
219          // successor is now the header of the loop.
220          BB = Succ;
221        }
222
223        if (ErasedFromLoopHeaders)
224          LoopHeaders.insert(BB);
225      }
226    }
227    EverChanged |= Changed;
228  } while (Changed);
229
230  LoopHeaders.clear();
231  return EverChanged;
232}
233
234/// getJumpThreadDuplicationCost - Return the cost of duplicating this block to
235/// thread across it. Stop scanning the block when passing the threshold.
236static unsigned getJumpThreadDuplicationCost(const BasicBlock *BB,
237                                             unsigned Threshold) {
238  /// Ignore PHI nodes, these will be flattened when duplication happens.
239  BasicBlock::const_iterator I = BB->getFirstNonPHI();
240
241  // FIXME: THREADING will delete values that are just used to compute the
242  // branch, so they shouldn't count against the duplication cost.
243
244  // Sum up the cost of each instruction until we get to the terminator.  Don't
245  // include the terminator because the copy won't include it.
246  unsigned Size = 0;
247  for (; !isa<TerminatorInst>(I); ++I) {
248
249    // Stop scanning the block if we've reached the threshold.
250    if (Size > Threshold)
251      return Size;
252
253    // Debugger intrinsics don't incur code size.
254    if (isa<DbgInfoIntrinsic>(I)) continue;
255
256    // If this is a pointer->pointer bitcast, it is free.
257    if (isa<BitCastInst>(I) && I->getType()->isPointerTy())
258      continue;
259
260    // All other instructions count for at least one unit.
261    ++Size;
262
263    // Calls are more expensive.  If they are non-intrinsic calls, we model them
264    // as having cost of 4.  If they are a non-vector intrinsic, we model them
265    // as having cost of 2 total, and if they are a vector intrinsic, we model
266    // them as having cost 1.
267    if (const CallInst *CI = dyn_cast<CallInst>(I)) {
268      if (CI->cannotDuplicate())
269        // Blocks with NoDuplicate are modelled as having infinite cost, so they
270        // are never duplicated.
271        return ~0U;
272      else if (!isa<IntrinsicInst>(CI))
273        Size += 3;
274      else if (!CI->getType()->isVectorTy())
275        Size += 1;
276    }
277  }
278
279  // Threading through a switch statement is particularly profitable.  If this
280  // block ends in a switch, decrease its cost to make it more likely to happen.
281  if (isa<SwitchInst>(I))
282    Size = Size > 6 ? Size-6 : 0;
283
284  // The same holds for indirect branches, but slightly more so.
285  if (isa<IndirectBrInst>(I))
286    Size = Size > 8 ? Size-8 : 0;
287
288  return Size;
289}
290
291/// FindLoopHeaders - We do not want jump threading to turn proper loop
292/// structures into irreducible loops.  Doing this breaks up the loop nesting
293/// hierarchy and pessimizes later transformations.  To prevent this from
294/// happening, we first have to find the loop headers.  Here we approximate this
295/// by finding targets of backedges in the CFG.
296///
297/// Note that there definitely are cases when we want to allow threading of
298/// edges across a loop header.  For example, threading a jump from outside the
299/// loop (the preheader) to an exit block of the loop is definitely profitable.
300/// It is also almost always profitable to thread backedges from within the loop
301/// to exit blocks, and is often profitable to thread backedges to other blocks
302/// within the loop (forming a nested loop).  This simple analysis is not rich
303/// enough to track all of these properties and keep it up-to-date as the CFG
304/// mutates, so we don't allow any of these transformations.
305///
306void JumpThreading::FindLoopHeaders(Function &F) {
307  SmallVector<std::pair<const BasicBlock*,const BasicBlock*>, 32> Edges;
308  FindFunctionBackedges(F, Edges);
309
310  for (unsigned i = 0, e = Edges.size(); i != e; ++i)
311    LoopHeaders.insert(const_cast<BasicBlock*>(Edges[i].second));
312}
313
314/// getKnownConstant - Helper method to determine if we can thread over a
315/// terminator with the given value as its condition, and if so what value to
316/// use for that. What kind of value this is depends on whether we want an
317/// integer or a block address, but an undef is always accepted.
318/// Returns null if Val is null or not an appropriate constant.
319static Constant *getKnownConstant(Value *Val, ConstantPreference Preference) {
320  if (!Val)
321    return nullptr;
322
323  // Undef is "known" enough.
324  if (UndefValue *U = dyn_cast<UndefValue>(Val))
325    return U;
326
327  if (Preference == WantBlockAddress)
328    return dyn_cast<BlockAddress>(Val->stripPointerCasts());
329
330  return dyn_cast<ConstantInt>(Val);
331}
332
333/// ComputeValueKnownInPredecessors - Given a basic block BB and a value V, see
334/// if we can infer that the value is a known ConstantInt/BlockAddress or undef
335/// in any of our predecessors.  If so, return the known list of value and pred
336/// BB in the result vector.
337///
338/// This returns true if there were any known values.
339///
340bool JumpThreading::
341ComputeValueKnownInPredecessors(Value *V, BasicBlock *BB, PredValueInfo &Result,
342                                ConstantPreference Preference) {
343  // This method walks up use-def chains recursively.  Because of this, we could
344  // get into an infinite loop going around loops in the use-def chain.  To
345  // prevent this, keep track of what (value, block) pairs we've already visited
346  // and terminate the search if we loop back to them
347  if (!RecursionSet.insert(std::make_pair(V, BB)).second)
348    return false;
349
350  // An RAII help to remove this pair from the recursion set once the recursion
351  // stack pops back out again.
352  RecursionSetRemover remover(RecursionSet, std::make_pair(V, BB));
353
354  // If V is a constant, then it is known in all predecessors.
355  if (Constant *KC = getKnownConstant(V, Preference)) {
356    for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
357      Result.push_back(std::make_pair(KC, *PI));
358
359    return true;
360  }
361
362  // If V is a non-instruction value, or an instruction in a different block,
363  // then it can't be derived from a PHI.
364  Instruction *I = dyn_cast<Instruction>(V);
365  if (!I || I->getParent() != BB) {
366
367    // Okay, if this is a live-in value, see if it has a known value at the end
368    // of any of our predecessors.
369    //
370    // FIXME: This should be an edge property, not a block end property.
371    /// TODO: Per PR2563, we could infer value range information about a
372    /// predecessor based on its terminator.
373    //
374    // FIXME: change this to use the more-rich 'getPredicateOnEdge' method if
375    // "I" is a non-local compare-with-a-constant instruction.  This would be
376    // able to handle value inequalities better, for example if the compare is
377    // "X < 4" and "X < 3" is known true but "X < 4" itself is not available.
378    // Perhaps getConstantOnEdge should be smart enough to do this?
379
380    for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
381      BasicBlock *P = *PI;
382      // If the value is known by LazyValueInfo to be a constant in a
383      // predecessor, use that information to try to thread this block.
384      Constant *PredCst = LVI->getConstantOnEdge(V, P, BB);
385      if (Constant *KC = getKnownConstant(PredCst, Preference))
386        Result.push_back(std::make_pair(KC, P));
387    }
388
389    return !Result.empty();
390  }
391
392  /// If I is a PHI node, then we know the incoming values for any constants.
393  if (PHINode *PN = dyn_cast<PHINode>(I)) {
394    for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
395      Value *InVal = PN->getIncomingValue(i);
396      if (Constant *KC = getKnownConstant(InVal, Preference)) {
397        Result.push_back(std::make_pair(KC, PN->getIncomingBlock(i)));
398      } else {
399        Constant *CI = LVI->getConstantOnEdge(InVal,
400                                              PN->getIncomingBlock(i), BB);
401        if (Constant *KC = getKnownConstant(CI, Preference))
402          Result.push_back(std::make_pair(KC, PN->getIncomingBlock(i)));
403      }
404    }
405
406    return !Result.empty();
407  }
408
409  PredValueInfoTy LHSVals, RHSVals;
410
411  // Handle some boolean conditions.
412  if (I->getType()->getPrimitiveSizeInBits() == 1) {
413    assert(Preference == WantInteger && "One-bit non-integer type?");
414    // X | true -> true
415    // X & false -> false
416    if (I->getOpcode() == Instruction::Or ||
417        I->getOpcode() == Instruction::And) {
418      ComputeValueKnownInPredecessors(I->getOperand(0), BB, LHSVals,
419                                      WantInteger);
420      ComputeValueKnownInPredecessors(I->getOperand(1), BB, RHSVals,
421                                      WantInteger);
422
423      if (LHSVals.empty() && RHSVals.empty())
424        return false;
425
426      ConstantInt *InterestingVal;
427      if (I->getOpcode() == Instruction::Or)
428        InterestingVal = ConstantInt::getTrue(I->getContext());
429      else
430        InterestingVal = ConstantInt::getFalse(I->getContext());
431
432      SmallPtrSet<BasicBlock*, 4> LHSKnownBBs;
433
434      // Scan for the sentinel.  If we find an undef, force it to the
435      // interesting value: x|undef -> true and x&undef -> false.
436      for (unsigned i = 0, e = LHSVals.size(); i != e; ++i)
437        if (LHSVals[i].first == InterestingVal ||
438            isa<UndefValue>(LHSVals[i].first)) {
439          Result.push_back(LHSVals[i]);
440          Result.back().first = InterestingVal;
441          LHSKnownBBs.insert(LHSVals[i].second);
442        }
443      for (unsigned i = 0, e = RHSVals.size(); i != e; ++i)
444        if (RHSVals[i].first == InterestingVal ||
445            isa<UndefValue>(RHSVals[i].first)) {
446          // If we already inferred a value for this block on the LHS, don't
447          // re-add it.
448          if (!LHSKnownBBs.count(RHSVals[i].second)) {
449            Result.push_back(RHSVals[i]);
450            Result.back().first = InterestingVal;
451          }
452        }
453
454      return !Result.empty();
455    }
456
457    // Handle the NOT form of XOR.
458    if (I->getOpcode() == Instruction::Xor &&
459        isa<ConstantInt>(I->getOperand(1)) &&
460        cast<ConstantInt>(I->getOperand(1))->isOne()) {
461      ComputeValueKnownInPredecessors(I->getOperand(0), BB, Result,
462                                      WantInteger);
463      if (Result.empty())
464        return false;
465
466      // Invert the known values.
467      for (unsigned i = 0, e = Result.size(); i != e; ++i)
468        Result[i].first = ConstantExpr::getNot(Result[i].first);
469
470      return true;
471    }
472
473  // Try to simplify some other binary operator values.
474  } else if (BinaryOperator *BO = dyn_cast<BinaryOperator>(I)) {
475    assert(Preference != WantBlockAddress
476            && "A binary operator creating a block address?");
477    if (ConstantInt *CI = dyn_cast<ConstantInt>(BO->getOperand(1))) {
478      PredValueInfoTy LHSVals;
479      ComputeValueKnownInPredecessors(BO->getOperand(0), BB, LHSVals,
480                                      WantInteger);
481
482      // Try to use constant folding to simplify the binary operator.
483      for (unsigned i = 0, e = LHSVals.size(); i != e; ++i) {
484        Constant *V = LHSVals[i].first;
485        Constant *Folded = ConstantExpr::get(BO->getOpcode(), V, CI);
486
487        if (Constant *KC = getKnownConstant(Folded, WantInteger))
488          Result.push_back(std::make_pair(KC, LHSVals[i].second));
489      }
490    }
491
492    return !Result.empty();
493  }
494
495  // Handle compare with phi operand, where the PHI is defined in this block.
496  if (CmpInst *Cmp = dyn_cast<CmpInst>(I)) {
497    assert(Preference == WantInteger && "Compares only produce integers");
498    PHINode *PN = dyn_cast<PHINode>(Cmp->getOperand(0));
499    if (PN && PN->getParent() == BB) {
500      // We can do this simplification if any comparisons fold to true or false.
501      // See if any do.
502      for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
503        BasicBlock *PredBB = PN->getIncomingBlock(i);
504        Value *LHS = PN->getIncomingValue(i);
505        Value *RHS = Cmp->getOperand(1)->DoPHITranslation(BB, PredBB);
506
507        Value *Res = SimplifyCmpInst(Cmp->getPredicate(), LHS, RHS, DL);
508        if (!Res) {
509          if (!isa<Constant>(RHS))
510            continue;
511
512          LazyValueInfo::Tristate
513            ResT = LVI->getPredicateOnEdge(Cmp->getPredicate(), LHS,
514                                           cast<Constant>(RHS), PredBB, BB);
515          if (ResT == LazyValueInfo::Unknown)
516            continue;
517          Res = ConstantInt::get(Type::getInt1Ty(LHS->getContext()), ResT);
518        }
519
520        if (Constant *KC = getKnownConstant(Res, WantInteger))
521          Result.push_back(std::make_pair(KC, PredBB));
522      }
523
524      return !Result.empty();
525    }
526
527
528    // If comparing a live-in value against a constant, see if we know the
529    // live-in value on any predecessors.
530    if (isa<Constant>(Cmp->getOperand(1)) && Cmp->getType()->isIntegerTy()) {
531      if (!isa<Instruction>(Cmp->getOperand(0)) ||
532          cast<Instruction>(Cmp->getOperand(0))->getParent() != BB) {
533        Constant *RHSCst = cast<Constant>(Cmp->getOperand(1));
534
535        for (pred_iterator PI = pred_begin(BB), E = pred_end(BB);PI != E; ++PI){
536          BasicBlock *P = *PI;
537          // If the value is known by LazyValueInfo to be a constant in a
538          // predecessor, use that information to try to thread this block.
539          LazyValueInfo::Tristate Res =
540            LVI->getPredicateOnEdge(Cmp->getPredicate(), Cmp->getOperand(0),
541                                    RHSCst, P, BB);
542          if (Res == LazyValueInfo::Unknown)
543            continue;
544
545          Constant *ResC = ConstantInt::get(Cmp->getType(), Res);
546          Result.push_back(std::make_pair(ResC, P));
547        }
548
549        return !Result.empty();
550      }
551
552      // Try to find a constant value for the LHS of a comparison,
553      // and evaluate it statically if we can.
554      if (Constant *CmpConst = dyn_cast<Constant>(Cmp->getOperand(1))) {
555        PredValueInfoTy LHSVals;
556        ComputeValueKnownInPredecessors(I->getOperand(0), BB, LHSVals,
557                                        WantInteger);
558
559        for (unsigned i = 0, e = LHSVals.size(); i != e; ++i) {
560          Constant *V = LHSVals[i].first;
561          Constant *Folded = ConstantExpr::getCompare(Cmp->getPredicate(),
562                                                      V, CmpConst);
563          if (Constant *KC = getKnownConstant(Folded, WantInteger))
564            Result.push_back(std::make_pair(KC, LHSVals[i].second));
565        }
566
567        return !Result.empty();
568      }
569    }
570  }
571
572  if (SelectInst *SI = dyn_cast<SelectInst>(I)) {
573    // Handle select instructions where at least one operand is a known constant
574    // and we can figure out the condition value for any predecessor block.
575    Constant *TrueVal = getKnownConstant(SI->getTrueValue(), Preference);
576    Constant *FalseVal = getKnownConstant(SI->getFalseValue(), Preference);
577    PredValueInfoTy Conds;
578    if ((TrueVal || FalseVal) &&
579        ComputeValueKnownInPredecessors(SI->getCondition(), BB, Conds,
580                                        WantInteger)) {
581      for (unsigned i = 0, e = Conds.size(); i != e; ++i) {
582        Constant *Cond = Conds[i].first;
583
584        // Figure out what value to use for the condition.
585        bool KnownCond;
586        if (ConstantInt *CI = dyn_cast<ConstantInt>(Cond)) {
587          // A known boolean.
588          KnownCond = CI->isOne();
589        } else {
590          assert(isa<UndefValue>(Cond) && "Unexpected condition value");
591          // Either operand will do, so be sure to pick the one that's a known
592          // constant.
593          // FIXME: Do this more cleverly if both values are known constants?
594          KnownCond = (TrueVal != nullptr);
595        }
596
597        // See if the select has a known constant value for this predecessor.
598        if (Constant *Val = KnownCond ? TrueVal : FalseVal)
599          Result.push_back(std::make_pair(Val, Conds[i].second));
600      }
601
602      return !Result.empty();
603    }
604  }
605
606  // If all else fails, see if LVI can figure out a constant value for us.
607  Constant *CI = LVI->getConstant(V, BB);
608  if (Constant *KC = getKnownConstant(CI, Preference)) {
609    for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
610      Result.push_back(std::make_pair(KC, *PI));
611  }
612
613  return !Result.empty();
614}
615
616
617
618/// GetBestDestForBranchOnUndef - If we determine that the specified block ends
619/// in an undefined jump, decide which block is best to revector to.
620///
621/// Since we can pick an arbitrary destination, we pick the successor with the
622/// fewest predecessors.  This should reduce the in-degree of the others.
623///
624static unsigned GetBestDestForJumpOnUndef(BasicBlock *BB) {
625  TerminatorInst *BBTerm = BB->getTerminator();
626  unsigned MinSucc = 0;
627  BasicBlock *TestBB = BBTerm->getSuccessor(MinSucc);
628  // Compute the successor with the minimum number of predecessors.
629  unsigned MinNumPreds = std::distance(pred_begin(TestBB), pred_end(TestBB));
630  for (unsigned i = 1, e = BBTerm->getNumSuccessors(); i != e; ++i) {
631    TestBB = BBTerm->getSuccessor(i);
632    unsigned NumPreds = std::distance(pred_begin(TestBB), pred_end(TestBB));
633    if (NumPreds < MinNumPreds) {
634      MinSucc = i;
635      MinNumPreds = NumPreds;
636    }
637  }
638
639  return MinSucc;
640}
641
642static bool hasAddressTakenAndUsed(BasicBlock *BB) {
643  if (!BB->hasAddressTaken()) return false;
644
645  // If the block has its address taken, it may be a tree of dead constants
646  // hanging off of it.  These shouldn't keep the block alive.
647  BlockAddress *BA = BlockAddress::get(BB);
648  BA->removeDeadConstantUsers();
649  return !BA->use_empty();
650}
651
652/// ProcessBlock - If there are any predecessors whose control can be threaded
653/// through to a successor, transform them now.
654bool JumpThreading::ProcessBlock(BasicBlock *BB) {
655  // If the block is trivially dead, just return and let the caller nuke it.
656  // This simplifies other transformations.
657  if (pred_begin(BB) == pred_end(BB) &&
658      BB != &BB->getParent()->getEntryBlock())
659    return false;
660
661  // If this block has a single predecessor, and if that pred has a single
662  // successor, merge the blocks.  This encourages recursive jump threading
663  // because now the condition in this block can be threaded through
664  // predecessors of our predecessor block.
665  if (BasicBlock *SinglePred = BB->getSinglePredecessor()) {
666    if (SinglePred->getTerminator()->getNumSuccessors() == 1 &&
667        SinglePred != BB && !hasAddressTakenAndUsed(BB)) {
668      // If SinglePred was a loop header, BB becomes one.
669      if (LoopHeaders.erase(SinglePred))
670        LoopHeaders.insert(BB);
671
672      // Remember if SinglePred was the entry block of the function.  If so, we
673      // will need to move BB back to the entry position.
674      bool isEntry = SinglePred == &SinglePred->getParent()->getEntryBlock();
675      LVI->eraseBlock(SinglePred);
676      MergeBasicBlockIntoOnlyPred(BB);
677
678      if (isEntry && BB != &BB->getParent()->getEntryBlock())
679        BB->moveBefore(&BB->getParent()->getEntryBlock());
680      return true;
681    }
682  }
683
684  // What kind of constant we're looking for.
685  ConstantPreference Preference = WantInteger;
686
687  // Look to see if the terminator is a conditional branch, switch or indirect
688  // branch, if not we can't thread it.
689  Value *Condition;
690  Instruction *Terminator = BB->getTerminator();
691  if (BranchInst *BI = dyn_cast<BranchInst>(Terminator)) {
692    // Can't thread an unconditional jump.
693    if (BI->isUnconditional()) return false;
694    Condition = BI->getCondition();
695  } else if (SwitchInst *SI = dyn_cast<SwitchInst>(Terminator)) {
696    Condition = SI->getCondition();
697  } else if (IndirectBrInst *IB = dyn_cast<IndirectBrInst>(Terminator)) {
698    // Can't thread indirect branch with no successors.
699    if (IB->getNumSuccessors() == 0) return false;
700    Condition = IB->getAddress()->stripPointerCasts();
701    Preference = WantBlockAddress;
702  } else {
703    return false; // Must be an invoke.
704  }
705
706  // Run constant folding to see if we can reduce the condition to a simple
707  // constant.
708  if (Instruction *I = dyn_cast<Instruction>(Condition)) {
709    Value *SimpleVal = ConstantFoldInstruction(I, DL, TLI);
710    if (SimpleVal) {
711      I->replaceAllUsesWith(SimpleVal);
712      I->eraseFromParent();
713      Condition = SimpleVal;
714    }
715  }
716
717  // If the terminator is branching on an undef, we can pick any of the
718  // successors to branch to.  Let GetBestDestForJumpOnUndef decide.
719  if (isa<UndefValue>(Condition)) {
720    unsigned BestSucc = GetBestDestForJumpOnUndef(BB);
721
722    // Fold the branch/switch.
723    TerminatorInst *BBTerm = BB->getTerminator();
724    for (unsigned i = 0, e = BBTerm->getNumSuccessors(); i != e; ++i) {
725      if (i == BestSucc) continue;
726      BBTerm->getSuccessor(i)->removePredecessor(BB, true);
727    }
728
729    DEBUG(dbgs() << "  In block '" << BB->getName()
730          << "' folding undef terminator: " << *BBTerm << '\n');
731    BranchInst::Create(BBTerm->getSuccessor(BestSucc), BBTerm);
732    BBTerm->eraseFromParent();
733    return true;
734  }
735
736  // If the terminator of this block is branching on a constant, simplify the
737  // terminator to an unconditional branch.  This can occur due to threading in
738  // other blocks.
739  if (getKnownConstant(Condition, Preference)) {
740    DEBUG(dbgs() << "  In block '" << BB->getName()
741          << "' folding terminator: " << *BB->getTerminator() << '\n');
742    ++NumFolds;
743    ConstantFoldTerminator(BB, true);
744    return true;
745  }
746
747  Instruction *CondInst = dyn_cast<Instruction>(Condition);
748
749  // All the rest of our checks depend on the condition being an instruction.
750  if (!CondInst) {
751    // FIXME: Unify this with code below.
752    if (ProcessThreadableEdges(Condition, BB, Preference))
753      return true;
754    return false;
755  }
756
757
758  if (CmpInst *CondCmp = dyn_cast<CmpInst>(CondInst)) {
759    // For a comparison where the LHS is outside this block, it's possible
760    // that we've branched on it before.  Used LVI to see if we can simplify
761    // the branch based on that.
762    BranchInst *CondBr = dyn_cast<BranchInst>(BB->getTerminator());
763    Constant *CondConst = dyn_cast<Constant>(CondCmp->getOperand(1));
764    pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
765    if (CondBr && CondConst && CondBr->isConditional() && PI != PE &&
766        (!isa<Instruction>(CondCmp->getOperand(0)) ||
767         cast<Instruction>(CondCmp->getOperand(0))->getParent() != BB)) {
768      // For predecessor edge, determine if the comparison is true or false
769      // on that edge.  If they're all true or all false, we can simplify the
770      // branch.
771      // FIXME: We could handle mixed true/false by duplicating code.
772      LazyValueInfo::Tristate Baseline =
773        LVI->getPredicateOnEdge(CondCmp->getPredicate(), CondCmp->getOperand(0),
774                                CondConst, *PI, BB);
775      if (Baseline != LazyValueInfo::Unknown) {
776        // Check that all remaining incoming values match the first one.
777        while (++PI != PE) {
778          LazyValueInfo::Tristate Ret =
779            LVI->getPredicateOnEdge(CondCmp->getPredicate(),
780                                    CondCmp->getOperand(0), CondConst, *PI, BB);
781          if (Ret != Baseline) break;
782        }
783
784        // If we terminated early, then one of the values didn't match.
785        if (PI == PE) {
786          unsigned ToRemove = Baseline == LazyValueInfo::True ? 1 : 0;
787          unsigned ToKeep = Baseline == LazyValueInfo::True ? 0 : 1;
788          CondBr->getSuccessor(ToRemove)->removePredecessor(BB, true);
789          BranchInst::Create(CondBr->getSuccessor(ToKeep), CondBr);
790          CondBr->eraseFromParent();
791          return true;
792        }
793      }
794
795    }
796
797    if (CondBr && CondConst && TryToUnfoldSelect(CondCmp, BB))
798      return true;
799  }
800
801  // Check for some cases that are worth simplifying.  Right now we want to look
802  // for loads that are used by a switch or by the condition for the branch.  If
803  // we see one, check to see if it's partially redundant.  If so, insert a PHI
804  // which can then be used to thread the values.
805  //
806  Value *SimplifyValue = CondInst;
807  if (CmpInst *CondCmp = dyn_cast<CmpInst>(SimplifyValue))
808    if (isa<Constant>(CondCmp->getOperand(1)))
809      SimplifyValue = CondCmp->getOperand(0);
810
811  // TODO: There are other places where load PRE would be profitable, such as
812  // more complex comparisons.
813  if (LoadInst *LI = dyn_cast<LoadInst>(SimplifyValue))
814    if (SimplifyPartiallyRedundantLoad(LI))
815      return true;
816
817
818  // Handle a variety of cases where we are branching on something derived from
819  // a PHI node in the current block.  If we can prove that any predecessors
820  // compute a predictable value based on a PHI node, thread those predecessors.
821  //
822  if (ProcessThreadableEdges(CondInst, BB, Preference))
823    return true;
824
825  // If this is an otherwise-unfoldable branch on a phi node in the current
826  // block, see if we can simplify.
827  if (PHINode *PN = dyn_cast<PHINode>(CondInst))
828    if (PN->getParent() == BB && isa<BranchInst>(BB->getTerminator()))
829      return ProcessBranchOnPHI(PN);
830
831
832  // If this is an otherwise-unfoldable branch on a XOR, see if we can simplify.
833  if (CondInst->getOpcode() == Instruction::Xor &&
834      CondInst->getParent() == BB && isa<BranchInst>(BB->getTerminator()))
835    return ProcessBranchOnXOR(cast<BinaryOperator>(CondInst));
836
837
838  // TODO: If we have: "br (X > 0)"  and we have a predecessor where we know
839  // "(X == 4)", thread through this block.
840
841  return false;
842}
843
844/// SimplifyPartiallyRedundantLoad - If LI is an obviously partially redundant
845/// load instruction, eliminate it by replacing it with a PHI node.  This is an
846/// important optimization that encourages jump threading, and needs to be run
847/// interlaced with other jump threading tasks.
848bool JumpThreading::SimplifyPartiallyRedundantLoad(LoadInst *LI) {
849  // Don't hack volatile/atomic loads.
850  if (!LI->isSimple()) return false;
851
852  // If the load is defined in a block with exactly one predecessor, it can't be
853  // partially redundant.
854  BasicBlock *LoadBB = LI->getParent();
855  if (LoadBB->getSinglePredecessor())
856    return false;
857
858  // If the load is defined in a landing pad, it can't be partially redundant,
859  // because the edges between the invoke and the landing pad cannot have other
860  // instructions between them.
861  if (LoadBB->isLandingPad())
862    return false;
863
864  Value *LoadedPtr = LI->getOperand(0);
865
866  // If the loaded operand is defined in the LoadBB, it can't be available.
867  // TODO: Could do simple PHI translation, that would be fun :)
868  if (Instruction *PtrOp = dyn_cast<Instruction>(LoadedPtr))
869    if (PtrOp->getParent() == LoadBB)
870      return false;
871
872  // Scan a few instructions up from the load, to see if it is obviously live at
873  // the entry to its block.
874  BasicBlock::iterator BBIt = LI;
875
876  if (Value *AvailableVal =
877        FindAvailableLoadedValue(LoadedPtr, LoadBB, BBIt, 6)) {
878    // If the value if the load is locally available within the block, just use
879    // it.  This frequently occurs for reg2mem'd allocas.
880    //cerr << "LOAD ELIMINATED:\n" << *BBIt << *LI << "\n";
881
882    // If the returned value is the load itself, replace with an undef. This can
883    // only happen in dead loops.
884    if (AvailableVal == LI) AvailableVal = UndefValue::get(LI->getType());
885    LI->replaceAllUsesWith(AvailableVal);
886    LI->eraseFromParent();
887    return true;
888  }
889
890  // Otherwise, if we scanned the whole block and got to the top of the block,
891  // we know the block is locally transparent to the load.  If not, something
892  // might clobber its value.
893  if (BBIt != LoadBB->begin())
894    return false;
895
896  // If all of the loads and stores that feed the value have the same TBAA tag,
897  // then we can propagate it onto any newly inserted loads.
898  MDNode *TBAATag = LI->getMetadata(LLVMContext::MD_tbaa);
899
900  SmallPtrSet<BasicBlock*, 8> PredsScanned;
901  typedef SmallVector<std::pair<BasicBlock*, Value*>, 8> AvailablePredsTy;
902  AvailablePredsTy AvailablePreds;
903  BasicBlock *OneUnavailablePred = nullptr;
904
905  // If we got here, the loaded value is transparent through to the start of the
906  // block.  Check to see if it is available in any of the predecessor blocks.
907  for (pred_iterator PI = pred_begin(LoadBB), PE = pred_end(LoadBB);
908       PI != PE; ++PI) {
909    BasicBlock *PredBB = *PI;
910
911    // If we already scanned this predecessor, skip it.
912    if (!PredsScanned.insert(PredBB))
913      continue;
914
915    // Scan the predecessor to see if the value is available in the pred.
916    BBIt = PredBB->end();
917    MDNode *ThisTBAATag = nullptr;
918    Value *PredAvailable = FindAvailableLoadedValue(LoadedPtr, PredBB, BBIt, 6,
919                                                    nullptr, &ThisTBAATag);
920    if (!PredAvailable) {
921      OneUnavailablePred = PredBB;
922      continue;
923    }
924
925    // If tbaa tags disagree or are not present, forget about them.
926    if (TBAATag != ThisTBAATag) TBAATag = nullptr;
927
928    // If so, this load is partially redundant.  Remember this info so that we
929    // can create a PHI node.
930    AvailablePreds.push_back(std::make_pair(PredBB, PredAvailable));
931  }
932
933  // If the loaded value isn't available in any predecessor, it isn't partially
934  // redundant.
935  if (AvailablePreds.empty()) return false;
936
937  // Okay, the loaded value is available in at least one (and maybe all!)
938  // predecessors.  If the value is unavailable in more than one unique
939  // predecessor, we want to insert a merge block for those common predecessors.
940  // This ensures that we only have to insert one reload, thus not increasing
941  // code size.
942  BasicBlock *UnavailablePred = nullptr;
943
944  // If there is exactly one predecessor where the value is unavailable, the
945  // already computed 'OneUnavailablePred' block is it.  If it ends in an
946  // unconditional branch, we know that it isn't a critical edge.
947  if (PredsScanned.size() == AvailablePreds.size()+1 &&
948      OneUnavailablePred->getTerminator()->getNumSuccessors() == 1) {
949    UnavailablePred = OneUnavailablePred;
950  } else if (PredsScanned.size() != AvailablePreds.size()) {
951    // Otherwise, we had multiple unavailable predecessors or we had a critical
952    // edge from the one.
953    SmallVector<BasicBlock*, 8> PredsToSplit;
954    SmallPtrSet<BasicBlock*, 8> AvailablePredSet;
955
956    for (unsigned i = 0, e = AvailablePreds.size(); i != e; ++i)
957      AvailablePredSet.insert(AvailablePreds[i].first);
958
959    // Add all the unavailable predecessors to the PredsToSplit list.
960    for (pred_iterator PI = pred_begin(LoadBB), PE = pred_end(LoadBB);
961         PI != PE; ++PI) {
962      BasicBlock *P = *PI;
963      // If the predecessor is an indirect goto, we can't split the edge.
964      if (isa<IndirectBrInst>(P->getTerminator()))
965        return false;
966
967      if (!AvailablePredSet.count(P))
968        PredsToSplit.push_back(P);
969    }
970
971    // Split them out to their own block.
972    UnavailablePred =
973      SplitBlockPredecessors(LoadBB, PredsToSplit, "thread-pre-split", this);
974  }
975
976  // If the value isn't available in all predecessors, then there will be
977  // exactly one where it isn't available.  Insert a load on that edge and add
978  // it to the AvailablePreds list.
979  if (UnavailablePred) {
980    assert(UnavailablePred->getTerminator()->getNumSuccessors() == 1 &&
981           "Can't handle critical edge here!");
982    LoadInst *NewVal = new LoadInst(LoadedPtr, LI->getName()+".pr", false,
983                                 LI->getAlignment(),
984                                 UnavailablePred->getTerminator());
985    NewVal->setDebugLoc(LI->getDebugLoc());
986    if (TBAATag)
987      NewVal->setMetadata(LLVMContext::MD_tbaa, TBAATag);
988
989    AvailablePreds.push_back(std::make_pair(UnavailablePred, NewVal));
990  }
991
992  // Now we know that each predecessor of this block has a value in
993  // AvailablePreds, sort them for efficient access as we're walking the preds.
994  array_pod_sort(AvailablePreds.begin(), AvailablePreds.end());
995
996  // Create a PHI node at the start of the block for the PRE'd load value.
997  pred_iterator PB = pred_begin(LoadBB), PE = pred_end(LoadBB);
998  PHINode *PN = PHINode::Create(LI->getType(), std::distance(PB, PE), "",
999                                LoadBB->begin());
1000  PN->takeName(LI);
1001  PN->setDebugLoc(LI->getDebugLoc());
1002
1003  // Insert new entries into the PHI for each predecessor.  A single block may
1004  // have multiple entries here.
1005  for (pred_iterator PI = PB; PI != PE; ++PI) {
1006    BasicBlock *P = *PI;
1007    AvailablePredsTy::iterator I =
1008      std::lower_bound(AvailablePreds.begin(), AvailablePreds.end(),
1009                       std::make_pair(P, (Value*)nullptr));
1010
1011    assert(I != AvailablePreds.end() && I->first == P &&
1012           "Didn't find entry for predecessor!");
1013
1014    PN->addIncoming(I->second, I->first);
1015  }
1016
1017  //cerr << "PRE: " << *LI << *PN << "\n";
1018
1019  LI->replaceAllUsesWith(PN);
1020  LI->eraseFromParent();
1021
1022  return true;
1023}
1024
1025/// FindMostPopularDest - The specified list contains multiple possible
1026/// threadable destinations.  Pick the one that occurs the most frequently in
1027/// the list.
1028static BasicBlock *
1029FindMostPopularDest(BasicBlock *BB,
1030                    const SmallVectorImpl<std::pair<BasicBlock*,
1031                                  BasicBlock*> > &PredToDestList) {
1032  assert(!PredToDestList.empty());
1033
1034  // Determine popularity.  If there are multiple possible destinations, we
1035  // explicitly choose to ignore 'undef' destinations.  We prefer to thread
1036  // blocks with known and real destinations to threading undef.  We'll handle
1037  // them later if interesting.
1038  DenseMap<BasicBlock*, unsigned> DestPopularity;
1039  for (unsigned i = 0, e = PredToDestList.size(); i != e; ++i)
1040    if (PredToDestList[i].second)
1041      DestPopularity[PredToDestList[i].second]++;
1042
1043  // Find the most popular dest.
1044  DenseMap<BasicBlock*, unsigned>::iterator DPI = DestPopularity.begin();
1045  BasicBlock *MostPopularDest = DPI->first;
1046  unsigned Popularity = DPI->second;
1047  SmallVector<BasicBlock*, 4> SamePopularity;
1048
1049  for (++DPI; DPI != DestPopularity.end(); ++DPI) {
1050    // If the popularity of this entry isn't higher than the popularity we've
1051    // seen so far, ignore it.
1052    if (DPI->second < Popularity)
1053      ; // ignore.
1054    else if (DPI->second == Popularity) {
1055      // If it is the same as what we've seen so far, keep track of it.
1056      SamePopularity.push_back(DPI->first);
1057    } else {
1058      // If it is more popular, remember it.
1059      SamePopularity.clear();
1060      MostPopularDest = DPI->first;
1061      Popularity = DPI->second;
1062    }
1063  }
1064
1065  // Okay, now we know the most popular destination.  If there is more than one
1066  // destination, we need to determine one.  This is arbitrary, but we need
1067  // to make a deterministic decision.  Pick the first one that appears in the
1068  // successor list.
1069  if (!SamePopularity.empty()) {
1070    SamePopularity.push_back(MostPopularDest);
1071    TerminatorInst *TI = BB->getTerminator();
1072    for (unsigned i = 0; ; ++i) {
1073      assert(i != TI->getNumSuccessors() && "Didn't find any successor!");
1074
1075      if (std::find(SamePopularity.begin(), SamePopularity.end(),
1076                    TI->getSuccessor(i)) == SamePopularity.end())
1077        continue;
1078
1079      MostPopularDest = TI->getSuccessor(i);
1080      break;
1081    }
1082  }
1083
1084  // Okay, we have finally picked the most popular destination.
1085  return MostPopularDest;
1086}
1087
1088bool JumpThreading::ProcessThreadableEdges(Value *Cond, BasicBlock *BB,
1089                                           ConstantPreference Preference) {
1090  // If threading this would thread across a loop header, don't even try to
1091  // thread the edge.
1092  if (LoopHeaders.count(BB))
1093    return false;
1094
1095  PredValueInfoTy PredValues;
1096  if (!ComputeValueKnownInPredecessors(Cond, BB, PredValues, Preference))
1097    return false;
1098
1099  assert(!PredValues.empty() &&
1100         "ComputeValueKnownInPredecessors returned true with no values");
1101
1102  DEBUG(dbgs() << "IN BB: " << *BB;
1103        for (unsigned i = 0, e = PredValues.size(); i != e; ++i) {
1104          dbgs() << "  BB '" << BB->getName() << "': FOUND condition = "
1105            << *PredValues[i].first
1106            << " for pred '" << PredValues[i].second->getName() << "'.\n";
1107        });
1108
1109  // Decide what we want to thread through.  Convert our list of known values to
1110  // a list of known destinations for each pred.  This also discards duplicate
1111  // predecessors and keeps track of the undefined inputs (which are represented
1112  // as a null dest in the PredToDestList).
1113  SmallPtrSet<BasicBlock*, 16> SeenPreds;
1114  SmallVector<std::pair<BasicBlock*, BasicBlock*>, 16> PredToDestList;
1115
1116  BasicBlock *OnlyDest = nullptr;
1117  BasicBlock *MultipleDestSentinel = (BasicBlock*)(intptr_t)~0ULL;
1118
1119  for (unsigned i = 0, e = PredValues.size(); i != e; ++i) {
1120    BasicBlock *Pred = PredValues[i].second;
1121    if (!SeenPreds.insert(Pred))
1122      continue;  // Duplicate predecessor entry.
1123
1124    // If the predecessor ends with an indirect goto, we can't change its
1125    // destination.
1126    if (isa<IndirectBrInst>(Pred->getTerminator()))
1127      continue;
1128
1129    Constant *Val = PredValues[i].first;
1130
1131    BasicBlock *DestBB;
1132    if (isa<UndefValue>(Val))
1133      DestBB = nullptr;
1134    else if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator()))
1135      DestBB = BI->getSuccessor(cast<ConstantInt>(Val)->isZero());
1136    else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator())) {
1137      DestBB = SI->findCaseValue(cast<ConstantInt>(Val)).getCaseSuccessor();
1138    } else {
1139      assert(isa<IndirectBrInst>(BB->getTerminator())
1140              && "Unexpected terminator");
1141      DestBB = cast<BlockAddress>(Val)->getBasicBlock();
1142    }
1143
1144    // If we have exactly one destination, remember it for efficiency below.
1145    if (PredToDestList.empty())
1146      OnlyDest = DestBB;
1147    else if (OnlyDest != DestBB)
1148      OnlyDest = MultipleDestSentinel;
1149
1150    PredToDestList.push_back(std::make_pair(Pred, DestBB));
1151  }
1152
1153  // If all edges were unthreadable, we fail.
1154  if (PredToDestList.empty())
1155    return false;
1156
1157  // Determine which is the most common successor.  If we have many inputs and
1158  // this block is a switch, we want to start by threading the batch that goes
1159  // to the most popular destination first.  If we only know about one
1160  // threadable destination (the common case) we can avoid this.
1161  BasicBlock *MostPopularDest = OnlyDest;
1162
1163  if (MostPopularDest == MultipleDestSentinel)
1164    MostPopularDest = FindMostPopularDest(BB, PredToDestList);
1165
1166  // Now that we know what the most popular destination is, factor all
1167  // predecessors that will jump to it into a single predecessor.
1168  SmallVector<BasicBlock*, 16> PredsToFactor;
1169  for (unsigned i = 0, e = PredToDestList.size(); i != e; ++i)
1170    if (PredToDestList[i].second == MostPopularDest) {
1171      BasicBlock *Pred = PredToDestList[i].first;
1172
1173      // This predecessor may be a switch or something else that has multiple
1174      // edges to the block.  Factor each of these edges by listing them
1175      // according to # occurrences in PredsToFactor.
1176      TerminatorInst *PredTI = Pred->getTerminator();
1177      for (unsigned i = 0, e = PredTI->getNumSuccessors(); i != e; ++i)
1178        if (PredTI->getSuccessor(i) == BB)
1179          PredsToFactor.push_back(Pred);
1180    }
1181
1182  // If the threadable edges are branching on an undefined value, we get to pick
1183  // the destination that these predecessors should get to.
1184  if (!MostPopularDest)
1185    MostPopularDest = BB->getTerminator()->
1186                            getSuccessor(GetBestDestForJumpOnUndef(BB));
1187
1188  // Ok, try to thread it!
1189  return ThreadEdge(BB, PredsToFactor, MostPopularDest);
1190}
1191
1192/// ProcessBranchOnPHI - We have an otherwise unthreadable conditional branch on
1193/// a PHI node in the current block.  See if there are any simplifications we
1194/// can do based on inputs to the phi node.
1195///
1196bool JumpThreading::ProcessBranchOnPHI(PHINode *PN) {
1197  BasicBlock *BB = PN->getParent();
1198
1199  // TODO: We could make use of this to do it once for blocks with common PHI
1200  // values.
1201  SmallVector<BasicBlock*, 1> PredBBs;
1202  PredBBs.resize(1);
1203
1204  // If any of the predecessor blocks end in an unconditional branch, we can
1205  // *duplicate* the conditional branch into that block in order to further
1206  // encourage jump threading and to eliminate cases where we have branch on a
1207  // phi of an icmp (branch on icmp is much better).
1208  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
1209    BasicBlock *PredBB = PN->getIncomingBlock(i);
1210    if (BranchInst *PredBr = dyn_cast<BranchInst>(PredBB->getTerminator()))
1211      if (PredBr->isUnconditional()) {
1212        PredBBs[0] = PredBB;
1213        // Try to duplicate BB into PredBB.
1214        if (DuplicateCondBranchOnPHIIntoPred(BB, PredBBs))
1215          return true;
1216      }
1217  }
1218
1219  return false;
1220}
1221
1222/// ProcessBranchOnXOR - We have an otherwise unthreadable conditional branch on
1223/// a xor instruction in the current block.  See if there are any
1224/// simplifications we can do based on inputs to the xor.
1225///
1226bool JumpThreading::ProcessBranchOnXOR(BinaryOperator *BO) {
1227  BasicBlock *BB = BO->getParent();
1228
1229  // If either the LHS or RHS of the xor is a constant, don't do this
1230  // optimization.
1231  if (isa<ConstantInt>(BO->getOperand(0)) ||
1232      isa<ConstantInt>(BO->getOperand(1)))
1233    return false;
1234
1235  // If the first instruction in BB isn't a phi, we won't be able to infer
1236  // anything special about any particular predecessor.
1237  if (!isa<PHINode>(BB->front()))
1238    return false;
1239
1240  // If we have a xor as the branch input to this block, and we know that the
1241  // LHS or RHS of the xor in any predecessor is true/false, then we can clone
1242  // the condition into the predecessor and fix that value to true, saving some
1243  // logical ops on that path and encouraging other paths to simplify.
1244  //
1245  // This copies something like this:
1246  //
1247  //  BB:
1248  //    %X = phi i1 [1],  [%X']
1249  //    %Y = icmp eq i32 %A, %B
1250  //    %Z = xor i1 %X, %Y
1251  //    br i1 %Z, ...
1252  //
1253  // Into:
1254  //  BB':
1255  //    %Y = icmp ne i32 %A, %B
1256  //    br i1 %Z, ...
1257
1258  PredValueInfoTy XorOpValues;
1259  bool isLHS = true;
1260  if (!ComputeValueKnownInPredecessors(BO->getOperand(0), BB, XorOpValues,
1261                                       WantInteger)) {
1262    assert(XorOpValues.empty());
1263    if (!ComputeValueKnownInPredecessors(BO->getOperand(1), BB, XorOpValues,
1264                                         WantInteger))
1265      return false;
1266    isLHS = false;
1267  }
1268
1269  assert(!XorOpValues.empty() &&
1270         "ComputeValueKnownInPredecessors returned true with no values");
1271
1272  // Scan the information to see which is most popular: true or false.  The
1273  // predecessors can be of the set true, false, or undef.
1274  unsigned NumTrue = 0, NumFalse = 0;
1275  for (unsigned i = 0, e = XorOpValues.size(); i != e; ++i) {
1276    if (isa<UndefValue>(XorOpValues[i].first))
1277      // Ignore undefs for the count.
1278      continue;
1279    if (cast<ConstantInt>(XorOpValues[i].first)->isZero())
1280      ++NumFalse;
1281    else
1282      ++NumTrue;
1283  }
1284
1285  // Determine which value to split on, true, false, or undef if neither.
1286  ConstantInt *SplitVal = nullptr;
1287  if (NumTrue > NumFalse)
1288    SplitVal = ConstantInt::getTrue(BB->getContext());
1289  else if (NumTrue != 0 || NumFalse != 0)
1290    SplitVal = ConstantInt::getFalse(BB->getContext());
1291
1292  // Collect all of the blocks that this can be folded into so that we can
1293  // factor this once and clone it once.
1294  SmallVector<BasicBlock*, 8> BlocksToFoldInto;
1295  for (unsigned i = 0, e = XorOpValues.size(); i != e; ++i) {
1296    if (XorOpValues[i].first != SplitVal &&
1297        !isa<UndefValue>(XorOpValues[i].first))
1298      continue;
1299
1300    BlocksToFoldInto.push_back(XorOpValues[i].second);
1301  }
1302
1303  // If we inferred a value for all of the predecessors, then duplication won't
1304  // help us.  However, we can just replace the LHS or RHS with the constant.
1305  if (BlocksToFoldInto.size() ==
1306      cast<PHINode>(BB->front()).getNumIncomingValues()) {
1307    if (!SplitVal) {
1308      // If all preds provide undef, just nuke the xor, because it is undef too.
1309      BO->replaceAllUsesWith(UndefValue::get(BO->getType()));
1310      BO->eraseFromParent();
1311    } else if (SplitVal->isZero()) {
1312      // If all preds provide 0, replace the xor with the other input.
1313      BO->replaceAllUsesWith(BO->getOperand(isLHS));
1314      BO->eraseFromParent();
1315    } else {
1316      // If all preds provide 1, set the computed value to 1.
1317      BO->setOperand(!isLHS, SplitVal);
1318    }
1319
1320    return true;
1321  }
1322
1323  // Try to duplicate BB into PredBB.
1324  return DuplicateCondBranchOnPHIIntoPred(BB, BlocksToFoldInto);
1325}
1326
1327
1328/// AddPHINodeEntriesForMappedBlock - We're adding 'NewPred' as a new
1329/// predecessor to the PHIBB block.  If it has PHI nodes, add entries for
1330/// NewPred using the entries from OldPred (suitably mapped).
1331static void AddPHINodeEntriesForMappedBlock(BasicBlock *PHIBB,
1332                                            BasicBlock *OldPred,
1333                                            BasicBlock *NewPred,
1334                                     DenseMap<Instruction*, Value*> &ValueMap) {
1335  for (BasicBlock::iterator PNI = PHIBB->begin();
1336       PHINode *PN = dyn_cast<PHINode>(PNI); ++PNI) {
1337    // Ok, we have a PHI node.  Figure out what the incoming value was for the
1338    // DestBlock.
1339    Value *IV = PN->getIncomingValueForBlock(OldPred);
1340
1341    // Remap the value if necessary.
1342    if (Instruction *Inst = dyn_cast<Instruction>(IV)) {
1343      DenseMap<Instruction*, Value*>::iterator I = ValueMap.find(Inst);
1344      if (I != ValueMap.end())
1345        IV = I->second;
1346    }
1347
1348    PN->addIncoming(IV, NewPred);
1349  }
1350}
1351
1352/// ThreadEdge - We have decided that it is safe and profitable to factor the
1353/// blocks in PredBBs to one predecessor, then thread an edge from it to SuccBB
1354/// across BB.  Transform the IR to reflect this change.
1355bool JumpThreading::ThreadEdge(BasicBlock *BB,
1356                               const SmallVectorImpl<BasicBlock*> &PredBBs,
1357                               BasicBlock *SuccBB) {
1358  // If threading to the same block as we come from, we would infinite loop.
1359  if (SuccBB == BB) {
1360    DEBUG(dbgs() << "  Not threading across BB '" << BB->getName()
1361          << "' - would thread to self!\n");
1362    return false;
1363  }
1364
1365  // If threading this would thread across a loop header, don't thread the edge.
1366  // See the comments above FindLoopHeaders for justifications and caveats.
1367  if (LoopHeaders.count(BB)) {
1368    DEBUG(dbgs() << "  Not threading across loop header BB '" << BB->getName()
1369          << "' to dest BB '" << SuccBB->getName()
1370          << "' - it might create an irreducible loop!\n");
1371    return false;
1372  }
1373
1374  unsigned JumpThreadCost = getJumpThreadDuplicationCost(BB, Threshold);
1375  if (JumpThreadCost > Threshold) {
1376    DEBUG(dbgs() << "  Not threading BB '" << BB->getName()
1377          << "' - Cost is too high: " << JumpThreadCost << "\n");
1378    return false;
1379  }
1380
1381  // And finally, do it!  Start by factoring the predecessors is needed.
1382  BasicBlock *PredBB;
1383  if (PredBBs.size() == 1)
1384    PredBB = PredBBs[0];
1385  else {
1386    DEBUG(dbgs() << "  Factoring out " << PredBBs.size()
1387          << " common predecessors.\n");
1388    PredBB = SplitBlockPredecessors(BB, PredBBs, ".thr_comm", this);
1389  }
1390
1391  // And finally, do it!
1392  DEBUG(dbgs() << "  Threading edge from '" << PredBB->getName() << "' to '"
1393        << SuccBB->getName() << "' with cost: " << JumpThreadCost
1394        << ", across block:\n    "
1395        << *BB << "\n");
1396
1397  LVI->threadEdge(PredBB, BB, SuccBB);
1398
1399  // We are going to have to map operands from the original BB block to the new
1400  // copy of the block 'NewBB'.  If there are PHI nodes in BB, evaluate them to
1401  // account for entry from PredBB.
1402  DenseMap<Instruction*, Value*> ValueMapping;
1403
1404  BasicBlock *NewBB = BasicBlock::Create(BB->getContext(),
1405                                         BB->getName()+".thread",
1406                                         BB->getParent(), BB);
1407  NewBB->moveAfter(PredBB);
1408
1409  BasicBlock::iterator BI = BB->begin();
1410  for (; PHINode *PN = dyn_cast<PHINode>(BI); ++BI)
1411    ValueMapping[PN] = PN->getIncomingValueForBlock(PredBB);
1412
1413  // Clone the non-phi instructions of BB into NewBB, keeping track of the
1414  // mapping and using it to remap operands in the cloned instructions.
1415  for (; !isa<TerminatorInst>(BI); ++BI) {
1416    Instruction *New = BI->clone();
1417    New->setName(BI->getName());
1418    NewBB->getInstList().push_back(New);
1419    ValueMapping[BI] = New;
1420
1421    // Remap operands to patch up intra-block references.
1422    for (unsigned i = 0, e = New->getNumOperands(); i != e; ++i)
1423      if (Instruction *Inst = dyn_cast<Instruction>(New->getOperand(i))) {
1424        DenseMap<Instruction*, Value*>::iterator I = ValueMapping.find(Inst);
1425        if (I != ValueMapping.end())
1426          New->setOperand(i, I->second);
1427      }
1428  }
1429
1430  // We didn't copy the terminator from BB over to NewBB, because there is now
1431  // an unconditional jump to SuccBB.  Insert the unconditional jump.
1432  BranchInst *NewBI =BranchInst::Create(SuccBB, NewBB);
1433  NewBI->setDebugLoc(BB->getTerminator()->getDebugLoc());
1434
1435  // Check to see if SuccBB has PHI nodes. If so, we need to add entries to the
1436  // PHI nodes for NewBB now.
1437  AddPHINodeEntriesForMappedBlock(SuccBB, BB, NewBB, ValueMapping);
1438
1439  // If there were values defined in BB that are used outside the block, then we
1440  // now have to update all uses of the value to use either the original value,
1441  // the cloned value, or some PHI derived value.  This can require arbitrary
1442  // PHI insertion, of which we are prepared to do, clean these up now.
1443  SSAUpdater SSAUpdate;
1444  SmallVector<Use*, 16> UsesToRename;
1445  for (BasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) {
1446    // Scan all uses of this instruction to see if it is used outside of its
1447    // block, and if so, record them in UsesToRename.
1448    for (Use &U : I->uses()) {
1449      Instruction *User = cast<Instruction>(U.getUser());
1450      if (PHINode *UserPN = dyn_cast<PHINode>(User)) {
1451        if (UserPN->getIncomingBlock(U) == BB)
1452          continue;
1453      } else if (User->getParent() == BB)
1454        continue;
1455
1456      UsesToRename.push_back(&U);
1457    }
1458
1459    // If there are no uses outside the block, we're done with this instruction.
1460    if (UsesToRename.empty())
1461      continue;
1462
1463    DEBUG(dbgs() << "JT: Renaming non-local uses of: " << *I << "\n");
1464
1465    // We found a use of I outside of BB.  Rename all uses of I that are outside
1466    // its block to be uses of the appropriate PHI node etc.  See ValuesInBlocks
1467    // with the two values we know.
1468    SSAUpdate.Initialize(I->getType(), I->getName());
1469    SSAUpdate.AddAvailableValue(BB, I);
1470    SSAUpdate.AddAvailableValue(NewBB, ValueMapping[I]);
1471
1472    while (!UsesToRename.empty())
1473      SSAUpdate.RewriteUse(*UsesToRename.pop_back_val());
1474    DEBUG(dbgs() << "\n");
1475  }
1476
1477
1478  // Ok, NewBB is good to go.  Update the terminator of PredBB to jump to
1479  // NewBB instead of BB.  This eliminates predecessors from BB, which requires
1480  // us to simplify any PHI nodes in BB.
1481  TerminatorInst *PredTerm = PredBB->getTerminator();
1482  for (unsigned i = 0, e = PredTerm->getNumSuccessors(); i != e; ++i)
1483    if (PredTerm->getSuccessor(i) == BB) {
1484      BB->removePredecessor(PredBB, true);
1485      PredTerm->setSuccessor(i, NewBB);
1486    }
1487
1488  // At this point, the IR is fully up to date and consistent.  Do a quick scan
1489  // over the new instructions and zap any that are constants or dead.  This
1490  // frequently happens because of phi translation.
1491  SimplifyInstructionsInBlock(NewBB, DL, TLI);
1492
1493  // Threaded an edge!
1494  ++NumThreads;
1495  return true;
1496}
1497
1498/// DuplicateCondBranchOnPHIIntoPred - PredBB contains an unconditional branch
1499/// to BB which contains an i1 PHI node and a conditional branch on that PHI.
1500/// If we can duplicate the contents of BB up into PredBB do so now, this
1501/// improves the odds that the branch will be on an analyzable instruction like
1502/// a compare.
1503bool JumpThreading::DuplicateCondBranchOnPHIIntoPred(BasicBlock *BB,
1504                                 const SmallVectorImpl<BasicBlock *> &PredBBs) {
1505  assert(!PredBBs.empty() && "Can't handle an empty set");
1506
1507  // If BB is a loop header, then duplicating this block outside the loop would
1508  // cause us to transform this into an irreducible loop, don't do this.
1509  // See the comments above FindLoopHeaders for justifications and caveats.
1510  if (LoopHeaders.count(BB)) {
1511    DEBUG(dbgs() << "  Not duplicating loop header '" << BB->getName()
1512          << "' into predecessor block '" << PredBBs[0]->getName()
1513          << "' - it might create an irreducible loop!\n");
1514    return false;
1515  }
1516
1517  unsigned DuplicationCost = getJumpThreadDuplicationCost(BB, Threshold);
1518  if (DuplicationCost > Threshold) {
1519    DEBUG(dbgs() << "  Not duplicating BB '" << BB->getName()
1520          << "' - Cost is too high: " << DuplicationCost << "\n");
1521    return false;
1522  }
1523
1524  // And finally, do it!  Start by factoring the predecessors is needed.
1525  BasicBlock *PredBB;
1526  if (PredBBs.size() == 1)
1527    PredBB = PredBBs[0];
1528  else {
1529    DEBUG(dbgs() << "  Factoring out " << PredBBs.size()
1530          << " common predecessors.\n");
1531    PredBB = SplitBlockPredecessors(BB, PredBBs, ".thr_comm", this);
1532  }
1533
1534  // Okay, we decided to do this!  Clone all the instructions in BB onto the end
1535  // of PredBB.
1536  DEBUG(dbgs() << "  Duplicating block '" << BB->getName() << "' into end of '"
1537        << PredBB->getName() << "' to eliminate branch on phi.  Cost: "
1538        << DuplicationCost << " block is:" << *BB << "\n");
1539
1540  // Unless PredBB ends with an unconditional branch, split the edge so that we
1541  // can just clone the bits from BB into the end of the new PredBB.
1542  BranchInst *OldPredBranch = dyn_cast<BranchInst>(PredBB->getTerminator());
1543
1544  if (!OldPredBranch || !OldPredBranch->isUnconditional()) {
1545    PredBB = SplitEdge(PredBB, BB, this);
1546    OldPredBranch = cast<BranchInst>(PredBB->getTerminator());
1547  }
1548
1549  // We are going to have to map operands from the original BB block into the
1550  // PredBB block.  Evaluate PHI nodes in BB.
1551  DenseMap<Instruction*, Value*> ValueMapping;
1552
1553  BasicBlock::iterator BI = BB->begin();
1554  for (; PHINode *PN = dyn_cast<PHINode>(BI); ++BI)
1555    ValueMapping[PN] = PN->getIncomingValueForBlock(PredBB);
1556
1557  // Clone the non-phi instructions of BB into PredBB, keeping track of the
1558  // mapping and using it to remap operands in the cloned instructions.
1559  for (; BI != BB->end(); ++BI) {
1560    Instruction *New = BI->clone();
1561
1562    // Remap operands to patch up intra-block references.
1563    for (unsigned i = 0, e = New->getNumOperands(); i != e; ++i)
1564      if (Instruction *Inst = dyn_cast<Instruction>(New->getOperand(i))) {
1565        DenseMap<Instruction*, Value*>::iterator I = ValueMapping.find(Inst);
1566        if (I != ValueMapping.end())
1567          New->setOperand(i, I->second);
1568      }
1569
1570    // If this instruction can be simplified after the operands are updated,
1571    // just use the simplified value instead.  This frequently happens due to
1572    // phi translation.
1573    if (Value *IV = SimplifyInstruction(New, DL)) {
1574      delete New;
1575      ValueMapping[BI] = IV;
1576    } else {
1577      // Otherwise, insert the new instruction into the block.
1578      New->setName(BI->getName());
1579      PredBB->getInstList().insert(OldPredBranch, New);
1580      ValueMapping[BI] = New;
1581    }
1582  }
1583
1584  // Check to see if the targets of the branch had PHI nodes. If so, we need to
1585  // add entries to the PHI nodes for branch from PredBB now.
1586  BranchInst *BBBranch = cast<BranchInst>(BB->getTerminator());
1587  AddPHINodeEntriesForMappedBlock(BBBranch->getSuccessor(0), BB, PredBB,
1588                                  ValueMapping);
1589  AddPHINodeEntriesForMappedBlock(BBBranch->getSuccessor(1), BB, PredBB,
1590                                  ValueMapping);
1591
1592  // If there were values defined in BB that are used outside the block, then we
1593  // now have to update all uses of the value to use either the original value,
1594  // the cloned value, or some PHI derived value.  This can require arbitrary
1595  // PHI insertion, of which we are prepared to do, clean these up now.
1596  SSAUpdater SSAUpdate;
1597  SmallVector<Use*, 16> UsesToRename;
1598  for (BasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) {
1599    // Scan all uses of this instruction to see if it is used outside of its
1600    // block, and if so, record them in UsesToRename.
1601    for (Use &U : I->uses()) {
1602      Instruction *User = cast<Instruction>(U.getUser());
1603      if (PHINode *UserPN = dyn_cast<PHINode>(User)) {
1604        if (UserPN->getIncomingBlock(U) == BB)
1605          continue;
1606      } else if (User->getParent() == BB)
1607        continue;
1608
1609      UsesToRename.push_back(&U);
1610    }
1611
1612    // If there are no uses outside the block, we're done with this instruction.
1613    if (UsesToRename.empty())
1614      continue;
1615
1616    DEBUG(dbgs() << "JT: Renaming non-local uses of: " << *I << "\n");
1617
1618    // We found a use of I outside of BB.  Rename all uses of I that are outside
1619    // its block to be uses of the appropriate PHI node etc.  See ValuesInBlocks
1620    // with the two values we know.
1621    SSAUpdate.Initialize(I->getType(), I->getName());
1622    SSAUpdate.AddAvailableValue(BB, I);
1623    SSAUpdate.AddAvailableValue(PredBB, ValueMapping[I]);
1624
1625    while (!UsesToRename.empty())
1626      SSAUpdate.RewriteUse(*UsesToRename.pop_back_val());
1627    DEBUG(dbgs() << "\n");
1628  }
1629
1630  // PredBB no longer jumps to BB, remove entries in the PHI node for the edge
1631  // that we nuked.
1632  BB->removePredecessor(PredBB, true);
1633
1634  // Remove the unconditional branch at the end of the PredBB block.
1635  OldPredBranch->eraseFromParent();
1636
1637  ++NumDupes;
1638  return true;
1639}
1640
1641/// TryToUnfoldSelect - Look for blocks of the form
1642/// bb1:
1643///   %a = select
1644///   br bb
1645///
1646/// bb2:
1647///   %p = phi [%a, %bb] ...
1648///   %c = icmp %p
1649///   br i1 %c
1650///
1651/// And expand the select into a branch structure if one of its arms allows %c
1652/// to be folded. This later enables threading from bb1 over bb2.
1653bool JumpThreading::TryToUnfoldSelect(CmpInst *CondCmp, BasicBlock *BB) {
1654  BranchInst *CondBr = dyn_cast<BranchInst>(BB->getTerminator());
1655  PHINode *CondLHS = dyn_cast<PHINode>(CondCmp->getOperand(0));
1656  Constant *CondRHS = cast<Constant>(CondCmp->getOperand(1));
1657
1658  if (!CondBr || !CondBr->isConditional() || !CondLHS ||
1659      CondLHS->getParent() != BB)
1660    return false;
1661
1662  for (unsigned I = 0, E = CondLHS->getNumIncomingValues(); I != E; ++I) {
1663    BasicBlock *Pred = CondLHS->getIncomingBlock(I);
1664    SelectInst *SI = dyn_cast<SelectInst>(CondLHS->getIncomingValue(I));
1665
1666    // Look if one of the incoming values is a select in the corresponding
1667    // predecessor.
1668    if (!SI || SI->getParent() != Pred || !SI->hasOneUse())
1669      continue;
1670
1671    BranchInst *PredTerm = dyn_cast<BranchInst>(Pred->getTerminator());
1672    if (!PredTerm || !PredTerm->isUnconditional())
1673      continue;
1674
1675    // Now check if one of the select values would allow us to constant fold the
1676    // terminator in BB. We don't do the transform if both sides fold, those
1677    // cases will be threaded in any case.
1678    LazyValueInfo::Tristate LHSFolds =
1679        LVI->getPredicateOnEdge(CondCmp->getPredicate(), SI->getOperand(1),
1680                                CondRHS, Pred, BB);
1681    LazyValueInfo::Tristate RHSFolds =
1682        LVI->getPredicateOnEdge(CondCmp->getPredicate(), SI->getOperand(2),
1683                                CondRHS, Pred, BB);
1684    if ((LHSFolds != LazyValueInfo::Unknown ||
1685         RHSFolds != LazyValueInfo::Unknown) &&
1686        LHSFolds != RHSFolds) {
1687      // Expand the select.
1688      //
1689      // Pred --
1690      //  |    v
1691      //  |  NewBB
1692      //  |    |
1693      //  |-----
1694      //  v
1695      // BB
1696      BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "select.unfold",
1697                                             BB->getParent(), BB);
1698      // Move the unconditional branch to NewBB.
1699      PredTerm->removeFromParent();
1700      NewBB->getInstList().insert(NewBB->end(), PredTerm);
1701      // Create a conditional branch and update PHI nodes.
1702      BranchInst::Create(NewBB, BB, SI->getCondition(), Pred);
1703      CondLHS->setIncomingValue(I, SI->getFalseValue());
1704      CondLHS->addIncoming(SI->getTrueValue(), NewBB);
1705      // The select is now dead.
1706      SI->eraseFromParent();
1707
1708      // Update any other PHI nodes in BB.
1709      for (BasicBlock::iterator BI = BB->begin();
1710           PHINode *Phi = dyn_cast<PHINode>(BI); ++BI)
1711        if (Phi != CondLHS)
1712          Phi->addIncoming(Phi->getIncomingValueForBlock(Pred), NewBB);
1713      return true;
1714    }
1715  }
1716  return false;
1717}
1718