LLVM 20.0.0git
|
#include "llvm/LTO/legacy/ThinLTOCodeGenerator.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/ModuleSummaryAnalysis.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/Bitcode/BitcodeWriterPass.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/DiagnosticPrinter.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/LLVMRemarkStreamer.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Mangler.h"
#include "llvm/IR/PassTimingInfo.h"
#include "llvm/IR/Verifier.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/LTO/LTO.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/IRObjectFile.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/Passes/StandardInstrumentations.h"
#include "llvm/Remarks/HotnessThresholdParser.h"
#include "llvm/Support/CachePruning.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/SHA1.h"
#include "llvm/Support/SmallVectorMemoryBuffer.h"
#include "llvm/Support/ThreadPool.h"
#include "llvm/Support/Threading.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/TargetParser/SubtargetFeature.h"
#include "llvm/Transforms/IPO/FunctionAttrs.h"
#include "llvm/Transforms/IPO/FunctionImport.h"
#include "llvm/Transforms/IPO/Internalize.h"
#include "llvm/Transforms/IPO/WholeProgramDevirt.h"
#include "llvm/Transforms/ObjCARC.h"
#include "llvm/Transforms/Utils/FunctionImportUtils.h"
#include <numeric>
#include <unistd.h>
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 "thinlto" |
Variables | |
static cl::opt< int > | ThreadCount ("threads", cl::init(0)) |
#define DEBUG_TYPE "thinlto" |
Definition at line 75 of file ThinLTOCodeGenerator.cpp.
|
static |
Definition at line 295 of file ThinLTOCodeGenerator.cpp.
References llvm::GlobalValue::getGUID(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), and Sym.
Referenced by llvm::ThinLTOCodeGenerator::crossModuleImport(), llvm::ThinLTOCodeGenerator::emitImports(), llvm::ThinLTOCodeGenerator::gatherImportedSummariesForModule(), llvm::ThinLTOCodeGenerator::internalize(), llvm::ThinLTOCodeGenerator::promote(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 327 of file ThinLTOCodeGenerator.cpp.
References OS, llvm::report_fatal_error(), and llvm::legacy::PassManager::run().
Referenced by ProcessThinLTOModule(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 653 of file ThinLTOCodeGenerator.cpp.
References llvm::computeDeadSymbolsWithConstProp(), G, and llvm::Unknown.
Referenced by llvm::ThinLTOCodeGenerator::crossModuleImport(), llvm::ThinLTOCodeGenerator::emitImports(), llvm::ThinLTOCodeGenerator::gatherImportedSummariesForModule(), llvm::ThinLTOCodeGenerator::internalize(), llvm::ThinLTOCodeGenerator::promote(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 318 of file ThinLTOCodeGenerator.cpp.
References computeGUIDPreservedSymbols(), and PreservedSymbols.
|
static |
Definition at line 304 of file ThinLTOCodeGenerator.cpp.
References llvm::GlobalValue::ExternalLinkage, llvm::GlobalValue::getGlobalIdentifier(), llvm::GlobalValue::getGUID(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), PreservedSymbols, and Sym.
Referenced by computeGUIDPreservedSymbols(), llvm::ThinLTOCodeGenerator::crossModuleImport(), llvm::ThinLTOCodeGenerator::emitImports(), llvm::ThinLTOCodeGenerator::gatherImportedSummariesForModule(), llvm::ThinLTOCodeGenerator::internalize(), llvm::ThinLTOCodeGenerator::promote(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 135 of file ThinLTOCodeGenerator.cpp.
References getFirstDefinitionForLinker(), and I.
Referenced by llvm::ThinLTOCodeGenerator::crossModuleImport(), llvm::ThinLTOCodeGenerator::emitImports(), llvm::ThinLTOCodeGenerator::gatherImportedSummariesForModule(), llvm::ThinLTOCodeGenerator::internalize(), llvm::ThinLTOCodeGenerator::promote(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 214 of file ThinLTOCodeGenerator.cpp.
References llvm::Module::getContext(), llvm::handleAllErrors(), llvm::FunctionImporter::importFunctions(), loadModuleFromInput(), llvm::report_fatal_error(), and verifyLoadedModule().
Referenced by llvm::ThinLTOCodeGenerator::crossModuleImport(), and ProcessThinLTOModule().
|
static |
Definition at line 150 of file ThinLTOCodeGenerator.cpp.
References assert(), llvm::StringMap< ValueTy, AllocatorTy >::contains(), llvm::dbgs(), and LLVM_DEBUG.
Referenced by llvm::ThinLTOCodeGenerator::crossModuleImport(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 109 of file ThinLTOCodeGenerator.cpp.
References llvm::find_if(), llvm::GlobalValue::isAvailableExternallyLinkage(), and llvm::GlobalValue::isWeakForLinker().
Referenced by computePrevailingCopies().
|
static |
Definition at line 537 of file ThinLTOCodeGenerator.cpp.
References llvm::lto::getThinLTODefaultCPU(), llvm::ThinLTOCodeGeneratorImpl::TargetMachineBuilder::MCpu, and llvm::ThinLTOCodeGeneratorImpl::TargetMachineBuilder::TheTriple.
Referenced by llvm::ThinLTOCodeGenerator::addModule(), llvm::ThinLTOCodeGenerator::internalize(), and llvm::ThinLTOCodeGenerator::optimize().
|
static |
Definition at line 190 of file ThinLTOCodeGenerator.cpp.
References llvm::Expected< T >::get(), llvm::lto::InputFile::getSingleBitcodeModule(), llvm::handleAllErrors(), Mod, llvm::report_fatal_error(), llvm::Expected< T >::takeError(), and verifyLoadedModule().
Referenced by crossImportIntoModule(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 238 of file ThinLTOCodeGenerator.cpp.
References llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::addPass(), llvm::PassBuilder::buildThinLTODefaultPipeline(), CGAM, llvm::PassBuilder::crossRegisterProxies(), FAM, llvm::Module::getContext(), LAM, llvm_unreachable, llvm::PipelineTuningOptions::LoopVectorization, MAM, llvm::OptimizationLevel::O0, llvm::OptimizationLevel::O1, llvm::OptimizationLevel::O2, llvm::OptimizationLevel::O3, PB(), PIC, llvm::PassBuilder::registerCGSCCAnalyses(), llvm::PassBuilder::registerFunctionAnalyses(), llvm::PassBuilder::registerLoopAnalyses(), llvm::PassBuilder::registerModuleAnalyses(), llvm::AnalysisManager< IRUnitT, ExtraArgTs >::registerPass(), llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::run(), and llvm::PipelineTuningOptions::SLPVectorization.
Referenced by llvm::ThinLTOCodeGenerator::optimize(), and ProcessThinLTOModule().
|
static |
Definition at line 429 of file ThinLTOCodeGenerator.cpp.
References llvm::buildModuleSummaryIndex(), codegenModule(), llvm::count(), crossImportIntoModule(), llvm::PIELevel::Default, llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::empty(), llvm::Module::getPIELevel(), optimizeModule(), OS, promoteModule(), saveTempBitcode(), llvm::StringMapImpl::size(), llvm::Reloc::Static, llvm::thinLTOFinalizeInModule(), llvm::thinLTOInternalizeModule(), llvm::updatePublicTypeTestCalls(), and llvm::WriteBitcodeToFile().
Referenced by llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 161 of file ThinLTOCodeGenerator.cpp.
References llvm::renameModuleForThinLTO(), and llvm::report_fatal_error().
Referenced by llvm::ThinLTOCodeGenerator::internalize(), ProcessThinLTOModule(), and llvm::ThinLTOCodeGenerator::promote().
|
static |
Resolve prevailing symbols.
Record resolutions in the ResolvedODR
map for caching, and in the Index
for application during the ThinLTO backends. This is needed for correctness for exported symbols (ensure at least one copy kept) and a compile-time optimization (to drop duplicate copies when possible).
Definition at line 508 of file ThinLTOCodeGenerator.cpp.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), and llvm::thinLTOResolvePrevailingInIndex().
Referenced by llvm::ThinLTOCodeGenerator::internalize(), llvm::ThinLTOCodeGenerator::promote(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Definition at line 94 of file ThinLTOCodeGenerator.cpp.
References llvm::count(), llvm::StringRef::empty(), llvm::sys::fs::OF_None, OS, llvm::report_fatal_error(), and llvm::WriteBitcodeToFile().
Referenced by ProcessThinLTOModule(), and llvm::ThinLTOCodeGenerator::run().
|
static |
Verify the module and strip broken debug info.
Definition at line 179 of file ThinLTOCodeGenerator.cpp.
References llvm::dbgs(), llvm::LLVMContext::diagnose(), llvm::DS_Warning, llvm::Module::getContext(), llvm::report_fatal_error(), llvm::StripDebugInfo(), and llvm::verifyModule().
Referenced by crossImportIntoModule(), and loadModuleFromInput().
|
static |