17ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//===-- llvm/BasicBlock.h - Represent a basic block in the VM ---*- C++ -*-===//
27ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//
37ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//                     The LLVM Compiler Infrastructure
47ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//
57ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// This file is distributed under the University of Illinois Open Source
67ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// License. See LICENSE.TXT for details.
77ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//
87ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//===----------------------------------------------------------------------===//
97ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//
107ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// This file contains the declaration of the BasicBlock class.
117ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//
127ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens//===----------------------------------------------------------------------===//
137ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
147ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#ifndef LLVM_IR_BASICBLOCK_H
157ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#define LLVM_IR_BASICBLOCK_H
167ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
177ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#include "llvm/ADT/ilist.h"
182df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens#include "llvm/ADT/ilist_node.h"
192df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens#include "llvm/ADT/Twine.h"
207ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#include "llvm/IR/Instruction.h"
217ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#include "llvm/IR/SymbolTableListTraits.h"
222df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens#include "llvm/IR/Value.h"
237ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens#include "llvm/Support/CBindingWrapping.h"
242df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens#include "llvm-c/Types.h"
252df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens#include <cassert>
262df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens#include <cstddef>
277ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
287ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensnamespace llvm {
297ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
307ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensclass CallInst;
312df178997d17474042e8c3704cc93ab2db6619bfNicolas Capensclass Function;
327ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensclass LandingPadInst;
337ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensclass LLVMContext;
342df178997d17474042e8c3704cc93ab2db6619bfNicolas Capensclass TerminatorInst;
357ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
367ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// \brief LLVM Basic Block Representation
377ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens///
387ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// This represents a single basic block in LLVM. A basic block is simply a
397ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// container of instructions that execute sequentially. Basic blocks are Values
407ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// because they are referenced by instructions such as branches and switch
417ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// tables. The type of a BasicBlock is "Type::LabelTy" because the basic block
427ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// represents a label to which a branch can jump.
437ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens///
447ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// A well formed basic block is formed of a list of non-terminating
457ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// instructions followed by a single TerminatorInst instruction.
467ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// TerminatorInst's may not occur in the middle of basic blocks, and must
477ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// terminate the blocks. The BasicBlock class allows malformed basic blocks to
487ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// occur because it may be useful in the intermediate stage of constructing or
497ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// modifying a program. However, the verifier will ensure that basic blocks
507ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens/// are "well formed".
517ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensclass BasicBlock : public Value, // Basic blocks are data objects also
527ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens                   public ilist_node_with_parent<BasicBlock, Function> {
537ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capenspublic:
547ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  typedef SymbolTableList<Instruction> InstListType;
557ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
567ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensprivate:
572df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens  friend class BlockAddress;
582df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens  friend class SymbolTableListTraits<BasicBlock>;
592df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens
607ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  InstListType InstList;
617ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  Function *Parent;
627ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
637ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void setParent(Function *parent);
647ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
657ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Constructor.
667ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
677ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// If the function parameter is specified, the basic block is automatically
687ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// inserted at either the end of the function (if InsertBefore is null), or
697ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// before the specified basic block.
707ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  explicit BasicBlock(LLVMContext &C, const Twine &Name = "",
717ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens                      Function *Parent = nullptr,
727ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens                      BasicBlock *InsertBefore = nullptr);
732df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens
747ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capenspublic:
752df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens  BasicBlock(const BasicBlock &) = delete;
762df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens  BasicBlock &operator=(const BasicBlock &) = delete;
772df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens  ~BasicBlock() override;
782df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens
797ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Get the context in which this basic block lives.
807ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  LLVMContext &getContext() const;
817ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
827ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Instruction iterators...
837ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  typedef InstListType::iterator iterator;
847ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  typedef InstListType::const_iterator const_iterator;
857ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  typedef InstListType::reverse_iterator reverse_iterator;
867ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  typedef InstListType::const_reverse_iterator const_reverse_iterator;
877ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
887ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Creates a new BasicBlock.
897ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
907ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// If the Parent parameter is specified, the basic block is automatically
917ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// inserted at either the end of the function (if InsertBefore is 0), or
927ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// before the specified basic block.
937ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  static BasicBlock *Create(LLVMContext &Context, const Twine &Name = "",
947ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens                            Function *Parent = nullptr,
957ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens                            BasicBlock *InsertBefore = nullptr) {
967ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return new BasicBlock(Context, Name, Parent, InsertBefore);
977ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
987ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
997ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the enclosing method, or null if none.
1007ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const Function *getParent() const { return Parent; }
1017ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens        Function *getParent()       { return Parent; }
1027ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1037ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the module owning the function this basic block belongs to,
1047ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// or nullptr it the function does not have a module.
1057ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
1067ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Note: this is undefined behavior if the block does not have a parent.
1077ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const Module *getModule() const;
1087ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  Module *getModule();
1097ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1107ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns the terminator instruction if the block is well formed or
1117ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// null if the block is not well formed.
1127ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  TerminatorInst *getTerminator();
1137ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const TerminatorInst *getTerminator() const;
1147ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1157ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns the call instruction calling @llvm.experimental.deoptimize
1167ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// prior to the terminating return instruction of this basic block, if such a
1177ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// call is present.  Otherwise, returns null.
1187ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  CallInst *getTerminatingDeoptimizeCall();
1197ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const CallInst *getTerminatingDeoptimizeCall() const {
1207ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock *>(this)->getTerminatingDeoptimizeCall();
1217ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
1227ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1237ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns the call instruction marked 'musttail' prior to the
1247ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// terminating return instruction of this basic block, if such a call is
1257ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// present.  Otherwise, returns null.
1267ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  CallInst *getTerminatingMustTailCall();
1277ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const CallInst *getTerminatingMustTailCall() const {
1287ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock *>(this)->getTerminatingMustTailCall();
1297ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
1307ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1317ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns a pointer to the first instruction in this block that is
1327ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// not a PHINode instruction.
1337ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
1347ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// When adding instructions to the beginning of the basic block, they should
1357ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// be added before the returned value, not before the first instruction,
1367ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// which might be PHI. Returns 0 is there's no non-PHI instruction.
1377ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  Instruction* getFirstNonPHI();
1387ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const Instruction* getFirstNonPHI() const {
1397ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getFirstNonPHI();
1407ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
1417ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1427ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns a pointer to the first instruction in this block that is not
1437ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// a PHINode or a debug intrinsic.
1447ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  Instruction* getFirstNonPHIOrDbg();
1457ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const Instruction* getFirstNonPHIOrDbg() const {
1467ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getFirstNonPHIOrDbg();
1477ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
1487ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1497ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns a pointer to the first instruction in this block that is not
1507ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// a PHINode, a debug intrinsic, or a lifetime intrinsic.
1517ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  Instruction* getFirstNonPHIOrDbgOrLifetime();
1527ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const Instruction* getFirstNonPHIOrDbgOrLifetime() const {
1537ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getFirstNonPHIOrDbgOrLifetime();
1547ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
1557ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1567ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns an iterator to the first instruction in this block that is
1577ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// suitable for inserting a non-PHI instruction.
1587ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
1597ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// In particular, it skips all PHIs and LandingPad instructions.
1607ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  iterator getFirstInsertionPt();
1617ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const_iterator getFirstInsertionPt() const {
1627ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getFirstInsertionPt();
1637ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
1647ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1657ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Unlink 'this' from the containing function, but do not delete it.
1667ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void removeFromParent();
1677ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1687ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Unlink 'this' from the containing function and delete it.
1697ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
1707ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  // \returns an iterator pointing to the element after the erased one.
1717ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  SymbolTableList<BasicBlock>::iterator eraseFromParent();
1727ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1737ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Unlink this basic block from its current function and insert it
1747ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// into the function that \p MovePos lives in, right before \p MovePos.
1757ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void moveBefore(BasicBlock *MovePos);
1767ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1777ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Unlink this basic block from its current function and insert it
1787ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// right after \p MovePos in the function \p MovePos lives in.
1797ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void moveAfter(BasicBlock *MovePos);
1807ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1817ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Insert unlinked basic block into a function.
1827ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
1837ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Inserts an unlinked basic block into \c Parent.  If \c InsertBefore is
1847ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// provided, inserts before that basic block, otherwise inserts at the end.
1857ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
1867ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \pre \a getParent() is \c nullptr.
1877ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void insertInto(Function *Parent, BasicBlock *InsertBefore = nullptr);
1887ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1897ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the predecessor of this block if it has a single predecessor
1907ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// block. Otherwise return a null pointer.
1917ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  BasicBlock *getSinglePredecessor();
1927ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const BasicBlock *getSinglePredecessor() const {
1937ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getSinglePredecessor();
1947ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
1957ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
1967ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the predecessor of this block if it has a unique predecessor
1977ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// block. Otherwise return a null pointer.
1987ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
1997ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Note that unique predecessor doesn't mean single edge, there can be
2007ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// multiple edges from the unique predecessor to this block (for example a
2017ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// switch statement with multiple cases having the same destination).
2027ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  BasicBlock *getUniquePredecessor();
2037ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const BasicBlock *getUniquePredecessor() const {
2047ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getUniquePredecessor();
2057ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
2067ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2077ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the successor of this block if it has a single successor.
2087ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Otherwise return a null pointer.
2097ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2107ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// This method is analogous to getSinglePredecessor above.
2117ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  BasicBlock *getSingleSuccessor();
2127ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const BasicBlock *getSingleSuccessor() const {
2137ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getSingleSuccessor();
2147ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
2157ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2167ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the successor of this block if it has a unique successor.
2177ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Otherwise return a null pointer.
2187ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2197ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// This method is analogous to getUniquePredecessor above.
2207ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  BasicBlock *getUniqueSuccessor();
2217ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const BasicBlock *getUniqueSuccessor() const {
2227ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return const_cast<BasicBlock*>(this)->getUniqueSuccessor();
2237ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
2247ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2257ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  //===--------------------------------------------------------------------===//
2267ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Instruction iterator methods
2277ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2287ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline iterator                begin()       { return InstList.begin(); }
2297ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline const_iterator          begin() const { return InstList.begin(); }
2307ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline iterator                end  ()       { return InstList.end();   }
2317ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline const_iterator          end  () const { return InstList.end();   }
2327ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2337ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline reverse_iterator        rbegin()       { return InstList.rbegin(); }
2347ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline const_reverse_iterator  rbegin() const { return InstList.rbegin(); }
2357ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline reverse_iterator        rend  ()       { return InstList.rend();   }
2367ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline const_reverse_iterator  rend  () const { return InstList.rend();   }
2377ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2387ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline size_t                   size() const { return InstList.size();  }
2397ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline bool                    empty() const { return InstList.empty(); }
2407ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline const Instruction      &front() const { return InstList.front(); }
2417ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline       Instruction      &front()       { return InstList.front(); }
2427ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline const Instruction       &back() const { return InstList.back();  }
2437ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  inline       Instruction       &back()       { return InstList.back();  }
2447ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2457ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the underlying instruction list container.
2467ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2477ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Currently you need to access the underlying instruction list container
2487ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// directly if you want to modify it.
2497ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const InstListType &getInstList() const { return InstList; }
2507ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens        InstListType &getInstList()       { return InstList; }
2517ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2527ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns a pointer to a member of the instruction list.
2537ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  static InstListType BasicBlock::*getSublistAccess(Instruction*) {
2547ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return &BasicBlock::InstList;
2557ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
2567ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2577ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns a pointer to the symbol table if one exists.
2587ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ValueSymbolTable *getValueSymbolTable();
2597ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2607ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast.
2617ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  static inline bool classof(const Value *V) {
2627ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return V->getValueID() == Value::BasicBlockVal;
2637ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
2647ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2657ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Cause all subinstructions to "let go" of all the references that
2667ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// said subinstructions are maintaining.
2677ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2687ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// This allows one to 'delete' a whole class at a time, even though there may
2697ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// be circular references... first all references are dropped, and all use
2707ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// counts go to zero.  Then everything is delete'd for real.  Note that no
2717ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// operations are valid on an object that has "dropped all references",
2727ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// except operator delete.
2737ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void dropAllReferences();
2747ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2757ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Notify the BasicBlock that the predecessor \p Pred is no longer
2767ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// able to reach it.
2777ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2787ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// This is actually not used to update the Predecessor list, but is actually
2797ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// used to update the PHI nodes that reside in the block.  Note that this
2807ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// should be called while the predecessor still refers to this block.
2817ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void removePredecessor(BasicBlock *Pred, bool DontDeleteUselessPHIs = false);
2827ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2837ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  bool canSplitPredecessors() const;
2847ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
2857ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Split the basic block into two basic blocks at the specified
2867ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// instruction.
2877ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2887ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Note that all instructions BEFORE the specified iterator stay as part of
2897ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// the original basic block, an unconditional branch is added to the original
2907ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// BB, and the rest of the instructions in the BB are moved to the new BB,
2917ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// including the old terminator.  The newly formed BasicBlock is returned.
2927ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// This function invalidates the specified iterator.
2937ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2947ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Note that this only works on well formed basic blocks (must have a
2957ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// terminator), and 'I' must not be the end of instruction list (which would
2967ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// cause a degenerate basic block to be formed, having a terminator inside of
2977ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// the basic block).
2987ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
2997ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Also note that this doesn't preserve any passes. To split blocks while
3007ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// keeping loop information consistent, use the SplitBlock utility function.
3017ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  BasicBlock *splitBasicBlock(iterator I, const Twine &BBName = "");
3027ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  BasicBlock *splitBasicBlock(Instruction *I, const Twine &BBName = "") {
3037ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    return splitBasicBlock(I->getIterator(), BBName);
3047ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
3057ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3067ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Returns true if there are any uses of this basic block other than
3077ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// direct branches, switches, etc. to it.
3087ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  bool hasAddressTaken() const { return getSubclassDataFromValue() != 0; }
3097ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3107ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Update all phi nodes in this basic block's successors to refer to
3117ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// basic block \p New instead of to it.
3127ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void replaceSuccessorsPhiUsesWith(BasicBlock *New);
3137ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3147ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return true if this basic block is an exception handling block.
3157ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  bool isEHPad() const { return getFirstNonPHI()->isEHPad(); }
3167ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3177ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return true if this basic block is a landing pad.
3187ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
3197ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// Being a ``landing pad'' means that the basic block is the destination of
3207ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// the 'unwind' edge of an invoke instruction.
3217ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  bool isLandingPad() const;
3227ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3237ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Return the landingpad instruction associated with the landing pad.
3247ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  LandingPadInst *getLandingPadInst();
3257ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  const LandingPadInst *getLandingPadInst() const;
3267ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3277ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capensprivate:
3287ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Increment the internal refcount of the number of BlockAddresses
3297ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// referencing this BasicBlock by \p Amt.
3307ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  ///
3317ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// This is almost always 0, sometimes one possibly, but almost never 2, and
3327ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// inconceivably 3 or more.
3337ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void AdjustBlockAddressRefCount(int Amt) {
3347ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    setValueSubclassData(getSubclassDataFromValue()+Amt);
3357ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    assert((int)(signed char)getSubclassDataFromValue() >= 0 &&
3367ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens           "Refcount wrap-around");
3377ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
3382df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens
3397ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// \brief Shadow Value::setValueSubclassData with a private forwarding method
3407ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  /// so that any future subclasses cannot accidentally use it.
3417ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  void setValueSubclassData(unsigned short D) {
3427ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens    Value::setValueSubclassData(D);
3437ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens  }
3447ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens};
3457ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3467ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens// Create wrappers for C Binding types (see CBindingWrapping.h).
3477ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas CapensDEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef)
3487ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3492df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens} // end namespace llvm
3507ad046f5968d4709c3c68d165387d13f1da7bab6Nicolas Capens
3512df178997d17474042e8c3704cc93ab2db6619bfNicolas Capens#endif // LLVM_IR_BASICBLOCK_H
352