LLVM: lib/LTO/LTOBackend.cpp File Reference (original) (raw)

Go to the source code of this file.

Namespaces
namespace llvm
This is an optimization pass for GlobalISel generic memory operations.
Macros
#define DEBUG_TYPE "lto-backend"
#define HANDLE_EXTENSION(Ext)
#define HANDLE_EXTENSION(Ext)
Enumerations
enum class LTOBitcodeEmbedding { DoNotEmbed = 0 , EmbedOptimized = 1 , EmbedPostMergePreOptimized = 2 }
Functions
static void reportOpenError (StringRef Path, Twine Msg)
static void RegisterPassPlugins (ArrayRef< std::string > PassPlugins, PassBuilder &PB)
static std::unique_ptr< TargetMachine > createTargetMachine (const Config &Conf, const Target *TheTarget, Module &M)
static void runNewPMPasses (const Config &Conf, Module &Mod, TargetMachine *TM, unsigned OptLevel, bool IsThinLTO, ModuleSummaryIndex *ExportSummary, const ModuleSummaryIndex *ImportSummary)
static bool isEmptyModule (const Module &Mod)
static void codegen (const Config &Conf, TargetMachine *TM, AddStreamFn AddStream, unsigned Task, Module &Mod, const ModuleSummaryIndex &CombinedIndex)
static void splitCodeGen (const Config &C, TargetMachine *TM, AddStreamFn AddStream, unsigned ParallelCodeGenParallelismLevel, Module &Mod, const ModuleSummaryIndex &CombinedIndex)
static Expected< const Target * > initAndLookupTarget (const Config &C, Module &Mod)
static void dropDeadSymbols (Module &Mod, const GVSummaryMapTy &DefinedGlobals, const ModuleSummaryIndex &Index)
Variables
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 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."))
cl::opt< bool > llvm::NoPGOWarnMismatch

DEBUG_TYPE

#define DEBUG_TYPE "lto-backend"

HANDLE_EXTENSION [1/2]

#define HANDLE_EXTENSION ( Ext )

Value:

decltype(auto) get(const PointerIntPair< PointerTy, IntBits, IntType, PtrTraits, Info > &Pair)

Information about the plugin required to load its passes.

Definition at line 181 of file LTOBackend.cpp.

HANDLE_EXTENSION [2/2]

#define HANDLE_EXTENSION ( Ext )

Value:

get##Ext##PluginInfo().RegisterPassBuilderCallbacks(PB);

PassBuilder PB(Machine, PassOpts->PTO, std::nullopt, &PIC)

Definition at line 181 of file LTOBackend.cpp.

LTOBitcodeEmbedding

enum class LTOBitcodeEmbedding strong
Enumerator
DoNotEmbed
EmbedOptimized
EmbedPostMergePreOptimized

Definition at line 55 of file LTOBackend.cpp.

codegen()

Definition at line 400 of file LTOBackend.cpp.

References llvm::MCTargetOptions::ABIName, llvm::legacy::PassManager::add(), llvm::TargetMachine::addPassesToEmitFile(), llvm::sys::path::append(), llvm::lto::Config::CGFileType, llvm::sys::fs::create_directories(), llvm::createImmutableModuleSummaryIndexWrapperPass(), llvm::lto::Config::DwoDir, llvm::TargetOptions::EABIVersion, EmbedBitcode, llvm::embedBitcodeInModule(), EmbedOptimized, llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::TargetOptions::ExceptionModel, llvm::TargetOptions::FloatABIType, isEmptyModule(), llvm::TargetOptions::MCOptions, Mod, llvm::TargetOptions::ObjectFilenameForDebug, llvm::sys::fs::OF_None, llvm::TargetMachine::Options, llvm::lto::Config::PreCodeGenModuleHook, llvm::lto::Config::PreCodeGenPassesHook, llvm::report_fatal_error(), llvm::legacy::PassManager::run(), llvm::lto::Config::SplitDwarfFile, llvm::MCTargetOptions::SplitDwarfFile, llvm::lto::Config::SplitDwarfOutput, llvm::Expected< T >::takeError(), and llvm::TargetOptions::VecLib.

createTargetMachine()

Definition at line 203 of file LTOBackend.cpp.

References A(), llvm::MCTargetOptions::ABIName, llvm::SubtargetFeatures::AddFeature(), assert(), llvm::lto::Config::CGOptLevel, llvm::lto::Config::CodeModel, llvm::lto::Config::CPU, llvm::Target::createTargetMachine(), llvm::SubtargetFeatures::getDefaultSubtargetFeatures(), llvm::SubtargetFeatures::getString(), llvm::lto::Config::MAttrs, llvm::TargetOptions::MCOptions, llvm::PICLevel::NotPIC, llvm::lto::Config::Options, llvm::Reloc::PIC_, llvm::lto::Config::RelocModel, and llvm::Reloc::Static.

dropDeadSymbols()

initAndLookupTarget()

isEmptyModule()

RegisterPassPlugins()

reportOpenError()

runNewPMPasses()

Definition at line 240 of file LTOBackend.cpp.

References llvm::lto::Config::AAPipeline, llvm::lto::Config::AddFSDiscriminator, llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::addPass(), CGAM, llvm::PGOOptions::CSIRInstr, llvm::lto::Config::CSIRProfile, llvm::PGOOptions::CSIRUse, llvm::lto::Config::DebugPassManager, llvm::PGOOptions::Default, llvm::lto::Config::DisableVerify, FAM, llvm::lto::Config::Freestanding, llvm::TargetMachine::getTargetTriple(), llvm::PGOOptions::IRUse, LAM, llvm_unreachable, MAM, Mod, llvm::PGOOptions::NoAction, llvm::PGOOptions::NoCSAction, llvm::NoPGOWarnMismatch, llvm::OptimizationLevel::O0, llvm::OptimizationLevel::O1, llvm::OptimizationLevel::O2, llvm::OptimizationLevel::O3, llvm::lto::Config::OptPipeline, llvm::outs(), PassName, llvm::lto::Config::PassPlugins, PB(), llvm::lto::Config::PGOWarnMismatch, PIC, llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::printPipeline(), llvm::PrintPipelinePasses, llvm::lto::Config::ProfileRemapping, llvm::lto::Config::PTO, RegisterPassPlugins(), llvm::report_fatal_error(), llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::run(), llvm::lto::Config::RunCSIRInstr, llvm::lto::Config::SampleProfile, llvm::PGOOptions::SampleUse, llvm::TargetMachine::setPGOOption(), llvm::toString(), and llvm::lto::Config::VerifyEach.

Referenced by llvm::lto::opt().

splitCodeGen()

Definition at line 479 of file LTOBackend.cpp.

References llvm::ThreadPoolInterface::async(), llvm::CallingConv::C, createTargetMachine(), llvm::Expected< T >::get(), llvm::TargetMachine::getTarget(), llvm::heavyweight_hardware_concurrency(), Mod, llvm::parseBitcodeFile(), llvm::report_fatal_error(), llvm::SplitModule(), llvm::TargetMachine::splitModule(), llvm::SmallString< InternalLen >::str(), T, ThreadCount, llvm::SingleThreadExecutor::wait(), and llvm::WriteBitcodeToFile().

Referenced by llvm::lto::backend().

EmbedBitcode

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")) ( "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

ThinLTOAssumeMerged

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.")) ( "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