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)