//===-LTOCodeGenerator.h - LLVM Link Time Optimizer -----------------------===// // // 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 declares the LTOCodeGenerator class. // // LTO compilation consists of three phases: Pre-IPO, IPO and Post-IPO. // // The Pre-IPO phase compiles source code into bitcode file. The resulting // bitcode files, along with object files and libraries, will be fed to the // linker to through the IPO and Post-IPO phases. By using obj-file extension, // the resulting bitcode file disguises itself as an object file, and therefore // obviates the need of writing a special set of the make-rules only for LTO // compilation. // // The IPO phase perform inter-procedural analyses and optimizations, and // the Post-IPO consists two sub-phases: intra-procedural scalar optimizations // (SOPT), and intra-procedural target-dependent code generator (CG). // // As of this writing, we don't separate IPO and the Post-IPO SOPT. They // are intermingled together, and are driven by a single pass manager (see // PassManagerBuilder::populateLTOPassManager()). // FIXME: populateLTOPassManager no longer exists. // // The "LTOCodeGenerator" is the driver for the IPO and Post-IPO stages. // The "CodeGenerator" here is bit confusing. Don't confuse the "CodeGenerator" // with the machine specific code generator. // //===----------------------------------------------------------------------===// #ifndef LLVM_LTO_LEGACY_LTOCODEGENERATOR_H #define LLVM_LTO_LEGACY_LTOCODEGENERATOR_H #include "llvm-c/lto.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringSet.h" #include "llvm/IR/GlobalValue.h" #include "llvm/IR/Module.h" #include "llvm/LTO/Config.h" #include "llvm/LTO/LTO.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Error.h" #include "llvm/Support/ToolOutputFile.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" #include <string> #include <vector> namespace llvm { template <typename T> class ArrayRef; class LLVMContext; class DiagnosticInfo; class Linker; class Mangler; class MemoryBuffer; class TargetLibraryInfo; class TargetMachine; class raw_ostream; class raw_pwrite_stream; /// Enable global value internalization in LTO. extern cl::opt<bool> EnableLTOInternalization; //===----------------------------------------------------------------------===// /// C++ class which implements the opaque lto_code_gen_t type. /// struct LTOCodeGenerator { … }; /// A convenience function that calls cl::ParseCommandLineOptions on the given /// set of options. void parseCommandLineOptions(std::vector<std::string> &Options); } #endif