LLVM 20.0.0git
Namespaces | Macros | Functions | Variables
InstrProfiling.cpp File Reference
#include "llvm/Transforms/Instrumentation/InstrProfiling.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Analysis/BlockFrequencyInfo.h"
#include "llvm/Analysis/BranchProbabilityInfo.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DIBuilder.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/Pass.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/ProfileData/InstrProfCorrelator.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/Instrumentation/PGOInstrumentation.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Instrumentation.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include "llvm/Transforms/Utils/SSAUpdater.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <string>
#include "llvm/ProfileData/InstrProfData.inc"

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   "instrprof"
 
#define VALUE_PROF_FUNC_PARAM(ParamType, ParamName, ParamLLVMType)   ParamLLVMType
 
#define INSTR_PROF_VTABLE_DATA(Type, LLVMType, Name, Init)   LLVMType,
 
#define INSTR_PROF_VTABLE_DATA(Type, LLVMType, Name, Init)   Init,
 
#define INSTR_PROF_DATA(Type, LLVMType, Name, Init)   LLVMType,
 
#define INSTR_PROF_DATA(Type, LLVMType, Name, Init)   Init,
 
#define INSTR_PROF_MIN_VAL_COUNTS   10
 
#define INSTR_PROF_VALUE_NODE(Type, LLVMType, Name, Init)   LLVMType,
 

Functions

cl::opt< boolllvm::DebugInfoCorrelate ("debug-info-correlate", cl::desc("Use debug info to correlate profiles. (Deprecated, use " "-profile-correlate=debug-info)"), cl::init(false))
 
static bool needsRuntimeHookUnconditionally (const Triple &TT)
 
static bool containsProfilingIntrinsics (Module &M)
 Check if the module contains uses of any profiling intrinsics.
 
static FunctionCallee getOrInsertValueProfilingCall (Module &M, const TargetLibraryInfo &TLI, ValueProfilingCallType CallType=ValueProfilingCallType::Default)
 
static std::string getVarName (InstrProfInstBase *Inc, StringRef Prefix, bool &Renamed)
 Get the name of a profiling variable for a particular function.
 
static bool shouldRecordFunctionAddr (Function *F)
 
static bool shouldUsePublicSymbol (Function *Fn)
 
static ConstantgetFuncAddrForProfData (Function *Fn)
 
static bool needsRuntimeRegistrationOfSectionRange (const Triple &TT)
 
static bool shouldRecordVTableAddr (GlobalVariable *GV)
 
static ConstantgetVTableAddrForProfData (GlobalVariable *GV)
 
void llvm::createProfileSamplingVar (Module &M)
 

Variables

cl::opt< InstrProfCorrelator::ProfCorrelatorKindllvm::ProfileCorrelate ("profile-correlate", cl::desc("Use debug info or binary file to correlate profiles."), cl::init(InstrProfCorrelator::NONE), cl::values(clEnumValN(InstrProfCorrelator::NONE, "", "No profile correlation"), clEnumValN(InstrProfCorrelator::DEBUG_INFO, "debug-info", "Use debug info to correlate"), clEnumValN(InstrProfCorrelator::BINARY, "binary", "Use binary to correlate")))
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "instrprof"

Definition at line 64 of file InstrProfiling.cpp.

◆ INSTR_PROF_DATA [1/2]

#define INSTR_PROF_DATA (   Type,
  LLVMType,
  Name,
  Init 
)    LLVMType,

◆ INSTR_PROF_DATA [2/2]

#define INSTR_PROF_DATA (   Type,
  LLVMType,
  Name,
  Init 
)    Init,

◆ INSTR_PROF_MIN_VAL_COUNTS

#define INSTR_PROF_MIN_VAL_COUNTS   10

◆ INSTR_PROF_VALUE_NODE

#define INSTR_PROF_VALUE_NODE (   Type,
  LLVMType,
  Name,
  Init 
)    LLVMType,

◆ INSTR_PROF_VTABLE_DATA [1/2]

#define INSTR_PROF_VTABLE_DATA (   Type,
  LLVMType,
  Name,
  Init 
)    LLVMType,

◆ INSTR_PROF_VTABLE_DATA [2/2]

#define INSTR_PROF_VTABLE_DATA (   Type,
  LLVMType,
  Name,
  Init 
)    Init,

◆ VALUE_PROF_FUNC_PARAM

#define VALUE_PROF_FUNC_PARAM (   ParamType,
  ParamName,
  ParamLLVMType 
)    ParamLLVMType

Function Documentation

◆ containsProfilingIntrinsics()

static bool containsProfilingIntrinsics ( Module M)
static

Check if the module contains uses of any profiling intrinsics.

Definition at line 919 of file InstrProfiling.cpp.

References F, and llvm::Intrinsic::getDeclarationIfExists().

◆ getFuncAddrForProfData()

static Constant * getFuncAddrForProfData ( Function Fn)
inlinestatic

◆ getOrInsertValueProfilingCall()

static FunctionCallee getOrInsertValueProfilingCall ( Module M,
const TargetLibraryInfo TLI,
ValueProfilingCallType  CallType = ValueProfilingCallType::Default 
)
static

◆ getVarName()

static std::string getVarName ( InstrProfInstBase Inc,
StringRef  Prefix,
bool Renamed 
)
static

◆ getVTableAddrForProfData()

static Constant * getVTableAddrForProfData ( GlobalVariable GV)
inlinestatic

◆ needsRuntimeHookUnconditionally()

static bool needsRuntimeHookUnconditionally ( const Triple TT)
static

Definition at line 910 of file InstrProfiling.cpp.

◆ needsRuntimeRegistrationOfSectionRange()

static bool needsRuntimeRegistrationOfSectionRange ( const Triple TT)
static

Definition at line 1423 of file InstrProfiling.cpp.

◆ shouldRecordFunctionAddr()

static bool shouldRecordFunctionAddr ( Function F)
inlinestatic

Definition at line 1320 of file InstrProfiling.cpp.

References F.

Referenced by getFuncAddrForProfData().

◆ shouldRecordVTableAddr()

static bool shouldRecordVTableAddr ( GlobalVariable GV)
inlinestatic

◆ shouldUsePublicSymbol()

static bool shouldUsePublicSymbol ( Function Fn)
inlinestatic