1//===-- Local.cpp - Functions to perform local transformations ------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This family of functions perform various local transformations to the
11// program.
12//
13//===----------------------------------------------------------------------===//
14
15#include "llvm/Transforms/Utils/Local.h"
16#include "llvm/ADT/DenseMap.h"
17#include "llvm/ADT/STLExtras.h"
18#include "llvm/ADT/SmallPtrSet.h"
19#include "llvm/ADT/Statistic.h"
20#include "llvm/Analysis/InstructionSimplify.h"
21#include "llvm/Analysis/MemoryBuiltins.h"
22#include "llvm/Analysis/ValueTracking.h"
23#include "llvm/IR/CFG.h"
24#include "llvm/IR/Constants.h"
25#include "llvm/IR/DIBuilder.h"
26#include "llvm/IR/DataLayout.h"
27#include "llvm/IR/DebugInfo.h"
28#include "llvm/IR/DerivedTypes.h"
29#include "llvm/IR/Dominators.h"
30#include "llvm/IR/GetElementPtrTypeIterator.h"
31#include "llvm/IR/GlobalAlias.h"
32#include "llvm/IR/GlobalVariable.h"
33#include "llvm/IR/IRBuilder.h"
34#include "llvm/IR/Instructions.h"
35#include "llvm/IR/IntrinsicInst.h"
36#include "llvm/IR/Intrinsics.h"
37#include "llvm/IR/MDBuilder.h"
38#include "llvm/IR/Metadata.h"
39#include "llvm/IR/Operator.h"
40#include "llvm/IR/ValueHandle.h"
41#include "llvm/Support/Debug.h"
42#include "llvm/Support/MathExtras.h"
43#include "llvm/Support/raw_ostream.h"
44using namespace llvm;
45
46#define DEBUG_TYPE "local"
47
48STATISTIC(NumRemoved, "Number of unreachable basic blocks removed");
49
50//===----------------------------------------------------------------------===//
51//  Local constant propagation.
52//
53
54/// ConstantFoldTerminator - If a terminator instruction is predicated on a
55/// constant value, convert it into an unconditional branch to the constant
56/// destination.  This is a nontrivial operation because the successors of this
57/// basic block must have their PHI nodes updated.
58/// Also calls RecursivelyDeleteTriviallyDeadInstructions() on any branch/switch
59/// conditions and indirectbr addresses this might make dead if
60/// DeleteDeadConditions is true.
61bool llvm::ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions,
62                                  const TargetLibraryInfo *TLI) {
63  TerminatorInst *T = BB->getTerminator();
64  IRBuilder<> Builder(T);
65
66  // Branch - See if we are conditional jumping on constant
67  if (BranchInst *BI = dyn_cast<BranchInst>(T)) {
68    if (BI->isUnconditional()) return false;  // Can't optimize uncond branch
69    BasicBlock *Dest1 = BI->getSuccessor(0);
70    BasicBlock *Dest2 = BI->getSuccessor(1);
71
72    if (ConstantInt *Cond = dyn_cast<ConstantInt>(BI->getCondition())) {
73      // Are we branching on constant?
74      // YES.  Change to unconditional branch...
75      BasicBlock *Destination = Cond->getZExtValue() ? Dest1 : Dest2;
76      BasicBlock *OldDest     = Cond->getZExtValue() ? Dest2 : Dest1;
77
78      //cerr << "Function: " << T->getParent()->getParent()
79      //     << "\nRemoving branch from " << T->getParent()
80      //     << "\n\nTo: " << OldDest << endl;
81
82      // Let the basic block know that we are letting go of it.  Based on this,
83      // it will adjust it's PHI nodes.
84      OldDest->removePredecessor(BB);
85
86      // Replace the conditional branch with an unconditional one.
87      Builder.CreateBr(Destination);
88      BI->eraseFromParent();
89      return true;
90    }
91
92    if (Dest2 == Dest1) {       // Conditional branch to same location?
93      // This branch matches something like this:
94      //     br bool %cond, label %Dest, label %Dest
95      // and changes it into:  br label %Dest
96
97      // Let the basic block know that we are letting go of one copy of it.
98      assert(BI->getParent() && "Terminator not inserted in block!");
99      Dest1->removePredecessor(BI->getParent());
100
101      // Replace the conditional branch with an unconditional one.
102      Builder.CreateBr(Dest1);
103      Value *Cond = BI->getCondition();
104      BI->eraseFromParent();
105      if (DeleteDeadConditions)
106        RecursivelyDeleteTriviallyDeadInstructions(Cond, TLI);
107      return true;
108    }
109    return false;
110  }
111
112  if (SwitchInst *SI = dyn_cast<SwitchInst>(T)) {
113    // If we are switching on a constant, we can convert the switch into a
114    // single branch instruction!
115    ConstantInt *CI = dyn_cast<ConstantInt>(SI->getCondition());
116    BasicBlock *TheOnlyDest = SI->getDefaultDest();
117    BasicBlock *DefaultDest = TheOnlyDest;
118
119    // Figure out which case it goes to.
120    for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end();
121         i != e; ++i) {
122      // Found case matching a constant operand?
123      if (i.getCaseValue() == CI) {
124        TheOnlyDest = i.getCaseSuccessor();
125        break;
126      }
127
128      // Check to see if this branch is going to the same place as the default
129      // dest.  If so, eliminate it as an explicit compare.
130      if (i.getCaseSuccessor() == DefaultDest) {
131        MDNode* MD = SI->getMetadata(LLVMContext::MD_prof);
132        unsigned NCases = SI->getNumCases();
133        // Fold the case metadata into the default if there will be any branches
134        // left, unless the metadata doesn't match the switch.
135        if (NCases > 1 && MD && MD->getNumOperands() == 2 + NCases) {
136          // Collect branch weights into a vector.
137          SmallVector<uint32_t, 8> Weights;
138          for (unsigned MD_i = 1, MD_e = MD->getNumOperands(); MD_i < MD_e;
139               ++MD_i) {
140            ConstantInt* CI = dyn_cast<ConstantInt>(MD->getOperand(MD_i));
141            assert(CI);
142            Weights.push_back(CI->getValue().getZExtValue());
143          }
144          // Merge weight of this case to the default weight.
145          unsigned idx = i.getCaseIndex();
146          Weights[0] += Weights[idx+1];
147          // Remove weight for this case.
148          std::swap(Weights[idx+1], Weights.back());
149          Weights.pop_back();
150          SI->setMetadata(LLVMContext::MD_prof,
151                          MDBuilder(BB->getContext()).
152                          createBranchWeights(Weights));
153        }
154        // Remove this entry.
155        DefaultDest->removePredecessor(SI->getParent());
156        SI->removeCase(i);
157        --i; --e;
158        continue;
159      }
160
161      // Otherwise, check to see if the switch only branches to one destination.
162      // We do this by reseting "TheOnlyDest" to null when we find two non-equal
163      // destinations.
164      if (i.getCaseSuccessor() != TheOnlyDest) TheOnlyDest = nullptr;
165    }
166
167    if (CI && !TheOnlyDest) {
168      // Branching on a constant, but not any of the cases, go to the default
169      // successor.
170      TheOnlyDest = SI->getDefaultDest();
171    }
172
173    // If we found a single destination that we can fold the switch into, do so
174    // now.
175    if (TheOnlyDest) {
176      // Insert the new branch.
177      Builder.CreateBr(TheOnlyDest);
178      BasicBlock *BB = SI->getParent();
179
180      // Remove entries from PHI nodes which we no longer branch to...
181      for (unsigned i = 0, e = SI->getNumSuccessors(); i != e; ++i) {
182        // Found case matching a constant operand?
183        BasicBlock *Succ = SI->getSuccessor(i);
184        if (Succ == TheOnlyDest)
185          TheOnlyDest = nullptr; // Don't modify the first branch to TheOnlyDest
186        else
187          Succ->removePredecessor(BB);
188      }
189
190      // Delete the old switch.
191      Value *Cond = SI->getCondition();
192      SI->eraseFromParent();
193      if (DeleteDeadConditions)
194        RecursivelyDeleteTriviallyDeadInstructions(Cond, TLI);
195      return true;
196    }
197
198    if (SI->getNumCases() == 1) {
199      // Otherwise, we can fold this switch into a conditional branch
200      // instruction if it has only one non-default destination.
201      SwitchInst::CaseIt FirstCase = SI->case_begin();
202      Value *Cond = Builder.CreateICmpEQ(SI->getCondition(),
203          FirstCase.getCaseValue(), "cond");
204
205      // Insert the new branch.
206      BranchInst *NewBr = Builder.CreateCondBr(Cond,
207                                               FirstCase.getCaseSuccessor(),
208                                               SI->getDefaultDest());
209      MDNode* MD = SI->getMetadata(LLVMContext::MD_prof);
210      if (MD && MD->getNumOperands() == 3) {
211        ConstantInt *SICase = dyn_cast<ConstantInt>(MD->getOperand(2));
212        ConstantInt *SIDef = dyn_cast<ConstantInt>(MD->getOperand(1));
213        assert(SICase && SIDef);
214        // The TrueWeight should be the weight for the single case of SI.
215        NewBr->setMetadata(LLVMContext::MD_prof,
216                        MDBuilder(BB->getContext()).
217                        createBranchWeights(SICase->getValue().getZExtValue(),
218                                            SIDef->getValue().getZExtValue()));
219      }
220
221      // Delete the old switch.
222      SI->eraseFromParent();
223      return true;
224    }
225    return false;
226  }
227
228  if (IndirectBrInst *IBI = dyn_cast<IndirectBrInst>(T)) {
229    // indirectbr blockaddress(@F, @BB) -> br label @BB
230    if (BlockAddress *BA =
231          dyn_cast<BlockAddress>(IBI->getAddress()->stripPointerCasts())) {
232      BasicBlock *TheOnlyDest = BA->getBasicBlock();
233      // Insert the new branch.
234      Builder.CreateBr(TheOnlyDest);
235
236      for (unsigned i = 0, e = IBI->getNumDestinations(); i != e; ++i) {
237        if (IBI->getDestination(i) == TheOnlyDest)
238          TheOnlyDest = nullptr;
239        else
240          IBI->getDestination(i)->removePredecessor(IBI->getParent());
241      }
242      Value *Address = IBI->getAddress();
243      IBI->eraseFromParent();
244      if (DeleteDeadConditions)
245        RecursivelyDeleteTriviallyDeadInstructions(Address, TLI);
246
247      // If we didn't find our destination in the IBI successor list, then we
248      // have undefined behavior.  Replace the unconditional branch with an
249      // 'unreachable' instruction.
250      if (TheOnlyDest) {
251        BB->getTerminator()->eraseFromParent();
252        new UnreachableInst(BB->getContext(), BB);
253      }
254
255      return true;
256    }
257  }
258
259  return false;
260}
261
262
263//===----------------------------------------------------------------------===//
264//  Local dead code elimination.
265//
266
267/// isInstructionTriviallyDead - Return true if the result produced by the
268/// instruction is not used, and the instruction has no side effects.
269///
270bool llvm::isInstructionTriviallyDead(Instruction *I,
271                                      const TargetLibraryInfo *TLI) {
272  if (!I->use_empty() || isa<TerminatorInst>(I)) return false;
273
274  // We don't want the landingpad instruction removed by anything this general.
275  if (isa<LandingPadInst>(I))
276    return false;
277
278  // We don't want debug info removed by anything this general, unless
279  // debug info is empty.
280  if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(I)) {
281    if (DDI->getAddress())
282      return false;
283    return true;
284  }
285  if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(I)) {
286    if (DVI->getValue())
287      return false;
288    return true;
289  }
290
291  if (!I->mayHaveSideEffects()) return true;
292
293  // Special case intrinsics that "may have side effects" but can be deleted
294  // when dead.
295  if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) {
296    // Safe to delete llvm.stacksave if dead.
297    if (II->getIntrinsicID() == Intrinsic::stacksave)
298      return true;
299
300    // Lifetime intrinsics are dead when their right-hand is undef.
301    if (II->getIntrinsicID() == Intrinsic::lifetime_start ||
302        II->getIntrinsicID() == Intrinsic::lifetime_end)
303      return isa<UndefValue>(II->getArgOperand(1));
304  }
305
306  if (isAllocLikeFn(I, TLI)) return true;
307
308  if (CallInst *CI = isFreeCall(I, TLI))
309    if (Constant *C = dyn_cast<Constant>(CI->getArgOperand(0)))
310      return C->isNullValue() || isa<UndefValue>(C);
311
312  return false;
313}
314
315/// RecursivelyDeleteTriviallyDeadInstructions - If the specified value is a
316/// trivially dead instruction, delete it.  If that makes any of its operands
317/// trivially dead, delete them too, recursively.  Return true if any
318/// instructions were deleted.
319bool
320llvm::RecursivelyDeleteTriviallyDeadInstructions(Value *V,
321                                                 const TargetLibraryInfo *TLI) {
322  Instruction *I = dyn_cast<Instruction>(V);
323  if (!I || !I->use_empty() || !isInstructionTriviallyDead(I, TLI))
324    return false;
325
326  SmallVector<Instruction*, 16> DeadInsts;
327  DeadInsts.push_back(I);
328
329  do {
330    I = DeadInsts.pop_back_val();
331
332    // Null out all of the instruction's operands to see if any operand becomes
333    // dead as we go.
334    for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
335      Value *OpV = I->getOperand(i);
336      I->setOperand(i, nullptr);
337
338      if (!OpV->use_empty()) continue;
339
340      // If the operand is an instruction that became dead as we nulled out the
341      // operand, and if it is 'trivially' dead, delete it in a future loop
342      // iteration.
343      if (Instruction *OpI = dyn_cast<Instruction>(OpV))
344        if (isInstructionTriviallyDead(OpI, TLI))
345          DeadInsts.push_back(OpI);
346    }
347
348    I->eraseFromParent();
349  } while (!DeadInsts.empty());
350
351  return true;
352}
353
354/// areAllUsesEqual - Check whether the uses of a value are all the same.
355/// This is similar to Instruction::hasOneUse() except this will also return
356/// true when there are no uses or multiple uses that all refer to the same
357/// value.
358static bool areAllUsesEqual(Instruction *I) {
359  Value::user_iterator UI = I->user_begin();
360  Value::user_iterator UE = I->user_end();
361  if (UI == UE)
362    return true;
363
364  User *TheUse = *UI;
365  for (++UI; UI != UE; ++UI) {
366    if (*UI != TheUse)
367      return false;
368  }
369  return true;
370}
371
372/// RecursivelyDeleteDeadPHINode - If the specified value is an effectively
373/// dead PHI node, due to being a def-use chain of single-use nodes that
374/// either forms a cycle or is terminated by a trivially dead instruction,
375/// delete it.  If that makes any of its operands trivially dead, delete them
376/// too, recursively.  Return true if a change was made.
377bool llvm::RecursivelyDeleteDeadPHINode(PHINode *PN,
378                                        const TargetLibraryInfo *TLI) {
379  SmallPtrSet<Instruction*, 4> Visited;
380  for (Instruction *I = PN; areAllUsesEqual(I) && !I->mayHaveSideEffects();
381       I = cast<Instruction>(*I->user_begin())) {
382    if (I->use_empty())
383      return RecursivelyDeleteTriviallyDeadInstructions(I, TLI);
384
385    // If we find an instruction more than once, we're on a cycle that
386    // won't prove fruitful.
387    if (!Visited.insert(I)) {
388      // Break the cycle and delete the instruction and its operands.
389      I->replaceAllUsesWith(UndefValue::get(I->getType()));
390      (void)RecursivelyDeleteTriviallyDeadInstructions(I, TLI);
391      return true;
392    }
393  }
394  return false;
395}
396
397/// SimplifyInstructionsInBlock - Scan the specified basic block and try to
398/// simplify any instructions in it and recursively delete dead instructions.
399///
400/// This returns true if it changed the code, note that it can delete
401/// instructions in other blocks as well in this block.
402bool llvm::SimplifyInstructionsInBlock(BasicBlock *BB, const DataLayout *TD,
403                                       const TargetLibraryInfo *TLI) {
404  bool MadeChange = false;
405
406#ifndef NDEBUG
407  // In debug builds, ensure that the terminator of the block is never replaced
408  // or deleted by these simplifications. The idea of simplification is that it
409  // cannot introduce new instructions, and there is no way to replace the
410  // terminator of a block without introducing a new instruction.
411  AssertingVH<Instruction> TerminatorVH(--BB->end());
412#endif
413
414  for (BasicBlock::iterator BI = BB->begin(), E = --BB->end(); BI != E; ) {
415    assert(!BI->isTerminator());
416    Instruction *Inst = BI++;
417
418    WeakVH BIHandle(BI);
419    if (recursivelySimplifyInstruction(Inst, TD, TLI)) {
420      MadeChange = true;
421      if (BIHandle != BI)
422        BI = BB->begin();
423      continue;
424    }
425
426    MadeChange |= RecursivelyDeleteTriviallyDeadInstructions(Inst, TLI);
427    if (BIHandle != BI)
428      BI = BB->begin();
429  }
430  return MadeChange;
431}
432
433//===----------------------------------------------------------------------===//
434//  Control Flow Graph Restructuring.
435//
436
437
438/// RemovePredecessorAndSimplify - Like BasicBlock::removePredecessor, this
439/// method is called when we're about to delete Pred as a predecessor of BB.  If
440/// BB contains any PHI nodes, this drops the entries in the PHI nodes for Pred.
441///
442/// Unlike the removePredecessor method, this attempts to simplify uses of PHI
443/// nodes that collapse into identity values.  For example, if we have:
444///   x = phi(1, 0, 0, 0)
445///   y = and x, z
446///
447/// .. and delete the predecessor corresponding to the '1', this will attempt to
448/// recursively fold the and to 0.
449void llvm::RemovePredecessorAndSimplify(BasicBlock *BB, BasicBlock *Pred,
450                                        DataLayout *TD) {
451  // This only adjusts blocks with PHI nodes.
452  if (!isa<PHINode>(BB->begin()))
453    return;
454
455  // Remove the entries for Pred from the PHI nodes in BB, but do not simplify
456  // them down.  This will leave us with single entry phi nodes and other phis
457  // that can be removed.
458  BB->removePredecessor(Pred, true);
459
460  WeakVH PhiIt = &BB->front();
461  while (PHINode *PN = dyn_cast<PHINode>(PhiIt)) {
462    PhiIt = &*++BasicBlock::iterator(cast<Instruction>(PhiIt));
463    Value *OldPhiIt = PhiIt;
464
465    if (!recursivelySimplifyInstruction(PN, TD))
466      continue;
467
468    // If recursive simplification ended up deleting the next PHI node we would
469    // iterate to, then our iterator is invalid, restart scanning from the top
470    // of the block.
471    if (PhiIt != OldPhiIt) PhiIt = &BB->front();
472  }
473}
474
475
476/// MergeBasicBlockIntoOnlyPred - DestBB is a block with one predecessor and its
477/// predecessor is known to have one successor (DestBB!).  Eliminate the edge
478/// between them, moving the instructions in the predecessor into DestBB and
479/// deleting the predecessor block.
480///
481void llvm::MergeBasicBlockIntoOnlyPred(BasicBlock *DestBB, Pass *P) {
482  // If BB has single-entry PHI nodes, fold them.
483  while (PHINode *PN = dyn_cast<PHINode>(DestBB->begin())) {
484    Value *NewVal = PN->getIncomingValue(0);
485    // Replace self referencing PHI with undef, it must be dead.
486    if (NewVal == PN) NewVal = UndefValue::get(PN->getType());
487    PN->replaceAllUsesWith(NewVal);
488    PN->eraseFromParent();
489  }
490
491  BasicBlock *PredBB = DestBB->getSinglePredecessor();
492  assert(PredBB && "Block doesn't have a single predecessor!");
493
494  // Zap anything that took the address of DestBB.  Not doing this will give the
495  // address an invalid value.
496  if (DestBB->hasAddressTaken()) {
497    BlockAddress *BA = BlockAddress::get(DestBB);
498    Constant *Replacement =
499      ConstantInt::get(llvm::Type::getInt32Ty(BA->getContext()), 1);
500    BA->replaceAllUsesWith(ConstantExpr::getIntToPtr(Replacement,
501                                                     BA->getType()));
502    BA->destroyConstant();
503  }
504
505  // Anything that branched to PredBB now branches to DestBB.
506  PredBB->replaceAllUsesWith(DestBB);
507
508  // Splice all the instructions from PredBB to DestBB.
509  PredBB->getTerminator()->eraseFromParent();
510  DestBB->getInstList().splice(DestBB->begin(), PredBB->getInstList());
511
512  if (P) {
513    if (DominatorTreeWrapperPass *DTWP =
514            P->getAnalysisIfAvailable<DominatorTreeWrapperPass>()) {
515      DominatorTree &DT = DTWP->getDomTree();
516      BasicBlock *PredBBIDom = DT.getNode(PredBB)->getIDom()->getBlock();
517      DT.changeImmediateDominator(DestBB, PredBBIDom);
518      DT.eraseNode(PredBB);
519    }
520  }
521  // Nuke BB.
522  PredBB->eraseFromParent();
523}
524
525/// CanMergeValues - Return true if we can choose one of these values to use
526/// in place of the other. Note that we will always choose the non-undef
527/// value to keep.
528static bool CanMergeValues(Value *First, Value *Second) {
529  return First == Second || isa<UndefValue>(First) || isa<UndefValue>(Second);
530}
531
532/// CanPropagatePredecessorsForPHIs - Return true if we can fold BB, an
533/// almost-empty BB ending in an unconditional branch to Succ, into Succ.
534///
535/// Assumption: Succ is the single successor for BB.
536///
537static bool CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) {
538  assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!");
539
540  DEBUG(dbgs() << "Looking to fold " << BB->getName() << " into "
541        << Succ->getName() << "\n");
542  // Shortcut, if there is only a single predecessor it must be BB and merging
543  // is always safe
544  if (Succ->getSinglePredecessor()) return true;
545
546  // Make a list of the predecessors of BB
547  SmallPtrSet<BasicBlock*, 16> BBPreds(pred_begin(BB), pred_end(BB));
548
549  // Look at all the phi nodes in Succ, to see if they present a conflict when
550  // merging these blocks
551  for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
552    PHINode *PN = cast<PHINode>(I);
553
554    // If the incoming value from BB is again a PHINode in
555    // BB which has the same incoming value for *PI as PN does, we can
556    // merge the phi nodes and then the blocks can still be merged
557    PHINode *BBPN = dyn_cast<PHINode>(PN->getIncomingValueForBlock(BB));
558    if (BBPN && BBPN->getParent() == BB) {
559      for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
560        BasicBlock *IBB = PN->getIncomingBlock(PI);
561        if (BBPreds.count(IBB) &&
562            !CanMergeValues(BBPN->getIncomingValueForBlock(IBB),
563                            PN->getIncomingValue(PI))) {
564          DEBUG(dbgs() << "Can't fold, phi node " << PN->getName() << " in "
565                << Succ->getName() << " is conflicting with "
566                << BBPN->getName() << " with regard to common predecessor "
567                << IBB->getName() << "\n");
568          return false;
569        }
570      }
571    } else {
572      Value* Val = PN->getIncomingValueForBlock(BB);
573      for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
574        // See if the incoming value for the common predecessor is equal to the
575        // one for BB, in which case this phi node will not prevent the merging
576        // of the block.
577        BasicBlock *IBB = PN->getIncomingBlock(PI);
578        if (BBPreds.count(IBB) &&
579            !CanMergeValues(Val, PN->getIncomingValue(PI))) {
580          DEBUG(dbgs() << "Can't fold, phi node " << PN->getName() << " in "
581                << Succ->getName() << " is conflicting with regard to common "
582                << "predecessor " << IBB->getName() << "\n");
583          return false;
584        }
585      }
586    }
587  }
588
589  return true;
590}
591
592typedef SmallVector<BasicBlock *, 16> PredBlockVector;
593typedef DenseMap<BasicBlock *, Value *> IncomingValueMap;
594
595/// \brief Determines the value to use as the phi node input for a block.
596///
597/// Select between \p OldVal any value that we know flows from \p BB
598/// to a particular phi on the basis of which one (if either) is not
599/// undef. Update IncomingValues based on the selected value.
600///
601/// \param OldVal The value we are considering selecting.
602/// \param BB The block that the value flows in from.
603/// \param IncomingValues A map from block-to-value for other phi inputs
604/// that we have examined.
605///
606/// \returns the selected value.
607static Value *selectIncomingValueForBlock(Value *OldVal, BasicBlock *BB,
608                                          IncomingValueMap &IncomingValues) {
609  if (!isa<UndefValue>(OldVal)) {
610    assert((!IncomingValues.count(BB) ||
611            IncomingValues.find(BB)->second == OldVal) &&
612           "Expected OldVal to match incoming value from BB!");
613
614    IncomingValues.insert(std::make_pair(BB, OldVal));
615    return OldVal;
616  }
617
618  IncomingValueMap::const_iterator It = IncomingValues.find(BB);
619  if (It != IncomingValues.end()) return It->second;
620
621  return OldVal;
622}
623
624/// \brief Create a map from block to value for the operands of a
625/// given phi.
626///
627/// Create a map from block to value for each non-undef value flowing
628/// into \p PN.
629///
630/// \param PN The phi we are collecting the map for.
631/// \param IncomingValues [out] The map from block to value for this phi.
632static void gatherIncomingValuesToPhi(PHINode *PN,
633                                      IncomingValueMap &IncomingValues) {
634  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
635    BasicBlock *BB = PN->getIncomingBlock(i);
636    Value *V = PN->getIncomingValue(i);
637
638    if (!isa<UndefValue>(V))
639      IncomingValues.insert(std::make_pair(BB, V));
640  }
641}
642
643/// \brief Replace the incoming undef values to a phi with the values
644/// from a block-to-value map.
645///
646/// \param PN The phi we are replacing the undefs in.
647/// \param IncomingValues A map from block to value.
648static void replaceUndefValuesInPhi(PHINode *PN,
649                                    const IncomingValueMap &IncomingValues) {
650  for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
651    Value *V = PN->getIncomingValue(i);
652
653    if (!isa<UndefValue>(V)) continue;
654
655    BasicBlock *BB = PN->getIncomingBlock(i);
656    IncomingValueMap::const_iterator It = IncomingValues.find(BB);
657    if (It == IncomingValues.end()) continue;
658
659    PN->setIncomingValue(i, It->second);
660  }
661}
662
663/// \brief Replace a value flowing from a block to a phi with
664/// potentially multiple instances of that value flowing from the
665/// block's predecessors to the phi.
666///
667/// \param BB The block with the value flowing into the phi.
668/// \param BBPreds The predecessors of BB.
669/// \param PN The phi that we are updating.
670static void redirectValuesFromPredecessorsToPhi(BasicBlock *BB,
671                                                const PredBlockVector &BBPreds,
672                                                PHINode *PN) {
673  Value *OldVal = PN->removeIncomingValue(BB, false);
674  assert(OldVal && "No entry in PHI for Pred BB!");
675
676  IncomingValueMap IncomingValues;
677
678  // We are merging two blocks - BB, and the block containing PN - and
679  // as a result we need to redirect edges from the predecessors of BB
680  // to go to the block containing PN, and update PN
681  // accordingly. Since we allow merging blocks in the case where the
682  // predecessor and successor blocks both share some predecessors,
683  // and where some of those common predecessors might have undef
684  // values flowing into PN, we want to rewrite those values to be
685  // consistent with the non-undef values.
686
687  gatherIncomingValuesToPhi(PN, IncomingValues);
688
689  // If this incoming value is one of the PHI nodes in BB, the new entries
690  // in the PHI node are the entries from the old PHI.
691  if (isa<PHINode>(OldVal) && cast<PHINode>(OldVal)->getParent() == BB) {
692    PHINode *OldValPN = cast<PHINode>(OldVal);
693    for (unsigned i = 0, e = OldValPN->getNumIncomingValues(); i != e; ++i) {
694      // Note that, since we are merging phi nodes and BB and Succ might
695      // have common predecessors, we could end up with a phi node with
696      // identical incoming branches. This will be cleaned up later (and
697      // will trigger asserts if we try to clean it up now, without also
698      // simplifying the corresponding conditional branch).
699      BasicBlock *PredBB = OldValPN->getIncomingBlock(i);
700      Value *PredVal = OldValPN->getIncomingValue(i);
701      Value *Selected = selectIncomingValueForBlock(PredVal, PredBB,
702                                                    IncomingValues);
703
704      // And add a new incoming value for this predecessor for the
705      // newly retargeted branch.
706      PN->addIncoming(Selected, PredBB);
707    }
708  } else {
709    for (unsigned i = 0, e = BBPreds.size(); i != e; ++i) {
710      // Update existing incoming values in PN for this
711      // predecessor of BB.
712      BasicBlock *PredBB = BBPreds[i];
713      Value *Selected = selectIncomingValueForBlock(OldVal, PredBB,
714                                                    IncomingValues);
715
716      // And add a new incoming value for this predecessor for the
717      // newly retargeted branch.
718      PN->addIncoming(Selected, PredBB);
719    }
720  }
721
722  replaceUndefValuesInPhi(PN, IncomingValues);
723}
724
725/// TryToSimplifyUncondBranchFromEmptyBlock - BB is known to contain an
726/// unconditional branch, and contains no instructions other than PHI nodes,
727/// potential side-effect free intrinsics and the branch.  If possible,
728/// eliminate BB by rewriting all the predecessors to branch to the successor
729/// block and return true.  If we can't transform, return false.
730bool llvm::TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB) {
731  assert(BB != &BB->getParent()->getEntryBlock() &&
732         "TryToSimplifyUncondBranchFromEmptyBlock called on entry block!");
733
734  // We can't eliminate infinite loops.
735  BasicBlock *Succ = cast<BranchInst>(BB->getTerminator())->getSuccessor(0);
736  if (BB == Succ) return false;
737
738  // Check to see if merging these blocks would cause conflicts for any of the
739  // phi nodes in BB or Succ. If not, we can safely merge.
740  if (!CanPropagatePredecessorsForPHIs(BB, Succ)) return false;
741
742  // Check for cases where Succ has multiple predecessors and a PHI node in BB
743  // has uses which will not disappear when the PHI nodes are merged.  It is
744  // possible to handle such cases, but difficult: it requires checking whether
745  // BB dominates Succ, which is non-trivial to calculate in the case where
746  // Succ has multiple predecessors.  Also, it requires checking whether
747  // constructing the necessary self-referential PHI node doesn't introduce any
748  // conflicts; this isn't too difficult, but the previous code for doing this
749  // was incorrect.
750  //
751  // Note that if this check finds a live use, BB dominates Succ, so BB is
752  // something like a loop pre-header (or rarely, a part of an irreducible CFG);
753  // folding the branch isn't profitable in that case anyway.
754  if (!Succ->getSinglePredecessor()) {
755    BasicBlock::iterator BBI = BB->begin();
756    while (isa<PHINode>(*BBI)) {
757      for (Use &U : BBI->uses()) {
758        if (PHINode* PN = dyn_cast<PHINode>(U.getUser())) {
759          if (PN->getIncomingBlock(U) != BB)
760            return false;
761        } else {
762          return false;
763        }
764      }
765      ++BBI;
766    }
767  }
768
769  DEBUG(dbgs() << "Killing Trivial BB: \n" << *BB);
770
771  if (isa<PHINode>(Succ->begin())) {
772    // If there is more than one pred of succ, and there are PHI nodes in
773    // the successor, then we need to add incoming edges for the PHI nodes
774    //
775    const PredBlockVector BBPreds(pred_begin(BB), pred_end(BB));
776
777    // Loop over all of the PHI nodes in the successor of BB.
778    for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
779      PHINode *PN = cast<PHINode>(I);
780
781      redirectValuesFromPredecessorsToPhi(BB, BBPreds, PN);
782    }
783  }
784
785  if (Succ->getSinglePredecessor()) {
786    // BB is the only predecessor of Succ, so Succ will end up with exactly
787    // the same predecessors BB had.
788
789    // Copy over any phi, debug or lifetime instruction.
790    BB->getTerminator()->eraseFromParent();
791    Succ->getInstList().splice(Succ->getFirstNonPHI(), BB->getInstList());
792  } else {
793    while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) {
794      // We explicitly check for such uses in CanPropagatePredecessorsForPHIs.
795      assert(PN->use_empty() && "There shouldn't be any uses here!");
796      PN->eraseFromParent();
797    }
798  }
799
800  // Everything that jumped to BB now goes to Succ.
801  BB->replaceAllUsesWith(Succ);
802  if (!Succ->hasName()) Succ->takeName(BB);
803  BB->eraseFromParent();              // Delete the old basic block.
804  return true;
805}
806
807/// EliminateDuplicatePHINodes - Check for and eliminate duplicate PHI
808/// nodes in this block. This doesn't try to be clever about PHI nodes
809/// which differ only in the order of the incoming values, but instcombine
810/// orders them so it usually won't matter.
811///
812bool llvm::EliminateDuplicatePHINodes(BasicBlock *BB) {
813  bool Changed = false;
814
815  // This implementation doesn't currently consider undef operands
816  // specially. Theoretically, two phis which are identical except for
817  // one having an undef where the other doesn't could be collapsed.
818
819  // Map from PHI hash values to PHI nodes. If multiple PHIs have
820  // the same hash value, the element is the first PHI in the
821  // linked list in CollisionMap.
822  DenseMap<uintptr_t, PHINode *> HashMap;
823
824  // Maintain linked lists of PHI nodes with common hash values.
825  DenseMap<PHINode *, PHINode *> CollisionMap;
826
827  // Examine each PHI.
828  for (BasicBlock::iterator I = BB->begin();
829       PHINode *PN = dyn_cast<PHINode>(I++); ) {
830    // Compute a hash value on the operands. Instcombine will likely have sorted
831    // them, which helps expose duplicates, but we have to check all the
832    // operands to be safe in case instcombine hasn't run.
833    uintptr_t Hash = 0;
834    // This hash algorithm is quite weak as hash functions go, but it seems
835    // to do a good enough job for this particular purpose, and is very quick.
836    for (User::op_iterator I = PN->op_begin(), E = PN->op_end(); I != E; ++I) {
837      Hash ^= reinterpret_cast<uintptr_t>(static_cast<Value *>(*I));
838      Hash = (Hash << 7) | (Hash >> (sizeof(uintptr_t) * CHAR_BIT - 7));
839    }
840    for (PHINode::block_iterator I = PN->block_begin(), E = PN->block_end();
841         I != E; ++I) {
842      Hash ^= reinterpret_cast<uintptr_t>(static_cast<BasicBlock *>(*I));
843      Hash = (Hash << 7) | (Hash >> (sizeof(uintptr_t) * CHAR_BIT - 7));
844    }
845    // Avoid colliding with the DenseMap sentinels ~0 and ~0-1.
846    Hash >>= 1;
847    // If we've never seen this hash value before, it's a unique PHI.
848    std::pair<DenseMap<uintptr_t, PHINode *>::iterator, bool> Pair =
849      HashMap.insert(std::make_pair(Hash, PN));
850    if (Pair.second) continue;
851    // Otherwise it's either a duplicate or a hash collision.
852    for (PHINode *OtherPN = Pair.first->second; ; ) {
853      if (OtherPN->isIdenticalTo(PN)) {
854        // A duplicate. Replace this PHI with its duplicate.
855        PN->replaceAllUsesWith(OtherPN);
856        PN->eraseFromParent();
857        Changed = true;
858        break;
859      }
860      // A non-duplicate hash collision.
861      DenseMap<PHINode *, PHINode *>::iterator I = CollisionMap.find(OtherPN);
862      if (I == CollisionMap.end()) {
863        // Set this PHI to be the head of the linked list of colliding PHIs.
864        PHINode *Old = Pair.first->second;
865        Pair.first->second = PN;
866        CollisionMap[PN] = Old;
867        break;
868      }
869      // Proceed to the next PHI in the list.
870      OtherPN = I->second;
871    }
872  }
873
874  return Changed;
875}
876
877/// enforceKnownAlignment - If the specified pointer points to an object that
878/// we control, modify the object's alignment to PrefAlign. This isn't
879/// often possible though. If alignment is important, a more reliable approach
880/// is to simply align all global variables and allocation instructions to
881/// their preferred alignment from the beginning.
882///
883static unsigned enforceKnownAlignment(Value *V, unsigned Align,
884                                      unsigned PrefAlign, const DataLayout *TD) {
885  V = V->stripPointerCasts();
886
887  if (AllocaInst *AI = dyn_cast<AllocaInst>(V)) {
888    // If the preferred alignment is greater than the natural stack alignment
889    // then don't round up. This avoids dynamic stack realignment.
890    if (TD && TD->exceedsNaturalStackAlignment(PrefAlign))
891      return Align;
892    // If there is a requested alignment and if this is an alloca, round up.
893    if (AI->getAlignment() >= PrefAlign)
894      return AI->getAlignment();
895    AI->setAlignment(PrefAlign);
896    return PrefAlign;
897  }
898
899  if (auto *GO = dyn_cast<GlobalObject>(V)) {
900    // If there is a large requested alignment and we can, bump up the alignment
901    // of the global.
902    if (GO->isDeclaration())
903      return Align;
904    // If the memory we set aside for the global may not be the memory used by
905    // the final program then it is impossible for us to reliably enforce the
906    // preferred alignment.
907    if (GO->isWeakForLinker())
908      return Align;
909
910    if (GO->getAlignment() >= PrefAlign)
911      return GO->getAlignment();
912    // We can only increase the alignment of the global if it has no alignment
913    // specified or if it is not assigned a section.  If it is assigned a
914    // section, the global could be densely packed with other objects in the
915    // section, increasing the alignment could cause padding issues.
916    if (!GO->hasSection() || GO->getAlignment() == 0)
917      GO->setAlignment(PrefAlign);
918    return GO->getAlignment();
919  }
920
921  return Align;
922}
923
924/// getOrEnforceKnownAlignment - If the specified pointer has an alignment that
925/// we can determine, return it, otherwise return 0.  If PrefAlign is specified,
926/// and it is more than the alignment of the ultimate object, see if we can
927/// increase the alignment of the ultimate object, making this check succeed.
928unsigned llvm::getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign,
929                                          const DataLayout *DL) {
930  assert(V->getType()->isPointerTy() &&
931         "getOrEnforceKnownAlignment expects a pointer!");
932  unsigned BitWidth = DL ? DL->getPointerTypeSizeInBits(V->getType()) : 64;
933
934  APInt KnownZero(BitWidth, 0), KnownOne(BitWidth, 0);
935  computeKnownBits(V, KnownZero, KnownOne, DL);
936  unsigned TrailZ = KnownZero.countTrailingOnes();
937
938  // Avoid trouble with ridiculously large TrailZ values, such as
939  // those computed from a null pointer.
940  TrailZ = std::min(TrailZ, unsigned(sizeof(unsigned) * CHAR_BIT - 1));
941
942  unsigned Align = 1u << std::min(BitWidth - 1, TrailZ);
943
944  // LLVM doesn't support alignments larger than this currently.
945  Align = std::min(Align, +Value::MaximumAlignment);
946
947  if (PrefAlign > Align)
948    Align = enforceKnownAlignment(V, Align, PrefAlign, DL);
949
950  // We don't need to make any adjustment.
951  return Align;
952}
953
954///===---------------------------------------------------------------------===//
955///  Dbg Intrinsic utilities
956///
957
958/// See if there is a dbg.value intrinsic for DIVar before I.
959static bool LdStHasDebugValue(DIVariable &DIVar, Instruction *I) {
960  // Since we can't guarantee that the original dbg.declare instrinsic
961  // is removed by LowerDbgDeclare(), we need to make sure that we are
962  // not inserting the same dbg.value intrinsic over and over.
963  llvm::BasicBlock::InstListType::iterator PrevI(I);
964  if (PrevI != I->getParent()->getInstList().begin()) {
965    --PrevI;
966    if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(PrevI))
967      if (DVI->getValue() == I->getOperand(0) &&
968          DVI->getOffset() == 0 &&
969          DVI->getVariable() == DIVar)
970        return true;
971  }
972  return false;
973}
974
975/// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd value
976/// that has an associated llvm.dbg.decl intrinsic.
977bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,
978                                           StoreInst *SI, DIBuilder &Builder) {
979  DIVariable DIVar(DDI->getVariable());
980  assert((!DIVar || DIVar.isVariable()) &&
981         "Variable in DbgDeclareInst should be either null or a DIVariable.");
982  if (!DIVar)
983    return false;
984
985  if (LdStHasDebugValue(DIVar, SI))
986    return true;
987
988  Instruction *DbgVal = nullptr;
989  // If an argument is zero extended then use argument directly. The ZExt
990  // may be zapped by an optimization pass in future.
991  Argument *ExtendedArg = nullptr;
992  if (ZExtInst *ZExt = dyn_cast<ZExtInst>(SI->getOperand(0)))
993    ExtendedArg = dyn_cast<Argument>(ZExt->getOperand(0));
994  if (SExtInst *SExt = dyn_cast<SExtInst>(SI->getOperand(0)))
995    ExtendedArg = dyn_cast<Argument>(SExt->getOperand(0));
996  if (ExtendedArg)
997    DbgVal = Builder.insertDbgValueIntrinsic(ExtendedArg, 0, DIVar, SI);
998  else
999    DbgVal = Builder.insertDbgValueIntrinsic(SI->getOperand(0), 0, DIVar, SI);
1000  DbgVal->setDebugLoc(DDI->getDebugLoc());
1001  return true;
1002}
1003
1004/// Inserts a llvm.dbg.value intrinsic before a load of an alloca'd value
1005/// that has an associated llvm.dbg.decl intrinsic.
1006bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,
1007                                           LoadInst *LI, DIBuilder &Builder) {
1008  DIVariable DIVar(DDI->getVariable());
1009  assert((!DIVar || DIVar.isVariable()) &&
1010         "Variable in DbgDeclareInst should be either null or a DIVariable.");
1011  if (!DIVar)
1012    return false;
1013
1014  if (LdStHasDebugValue(DIVar, LI))
1015    return true;
1016
1017  Instruction *DbgVal =
1018    Builder.insertDbgValueIntrinsic(LI->getOperand(0), 0,
1019                                    DIVar, LI);
1020  DbgVal->setDebugLoc(DDI->getDebugLoc());
1021  return true;
1022}
1023
1024/// Determine whether this alloca is either a VLA or an array.
1025static bool isArray(AllocaInst *AI) {
1026  return AI->isArrayAllocation() ||
1027    AI->getType()->getElementType()->isArrayTy();
1028}
1029
1030/// LowerDbgDeclare - Lowers llvm.dbg.declare intrinsics into appropriate set
1031/// of llvm.dbg.value intrinsics.
1032bool llvm::LowerDbgDeclare(Function &F) {
1033  DIBuilder DIB(*F.getParent());
1034  SmallVector<DbgDeclareInst *, 4> Dbgs;
1035  for (auto &FI : F)
1036    for (BasicBlock::iterator BI : FI)
1037      if (auto DDI = dyn_cast<DbgDeclareInst>(BI))
1038        Dbgs.push_back(DDI);
1039
1040  if (Dbgs.empty())
1041    return false;
1042
1043  for (auto &I : Dbgs) {
1044    DbgDeclareInst *DDI = I;
1045    AllocaInst *AI = dyn_cast_or_null<AllocaInst>(DDI->getAddress());
1046    // If this is an alloca for a scalar variable, insert a dbg.value
1047    // at each load and store to the alloca and erase the dbg.declare.
1048    // The dbg.values allow tracking a variable even if it is not
1049    // stored on the stack, while the dbg.declare can only describe
1050    // the stack slot (and at a lexical-scope granularity). Later
1051    // passes will attempt to elide the stack slot.
1052    if (AI && !isArray(AI)) {
1053      for (User *U : AI->users())
1054        if (StoreInst *SI = dyn_cast<StoreInst>(U))
1055          ConvertDebugDeclareToDebugValue(DDI, SI, DIB);
1056        else if (LoadInst *LI = dyn_cast<LoadInst>(U))
1057          ConvertDebugDeclareToDebugValue(DDI, LI, DIB);
1058        else if (CallInst *CI = dyn_cast<CallInst>(U)) {
1059	  // This is a call by-value or some other instruction that
1060	  // takes a pointer to the variable. Insert a *value*
1061	  // intrinsic that describes the alloca.
1062	  auto DbgVal =
1063	    DIB.insertDbgValueIntrinsic(AI, 0,
1064					DIVariable(DDI->getVariable()), CI);
1065	  DbgVal->setDebugLoc(DDI->getDebugLoc());
1066	}
1067      DDI->eraseFromParent();
1068    }
1069  }
1070  return true;
1071}
1072
1073/// FindAllocaDbgDeclare - Finds the llvm.dbg.declare intrinsic describing the
1074/// alloca 'V', if any.
1075DbgDeclareInst *llvm::FindAllocaDbgDeclare(Value *V) {
1076  if (MDNode *DebugNode = MDNode::getIfExists(V->getContext(), V))
1077    for (User *U : DebugNode->users())
1078      if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(U))
1079        return DDI;
1080
1081  return nullptr;
1082}
1083
1084bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
1085                                      DIBuilder &Builder) {
1086  DbgDeclareInst *DDI = FindAllocaDbgDeclare(AI);
1087  if (!DDI)
1088    return false;
1089  DIVariable DIVar(DDI->getVariable());
1090  assert((!DIVar || DIVar.isVariable()) &&
1091         "Variable in DbgDeclareInst should be either null or a DIVariable.");
1092  if (!DIVar)
1093    return false;
1094
1095  // Create a copy of the original DIDescriptor for user variable, appending
1096  // "deref" operation to a list of address elements, as new llvm.dbg.declare
1097  // will take a value storing address of the memory for variable, not
1098  // alloca itself.
1099  Type *Int64Ty = Type::getInt64Ty(AI->getContext());
1100  SmallVector<Value*, 4> NewDIVarAddress;
1101  if (DIVar.hasComplexAddress()) {
1102    for (unsigned i = 0, n = DIVar.getNumAddrElements(); i < n; ++i) {
1103      NewDIVarAddress.push_back(
1104          ConstantInt::get(Int64Ty, DIVar.getAddrElement(i)));
1105    }
1106  }
1107  NewDIVarAddress.push_back(ConstantInt::get(Int64Ty, DIBuilder::OpDeref));
1108  DIVariable NewDIVar = Builder.createComplexVariable(
1109      DIVar.getTag(), DIVar.getContext(), DIVar.getName(),
1110      DIVar.getFile(), DIVar.getLineNumber(), DIVar.getType(),
1111      NewDIVarAddress, DIVar.getArgNumber());
1112
1113  // Insert llvm.dbg.declare in the same basic block as the original alloca,
1114  // and remove old llvm.dbg.declare.
1115  BasicBlock *BB = AI->getParent();
1116  Builder.insertDeclare(NewAllocaAddress, NewDIVar, BB);
1117  DDI->eraseFromParent();
1118  return true;
1119}
1120
1121/// changeToUnreachable - Insert an unreachable instruction before the specified
1122/// instruction, making it and the rest of the code in the block dead.
1123static void changeToUnreachable(Instruction *I, bool UseLLVMTrap) {
1124  BasicBlock *BB = I->getParent();
1125  // Loop over all of the successors, removing BB's entry from any PHI
1126  // nodes.
1127  for (succ_iterator SI = succ_begin(BB), SE = succ_end(BB); SI != SE; ++SI)
1128    (*SI)->removePredecessor(BB);
1129
1130  // Insert a call to llvm.trap right before this.  This turns the undefined
1131  // behavior into a hard fail instead of falling through into random code.
1132  if (UseLLVMTrap) {
1133    Function *TrapFn =
1134      Intrinsic::getDeclaration(BB->getParent()->getParent(), Intrinsic::trap);
1135    CallInst *CallTrap = CallInst::Create(TrapFn, "", I);
1136    CallTrap->setDebugLoc(I->getDebugLoc());
1137  }
1138  new UnreachableInst(I->getContext(), I);
1139
1140  // All instructions after this are dead.
1141  BasicBlock::iterator BBI = I, BBE = BB->end();
1142  while (BBI != BBE) {
1143    if (!BBI->use_empty())
1144      BBI->replaceAllUsesWith(UndefValue::get(BBI->getType()));
1145    BB->getInstList().erase(BBI++);
1146  }
1147}
1148
1149/// changeToCall - Convert the specified invoke into a normal call.
1150static void changeToCall(InvokeInst *II) {
1151  SmallVector<Value*, 8> Args(II->op_begin(), II->op_end() - 3);
1152  CallInst *NewCall = CallInst::Create(II->getCalledValue(), Args, "", II);
1153  NewCall->takeName(II);
1154  NewCall->setCallingConv(II->getCallingConv());
1155  NewCall->setAttributes(II->getAttributes());
1156  NewCall->setDebugLoc(II->getDebugLoc());
1157  II->replaceAllUsesWith(NewCall);
1158
1159  // Follow the call by a branch to the normal destination.
1160  BranchInst::Create(II->getNormalDest(), II);
1161
1162  // Update PHI nodes in the unwind destination
1163  II->getUnwindDest()->removePredecessor(II->getParent());
1164  II->eraseFromParent();
1165}
1166
1167static bool markAliveBlocks(BasicBlock *BB,
1168                            SmallPtrSet<BasicBlock*, 128> &Reachable) {
1169
1170  SmallVector<BasicBlock*, 128> Worklist;
1171  Worklist.push_back(BB);
1172  Reachable.insert(BB);
1173  bool Changed = false;
1174  do {
1175    BB = Worklist.pop_back_val();
1176
1177    // Do a quick scan of the basic block, turning any obviously unreachable
1178    // instructions into LLVM unreachable insts.  The instruction combining pass
1179    // canonicalizes unreachable insts into stores to null or undef.
1180    for (BasicBlock::iterator BBI = BB->begin(), E = BB->end(); BBI != E;++BBI){
1181      if (CallInst *CI = dyn_cast<CallInst>(BBI)) {
1182        if (CI->doesNotReturn()) {
1183          // If we found a call to a no-return function, insert an unreachable
1184          // instruction after it.  Make sure there isn't *already* one there
1185          // though.
1186          ++BBI;
1187          if (!isa<UnreachableInst>(BBI)) {
1188            // Don't insert a call to llvm.trap right before the unreachable.
1189            changeToUnreachable(BBI, false);
1190            Changed = true;
1191          }
1192          break;
1193        }
1194      }
1195
1196      // Store to undef and store to null are undefined and used to signal that
1197      // they should be changed to unreachable by passes that can't modify the
1198      // CFG.
1199      if (StoreInst *SI = dyn_cast<StoreInst>(BBI)) {
1200        // Don't touch volatile stores.
1201        if (SI->isVolatile()) continue;
1202
1203        Value *Ptr = SI->getOperand(1);
1204
1205        if (isa<UndefValue>(Ptr) ||
1206            (isa<ConstantPointerNull>(Ptr) &&
1207             SI->getPointerAddressSpace() == 0)) {
1208          changeToUnreachable(SI, true);
1209          Changed = true;
1210          break;
1211        }
1212      }
1213    }
1214
1215    // Turn invokes that call 'nounwind' functions into ordinary calls.
1216    if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator())) {
1217      Value *Callee = II->getCalledValue();
1218      if (isa<ConstantPointerNull>(Callee) || isa<UndefValue>(Callee)) {
1219        changeToUnreachable(II, true);
1220        Changed = true;
1221      } else if (II->doesNotThrow()) {
1222        if (II->use_empty() && II->onlyReadsMemory()) {
1223          // jump to the normal destination branch.
1224          BranchInst::Create(II->getNormalDest(), II);
1225          II->getUnwindDest()->removePredecessor(II->getParent());
1226          II->eraseFromParent();
1227        } else
1228          changeToCall(II);
1229        Changed = true;
1230      }
1231    }
1232
1233    Changed |= ConstantFoldTerminator(BB, true);
1234    for (succ_iterator SI = succ_begin(BB), SE = succ_end(BB); SI != SE; ++SI)
1235      if (Reachable.insert(*SI))
1236        Worklist.push_back(*SI);
1237  } while (!Worklist.empty());
1238  return Changed;
1239}
1240
1241/// removeUnreachableBlocksFromFn - Remove blocks that are not reachable, even
1242/// if they are in a dead cycle.  Return true if a change was made, false
1243/// otherwise.
1244bool llvm::removeUnreachableBlocks(Function &F) {
1245  SmallPtrSet<BasicBlock*, 128> Reachable;
1246  bool Changed = markAliveBlocks(F.begin(), Reachable);
1247
1248  // If there are unreachable blocks in the CFG...
1249  if (Reachable.size() == F.size())
1250    return Changed;
1251
1252  assert(Reachable.size() < F.size());
1253  NumRemoved += F.size()-Reachable.size();
1254
1255  // Loop over all of the basic blocks that are not reachable, dropping all of
1256  // their internal references...
1257  for (Function::iterator BB = ++F.begin(), E = F.end(); BB != E; ++BB) {
1258    if (Reachable.count(BB))
1259      continue;
1260
1261    for (succ_iterator SI = succ_begin(BB), SE = succ_end(BB); SI != SE; ++SI)
1262      if (Reachable.count(*SI))
1263        (*SI)->removePredecessor(BB);
1264    BB->dropAllReferences();
1265  }
1266
1267  for (Function::iterator I = ++F.begin(); I != F.end();)
1268    if (!Reachable.count(I))
1269      I = F.getBasicBlockList().erase(I);
1270    else
1271      ++I;
1272
1273  return true;
1274}
1275