LLVM 20.0.0git
|
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/IndirectCallPromotionAnalysis.h"
#include "llvm/Analysis/IndirectCallVisitor.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Analysis/TypeMetadataUtils.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/ProfDataUtils.h"
#include "llvm/IR/Value.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Instrumentation/PGOInstrumentation.h"
#include "llvm/Transforms/Utils/CallPromotionUtils.h"
#include "llvm/Transforms/Utils/Instrumentation.h"
#include <cassert>
#include <cstdint>
#include <set>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
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 "pgo-icall-prom" |
Functions | |
STATISTIC (NumOfPGOICallPromotion, "Number of indirect call promotions.") | |
STATISTIC (NumOfPGOICallsites, "Number of indirect call candidate sites.") | |
static MDNode * | createBranchWeights (LLVMContext &Context, uint64_t TrueWeight, uint64_t FalseWeight) |
static void | computeVirtualCallSiteTypeInfoMap (Module &M, ModuleAnalysisManager &MAM, VirtualCallSiteTypeInfoMap &VirtualCSInfo) |
static bool | promoteIndirectCalls (Module &M, ProfileSummaryInfo *PSI, bool InLTO, bool SamplePGO, ModuleAnalysisManager &MAM) |
Variables | |
cl::opt< unsigned > | MaxNumVTableAnnotations |
static cl::opt< bool > | DisableICP ("disable-icp", cl::init(false), cl::Hidden, cl::desc("Disable indirect call promotion")) |
static cl::opt< unsigned > | ICPCutOff ("icp-cutoff", cl::init(0), cl::Hidden, cl::desc("Max number of promotions for this compilation")) |
static cl::opt< unsigned > | ICPCSSkip ("icp-csskip", cl::init(0), cl::Hidden, cl::desc("Skip Callsite up to this number for this compilation")) |
static cl::opt< bool > | ICPLTOMode ("icp-lto", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion in LTO " "mode")) |
static cl::opt< bool > | ICPSamplePGOMode ("icp-samplepgo", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion in SamplePGO mode")) |
static cl::opt< bool > | ICPCallOnly ("icp-call-only", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion for call instructions " "only")) |
static cl::opt< bool > | ICPInvokeOnly ("icp-invoke-only", cl::init(false), cl::Hidden, cl::desc("Run indirect-call promotion for " "invoke instruction only")) |
static cl::opt< bool > | ICPDUMPAFTER ("icp-dumpafter", cl::init(false), cl::Hidden, cl::desc("Dump IR after transformation happens")) |
static cl::opt< float > | ICPVTablePercentageThreshold ("icp-vtable-percentage-threshold", cl::init(0.995), cl::Hidden, cl::desc("The percentage threshold of vtable-count / function-count for " "cost-benefit analysis.")) |
static cl::opt< int > | ICPMaxNumVTableLastCandidate ("icp-max-num-vtable-last-candidate", cl::init(1), cl::Hidden, cl::desc("The maximum number of vtable for the last candidate.")) |
static cl::list< std::string > | ICPIgnoredBaseTypes ("icp-ignored-base-types", cl::Hidden, cl::desc("A list of mangled vtable type info names. Classes specified by the " "type info names and their derived ones will not be vtable-ICP'ed. " "Useful when the profiled types and actual types in the optimized " "binary could be different due to profiling limitations. Type info " "names are those string literals used in LLVM type metadata")) |
#define DEBUG_TYPE "pgo-icall-prom" |
Definition at line 53 of file IndirectCallPromotion.cpp.
|
static |
Definition at line 935 of file IndirectCallPromotion.cpp.
References F, FAM, llvm::findDevirtualizableCallsForTypeTest(), llvm::Intrinsic::getDeclarationIfExists(), llvm::AnalysisManager< IRUnitT, ExtraArgTs >::getResult(), llvm::make_early_inc_range(), MAM, llvm::PGOIndirectCallVisitor::tryGetVTableInstruction(), llvm::Value::use_empty(), and llvm::Value::uses().
Referenced by promoteIndirectCalls().
|
static |
Definition at line 610 of file IndirectCallPromotion.cpp.
References llvm::calculateCountScale(), llvm::MDBuilder::createBranchWeights(), and llvm::scaleBranchCount().
Referenced by llvm::pgo::promoteIndirectCall().
|
static |
Definition at line 988 of file IndirectCallPromotion.cpp.
References computeVirtualCallSiteTypeInfoMap(), llvm::InstrProfSymtab::create(), llvm::dbgs(), DisableICP, llvm::EnableVTableProfileUse, F, FAM, llvm::AnalysisManager< IRUnitT, ExtraArgTs >::getResult(), ICPCutOff, ICPDUMPAFTER, ICPIgnoredBaseTypes, llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), LLVM_DEBUG, MAM, and llvm::toString().
Referenced by llvm::PGOIndirectCallPromotion::run().
STATISTIC | ( | NumOfPGOICallPromotion | , |
"Number of indirect call promotions." | |||
) |
STATISTIC | ( | NumOfPGOICallsites | , |
"Number of indirect call candidate sites." | |||
) |
|
static |
Referenced by promoteIndirectCalls().
|
static |
|
static |
|
static |
Referenced by promoteIndirectCalls().
|
static |
Referenced by promoteIndirectCalls().
|
static |
Referenced by promoteIndirectCalls().
|
static |
|
static |
Referenced by llvm::PGOIndirectCallPromotion::run().
|
static |
|
static |
Referenced by llvm::PGOIndirectCallPromotion::run().
|
static |