//===- llvm/BasicBlock.h - Represent a basic block in the VM ----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains the declaration of the BasicBlock class. // //===----------------------------------------------------------------------===// #ifndef LLVM_IR_BASICBLOCK_H #define LLVM_IR_BASICBLOCK_H #include "llvm-c/Types.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/Twine.h" #include "llvm/ADT/ilist.h" #include "llvm/ADT/ilist_node.h" #include "llvm/ADT/iterator.h" #include "llvm/ADT/iterator_range.h" #include "llvm/IR/DebugProgramInstruction.h" #include "llvm/IR/Instruction.h" #include "llvm/IR/SymbolTableListTraits.h" #include "llvm/IR/Value.h" #include <cassert> #include <cstddef> #include <iterator> namespace llvm { class AssemblyAnnotationWriter; class CallInst; class DataLayout; class Function; class LandingPadInst; class LLVMContext; class Module; class PHINode; class ValueSymbolTable; class DbgVariableRecord; class DbgMarker; /// LLVM Basic Block Representation /// /// This represents a single basic block in LLVM. A basic block is simply a /// container of instructions that execute sequentially. Basic blocks are Values /// because they are referenced by instructions such as branches and switch /// tables. The type of a BasicBlock is "Type::LabelTy" because the basic block /// represents a label to which a branch can jump. /// /// A well formed basic block is formed of a list of non-terminating /// instructions followed by a single terminator instruction. Terminator /// instructions may not occur in the middle of basic blocks, and must terminate /// the blocks. The BasicBlock class allows malformed basic blocks to occur /// because it may be useful in the intermediate stage of constructing or /// modifying a program. However, the verifier will ensure that basic blocks are /// "well formed". class BasicBlock final : public Value, // Basic blocks are data objects also public ilist_node_with_parent<BasicBlock, Function> { … }; // Create wrappers for C Binding types (see CBindingWrapping.h). DEFINE_SIMPLE_CONVERSION_FUNCTIONS(…) /// Advance \p It while it points to a debug instruction and return the result. /// This assumes that \p It is not at the end of a block. BasicBlock::iterator skipDebugIntrinsics(BasicBlock::iterator It); #ifdef NDEBUG /// In release builds, this is a no-op. For !NDEBUG builds, the checks are /// implemented in the .cpp file to avoid circular header deps. inline void BasicBlock::validateInstrOrdering() const { … } #endif // Specialize DenseMapInfo for iterators, so that ththey can be installed into // maps and sets. The iterator is made up of its node pointer, and the // debug-info "head" bit. template <> struct DenseMapInfo<BasicBlock::iterator> { … }; } // end namespace llvm #endif // LLVM_IR_BASICBLOCK_H