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