LLVM  14.0.0git
FDRRecords.h
Go to the documentation of this file.
1 //===- FDRRecords.h - XRay Flight Data Recorder Mode Records --------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Define types and operations on these types that represent the different kinds
10 // of records we encounter in XRay flight data recorder mode traces.
11 //
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_XRAY_FDRRECORDS_H
14 #define LLVM_XRAY_FDRRECORDS_H
15 
16 #include <cstdint>
17 #include <string>
18 
19 #include "llvm/ADT/StringRef.h"
20 #include "llvm/Support/Casting.h"
22 #include "llvm/Support/Error.h"
23 #include "llvm/XRay/XRayRecord.h"
24 
25 namespace llvm {
26 namespace xray {
27 
28 class RecordVisitor;
29 class RecordInitializer;
30 
31 class Record {
32 public:
33  enum class RecordKind {
48  };
49 
51 
52 private:
53  const RecordKind T;
54 
55 public:
56  Record(const Record &) = delete;
57  Record(Record &&) = delete;
58  Record &operator=(const Record &) = delete;
59  Record &operator=(Record &&) = delete;
60  explicit Record(RecordKind T) : T(T) {}
61 
62  RecordKind getRecordType() const { return T; }
63 
64  // Each Record should be able to apply an abstract visitor, and choose the
65  // appropriate function in the visitor to invoke, given its own type.
66  virtual Error apply(RecordVisitor &V) = 0;
67 
68  virtual ~Record() = default;
69 };
70 
71 class MetadataRecord : public Record {
72 public:
73  enum class MetadataType : unsigned {
74  Unknown,
77  NewCPUId,
78  TSCWrap,
80  CallArg,
81  PIDEntry,
82  NewBuffer,
84  TypedEvent,
85  };
86 
87 protected:
88  static constexpr int kMetadataBodySize = 15;
89  friend class RecordInitializer;
90 
91 private:
92  const MetadataType MT;
93 
94 public:
96 
97  static bool classof(const Record *R) {
98  return R->getRecordType() >= RecordKind::RK_Metadata &&
99  R->getRecordType() <= RecordKind::RK_Metadata_LastMetadata;
100  }
101 
102  MetadataType metadataType() const { return MT; }
103 
104  virtual ~MetadataRecord() = default;
105 };
106 
107 // What follows are specific Metadata record types which encapsulate the
108 // information associated with specific metadata record types in an FDR mode
109 // log.
111  uint64_t Size = 0;
112  friend class RecordInitializer;
113 
114 public:
116  : MetadataRecord(RecordKind::RK_Metadata_BufferExtents,
118 
120  : MetadataRecord(RecordKind::RK_Metadata_BufferExtents,
122  Size(S) {}
123 
124  uint64_t size() const { return Size; }
125 
126  Error apply(RecordVisitor &V) override;
127 
128  static bool classof(const Record *R) {
129  return R->getRecordType() == RecordKind::RK_Metadata_BufferExtents;
130  }
131 };
132 
134  uint64_t Seconds = 0;
135  uint32_t Nanos = 0;
136  friend class RecordInitializer;
137 
138 public:
140  : MetadataRecord(RecordKind::RK_Metadata_WallClockTime,
141  MetadataType::WallClockTime) {}
142 
144  : MetadataRecord(RecordKind::RK_Metadata_WallClockTime,
145  MetadataType::WallClockTime),
146  Seconds(S), Nanos(N) {}
147 
148  uint64_t seconds() const { return Seconds; }
149  uint32_t nanos() const { return Nanos; }
150 
151  Error apply(RecordVisitor &V) override;
152 
153  static bool classof(const Record *R) {
154  return R->getRecordType() == RecordKind::RK_Metadata_WallClockTime;
155  }
156 };
157 
159  uint16_t CPUId = 0;
160  uint64_t TSC = 0;
161  friend class RecordInitializer;
162 
163 public:
165  : MetadataRecord(RecordKind::RK_Metadata_NewCPUId,
166  MetadataType::NewCPUId) {}
167 
169  : MetadataRecord(RecordKind::RK_Metadata_NewCPUId,
170  MetadataType::NewCPUId),
171  CPUId(C), TSC(T) {}
172 
173  uint16_t cpuid() const { return CPUId; }
174 
175  uint64_t tsc() const { return TSC; }
176 
177  Error apply(RecordVisitor &V) override;
178 
179  static bool classof(const Record *R) {
180  return R->getRecordType() == RecordKind::RK_Metadata_NewCPUId;
181  }
182 };
183 
185  uint64_t BaseTSC = 0;
186  friend class RecordInitializer;
187 
188 public:
190  : MetadataRecord(RecordKind::RK_Metadata_TSCWrap, MetadataType::TSCWrap) {
191  }
192 
194  : MetadataRecord(RecordKind::RK_Metadata_TSCWrap, MetadataType::TSCWrap),
195  BaseTSC(B) {}
196 
197  uint64_t tsc() const { return BaseTSC; }
198 
199  Error apply(RecordVisitor &V) override;
200 
201  static bool classof(const Record *R) {
202  return R->getRecordType() == RecordKind::RK_Metadata_TSCWrap;
203  }
204 };
205 
207  int32_t Size = 0;
208  uint64_t TSC = 0;
209  uint16_t CPU = 0;
210  std::string Data{};
211  friend class RecordInitializer;
212 
213 public:
215  : MetadataRecord(RecordKind::RK_Metadata_CustomEvent,
216  MetadataType::CustomEvent) {}
217 
218  explicit CustomEventRecord(uint64_t S, uint64_t T, uint16_t C, std::string D)
219  : MetadataRecord(RecordKind::RK_Metadata_CustomEvent,
220  MetadataType::CustomEvent),
221  Size(S), TSC(T), CPU(C), Data(std::move(D)) {}
222 
223  int32_t size() const { return Size; }
224  uint64_t tsc() const { return TSC; }
225  uint16_t cpu() const { return CPU; }
226  StringRef data() const { return Data; }
227 
228  Error apply(RecordVisitor &V) override;
229 
230  static bool classof(const Record *R) {
231  return R->getRecordType() == RecordKind::RK_Metadata_CustomEvent;
232  }
233 };
234 
236  int32_t Size = 0;
237  int32_t Delta = 0;
238  std::string Data{};
239  friend class RecordInitializer;
240 
241 public:
243  : MetadataRecord(RecordKind::RK_Metadata_CustomEventV5,
244  MetadataType::CustomEvent) {}
245 
246  explicit CustomEventRecordV5(int32_t S, int32_t D, std::string P)
247  : MetadataRecord(RecordKind::RK_Metadata_CustomEventV5,
248  MetadataType::CustomEvent),
249  Size(S), Delta(D), Data(std::move(P)) {}
250 
251  int32_t size() const { return Size; }
252  int32_t delta() const { return Delta; }
253  StringRef data() const { return Data; }
254 
255  Error apply(RecordVisitor &V) override;
256 
257  static bool classof(const Record *R) {
258  return R->getRecordType() == RecordKind::RK_Metadata_CustomEventV5;
259  }
260 };
261 
263  int32_t Size = 0;
264  int32_t Delta = 0;
265  uint16_t EventType = 0;
266  std::string Data{};
267  friend class RecordInitializer;
268 
269 public:
271  : MetadataRecord(RecordKind::RK_Metadata_TypedEvent,
272  MetadataType::TypedEvent) {}
273 
274  explicit TypedEventRecord(int32_t S, int32_t D, uint16_t E, std::string P)
275  : MetadataRecord(RecordKind::RK_Metadata_TypedEvent,
276  MetadataType::TypedEvent),
277  Size(S), Delta(D), Data(std::move(P)) {}
278 
279  int32_t size() const { return Size; }
280  int32_t delta() const { return Delta; }
281  uint16_t eventType() const { return EventType; }
282  StringRef data() const { return Data; }
283 
284  Error apply(RecordVisitor &V) override;
285 
286  static bool classof(const Record *R) {
287  return R->getRecordType() == RecordKind::RK_Metadata_TypedEvent;
288  }
289 };
290 
292  uint64_t Arg = 0;
293  friend class RecordInitializer;
294 
295 public:
297  : MetadataRecord(RecordKind::RK_Metadata_CallArg, MetadataType::CallArg) {
298  }
299 
301  : MetadataRecord(RecordKind::RK_Metadata_CallArg, MetadataType::CallArg),
302  Arg(A) {}
303 
304  uint64_t arg() const { return Arg; }
305 
306  Error apply(RecordVisitor &V) override;
307 
308  static bool classof(const Record *R) {
309  return R->getRecordType() == RecordKind::RK_Metadata_CallArg;
310  }
311 };
312 
313 class PIDRecord : public MetadataRecord {
314  int32_t PID = 0;
315  friend class RecordInitializer;
316 
317 public:
319  : MetadataRecord(RecordKind::RK_Metadata_PIDEntry,
320  MetadataType::PIDEntry) {}
321 
322  explicit PIDRecord(int32_t P)
323  : MetadataRecord(RecordKind::RK_Metadata_PIDEntry,
324  MetadataType::PIDEntry),
325  PID(P) {}
326 
327  int32_t pid() const { return PID; }
328 
329  Error apply(RecordVisitor &V) override;
330 
331  static bool classof(const Record *R) {
332  return R->getRecordType() == RecordKind::RK_Metadata_PIDEntry;
333  }
334 };
335 
337  int32_t TID = 0;
338  friend class RecordInitializer;
339 
340 public:
342  : MetadataRecord(RecordKind::RK_Metadata_NewBuffer,
343  MetadataType::NewBuffer) {}
344 
345  explicit NewBufferRecord(int32_t T)
346  : MetadataRecord(RecordKind::RK_Metadata_NewBuffer,
347  MetadataType::NewBuffer),
348  TID(T) {}
349 
350  int32_t tid() const { return TID; }
351 
352  Error apply(RecordVisitor &V) override;
353 
354  static bool classof(const Record *R) {
355  return R->getRecordType() == RecordKind::RK_Metadata_NewBuffer;
356  }
357 };
358 
360 public:
362  : MetadataRecord(RecordKind::RK_Metadata_EndOfBuffer,
363  MetadataType::EndOfBuffer) {}
364 
365  Error apply(RecordVisitor &V) override;
366 
367  static bool classof(const Record *R) {
368  return R->getRecordType() == RecordKind::RK_Metadata_EndOfBuffer;
369  }
370 };
371 
372 class FunctionRecord : public Record {
373  RecordTypes Kind;
374  int32_t FuncId = 0;
375  uint32_t Delta = 0;
376  friend class RecordInitializer;
377 
378  static constexpr unsigned kFunctionRecordSize = 8;
379 
380 public:
381  FunctionRecord() : Record(RecordKind::RK_Function) {}
382 
383  explicit FunctionRecord(RecordTypes K, int32_t F, uint32_t D)
384  : Record(RecordKind::RK_Function), Kind(K), FuncId(F), Delta(D) {}
385 
386  // A function record is a concrete record type which has a number of common
387  // properties.
388  RecordTypes recordType() const { return Kind; }
389  int32_t functionId() const { return FuncId; }
390  uint32_t delta() const { return Delta; }
391 
392  Error apply(RecordVisitor &V) override;
393 
394  static bool classof(const Record *R) {
395  return R->getRecordType() == RecordKind::RK_Function;
396  }
397 };
398 
400 public:
401  virtual ~RecordVisitor() = default;
402 
403  // Support all specific kinds of records:
404  virtual Error visit(BufferExtents &) = 0;
405  virtual Error visit(WallclockRecord &) = 0;
406  virtual Error visit(NewCPUIDRecord &) = 0;
407  virtual Error visit(TSCWrapRecord &) = 0;
408  virtual Error visit(CustomEventRecord &) = 0;
409  virtual Error visit(CallArgRecord &) = 0;
410  virtual Error visit(PIDRecord &) = 0;
411  virtual Error visit(NewBufferRecord &) = 0;
412  virtual Error visit(EndBufferRecord &) = 0;
413  virtual Error visit(FunctionRecord &) = 0;
414  virtual Error visit(CustomEventRecordV5 &) = 0;
415  virtual Error visit(TypedEventRecord &) = 0;
416 };
417 
419  DataExtractor &E;
420  uint64_t &OffsetPtr;
421  uint16_t Version;
422 
423 public:
424  static constexpr uint16_t DefaultVersion = 5u;
425 
427  : RecordVisitor(), E(DE), OffsetPtr(OP), Version(V) {}
428 
431 
432  Error visit(BufferExtents &) override;
433  Error visit(WallclockRecord &) override;
434  Error visit(NewCPUIDRecord &) override;
435  Error visit(TSCWrapRecord &) override;
436  Error visit(CustomEventRecord &) override;
437  Error visit(CallArgRecord &) override;
438  Error visit(PIDRecord &) override;
439  Error visit(NewBufferRecord &) override;
440  Error visit(EndBufferRecord &) override;
441  Error visit(FunctionRecord &) override;
442  Error visit(CustomEventRecordV5 &) override;
443  Error visit(TypedEventRecord &) override;
444 };
445 
446 } // namespace xray
447 } // namespace llvm
448 
449 #endif // LLVM_XRAY_FDRRECORDS_H
llvm::Check::Size
@ Size
Definition: FileCheck.h:73
llvm::xray::CustomEventRecord::tsc
uint64_t tsc() const
Definition: FDRRecords.h:224
llvm::xray::PIDRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:331
llvm::xray::WallclockRecord::WallclockRecord
WallclockRecord()
Definition: FDRRecords.h:139
llvm
This file implements support for optimizing divisions by a constant.
Definition: AllocatorList.h:23
llvm::xray::Record::RecordKind
RecordKind
Definition: FDRRecords.h:33
M
We currently emits eax Perhaps this is what we really should generate is Is imull three or four cycles eax eax The current instruction priority is based on pattern complexity The former is more complex because it folds a load so the latter will not be emitted Perhaps we should use AddedComplexity to give LEA32r a higher priority We should always try to match LEA first since the LEA matching code does some estimate to determine whether the match is profitable if we care more about code then imull is better It s two bytes shorter than movl leal On a Pentium M
Definition: README.txt:252
llvm::xray::FunctionRecord::delta
uint32_t delta() const
Definition: FDRRecords.h:390
llvm::xray::NewCPUIDRecord::tsc
uint64_t tsc() const
Definition: FDRRecords.h:175
llvm::xray::MetadataRecord::MetadataType
MetadataType
Definition: FDRRecords.h:73
llvm::xray::Record::operator=
Record & operator=(const Record &)=delete
llvm::xray::TypedEventRecord::TypedEventRecord
TypedEventRecord(int32_t S, int32_t D, uint16_t E, std::string P)
Definition: FDRRecords.h:274
llvm::xray::NewCPUIDRecord::NewCPUIDRecord
NewCPUIDRecord()
Definition: FDRRecords.h:164
llvm::xray::BufferExtents::size
uint64_t size() const
Definition: FDRRecords.h:124
llvm::xray::RecordVisitor
Definition: FDRRecords.h:399
llvm::xray::Record::RecordKind::RK_Metadata_NewBuffer
@ RK_Metadata_NewBuffer
llvm::xray::Record::RecordKind::RK_Metadata
@ RK_Metadata
StringRef.h
P
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
Definition: README-SSE.txt:411
llvm::xray::FunctionRecord
Definition: FDRRecords.h:372
llvm::xray::RecordInitializer::visit
Error visit(BufferExtents &) override
Definition: RecordInitializer.cpp:13
llvm::xray::Record::RecordKind::RK_Metadata_LastMetadata
@ RK_Metadata_LastMetadata
llvm::xray::PIDRecord
Definition: FDRRecords.h:313
llvm::xray::MetadataRecord::MetadataRecord
MetadataRecord(RecordKind T, MetadataType M)
Definition: FDRRecords.h:95
llvm::xray::BufferExtents::BufferExtents
BufferExtents()
Definition: FDRRecords.h:115
llvm::xray::TypedEventRecord::TypedEventRecord
TypedEventRecord()
Definition: FDRRecords.h:270
llvm::xray::MetadataRecord
Definition: FDRRecords.h:71
Error.h
llvm::xray::MetadataRecord::MetadataType::TypedEvent
@ TypedEvent
llvm::xray::PIDRecord::pid
int32_t pid() const
Definition: FDRRecords.h:327
llvm::xray::MetadataRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:97
llvm::xray::FunctionRecord::recordType
RecordTypes recordType() const
Definition: FDRRecords.h:388
llvm::xray::RecordInitializer
Definition: FDRRecords.h:418
llvm::xray::NewBufferRecord::NewBufferRecord
NewBufferRecord(int32_t T)
Definition: FDRRecords.h:345
llvm::xray::TSCWrapRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:21
T
#define T
Definition: Mips16ISelLowering.cpp:341
llvm::xray::MetadataRecord::MetadataType::CallArg
@ CallArg
llvm::xray::BufferExtents::BufferExtents
BufferExtents(uint64_t S)
Definition: FDRRecords.h:119
llvm::xray::Record::RecordKind::RK_Metadata_CustomEvent
@ RK_Metadata_CustomEvent
llvm::xray::CustomEventRecord::cpu
uint16_t cpu() const
Definition: FDRRecords.h:225
llvm::xray::WallclockRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:153
llvm::Data
@ Data
Definition: SIMachineScheduler.h:55
llvm::xray::RecordInitializer::DefaultVersion
static constexpr uint16_t DefaultVersion
Definition: FDRRecords.h:424
F
#define F(x, y, z)
Definition: MD5.cpp:56
llvm::RISCVFenceField::R
@ R
Definition: RISCVBaseInfo.h:198
llvm::xray::Record::RecordKind::RK_Metadata_TypedEvent
@ RK_Metadata_TypedEvent
llvm::xray::TSCWrapRecord::tsc
uint64_t tsc() const
Definition: FDRRecords.h:197
llvm::xray::RecordVisitor::~RecordVisitor
virtual ~RecordVisitor()=default
llvm::xray::NewBufferRecord::NewBufferRecord
NewBufferRecord()
Definition: FDRRecords.h:341
llvm::xray::CustomEventRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:22
Arg
amdgpu Simplify well known AMD library false FunctionCallee Value * Arg
Definition: AMDGPULibCalls.cpp:206
llvm::xray::BufferExtents
Definition: FDRRecords.h:110
llvm::xray::WallclockRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:19
llvm::xray::MetadataRecord::metadataType
MetadataType metadataType() const
Definition: FDRRecords.h:102
llvm::xray::NewCPUIDRecord
Definition: FDRRecords.h:158
llvm::xray::CustomEventRecord::size
int32_t size() const
Definition: FDRRecords.h:223
llvm::xray::CallArgRecord::CallArgRecord
CallArgRecord()
Definition: FDRRecords.h:296
E
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
llvm::xray::CustomEventRecordV5::CustomEventRecordV5
CustomEventRecordV5(int32_t S, int32_t D, std::string P)
Definition: FDRRecords.h:246
llvm::xray::CustomEventRecord::data
StringRef data() const
Definition: FDRRecords.h:226
C
(vector float) vec_cmpeq(*A, *B) C
Definition: README_ALTIVEC.txt:86
llvm::xray::CustomEventRecordV5::data
StringRef data() const
Definition: FDRRecords.h:253
llvm::xray::CustomEventRecord::CustomEventRecord
CustomEventRecord()
Definition: FDRRecords.h:214
llvm::xray::NewBufferRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:25
llvm::xray::RecordTypes
RecordTypes
Determines the supported types of records that could be seen in XRay traces.
Definition: XRayRecord.h:57
llvm::xray::FunctionRecord::FunctionRecord
FunctionRecord(RecordTypes K, int32_t F, uint32_t D)
Definition: FDRRecords.h:383
llvm::xray::Record::RecordKind::RK_Metadata_WallClockTime
@ RK_Metadata_WallClockTime
B
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
llvm::xray::TSCWrapRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:201
llvm::xray::Record::Record
Record(const Record &)=delete
llvm::xray::MetadataRecord::MetadataType::NewBuffer
@ NewBuffer
llvm::xray::Record::RecordKind::RK_Metadata_BufferExtents
@ RK_Metadata_BufferExtents
llvm::xray::NewBufferRecord
Definition: FDRRecords.h:336
llvm::xray::TypedEventRecord::size
int32_t size() const
Definition: FDRRecords.h:279
llvm::xray::EndBufferRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:367
llvm::xray::TypedEventRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:286
llvm::lltok::Kind
Kind
Definition: LLToken.h:18
llvm::xray::CallArgRecord::CallArgRecord
CallArgRecord(uint64_t A)
Definition: FDRRecords.h:300
llvm::xray::TSCWrapRecord::TSCWrapRecord
TSCWrapRecord()
Definition: FDRRecords.h:189
llvm::xray::MetadataRecord::MetadataType::PIDEntry
@ PIDEntry
llvm::xray::Record::RecordKind::RK_Function
@ RK_Function
llvm::xray::NewCPUIDRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:179
llvm::xray::Record::RecordKind::RK_Metadata_EndOfBuffer
@ RK_Metadata_EndOfBuffer
llvm::xray::MetadataRecord::MetadataType::WallClockTime
@ WallClockTime
llvm::xray::FunctionRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:394
llvm::xray::MetadataRecord::MetadataType::NewCPUId
@ NewCPUId
uint64_t
D
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
llvm::xray::TypedEventRecord::eventType
uint16_t eventType() const
Definition: FDRRecords.h:281
llvm::xray::NewCPUIDRecord::NewCPUIDRecord
NewCPUIDRecord(uint16_t C, uint64_t T)
Definition: FDRRecords.h:168
llvm::xray::PIDRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:24
llvm::xray::RecordVisitor::visit
virtual Error visit(BufferExtents &)=0
llvm::xray::Record::~Record
virtual ~Record()=default
FuncId
Profile::FuncID FuncId
Definition: Profile.cpp:321
llvm::xray::EndBufferRecord
Definition: FDRRecords.h:359
llvm::xray::WallclockRecord
Definition: FDRRecords.h:133
llvm::xray::CallArgRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:23
llvm::xray::MetadataRecord::MetadataType::CustomEvent
@ CustomEvent
llvm::xray::CallArgRecord
Definition: FDRRecords.h:291
llvm::xray::TSCWrapRecord::TSCWrapRecord
TSCWrapRecord(uint64_t B)
Definition: FDRRecords.h:193
llvm::NVPTXISD::CallArg
@ CallArg
Definition: NVPTXISelLowering.h:40
llvm::move
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1609
llvm::xray::TypedEventRecord
Definition: FDRRecords.h:262
llvm::xray::WallclockRecord::WallclockRecord
WallclockRecord(uint64_t S, uint32_t N)
Definition: FDRRecords.h:143
llvm::xray::Record::RecordKind::RK_Metadata_PIDEntry
@ RK_Metadata_PIDEntry
llvm::xray::NewCPUIDRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:20
llvm::xray::Record::kindToString
static StringRef kindToString(RecordKind K)
Definition: FDRRecords.cpp:31
OP
#define OP(n)
Definition: regex2.h:73
llvm::xray::CustomEventRecordV5::size
int32_t size() const
Definition: FDRRecords.h:251
llvm::xray::CustomEventRecordV5::CustomEventRecordV5
CustomEventRecordV5()
Definition: FDRRecords.h:242
llvm::xray::CallArgRecord::arg
uint64_t arg() const
Definition: FDRRecords.h:304
llvm::xray::TypedEventRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:29
llvm::xray::Record::getRecordType
RecordKind getRecordType() const
Definition: FDRRecords.h:62
llvm::xray::RecordInitializer::RecordInitializer
RecordInitializer(DataExtractor &DE, uint64_t &OP)
Definition: FDRRecords.h:429
llvm::xray::PIDRecord::PIDRecord
PIDRecord(int32_t P)
Definition: FDRRecords.h:322
llvm::xray::CustomEventRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:230
llvm::xray::TSCWrapRecord
Definition: FDRRecords.h:184
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
llvm::xray::MetadataRecord::MetadataType::TSCWrap
@ TSCWrap
llvm::xray::MetadataRecord::MetadataType::EndOfBuffer
@ EndOfBuffer
A
* A
Definition: README_ALTIVEC.txt:89
uint32_t
llvm::xray::CustomEventRecordV5::delta
int32_t delta() const
Definition: FDRRecords.h:252
S
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
Definition: README.txt:210
llvm::xray::RecordInitializer::RecordInitializer
RecordInitializer(DataExtractor &DE, uint64_t &OP, uint16_t V)
Definition: FDRRecords.h:426
llvm::xray::Record::RecordKind::RK_Metadata_NewCPUId
@ RK_Metadata_NewCPUId
llvm::xray::FunctionRecord::FunctionRecord
FunctionRecord()
Definition: FDRRecords.h:381
llvm::xray::EndBufferRecord::EndBufferRecord
EndBufferRecord()
Definition: FDRRecords.h:361
llvm::xray::BufferExtents::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:128
llvm::xray::MetadataRecord::MetadataType::BufferExtents
@ BufferExtents
llvm::xray::PIDRecord::PIDRecord
PIDRecord()
Definition: FDRRecords.h:318
llvm::xray::Record::Record
Record(RecordKind T)
Definition: FDRRecords.h:60
std
Definition: BitVector.h:838
uint16_t
llvm::xray::CallArgRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:308
llvm::xray::WallclockRecord::seconds
uint64_t seconds() const
Definition: FDRRecords.h:148
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
llvm::xray::Record::RecordKind::RK_Metadata_TSCWrap
@ RK_Metadata_TSCWrap
Casting.h
DataExtractor.h
llvm::xray::BufferExtents::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:18
llvm::xray::Record::RecordKind::RK_Metadata_CustomEventV5
@ RK_Metadata_CustomEventV5
llvm::xray::CustomEventRecordV5::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:257
llvm::xray::NewCPUIDRecord::cpuid
uint16_t cpuid() const
Definition: FDRRecords.h:173
llvm::xray::MetadataRecord::~MetadataRecord
virtual ~MetadataRecord()=default
llvm::DataExtractor
Definition: DataExtractor.h:41
llvm::xray::CustomEventRecord
Definition: FDRRecords.h:206
llvm::xray::CustomEventRecordV5::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:28
N
#define N
llvm::xray::NewBufferRecord::classof
static bool classof(const Record *R)
Definition: FDRRecords.h:354
llvm::xray::CustomEventRecord::CustomEventRecord
CustomEventRecord(uint64_t S, uint64_t T, uint16_t C, std::string D)
Definition: FDRRecords.h:218
llvm::xray::FunctionRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:27
llvm::xray::CustomEventRecordV5
Definition: FDRRecords.h:235
llvm::xray::Record
Definition: FDRRecords.h:31
llvm::xray::Record::RecordKind::RK_Metadata_CallArg
@ RK_Metadata_CallArg
llvm::xray::Record::apply
virtual Error apply(RecordVisitor &V)=0
llvm::xray::WallclockRecord::nanos
uint32_t nanos() const
Definition: FDRRecords.h:149
llvm::xray::FunctionRecord::functionId
int32_t functionId() const
Definition: FDRRecords.h:389
llvm::xray::TypedEventRecord::data
StringRef data() const
Definition: FDRRecords.h:282
llvm::xray::NewBufferRecord::tid
int32_t tid() const
Definition: FDRRecords.h:350
llvm::xray::TypedEventRecord::delta
int32_t delta() const
Definition: FDRRecords.h:280
llvm::xray::EndBufferRecord::apply
Error apply(RecordVisitor &V) override
Definition: FDRRecords.cpp:26
llvm::xray::MetadataRecord::kMetadataBodySize
static constexpr int kMetadataBodySize
Definition: FDRRecords.h:88
XRayRecord.h
llvm::xray::MetadataRecord::MetadataType::Unknown
@ Unknown