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