LLVM 20.0.0git
BlockIndexer.h
Go to the documentation of this file.
1//===- BlockIndexer.h - FDR Block Indexing Visitor ------------------------===//
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// An implementation of the RecordVisitor which generates a mapping between a
10// thread and a range of records representing a block.
11//
12//===----------------------------------------------------------------------===//
13#ifndef LLVM_XRAY_BLOCKINDEXER_H
14#define LLVM_XRAY_BLOCKINDEXER_H
15
16#include "llvm/ADT/DenseMap.h"
18#include <cstdint>
19#include <vector>
20
21namespace llvm {
22namespace xray {
23
24// The BlockIndexer will gather all related records associated with a
25// process+thread and group them by 'Block'.
27public:
28 struct Block {
30 int32_t ThreadID;
32 std::vector<Record *> Records;
33 };
34
35 // This maps the process + thread combination to a sequence of blocks.
36 using Index = DenseMap<std::pair<uint64_t, int32_t>, std::vector<Block>>;
37
38private:
39 Index &Indices;
40
41 Block CurrentBlock{0, 0, nullptr, {}};
42
43public:
44 explicit BlockIndexer(Index &I) : Indices(I) {}
45
46 Error visit(BufferExtents &) override;
47 Error visit(WallclockRecord &) override;
48 Error visit(NewCPUIDRecord &) override;
49 Error visit(TSCWrapRecord &) override;
50 Error visit(CustomEventRecord &) override;
51 Error visit(CallArgRecord &) override;
52 Error visit(PIDRecord &) override;
53 Error visit(NewBufferRecord &) override;
54 Error visit(EndBufferRecord &) override;
55 Error visit(FunctionRecord &) override;
57 Error visit(TypedEventRecord &) override;
58
59 /// The flush() function will clear out the current state of the visitor, to
60 /// allow for explicitly flushing a block's records to the currently
61 /// recognized thread and process combination.
62 Error flush();
63};
64
65} // namespace xray
66} // namespace llvm
67
68#endif // LLVM_XRAY_BLOCKINDEXER_H
This file defines the DenseMap class.
#define I(x, y, z)
Definition: MD5.cpp:58
Lightweight error class with error context and mandatory checking.
Definition: Error.h:160
Error visit(BufferExtents &) override
Error flush()
The flush() function will clear out the current state of the visitor, to allow for explicitly flushin...
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
std::vector< Record * > Records
Definition: BlockIndexer.h:32
WallclockRecord * WallclockTime
Definition: BlockIndexer.h:31