19#include "llvm/Support/Compiler.h"
20#include "llvm/Support/Format.h"
26 if constexpr (std::is_pointer_v<T>) {
27 uint32_t ID = OpPC.
read<uint32_t>();
28 return reinterpret_cast<T
>(
P.getNativePointer(ID));
30 return OpPC.
read<T>();
34LLVM_DUMP_METHOD
void Function::dump()
const {
dump(llvm::errs()); }
36LLVM_DUMP_METHOD
void Function::dump(llvm::raw_ostream &
OS)
const {
37 OS <<
getName() <<
" " << (
const void *)
this <<
"\n";
38 OS <<
"frame size: " << getFrameSize() <<
"\n";
39 OS <<
"arg size: " << getArgSize() <<
"\n";
40 OS <<
"rvo: " << hasRVO() <<
"\n";
41 OS <<
"this arg: " << hasThisPointer() <<
"\n";
43 auto PrintName = [&
OS](
const char *Name) {
45 for (
long I = 0, N = strlen(Name); I < 30 - N; ++I) {
50 for (
CodePtr Start = getCodeBegin(), PC = Start; PC != getCodeEnd();) {
51 size_t Addr = PC - Start;
52 auto Op = PC.read<
Opcode>();
53 OS << llvm::format(
"%8d", Addr) <<
" ";
66 OS <<
"Global Variables: " << Globals.size() <<
"\n";
67 OS <<
"Functions: " << Funcs.size() <<
"\n";
69 for (
auto &Func : Funcs) {
72 for (
auto &Anon : AnonFuncs) {
static void dump(llvm::raw_ostream &OS, StringRef FunctionName, ArrayRef< CounterExpression > Expressions, ArrayRef< CounterMappingRegion > Regions)
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
T ReadArg(Program &P, CodePtr &OpPC)
static std::string getName(const CallEvent &Call)
Pointer into the code segment.
std::enable_if_t<!std::is_pointer< T >::value, T > read()
Reads data and advances the pointer.
The program contains and links the bytecode for all functions.
void dump() const
Dumps the disassembled bytecode to llvm::errs().