//===- llvm/Module.h - C++ class to represent a VM module -------*- 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 // //===----------------------------------------------------------------------===// // /// @file /// Module.h This file contains the declarations for the Module class. // //===----------------------------------------------------------------------===// #ifndef LLVM_IR_MODULE_H #define LLVM_IR_MODULE_H #include "llvm-c/Types.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/iterator_range.h" #include "llvm/IR/Attributes.h" #include "llvm/IR/Comdat.h" #include "llvm/IR/DataLayout.h" #include "llvm/IR/Function.h" #include "llvm/IR/GlobalAlias.h" #include "llvm/IR/GlobalIFunc.h" #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/ProfileSummary.h" #include "llvm/IR/SymbolTableListTraits.h" #include "llvm/Support/CBindingWrapping.h" #include "llvm/Support/CodeGen.h" #include <cstddef> #include <cstdint> #include <iterator> #include <memory> #include <optional> #include <string> #include <vector> namespace llvm { class Error; class FunctionType; class GVMaterializer; class LLVMContext; class MemoryBuffer; class ModuleSummaryIndex; class RandomNumberGenerator; class StructType; class VersionTuple; /// A Module instance is used to store all the information related to an /// LLVM module. Modules are the top level container of all other LLVM /// Intermediate Representation (IR) objects. Each module directly contains a /// list of globals variables, a list of functions, a list of libraries (or /// other modules) this module depends on, a symbol table, and various data /// about the target's characteristics. /// /// A module maintains a GlobalList object that is used to hold all /// constant references to global variables in the module. When a global /// variable is destroyed, it should have no entries in the GlobalList. /// The main container class for the LLVM Intermediate Representation. class LLVM_EXTERNAL_VISIBILITY Module { … }; /// Given "llvm.used" or "llvm.compiler.used" as a global name, collect the /// initializer elements of that global in a SmallVector and return the global /// itself. GlobalVariable *collectUsedGlobalVariables(const Module &M, SmallVectorImpl<GlobalValue *> &Vec, bool CompilerUsed); /// An raw_ostream inserter for modules. inline raw_ostream &operator<<(raw_ostream &O, const Module &M) { … } // Create wrappers for C Binding types (see CBindingWrapping.h). DEFINE_SIMPLE_CONVERSION_FUNCTIONS(…) /* LLVMModuleProviderRef exists for historical reasons, but now just holds a * Module. */ inline Module *unwrap(LLVMModuleProviderRef MP) { … } } // end namespace llvm #endif // LLVM_IR_MODULE_H