1//===- JumpThreading.cpp - Thread control through conditional blocks ------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements the Jump Threading pass.
10//
11//===----------------------------------------------------------------------===//
12
13#include "llvm/Transforms/Scalar/JumpThreading.h"
14#include "llvm/ADT/DenseMap.h"
15#include "llvm/ADT/DenseSet.h"
16#include "llvm/ADT/Optional.h"
17#include "llvm/ADT/STLExtras.h"
18#include "llvm/ADT/SmallPtrSet.h"
19#include "llvm/ADT/SmallVector.h"
20#include "llvm/ADT/Statistic.h"
21#include "llvm/Analysis/AliasAnalysis.h"
22#include "llvm/Analysis/BlockFrequencyInfo.h"
23#include "llvm/Analysis/BranchProbabilityInfo.h"
24#include "llvm/Analysis/CFG.h"
25#include "llvm/Analysis/ConstantFolding.h"
26#include "llvm/Analysis/DomTreeUpdater.h"
27#include "llvm/Analysis/GlobalsModRef.h"
28#include "llvm/Analysis/GuardUtils.h"
29#include "llvm/Analysis/InstructionSimplify.h"
30#include "llvm/Analysis/LazyValueInfo.h"
31#include "llvm/Analysis/Loads.h"
32#include "llvm/Analysis/LoopInfo.h"
33#include "llvm/Analysis/TargetLibraryInfo.h"
34#include "llvm/Analysis/ValueTracking.h"
35#include "llvm/IR/BasicBlock.h"
36#include "llvm/IR/CFG.h"
37#include "llvm/IR/Constant.h"
38#include "llvm/IR/ConstantRange.h"
39#include "llvm/IR/Constants.h"
40#include "llvm/IR/DataLayout.h"
41#include "llvm/IR/Dominators.h"
42#include "llvm/IR/Function.h"
43#include "llvm/IR/InstrTypes.h"
44#include "llvm/IR/Instruction.h"
45#include "llvm/IR/Instructions.h"
46#include "llvm/IR/IntrinsicInst.h"
47#include "llvm/IR/Intrinsics.h"
48#include "llvm/IR/LLVMContext.h"
49#include "llvm/IR/MDBuilder.h"
50#include "llvm/IR/Metadata.h"
51#include "llvm/IR/Module.h"
52#include "llvm/IR/PassManager.h"
53#include "llvm/IR/PatternMatch.h"
54#include "llvm/IR/Type.h"
55#include "llvm/IR/Use.h"
56#include "llvm/IR/User.h"
57#include "llvm/IR/Value.h"
58#include "llvm/InitializePasses.h"
59#include "llvm/Pass.h"
60#include "llvm/Support/BlockFrequency.h"
61#include "llvm/Support/BranchProbability.h"
62#include "llvm/Support/Casting.h"
63#include "llvm/Support/CommandLine.h"
64#include "llvm/Support/Debug.h"
65#include "llvm/Support/raw_ostream.h"
66#include "llvm/Transforms/Scalar.h"
67#include "llvm/Transforms/Utils/BasicBlockUtils.h"
68#include "llvm/Transforms/Utils/Cloning.h"
69#include "llvm/Transforms/Utils/Local.h"
70#include "llvm/Transforms/Utils/SSAUpdater.h"
71#include "llvm/Transforms/Utils/ValueMapper.h"
72#include <algorithm>
73#include <cassert>
74#include <cstddef>
75#include <cstdint>
76#include <iterator>
77#include <memory>
78#include <utility>
79
80using namespace llvm;
81using namespace jumpthreading;
82
83#define DEBUG_TYPE "jump-threading"
84
85STATISTIC(NumThreads, "Number of jumps threaded");
86STATISTIC(NumFolds,   "Number of terminators folded");
87STATISTIC(NumDupes,   "Number of branch blocks duplicated to eliminate phi");
88
89static cl::opt<unsigned>
90BBDuplicateThreshold("jump-threading-threshold",
91          cl::desc("Max block size to duplicate for jump threading"),
92          cl::init(6), cl::Hidden);
93
94static cl::opt<unsigned>
95ImplicationSearchThreshold(
96  "jump-threading-implication-search-threshold",
97  cl::desc("The number of predecessors to search for a stronger "
98           "condition to use to thread over a weaker condition"),
99  cl::init(3), cl::Hidden);
100
101static cl::opt<bool> PrintLVIAfterJumpThreading(
102    "print-lvi-after-jump-threading",
103    cl::desc("Print the LazyValueInfo cache after JumpThreading"), cl::init(false),
104    cl::Hidden);
105
106static cl::opt<bool> ThreadAcrossLoopHeaders(
107    "jump-threading-across-loop-headers",
108    cl::desc("Allow JumpThreading to thread across loop headers, for testing"),
109    cl::init(false), cl::Hidden);
110
111
112namespace {
113
114  /// This pass performs 'jump threading', which looks at blocks that have
115  /// multiple predecessors and multiple successors.  If one or more of the
116  /// predecessors of the block can be proven to always jump to one of the
117  /// successors, we forward the edge from the predecessor to the successor by
118  /// duplicating the contents of this block.
119  ///
120  /// An example of when this can occur is code like this:
121  ///
122  ///   if () { ...
123  ///     X = 4;
124  ///   }
125  ///   if (X < 3) {
126  ///
127  /// In this case, the unconditional branch at the end of the first if can be
128  /// revectored to the false side of the second if.
129  class JumpThreading : public FunctionPass {
130    JumpThreadingPass Impl;
131
132  public:
133    static char ID; // Pass identification
134
135    JumpThreading(int T = -1) : FunctionPass(ID), Impl(T) {
136      initializeJumpThreadingPass(*PassRegistry::getPassRegistry());
137    }
138
139    bool runOnFunction(Function &F) override;
140
141    void getAnalysisUsage(AnalysisUsage &AU) const override {
142      AU.addRequired<DominatorTreeWrapperPass>();
143      AU.addPreserved<DominatorTreeWrapperPass>();
144      AU.addRequired<AAResultsWrapperPass>();
145      AU.addRequired<LazyValueInfoWrapperPass>();
146      AU.addPreserved<LazyValueInfoWrapperPass>();
147      AU.addPreserved<GlobalsAAWrapperPass>();
148      AU.addRequired<TargetLibraryInfoWrapperPass>();
149    }
150
151    void releaseMemory() override { Impl.releaseMemory(); }
152  };
153
154} // end anonymous namespace
155
156char JumpThreading::ID = 0;
157
158INITIALIZE_PASS_BEGIN(JumpThreading, "jump-threading",
159                "Jump Threading", false, false)
160INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
161INITIALIZE_PASS_DEPENDENCY(LazyValueInfoWrapperPass)
162INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
163INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
164INITIALIZE_PASS_END(JumpThreading, "jump-threading",
165                "Jump Threading", false, false)
166
167// Public interface to the Jump Threading pass
168FunctionPass *llvm::createJumpThreadingPass(int Threshold) {
169  return new JumpThreading(Threshold);
170}
171
172JumpThreadingPass::JumpThreadingPass(int T) {
173  BBDupThreshold = (T == -1) ? BBDuplicateThreshold : unsigned(T);
174}
175
176// Update branch probability information according to conditional
177// branch probability. This is usually made possible for cloned branches
178// in inline instances by the context specific profile in the caller.
179// For instance,
180//
181//  [Block PredBB]
182//  [Branch PredBr]
183//  if (t) {
184//     Block A;
185//  } else {
186//     Block B;
187//  }
188//
189//  [Block BB]
190//  cond = PN([true, %A], [..., %B]); // PHI node
191//  [Branch CondBr]
192//  if (cond) {
193//    ...  // P(cond == true) = 1%
194//  }
195//
196//  Here we know that when block A is taken, cond must be true, which means
197//      P(cond == true | A) = 1
198//
199//  Given that P(cond == true) = P(cond == true | A) * P(A) +
200//                               P(cond == true | B) * P(B)
201//  we get:
202//     P(cond == true ) = P(A) + P(cond == true | B) * P(B)
203//
204//  which gives us:
205//     P(A) is less than P(cond == true), i.e.
206//     P(t == true) <= P(cond == true)
207//
208//  In other words, if we know P(cond == true) is unlikely, we know
209//  that P(t == true) is also unlikely.
210//
211static void updatePredecessorProfileMetadata(PHINode *PN, BasicBlock *BB) {
212  BranchInst *CondBr = dyn_cast<BranchInst>(BB->getTerminator());
213  if (!CondBr)
214    return;
215
216  BranchProbability BP;
217  uint64_t TrueWeight, FalseWeight;
218  if (!CondBr->extractProfMetadata(TrueWeight, FalseWeight))
219    return;
220
221  // Returns the outgoing edge of the dominating predecessor block
222  // that leads to the PhiNode's incoming block:
223  auto GetPredOutEdge =
224      [](BasicBlock *IncomingBB,
225         BasicBlock *PhiBB) -> std::pair<BasicBlock *, BasicBlock *> {
226    auto *PredBB = IncomingBB;
227    auto *SuccBB = PhiBB;
228    SmallPtrSet<BasicBlock *, 16> Visited;
229    while (true) {
230      BranchInst *PredBr = dyn_cast<BranchInst>(PredBB->getTerminator());
231      if (PredBr && PredBr->isConditional())
232        return {PredBB, SuccBB};
233      Visited.insert(PredBB);
234      auto *SinglePredBB = PredBB->getSinglePredecessor();
235      if (!SinglePredBB)
236        return {nullptr, nullptr};
237
238      // Stop searching when SinglePredBB has been visited. It means we see
239      // an unreachable loop.
240      if (Visited.count(SinglePredBB))
241        return {nullptr, nullptr};
242
243      SuccBB = PredBB;
244      PredBB = SinglePredBB;
245    }
246  };
247
248  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
249    Value *PhiOpnd = PN->getIncomingValue(i);
250    ConstantInt *CI = dyn_cast<ConstantInt>(PhiOpnd);
251
252    if (!CI || !CI->getType()->isIntegerTy(1))
253      continue;
254
255    BP = (CI->isOne() ? BranchProbability::getBranchProbability(
256                            TrueWeight, TrueWeight + FalseWeight)
257                      : BranchProbability::getBranchProbability(
258                            FalseWeight, TrueWeight + FalseWeight));
259
260    auto PredOutEdge = GetPredOutEdge(PN->getIncomingBlock(i), BB);
261    if (!PredOutEdge.first)
262      return;
263
264    BasicBlock *PredBB = PredOutEdge.first;
265    BranchInst *PredBr = dyn_cast<BranchInst>(PredBB->getTerminator());
266    if (!PredBr)
267      return;
268
269    uint64_t PredTrueWeight, PredFalseWeight;
270    // FIXME: We currently only set the profile data when it is missing.
271    // With PGO, this can be used to refine even existing profile data with
272    // context information. This needs to be done after more performance
273    // testing.
274    if (PredBr->extractProfMetadata(PredTrueWeight, PredFalseWeight))
275      continue;
276
277    // We can not infer anything useful when BP >= 50%, because BP is the
278    // upper bound probability value.
279    if (BP >= BranchProbability(50, 100))
280      continue;
281
282    SmallVector<uint32_t, 2> Weights;
283    if (PredBr->getSuccessor(0) == PredOutEdge.second) {
284      Weights.push_back(BP.getNumerator());
285      Weights.push_back(BP.getCompl().getNumerator());
286    } else {
287      Weights.push_back(BP.getCompl().getNumerator());
288      Weights.push_back(BP.getNumerator());
289    }
290    PredBr->setMetadata(LLVMContext::MD_prof,
291                        MDBuilder(PredBr->getParent()->getContext())
292                            .createBranchWeights(Weights));
293  }
294}
295
296/// runOnFunction - Toplevel algorithm.
297bool JumpThreading::runOnFunction(Function &F) {
298  if (skipFunction(F))
299    return false;
300  auto TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI(F);
301  // Get DT analysis before LVI. When LVI is initialized it conditionally adds
302  // DT if it's available.
303  auto DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
304  auto LVI = &getAnalysis<LazyValueInfoWrapperPass>().getLVI();
305  auto AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
306  DomTreeUpdater DTU(*DT, DomTreeUpdater::UpdateStrategy::Lazy);
307  std::unique_ptr<BlockFrequencyInfo> BFI;
308  std::unique_ptr<BranchProbabilityInfo> BPI;
309  if (F.hasProfileData()) {
310    LoopInfo LI{DominatorTree(F)};
311    BPI.reset(new BranchProbabilityInfo(F, LI, TLI));
312    BFI.reset(new BlockFrequencyInfo(F, *BPI, LI));
313  }
314
315  bool Changed = Impl.runImpl(F, TLI, LVI, AA, &DTU, F.hasProfileData(),
316                              std::move(BFI), std::move(BPI));
317  if (PrintLVIAfterJumpThreading) {
318    dbgs() << "LVI for function '" << F.getName() << "':\n";
319    LVI->printLVI(F, *DT, dbgs());
320  }
321  return Changed;
322}
323
324PreservedAnalyses JumpThreadingPass::run(Function &F,
325                                         FunctionAnalysisManager &AM) {
326  auto &TLI = AM.getResult<TargetLibraryAnalysis>(F);
327  // Get DT analysis before LVI. When LVI is initialized it conditionally adds
328  // DT if it's available.
329  auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
330  auto &LVI = AM.getResult<LazyValueAnalysis>(F);
331  auto &AA = AM.getResult<AAManager>(F);
332  DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
333
334  std::unique_ptr<BlockFrequencyInfo> BFI;
335  std::unique_ptr<BranchProbabilityInfo> BPI;
336  if (F.hasProfileData()) {
337    LoopInfo LI{DominatorTree(F)};
338    BPI.reset(new BranchProbabilityInfo(F, LI, &TLI));
339    BFI.reset(new BlockFrequencyInfo(F, *BPI, LI));
340  }
341
342  bool Changed = runImpl(F, &TLI, &LVI, &AA, &DTU, F.hasProfileData(),
343                         std::move(BFI), std::move(BPI));
344
345  if (!Changed)
346    return PreservedAnalyses::all();
347  PreservedAnalyses PA;
348  PA.preserve<GlobalsAA>();
349  PA.preserve<DominatorTreeAnalysis>();
350  PA.preserve<LazyValueAnalysis>();
351  return PA;
352}
353
354bool JumpThreadingPass::runImpl(Function &F, TargetLibraryInfo *TLI_,
355                                LazyValueInfo *LVI_, AliasAnalysis *AA_,
356                                DomTreeUpdater *DTU_, bool HasProfileData_,
357                                std::unique_ptr<BlockFrequencyInfo> BFI_,
358                                std::unique_ptr<BranchProbabilityInfo> BPI_) {
359  LLVM_DEBUG(dbgs() << "Jump threading on function '" << F.getName() << "'\n");
360  TLI = TLI_;
361  LVI = LVI_;
362  AA = AA_;
363  DTU = DTU_;
364  BFI.reset();
365  BPI.reset();
366  // When profile data is available, we need to update edge weights after
367  // successful jump threading, which requires both BPI and BFI being available.
368  HasProfileData = HasProfileData_;
369  auto *GuardDecl = F.getParent()->getFunction(
370      Intrinsic::getName(Intrinsic::experimental_guard));
371  HasGuards = GuardDecl && !GuardDecl->use_empty();
372  if (HasProfileData) {
373    BPI = std::move(BPI_);
374    BFI = std::move(BFI_);
375  }
376
377  // JumpThreading must not processes blocks unreachable from entry. It's a
378  // waste of compute time and can potentially lead to hangs.
379  SmallPtrSet<BasicBlock *, 16> Unreachable;
380  assert(DTU && "DTU isn't passed into JumpThreading before using it.");
381  assert(DTU->hasDomTree() && "JumpThreading relies on DomTree to proceed.");
382  DominatorTree &DT = DTU->getDomTree();
383  for (auto &BB : F)
384    if (!DT.isReachableFromEntry(&BB))
385      Unreachable.insert(&BB);
386
387  if (!ThreadAcrossLoopHeaders)
388    FindLoopHeaders(F);
389
390  bool EverChanged = false;
391  bool Changed;
392  do {
393    Changed = false;
394    for (auto &BB : F) {
395      if (Unreachable.count(&BB))
396        continue;
397      while (ProcessBlock(&BB)) // Thread all of the branches we can over BB.
398        Changed = true;
399      // Stop processing BB if it's the entry or is now deleted. The following
400      // routines attempt to eliminate BB and locating a suitable replacement
401      // for the entry is non-trivial.
402      if (&BB == &F.getEntryBlock() || DTU->isBBPendingDeletion(&BB))
403        continue;
404
405      if (pred_empty(&BB)) {
406        // When ProcessBlock makes BB unreachable it doesn't bother to fix up
407        // the instructions in it. We must remove BB to prevent invalid IR.
408        LLVM_DEBUG(dbgs() << "  JT: Deleting dead block '" << BB.getName()
409                          << "' with terminator: " << *BB.getTerminator()
410                          << '\n');
411        LoopHeaders.erase(&BB);
412        LVI->eraseBlock(&BB);
413        DeleteDeadBlock(&BB, DTU);
414        Changed = true;
415        continue;
416      }
417
418      // ProcessBlock doesn't thread BBs with unconditional TIs. However, if BB
419      // is "almost empty", we attempt to merge BB with its sole successor.
420      auto *BI = dyn_cast<BranchInst>(BB.getTerminator());
421      if (BI && BI->isUnconditional() &&
422          // The terminator must be the only non-phi instruction in BB.
423          BB.getFirstNonPHIOrDbg()->isTerminator() &&
424          // Don't alter Loop headers and latches to ensure another pass can
425          // detect and transform nested loops later.
426          !LoopHeaders.count(&BB) && !LoopHeaders.count(BI->getSuccessor(0)) &&
427          TryToSimplifyUncondBranchFromEmptyBlock(&BB, DTU)) {
428        // BB is valid for cleanup here because we passed in DTU. F remains
429        // BB's parent until a DTU->getDomTree() event.
430        LVI->eraseBlock(&BB);
431        Changed = true;
432      }
433    }
434    EverChanged |= Changed;
435  } while (Changed);
436
437  LoopHeaders.clear();
438  // Flush only the Dominator Tree.
439  DTU->getDomTree();
440  LVI->enableDT();
441  return EverChanged;
442}
443
444// Replace uses of Cond with ToVal when safe to do so. If all uses are
445// replaced, we can remove Cond. We cannot blindly replace all uses of Cond
446// because we may incorrectly replace uses when guards/assumes are uses of
447// of `Cond` and we used the guards/assume to reason about the `Cond` value
448// at the end of block. RAUW unconditionally replaces all uses
449// including the guards/assumes themselves and the uses before the
450// guard/assume.
451static void ReplaceFoldableUses(Instruction *Cond, Value *ToVal) {
452  assert(Cond->getType() == ToVal->getType());
453  auto *BB = Cond->getParent();
454  // We can unconditionally replace all uses in non-local blocks (i.e. uses
455  // strictly dominated by BB), since LVI information is true from the
456  // terminator of BB.
457  replaceNonLocalUsesWith(Cond, ToVal);
458  for (Instruction &I : reverse(*BB)) {
459    // Reached the Cond whose uses we are trying to replace, so there are no
460    // more uses.
461    if (&I == Cond)
462      break;
463    // We only replace uses in instructions that are guaranteed to reach the end
464    // of BB, where we know Cond is ToVal.
465    if (!isGuaranteedToTransferExecutionToSuccessor(&I))
466      break;
467    I.replaceUsesOfWith(Cond, ToVal);
468  }
469  if (Cond->use_empty() && !Cond->mayHaveSideEffects())
470    Cond->eraseFromParent();
471}
472
473/// Return the cost of duplicating a piece of this block from first non-phi
474/// and before StopAt instruction to thread across it. Stop scanning the block
475/// when exceeding the threshold. If duplication is impossible, returns ~0U.
476static unsigned getJumpThreadDuplicationCost(BasicBlock *BB,
477                                             Instruction *StopAt,
478                                             unsigned Threshold) {
479  assert(StopAt->getParent() == BB && "Not an instruction from proper BB?");
480  /// Ignore PHI nodes, these will be flattened when duplication happens.
481  BasicBlock::const_iterator I(BB->getFirstNonPHI());
482
483  // FIXME: THREADING will delete values that are just used to compute the
484  // branch, so they shouldn't count against the duplication cost.
485
486  unsigned Bonus = 0;
487  if (BB->getTerminator() == StopAt) {
488    // Threading through a switch statement is particularly profitable.  If this
489    // block ends in a switch, decrease its cost to make it more likely to
490    // happen.
491    if (isa<SwitchInst>(StopAt))
492      Bonus = 6;
493
494    // The same holds for indirect branches, but slightly more so.
495    if (isa<IndirectBrInst>(StopAt))
496      Bonus = 8;
497  }
498
499  // Bump the threshold up so the early exit from the loop doesn't skip the
500  // terminator-based Size adjustment at the end.
501  Threshold += Bonus;
502
503  // Sum up the cost of each instruction until we get to the terminator.  Don't
504  // include the terminator because the copy won't include it.
505  unsigned Size = 0;
506  for (; &*I != StopAt; ++I) {
507
508    // Stop scanning the block if we've reached the threshold.
509    if (Size > Threshold)
510      return Size;
511
512    // Debugger intrinsics don't incur code size.
513    if (isa<DbgInfoIntrinsic>(I)) continue;
514
515    // If this is a pointer->pointer bitcast, it is free.
516    if (isa<BitCastInst>(I) && I->getType()->isPointerTy())
517      continue;
518
519    // Bail out if this instruction gives back a token type, it is not possible
520    // to duplicate it if it is used outside this BB.
521    if (I->getType()->isTokenTy() && I->isUsedOutsideOfBlock(BB))
522      return ~0U;
523
524    // All other instructions count for at least one unit.
525    ++Size;
526
527    // Calls are more expensive.  If they are non-intrinsic calls, we model them
528    // as having cost of 4.  If they are a non-vector intrinsic, we model them
529    // as having cost of 2 total, and if they are a vector intrinsic, we model
530    // them as having cost 1.
531    if (const CallInst *CI = dyn_cast<CallInst>(I)) {
532      if (CI->cannotDuplicate() || CI->isConvergent())
533        // Blocks with NoDuplicate are modelled as having infinite cost, so they
534        // are never duplicated.
535        return ~0U;
536      else if (!isa<IntrinsicInst>(CI))
537        Size += 3;
538      else if (!CI->getType()->isVectorTy())
539        Size += 1;
540    }
541  }
542
543  return Size > Bonus ? Size - Bonus : 0;
544}
545
546/// FindLoopHeaders - We do not want jump threading to turn proper loop
547/// structures into irreducible loops.  Doing this breaks up the loop nesting
548/// hierarchy and pessimizes later transformations.  To prevent this from
549/// happening, we first have to find the loop headers.  Here we approximate this
550/// by finding targets of backedges in the CFG.
551///
552/// Note that there definitely are cases when we want to allow threading of
553/// edges across a loop header.  For example, threading a jump from outside the
554/// loop (the preheader) to an exit block of the loop is definitely profitable.
555/// It is also almost always profitable to thread backedges from within the loop
556/// to exit blocks, and is often profitable to thread backedges to other blocks
557/// within the loop (forming a nested loop).  This simple analysis is not rich
558/// enough to track all of these properties and keep it up-to-date as the CFG
559/// mutates, so we don't allow any of these transformations.
560void JumpThreadingPass::FindLoopHeaders(Function &F) {
561  SmallVector<std::pair<const BasicBlock*,const BasicBlock*>, 32> Edges;
562  FindFunctionBackedges(F, Edges);
563
564  for (const auto &Edge : Edges)
565    LoopHeaders.insert(Edge.second);
566}
567
568/// getKnownConstant - Helper method to determine if we can thread over a
569/// terminator with the given value as its condition, and if so what value to
570/// use for that. What kind of value this is depends on whether we want an
571/// integer or a block address, but an undef is always accepted.
572/// Returns null if Val is null or not an appropriate constant.
573static Constant *getKnownConstant(Value *Val, ConstantPreference Preference) {
574  if (!Val)
575    return nullptr;
576
577  // Undef is "known" enough.
578  if (UndefValue *U = dyn_cast<UndefValue>(Val))
579    return U;
580
581  if (Preference == WantBlockAddress)
582    return dyn_cast<BlockAddress>(Val->stripPointerCasts());
583
584  return dyn_cast<ConstantInt>(Val);
585}
586
587/// ComputeValueKnownInPredecessors - Given a basic block BB and a value V, see
588/// if we can infer that the value is a known ConstantInt/BlockAddress or undef
589/// in any of our predecessors.  If so, return the known list of value and pred
590/// BB in the result vector.
591///
592/// This returns true if there were any known values.
593bool JumpThreadingPass::ComputeValueKnownInPredecessorsImpl(
594    Value *V, BasicBlock *BB, PredValueInfo &Result,
595    ConstantPreference Preference,
596    DenseSet<std::pair<Value *, BasicBlock *>> &RecursionSet,
597    Instruction *CxtI) {
598  // This method walks up use-def chains recursively.  Because of this, we could
599  // get into an infinite loop going around loops in the use-def chain.  To
600  // prevent this, keep track of what (value, block) pairs we've already visited
601  // and terminate the search if we loop back to them
602  if (!RecursionSet.insert(std::make_pair(V, BB)).second)
603    return false;
604
605  // If V is a constant, then it is known in all predecessors.
606  if (Constant *KC = getKnownConstant(V, Preference)) {
607    for (BasicBlock *Pred : predecessors(BB))
608      Result.push_back(std::make_pair(KC, Pred));
609
610    return !Result.empty();
611  }
612
613  // If V is a non-instruction value, or an instruction in a different block,
614  // then it can't be derived from a PHI.
615  Instruction *I = dyn_cast<Instruction>(V);
616  if (!I || I->getParent() != BB) {
617
618    // Okay, if this is a live-in value, see if it has a known value at the end
619    // of any of our predecessors.
620    //
621    // FIXME: This should be an edge property, not a block end property.
622    /// TODO: Per PR2563, we could infer value range information about a
623    /// predecessor based on its terminator.
624    //
625    // FIXME: change this to use the more-rich 'getPredicateOnEdge' method if
626    // "I" is a non-local compare-with-a-constant instruction.  This would be
627    // able to handle value inequalities better, for example if the compare is
628    // "X < 4" and "X < 3" is known true but "X < 4" itself is not available.
629    // Perhaps getConstantOnEdge should be smart enough to do this?
630
631    if (DTU->hasPendingDomTreeUpdates())
632      LVI->disableDT();
633    else
634      LVI->enableDT();
635    for (BasicBlock *P : predecessors(BB)) {
636      // If the value is known by LazyValueInfo to be a constant in a
637      // predecessor, use that information to try to thread this block.
638      Constant *PredCst = LVI->getConstantOnEdge(V, P, BB, CxtI);
639      if (Constant *KC = getKnownConstant(PredCst, Preference))
640        Result.push_back(std::make_pair(KC, P));
641    }
642
643    return !Result.empty();
644  }
645
646  /// If I is a PHI node, then we know the incoming values for any constants.
647  if (PHINode *PN = dyn_cast<PHINode>(I)) {
648    if (DTU->hasPendingDomTreeUpdates())
649      LVI->disableDT();
650    else
651      LVI->enableDT();
652    for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
653      Value *InVal = PN->getIncomingValue(i);
654      if (Constant *KC = getKnownConstant(InVal, Preference)) {
655        Result.push_back(std::make_pair(KC, PN->getIncomingBlock(i)));
656      } else {
657        Constant *CI = LVI->getConstantOnEdge(InVal,
658                                              PN->getIncomingBlock(i),
659                                              BB, CxtI);
660        if (Constant *KC = getKnownConstant(CI, Preference))
661          Result.push_back(std::make_pair(KC, PN->getIncomingBlock(i)));
662      }
663    }
664
665    return !Result.empty();
666  }
667
668  // Handle Cast instructions.  Only see through Cast when the source operand is
669  // PHI or Cmp to save the compilation time.
670  if (CastInst *CI = dyn_cast<CastInst>(I)) {
671    Value *Source = CI->getOperand(0);
672    if (!isa<PHINode>(Source) && !isa<CmpInst>(Source))
673      return false;
674    ComputeValueKnownInPredecessorsImpl(Source, BB, Result, Preference,
675                                        RecursionSet, CxtI);
676    if (Result.empty())
677      return false;
678
679    // Convert the known values.
680    for (auto &R : Result)
681      R.first = ConstantExpr::getCast(CI->getOpcode(), R.first, CI->getType());
682
683    return true;
684  }
685
686  // Handle some boolean conditions.
687  if (I->getType()->getPrimitiveSizeInBits() == 1) {
688    assert(Preference == WantInteger && "One-bit non-integer type?");
689    // X | true -> true
690    // X & false -> false
691    if (I->getOpcode() == Instruction::Or ||
692        I->getOpcode() == Instruction::And) {
693      PredValueInfoTy LHSVals, RHSVals;
694
695      ComputeValueKnownInPredecessorsImpl(I->getOperand(0), BB, LHSVals,
696                                      WantInteger, RecursionSet, CxtI);
697      ComputeValueKnownInPredecessorsImpl(I->getOperand(1), BB, RHSVals,
698                                          WantInteger, RecursionSet, CxtI);
699
700      if (LHSVals.empty() && RHSVals.empty())
701        return false;
702
703      ConstantInt *InterestingVal;
704      if (I->getOpcode() == Instruction::Or)
705        InterestingVal = ConstantInt::getTrue(I->getContext());
706      else
707        InterestingVal = ConstantInt::getFalse(I->getContext());
708
709      SmallPtrSet<BasicBlock*, 4> LHSKnownBBs;
710
711      // Scan for the sentinel.  If we find an undef, force it to the
712      // interesting value: x|undef -> true and x&undef -> false.
713      for (const auto &LHSVal : LHSVals)
714        if (LHSVal.first == InterestingVal || isa<UndefValue>(LHSVal.first)) {
715          Result.emplace_back(InterestingVal, LHSVal.second);
716          LHSKnownBBs.insert(LHSVal.second);
717        }
718      for (const auto &RHSVal : RHSVals)
719        if (RHSVal.first == InterestingVal || isa<UndefValue>(RHSVal.first)) {
720          // If we already inferred a value for this block on the LHS, don't
721          // re-add it.
722          if (!LHSKnownBBs.count(RHSVal.second))
723            Result.emplace_back(InterestingVal, RHSVal.second);
724        }
725
726      return !Result.empty();
727    }
728
729    // Handle the NOT form of XOR.
730    if (I->getOpcode() == Instruction::Xor &&
731        isa<ConstantInt>(I->getOperand(1)) &&
732        cast<ConstantInt>(I->getOperand(1))->isOne()) {
733      ComputeValueKnownInPredecessorsImpl(I->getOperand(0), BB, Result,
734                                          WantInteger, RecursionSet, CxtI);
735      if (Result.empty())
736        return false;
737
738      // Invert the known values.
739      for (auto &R : Result)
740        R.first = ConstantExpr::getNot(R.first);
741
742      return true;
743    }
744
745  // Try to simplify some other binary operator values.
746  } else if (BinaryOperator *BO = dyn_cast<BinaryOperator>(I)) {
747    assert(Preference != WantBlockAddress
748            && "A binary operator creating a block address?");
749    if (ConstantInt *CI = dyn_cast<ConstantInt>(BO->getOperand(1))) {
750      PredValueInfoTy LHSVals;
751      ComputeValueKnownInPredecessorsImpl(BO->getOperand(0), BB, LHSVals,
752                                          WantInteger, RecursionSet, CxtI);
753
754      // Try to use constant folding to simplify the binary operator.
755      for (const auto &LHSVal : LHSVals) {
756        Constant *V = LHSVal.first;
757        Constant *Folded = ConstantExpr::get(BO->getOpcode(), V, CI);
758
759        if (Constant *KC = getKnownConstant(Folded, WantInteger))
760          Result.push_back(std::make_pair(KC, LHSVal.second));
761      }
762    }
763
764    return !Result.empty();
765  }
766
767  // Handle compare with phi operand, where the PHI is defined in this block.
768  if (CmpInst *Cmp = dyn_cast<CmpInst>(I)) {
769    assert(Preference == WantInteger && "Compares only produce integers");
770    Type *CmpType = Cmp->getType();
771    Value *CmpLHS = Cmp->getOperand(0);
772    Value *CmpRHS = Cmp->getOperand(1);
773    CmpInst::Predicate Pred = Cmp->getPredicate();
774
775    PHINode *PN = dyn_cast<PHINode>(CmpLHS);
776    if (!PN)
777      PN = dyn_cast<PHINode>(CmpRHS);
778    if (PN && PN->getParent() == BB) {
779      const DataLayout &DL = PN->getModule()->getDataLayout();
780      // We can do this simplification if any comparisons fold to true or false.
781      // See if any do.
782      if (DTU->hasPendingDomTreeUpdates())
783        LVI->disableDT();
784      else
785        LVI->enableDT();
786      for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
787        BasicBlock *PredBB = PN->getIncomingBlock(i);
788        Value *LHS, *RHS;
789        if (PN == CmpLHS) {
790          LHS = PN->getIncomingValue(i);
791          RHS = CmpRHS->DoPHITranslation(BB, PredBB);
792        } else {
793          LHS = CmpLHS->DoPHITranslation(BB, PredBB);
794          RHS = PN->getIncomingValue(i);
795        }
796        Value *Res = SimplifyCmpInst(Pred, LHS, RHS, {DL});
797        if (!Res) {
798          if (!isa<Constant>(RHS))
799            continue;
800
801          // getPredicateOnEdge call will make no sense if LHS is defined in BB.
802          auto LHSInst = dyn_cast<Instruction>(LHS);
803          if (LHSInst && LHSInst->getParent() == BB)
804            continue;
805
806          LazyValueInfo::Tristate
807            ResT = LVI->getPredicateOnEdge(Pred, LHS,
808                                           cast<Constant>(RHS), PredBB, BB,
809                                           CxtI ? CxtI : Cmp);
810          if (ResT == LazyValueInfo::Unknown)
811            continue;
812          Res = ConstantInt::get(Type::getInt1Ty(LHS->getContext()), ResT);
813        }
814
815        if (Constant *KC = getKnownConstant(Res, WantInteger))
816          Result.push_back(std::make_pair(KC, PredBB));
817      }
818
819      return !Result.empty();
820    }
821
822    // If comparing a live-in value against a constant, see if we know the
823    // live-in value on any predecessors.
824    if (isa<Constant>(CmpRHS) && !CmpType->isVectorTy()) {
825      Constant *CmpConst = cast<Constant>(CmpRHS);
826
827      if (!isa<Instruction>(CmpLHS) ||
828          cast<Instruction>(CmpLHS)->getParent() != BB) {
829        if (DTU->hasPendingDomTreeUpdates())
830          LVI->disableDT();
831        else
832          LVI->enableDT();
833        for (BasicBlock *P : predecessors(BB)) {
834          // If the value is known by LazyValueInfo to be a constant in a
835          // predecessor, use that information to try to thread this block.
836          LazyValueInfo::Tristate Res =
837            LVI->getPredicateOnEdge(Pred, CmpLHS,
838                                    CmpConst, P, BB, CxtI ? CxtI : Cmp);
839          if (Res == LazyValueInfo::Unknown)
840            continue;
841
842          Constant *ResC = ConstantInt::get(CmpType, Res);
843          Result.push_back(std::make_pair(ResC, P));
844        }
845
846        return !Result.empty();
847      }
848
849      // InstCombine can fold some forms of constant range checks into
850      // (icmp (add (x, C1)), C2). See if we have we have such a thing with
851      // x as a live-in.
852      {
853        using namespace PatternMatch;
854
855        Value *AddLHS;
856        ConstantInt *AddConst;
857        if (isa<ConstantInt>(CmpConst) &&
858            match(CmpLHS, m_Add(m_Value(AddLHS), m_ConstantInt(AddConst)))) {
859          if (!isa<Instruction>(AddLHS) ||
860              cast<Instruction>(AddLHS)->getParent() != BB) {
861            if (DTU->hasPendingDomTreeUpdates())
862              LVI->disableDT();
863            else
864              LVI->enableDT();
865            for (BasicBlock *P : predecessors(BB)) {
866              // If the value is known by LazyValueInfo to be a ConstantRange in
867              // a predecessor, use that information to try to thread this
868              // block.
869              ConstantRange CR = LVI->getConstantRangeOnEdge(
870                  AddLHS, P, BB, CxtI ? CxtI : cast<Instruction>(CmpLHS));
871              // Propagate the range through the addition.
872              CR = CR.add(AddConst->getValue());
873
874              // Get the range where the compare returns true.
875              ConstantRange CmpRange = ConstantRange::makeExactICmpRegion(
876                  Pred, cast<ConstantInt>(CmpConst)->getValue());
877
878              Constant *ResC;
879              if (CmpRange.contains(CR))
880                ResC = ConstantInt::getTrue(CmpType);
881              else if (CmpRange.inverse().contains(CR))
882                ResC = ConstantInt::getFalse(CmpType);
883              else
884                continue;
885
886              Result.push_back(std::make_pair(ResC, P));
887            }
888
889            return !Result.empty();
890          }
891        }
892      }
893
894      // Try to find a constant value for the LHS of a comparison,
895      // and evaluate it statically if we can.
896      PredValueInfoTy LHSVals;
897      ComputeValueKnownInPredecessorsImpl(I->getOperand(0), BB, LHSVals,
898                                          WantInteger, RecursionSet, CxtI);
899
900      for (const auto &LHSVal : LHSVals) {
901        Constant *V = LHSVal.first;
902        Constant *Folded = ConstantExpr::getCompare(Pred, V, CmpConst);
903        if (Constant *KC = getKnownConstant(Folded, WantInteger))
904          Result.push_back(std::make_pair(KC, LHSVal.second));
905      }
906
907      return !Result.empty();
908    }
909  }
910
911  if (SelectInst *SI = dyn_cast<SelectInst>(I)) {
912    // Handle select instructions where at least one operand is a known constant
913    // and we can figure out the condition value for any predecessor block.
914    Constant *TrueVal = getKnownConstant(SI->getTrueValue(), Preference);
915    Constant *FalseVal = getKnownConstant(SI->getFalseValue(), Preference);
916    PredValueInfoTy Conds;
917    if ((TrueVal || FalseVal) &&
918        ComputeValueKnownInPredecessorsImpl(SI->getCondition(), BB, Conds,
919                                            WantInteger, RecursionSet, CxtI)) {
920      for (auto &C : Conds) {
921        Constant *Cond = C.first;
922
923        // Figure out what value to use for the condition.
924        bool KnownCond;
925        if (ConstantInt *CI = dyn_cast<ConstantInt>(Cond)) {
926          // A known boolean.
927          KnownCond = CI->isOne();
928        } else {
929          assert(isa<UndefValue>(Cond) && "Unexpected condition value");
930          // Either operand will do, so be sure to pick the one that's a known
931          // constant.
932          // FIXME: Do this more cleverly if both values are known constants?
933          KnownCond = (TrueVal != nullptr);
934        }
935
936        // See if the select has a known constant value for this predecessor.
937        if (Constant *Val = KnownCond ? TrueVal : FalseVal)
938          Result.push_back(std::make_pair(Val, C.second));
939      }
940
941      return !Result.empty();
942    }
943  }
944
945  // If all else fails, see if LVI can figure out a constant value for us.
946  if (DTU->hasPendingDomTreeUpdates())
947    LVI->disableDT();
948  else
949    LVI->enableDT();
950  Constant *CI = LVI->getConstant(V, BB, CxtI);
951  if (Constant *KC = getKnownConstant(CI, Preference)) {
952    for (BasicBlock *Pred : predecessors(BB))
953      Result.push_back(std::make_pair(KC, Pred));
954  }
955
956  return !Result.empty();
957}
958
959/// GetBestDestForBranchOnUndef - If we determine that the specified block ends
960/// in an undefined jump, decide which block is best to revector to.
961///
962/// Since we can pick an arbitrary destination, we pick the successor with the
963/// fewest predecessors.  This should reduce the in-degree of the others.
964static unsigned GetBestDestForJumpOnUndef(BasicBlock *BB) {
965  Instruction *BBTerm = BB->getTerminator();
966  unsigned MinSucc = 0;
967  BasicBlock *TestBB = BBTerm->getSuccessor(MinSucc);
968  // Compute the successor with the minimum number of predecessors.
969  unsigned MinNumPreds = pred_size(TestBB);
970  for (unsigned i = 1, e = BBTerm->getNumSuccessors(); i != e; ++i) {
971    TestBB = BBTerm->getSuccessor(i);
972    unsigned NumPreds = pred_size(TestBB);
973    if (NumPreds < MinNumPreds) {
974      MinSucc = i;
975      MinNumPreds = NumPreds;
976    }
977  }
978
979  return MinSucc;
980}
981
982static bool hasAddressTakenAndUsed(BasicBlock *BB) {
983  if (!BB->hasAddressTaken()) return false;
984
985  // If the block has its address taken, it may be a tree of dead constants
986  // hanging off of it.  These shouldn't keep the block alive.
987  BlockAddress *BA = BlockAddress::get(BB);
988  BA->removeDeadConstantUsers();
989  return !BA->use_empty();
990}
991
992/// ProcessBlock - If there are any predecessors whose control can be threaded
993/// through to a successor, transform them now.
994bool JumpThreadingPass::ProcessBlock(BasicBlock *BB) {
995  // If the block is trivially dead, just return and let the caller nuke it.
996  // This simplifies other transformations.
997  if (DTU->isBBPendingDeletion(BB) ||
998      (pred_empty(BB) && BB != &BB->getParent()->getEntryBlock()))
999    return false;
1000
1001  // If this block has a single predecessor, and if that pred has a single
1002  // successor, merge the blocks.  This encourages recursive jump threading
1003  // because now the condition in this block can be threaded through
1004  // predecessors of our predecessor block.
1005  if (MaybeMergeBasicBlockIntoOnlyPred(BB))
1006    return true;
1007
1008  if (TryToUnfoldSelectInCurrBB(BB))
1009    return true;
1010
1011  // Look if we can propagate guards to predecessors.
1012  if (HasGuards && ProcessGuards(BB))
1013    return true;
1014
1015  // What kind of constant we're looking for.
1016  ConstantPreference Preference = WantInteger;
1017
1018  // Look to see if the terminator is a conditional branch, switch or indirect
1019  // branch, if not we can't thread it.
1020  Value *Condition;
1021  Instruction *Terminator = BB->getTerminator();
1022  if (BranchInst *BI = dyn_cast<BranchInst>(Terminator)) {
1023    // Can't thread an unconditional jump.
1024    if (BI->isUnconditional()) return false;
1025    Condition = BI->getCondition();
1026  } else if (SwitchInst *SI = dyn_cast<SwitchInst>(Terminator)) {
1027    Condition = SI->getCondition();
1028  } else if (IndirectBrInst *IB = dyn_cast<IndirectBrInst>(Terminator)) {
1029    // Can't thread indirect branch with no successors.
1030    if (IB->getNumSuccessors() == 0) return false;
1031    Condition = IB->getAddress()->stripPointerCasts();
1032    Preference = WantBlockAddress;
1033  } else {
1034    return false; // Must be an invoke or callbr.
1035  }
1036
1037  // Run constant folding to see if we can reduce the condition to a simple
1038  // constant.
1039  if (Instruction *I = dyn_cast<Instruction>(Condition)) {
1040    Value *SimpleVal =
1041        ConstantFoldInstruction(I, BB->getModule()->getDataLayout(), TLI);
1042    if (SimpleVal) {
1043      I->replaceAllUsesWith(SimpleVal);
1044      if (isInstructionTriviallyDead(I, TLI))
1045        I->eraseFromParent();
1046      Condition = SimpleVal;
1047    }
1048  }
1049
1050  // If the terminator is branching on an undef, we can pick any of the
1051  // successors to branch to.  Let GetBestDestForJumpOnUndef decide.
1052  if (isa<UndefValue>(Condition)) {
1053    unsigned BestSucc = GetBestDestForJumpOnUndef(BB);
1054    std::vector<DominatorTree::UpdateType> Updates;
1055
1056    // Fold the branch/switch.
1057    Instruction *BBTerm = BB->getTerminator();
1058    Updates.reserve(BBTerm->getNumSuccessors());
1059    for (unsigned i = 0, e = BBTerm->getNumSuccessors(); i != e; ++i) {
1060      if (i == BestSucc) continue;
1061      BasicBlock *Succ = BBTerm->getSuccessor(i);
1062      Succ->removePredecessor(BB, true);
1063      Updates.push_back({DominatorTree::Delete, BB, Succ});
1064    }
1065
1066    LLVM_DEBUG(dbgs() << "  In block '" << BB->getName()
1067                      << "' folding undef terminator: " << *BBTerm << '\n');
1068    BranchInst::Create(BBTerm->getSuccessor(BestSucc), BBTerm);
1069    BBTerm->eraseFromParent();
1070    DTU->applyUpdatesPermissive(Updates);
1071    return true;
1072  }
1073
1074  // If the terminator of this block is branching on a constant, simplify the
1075  // terminator to an unconditional branch.  This can occur due to threading in
1076  // other blocks.
1077  if (getKnownConstant(Condition, Preference)) {
1078    LLVM_DEBUG(dbgs() << "  In block '" << BB->getName()
1079                      << "' folding terminator: " << *BB->getTerminator()
1080                      << '\n');
1081    ++NumFolds;
1082    ConstantFoldTerminator(BB, true, nullptr, DTU);
1083    return true;
1084  }
1085
1086  Instruction *CondInst = dyn_cast<Instruction>(Condition);
1087
1088  // All the rest of our checks depend on the condition being an instruction.
1089  if (!CondInst) {
1090    // FIXME: Unify this with code below.
1091    if (ProcessThreadableEdges(Condition, BB, Preference, Terminator))
1092      return true;
1093    return false;
1094  }
1095
1096  if (CmpInst *CondCmp = dyn_cast<CmpInst>(CondInst)) {
1097    // If we're branching on a conditional, LVI might be able to determine
1098    // it's value at the branch instruction.  We only handle comparisons
1099    // against a constant at this time.
1100    // TODO: This should be extended to handle switches as well.
1101    BranchInst *CondBr = dyn_cast<BranchInst>(BB->getTerminator());
1102    Constant *CondConst = dyn_cast<Constant>(CondCmp->getOperand(1));
1103    if (CondBr && CondConst) {
1104      // We should have returned as soon as we turn a conditional branch to
1105      // unconditional. Because its no longer interesting as far as jump
1106      // threading is concerned.
1107      assert(CondBr->isConditional() && "Threading on unconditional terminator");
1108
1109      if (DTU->hasPendingDomTreeUpdates())
1110        LVI->disableDT();
1111      else
1112        LVI->enableDT();
1113      LazyValueInfo::Tristate Ret =
1114        LVI->getPredicateAt(CondCmp->getPredicate(), CondCmp->getOperand(0),
1115                            CondConst, CondBr);
1116      if (Ret != LazyValueInfo::Unknown) {
1117        unsigned ToRemove = Ret == LazyValueInfo::True ? 1 : 0;
1118        unsigned ToKeep = Ret == LazyValueInfo::True ? 0 : 1;
1119        BasicBlock *ToRemoveSucc = CondBr->getSuccessor(ToRemove);
1120        ToRemoveSucc->removePredecessor(BB, true);
1121        BranchInst *UncondBr =
1122          BranchInst::Create(CondBr->getSuccessor(ToKeep), CondBr);
1123        UncondBr->setDebugLoc(CondBr->getDebugLoc());
1124        CondBr->eraseFromParent();
1125        if (CondCmp->use_empty())
1126          CondCmp->eraseFromParent();
1127        // We can safely replace *some* uses of the CondInst if it has
1128        // exactly one value as returned by LVI. RAUW is incorrect in the
1129        // presence of guards and assumes, that have the `Cond` as the use. This
1130        // is because we use the guards/assume to reason about the `Cond` value
1131        // at the end of block, but RAUW unconditionally replaces all uses
1132        // including the guards/assumes themselves and the uses before the
1133        // guard/assume.
1134        else if (CondCmp->getParent() == BB) {
1135          auto *CI = Ret == LazyValueInfo::True ?
1136            ConstantInt::getTrue(CondCmp->getType()) :
1137            ConstantInt::getFalse(CondCmp->getType());
1138          ReplaceFoldableUses(CondCmp, CI);
1139        }
1140        DTU->applyUpdatesPermissive(
1141            {{DominatorTree::Delete, BB, ToRemoveSucc}});
1142        return true;
1143      }
1144
1145      // We did not manage to simplify this branch, try to see whether
1146      // CondCmp depends on a known phi-select pattern.
1147      if (TryToUnfoldSelect(CondCmp, BB))
1148        return true;
1149    }
1150  }
1151
1152  if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator()))
1153    if (TryToUnfoldSelect(SI, BB))
1154      return true;
1155
1156  // Check for some cases that are worth simplifying.  Right now we want to look
1157  // for loads that are used by a switch or by the condition for the branch.  If
1158  // we see one, check to see if it's partially redundant.  If so, insert a PHI
1159  // which can then be used to thread the values.
1160  Value *SimplifyValue = CondInst;
1161  if (CmpInst *CondCmp = dyn_cast<CmpInst>(SimplifyValue))
1162    if (isa<Constant>(CondCmp->getOperand(1)))
1163      SimplifyValue = CondCmp->getOperand(0);
1164
1165  // TODO: There are other places where load PRE would be profitable, such as
1166  // more complex comparisons.
1167  if (LoadInst *LoadI = dyn_cast<LoadInst>(SimplifyValue))
1168    if (SimplifyPartiallyRedundantLoad(LoadI))
1169      return true;
1170
1171  // Before threading, try to propagate profile data backwards:
1172  if (PHINode *PN = dyn_cast<PHINode>(CondInst))
1173    if (PN->getParent() == BB && isa<BranchInst>(BB->getTerminator()))
1174      updatePredecessorProfileMetadata(PN, BB);
1175
1176  // Handle a variety of cases where we are branching on something derived from
1177  // a PHI node in the current block.  If we can prove that any predecessors
1178  // compute a predictable value based on a PHI node, thread those predecessors.
1179  if (ProcessThreadableEdges(CondInst, BB, Preference, Terminator))
1180    return true;
1181
1182  // If this is an otherwise-unfoldable branch on a phi node in the current
1183  // block, see if we can simplify.
1184  if (PHINode *PN = dyn_cast<PHINode>(CondInst))
1185    if (PN->getParent() == BB && isa<BranchInst>(BB->getTerminator()))
1186      return ProcessBranchOnPHI(PN);
1187
1188  // If this is an otherwise-unfoldable branch on a XOR, see if we can simplify.
1189  if (CondInst->getOpcode() == Instruction::Xor &&
1190      CondInst->getParent() == BB && isa<BranchInst>(BB->getTerminator()))
1191    return ProcessBranchOnXOR(cast<BinaryOperator>(CondInst));
1192
1193  // Search for a stronger dominating condition that can be used to simplify a
1194  // conditional branch leaving BB.
1195  if (ProcessImpliedCondition(BB))
1196    return true;
1197
1198  return false;
1199}
1200
1201bool JumpThreadingPass::ProcessImpliedCondition(BasicBlock *BB) {
1202  auto *BI = dyn_cast<BranchInst>(BB->getTerminator());
1203  if (!BI || !BI->isConditional())
1204    return false;
1205
1206  Value *Cond = BI->getCondition();
1207  BasicBlock *CurrentBB = BB;
1208  BasicBlock *CurrentPred = BB->getSinglePredecessor();
1209  unsigned Iter = 0;
1210
1211  auto &DL = BB->getModule()->getDataLayout();
1212
1213  while (CurrentPred && Iter++ < ImplicationSearchThreshold) {
1214    auto *PBI = dyn_cast<BranchInst>(CurrentPred->getTerminator());
1215    if (!PBI || !PBI->isConditional())
1216      return false;
1217    if (PBI->getSuccessor(0) != CurrentBB && PBI->getSuccessor(1) != CurrentBB)
1218      return false;
1219
1220    bool CondIsTrue = PBI->getSuccessor(0) == CurrentBB;
1221    Optional<bool> Implication =
1222        isImpliedCondition(PBI->getCondition(), Cond, DL, CondIsTrue);
1223    if (Implication) {
1224      BasicBlock *KeepSucc = BI->getSuccessor(*Implication ? 0 : 1);
1225      BasicBlock *RemoveSucc = BI->getSuccessor(*Implication ? 1 : 0);
1226      RemoveSucc->removePredecessor(BB);
1227      BranchInst *UncondBI = BranchInst::Create(KeepSucc, BI);
1228      UncondBI->setDebugLoc(BI->getDebugLoc());
1229      BI->eraseFromParent();
1230      DTU->applyUpdatesPermissive({{DominatorTree::Delete, BB, RemoveSucc}});
1231      return true;
1232    }
1233    CurrentBB = CurrentPred;
1234    CurrentPred = CurrentBB->getSinglePredecessor();
1235  }
1236
1237  return false;
1238}
1239
1240/// Return true if Op is an instruction defined in the given block.
1241static bool isOpDefinedInBlock(Value *Op, BasicBlock *BB) {
1242  if (Instruction *OpInst = dyn_cast<Instruction>(Op))
1243    if (OpInst->getParent() == BB)
1244      return true;
1245  return false;
1246}
1247
1248/// SimplifyPartiallyRedundantLoad - If LoadI is an obviously partially
1249/// redundant load instruction, eliminate it by replacing it with a PHI node.
1250/// This is an important optimization that encourages jump threading, and needs
1251/// to be run interlaced with other jump threading tasks.
1252bool JumpThreadingPass::SimplifyPartiallyRedundantLoad(LoadInst *LoadI) {
1253  // Don't hack volatile and ordered loads.
1254  if (!LoadI->isUnordered()) return false;
1255
1256  // If the load is defined in a block with exactly one predecessor, it can't be
1257  // partially redundant.
1258  BasicBlock *LoadBB = LoadI->getParent();
1259  if (LoadBB->getSinglePredecessor())
1260    return false;
1261
1262  // If the load is defined in an EH pad, it can't be partially redundant,
1263  // because the edges between the invoke and the EH pad cannot have other
1264  // instructions between them.
1265  if (LoadBB->isEHPad())
1266    return false;
1267
1268  Value *LoadedPtr = LoadI->getOperand(0);
1269
1270  // If the loaded operand is defined in the LoadBB and its not a phi,
1271  // it can't be available in predecessors.
1272  if (isOpDefinedInBlock(LoadedPtr, LoadBB) && !isa<PHINode>(LoadedPtr))
1273    return false;
1274
1275  // Scan a few instructions up from the load, to see if it is obviously live at
1276  // the entry to its block.
1277  BasicBlock::iterator BBIt(LoadI);
1278  bool IsLoadCSE;
1279  if (Value *AvailableVal = FindAvailableLoadedValue(
1280          LoadI, LoadBB, BBIt, DefMaxInstsToScan, AA, &IsLoadCSE)) {
1281    // If the value of the load is locally available within the block, just use
1282    // it.  This frequently occurs for reg2mem'd allocas.
1283
1284    if (IsLoadCSE) {
1285      LoadInst *NLoadI = cast<LoadInst>(AvailableVal);
1286      combineMetadataForCSE(NLoadI, LoadI, false);
1287    };
1288
1289    // If the returned value is the load itself, replace with an undef. This can
1290    // only happen in dead loops.
1291    if (AvailableVal == LoadI)
1292      AvailableVal = UndefValue::get(LoadI->getType());
1293    if (AvailableVal->getType() != LoadI->getType())
1294      AvailableVal = CastInst::CreateBitOrPointerCast(
1295          AvailableVal, LoadI->getType(), "", LoadI);
1296    LoadI->replaceAllUsesWith(AvailableVal);
1297    LoadI->eraseFromParent();
1298    return true;
1299  }
1300
1301  // Otherwise, if we scanned the whole block and got to the top of the block,
1302  // we know the block is locally transparent to the load.  If not, something
1303  // might clobber its value.
1304  if (BBIt != LoadBB->begin())
1305    return false;
1306
1307  // If all of the loads and stores that feed the value have the same AA tags,
1308  // then we can propagate them onto any newly inserted loads.
1309  AAMDNodes AATags;
1310  LoadI->getAAMetadata(AATags);
1311
1312  SmallPtrSet<BasicBlock*, 8> PredsScanned;
1313
1314  using AvailablePredsTy = SmallVector<std::pair<BasicBlock *, Value *>, 8>;
1315
1316  AvailablePredsTy AvailablePreds;
1317  BasicBlock *OneUnavailablePred = nullptr;
1318  SmallVector<LoadInst*, 8> CSELoads;
1319
1320  // If we got here, the loaded value is transparent through to the start of the
1321  // block.  Check to see if it is available in any of the predecessor blocks.
1322  for (BasicBlock *PredBB : predecessors(LoadBB)) {
1323    // If we already scanned this predecessor, skip it.
1324    if (!PredsScanned.insert(PredBB).second)
1325      continue;
1326
1327    BBIt = PredBB->end();
1328    unsigned NumScanedInst = 0;
1329    Value *PredAvailable = nullptr;
1330    // NOTE: We don't CSE load that is volatile or anything stronger than
1331    // unordered, that should have been checked when we entered the function.
1332    assert(LoadI->isUnordered() &&
1333           "Attempting to CSE volatile or atomic loads");
1334    // If this is a load on a phi pointer, phi-translate it and search
1335    // for available load/store to the pointer in predecessors.
1336    Value *Ptr = LoadedPtr->DoPHITranslation(LoadBB, PredBB);
1337    PredAvailable = FindAvailablePtrLoadStore(
1338        Ptr, LoadI->getType(), LoadI->isAtomic(), PredBB, BBIt,
1339        DefMaxInstsToScan, AA, &IsLoadCSE, &NumScanedInst);
1340
1341    // If PredBB has a single predecessor, continue scanning through the
1342    // single predecessor.
1343    BasicBlock *SinglePredBB = PredBB;
1344    while (!PredAvailable && SinglePredBB && BBIt == SinglePredBB->begin() &&
1345           NumScanedInst < DefMaxInstsToScan) {
1346      SinglePredBB = SinglePredBB->getSinglePredecessor();
1347      if (SinglePredBB) {
1348        BBIt = SinglePredBB->end();
1349        PredAvailable = FindAvailablePtrLoadStore(
1350            Ptr, LoadI->getType(), LoadI->isAtomic(), SinglePredBB, BBIt,
1351            (DefMaxInstsToScan - NumScanedInst), AA, &IsLoadCSE,
1352            &NumScanedInst);
1353      }
1354    }
1355
1356    if (!PredAvailable) {
1357      OneUnavailablePred = PredBB;
1358      continue;
1359    }
1360
1361    if (IsLoadCSE)
1362      CSELoads.push_back(cast<LoadInst>(PredAvailable));
1363
1364    // If so, this load is partially redundant.  Remember this info so that we
1365    // can create a PHI node.
1366    AvailablePreds.push_back(std::make_pair(PredBB, PredAvailable));
1367  }
1368
1369  // If the loaded value isn't available in any predecessor, it isn't partially
1370  // redundant.
1371  if (AvailablePreds.empty()) return false;
1372
1373  // Okay, the loaded value is available in at least one (and maybe all!)
1374  // predecessors.  If the value is unavailable in more than one unique
1375  // predecessor, we want to insert a merge block for those common predecessors.
1376  // This ensures that we only have to insert one reload, thus not increasing
1377  // code size.
1378  BasicBlock *UnavailablePred = nullptr;
1379
1380  // If the value is unavailable in one of predecessors, we will end up
1381  // inserting a new instruction into them. It is only valid if all the
1382  // instructions before LoadI are guaranteed to pass execution to its
1383  // successor, or if LoadI is safe to speculate.
1384  // TODO: If this logic becomes more complex, and we will perform PRE insertion
1385  // farther than to a predecessor, we need to reuse the code from GVN's PRE.
1386  // It requires domination tree analysis, so for this simple case it is an
1387  // overkill.
1388  if (PredsScanned.size() != AvailablePreds.size() &&
1389      !isSafeToSpeculativelyExecute(LoadI))
1390    for (auto I = LoadBB->begin(); &*I != LoadI; ++I)
1391      if (!isGuaranteedToTransferExecutionToSuccessor(&*I))
1392        return false;
1393
1394  // If there is exactly one predecessor where the value is unavailable, the
1395  // already computed 'OneUnavailablePred' block is it.  If it ends in an
1396  // unconditional branch, we know that it isn't a critical edge.
1397  if (PredsScanned.size() == AvailablePreds.size()+1 &&
1398      OneUnavailablePred->getTerminator()->getNumSuccessors() == 1) {
1399    UnavailablePred = OneUnavailablePred;
1400  } else if (PredsScanned.size() != AvailablePreds.size()) {
1401    // Otherwise, we had multiple unavailable predecessors or we had a critical
1402    // edge from the one.
1403    SmallVector<BasicBlock*, 8> PredsToSplit;
1404    SmallPtrSet<BasicBlock*, 8> AvailablePredSet;
1405
1406    for (const auto &AvailablePred : AvailablePreds)
1407      AvailablePredSet.insert(AvailablePred.first);
1408
1409    // Add all the unavailable predecessors to the PredsToSplit list.
1410    for (BasicBlock *P : predecessors(LoadBB)) {
1411      // If the predecessor is an indirect goto, we can't split the edge.
1412      // Same for CallBr.
1413      if (isa<IndirectBrInst>(P->getTerminator()) ||
1414          isa<CallBrInst>(P->getTerminator()))
1415        return false;
1416
1417      if (!AvailablePredSet.count(P))
1418        PredsToSplit.push_back(P);
1419    }
1420
1421    // Split them out to their own block.
1422    UnavailablePred = SplitBlockPreds(LoadBB, PredsToSplit, "thread-pre-split");
1423  }
1424
1425  // If the value isn't available in all predecessors, then there will be
1426  // exactly one where it isn't available.  Insert a load on that edge and add
1427  // it to the AvailablePreds list.
1428  if (UnavailablePred) {
1429    assert(UnavailablePred->getTerminator()->getNumSuccessors() == 1 &&
1430           "Can't handle critical edge here!");
1431    LoadInst *NewVal = new LoadInst(
1432        LoadI->getType(), LoadedPtr->DoPHITranslation(LoadBB, UnavailablePred),
1433        LoadI->getName() + ".pr", false, MaybeAlign(LoadI->getAlignment()),
1434        LoadI->getOrdering(), LoadI->getSyncScopeID(),
1435        UnavailablePred->getTerminator());
1436    NewVal->setDebugLoc(LoadI->getDebugLoc());
1437    if (AATags)
1438      NewVal->setAAMetadata(AATags);
1439
1440    AvailablePreds.push_back(std::make_pair(UnavailablePred, NewVal));
1441  }
1442
1443  // Now we know that each predecessor of this block has a value in
1444  // AvailablePreds, sort them for efficient access as we're walking the preds.
1445  array_pod_sort(AvailablePreds.begin(), AvailablePreds.end());
1446
1447  // Create a PHI node at the start of the block for the PRE'd load value.
1448  pred_iterator PB = pred_begin(LoadBB), PE = pred_end(LoadBB);
1449  PHINode *PN = PHINode::Create(LoadI->getType(), std::distance(PB, PE), "",
1450                                &LoadBB->front());
1451  PN->takeName(LoadI);
1452  PN->setDebugLoc(LoadI->getDebugLoc());
1453
1454  // Insert new entries into the PHI for each predecessor.  A single block may
1455  // have multiple entries here.
1456  for (pred_iterator PI = PB; PI != PE; ++PI) {
1457    BasicBlock *P = *PI;
1458    AvailablePredsTy::iterator I =
1459        llvm::lower_bound(AvailablePreds, std::make_pair(P, (Value *)nullptr));
1460
1461    assert(I != AvailablePreds.end() && I->first == P &&
1462           "Didn't find entry for predecessor!");
1463
1464    // If we have an available predecessor but it requires casting, insert the
1465    // cast in the predecessor and use the cast. Note that we have to update the
1466    // AvailablePreds vector as we go so that all of the PHI entries for this
1467    // predecessor use the same bitcast.
1468    Value *&PredV = I->second;
1469    if (PredV->getType() != LoadI->getType())
1470      PredV = CastInst::CreateBitOrPointerCast(PredV, LoadI->getType(), "",
1471                                               P->getTerminator());
1472
1473    PN->addIncoming(PredV, I->first);
1474  }
1475
1476  for (LoadInst *PredLoadI : CSELoads) {
1477    combineMetadataForCSE(PredLoadI, LoadI, true);
1478  }
1479
1480  LoadI->replaceAllUsesWith(PN);
1481  LoadI->eraseFromParent();
1482
1483  return true;
1484}
1485
1486/// FindMostPopularDest - The specified list contains multiple possible
1487/// threadable destinations.  Pick the one that occurs the most frequently in
1488/// the list.
1489static BasicBlock *
1490FindMostPopularDest(BasicBlock *BB,
1491                    const SmallVectorImpl<std::pair<BasicBlock *,
1492                                          BasicBlock *>> &PredToDestList) {
1493  assert(!PredToDestList.empty());
1494
1495  // Determine popularity.  If there are multiple possible destinations, we
1496  // explicitly choose to ignore 'undef' destinations.  We prefer to thread
1497  // blocks with known and real destinations to threading undef.  We'll handle
1498  // them later if interesting.
1499  DenseMap<BasicBlock*, unsigned> DestPopularity;
1500  for (const auto &PredToDest : PredToDestList)
1501    if (PredToDest.second)
1502      DestPopularity[PredToDest.second]++;
1503
1504  if (DestPopularity.empty())
1505    return nullptr;
1506
1507  // Find the most popular dest.
1508  DenseMap<BasicBlock*, unsigned>::iterator DPI = DestPopularity.begin();
1509  BasicBlock *MostPopularDest = DPI->first;
1510  unsigned Popularity = DPI->second;
1511  SmallVector<BasicBlock*, 4> SamePopularity;
1512
1513  for (++DPI; DPI != DestPopularity.end(); ++DPI) {
1514    // If the popularity of this entry isn't higher than the popularity we've
1515    // seen so far, ignore it.
1516    if (DPI->second < Popularity)
1517      ; // ignore.
1518    else if (DPI->second == Popularity) {
1519      // If it is the same as what we've seen so far, keep track of it.
1520      SamePopularity.push_back(DPI->first);
1521    } else {
1522      // If it is more popular, remember it.
1523      SamePopularity.clear();
1524      MostPopularDest = DPI->first;
1525      Popularity = DPI->second;
1526    }
1527  }
1528
1529  // Okay, now we know the most popular destination.  If there is more than one
1530  // destination, we need to determine one.  This is arbitrary, but we need
1531  // to make a deterministic decision.  Pick the first one that appears in the
1532  // successor list.
1533  if (!SamePopularity.empty()) {
1534    SamePopularity.push_back(MostPopularDest);
1535    Instruction *TI = BB->getTerminator();
1536    for (unsigned i = 0; ; ++i) {
1537      assert(i != TI->getNumSuccessors() && "Didn't find any successor!");
1538
1539      if (!is_contained(SamePopularity, TI->getSuccessor(i)))
1540        continue;
1541
1542      MostPopularDest = TI->getSuccessor(i);
1543      break;
1544    }
1545  }
1546
1547  // Okay, we have finally picked the most popular destination.
1548  return MostPopularDest;
1549}
1550
1551bool JumpThreadingPass::ProcessThreadableEdges(Value *Cond, BasicBlock *BB,
1552                                               ConstantPreference Preference,
1553                                               Instruction *CxtI) {
1554  // If threading this would thread across a loop header, don't even try to
1555  // thread the edge.
1556  if (LoopHeaders.count(BB))
1557    return false;
1558
1559  PredValueInfoTy PredValues;
1560  if (!ComputeValueKnownInPredecessors(Cond, BB, PredValues, Preference, CxtI))
1561    return false;
1562
1563  assert(!PredValues.empty() &&
1564         "ComputeValueKnownInPredecessors returned true with no values");
1565
1566  LLVM_DEBUG(dbgs() << "IN BB: " << *BB;
1567             for (const auto &PredValue : PredValues) {
1568               dbgs() << "  BB '" << BB->getName()
1569                      << "': FOUND condition = " << *PredValue.first
1570                      << " for pred '" << PredValue.second->getName() << "'.\n";
1571  });
1572
1573  // Decide what we want to thread through.  Convert our list of known values to
1574  // a list of known destinations for each pred.  This also discards duplicate
1575  // predecessors and keeps track of the undefined inputs (which are represented
1576  // as a null dest in the PredToDestList).
1577  SmallPtrSet<BasicBlock*, 16> SeenPreds;
1578  SmallVector<std::pair<BasicBlock*, BasicBlock*>, 16> PredToDestList;
1579
1580  BasicBlock *OnlyDest = nullptr;
1581  BasicBlock *MultipleDestSentinel = (BasicBlock*)(intptr_t)~0ULL;
1582  Constant *OnlyVal = nullptr;
1583  Constant *MultipleVal = (Constant *)(intptr_t)~0ULL;
1584
1585  for (const auto &PredValue : PredValues) {
1586    BasicBlock *Pred = PredValue.second;
1587    if (!SeenPreds.insert(Pred).second)
1588      continue;  // Duplicate predecessor entry.
1589
1590    Constant *Val = PredValue.first;
1591
1592    BasicBlock *DestBB;
1593    if (isa<UndefValue>(Val))
1594      DestBB = nullptr;
1595    else if (BranchInst *BI = dyn_cast<BranchInst>(BB->getTerminator())) {
1596      assert(isa<ConstantInt>(Val) && "Expecting a constant integer");
1597      DestBB = BI->getSuccessor(cast<ConstantInt>(Val)->isZero());
1598    } else if (SwitchInst *SI = dyn_cast<SwitchInst>(BB->getTerminator())) {
1599      assert(isa<ConstantInt>(Val) && "Expecting a constant integer");
1600      DestBB = SI->findCaseValue(cast<ConstantInt>(Val))->getCaseSuccessor();
1601    } else {
1602      assert(isa<IndirectBrInst>(BB->getTerminator())
1603              && "Unexpected terminator");
1604      assert(isa<BlockAddress>(Val) && "Expecting a constant blockaddress");
1605      DestBB = cast<BlockAddress>(Val)->getBasicBlock();
1606    }
1607
1608    // If we have exactly one destination, remember it for efficiency below.
1609    if (PredToDestList.empty()) {
1610      OnlyDest = DestBB;
1611      OnlyVal = Val;
1612    } else {
1613      if (OnlyDest != DestBB)
1614        OnlyDest = MultipleDestSentinel;
1615      // It possible we have same destination, but different value, e.g. default
1616      // case in switchinst.
1617      if (Val != OnlyVal)
1618        OnlyVal = MultipleVal;
1619    }
1620
1621    // If the predecessor ends with an indirect goto, we can't change its
1622    // destination. Same for CallBr.
1623    if (isa<IndirectBrInst>(Pred->getTerminator()) ||
1624        isa<CallBrInst>(Pred->getTerminator()))
1625      continue;
1626
1627    PredToDestList.push_back(std::make_pair(Pred, DestBB));
1628  }
1629
1630  // If all edges were unthreadable, we fail.
1631  if (PredToDestList.empty())
1632    return false;
1633
1634  // If all the predecessors go to a single known successor, we want to fold,
1635  // not thread. By doing so, we do not need to duplicate the current block and
1636  // also miss potential opportunities in case we dont/cant duplicate.
1637  if (OnlyDest && OnlyDest != MultipleDestSentinel) {
1638    if (BB->hasNPredecessors(PredToDestList.size())) {
1639      bool SeenFirstBranchToOnlyDest = false;
1640      std::vector <DominatorTree::UpdateType> Updates;
1641      Updates.reserve(BB->getTerminator()->getNumSuccessors() - 1);
1642      for (BasicBlock *SuccBB : successors(BB)) {
1643        if (SuccBB == OnlyDest && !SeenFirstBranchToOnlyDest) {
1644          SeenFirstBranchToOnlyDest = true; // Don't modify the first branch.
1645        } else {
1646          SuccBB->removePredecessor(BB, true); // This is unreachable successor.
1647          Updates.push_back({DominatorTree::Delete, BB, SuccBB});
1648        }
1649      }
1650
1651      // Finally update the terminator.
1652      Instruction *Term = BB->getTerminator();
1653      BranchInst::Create(OnlyDest, Term);
1654      Term->eraseFromParent();
1655      DTU->applyUpdatesPermissive(Updates);
1656
1657      // If the condition is now dead due to the removal of the old terminator,
1658      // erase it.
1659      if (auto *CondInst = dyn_cast<Instruction>(Cond)) {
1660        if (CondInst->use_empty() && !CondInst->mayHaveSideEffects())
1661          CondInst->eraseFromParent();
1662        // We can safely replace *some* uses of the CondInst if it has
1663        // exactly one value as returned by LVI. RAUW is incorrect in the
1664        // presence of guards and assumes, that have the `Cond` as the use. This
1665        // is because we use the guards/assume to reason about the `Cond` value
1666        // at the end of block, but RAUW unconditionally replaces all uses
1667        // including the guards/assumes themselves and the uses before the
1668        // guard/assume.
1669        else if (OnlyVal && OnlyVal != MultipleVal &&
1670                 CondInst->getParent() == BB)
1671          ReplaceFoldableUses(CondInst, OnlyVal);
1672      }
1673      return true;
1674    }
1675  }
1676
1677  // Determine which is the most common successor.  If we have many inputs and
1678  // this block is a switch, we want to start by threading the batch that goes
1679  // to the most popular destination first.  If we only know about one
1680  // threadable destination (the common case) we can avoid this.
1681  BasicBlock *MostPopularDest = OnlyDest;
1682
1683  if (MostPopularDest == MultipleDestSentinel) {
1684    // Remove any loop headers from the Dest list, ThreadEdge conservatively
1685    // won't process them, but we might have other destination that are eligible
1686    // and we still want to process.
1687    erase_if(PredToDestList,
1688             [&](const std::pair<BasicBlock *, BasicBlock *> &PredToDest) {
1689               return LoopHeaders.count(PredToDest.second) != 0;
1690             });
1691
1692    if (PredToDestList.empty())
1693      return false;
1694
1695    MostPopularDest = FindMostPopularDest(BB, PredToDestList);
1696  }
1697
1698  // Now that we know what the most popular destination is, factor all
1699  // predecessors that will jump to it into a single predecessor.
1700  SmallVector<BasicBlock*, 16> PredsToFactor;
1701  for (const auto &PredToDest : PredToDestList)
1702    if (PredToDest.second == MostPopularDest) {
1703      BasicBlock *Pred = PredToDest.first;
1704
1705      // This predecessor may be a switch or something else that has multiple
1706      // edges to the block.  Factor each of these edges by listing them
1707      // according to # occurrences in PredsToFactor.
1708      for (BasicBlock *Succ : successors(Pred))
1709        if (Succ == BB)
1710          PredsToFactor.push_back(Pred);
1711    }
1712
1713  // If the threadable edges are branching on an undefined value, we get to pick
1714  // the destination that these predecessors should get to.
1715  if (!MostPopularDest)
1716    MostPopularDest = BB->getTerminator()->
1717                            getSuccessor(GetBestDestForJumpOnUndef(BB));
1718
1719  // Ok, try to thread it!
1720  return TryThreadEdge(BB, PredsToFactor, MostPopularDest);
1721}
1722
1723/// ProcessBranchOnPHI - We have an otherwise unthreadable conditional branch on
1724/// a PHI node in the current block.  See if there are any simplifications we
1725/// can do based on inputs to the phi node.
1726bool JumpThreadingPass::ProcessBranchOnPHI(PHINode *PN) {
1727  BasicBlock *BB = PN->getParent();
1728
1729  // TODO: We could make use of this to do it once for blocks with common PHI
1730  // values.
1731  SmallVector<BasicBlock*, 1> PredBBs;
1732  PredBBs.resize(1);
1733
1734  // If any of the predecessor blocks end in an unconditional branch, we can
1735  // *duplicate* the conditional branch into that block in order to further
1736  // encourage jump threading and to eliminate cases where we have branch on a
1737  // phi of an icmp (branch on icmp is much better).
1738  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
1739    BasicBlock *PredBB = PN->getIncomingBlock(i);
1740    if (BranchInst *PredBr = dyn_cast<BranchInst>(PredBB->getTerminator()))
1741      if (PredBr->isUnconditional()) {
1742        PredBBs[0] = PredBB;
1743        // Try to duplicate BB into PredBB.
1744        if (DuplicateCondBranchOnPHIIntoPred(BB, PredBBs))
1745          return true;
1746      }
1747  }
1748
1749  return false;
1750}
1751
1752/// ProcessBranchOnXOR - We have an otherwise unthreadable conditional branch on
1753/// a xor instruction in the current block.  See if there are any
1754/// simplifications we can do based on inputs to the xor.
1755bool JumpThreadingPass::ProcessBranchOnXOR(BinaryOperator *BO) {
1756  BasicBlock *BB = BO->getParent();
1757
1758  // If either the LHS or RHS of the xor is a constant, don't do this
1759  // optimization.
1760  if (isa<ConstantInt>(BO->getOperand(0)) ||
1761      isa<ConstantInt>(BO->getOperand(1)))
1762    return false;
1763
1764  // If the first instruction in BB isn't a phi, we won't be able to infer
1765  // anything special about any particular predecessor.
1766  if (!isa<PHINode>(BB->front()))
1767    return false;
1768
1769  // If this BB is a landing pad, we won't be able to split the edge into it.
1770  if (BB->isEHPad())
1771    return false;
1772
1773  // If we have a xor as the branch input to this block, and we know that the
1774  // LHS or RHS of the xor in any predecessor is true/false, then we can clone
1775  // the condition into the predecessor and fix that value to true, saving some
1776  // logical ops on that path and encouraging other paths to simplify.
1777  //
1778  // This copies something like this:
1779  //
1780  //  BB:
1781  //    %X = phi i1 [1],  [%X']
1782  //    %Y = icmp eq i32 %A, %B
1783  //    %Z = xor i1 %X, %Y
1784  //    br i1 %Z, ...
1785  //
1786  // Into:
1787  //  BB':
1788  //    %Y = icmp ne i32 %A, %B
1789  //    br i1 %Y, ...
1790
1791  PredValueInfoTy XorOpValues;
1792  bool isLHS = true;
1793  if (!ComputeValueKnownInPredecessors(BO->getOperand(0), BB, XorOpValues,
1794                                       WantInteger, BO)) {
1795    assert(XorOpValues.empty());
1796    if (!ComputeValueKnownInPredecessors(BO->getOperand(1), BB, XorOpValues,
1797                                         WantInteger, BO))
1798      return false;
1799    isLHS = false;
1800  }
1801
1802  assert(!XorOpValues.empty() &&
1803         "ComputeValueKnownInPredecessors returned true with no values");
1804
1805  // Scan the information to see which is most popular: true or false.  The
1806  // predecessors can be of the set true, false, or undef.
1807  unsigned NumTrue = 0, NumFalse = 0;
1808  for (const auto &XorOpValue : XorOpValues) {
1809    if (isa<UndefValue>(XorOpValue.first))
1810      // Ignore undefs for the count.
1811      continue;
1812    if (cast<ConstantInt>(XorOpValue.first)->isZero())
1813      ++NumFalse;
1814    else
1815      ++NumTrue;
1816  }
1817
1818  // Determine which value to split on, true, false, or undef if neither.
1819  ConstantInt *SplitVal = nullptr;
1820  if (NumTrue > NumFalse)
1821    SplitVal = ConstantInt::getTrue(BB->getContext());
1822  else if (NumTrue != 0 || NumFalse != 0)
1823    SplitVal = ConstantInt::getFalse(BB->getContext());
1824
1825  // Collect all of the blocks that this can be folded into so that we can
1826  // factor this once and clone it once.
1827  SmallVector<BasicBlock*, 8> BlocksToFoldInto;
1828  for (const auto &XorOpValue : XorOpValues) {
1829    if (XorOpValue.first != SplitVal && !isa<UndefValue>(XorOpValue.first))
1830      continue;
1831
1832    BlocksToFoldInto.push_back(XorOpValue.second);
1833  }
1834
1835  // If we inferred a value for all of the predecessors, then duplication won't
1836  // help us.  However, we can just replace the LHS or RHS with the constant.
1837  if (BlocksToFoldInto.size() ==
1838      cast<PHINode>(BB->front()).getNumIncomingValues()) {
1839    if (!SplitVal) {
1840      // If all preds provide undef, just nuke the xor, because it is undef too.
1841      BO->replaceAllUsesWith(UndefValue::get(BO->getType()));
1842      BO->eraseFromParent();
1843    } else if (SplitVal->isZero()) {
1844      // If all preds provide 0, replace the xor with the other input.
1845      BO->replaceAllUsesWith(BO->getOperand(isLHS));
1846      BO->eraseFromParent();
1847    } else {
1848      // If all preds provide 1, set the computed value to 1.
1849      BO->setOperand(!isLHS, SplitVal);
1850    }
1851
1852    return true;
1853  }
1854
1855  // Try to duplicate BB into PredBB.
1856  return DuplicateCondBranchOnPHIIntoPred(BB, BlocksToFoldInto);
1857}
1858
1859/// AddPHINodeEntriesForMappedBlock - We're adding 'NewPred' as a new
1860/// predecessor to the PHIBB block.  If it has PHI nodes, add entries for
1861/// NewPred using the entries from OldPred (suitably mapped).
1862static void AddPHINodeEntriesForMappedBlock(BasicBlock *PHIBB,
1863                                            BasicBlock *OldPred,
1864                                            BasicBlock *NewPred,
1865                                     DenseMap<Instruction*, Value*> &ValueMap) {
1866  for (PHINode &PN : PHIBB->phis()) {
1867    // Ok, we have a PHI node.  Figure out what the incoming value was for the
1868    // DestBlock.
1869    Value *IV = PN.getIncomingValueForBlock(OldPred);
1870
1871    // Remap the value if necessary.
1872    if (Instruction *Inst = dyn_cast<Instruction>(IV)) {
1873      DenseMap<Instruction*, Value*>::iterator I = ValueMap.find(Inst);
1874      if (I != ValueMap.end())
1875        IV = I->second;
1876    }
1877
1878    PN.addIncoming(IV, NewPred);
1879  }
1880}
1881
1882/// Merge basic block BB into its sole predecessor if possible.
1883bool JumpThreadingPass::MaybeMergeBasicBlockIntoOnlyPred(BasicBlock *BB) {
1884  BasicBlock *SinglePred = BB->getSinglePredecessor();
1885  if (!SinglePred)
1886    return false;
1887
1888  const Instruction *TI = SinglePred->getTerminator();
1889  if (TI->isExceptionalTerminator() || TI->getNumSuccessors() != 1 ||
1890      SinglePred == BB || hasAddressTakenAndUsed(BB))
1891    return false;
1892
1893  // If SinglePred was a loop header, BB becomes one.
1894  if (LoopHeaders.erase(SinglePred))
1895    LoopHeaders.insert(BB);
1896
1897  LVI->eraseBlock(SinglePred);
1898  MergeBasicBlockIntoOnlyPred(BB, DTU);
1899
1900  // Now that BB is merged into SinglePred (i.e. SinglePred code followed by
1901  // BB code within one basic block `BB`), we need to invalidate the LVI
1902  // information associated with BB, because the LVI information need not be
1903  // true for all of BB after the merge. For example,
1904  // Before the merge, LVI info and code is as follows:
1905  // SinglePred: <LVI info1 for %p val>
1906  // %y = use of %p
1907  // call @exit() // need not transfer execution to successor.
1908  // assume(%p) // from this point on %p is true
1909  // br label %BB
1910  // BB: <LVI info2 for %p val, i.e. %p is true>
1911  // %x = use of %p
1912  // br label exit
1913  //
1914  // Note that this LVI info for blocks BB and SinglPred is correct for %p
1915  // (info2 and info1 respectively). After the merge and the deletion of the
1916  // LVI info1 for SinglePred. We have the following code:
1917  // BB: <LVI info2 for %p val>
1918  // %y = use of %p
1919  // call @exit()
1920  // assume(%p)
1921  // %x = use of %p <-- LVI info2 is correct from here onwards.
1922  // br label exit
1923  // LVI info2 for BB is incorrect at the beginning of BB.
1924
1925  // Invalidate LVI information for BB if the LVI is not provably true for
1926  // all of BB.
1927  if (!isGuaranteedToTransferExecutionToSuccessor(BB))
1928    LVI->eraseBlock(BB);
1929  return true;
1930}
1931
1932/// Update the SSA form.  NewBB contains instructions that are copied from BB.
1933/// ValueMapping maps old values in BB to new ones in NewBB.
1934void JumpThreadingPass::UpdateSSA(
1935    BasicBlock *BB, BasicBlock *NewBB,
1936    DenseMap<Instruction *, Value *> &ValueMapping) {
1937  // If there were values defined in BB that are used outside the block, then we
1938  // now have to update all uses of the value to use either the original value,
1939  // the cloned value, or some PHI derived value.  This can require arbitrary
1940  // PHI insertion, of which we are prepared to do, clean these up now.
1941  SSAUpdater SSAUpdate;
1942  SmallVector<Use *, 16> UsesToRename;
1943
1944  for (Instruction &I : *BB) {
1945    // Scan all uses of this instruction to see if it is used outside of its
1946    // block, and if so, record them in UsesToRename.
1947    for (Use &U : I.uses()) {
1948      Instruction *User = cast<Instruction>(U.getUser());
1949      if (PHINode *UserPN = dyn_cast<PHINode>(User)) {
1950        if (UserPN->getIncomingBlock(U) == BB)
1951          continue;
1952      } else if (User->getParent() == BB)
1953        continue;
1954
1955      UsesToRename.push_back(&U);
1956    }
1957
1958    // If there are no uses outside the block, we're done with this instruction.
1959    if (UsesToRename.empty())
1960      continue;
1961    LLVM_DEBUG(dbgs() << "JT: Renaming non-local uses of: " << I << "\n");
1962
1963    // We found a use of I outside of BB.  Rename all uses of I that are outside
1964    // its block to be uses of the appropriate PHI node etc.  See ValuesInBlocks
1965    // with the two values we know.
1966    SSAUpdate.Initialize(I.getType(), I.getName());
1967    SSAUpdate.AddAvailableValue(BB, &I);
1968    SSAUpdate.AddAvailableValue(NewBB, ValueMapping[&I]);
1969
1970    while (!UsesToRename.empty())
1971      SSAUpdate.RewriteUse(*UsesToRename.pop_back_val());
1972    LLVM_DEBUG(dbgs() << "\n");
1973  }
1974}
1975
1976/// Clone instructions in range [BI, BE) to NewBB.  For PHI nodes, we only clone
1977/// arguments that come from PredBB.  Return the map from the variables in the
1978/// source basic block to the variables in the newly created basic block.
1979DenseMap<Instruction *, Value *>
1980JumpThreadingPass::CloneInstructions(BasicBlock::iterator BI,
1981                                     BasicBlock::iterator BE, BasicBlock *NewBB,
1982                                     BasicBlock *PredBB) {
1983  // We are going to have to map operands from the source basic block to the new
1984  // copy of the block 'NewBB'.  If there are PHI nodes in the source basic
1985  // block, evaluate them to account for entry from PredBB.
1986  DenseMap<Instruction *, Value *> ValueMapping;
1987
1988  // Clone the phi nodes of the source basic block into NewBB.  The resulting
1989  // phi nodes are trivial since NewBB only has one predecessor, but SSAUpdater
1990  // might need to rewrite the operand of the cloned phi.
1991  for (; PHINode *PN = dyn_cast<PHINode>(BI); ++BI) {
1992    PHINode *NewPN = PHINode::Create(PN->getType(), 1, PN->getName(), NewBB);
1993    NewPN->addIncoming(PN->getIncomingValueForBlock(PredBB), PredBB);
1994    ValueMapping[PN] = NewPN;
1995  }
1996
1997  // Clone the non-phi instructions of the source basic block into NewBB,
1998  // keeping track of the mapping and using it to remap operands in the cloned
1999  // instructions.
2000  for (; BI != BE; ++BI) {
2001    Instruction *New = BI->clone();
2002    New->setName(BI->getName());
2003    NewBB->getInstList().push_back(New);
2004    ValueMapping[&*BI] = New;
2005
2006    // Remap operands to patch up intra-block references.
2007    for (unsigned i = 0, e = New->getNumOperands(); i != e; ++i)
2008      if (Instruction *Inst = dyn_cast<Instruction>(New->getOperand(i))) {
2009        DenseMap<Instruction *, Value *>::iterator I = ValueMapping.find(Inst);
2010        if (I != ValueMapping.end())
2011          New->setOperand(i, I->second);
2012      }
2013  }
2014
2015  return ValueMapping;
2016}
2017
2018/// TryThreadEdge - Thread an edge if it's safe and profitable to do so.
2019bool JumpThreadingPass::TryThreadEdge(
2020    BasicBlock *BB, const SmallVectorImpl<BasicBlock *> &PredBBs,
2021    BasicBlock *SuccBB) {
2022  // If threading to the same block as we come from, we would infinite loop.
2023  if (SuccBB == BB) {
2024    LLVM_DEBUG(dbgs() << "  Not threading across BB '" << BB->getName()
2025                      << "' - would thread to self!\n");
2026    return false;
2027  }
2028
2029  // If threading this would thread across a loop header, don't thread the edge.
2030  // See the comments above FindLoopHeaders for justifications and caveats.
2031  if (LoopHeaders.count(BB) || LoopHeaders.count(SuccBB)) {
2032    LLVM_DEBUG({
2033      bool BBIsHeader = LoopHeaders.count(BB);
2034      bool SuccIsHeader = LoopHeaders.count(SuccBB);
2035      dbgs() << "  Not threading across "
2036          << (BBIsHeader ? "loop header BB '" : "block BB '") << BB->getName()
2037          << "' to dest " << (SuccIsHeader ? "loop header BB '" : "block BB '")
2038          << SuccBB->getName() << "' - it might create an irreducible loop!\n";
2039    });
2040    return false;
2041  }
2042
2043  unsigned JumpThreadCost =
2044      getJumpThreadDuplicationCost(BB, BB->getTerminator(), BBDupThreshold);
2045  if (JumpThreadCost > BBDupThreshold) {
2046    LLVM_DEBUG(dbgs() << "  Not threading BB '" << BB->getName()
2047                      << "' - Cost is too high: " << JumpThreadCost << "\n");
2048    return false;
2049  }
2050
2051  ThreadEdge(BB, PredBBs, SuccBB);
2052  return true;
2053}
2054
2055/// ThreadEdge - We have decided that it is safe and profitable to factor the
2056/// blocks in PredBBs to one predecessor, then thread an edge from it to SuccBB
2057/// across BB.  Transform the IR to reflect this change.
2058void JumpThreadingPass::ThreadEdge(BasicBlock *BB,
2059                                   const SmallVectorImpl<BasicBlock *> &PredBBs,
2060                                   BasicBlock *SuccBB) {
2061  assert(SuccBB != BB && "Don't create an infinite loop");
2062
2063  assert(!LoopHeaders.count(BB) && !LoopHeaders.count(SuccBB) &&
2064         "Don't thread across loop headers");
2065
2066  // And finally, do it!  Start by factoring the predecessors if needed.
2067  BasicBlock *PredBB;
2068  if (PredBBs.size() == 1)
2069    PredBB = PredBBs[0];
2070  else {
2071    LLVM_DEBUG(dbgs() << "  Factoring out " << PredBBs.size()
2072                      << " common predecessors.\n");
2073    PredBB = SplitBlockPreds(BB, PredBBs, ".thr_comm");
2074  }
2075
2076  // And finally, do it!
2077  LLVM_DEBUG(dbgs() << "  Threading edge from '" << PredBB->getName()
2078                    << "' to '" << SuccBB->getName()
2079                    << ", across block:\n    " << *BB << "\n");
2080
2081  if (DTU->hasPendingDomTreeUpdates())
2082    LVI->disableDT();
2083  else
2084    LVI->enableDT();
2085  LVI->threadEdge(PredBB, BB, SuccBB);
2086
2087  BasicBlock *NewBB = BasicBlock::Create(BB->getContext(),
2088                                         BB->getName()+".thread",
2089                                         BB->getParent(), BB);
2090  NewBB->moveAfter(PredBB);
2091
2092  // Set the block frequency of NewBB.
2093  if (HasProfileData) {
2094    auto NewBBFreq =
2095        BFI->getBlockFreq(PredBB) * BPI->getEdgeProbability(PredBB, BB);
2096    BFI->setBlockFreq(NewBB, NewBBFreq.getFrequency());
2097  }
2098
2099  // Copy all the instructions from BB to NewBB except the terminator.
2100  DenseMap<Instruction *, Value *> ValueMapping =
2101      CloneInstructions(BB->begin(), std::prev(BB->end()), NewBB, PredBB);
2102
2103  // We didn't copy the terminator from BB over to NewBB, because there is now
2104  // an unconditional jump to SuccBB.  Insert the unconditional jump.
2105  BranchInst *NewBI = BranchInst::Create(SuccBB, NewBB);
2106  NewBI->setDebugLoc(BB->getTerminator()->getDebugLoc());
2107
2108  // Check to see if SuccBB has PHI nodes. If so, we need to add entries to the
2109  // PHI nodes for NewBB now.
2110  AddPHINodeEntriesForMappedBlock(SuccBB, BB, NewBB, ValueMapping);
2111
2112  // Update the terminator of PredBB to jump to NewBB instead of BB.  This
2113  // eliminates predecessors from BB, which requires us to simplify any PHI
2114  // nodes in BB.
2115  Instruction *PredTerm = PredBB->getTerminator();
2116  for (unsigned i = 0, e = PredTerm->getNumSuccessors(); i != e; ++i)
2117    if (PredTerm->getSuccessor(i) == BB) {
2118      BB->removePredecessor(PredBB, true);
2119      PredTerm->setSuccessor(i, NewBB);
2120    }
2121
2122  // Enqueue required DT updates.
2123  DTU->applyUpdatesPermissive({{DominatorTree::Insert, NewBB, SuccBB},
2124                               {DominatorTree::Insert, PredBB, NewBB},
2125                               {DominatorTree::Delete, PredBB, BB}});
2126
2127  UpdateSSA(BB, NewBB, ValueMapping);
2128
2129  // At this point, the IR is fully up to date and consistent.  Do a quick scan
2130  // over the new instructions and zap any that are constants or dead.  This
2131  // frequently happens because of phi translation.
2132  SimplifyInstructionsInBlock(NewBB, TLI);
2133
2134  // Update the edge weight from BB to SuccBB, which should be less than before.
2135  UpdateBlockFreqAndEdgeWeight(PredBB, BB, NewBB, SuccBB);
2136
2137  // Threaded an edge!
2138  ++NumThreads;
2139}
2140
2141/// Create a new basic block that will be the predecessor of BB and successor of
2142/// all blocks in Preds. When profile data is available, update the frequency of
2143/// this new block.
2144BasicBlock *JumpThreadingPass::SplitBlockPreds(BasicBlock *BB,
2145                                               ArrayRef<BasicBlock *> Preds,
2146                                               const char *Suffix) {
2147  SmallVector<BasicBlock *, 2> NewBBs;
2148
2149  // Collect the frequencies of all predecessors of BB, which will be used to
2150  // update the edge weight of the result of splitting predecessors.
2151  DenseMap<BasicBlock *, BlockFrequency> FreqMap;
2152  if (HasProfileData)
2153    for (auto Pred : Preds)
2154      FreqMap.insert(std::make_pair(
2155          Pred, BFI->getBlockFreq(Pred) * BPI->getEdgeProbability(Pred, BB)));
2156
2157  // In the case when BB is a LandingPad block we create 2 new predecessors
2158  // instead of just one.
2159  if (BB->isLandingPad()) {
2160    std::string NewName = std::string(Suffix) + ".split-lp";
2161    SplitLandingPadPredecessors(BB, Preds, Suffix, NewName.c_str(), NewBBs);
2162  } else {
2163    NewBBs.push_back(SplitBlockPredecessors(BB, Preds, Suffix));
2164  }
2165
2166  std::vector<DominatorTree::UpdateType> Updates;
2167  Updates.reserve((2 * Preds.size()) + NewBBs.size());
2168  for (auto NewBB : NewBBs) {
2169    BlockFrequency NewBBFreq(0);
2170    Updates.push_back({DominatorTree::Insert, NewBB, BB});
2171    for (auto Pred : predecessors(NewBB)) {
2172      Updates.push_back({DominatorTree::Delete, Pred, BB});
2173      Updates.push_back({DominatorTree::Insert, Pred, NewBB});
2174      if (HasProfileData) // Update frequencies between Pred -> NewBB.
2175        NewBBFreq += FreqMap.lookup(Pred);
2176    }
2177    if (HasProfileData) // Apply the summed frequency to NewBB.
2178      BFI->setBlockFreq(NewBB, NewBBFreq.getFrequency());
2179  }
2180
2181  DTU->applyUpdatesPermissive(Updates);
2182  return NewBBs[0];
2183}
2184
2185bool JumpThreadingPass::doesBlockHaveProfileData(BasicBlock *BB) {
2186  const Instruction *TI = BB->getTerminator();
2187  assert(TI->getNumSuccessors() > 1 && "not a split");
2188
2189  MDNode *WeightsNode = TI->getMetadata(LLVMContext::MD_prof);
2190  if (!WeightsNode)
2191    return false;
2192
2193  MDString *MDName = cast<MDString>(WeightsNode->getOperand(0));
2194  if (MDName->getString() != "branch_weights")
2195    return false;
2196
2197  // Ensure there are weights for all of the successors. Note that the first
2198  // operand to the metadata node is a name, not a weight.
2199  return WeightsNode->getNumOperands() == TI->getNumSuccessors() + 1;
2200}
2201
2202/// Update the block frequency of BB and branch weight and the metadata on the
2203/// edge BB->SuccBB. This is done by scaling the weight of BB->SuccBB by 1 -
2204/// Freq(PredBB->BB) / Freq(BB->SuccBB).
2205void JumpThreadingPass::UpdateBlockFreqAndEdgeWeight(BasicBlock *PredBB,
2206                                                     BasicBlock *BB,
2207                                                     BasicBlock *NewBB,
2208                                                     BasicBlock *SuccBB) {
2209  if (!HasProfileData)
2210    return;
2211
2212  assert(BFI && BPI && "BFI & BPI should have been created here");
2213
2214  // As the edge from PredBB to BB is deleted, we have to update the block
2215  // frequency of BB.
2216  auto BBOrigFreq = BFI->getBlockFreq(BB);
2217  auto NewBBFreq = BFI->getBlockFreq(NewBB);
2218  auto BB2SuccBBFreq = BBOrigFreq * BPI->getEdgeProbability(BB, SuccBB);
2219  auto BBNewFreq = BBOrigFreq - NewBBFreq;
2220  BFI->setBlockFreq(BB, BBNewFreq.getFrequency());
2221
2222  // Collect updated outgoing edges' frequencies from BB and use them to update
2223  // edge probabilities.
2224  SmallVector<uint64_t, 4> BBSuccFreq;
2225  for (BasicBlock *Succ : successors(BB)) {
2226    auto SuccFreq = (Succ == SuccBB)
2227                        ? BB2SuccBBFreq - NewBBFreq
2228                        : BBOrigFreq * BPI->getEdgeProbability(BB, Succ);
2229    BBSuccFreq.push_back(SuccFreq.getFrequency());
2230  }
2231
2232  uint64_t MaxBBSuccFreq =
2233      *std::max_element(BBSuccFreq.begin(), BBSuccFreq.end());
2234
2235  SmallVector<BranchProbability, 4> BBSuccProbs;
2236  if (MaxBBSuccFreq == 0)
2237    BBSuccProbs.assign(BBSuccFreq.size(),
2238                       {1, static_cast<unsigned>(BBSuccFreq.size())});
2239  else {
2240    for (uint64_t Freq : BBSuccFreq)
2241      BBSuccProbs.push_back(
2242          BranchProbability::getBranchProbability(Freq, MaxBBSuccFreq));
2243    // Normalize edge probabilities so that they sum up to one.
2244    BranchProbability::normalizeProbabilities(BBSuccProbs.begin(),
2245                                              BBSuccProbs.end());
2246  }
2247
2248  // Update edge probabilities in BPI.
2249  for (int I = 0, E = BBSuccProbs.size(); I < E; I++)
2250    BPI->setEdgeProbability(BB, I, BBSuccProbs[I]);
2251
2252  // Update the profile metadata as well.
2253  //
2254  // Don't do this if the profile of the transformed blocks was statically
2255  // estimated.  (This could occur despite the function having an entry
2256  // frequency in completely cold parts of the CFG.)
2257  //
2258  // In this case we don't want to suggest to subsequent passes that the
2259  // calculated weights are fully consistent.  Consider this graph:
2260  //
2261  //                 check_1
2262  //             50% /  |
2263  //             eq_1   | 50%
2264  //                 \  |
2265  //                 check_2
2266  //             50% /  |
2267  //             eq_2   | 50%
2268  //                 \  |
2269  //                 check_3
2270  //             50% /  |
2271  //             eq_3   | 50%
2272  //                 \  |
2273  //
2274  // Assuming the blocks check_* all compare the same value against 1, 2 and 3,
2275  // the overall probabilities are inconsistent; the total probability that the
2276  // value is either 1, 2 or 3 is 150%.
2277  //
2278  // As a consequence if we thread eq_1 -> check_2 to check_3, check_2->check_3
2279  // becomes 0%.  This is even worse if the edge whose probability becomes 0% is
2280  // the loop exit edge.  Then based solely on static estimation we would assume
2281  // the loop was extremely hot.
2282  //
2283  // FIXME this locally as well so that BPI and BFI are consistent as well.  We
2284  // shouldn't make edges extremely likely or unlikely based solely on static
2285  // estimation.
2286  if (BBSuccProbs.size() >= 2 && doesBlockHaveProfileData(BB)) {
2287    SmallVector<uint32_t, 4> Weights;
2288    for (auto Prob : BBSuccProbs)
2289      Weights.push_back(Prob.getNumerator());
2290
2291    auto TI = BB->getTerminator();
2292    TI->setMetadata(
2293        LLVMContext::MD_prof,
2294        MDBuilder(TI->getParent()->getContext()).createBranchWeights(Weights));
2295  }
2296}
2297
2298/// DuplicateCondBranchOnPHIIntoPred - PredBB contains an unconditional branch
2299/// to BB which contains an i1 PHI node and a conditional branch on that PHI.
2300/// If we can duplicate the contents of BB up into PredBB do so now, this
2301/// improves the odds that the branch will be on an analyzable instruction like
2302/// a compare.
2303bool JumpThreadingPass::DuplicateCondBranchOnPHIIntoPred(
2304    BasicBlock *BB, const SmallVectorImpl<BasicBlock *> &PredBBs) {
2305  assert(!PredBBs.empty() && "Can't handle an empty set");
2306
2307  // If BB is a loop header, then duplicating this block outside the loop would
2308  // cause us to transform this into an irreducible loop, don't do this.
2309  // See the comments above FindLoopHeaders for justifications and caveats.
2310  if (LoopHeaders.count(BB)) {
2311    LLVM_DEBUG(dbgs() << "  Not duplicating loop header '" << BB->getName()
2312                      << "' into predecessor block '" << PredBBs[0]->getName()
2313                      << "' - it might create an irreducible loop!\n");
2314    return false;
2315  }
2316
2317  unsigned DuplicationCost =
2318      getJumpThreadDuplicationCost(BB, BB->getTerminator(), BBDupThreshold);
2319  if (DuplicationCost > BBDupThreshold) {
2320    LLVM_DEBUG(dbgs() << "  Not duplicating BB '" << BB->getName()
2321                      << "' - Cost is too high: " << DuplicationCost << "\n");
2322    return false;
2323  }
2324
2325  // And finally, do it!  Start by factoring the predecessors if needed.
2326  std::vector<DominatorTree::UpdateType> Updates;
2327  BasicBlock *PredBB;
2328  if (PredBBs.size() == 1)
2329    PredBB = PredBBs[0];
2330  else {
2331    LLVM_DEBUG(dbgs() << "  Factoring out " << PredBBs.size()
2332                      << " common predecessors.\n");
2333    PredBB = SplitBlockPreds(BB, PredBBs, ".thr_comm");
2334  }
2335  Updates.push_back({DominatorTree::Delete, PredBB, BB});
2336
2337  // Okay, we decided to do this!  Clone all the instructions in BB onto the end
2338  // of PredBB.
2339  LLVM_DEBUG(dbgs() << "  Duplicating block '" << BB->getName()
2340                    << "' into end of '" << PredBB->getName()
2341                    << "' to eliminate branch on phi.  Cost: "
2342                    << DuplicationCost << " block is:" << *BB << "\n");
2343
2344  // Unless PredBB ends with an unconditional branch, split the edge so that we
2345  // can just clone the bits from BB into the end of the new PredBB.
2346  BranchInst *OldPredBranch = dyn_cast<BranchInst>(PredBB->getTerminator());
2347
2348  if (!OldPredBranch || !OldPredBranch->isUnconditional()) {
2349    BasicBlock *OldPredBB = PredBB;
2350    PredBB = SplitEdge(OldPredBB, BB);
2351    Updates.push_back({DominatorTree::Insert, OldPredBB, PredBB});
2352    Updates.push_back({DominatorTree::Insert, PredBB, BB});
2353    Updates.push_back({DominatorTree::Delete, OldPredBB, BB});
2354    OldPredBranch = cast<BranchInst>(PredBB->getTerminator());
2355  }
2356
2357  // We are going to have to map operands from the original BB block into the
2358  // PredBB block.  Evaluate PHI nodes in BB.
2359  DenseMap<Instruction*, Value*> ValueMapping;
2360
2361  BasicBlock::iterator BI = BB->begin();
2362  for (; PHINode *PN = dyn_cast<PHINode>(BI); ++BI)
2363    ValueMapping[PN] = PN->getIncomingValueForBlock(PredBB);
2364  // Clone the non-phi instructions of BB into PredBB, keeping track of the
2365  // mapping and using it to remap operands in the cloned instructions.
2366  for (; BI != BB->end(); ++BI) {
2367    Instruction *New = BI->clone();
2368
2369    // Remap operands to patch up intra-block references.
2370    for (unsigned i = 0, e = New->getNumOperands(); i != e; ++i)
2371      if (Instruction *Inst = dyn_cast<Instruction>(New->getOperand(i))) {
2372        DenseMap<Instruction*, Value*>::iterator I = ValueMapping.find(Inst);
2373        if (I != ValueMapping.end())
2374          New->setOperand(i, I->second);
2375      }
2376
2377    // If this instruction can be simplified after the operands are updated,
2378    // just use the simplified value instead.  This frequently happens due to
2379    // phi translation.
2380    if (Value *IV = SimplifyInstruction(
2381            New,
2382            {BB->getModule()->getDataLayout(), TLI, nullptr, nullptr, New})) {
2383      ValueMapping[&*BI] = IV;
2384      if (!New->mayHaveSideEffects()) {
2385        New->deleteValue();
2386        New = nullptr;
2387      }
2388    } else {
2389      ValueMapping[&*BI] = New;
2390    }
2391    if (New) {
2392      // Otherwise, insert the new instruction into the block.
2393      New->setName(BI->getName());
2394      PredBB->getInstList().insert(OldPredBranch->getIterator(), New);
2395      // Update Dominance from simplified New instruction operands.
2396      for (unsigned i = 0, e = New->getNumOperands(); i != e; ++i)
2397        if (BasicBlock *SuccBB = dyn_cast<BasicBlock>(New->getOperand(i)))
2398          Updates.push_back({DominatorTree::Insert, PredBB, SuccBB});
2399    }
2400  }
2401
2402  // Check to see if the targets of the branch had PHI nodes. If so, we need to
2403  // add entries to the PHI nodes for branch from PredBB now.
2404  BranchInst *BBBranch = cast<BranchInst>(BB->getTerminator());
2405  AddPHINodeEntriesForMappedBlock(BBBranch->getSuccessor(0), BB, PredBB,
2406                                  ValueMapping);
2407  AddPHINodeEntriesForMappedBlock(BBBranch->getSuccessor(1), BB, PredBB,
2408                                  ValueMapping);
2409
2410  UpdateSSA(BB, PredBB, ValueMapping);
2411
2412  // PredBB no longer jumps to BB, remove entries in the PHI node for the edge
2413  // that we nuked.
2414  BB->removePredecessor(PredBB, true);
2415
2416  // Remove the unconditional branch at the end of the PredBB block.
2417  OldPredBranch->eraseFromParent();
2418  DTU->applyUpdatesPermissive(Updates);
2419
2420  ++NumDupes;
2421  return true;
2422}
2423
2424// Pred is a predecessor of BB with an unconditional branch to BB. SI is
2425// a Select instruction in Pred. BB has other predecessors and SI is used in
2426// a PHI node in BB. SI has no other use.
2427// A new basic block, NewBB, is created and SI is converted to compare and
2428// conditional branch. SI is erased from parent.
2429void JumpThreadingPass::UnfoldSelectInstr(BasicBlock *Pred, BasicBlock *BB,
2430                                          SelectInst *SI, PHINode *SIUse,
2431                                          unsigned Idx) {
2432  // Expand the select.
2433  //
2434  // Pred --
2435  //  |    v
2436  //  |  NewBB
2437  //  |    |
2438  //  |-----
2439  //  v
2440  // BB
2441  BranchInst *PredTerm = cast<BranchInst>(Pred->getTerminator());
2442  BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "select.unfold",
2443                                         BB->getParent(), BB);
2444  // Move the unconditional branch to NewBB.
2445  PredTerm->removeFromParent();
2446  NewBB->getInstList().insert(NewBB->end(), PredTerm);
2447  // Create a conditional branch and update PHI nodes.
2448  BranchInst::Create(NewBB, BB, SI->getCondition(), Pred);
2449  SIUse->setIncomingValue(Idx, SI->getFalseValue());
2450  SIUse->addIncoming(SI->getTrueValue(), NewBB);
2451
2452  // The select is now dead.
2453  SI->eraseFromParent();
2454  DTU->applyUpdatesPermissive({{DominatorTree::Insert, NewBB, BB},
2455                               {DominatorTree::Insert, Pred, NewBB}});
2456
2457  // Update any other PHI nodes in BB.
2458  for (BasicBlock::iterator BI = BB->begin();
2459       PHINode *Phi = dyn_cast<PHINode>(BI); ++BI)
2460    if (Phi != SIUse)
2461      Phi->addIncoming(Phi->getIncomingValueForBlock(Pred), NewBB);
2462}
2463
2464bool JumpThreadingPass::TryToUnfoldSelect(SwitchInst *SI, BasicBlock *BB) {
2465  PHINode *CondPHI = dyn_cast<PHINode>(SI->getCondition());
2466
2467  if (!CondPHI || CondPHI->getParent() != BB)
2468    return false;
2469
2470  for (unsigned I = 0, E = CondPHI->getNumIncomingValues(); I != E; ++I) {
2471    BasicBlock *Pred = CondPHI->getIncomingBlock(I);
2472    SelectInst *PredSI = dyn_cast<SelectInst>(CondPHI->getIncomingValue(I));
2473
2474    // The second and third condition can be potentially relaxed. Currently
2475    // the conditions help to simplify the code and allow us to reuse existing
2476    // code, developed for TryToUnfoldSelect(CmpInst *, BasicBlock *)
2477    if (!PredSI || PredSI->getParent() != Pred || !PredSI->hasOneUse())
2478      continue;
2479
2480    BranchInst *PredTerm = dyn_cast<BranchInst>(Pred->getTerminator());
2481    if (!PredTerm || !PredTerm->isUnconditional())
2482      continue;
2483
2484    UnfoldSelectInstr(Pred, BB, PredSI, CondPHI, I);
2485    return true;
2486  }
2487  return false;
2488}
2489
2490/// TryToUnfoldSelect - Look for blocks of the form
2491/// bb1:
2492///   %a = select
2493///   br bb2
2494///
2495/// bb2:
2496///   %p = phi [%a, %bb1] ...
2497///   %c = icmp %p
2498///   br i1 %c
2499///
2500/// And expand the select into a branch structure if one of its arms allows %c
2501/// to be folded. This later enables threading from bb1 over bb2.
2502bool JumpThreadingPass::TryToUnfoldSelect(CmpInst *CondCmp, BasicBlock *BB) {
2503  BranchInst *CondBr = dyn_cast<BranchInst>(BB->getTerminator());
2504  PHINode *CondLHS = dyn_cast<PHINode>(CondCmp->getOperand(0));
2505  Constant *CondRHS = cast<Constant>(CondCmp->getOperand(1));
2506
2507  if (!CondBr || !CondBr->isConditional() || !CondLHS ||
2508      CondLHS->getParent() != BB)
2509    return false;
2510
2511  for (unsigned I = 0, E = CondLHS->getNumIncomingValues(); I != E; ++I) {
2512    BasicBlock *Pred = CondLHS->getIncomingBlock(I);
2513    SelectInst *SI = dyn_cast<SelectInst>(CondLHS->getIncomingValue(I));
2514
2515    // Look if one of the incoming values is a select in the corresponding
2516    // predecessor.
2517    if (!SI || SI->getParent() != Pred || !SI->hasOneUse())
2518      continue;
2519
2520    BranchInst *PredTerm = dyn_cast<BranchInst>(Pred->getTerminator());
2521    if (!PredTerm || !PredTerm->isUnconditional())
2522      continue;
2523
2524    // Now check if one of the select values would allow us to constant fold the
2525    // terminator in BB. We don't do the transform if both sides fold, those
2526    // cases will be threaded in any case.
2527    if (DTU->hasPendingDomTreeUpdates())
2528      LVI->disableDT();
2529    else
2530      LVI->enableDT();
2531    LazyValueInfo::Tristate LHSFolds =
2532        LVI->getPredicateOnEdge(CondCmp->getPredicate(), SI->getOperand(1),
2533                                CondRHS, Pred, BB, CondCmp);
2534    LazyValueInfo::Tristate RHSFolds =
2535        LVI->getPredicateOnEdge(CondCmp->getPredicate(), SI->getOperand(2),
2536                                CondRHS, Pred, BB, CondCmp);
2537    if ((LHSFolds != LazyValueInfo::Unknown ||
2538         RHSFolds != LazyValueInfo::Unknown) &&
2539        LHSFolds != RHSFolds) {
2540      UnfoldSelectInstr(Pred, BB, SI, CondLHS, I);
2541      return true;
2542    }
2543  }
2544  return false;
2545}
2546
2547/// TryToUnfoldSelectInCurrBB - Look for PHI/Select or PHI/CMP/Select in the
2548/// same BB in the form
2549/// bb:
2550///   %p = phi [false, %bb1], [true, %bb2], [false, %bb3], [true, %bb4], ...
2551///   %s = select %p, trueval, falseval
2552///
2553/// or
2554///
2555/// bb:
2556///   %p = phi [0, %bb1], [1, %bb2], [0, %bb3], [1, %bb4], ...
2557///   %c = cmp %p, 0
2558///   %s = select %c, trueval, falseval
2559///
2560/// And expand the select into a branch structure. This later enables
2561/// jump-threading over bb in this pass.
2562///
2563/// Using the similar approach of SimplifyCFG::FoldCondBranchOnPHI(), unfold
2564/// select if the associated PHI has at least one constant.  If the unfolded
2565/// select is not jump-threaded, it will be folded again in the later
2566/// optimizations.
2567bool JumpThreadingPass::TryToUnfoldSelectInCurrBB(BasicBlock *BB) {
2568  // If threading this would thread across a loop header, don't thread the edge.
2569  // See the comments above FindLoopHeaders for justifications and caveats.
2570  if (LoopHeaders.count(BB))
2571    return false;
2572
2573  for (BasicBlock::iterator BI = BB->begin();
2574       PHINode *PN = dyn_cast<PHINode>(BI); ++BI) {
2575    // Look for a Phi having at least one constant incoming value.
2576    if (llvm::all_of(PN->incoming_values(),
2577                     [](Value *V) { return !isa<ConstantInt>(V); }))
2578      continue;
2579
2580    auto isUnfoldCandidate = [BB](SelectInst *SI, Value *V) {
2581      // Check if SI is in BB and use V as condition.
2582      if (SI->getParent() != BB)
2583        return false;
2584      Value *Cond = SI->getCondition();
2585      return (Cond && Cond == V && Cond->getType()->isIntegerTy(1));
2586    };
2587
2588    SelectInst *SI = nullptr;
2589    for (Use &U : PN->uses()) {
2590      if (ICmpInst *Cmp = dyn_cast<ICmpInst>(U.getUser())) {
2591        // Look for a ICmp in BB that compares PN with a constant and is the
2592        // condition of a Select.
2593        if (Cmp->getParent() == BB && Cmp->hasOneUse() &&
2594            isa<ConstantInt>(Cmp->getOperand(1 - U.getOperandNo())))
2595          if (SelectInst *SelectI = dyn_cast<SelectInst>(Cmp->user_back()))
2596            if (isUnfoldCandidate(SelectI, Cmp->use_begin()->get())) {
2597              SI = SelectI;
2598              break;
2599            }
2600      } else if (SelectInst *SelectI = dyn_cast<SelectInst>(U.getUser())) {
2601        // Look for a Select in BB that uses PN as condition.
2602        if (isUnfoldCandidate(SelectI, U.get())) {
2603          SI = SelectI;
2604          break;
2605        }
2606      }
2607    }
2608
2609    if (!SI)
2610      continue;
2611    // Expand the select.
2612    Instruction *Term =
2613        SplitBlockAndInsertIfThen(SI->getCondition(), SI, false);
2614    BasicBlock *SplitBB = SI->getParent();
2615    BasicBlock *NewBB = Term->getParent();
2616    PHINode *NewPN = PHINode::Create(SI->getType(), 2, "", SI);
2617    NewPN->addIncoming(SI->getTrueValue(), Term->getParent());
2618    NewPN->addIncoming(SI->getFalseValue(), BB);
2619    SI->replaceAllUsesWith(NewPN);
2620    SI->eraseFromParent();
2621    // NewBB and SplitBB are newly created blocks which require insertion.
2622    std::vector<DominatorTree::UpdateType> Updates;
2623    Updates.reserve((2 * SplitBB->getTerminator()->getNumSuccessors()) + 3);
2624    Updates.push_back({DominatorTree::Insert, BB, SplitBB});
2625    Updates.push_back({DominatorTree::Insert, BB, NewBB});
2626    Updates.push_back({DominatorTree::Insert, NewBB, SplitBB});
2627    // BB's successors were moved to SplitBB, update DTU accordingly.
2628    for (auto *Succ : successors(SplitBB)) {
2629      Updates.push_back({DominatorTree::Delete, BB, Succ});
2630      Updates.push_back({DominatorTree::Insert, SplitBB, Succ});
2631    }
2632    DTU->applyUpdatesPermissive(Updates);
2633    return true;
2634  }
2635  return false;
2636}
2637
2638/// Try to propagate a guard from the current BB into one of its predecessors
2639/// in case if another branch of execution implies that the condition of this
2640/// guard is always true. Currently we only process the simplest case that
2641/// looks like:
2642///
2643/// Start:
2644///   %cond = ...
2645///   br i1 %cond, label %T1, label %F1
2646/// T1:
2647///   br label %Merge
2648/// F1:
2649///   br label %Merge
2650/// Merge:
2651///   %condGuard = ...
2652///   call void(i1, ...) @llvm.experimental.guard( i1 %condGuard )[ "deopt"() ]
2653///
2654/// And cond either implies condGuard or !condGuard. In this case all the
2655/// instructions before the guard can be duplicated in both branches, and the
2656/// guard is then threaded to one of them.
2657bool JumpThreadingPass::ProcessGuards(BasicBlock *BB) {
2658  using namespace PatternMatch;
2659
2660  // We only want to deal with two predecessors.
2661  BasicBlock *Pred1, *Pred2;
2662  auto PI = pred_begin(BB), PE = pred_end(BB);
2663  if (PI == PE)
2664    return false;
2665  Pred1 = *PI++;
2666  if (PI == PE)
2667    return false;
2668  Pred2 = *PI++;
2669  if (PI != PE)
2670    return false;
2671  if (Pred1 == Pred2)
2672    return false;
2673
2674  // Try to thread one of the guards of the block.
2675  // TODO: Look up deeper than to immediate predecessor?
2676  auto *Parent = Pred1->getSinglePredecessor();
2677  if (!Parent || Parent != Pred2->getSinglePredecessor())
2678    return false;
2679
2680  if (auto *BI = dyn_cast<BranchInst>(Parent->getTerminator()))
2681    for (auto &I : *BB)
2682      if (isGuard(&I) && ThreadGuard(BB, cast<IntrinsicInst>(&I), BI))
2683        return true;
2684
2685  return false;
2686}
2687
2688/// Try to propagate the guard from BB which is the lower block of a diamond
2689/// to one of its branches, in case if diamond's condition implies guard's
2690/// condition.
2691bool JumpThreadingPass::ThreadGuard(BasicBlock *BB, IntrinsicInst *Guard,
2692                                    BranchInst *BI) {
2693  assert(BI->getNumSuccessors() == 2 && "Wrong number of successors?");
2694  assert(BI->isConditional() && "Unconditional branch has 2 successors?");
2695  Value *GuardCond = Guard->getArgOperand(0);
2696  Value *BranchCond = BI->getCondition();
2697  BasicBlock *TrueDest = BI->getSuccessor(0);
2698  BasicBlock *FalseDest = BI->getSuccessor(1);
2699
2700  auto &DL = BB->getModule()->getDataLayout();
2701  bool TrueDestIsSafe = false;
2702  bool FalseDestIsSafe = false;
2703
2704  // True dest is safe if BranchCond => GuardCond.
2705  auto Impl = isImpliedCondition(BranchCond, GuardCond, DL);
2706  if (Impl && *Impl)
2707    TrueDestIsSafe = true;
2708  else {
2709    // False dest is safe if !BranchCond => GuardCond.
2710    Impl = isImpliedCondition(BranchCond, GuardCond, DL, /* LHSIsTrue */ false);
2711    if (Impl && *Impl)
2712      FalseDestIsSafe = true;
2713  }
2714
2715  if (!TrueDestIsSafe && !FalseDestIsSafe)
2716    return false;
2717
2718  BasicBlock *PredUnguardedBlock = TrueDestIsSafe ? TrueDest : FalseDest;
2719  BasicBlock *PredGuardedBlock = FalseDestIsSafe ? TrueDest : FalseDest;
2720
2721  ValueToValueMapTy UnguardedMapping, GuardedMapping;
2722  Instruction *AfterGuard = Guard->getNextNode();
2723  unsigned Cost = getJumpThreadDuplicationCost(BB, AfterGuard, BBDupThreshold);
2724  if (Cost > BBDupThreshold)
2725    return false;
2726  // Duplicate all instructions before the guard and the guard itself to the
2727  // branch where implication is not proved.
2728  BasicBlock *GuardedBlock = DuplicateInstructionsInSplitBetween(
2729      BB, PredGuardedBlock, AfterGuard, GuardedMapping, *DTU);
2730  assert(GuardedBlock && "Could not create the guarded block?");
2731  // Duplicate all instructions before the guard in the unguarded branch.
2732  // Since we have successfully duplicated the guarded block and this block
2733  // has fewer instructions, we expect it to succeed.
2734  BasicBlock *UnguardedBlock = DuplicateInstructionsInSplitBetween(
2735      BB, PredUnguardedBlock, Guard, UnguardedMapping, *DTU);
2736  assert(UnguardedBlock && "Could not create the unguarded block?");
2737  LLVM_DEBUG(dbgs() << "Moved guard " << *Guard << " to block "
2738                    << GuardedBlock->getName() << "\n");
2739  // Some instructions before the guard may still have uses. For them, we need
2740  // to create Phi nodes merging their copies in both guarded and unguarded
2741  // branches. Those instructions that have no uses can be just removed.
2742  SmallVector<Instruction *, 4> ToRemove;
2743  for (auto BI = BB->begin(); &*BI != AfterGuard; ++BI)
2744    if (!isa<PHINode>(&*BI))
2745      ToRemove.push_back(&*BI);
2746
2747  Instruction *InsertionPoint = &*BB->getFirstInsertionPt();
2748  assert(InsertionPoint && "Empty block?");
2749  // Substitute with Phis & remove.
2750  for (auto *Inst : reverse(ToRemove)) {
2751    if (!Inst->use_empty()) {
2752      PHINode *NewPN = PHINode::Create(Inst->getType(), 2);
2753      NewPN->addIncoming(UnguardedMapping[Inst], UnguardedBlock);
2754      NewPN->addIncoming(GuardedMapping[Inst], GuardedBlock);
2755      NewPN->insertBefore(InsertionPoint);
2756      Inst->replaceAllUsesWith(NewPN);
2757    }
2758    Inst->eraseFromParent();
2759  }
2760  return true;
2761}
2762