LLVM: lib/IR/PseudoProbe.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

19

20using namespace llvm;

21

22static std::optional

24 if (DIL) {

25 auto Discriminator = DIL->getDiscriminator();

28 Probe.Id =

38 return Probe;

39 }

40 }

41 return std::nullopt;

42}

43

44static std::optional

47 "Only call instructions should have pseudo probe encodes as their "

48 "Dwarf discriminators");

51 return std::nullopt;

52}

53

57 Probe.Id = II->getIndex()->getZExtValue();

59 Probe.Attr = II->getAttributes()->getZExtValue();

60 Probe.Factor = II->getFactor()->getZExtValue() /

65 return Probe;

66 }

67

70

71 return std::nullopt;

72}

73

75 assert(Factor >= 0 && Factor <= 1 &&

76 "Distribution factor must be in [0, 1.0]");

80 if (Factor < 1)

81 IntFactor *= Factor;

82 auto OrigFactor = II->getFactor()->getZExtValue();

83 if (IntFactor != OrigFactor)

84 II->replaceUsesOfWith(II->getFactor(), Builder.getInt64(IntFactor));

88 auto Discriminator = DIL->getDiscriminator();

90 auto Index =

95 Discriminator);

96 auto DwarfBaseDiscriminator =

98 Discriminator);

99

102 if (Factor < 1)

103 IntFactor *= Factor;

105 Index, Type, Attr, IntFactor, DwarfBaseDiscriminator);

108 }

109 }

110 }

111}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

uint64_t IntrinsicInst * II

static std::optional< PseudoProbe > extractProbeFromDiscriminator(const DILocation *DIL)

Definition PseudoProbe.cpp:23

static bool isPseudoProbeDiscriminator(unsigned Discriminator)

const DILocation * cloneWithDiscriminator(unsigned Discriminator) const

Returns a new DILocation with updated Discriminator.

This provides a uniform API for creating instructions and inserting them into a basic block: either a...

const DebugLoc & getDebugLoc() const

Return the debug location for this node as a DebugLoc.

void setDebugLoc(DebugLoc Loc)

Set the debug location information for this instruction.

The instances of the Type class are immutable: once they are created, they are never changed.

This is an optimization pass for GlobalISel generic memory operations.

static constexpr uint64_t PseudoProbeFullDistributionFactor

decltype(auto) dyn_cast(const From &Val)

dyn_cast - Return the argument parameter cast to the specified type.

LLVM_ABI void setProbeDistributionFactor(Instruction &Inst, float Factor)

Definition PseudoProbe.cpp:74

LLVM_ABI std::optional< PseudoProbe > extractProbe(const Instruction &Inst)

Definition PseudoProbe.cpp:54

bool isa(const From &Val)

isa - Return true if the parameter to the template is an instance of one of the template type argu...

static uint32_t extractProbeFactor(uint32_t Value)

static constexpr uint8_t FullDistributionFactor

static uint32_t extractProbeIndex(uint32_t Value)

static uint32_t packProbeData(uint32_t Index, uint32_t Type, uint32_t Flags, uint32_t Factor, std::optional< uint32_t > DwarfBaseDiscriminator)

static uint32_t extractProbeAttributes(uint32_t Value)

static std::optional< uint32_t > extractDwarfBaseDiscriminator(uint32_t Value)

static uint32_t extractProbeType(uint32_t Value)