53#define DEBUG_TYPE "lto-backend"
66 "Embed after all optimization passes"),
69 "Embed post merge, but before optimizations")),
70 cl::desc(
"Embed LLVM bitcode in object files produced by LTO"));
73 "thinlto-assume-merged",
cl::init(
false),
74 cl::desc(
"Assume the input has already undergone ThinLTO function "
75 "importing and the other pre-optimization pipeline changes."));
79 cl::desc(
"Only save bitcode for module whose name without "
80 "path matches this for -save-temps options"),
88 errs() <<
"failed to open " << Path <<
": " << Msg <<
'\n';
98 if (SaveTempsArgs.
empty() || SaveTempsArgs.
contains(
"resolution")) {
100 std::make_unique<raw_fd_ostream>(OutputFileName +
"resolution.txt", EC,
108 auto setHook = [&](std::string PathSuffix,
ModuleHookFn &Hook) {
113 unsigned Task,
const Module &M) {
116 if (!SaveModNames.empty() &&
124 if (LinkerHook && !LinkerHook(Task, M))
127 std::string PathPrefix;
131 if (M.getModuleIdentifier() ==
"ld-temp.o" || !UseInputModulePath) {
132 PathPrefix = OutputFileName;
133 if (Task != (
unsigned)-1)
134 PathPrefix +=
utostr(Task) +
".";
136 PathPrefix = M.getModuleIdentifier() +
".";
137 std::string Path = PathPrefix + PathSuffix +
".bc";
149 auto SaveCombinedIndex =
152 std::string Path = OutputFileName +
"index.bc";
161 Path = OutputFileName +
"index.dot";
165 Index.exportToDot(OSDot, GUIDPreservedSymbols);
169 if (SaveTempsArgs.
empty()) {
178 if (SaveTempsArgs.
contains(
"preopt"))
180 if (SaveTempsArgs.
contains(
"promote"))
182 if (SaveTempsArgs.
contains(
"internalize"))
184 if (SaveTempsArgs.
contains(
"import"))
188 if (SaveTempsArgs.
contains(
"precodegen"))
190 if (SaveTempsArgs.
contains(
"combinedindex"))
197#define HANDLE_EXTENSION(Ext) \
198 llvm::PassPluginLibraryInfo get##Ext##PluginInfo();
199#include "llvm/Support/Extension.def"
200#undef HANDLE_EXTENSION
203#define HANDLE_EXTENSION(Ext) \
204 get##Ext##PluginInfo().RegisterPassBuilderCallbacks(PB);
205#include "llvm/Support/Extension.def"
206#undef HANDLE_EXTENSION
218 LoadedPlugin->registerPassBuilderCallbacks(
PB);
221static std::unique_ptr<TargetMachine>
223 const Triple &TheTriple = M.getTargetTriple();
226 for (
const std::string &
A : Conf.
MAttrs)
229 std::optional<Reloc::Model> RelocModel;
232 else if (M.getModuleFlag(
"PIC Level"))
236 std::optional<CodeModel::Model>
CodeModel;
248 TheTriple, Conf.
CPU, Features.
getString(), TargetOpts, RelocModel,
251 assert(TM &&
"Failed to create target machine");
253 if (std::optional<uint64_t> LargeDataThreshold = M.getLargeDataThreshold())
254 TM->setLargeDataThreshold(*LargeDataThreshold);
260 unsigned OptLevel,
bool IsThinLTO,
264 std::optional<PGOOptions> PGOOpt;
301 std::unique_ptr<TargetLibraryInfoImpl> TLII(
304 TLII->disableAllFunctions();
312 for (
unsigned I = 0,
E =
static_cast<unsigned>(LibFunc::NumLibFuncs);
I !=
E;
314 LibFunc
F =
static_cast<LibFunc
>(
I);
316 TLII->setUnavailable(
F);
329 FAM.registerPass([&] {
return std::move(
AA); });
333 PB.registerModuleAnalyses(
MAM);
334 PB.registerCGSCCAnalyses(
CGAM);
335 PB.registerFunctionAnalyses(
FAM);
336 PB.registerLoopAnalyses(
LAM);
365 if (
auto Err =
PB.parsePassPipeline(MPM, Conf.
OptPipeline)) {
369 }
else if (IsThinLTO) {
370 MPM.
addPass(
PB.buildThinLTODefaultPipeline(OL, ImportSummary));
372 MPM.
addPass(
PB.buildLTODefaultPipeline(OL, ExportSummary));
379 std::string PipelineStr;
382 auto PassName =
PIC.getPassNameForClassName(ClassName);
385 outs() <<
"pipeline-passes: " << PipelineStr <<
'\n';
395 return Mod.empty() &&
Mod.global_empty() &&
Mod.named_metadata_empty() &&
396 Mod.getModuleInlineAsm().empty();
402 const std::vector<uint8_t> &CmdArgs,
416 dbgs() <<
"Post-(Thin)LTO merge bitcode embedding was requested, but "
417 "command line arguments are not available");
429 BitcodeLibFuncs.
end());
432 ImportSummary, BitcodeLibFuncsSet);
448 std::vector<uint8_t>());
450 std::unique_ptr<ToolOutputFile> DwoOut;
452 if (!Conf.
DwoDir.empty()) {
456 ": " + EC.message());
464 if (!DwoFile.
empty()) {
473 AddStream(Task,
Mod.getModuleIdentifier());
476 std::unique_ptr<CachedFileStream> &Stream = *StreamOrErr;
503 DwoOut ? &DwoOut->os() :
nullptr,
512 if (
Error Err = Stream->commit())
518 unsigned ParallelCodeGenParallelismLevel,
Module &
Mod,
525 const auto HandleModulePartition =
526 [&](std::unique_ptr<Module> MPart) {
538 CodegenThreadPool.
async(
545 std::unique_ptr<Module> MPartInCtx = std::move(MOrErr.
get());
547 std::unique_ptr<TargetMachine> TM =
550 codegen(
C, TM.get(), AddStream, ThreadId, *MPartInCtx,
560 HandleModulePartition)) {
561 SplitModule(
Mod, ParallelCodeGenParallelismLevel, HandleModulePartition,
568 CodegenThreadPool.
wait();
573 if (!
C.OverrideTriple.empty())
574 Mod.setTargetTriple(
Triple(
C.OverrideTriple));
575 else if (
Mod.getTargetTriple().empty())
591 DiagOutputFile->
keep();
597 unsigned ParallelCodeGenParallelismLevel,
Module &
Mod,
608 if (!
C.CodeGenOnly) {
609 if (!
opt(
C, TM.get(), 0,
Mod,
false,
610 &CombinedIndex,
nullptr,
611 std::vector<uint8_t>(), BitcodeLibFuncs))
615 if (ParallelCodeGenParallelismLevel == 1) {
616 codegen(
C, TM.get(), AddStream, 0,
Mod, CombinedIndex);
627 std::vector<GlobalValue*> DeadGVs;
628 for (
auto &GV :
Mod.global_values())
630 if (!Index.isGlobalValueLive(GVS)) {
631 DeadGVs.push_back(&GV);
638 GV->removeDeadConstantUsers();
642 GV->eraseFromParent();
653 const std::vector<uint8_t> &CmdArgs) {
667 return DiagFileOrErr.takeError();
668 auto DiagnosticOutputFile = std::move(*DiagFileOrErr);
672 Mod.setPartialSampleProfileRatio(CombinedIndex);
678 codegen(Conf, TM.get(), AddStream, Task,
Mod, CombinedIndex);
685 auto OptimizeAndCodegen =
689 if (!
opt(Conf, TM, Task,
Mod,
true,
690 nullptr, &CombinedIndex,
691 CmdArgs, BitcodeLibFuncs))
701 codegen(Conf, TM, AddStream, Task,
Mod, CombinedIndex);
706 return OptimizeAndCodegen(
Mod, TM.get(), std::move(DiagnosticOutputFile));
710 bool ClearDSOLocalOnDeclarations =
711 TM->getTargetTriple().isOSBinFormatELF() &&
723 if (!DefinedGlobals.
empty())
730 auto ModuleLoader = [&](
StringRef Identifier) {
732 assert(
Mod.getContext().isODRUniquingDebugTypes() &&
733 "ODR Type uniquing should be enabled on the context");
735 auto I = ModuleMap->
find(Identifier);
737 return I->second.getLazyModule(
Mod.getContext(),
746 Twine(
"Error loading imported file ") + Identifier +
" : ",
752 Twine(
"Error loading imported file ") + Identifier +
" : " +
757 BMOrErr->getLazyModule(
Mod.getContext(),
761 (*MOrErr)->setOwnedMemoryBuffer(std::move(*MBOrErr));
768 ClearDSOLocalOnDeclarations);
779 return OptimizeAndCodegen(
Mod, TM.get(), std::move(DiagnosticOutputFile));
788 if (LTOInfo && LTOInfo->IsThinLTO)
816 for (
const auto &GlobalList : CombinedIndex) {
818 if (GlobalList.second.getSummaryList().empty())
821 auto GUID = GlobalList.first;
822 for (
const auto &Summary : GlobalList.second.getSummaryList()) {
825 if (Summary->modulePath() == M.getModuleIdentifier())
828 ImportList.
addGUID(Summary->modulePath(), GUID, Summary->importType());
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This header provides classes for managing passes over SCCs of the call graph.
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
This header defines various interfaces for pass management in LLVM.
static cl::opt< bool > ThinLTOAssumeMerged("thinlto-assume-merged", cl::init(false), cl::desc("Assume the input has already undergone ThinLTO function " "importing and the other pre-optimization pipeline changes."))
static void reportOpenError(StringRef Path, Twine Msg)
static cl::list< std::string > SaveModulesList("filter-save-modules", cl::value_desc("module names"), cl::desc("Only save bitcode for module whose name without " "path matches this for -save-temps options"), cl::CommaSeparated, cl::Hidden)
@ EmbedPostMergePreOptimized
static cl::opt< LTOBitcodeEmbedding > EmbedBitcode("lto-embed-bitcode", cl::init(LTOBitcodeEmbedding::DoNotEmbed), cl::values(clEnumValN(LTOBitcodeEmbedding::DoNotEmbed, "none", "Do not embed"), clEnumValN(LTOBitcodeEmbedding::EmbedOptimized, "optimized", "Embed after all optimization passes"), clEnumValN(LTOBitcodeEmbedding::EmbedPostMergePreOptimized, "post-merge-pre-opt", "Embed post merge, but before optimizations")), cl::desc("Embed LLVM bitcode in object files produced by LTO"))
static void RegisterPassPlugins(const Config &Conf, PassBuilder &PB)
static void splitCodeGen(const Config &C, TargetMachine *TM, AddStreamFn AddStream, unsigned ParallelCodeGenParallelismLevel, Module &Mod, const ModuleSummaryIndex &CombinedIndex)
static void dropDeadSymbols(Module &Mod, const GVSummaryMapTy &DefinedGlobals, const ModuleSummaryIndex &Index)
static Expected< const Target * > initAndLookupTarget(const Config &C, Module &Mod)
static void runNewPMPasses(const Config &Conf, Module &Mod, TargetMachine *TM, unsigned OptLevel, bool IsThinLTO, ModuleSummaryIndex *ExportSummary, const ModuleSummaryIndex *ImportSummary, const DenseSet< StringRef > &BitcodeLibFuncs)
static bool isEmptyModule(const Module &Mod)
This is the interface to build a ModuleSummaryIndex for a module.
static std::unique_ptr< TargetMachine > createTargetMachine(Function *F, CodeGenOptLevel OptLevel)
Create the TargetMachine object to query the backend for optimization preferences.
CGSCCAnalysisManager CGAM
if(auto Err=PB.parsePassPipeline(MPM, Passes)) return wrap(std MPM run * Mod
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
PassInstrumentationCallbacks PIC
PassBuilder PB(Machine, PassOpts->PTO, std::nullopt, &PIC)
This header defines a class that provides bookkeeping for all standard (i.e in-tree) pass instrumenta...
static cl::opt< int > ThreadCount("threads", cl::init(0))
Defines the virtual file system interface vfs::FileSystem.
static const char PassName[]
A manager for alias analyses.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
size_t size() const
size - Get the array size.
Represents a module in a bitcode file.
ValueT lookup(const_arg_type_t< KeyT > Val) const
lookup - Return the entry for the specified key, or a default constructed value if no such entry exis...
Implements a dense probed hash-table based set.
Represents either an error or a value T.
std::error_code getError() const
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
Tagged union holding either a T or a Error.
Error takeError()
Take ownership of the stored error.
reference get()
Returns a reference to the stored T value.
The map maintains the list of imports.
void addGUID(StringRef FromModule, GlobalValue::GUID GUID, GlobalValueSummary::ImportKind ImportKind)
The function importer is automatically importing function from other modules based on the provided su...
LLVM_ABI Expected< bool > importFunctions(Module &M, const ImportMapTy &ImportList)
Import functions in Module M based on the supplied import list.
Function and variable summary information to aid decisions and implementation of importing.
RAII handle that manages the lifetime of the ToolOutputFile used to output remarks.
std::string SplitDwarfFile
This class implements a map that also provides access to all stored values in a deterministic order.
iterator find(const KeyT &Key)
static ErrorOr< std::unique_ptr< MemoryBuffer > > getFile(const Twine &Filename, bool IsText=false, bool RequiresNullTerminator=true, bool IsVolatile=false, std::optional< Align > Alignment=std::nullopt)
Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful,...
Class to hold module path string table and global value map, and encapsulate methods for operating on...
bool withWholeProgramVisibility() const
A Module instance is used to store all the information related to an LLVM module.
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
static LLVM_ABI const OptimizationLevel O3
Optimize for fast execution as much as possible.
static LLVM_ABI const OptimizationLevel O0
Disable as many optimizations as possible.
static LLVM_ABI const OptimizationLevel O2
Optimize for fast execution as much as possible without triggering significant incremental compile ti...
static LLVM_ABI const OptimizationLevel O1
Optimize quickly without destroying debuggability.
This class provides access to building LLVM's passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
LLVM_ATTRIBUTE_MINSIZE std::enable_if_t<!std::is_same_v< PassT, PassManager > > addPass(PassT &&Pass)
void printPipeline(raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName)
PreservedAnalyses run(IRUnitT &IR, AnalysisManagerT &AM, ExtraArgTs... ExtraArgs)
Run all of the passes in this manager over the given unit of IR.
static LLVM_ABI Expected< PassPlugin > Load(const std::string &Filename)
Attempts to load a pass plugin from a given file.
void registerPassBuilderCallbacks(PassBuilder &PB) const
Invoke the PassBuilder callback registration.
void wait() override
Blocking wait for all the tasks to execute first.
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
StringRef str() const
Explicit conversion to StringRef.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
This class provides an interface to register all the standard pass instrumentations and manages their...
StringRef - Represent a constant reference to a string, i.e.
Manages the enabling and disabling of subtarget specific features.
LLVM_ABI void getDefaultSubtargetFeatures(const Triple &Triple)
Adds the default features for the specified target triple.
LLVM_ABI std::string getString() const
Returns features as a string.
LLVM_ABI void AddFeature(StringRef String, bool Enable=true)
Adds Features.
Analysis pass providing the TargetLibraryInfo.
Implementation of the target library information.
Provides information about what library functions are available for the current target.
StringRef getName(LibFunc F) const
Primary interface to the complete machine description for the target machine.
virtual bool addPassesToEmitFile(PassManagerBase &, raw_pwrite_stream &, raw_pwrite_stream *, CodeGenFileType, bool=true, MachineModuleInfoWrapperPass *MMIWP=nullptr)
Add passes to the specified pass manager to get the specified file emitted.
const Triple & getTargetTriple() const
virtual bool splitModule(Module &M, unsigned NumParts, function_ref< void(std::unique_ptr< Module > MPart)> ModuleCallback)
Entry point for module splitting.
const Target & getTarget() const
void setPGOOption(std::optional< PGOOptions > PGOOpt)
MCTargetOptions MCOptions
Machine level options.
FloatABI::ABIType FloatABIType
FloatABIType - This setting is set by -float-abi=xxx option is specfied on the command line.
VectorLibrary VecLib
Vector math library to use.
std::string ObjectFilenameForDebug
Stores the filename/path of the final .o/.obj file, to be written in the debug information.
EABI EABIVersion
EABIVersion - This flag specifies the EABI version.
ExceptionHandling ExceptionModel
What exception model to use.
Target - Wrapper for Target specific information.
TargetMachine * createTargetMachine(const Triple &TT, StringRef CPU, StringRef Features, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM=std::nullopt, CodeGenOptLevel OL=CodeGenOptLevel::Default, bool JIT=false) const
createTargetMachine - Create a target specific machine implementation for the specified Triple.
auto async(Function &&F, Args &&...ArgList)
Asynchronous submission of a task to the pool.
The TimeTraceScope is a helper class to call the begin and end functions of the time trace profiler.
Triple - Helper class for working with autoconf configuration names.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
bool contains(const_arg_type_t< ValueT > V) const
Check if the set contains the given element.
PassManager manages ModulePassManagers.
void add(Pass *P) override
Add a pass to the queue of passes to run.
bool run(Module &M)
run - Execute all of the passes scheduled for execution.
A raw_ostream that writes to a file descriptor.
A raw_ostream that writes to an std::string.
A raw_ostream that writes to an SmallVector or SmallString.
Interfaces for registering analysis passes, producing common pass manager configurations,...
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Abstract Attribute helper functions.
@ C
The default llvm calling convention, compatible with C.
LLVM_ABI void saveModuleForTwoRounds(const Module &TheModule, unsigned Task, AddStreamFn AddStream)
Save TheModule before the first codegen round.
ValuesClass values(OptsTy... Options)
Helper to build a ValuesClass by forwarding a variable number of arguments as an initializer list to ...
initializer< Ty > init(const Ty &Val)
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, ArrayRef< StringRef > BitcodeLibFuncs)
Runs middle-end LTO optimizations on Mod.
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, ArrayRef< StringRef > BitcodeLibFuncs, AddStreamFn IRAddStream=nullptr, const std::vector< uint8_t > &CmdArgs=std::vector< uint8_t >())
Runs a ThinLTO backend.
LLVM_ABI BitcodeModule * findThinLTOModule(MutableArrayRef< BitcodeModule > BMs)
Returns the BitcodeModule that is ThinLTO.
LLVM_ABI Error backend(const Config &C, AddStreamFn AddStream, unsigned ParallelCodeGenParallelismLevel, Module &M, ModuleSummaryIndex &CombinedIndex, ArrayRef< StringRef > BitcodeLibFuncs)
Runs a regular LTO backend.
LLVM_ABI Error finalizeOptimizationRemarks(LLVMRemarkFileHandle DiagOutputFile)
LLVM_ABI Expected< LLVMRemarkFileHandle > 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 bool initImportList(const Module &M, const ModuleSummaryIndex &CombinedIndex, FunctionImporter::ImportMapTy &ImportList)
Distributed ThinLTO: collect the referenced modules based on module summary and initialize ImportList...
@ OF_Text
The file should be opened in text mode on platforms like z/OS that make this distinction.
@ OF_TextWithCRLF
The file should be opened in text mode and use a carriage linefeed '\r '.
LLVM_ABI std::error_code create_directories(const Twine &path, bool IgnoreExisting=true, perms Perms=owner_all|group_all)
Create all the non-existent directories in path.
LLVM_ABI StringRef filename(StringRef path LLVM_LIFETIME_BOUND, Style style=Style::native)
Get filename.
LLVM_ABI void append(SmallVectorImpl< char > &path, const Twine &a, const Twine &b="", const Twine &c="", const Twine &d="")
Append to path.
This is an optimization pass for GlobalISel generic memory operations.
ThreadPoolStrategy heavyweight_hardware_concurrency(unsigned ThreadCount=0)
Returns a thread strategy for tasks requiring significant memory or other resources.
LLVM_ABI Expected< std::unique_ptr< Module > > parseBitcodeFile(MemoryBufferRef Buffer, LLVMContext &Context, ParserCallbacks Callbacks={})
Read the specified bitcode file, returning the module.
LLVM_ABI void WriteBitcodeToFile(const Module &M, raw_ostream &Out, bool ShouldPreserveUseListOrder=false, const ModuleSummaryIndex *Index=nullptr, bool GenerateHash=false, ModuleHash *ModHash=nullptr)
Write the specified module to the specified raw output stream.
LLVM_ABI std::error_code inconvertibleErrorCode()
The value returned by this function can be returned from convertToErrorCode for Error values where no...
LLVM_ABI raw_fd_ostream & outs()
This returns a reference to a raw_fd_ostream for standard output.
DenseMap< GlobalValue::GUID, GlobalValueSummary * > GVSummaryMapTy
Map of global value GUID to its summary, used to identify values defined in a particular module,...
LLVM_ABI bool convertToDeclaration(GlobalValue &GV)
Converts value GV to declaration, or replaces with a declaration if it is an alias.
std::string utostr(uint64_t X, bool isNeg=false)
LLVM_ABI void renameModuleForThinLTO(Module &M, const ModuleSummaryIndex &Index, bool ClearDSOLocalOnDeclarations, SetVector< GlobalValue * > *GlobalsToImport=nullptr)
Perform in-place global value handling on the given Module for exported local functions renamed and p...
AnalysisManager< LazyCallGraph::SCC, LazyCallGraph & > CGSCCAnalysisManager
The CGSCC analysis manager.
LLVM_ABI void writeIndexToFile(const ModuleSummaryIndex &Index, raw_ostream &Out, const ModuleToSummariesForIndexTy *ModuleToSummariesForIndex=nullptr, const GVSummaryPtrSet *DecSummaries=nullptr)
Write the specified module summary index to the given raw output stream, where it will be written in ...
AnalysisManager< Loop, LoopStandardAnalysisResults & > LoopAnalysisManager
The loop analysis manager.
LLVM_ABI void embedBitcodeInModule(Module &M, MemoryBufferRef Buf, bool EmbedBitcode, bool EmbedCmdline, const std::vector< uint8_t > &CmdArgs)
If EmbedBitcode is set, save a copy of the llvm IR as data in the __LLVM,__bitcode section (....
LLVM_ABI void SplitModule(Module &M, unsigned N, function_ref< void(std::unique_ptr< Module > MPart)> ModuleCallback, bool PreserveLocals=false, bool RoundRobin=false)
Splits the module M into N linkable partitions.
LLVM_ABI cl::opt< bool > PrintPipelinePasses
Common option used by multiple tools to print pipeline passes.
LLVM_ABI void updatePublicTypeTestCalls(Module &M, bool WholeProgramVisibilityEnabledInLTO)
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
LLVM_ABI Expected< std::vector< BitcodeModule > > getBitcodeModuleList(MemoryBufferRef Buffer)
Returns a list of modules in the specified bitcode buffer.
cl::opt< bool > NoPGOWarnMismatch
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
@ Mod
The access may modify the value stored in memory.
LLVM_ABI void thinLTOInternalizeModule(Module &TheModule, const GVSummaryMapTy &DefinedGlobals)
Internalize TheModule based on the information recorded in the summaries during global summary-based ...
SingleThreadExecutor DefaultThreadPool
std::string toString(const APInt &I, unsigned Radix, bool Signed, bool formatAsCLiteral=false, bool UpperCase=true, bool InsertSeparators=false)
LLVM_ABI ImmutablePass * createImmutableModuleSummaryIndexWrapperPass(const ModuleSummaryIndex *Index)
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
LLVM_ABI Error errorCodeToError(std::error_code EC)
Helper for converting an std::error_code to a Error.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
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.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
LLVM_ABI void thinLTOFinalizeInModule(Module &TheModule, const GVSummaryMapTy &DefinedGlobals, bool PropagateAttrs)
Based on the information recorded in the summaries during global summary-based analysis:
LLVM_ABI void reportFatalUsageError(Error Err)
Report a fatal error that does not indicate a bug in LLVM.
A struct capturing PGO tunables.
static const Target * lookupTarget(StringRef TripleStr, std::string &Error)
lookupTarget - Lookup a target based on a target triple.
std::function< bool(unsigned Task, const Module &)> ModuleHookFn
The following callbacks deal with tasks, which normally represent the entire optimization and code ge...
bool DebugPassManager
Whether to emit the pass manager debuggging informations.
bool AddFSDiscriminator
Add FSAFDO discriminators.
std::optional< uint64_t > RemarksHotnessThreshold
The minimum hotness value a diagnostic needs in order to be included in optimization diagnostics.
LLVM_ABI Error addSaveTemps(std::string OutputFileName, bool UseInputModulePath=false, const DenseSet< StringRef > &SaveTempsArgs={})
This is a convenience function that configures this Config object to write temporary files named afte...
ModuleHookFn PreOptModuleHook
This module hook is called after linking (regular LTO) or loading (ThinLTO) the module,...
CombinedIndexHookFn CombinedIndexHook
std::optional< CodeModel::Model > CodeModel
std::function< void(legacy::PassManager &)> PreCodeGenPassesHook
For adding passes that run right before codegen.
std::vector< std::string > MAttrs
CodeGenOptLevel CGOptLevel
PipelineTuningOptions PTO
Tunable parameters for passes in the default pipelines.
std::vector< llvm::PassPlugin * > LoadedPassPlugins
std::unique_ptr< raw_ostream > ResolutionFile
If this field is set, LTO will write input file paths and symbol resolutions here in llvm-lto2 comman...
std::string DwoDir
The directory to store .dwo files.
std::string RemarksFilename
Optimization remarks file path.
std::vector< std::string > PassPluginFilenames
ModuleHookFn PostPromoteModuleHook
This hook is called after promoting any internal functions (ThinLTO-specific).
std::string ProfileRemapping
Name remapping file for profile data.
std::string SplitDwarfFile
The name for the split debug info file used for the DW_AT_[GNU_]dwo_name attribute in the skeleton CU...
std::string SplitDwarfOutput
The path to write a .dwo file to.
ModuleHookFn PostOptModuleHook
This module hook is called after optimization is complete.
std::string RemarksPasses
Optimization remarks pass filter.
std::string OptPipeline
If this field is set, the set of passes run in the middle-end optimizer will be the one specified by ...
bool RunCSIRInstr
Run PGO context sensitive IR instrumentation.
ModuleHookFn PostInternalizeModuleHook
This hook is called after internalizing the module.
ModuleHookFn PostImportModuleHook
This hook is called after importing from other modules (ThinLTO-specific).
bool RemarksWithHotness
Whether to emit optimization remarks with hotness informations.
std::string CSIRProfile
Context Sensitive PGO profile path.
ModuleHookFn PreCodeGenModuleHook
This module hook is called before code generation.
std::optional< Reloc::Model > RelocModel
bool ShouldDiscardValueNames
bool PGOWarnMismatch
Turn on/off the warning about a hash mismatch in the PGO profile data.
CodeGenFileType CGFileType
bool Freestanding
Flag to indicate that the optimizer should not assume builtins are present on the target.
std::string SampleProfile
Sample PGO profile path.
std::string RemarksFormat
The format used for serializing remarks (default: YAML).
A derived class of LLVMContext that initializes itself according to a given Config object.