LLVM 18.0.0git
|
#include "llvm/Transforms/Instrumentation/MemProfiler.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/MemoryProfileInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/ProfileData/InstrProfReader.h"
#include "llvm/Support/BLAKE3.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/HashBuilder.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include <map>
#include <set>
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 "memprof" |
Functions | |
STATISTIC (NumInstrumentedReads, "Number of instrumented reads") | |
STATISTIC (NumInstrumentedWrites, "Number of instrumented writes") | |
STATISTIC (NumSkippedStackReads, "Number of non-instrumented stack reads") | |
STATISTIC (NumSkippedStackWrites, "Number of non-instrumented stack writes") | |
STATISTIC (NumOfMemProfMissing, "Number of functions without memory profile.") | |
void | createProfileFileNameVar (Module &M) |
static void | addCallsiteMetadata (Instruction &I, std::vector< uint64_t > &InlinedCallStack, LLVMContext &Ctx) |
static uint64_t | computeStackId (GlobalValue::GUID Function, uint32_t LineOffset, uint32_t Column) |
static uint64_t | computeStackId (const memprof::Frame &Frame) |
static void | addCallStack (CallStackTrie &AllocTrie, const AllocationInfo *AllocInfo) |
static bool | stackFrameIncludesInlinedCallStack (ArrayRef< Frame > ProfileCallStack, ArrayRef< uint64_t > InlinedCallStack, unsigned StartIndex=0) |
static void | readMemprof (Module &M, Function &F, IndexedInstrProfReader *MemProfReader, const TargetLibraryInfo &TLI) |
Variables | |
cl::opt< bool > | llvm::PGOWarnMissing |
cl::opt< bool > | llvm::NoPGOWarnMismatchComdatWeak |
constexpr int | LLVM_MEM_PROFILER_VERSION = 1 |
constexpr uint64_t | DefaultShadowGranularity = 64 |
constexpr uint64_t | DefaultShadowScale = 3 |
constexpr char | MemProfModuleCtorName [] = "memprof.module_ctor" |
constexpr uint64_t | MemProfCtorAndDtorPriority = 1 |
constexpr uint64_t | MemProfEmscriptenCtorAndDtorPriority = 50 |
constexpr char | MemProfInitName [] = "__memprof_init" |
constexpr char | MemProfVersionCheckNamePrefix [] |
constexpr char | MemProfShadowMemoryDynamicAddress [] |
constexpr char | MemProfFilenameVar [] = "__memprof_profile_filename" |
static cl::opt< bool > | ClInsertVersionCheck ("memprof-guard-against-version-mismatch", cl::desc("Guard against compiler/runtime version mismatch."), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClInstrumentReads ("memprof-instrument-reads", cl::desc("instrument read instructions"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClInstrumentWrites ("memprof-instrument-writes", cl::desc("instrument write instructions"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClInstrumentAtomics ("memprof-instrument-atomics", cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden, cl::init(true)) |
static cl::opt< bool > | ClUseCalls ("memprof-use-callbacks", cl::desc("Use callbacks instead of inline instrumentation sequences."), cl::Hidden, cl::init(false)) |
static cl::opt< std::string > | ClMemoryAccessCallbackPrefix ("memprof-memory-access-callback-prefix", cl::desc("Prefix for memory access callbacks"), cl::Hidden, cl::init("__memprof_")) |
static cl::opt< int > | ClMappingScale ("memprof-mapping-scale", cl::desc("scale of memprof shadow mapping"), cl::Hidden, cl::init(DefaultShadowScale)) |
static cl::opt< int > | ClMappingGranularity ("memprof-mapping-granularity", cl::desc("granularity of memprof shadow mapping"), cl::Hidden, cl::init(DefaultShadowGranularity)) |
static cl::opt< bool > | ClStack ("memprof-instrument-stack", cl::desc("Instrument scalar stack variables"), cl::Hidden, cl::init(false)) |
static cl::opt< int > | ClDebug ("memprof-debug", cl::desc("debug"), cl::Hidden, cl::init(0)) |
static cl::opt< std::string > | ClDebugFunc ("memprof-debug-func", cl::Hidden, cl::desc("Debug func")) |
static cl::opt< int > | ClDebugMin ("memprof-debug-min", cl::desc("Debug min inst"), cl::Hidden, cl::init(-1)) |
static cl::opt< int > | ClDebugMax ("memprof-debug-max", cl::desc("Debug max inst"), cl::Hidden, cl::init(-1)) |
#define DEBUG_TYPE "memprof" |
Definition at line 51 of file MemProfiler.cpp.
|
static |
Definition at line 622 of file MemProfiler.cpp.
References llvm::memprof::buildCallstackMetadata(), and I.
Referenced by readMemprof().
|
static |
Definition at line 644 of file MemProfiler.cpp.
References llvm::memprof::CallStackTrie::addCallStack(), computeStackId(), llvm::memprof::getAllocType(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by readMemprof().
|
static |
Definition at line 640 of file MemProfiler.cpp.
References llvm::memprof::Frame::Column, computeStackId(), llvm::memprof::Frame::Function, and llvm::memprof::Frame::LineOffset.
|
static |
Definition at line 629 of file MemProfiler.cpp.
References llvm::HashBuilderImpl< HasherT, Endianness >::add(), and llvm::HashBuilderBase< HasherT >::final().
Referenced by addCallStack(), computeStackId(), readMemprof(), and stackFrameIncludesInlinedCallStack().
void createProfileFileNameVar | ( | Module & | M | ) |
Definition at line 467 of file MemProfiler.cpp.
References assert(), llvm::StringRef::empty(), llvm::GlobalValue::ExternalLinkage, llvm::MDString::getString(), llvm::ConstantDataArray::getString(), llvm::Value::getType(), MemProfFilenameVar, llvm::GlobalObject::setComdat(), llvm::GlobalValue::setLinkage(), and llvm::GlobalValue::WeakAnyLinkage.
|
static |
Definition at line 677 of file MemProfiler.cpp.
References addCallsiteMetadata(), addCallStack(), assert(), llvm::GlobalValue::AvailableExternallyLinkage, llvm::memprof::CallStackTrie::buildAndAttachMIBMetadata(), computeStackId(), llvm::dbgs(), llvm::DS_Warning, llvm::memprof::CallStackTrie::empty(), F, llvm::InstrProfError::get(), llvm::GlobalValue::getGUID(), llvm::getIRPGOFuncName(), llvm::getPGOFuncName(), llvm::handleAllErrors(), llvm::handleErrors(), llvm::hash_mismatch, I, Idx, llvm::isNewLikeFn(), LLVM_DEBUG, llvm::InstrProfError::message(), Name, llvm::NoPGOWarnMismatch, llvm::NoPGOWarnMismatchComdatWeak, llvm::PGOWarnMissing, stackFrameIncludesInlinedCallStack(), llvm::Error::success(), and llvm::unknown_function.
Referenced by llvm::MemProfUsePass::run().
|
static |
Definition at line 660 of file MemProfiler.cpp.
References llvm::ArrayRef< T >::begin(), computeStackId(), and llvm::ArrayRef< T >::end().
Referenced by readMemprof().
STATISTIC | ( | NumInstrumentedReads | , |
"Number of instrumented reads" | |||
) |
STATISTIC | ( | NumInstrumentedWrites | , |
"Number of instrumented writes" | |||
) |
STATISTIC | ( | NumOfMemProfMissing | , |
"Number of functions without memory profile." | |||
) |
STATISTIC | ( | NumSkippedStackReads | , |
"Number of non-instrumented stack reads" | |||
) |
STATISTIC | ( | NumSkippedStackWrites | , |
"Number of non-instrumented stack writes" | |||
) |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
constexpr |
Definition at line 62 of file MemProfiler.cpp.
|
constexpr |
Definition at line 65 of file MemProfiler.cpp.
|
constexpr |
Definition at line 59 of file MemProfiler.cpp.
|
constexpr |
Definition at line 68 of file MemProfiler.cpp.
|
constexpr |
Definition at line 70 of file MemProfiler.cpp.
|
constexpr |
Definition at line 78 of file MemProfiler.cpp.
Referenced by createProfileFileNameVar().
|
constexpr |
Definition at line 71 of file MemProfiler.cpp.
|
constexpr |
Definition at line 67 of file MemProfiler.cpp.
|
constexpr |
Definition at line 75 of file MemProfiler.cpp.
|
constexpr |
Definition at line 72 of file MemProfiler.cpp.