LLVM  6.0.0svn
Classes | Typedefs | Functions
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
 
class  NativeObjectStream
 This class wraps an output stream for a native object. More...
 
struct  SymbolResolution
 The resolution for a symbol. More...
 
class  ThinBackendProc
 This class defines the interface to the ThinLTO backend. More...
 

Typedefs

typedef std::function< void(unsigned Task, std::unique_ptr< MemoryBuffer > MB, StringRef Path)> AddBufferFn
 This type defines the callback to add a pre-existing native object file (e.g. More...
 
typedef std::function< std::unique_ptr< NativeObjectStream >unsigned Task)> AddStreamFn
 This type defines the callback to add a native object that is generated on the fly. More...
 
typedef std::function< AddStreamFn(unsigned Task, StringRef Key)> NativeObjectCache
 This is the type of a native object cache. More...
 
typedef std::function< std::unique_ptr< ThinBackendProc > Config &C, ModuleSummaryIndex &CombinedIndex, StringMap< GVSummaryMapTy > &ModuleToDefinedGVSummaries, AddStreamFn AddStream, NativeObjectCache Cache)> ThinBackend
 A ThinBackend defines what happens after the thin-link phase during ThinLTO. More...
 

Functions

Expected< NativeObjectCachelocalCache (StringRef CacheDirectoryPath, AddBufferFn AddBuffer)
 Create a local file system cache which uses the given cache directory and file callback. More...
 
std::string getThinLTOOutputFile (const std::string &Path, const std::string &OldPrefix, const std::string &NewPrefix)
 Given the original Path to an output file, replace any path prefix matching OldPrefix with NewPrefix. More...
 
Expected< std::unique_ptr< ToolOutputFile > > setupOptimizationRemarks (LLVMContext &Context, StringRef LTORemarksFilename, bool LTOPassRemarksWithHotness, int Count=-1)
 Setup optimization remarks. More...
 
ThinBackend createInProcessThinBackend (unsigned ParallelismLevel)
 This ThinBackend runs the individual backend jobs in-process. More...
 
ThinBackend createWriteIndexesThinBackend (std::string OldPrefix, std::string NewPrefix, bool ShouldEmitImportsFiles, std::string LinkedObjectsFile)
 This ThinBackend writes individual module indexes to files, instead of running the individual backend jobs. More...
 
Error backend (Config &C, AddStreamFn AddStream, unsigned ParallelCodeGenParallelismLevel, std::unique_ptr< Module > M, ModuleSummaryIndex &CombinedIndex)
 Runs a regular LTO backend. More...
 
Error thinBackend (Config &C, unsigned Task, AddStreamFn AddStream, Module &M, const ModuleSummaryIndex &CombinedIndex, const FunctionImporter::ImportMapTy &ImportList, const GVSummaryMapTy &DefinedGlobals, MapVector< StringRef, BitcodeModule > &ModuleMap)
 Runs a ThinLTO backend. More...
 

Typedef Documentation

◆ AddBufferFn

typedef std::function<void(unsigned Task, std::unique_ptr<MemoryBuffer> MB, StringRef Path)> llvm::lto::AddBufferFn

This type defines the callback to add a pre-existing native object file (e.g.

in a cache).

Path is generally expected to be a valid path for the file at the point when the AddBufferFn function is called, but clients should prefer to access MB directly in order to avoid a potential race condition.

Buffer callbacks must be thread safe.

Definition at line 34 of file Caching.h.

◆ AddStreamFn

This type defines the callback to add a native object that is generated on the fly.

Stream callbacks must be thread safe.

Definition at line 175 of file LTO.h.

◆ NativeObjectCache

This is the type of a native object cache.

To request an item from the cache, pass a unique string as the Key. For hits, the cached file will be added to the link and this function will return AddStreamFn(). For misses, the cache will return a stream callback which must be called at most once to produce content for the stream. The native object stream produced by the stream callback will add the file to the link after the stream is written to.

Clients generally look like this:

if (AddStreamFn AddStream = Cache(Task, Key)) ProduceContent(AddStream);

Definition at line 190 of file LTO.h.

◆ ThinBackend

typedef std::function<std::unique_ptr<ThinBackendProc> Config &C, ModuleSummaryIndex &CombinedIndex, StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries, AddStreamFn AddStream, NativeObjectCache Cache)> llvm::lto::ThinBackend

A ThinBackend defines what happens after the thin-link phase during ThinLTO.

The details of this type definition aren't important; clients can only create a ThinBackend using one of the create*ThinBackend() functions below.

Definition at line 199 of file LTO.h.

Function Documentation

◆ backend()

Error llvm::lto::backend ( Config C,
AddStreamFn  AddStream,
unsigned  ParallelCodeGenParallelismLevel,
std::unique_ptr< 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 361 of file LTOBackend.cpp.

References codegen(), llvm::lto::Config::CodeGenOnly, finalizeOptimizationRemarks(), opt, llvm::lto::Config::RemarksFilename, llvm::lto::Config::RemarksWithHotness, setupOptimizationRemarks(), llvm::splitCodeGen(), llvm::Error::success(), llvm::Expected< T >::takeError(), and llvm::SystemZISD::TM.

Referenced by llvm::lto::LTO::run().

◆ createInProcessThinBackend()

ThinBackend llvm::lto::createInProcessThinBackend ( unsigned  ParallelismLevel)

This ThinBackend runs the individual backend jobs in-process.

Definition at line 978 of file LTO.cpp.

Referenced by llvm::lto::InputFile::getName().

◆ createWriteIndexesThinBackend()

ThinBackend llvm::lto::createWriteIndexesThinBackend ( std::string  OldPrefix,
std::string  NewPrefix,
bool  ShouldEmitImportsFiles,
std::string  LinkedObjectsFile 
)

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.

Definition at line 1068 of file LTO.cpp.

References llvm::lto::Config::CombinedIndexHook, llvm::ComputeCrossModuleImport(), llvm::tgtok::Def, llvm::GlobalValue::dropLLVMManglingEscape(), E, llvm::ArrayRef< T >::empty(), llvm::GlobalValue::getGUID(), llvm::lto::Config::OptLevel, llvm::Error::success(), llvm::thinLTOInternalizeAndPromoteInIndex(), llvm::thinLTOResolveWeakForLinkerInIndex(), and llvm::StringMap< ValueTy, AllocatorTy >::try_emplace().

◆ getThinLTOOutputFile()

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

◆ localCache()

Expected< NativeObjectCache > llvm::lto::localCache ( StringRef  CacheDirectoryPath,
AddBufferFn  AddBuffer 
)

◆ setupOptimizationRemarks()

Expected< std::unique_ptr< ToolOutputFile > > llvm::lto::setupOptimizationRemarks ( LLVMContext Context,
StringRef  LTORemarksFilename,
bool  LTOPassRemarksWithHotness,
int  Count = -1 
)

◆ thinBackend()

Error llvm::lto::thinBackend ( Config C,
unsigned  Task,
AddStreamFn  AddStream,
Module M,
const ModuleSummaryIndex CombinedIndex,
const FunctionImporter::ImportMapTy ImportList,
const GVSummaryMapTy DefinedGlobals,
MapVector< StringRef, BitcodeModule > &  ModuleMap 
)