1249259Sdim//===-- BasicBlock.cpp - Implement BasicBlock related methods -------------===//
2249259Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6249259Sdim//
7249259Sdim//===----------------------------------------------------------------------===//
8249259Sdim//
9249259Sdim// This file implements the BasicBlock class for the IR library.
10249259Sdim//
11249259Sdim//===----------------------------------------------------------------------===//
12249259Sdim
13249259Sdim#include "llvm/IR/BasicBlock.h"
14249259Sdim#include "SymbolTableListTraitsImpl.h"
15249259Sdim#include "llvm/ADT/STLExtras.h"
16276479Sdim#include "llvm/IR/CFG.h"
17249259Sdim#include "llvm/IR/Constants.h"
18249259Sdim#include "llvm/IR/Instructions.h"
19249259Sdim#include "llvm/IR/IntrinsicInst.h"
20249259Sdim#include "llvm/IR/LLVMContext.h"
21249259Sdim#include "llvm/IR/Type.h"
22249259Sdim#include <algorithm>
23296417Sdim
24249259Sdimusing namespace llvm;
25249259Sdim
26249259SdimValueSymbolTable *BasicBlock::getValueSymbolTable() {
27249259Sdim  if (Function *F = getParent())
28314564Sdim    return F->getValueSymbolTable();
29276479Sdim  return nullptr;
30249259Sdim}
31249259Sdim
32249259SdimLLVMContext &BasicBlock::getContext() const {
33249259Sdim  return getType()->getContext();
34249259Sdim}
35249259Sdim
36249259Sdim// Explicit instantiation of SymbolTableListTraits since some of the methods
37249259Sdim// are not in the public header file...
38296417Sdimtemplate class llvm::SymbolTableListTraits<Instruction>;
39249259Sdim
40249259SdimBasicBlock::BasicBlock(LLVMContext &C, const Twine &Name, Function *NewParent,
41249259Sdim                       BasicBlock *InsertBefore)
42276479Sdim  : Value(Type::getLabelTy(C), Value::BasicBlockVal), Parent(nullptr) {
43249259Sdim
44280031Sdim  if (NewParent)
45280031Sdim    insertInto(NewParent, InsertBefore);
46280031Sdim  else
47280031Sdim    assert(!InsertBefore &&
48249259Sdim           "Cannot insert block before another block with no function!");
49249259Sdim
50249259Sdim  setName(Name);
51249259Sdim}
52249259Sdim
53280031Sdimvoid BasicBlock::insertInto(Function *NewParent, BasicBlock *InsertBefore) {
54280031Sdim  assert(NewParent && "Expected a parent");
55280031Sdim  assert(!Parent && "Already has a parent");
56249259Sdim
57280031Sdim  if (InsertBefore)
58296417Sdim    NewParent->getBasicBlockList().insert(InsertBefore->getIterator(), this);
59280031Sdim  else
60280031Sdim    NewParent->getBasicBlockList().push_back(this);
61280031Sdim}
62280031Sdim
63249259SdimBasicBlock::~BasicBlock() {
64249259Sdim  // If the address of the block is taken and it is being deleted (e.g. because
65249259Sdim  // it is dead), this means that there is either a dangling constant expr
66249259Sdim  // hanging off the block, or an undefined use of the block (source code
67249259Sdim  // expecting the address of a label to keep the block alive even though there
68249259Sdim  // is no indirect branch).  Handle these cases by zapping the BlockAddress
69249259Sdim  // nodes.  There are no other possible uses at this point.
70249259Sdim  if (hasAddressTaken()) {
71249259Sdim    assert(!use_empty() && "There should be at least one blockaddress!");
72249259Sdim    Constant *Replacement =
73249259Sdim      ConstantInt::get(llvm::Type::getInt32Ty(getContext()), 1);
74249259Sdim    while (!use_empty()) {
75276479Sdim      BlockAddress *BA = cast<BlockAddress>(user_back());
76249259Sdim      BA->replaceAllUsesWith(ConstantExpr::getIntToPtr(Replacement,
77249259Sdim                                                       BA->getType()));
78249259Sdim      BA->destroyConstant();
79249259Sdim    }
80249259Sdim  }
81249259Sdim
82276479Sdim  assert(getParent() == nullptr && "BasicBlock still linked into the program!");
83249259Sdim  dropAllReferences();
84249259Sdim  InstList.clear();
85249259Sdim}
86249259Sdim
87249259Sdimvoid BasicBlock::setParent(Function *parent) {
88249259Sdim  // Set Parent=parent, updating instruction symtab entries as appropriate.
89249259Sdim  InstList.setSymTabObject(&Parent, parent);
90249259Sdim}
91249259Sdim
92341825Sdimiterator_range<filter_iterator<BasicBlock::const_iterator,
93341825Sdim                               std::function<bool(const Instruction &)>>>
94341825SdimBasicBlock::instructionsWithoutDebug() const {
95341825Sdim  std::function<bool(const Instruction &)> Fn = [](const Instruction &I) {
96341825Sdim    return !isa<DbgInfoIntrinsic>(I);
97341825Sdim  };
98341825Sdim  return make_filter_range(*this, Fn);
99341825Sdim}
100341825Sdim
101341825Sdimiterator_range<filter_iterator<BasicBlock::iterator,
102341825Sdim                               std::function<bool(Instruction &)>>>
103341825SdimBasicBlock::instructionsWithoutDebug() {
104341825Sdim  std::function<bool(Instruction &)> Fn = [](Instruction &I) {
105341825Sdim    return !isa<DbgInfoIntrinsic>(I);
106341825Sdim  };
107341825Sdim  return make_filter_range(*this, Fn);
108341825Sdim}
109341825Sdim
110360784Sdimfilter_iterator<BasicBlock::const_iterator,
111360784Sdim                std::function<bool(const Instruction &)>>::difference_type
112360784SdimBasicBlock::sizeWithoutDebug() const {
113360784Sdim  return std::distance(instructionsWithoutDebug().begin(),
114360784Sdim                       instructionsWithoutDebug().end());
115360784Sdim}
116360784Sdim
117249259Sdimvoid BasicBlock::removeFromParent() {
118296417Sdim  getParent()->getBasicBlockList().remove(getIterator());
119249259Sdim}
120249259Sdim
121288943Sdimiplist<BasicBlock>::iterator BasicBlock::eraseFromParent() {
122296417Sdim  return getParent()->getBasicBlockList().erase(getIterator());
123249259Sdim}
124249259Sdim
125288943Sdim/// Unlink this basic block from its current function and
126249259Sdim/// insert it into the function that MovePos lives in, right before MovePos.
127249259Sdimvoid BasicBlock::moveBefore(BasicBlock *MovePos) {
128296417Sdim  MovePos->getParent()->getBasicBlockList().splice(
129296417Sdim      MovePos->getIterator(), getParent()->getBasicBlockList(), getIterator());
130249259Sdim}
131249259Sdim
132288943Sdim/// Unlink this basic block from its current function and
133249259Sdim/// insert it into the function that MovePos lives in, right after MovePos.
134249259Sdimvoid BasicBlock::moveAfter(BasicBlock *MovePos) {
135296417Sdim  MovePos->getParent()->getBasicBlockList().splice(
136296417Sdim      ++MovePos->getIterator(), getParent()->getBasicBlockList(),
137296417Sdim      getIterator());
138249259Sdim}
139249259Sdim
140288943Sdimconst Module *BasicBlock::getModule() const {
141288943Sdim  return getParent()->getParent();
142288943Sdim}
143249259Sdim
144344779Sdimconst Instruction *BasicBlock::getTerminator() const {
145344779Sdim  if (InstList.empty() || !InstList.back().isTerminator())
146344779Sdim    return nullptr;
147344779Sdim  return &InstList.back();
148249259Sdim}
149249259Sdim
150321369Sdimconst CallInst *BasicBlock::getTerminatingMustTailCall() const {
151280031Sdim  if (InstList.empty())
152280031Sdim    return nullptr;
153321369Sdim  const ReturnInst *RI = dyn_cast<ReturnInst>(&InstList.back());
154280031Sdim  if (!RI || RI == &InstList.front())
155280031Sdim    return nullptr;
156280031Sdim
157321369Sdim  const Instruction *Prev = RI->getPrevNode();
158280031Sdim  if (!Prev)
159280031Sdim    return nullptr;
160280031Sdim
161280031Sdim  if (Value *RV = RI->getReturnValue()) {
162280031Sdim    if (RV != Prev)
163280031Sdim      return nullptr;
164280031Sdim
165280031Sdim    // Look through the optional bitcast.
166280031Sdim    if (auto *BI = dyn_cast<BitCastInst>(Prev)) {
167280031Sdim      RV = BI->getOperand(0);
168280031Sdim      Prev = BI->getPrevNode();
169280031Sdim      if (!Prev || RV != Prev)
170280031Sdim        return nullptr;
171280031Sdim    }
172280031Sdim  }
173280031Sdim
174280031Sdim  if (auto *CI = dyn_cast<CallInst>(Prev)) {
175280031Sdim    if (CI->isMustTailCall())
176280031Sdim      return CI;
177280031Sdim  }
178280031Sdim  return nullptr;
179280031Sdim}
180280031Sdim
181321369Sdimconst CallInst *BasicBlock::getTerminatingDeoptimizeCall() const {
182309124Sdim  if (InstList.empty())
183309124Sdim    return nullptr;
184309124Sdim  auto *RI = dyn_cast<ReturnInst>(&InstList.back());
185309124Sdim  if (!RI || RI == &InstList.front())
186309124Sdim    return nullptr;
187309124Sdim
188309124Sdim  if (auto *CI = dyn_cast_or_null<CallInst>(RI->getPrevNode()))
189309124Sdim    if (Function *F = CI->getCalledFunction())
190309124Sdim      if (F->getIntrinsicID() == Intrinsic::experimental_deoptimize)
191309124Sdim        return CI;
192309124Sdim
193309124Sdim  return nullptr;
194309124Sdim}
195309124Sdim
196321369Sdimconst Instruction* BasicBlock::getFirstNonPHI() const {
197321369Sdim  for (const Instruction &I : *this)
198288943Sdim    if (!isa<PHINode>(I))
199288943Sdim      return &I;
200288943Sdim  return nullptr;
201249259Sdim}
202249259Sdim
203321369Sdimconst Instruction* BasicBlock::getFirstNonPHIOrDbg() const {
204321369Sdim  for (const Instruction &I : *this)
205288943Sdim    if (!isa<PHINode>(I) && !isa<DbgInfoIntrinsic>(I))
206288943Sdim      return &I;
207288943Sdim  return nullptr;
208249259Sdim}
209249259Sdim
210321369Sdimconst Instruction* BasicBlock::getFirstNonPHIOrDbgOrLifetime() const {
211321369Sdim  for (const Instruction &I : *this) {
212288943Sdim    if (isa<PHINode>(I) || isa<DbgInfoIntrinsic>(I))
213249259Sdim      continue;
214249259Sdim
215344779Sdim    if (I.isLifetimeStartOrEnd())
216344779Sdim      continue;
217288943Sdim
218288943Sdim    return &I;
219249259Sdim  }
220288943Sdim  return nullptr;
221249259Sdim}
222249259Sdim
223321369SdimBasicBlock::const_iterator BasicBlock::getFirstInsertionPt() const {
224321369Sdim  const Instruction *FirstNonPHI = getFirstNonPHI();
225288943Sdim  if (!FirstNonPHI)
226288943Sdim    return end();
227288943Sdim
228321369Sdim  const_iterator InsertPt = FirstNonPHI->getIterator();
229296417Sdim  if (InsertPt->isEHPad()) ++InsertPt;
230249259Sdim  return InsertPt;
231249259Sdim}
232249259Sdim
233249259Sdimvoid BasicBlock::dropAllReferences() {
234309124Sdim  for (Instruction &I : *this)
235309124Sdim    I.dropAllReferences();
236249259Sdim}
237249259Sdim
238288943Sdim/// If this basic block has a single predecessor block,
239249259Sdim/// return the block, otherwise return a null pointer.
240321369Sdimconst BasicBlock *BasicBlock::getSinglePredecessor() const {
241321369Sdim  const_pred_iterator PI = pred_begin(this), E = pred_end(this);
242276479Sdim  if (PI == E) return nullptr;         // No preds.
243321369Sdim  const BasicBlock *ThePred = *PI;
244249259Sdim  ++PI;
245276479Sdim  return (PI == E) ? ThePred : nullptr /*multiple preds*/;
246249259Sdim}
247249259Sdim
248288943Sdim/// If this basic block has a unique predecessor block,
249249259Sdim/// return the block, otherwise return a null pointer.
250249259Sdim/// Note that unique predecessor doesn't mean single edge, there can be
251249259Sdim/// multiple edges from the unique predecessor to this block (for example
252249259Sdim/// a switch statement with multiple cases having the same destination).
253321369Sdimconst BasicBlock *BasicBlock::getUniquePredecessor() const {
254321369Sdim  const_pred_iterator PI = pred_begin(this), E = pred_end(this);
255276479Sdim  if (PI == E) return nullptr; // No preds.
256321369Sdim  const BasicBlock *PredBB = *PI;
257249259Sdim  ++PI;
258249259Sdim  for (;PI != E; ++PI) {
259249259Sdim    if (*PI != PredBB)
260276479Sdim      return nullptr;
261249259Sdim    // The same predecessor appears multiple times in the predecessor list.
262249259Sdim    // This is OK.
263249259Sdim  }
264249259Sdim  return PredBB;
265249259Sdim}
266249259Sdim
267344779Sdimbool BasicBlock::hasNPredecessors(unsigned N) const {
268344779Sdim  return hasNItems(pred_begin(this), pred_end(this), N);
269344779Sdim}
270344779Sdim
271344779Sdimbool BasicBlock::hasNPredecessorsOrMore(unsigned N) const {
272344779Sdim  return hasNItemsOrMore(pred_begin(this), pred_end(this), N);
273344779Sdim}
274344779Sdim
275321369Sdimconst BasicBlock *BasicBlock::getSingleSuccessor() const {
276321369Sdim  succ_const_iterator SI = succ_begin(this), E = succ_end(this);
277288943Sdim  if (SI == E) return nullptr; // no successors
278321369Sdim  const BasicBlock *TheSucc = *SI;
279288943Sdim  ++SI;
280288943Sdim  return (SI == E) ? TheSucc : nullptr /* multiple successors */;
281288943Sdim}
282288943Sdim
283321369Sdimconst BasicBlock *BasicBlock::getUniqueSuccessor() const {
284321369Sdim  succ_const_iterator SI = succ_begin(this), E = succ_end(this);
285296417Sdim  if (SI == E) return nullptr; // No successors
286321369Sdim  const BasicBlock *SuccBB = *SI;
287288943Sdim  ++SI;
288288943Sdim  for (;SI != E; ++SI) {
289288943Sdim    if (*SI != SuccBB)
290296417Sdim      return nullptr;
291288943Sdim    // The same successor appears multiple times in the successor list.
292288943Sdim    // This is OK.
293288943Sdim  }
294288943Sdim  return SuccBB;
295288943Sdim}
296288943Sdim
297321369Sdimiterator_range<BasicBlock::phi_iterator> BasicBlock::phis() {
298327952Sdim  PHINode *P = empty() ? nullptr : dyn_cast<PHINode>(&*begin());
299327952Sdim  return make_range<phi_iterator>(P, nullptr);
300321369Sdim}
301321369Sdim
302288943Sdim/// This method is used to notify a BasicBlock that the
303249259Sdim/// specified Predecessor of the block is no longer able to reach it.  This is
304249259Sdim/// actually not used to update the Predecessor list, but is actually used to
305249259Sdim/// update the PHI nodes that reside in the block.  Note that this should be
306249259Sdim/// called while the predecessor still refers to this block.
307249259Sdim///
308249259Sdimvoid BasicBlock::removePredecessor(BasicBlock *Pred,
309353358Sdim                                   bool KeepOneInputPHIs) {
310249259Sdim  assert((hasNUsesOrMore(16)||// Reduce cost of this assertion for complex CFGs.
311249259Sdim          find(pred_begin(this), pred_end(this), Pred) != pred_end(this)) &&
312249259Sdim         "removePredecessor: BB is not a predecessor!");
313249259Sdim
314249259Sdim  if (InstList.empty()) return;
315249259Sdim  PHINode *APN = dyn_cast<PHINode>(&front());
316249259Sdim  if (!APN) return;   // Quick exit.
317249259Sdim
318249259Sdim  // If there are exactly two predecessors, then we want to nuke the PHI nodes
319249259Sdim  // altogether.  However, we cannot do this, if this in this case:
320249259Sdim  //
321249259Sdim  //  Loop:
322249259Sdim  //    %x = phi [X, Loop]
323249259Sdim  //    %x2 = add %x, 1         ;; This would become %x2 = add %x2, 1
324249259Sdim  //    br Loop                 ;; %x2 does not dominate all uses
325249259Sdim  //
326249259Sdim  // This is because the PHI node input is actually taken from the predecessor
327249259Sdim  // basic block.  The only case this can happen is with a self loop, so we
328249259Sdim  // check for this case explicitly now.
329249259Sdim  //
330249259Sdim  unsigned max_idx = APN->getNumIncomingValues();
331249259Sdim  assert(max_idx != 0 && "PHI Node in block with 0 predecessors!?!?!");
332249259Sdim  if (max_idx == 2) {
333249259Sdim    BasicBlock *Other = APN->getIncomingBlock(APN->getIncomingBlock(0) == Pred);
334249259Sdim
335249259Sdim    // Disable PHI elimination!
336249259Sdim    if (this == Other) max_idx = 3;
337249259Sdim  }
338249259Sdim
339249259Sdim  // <= Two predecessors BEFORE I remove one?
340353358Sdim  if (max_idx <= 2 && !KeepOneInputPHIs) {
341249259Sdim    // Yup, loop through and nuke the PHI nodes
342249259Sdim    while (PHINode *PN = dyn_cast<PHINode>(&front())) {
343249259Sdim      // Remove the predecessor first.
344353358Sdim      PN->removeIncomingValue(Pred, !KeepOneInputPHIs);
345249259Sdim
346249259Sdim      // If the PHI _HAD_ two uses, replace PHI node with its now *single* value
347249259Sdim      if (max_idx == 2) {
348249259Sdim        if (PN->getIncomingValue(0) != PN)
349249259Sdim          PN->replaceAllUsesWith(PN->getIncomingValue(0));
350249259Sdim        else
351249259Sdim          // We are left with an infinite loop with no entries: kill the PHI.
352249259Sdim          PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
353249259Sdim        getInstList().pop_front();    // Remove the PHI node
354249259Sdim      }
355249259Sdim
356249259Sdim      // If the PHI node already only had one entry, it got deleted by
357249259Sdim      // removeIncomingValue.
358249259Sdim    }
359249259Sdim  } else {
360249259Sdim    // Okay, now we know that we need to remove predecessor #pred_idx from all
361249259Sdim    // PHI nodes.  Iterate over each PHI node fixing them up
362249259Sdim    PHINode *PN;
363249259Sdim    for (iterator II = begin(); (PN = dyn_cast<PHINode>(II)); ) {
364249259Sdim      ++II;
365249259Sdim      PN->removeIncomingValue(Pred, false);
366249259Sdim      // If all incoming values to the Phi are the same, we can replace the Phi
367249259Sdim      // with that value.
368276479Sdim      Value* PNV = nullptr;
369353358Sdim      if (!KeepOneInputPHIs && (PNV = PN->hasConstantValue()))
370249259Sdim        if (PNV != PN) {
371249259Sdim          PN->replaceAllUsesWith(PNV);
372249259Sdim          PN->eraseFromParent();
373249259Sdim        }
374249259Sdim    }
375249259Sdim  }
376249259Sdim}
377249259Sdim
378296417Sdimbool BasicBlock::canSplitPredecessors() const {
379296417Sdim  const Instruction *FirstNonPHI = getFirstNonPHI();
380296417Sdim  if (isa<LandingPadInst>(FirstNonPHI))
381296417Sdim    return true;
382296417Sdim  // This is perhaps a little conservative because constructs like
383296417Sdim  // CleanupBlockInst are pretty easy to split.  However, SplitBlockPredecessors
384296417Sdim  // cannot handle such things just yet.
385296417Sdim  if (FirstNonPHI->isEHPad())
386296417Sdim    return false;
387296417Sdim  return true;
388296417Sdim}
389249259Sdim
390321369Sdimbool BasicBlock::isLegalToHoistInto() const {
391321369Sdim  auto *Term = getTerminator();
392321369Sdim  // No terminator means the block is under construction.
393321369Sdim  if (!Term)
394321369Sdim    return true;
395321369Sdim
396321369Sdim  // If the block has no successors, there can be no instructions to hoist.
397321369Sdim  assert(Term->getNumSuccessors() > 0);
398321369Sdim
399321369Sdim  // Instructions should not be hoisted across exception handling boundaries.
400344779Sdim  return !Term->isExceptionalTerminator();
401321369Sdim}
402321369Sdim
403288943Sdim/// This splits a basic block into two at the specified
404249259Sdim/// instruction.  Note that all instructions BEFORE the specified iterator stay
405249259Sdim/// as part of the original basic block, an unconditional branch is added to
406249259Sdim/// the new BB, and the rest of the instructions in the BB are moved to the new
407249259Sdim/// BB, including the old terminator.  This invalidates the iterator.
408249259Sdim///
409249259Sdim/// Note that this only works on well formed basic blocks (must have a
410249259Sdim/// terminator), and 'I' must not be the end of instruction list (which would
411249259Sdim/// cause a degenerate basic block to be formed, having a terminator inside of
412249259Sdim/// the basic block).
413249259Sdim///
414249259SdimBasicBlock *BasicBlock::splitBasicBlock(iterator I, const Twine &BBName) {
415249259Sdim  assert(getTerminator() && "Can't use splitBasicBlock on degenerate BB!");
416249259Sdim  assert(I != InstList.end() &&
417249259Sdim         "Trying to get me to create degenerate basic block!");
418249259Sdim
419309124Sdim  BasicBlock *New = BasicBlock::Create(getContext(), BBName, getParent(),
420309124Sdim                                       this->getNextNode());
421249259Sdim
422288943Sdim  // Save DebugLoc of split point before invalidating iterator.
423288943Sdim  DebugLoc Loc = I->getDebugLoc();
424249259Sdim  // Move all of the specified instructions from the original basic block into
425249259Sdim  // the new basic block.
426249259Sdim  New->getInstList().splice(New->end(), this->getInstList(), I, end());
427249259Sdim
428249259Sdim  // Add a branch instruction to the newly formed basic block.
429288943Sdim  BranchInst *BI = BranchInst::Create(New, this);
430288943Sdim  BI->setDebugLoc(Loc);
431249259Sdim
432249259Sdim  // Now we must loop through all of the successors of the New block (which
433249259Sdim  // _were_ the successors of the 'this' block), and update any PHI nodes in
434249259Sdim  // successors.  If there were PHI nodes in the successors, then they need to
435353358Sdim  // know that incoming branches will be from New, not from Old (this).
436249259Sdim  //
437353358Sdim  New->replaceSuccessorsPhiUsesWith(this, New);
438249259Sdim  return New;
439249259Sdim}
440249259Sdim
441353358Sdimvoid BasicBlock::replacePhiUsesWith(BasicBlock *Old, BasicBlock *New) {
442353358Sdim  // N.B. This might not be a complete BasicBlock, so don't assume
443353358Sdim  // that it ends with a non-phi instruction.
444353358Sdim  for (iterator II = begin(), IE = end(); II != IE; ++II) {
445353358Sdim    PHINode *PN = dyn_cast<PHINode>(II);
446353358Sdim    if (!PN)
447353358Sdim      break;
448353358Sdim    PN->replaceIncomingBlockWith(Old, New);
449353358Sdim  }
450353358Sdim}
451353358Sdim
452353358Sdimvoid BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *Old,
453353358Sdim                                              BasicBlock *New) {
454344779Sdim  Instruction *TI = getTerminator();
455249259Sdim  if (!TI)
456249259Sdim    // Cope with being called on a BasicBlock that doesn't have a terminator
457249259Sdim    // yet. Clang's CodeGenFunction::EmitReturnBlock() likes to do this.
458249259Sdim    return;
459353358Sdim  llvm::for_each(successors(TI), [Old, New](BasicBlock *Succ) {
460353358Sdim    Succ->replacePhiUsesWith(Old, New);
461353358Sdim  });
462249259Sdim}
463249259Sdim
464353358Sdimvoid BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *New) {
465353358Sdim  this->replaceSuccessorsPhiUsesWith(this, New);
466353358Sdim}
467353358Sdim
468288943Sdim/// Return true if this basic block is a landing pad. I.e., it's
469249259Sdim/// the destination of the 'unwind' edge of an invoke instruction.
470249259Sdimbool BasicBlock::isLandingPad() const {
471249259Sdim  return isa<LandingPadInst>(getFirstNonPHI());
472249259Sdim}
473249259Sdim
474288943Sdim/// Return the landingpad instruction associated with the landing pad.
475249259Sdimconst LandingPadInst *BasicBlock::getLandingPadInst() const {
476249259Sdim  return dyn_cast<LandingPadInst>(getFirstNonPHI());
477249259Sdim}
478327952Sdim
479327952SdimOptional<uint64_t> BasicBlock::getIrrLoopHeaderWeight() const {
480344779Sdim  const Instruction *TI = getTerminator();
481327952Sdim  if (MDNode *MDIrrLoopHeader =
482327952Sdim      TI->getMetadata(LLVMContext::MD_irr_loop)) {
483327952Sdim    MDString *MDName = cast<MDString>(MDIrrLoopHeader->getOperand(0));
484327952Sdim    if (MDName->getString().equals("loop_header_weight")) {
485327952Sdim      auto *CI = mdconst::extract<ConstantInt>(MDIrrLoopHeader->getOperand(1));
486327952Sdim      return Optional<uint64_t>(CI->getValue().getZExtValue());
487327952Sdim    }
488327952Sdim  }
489327952Sdim  return Optional<uint64_t>();
490327952Sdim}
491341825Sdim
492341825SdimBasicBlock::iterator llvm::skipDebugIntrinsics(BasicBlock::iterator It) {
493341825Sdim  while (isa<DbgInfoIntrinsic>(It))
494341825Sdim    ++It;
495341825Sdim  return It;
496341825Sdim}
497