Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
llvm::lto Namespace Reference

Classes

struct  Config
 LTO configuration. More...
class  InputFile
 An input file. More...
class  LTO
 This class implements a resolution-based interface to LLVM's LTO functionality. More...
struct  LTOLLVMContext
 A derived class of LLVMContext that initializes itself according to a given Config object. More...
struct  LTOLLVMDiagnosticHandler
struct  SymbolResolution
 The resolution for a symbol. More...
struct  ThinBackend
 This type defines the behavior following the thin-link phase during ThinLTO. More...
class  ThinBackendProc
 This class defines the interface to the ThinLTO backend. More...

Typedefs

using IndexWriteCallback = std::function<void(const std::string &)>
using ImportsFilesContainer = llvm::SmallVector<std::string>
using ThinBackendFunction
 This callable defines the behavior of a ThinLTO backend after the thin-link phase.

Functions

LLVM_ABI StringLiteral getThinLTODefaultCPU (const Triple &TheTriple)
LLVM_ABI std::string getThinLTOOutputFile (StringRef Path, StringRef OldPrefix, StringRef NewPrefix)
 Given the original Path to an output file, replace any path prefix matching OldPrefix with NewPrefix.
LLVM_ABI Expected< std::unique_ptr< ToolOutputFile > > setupLLVMOptimizationRemarks (LLVMContext &Context, StringRef RemarksFilename, StringRef RemarksPasses, StringRef RemarksFormat, bool RemarksWithHotness, std::optional< uint64_t > RemarksHotnessThreshold=0, int Count=-1)
 Setup optimization remarks.
LLVM_ABI Expected< std::unique_ptr< ToolOutputFile > > setupStatsFile (StringRef StatsFilename)
 Setups the output file for saving statistics.
LLVM_ABI std::vector< int > generateModulesOrdering (ArrayRef< BitcodeModule * > R)
 Produces a container ordering for optimal multi-threaded processing.
LLVM_ABI void updateMemProfAttributes (Module &Mod, const ModuleSummaryIndex &Index)
 Updates MemProf attributes (and metadata) based on whether the index has recorded that we are linking with allocation libraries containing the necessary APIs for downstream transformations.
LLVM_ABI ThinBackend createInProcessThinBackend (ThreadPoolStrategy Parallelism, IndexWriteCallback OnWrite=nullptr, bool ShouldEmitIndexFiles=false, bool ShouldEmitImportsFiles=false)
 This ThinBackend runs the individual backend jobs in-process.
LLVM_ABI ThinBackend createOutOfProcessThinBackend (ThreadPoolStrategy Parallelism, IndexWriteCallback OnWrite, bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles, StringRef LinkerOutputFile, StringRef Distributor, ArrayRef< StringRef > DistributorArgs, StringRef RemoteCompiler, ArrayRef< StringRef > RemoteCompilerArgs, bool SaveTemps)
 This ThinBackend generates the index shards and then runs the individual backend jobs via an external process.
LLVM_ABI ThinBackend createWriteIndexesThinBackend (ThreadPoolStrategy Parallelism, std::string OldPrefix, std::string NewPrefix, std::string NativeObjectPrefix, bool ShouldEmitImportsFiles, raw_fd_ostream *LinkedObjectsFile, IndexWriteCallback OnWrite)
 This ThinBackend writes individual module indexes to files, instead of running the individual backend jobs.
LLVM_ABI bool opt (const Config &Conf, TargetMachine *TM, unsigned Task, Module &Mod, bool IsThinLTO, ModuleSummaryIndex *ExportSummary, const ModuleSummaryIndex *ImportSummary, const std::vector< uint8_t > &CmdArgs)
 Runs middle-end LTO optimizations on Mod.
LLVM_ABI Error backend (const Config &C, AddStreamFn AddStream, unsigned ParallelCodeGenParallelismLevel, Module &M, ModuleSummaryIndex &CombinedIndex)
 Runs a regular LTO backend.
LLVM_ABI Error thinBackend (const Config &C, unsigned Task, AddStreamFn AddStream, Module &M, const ModuleSummaryIndex &CombinedIndex, const FunctionImporter::ImportMapTy &ImportList, const GVSummaryMapTy &DefinedGlobals, MapVector< StringRef, BitcodeModule > *ModuleMap, bool CodeGenOnly, AddStreamFn IRAddStream=nullptr, const std::vector< uint8_t > &CmdArgs=std::vector< uint8_t >())
 Runs a ThinLTO backend.
LLVM_ABI Error finalizeOptimizationRemarks (std::unique_ptr< ToolOutputFile > DiagOutputFile)
LLVM_ABI BitcodeModulefindThinLTOModule (MutableArrayRef< BitcodeModule > BMs)
 Returns the BitcodeModule that is ThinLTO.
LLVM_ABI Expected< BitcodeModulefindThinLTOModule (MemoryBufferRef MBRef)
 Variant of the above.
LLVM_ABI bool initImportList (const Module &M, const ModuleSummaryIndex &CombinedIndex, FunctionImporter::ImportMapTy &ImportList)
 Distributed ThinLTO: collect the referenced modules based on module summary and initialize ImportList.

Typedef Documentation

◆ ImportsFilesContainer

Definition at line 206 of file LTO.h.

◆ IndexWriteCallback

using llvm::lto::IndexWriteCallback = std::function<void(const std::string &)>

Definition at line 204 of file LTO.h.

◆ ThinBackendFunction

Initial value:
std::function<std::unique_ptr<ThinBackendProc>(
const Config &C, ModuleSummaryIndex &CombinedIndex,
const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
AddStreamFn AddStream, FileCache Cache)>
Class to hold module path string table and global value map, and encapsulate methods for operating on...
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
std::function< Expected< std::unique_ptr< CachedFileStream > >( unsigned Task, const Twine &ModuleName)> AddStreamFn
This type defines the callback to add a file that is generated on the fly.
Definition Caching.h:59
This type represents a file cache system that manages caching of files.
Definition Caching.h:85
LTO configuration.
Definition Config.h:42

This callable defines the behavior of a ThinLTO backend after the thin-link phase.

It accepts a configuration C, a combined module summary index CombinedIndex, a map of module identifiers to global variable summaries ModuleToDefinedGVSummaries, a function to add output streams AddStream, and a file cache Cache. It returns a unique pointer to a ThinBackendProc, which can be used to launch backends in parallel.

Definition at line 269 of file LTO.h.

Function Documentation

◆ backend()

Error llvm::lto::backend ( const Config & C,
AddStreamFn AddStream,
unsigned ParallelCodeGenParallelismLevel,
Module & M,
ModuleSummaryIndex & CombinedIndex )

Runs a regular LTO backend.

The regular LTO backend can also act as the regular LTO phase of ThinLTO, which may need to access the combined index.

Definition at line 554 of file LTOBackend.cpp.

References llvm::CallingConv::C, createTargetMachine(), llvm::dbgs(), initAndLookupTarget(), LLVM_DEBUG, llvm::Mod, opt(), splitCodeGen(), llvm::Error::success(), and llvm::Expected< T >::takeError().

◆ createInProcessThinBackend()

ThinBackend llvm::lto::createInProcessThinBackend ( ThreadPoolStrategy Parallelism,
lto::IndexWriteCallback OnWrite = nullptr,
bool ShouldEmitIndexFiles = false,
bool ShouldEmitImportsFiles = false )

This ThinBackend runs the individual backend jobs in-process.

The default value means to use one job per hardware core (not hyper-thread). OnWrite is callback which receives module identifier and notifies LTO user that index file for the module (and optionally imports file) was created. ShouldEmitIndexFiles being true will write sharded ThinLTO index files to the same path as the input module, with suffix ".thinlto.bc" ShouldEmitImportsFiles is true it also writes a list of imported files to a similar path with ".imports" appended instead.

Definition at line 1791 of file LTO.cpp.

◆ createOutOfProcessThinBackend()

ThinBackend llvm::lto::createOutOfProcessThinBackend ( ThreadPoolStrategy Parallelism,
lto::IndexWriteCallback OnWrite,
bool ShouldEmitIndexFiles,
bool ShouldEmitImportsFiles,
StringRef LinkerOutputFile,
StringRef Distributor,
ArrayRef< StringRef > DistributorArgs,
StringRef RemoteCompiler,
ArrayRef< StringRef > RemoteCompilerArgs,
bool SaveTemps )

This ThinBackend generates the index shards and then runs the individual backend jobs via an external process.

It takes the same parameters as the InProcessThinBackend; however, these parameters only control the behavior when generating the index files for the modules. Additionally: LinkerOutputFile is a string that should identify this LTO invocation in the context of a wider build. It's used for naming to aid the user in identifying activity related to a specific LTO invocation. Distributor specifies the path to a process to invoke to manage the backend job execution. DistributorArgs specifies a list of arguments to be applied to the distributor. RemoteCompiler specifies the path to a Clang executable to be invoked for the backend jobs. RemoteCompilerArgs specifies a list of arguments to be applied to the backend compilations. SaveTemps is a debugging tool that prevents temporary files created by this backend from being cleaned up.

Definition at line 2542 of file LTO.cpp.

◆ createWriteIndexesThinBackend()

ThinBackend llvm::lto::createWriteIndexesThinBackend ( ThreadPoolStrategy Parallelism,
std::string OldPrefix,
std::string NewPrefix,
std::string NativeObjectPrefix,
bool ShouldEmitImportsFiles,
raw_fd_ostream * LinkedObjectsFile,
IndexWriteCallback OnWrite )

This ThinBackend writes individual module indexes to files, instead of running the individual backend jobs.

This backend is for distributed builds where separate processes will invoke the real backends.

To find the path to write the index to, the backend checks if the path has a prefix of OldPrefix; if so, it replaces that prefix with NewPrefix. It then appends ".thinlto.bc" and writes the index to that path. If ShouldEmitImportsFiles is true it also writes a list of imported files to a similar path with ".imports" appended instead. LinkedObjectsFile is an output stream to write the list of object files for the final ThinLTO linking. Can be nullptr. If LinkedObjectsFile is not nullptr and NativeObjectPrefix is not empty then it replaces the prefix of the objects with NativeObjectPrefix instead of NewPrefix. OnWrite is callback which receives module identifier and notifies LTO user that index file for the module (and optionally imports file) was created.

Definition at line 1911 of file LTO.cpp.

◆ finalizeOptimizationRemarks()

Error llvm::lto::finalizeOptimizationRemarks ( std::unique_ptr< ToolOutputFile > DiagOutputFile)

Definition at line 543 of file LTOBackend.cpp.

References llvm::Error::success().

Referenced by thinBackend().

◆ findThinLTOModule() [1/2]

Expected< BitcodeModule > llvm::lto::findThinLTOModule ( MemoryBufferRef MBRef)

◆ findThinLTOModule() [2/2]

BitcodeModule * llvm::lto::findThinLTOModule ( MutableArrayRef< BitcodeModule > BMs)

Returns the BitcodeModule that is ThinLTO.

Definition at line 739 of file LTOBackend.cpp.

References llvm::MutableArrayRef< T >::begin(), llvm::ArrayRef< T >::size(), and ThinLTOAssumeMerged.

Referenced by findThinLTOModule(), and thinBackend().

◆ generateModulesOrdering()

std::vector< int > llvm::lto::generateModulesOrdering ( ArrayRef< BitcodeModule * > R)

Produces a container ordering for optimal multi-threaded processing.

Returns ordered indices to elements in the input array.

Definition at line 2224 of file LTO.cpp.

References llvm::seq(), and llvm::sort().

Referenced by llvm::ThinLTOCodeGenerator::run().

◆ getThinLTODefaultCPU()

◆ getThinLTOOutputFile()

std::string llvm::lto::getThinLTOOutputFile ( StringRef Path,
StringRef OldPrefix,
StringRef NewPrefix )

Given the original Path to an output file, replace any path prefix matching OldPrefix with NewPrefix.

Also, create the resulting directory if it does not yet exist.

Definition at line 1825 of file LTO.cpp.

References llvm::sys::fs::create_directories(), llvm::StringRef::empty(), llvm::errs(), llvm::sys::path::parent_path(), llvm::sys::path::replace_path_prefix(), and llvm::SmallString< InternalLen >::str().

◆ initImportList()

bool llvm::lto::initImportList ( const Module & M,
const ModuleSummaryIndex & CombinedIndex,
FunctionImporter::ImportMapTy & ImportList )

Distributed ThinLTO: collect the referenced modules based on module summary and initialize ImportList.

Returns false if the operation failed.

Definition at line 765 of file LTOBackend.cpp.

References llvm::FunctionImporter::ImportMapTy::addGUID(), and ThinLTOAssumeMerged.

◆ opt()

bool llvm::lto::opt ( const Config & Conf,
TargetMachine * TM,
unsigned Task,
Module & Mod,
bool IsThinLTO,
ModuleSummaryIndex * ExportSummary,
const ModuleSummaryIndex * ImportSummary,
const std::vector< uint8_t > & CmdArgs )

◆ setupLLVMOptimizationRemarks()

Expected< std::unique_ptr< ToolOutputFile > > llvm::lto::setupLLVMOptimizationRemarks ( LLVMContext & Context,
StringRef RemarksFilename,
StringRef RemarksPasses,
StringRef RemarksFormat,
bool RemarksWithHotness,
std::optional< uint64_t > RemarksHotnessThreshold = 0,
int Count = -1 )

◆ setupStatsFile()

Expected< std::unique_ptr< ToolOutputFile > > llvm::lto::setupStatsFile ( StringRef StatsFilename)

Setups the output file for saving statistics.

Definition at line 2205 of file LTO.cpp.

References llvm::StringRef::empty(), llvm::EnableStatistics(), llvm::errorCodeToError(), and llvm::sys::fs::OF_None.

Referenced by llvm::LTOCodeGenerator::optimize(), and llvm::lto::LTO::run().

◆ thinBackend()

Error llvm::lto::thinBackend ( const Config & C,
unsigned Task,
AddStreamFn AddStream,
Module & M,
const ModuleSummaryIndex & CombinedIndex,
const FunctionImporter::ImportMapTy & ImportList,
const GVSummaryMapTy & DefinedGlobals,
MapVector< StringRef, BitcodeModule > * ModuleMap,
bool CodeGenOnly,
AddStreamFn IRAddStream = nullptr,
const std::vector< uint8_t > & CmdArgs = std::vector<uint8_t>() )

Runs a ThinLTO backend.

If ModuleMap is not nullptr, all the module files to be imported have already been mapped to memory and the corresponding BitcodeModule objects are saved in the ModuleMap. If ModuleMap is nullptr, module files will be mapped to memory on demand and at any given time during importing, only one source module will be kept open at the most. If CodeGenOnly is true, the backend will skip optimization and only perform code generation. If IRAddStream is not nullptr, it will be called just before code generation to serialize the optimized IR.

Definition at line 603 of file LTOBackend.cpp.

References assert(), createTargetMachine(), llvm::dbgs(), llvm::PIELevel::Default, dropDeadSymbols(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::empty(), llvm::MapVector< KeyT, ValueT, MapType, VectorType >::end(), finalizeOptimizationRemarks(), llvm::MapVector< KeyT, ValueT, MapType, VectorType >::find(), findThinLTOModule(), llvm::ErrorOr< T >::getError(), llvm::MemoryBuffer::getFile(), I, llvm::FunctionImporter::importFunctions(), llvm::inconvertibleErrorCode(), initAndLookupTarget(), LLVM_DEBUG, llvm::make_error(), llvm::Mod, opt(), llvm::lto::Config::PostImportModuleHook, llvm::lto::Config::PostInternalizeModuleHook, llvm::lto::Config::PostPromoteModuleHook, llvm::lto::Config::PreOptModuleHook, llvm::lto::Config::RemarksFilename, llvm::lto::Config::RemarksFormat, llvm::lto::Config::RemarksHotnessThreshold, llvm::lto::Config::RemarksPasses, llvm::lto::Config::RemarksWithHotness, llvm::renameModuleForThinLTO(), llvm::cgdata::saveModuleForTwoRounds(), setupLLVMOptimizationRemarks(), llvm::Reloc::Static, llvm::Expected< T >::takeError(), ThinLTOAssumeMerged, llvm::thinLTOFinalizeInModule(), llvm::thinLTOInternalizeModule(), llvm::toString(), updateMemProfAttributes(), llvm::updatePublicTypeTestCalls(), and llvm::ModuleSummaryIndex::withWholeProgramVisibility().

◆ updateMemProfAttributes()

void llvm::lto::updateMemProfAttributes ( Module & Mod,
const ModuleSummaryIndex & Index )

Updates MemProf attributes (and metadata) based on whether the index has recorded that we are linking with allocation libraries containing the necessary APIs for downstream transformations.

Definition at line 1259 of file LTO.cpp.

References llvm::dyn_cast(), F, I, and llvm::Mod.

Referenced by thinBackend().