13#ifndef LLVM_XRAY_FDRRECORDS_H
14#define LLVM_XRAY_FDRRECORDS_H
30class RecordInitializer;
130 return R->getRecordType() == RecordKind::RK_Metadata_BufferExtents;
147 Seconds(S), Nanos(
N) {}
155 return R->getRecordType() == RecordKind::RK_Metadata_WallClockTime;
181 return R->getRecordType() == RecordKind::RK_Metadata_NewCPUId;
203 return R->getRecordType() == RecordKind::RK_Metadata_TSCWrap;
232 return R->getRecordType() == RecordKind::RK_Metadata_CustomEvent;
253 int32_t
delta()
const {
return Delta; }
259 return R->getRecordType() == RecordKind::RK_Metadata_CustomEventV5;
281 int32_t
delta()
const {
return Delta; }
288 return R->getRecordType() == RecordKind::RK_Metadata_TypedEvent;
310 return R->getRecordType() == RecordKind::RK_Metadata_CallArg;
328 int32_t
pid()
const {
return PID; }
333 return R->getRecordType() == RecordKind::RK_Metadata_PIDEntry;
351 int32_t
tid()
const {
return TID; }
356 return R->getRecordType() == RecordKind::RK_Metadata_NewBuffer;
369 return R->getRecordType() == RecordKind::RK_Metadata_EndOfBuffer;
379 static constexpr unsigned kFunctionRecordSize = 8;
396 return R->getRecordType() == RecordKind::RK_Function;
428 :
E(DE), OffsetPtr(
OP), Version(V) {}
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
void visit(MachineFunction &MF, MachineBasicBlock &Start, std::function< void(MachineBasicBlock *)> op)
Lightweight error class with error context and mandatory checking.
StringRef - Represent a constant reference to a string, i.e.
static bool classof(const Record *R)
BufferExtents(uint64_t S)
static bool classof(const Record *R)
CallArgRecord(uint64_t A)
static bool classof(const Record *R)
CustomEventRecordV5(int32_t S, int32_t D, std::string P)
static bool classof(const Record *R)
CustomEventRecord(uint64_t S, uint64_t T, uint16_t C, std::string D)
static bool classof(const Record *R)
RecordTypes recordType() const
int32_t functionId() const
FunctionRecord(RecordTypes K, int32_t F, uint32_t D)
static bool classof(const Record *R)
NewBufferRecord(int32_t T)
static bool classof(const Record *R)
NewCPUIDRecord(uint16_t C, uint64_t T)
static bool classof(const Record *R)
static bool classof(const Record *R)
RecordInitializer(DataExtractor &DE, uint64_t &OP)
RecordInitializer(DataExtractor &DE, uint64_t &OP, uint16_t V)
virtual Error visit(TSCWrapRecord &)=0
virtual Error visit(CallArgRecord &)=0
virtual Error visit(TypedEventRecord &)=0
virtual Error visit(CustomEventRecord &)=0
virtual Error visit(PIDRecord &)=0
virtual Error visit(WallclockRecord &)=0
virtual Error visit(FunctionRecord &)=0
virtual Error visit(NewBufferRecord &)=0
virtual ~RecordVisitor()=default
virtual Error visit(BufferExtents &)=0
virtual Error visit(CustomEventRecordV5 &)=0
virtual Error visit(NewCPUIDRecord &)=0
virtual Error visit(EndBufferRecord &)=0
static LLVM_ABI StringRef kindToString(RecordKind K)
Record(const Record &)=delete
@ RK_Metadata_BufferExtents
@ RK_Metadata_EndOfBuffer
@ RK_Metadata_WallClockTime
@ RK_Metadata_CustomEvent
@ RK_Metadata_LastMetadata
@ RK_Metadata_CustomEventV5
virtual Error apply(RecordVisitor &V)=0
Record & operator=(Record &&)=delete
virtual ~Record()=default
RecordKind getRecordType() const
Record & operator=(const Record &)=delete
TSCWrapRecord(uint64_t B)
static bool classof(const Record *R)
TypedEventRecord(int32_t S, int32_t D, uint16_t E, std::string P)
static bool classof(const Record *R)
uint16_t eventType() const
static bool classof(const Record *R)
WallclockRecord(uint64_t S, uint32_t N)
RecordTypes
Determines the supported types of records that could be seen in XRay traces.
This is an optimization pass for GlobalISel generic memory operations.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Implement std::hash so that hash_code can be used in STL containers.