LLVM: include/llvm/IR/PseudoProbe.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_IR_PSEUDOPROBE_H
14#define LLVM_IR_PSEUDOPROBE_H
15
17#include
18#include
19#include
20#include
21
22namespace llvm {
23
25
27
29
31
37
38
40 std::numeric_limits<uint64_t>::max();
41
43public:
44
45
46
47
48
49
50
51
52
53
54
55
58 std::optional<uint32_t> DwarfBaseDiscriminator) {
59 assert(Index <= 0xFFFF && "Probe index too big to encode, exceeding 2^16");
60 assert(Type <= 0x3 && "Probe type too big to encode, exceeding 3");
62 assert(Factor <= 100 &&
63 "Probe distribution factor too big to encode, exceeding 100");
64 uint32_t V = (Index << 3) | (Factor << 19) | (Type << 26) | 0x7;
65
66
67
68
69 if (Index <= 0x1FFF && DwarfBaseDiscriminator &&
70 *DwarfBaseDiscriminator <= 0x7)
71 V |= (1 << 28) | (*DwarfBaseDiscriminator << 16);
72 return V;
73 }
74
77 return (Value >> 3) & 0x1FFF;
78 return (Value >> 3) & 0xFFFF;
79 }
80
83 return (Value >> 16) & 0x7;
84 return std::nullopt;
85 }
86
88 return Value & 0x10000000;
89 }
90
92 return (Value >> 26) & 0x3;
93 }
94
96 return (Value >> 29) & 0x7;
97 }
98
100 return (Value >> 19) & 0x7F;
101 }
102
103
105};
106
110
111public:
113 : FunctionGUID(GUID), FunctionHash(Hash) {}
116};
117
128
132
136
138
140}
141
142#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
PseudoProbeDescriptor(uint64_t GUID, uint64_t Hash)
Definition PseudoProbe.h:112
uint64_t getFunctionGUID() const
Definition PseudoProbe.h:114
uint64_t getFunctionHash() const
Definition PseudoProbe.h:115
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
This is an optimization pass for GlobalISel generic memory operations.
PseudoProbeType
Definition PseudoProbe.h:30
@ IndirectCall
Definition PseudoProbe.h:30
@ Block
Definition PseudoProbe.h:30
@ DirectCall
Definition PseudoProbe.h:30
static bool isSentinelProbe(uint32_t Flags)
Definition PseudoProbe.h:129
static constexpr uint64_t PseudoProbeFullDistributionFactor
Definition PseudoProbe.h:39
LLVM_ABI void setProbeDistributionFactor(Instruction &Inst, float Factor)
LLVM_ABI std::optional< PseudoProbe > extractProbe(const Instruction &Inst)
static bool hasDiscriminator(uint32_t Flags)
Definition PseudoProbe.h:133
PseudoProbeReservedId
Definition PseudoProbe.h:28
@ Last
Definition PseudoProbe.h:28
PseudoProbeAttributes
Definition PseudoProbe.h:32
@ Sentinel
Definition PseudoProbe.h:34
@ HasDiscriminator
Definition PseudoProbe.h:35
constexpr const char * PseudoProbeDescMetadataName
Definition PseudoProbe.h:26
Definition PseudoProbe.h:42
static uint32_t extractProbeFactor(uint32_t Value)
Definition PseudoProbe.h:99
static constexpr uint8_t FullDistributionFactor
Definition PseudoProbe.h:104
static uint32_t extractProbeIndex(uint32_t Value)
Definition PseudoProbe.h:75
static uint32_t packProbeData(uint32_t Index, uint32_t Type, uint32_t Flags, uint32_t Factor, std::optional< uint32_t > DwarfBaseDiscriminator)
Definition PseudoProbe.h:57
static bool isDwarfBaseDiscriminatorEncoded(uint32_t Value)
Definition PseudoProbe.h:87
static uint32_t extractProbeAttributes(uint32_t Value)
Definition PseudoProbe.h:95
static std::optional< uint32_t > extractDwarfBaseDiscriminator(uint32_t Value)
Definition PseudoProbe.h:81
static uint32_t extractProbeType(uint32_t Value)
Definition PseudoProbe.h:91
Definition PseudoProbe.h:118
uint32_t Attr
Definition PseudoProbe.h:121
uint32_t Id
Definition PseudoProbe.h:119
uint32_t Type
Definition PseudoProbe.h:120
float Factor
Definition PseudoProbe.h:126
uint32_t Discriminator
Definition PseudoProbe.h:122