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) llvm::PassPluginLibraryInfo get##Ext##PluginInfo();
#define HANDLE_EXTENSION(Ext) get##Ext##PluginInfo().RegisterPassBuilderCallbacks(PB);
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]

HANDLE_EXTENSION [2/2]

| #define HANDLE_EXTENSION | ( | | Ext | ) | get##Ext##PluginInfo().RegisterPassBuilderCallbacks(PB); | | ------------------------- | - | | --- | - | ----------------------------------------------------------------------------------------------------------------------------- |

LTOBitcodeEmbedding

Enumerator
DoNotEmbed
EmbedOptimized
EmbedPostMergePreOptimized

Definition at line 56 of file LTOBackend.cpp.

codegen()

Definition at line 396 of file LTOBackend.cpp.

References llvm::legacy::PassManager::add(), llvm::sys::path::append(), llvm::lto::Config::CGFileType, codegen(), llvm::sys::fs::create_directories(), llvm::createImmutableModuleSummaryIndexWrapperPass(), llvm::lto::Config::DwoDir, EmbedBitcode, llvm::embedBitcodeInModule(), llvm::SmallVectorBase< Size_T >::empty(), isEmptyModule(), llvm::Mod, llvm::sys::fs::OF_None, llvm::lto::Config::PreCodeGenModuleHook, llvm::lto::Config::PreCodeGenPassesHook, llvm::report_fatal_error(), llvm::legacy::PassManager::run(), llvm::lto::Config::SplitDwarfFile, llvm::lto::Config::SplitDwarfOutput, and llvm::Expected< T >::takeError().

Referenced by llvm::lto::backend(), codegen(), splitCodeGen(), and llvm::lto::thinBackend().

createTargetMachine()

Definition at line 204 of file LTOBackend.cpp.

References A, 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::PICLevel::NotPIC, llvm::lto::Config::Options, llvm::Reloc::PIC_, llvm::lto::Config::RelocModel, and llvm::Reloc::Static.

dropDeadSymbols()

initAndLookupTarget()

isEmptyModule()

RegisterPassPlugins()

static void RegisterPassPlugins ( ArrayRef< std::string > PassPlugins, PassBuilder & PB ) static

reportOpenError()

runNewPMPasses()

Definition at line 236 of file LTOBackend.cpp.

References llvm::lto::Config::AAPipeline, llvm::lto::Config::AddFSDiscriminator, llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::addPass(), llvm::PassBuilder::buildLTODefaultPipeline(), llvm::PassBuilder::buildThinLTODefaultPipeline(), CGAM, llvm::PassBuilder::crossRegisterProxies(), 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::PassInstrumentationCallbacks::getPassNameForClassName(), llvm::vfs::getRealFileSystem(), llvm::PGOOptions::IRUse, LAM, llvm_unreachable, MAM, llvm::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, OS, llvm::outs(), llvm::PassBuilder::parseAAPipeline(), llvm::PassBuilder::parsePassPipeline(), 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, llvm::PassBuilder::registerCGSCCAnalyses(), llvm::PassBuilder::registerFunctionAnalyses(), llvm::PassBuilder::registerLoopAnalyses(), llvm::PassBuilder::registerModuleAnalyses(), llvm::AnalysisManager< IRUnitT, ExtraArgTs >::registerPass(), RegisterPassPlugins(), llvm::report_fatal_error(), llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::run(), llvm::lto::Config::RunCSIRInstr, llvm::lto::Config::SampleProfile, llvm::PGOOptions::SampleUse, llvm::toString(), and llvm::lto::Config::VerifyEach.

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

splitCodeGen()

Definition at line 460 of file LTOBackend.cpp.

References llvm::ThreadPoolInterface::async(), llvm::CallingConv::C, codegen(), createTargetMachine(), llvm::Expected< T >::get(), llvm::heavyweight_hardware_concurrency(), llvm::Mod, llvm::parseBitcodeFile(), llvm::report_fatal_error(), llvm::SplitModule(), llvm::SmallString< InternalLen >::str(), 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