diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2022-12-08 10:53:17 -0500 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2022-12-14 13:12:35 -0500 |
commit | c16a58b36caebbc34dfa0f788a019d041e5484df (patch) | |
tree | f414679a49d47918a19469a1b1d23d5c95f24185 /llvm/lib/CodeGen/XRayInstrumentation.cpp | |
parent | 547e40a91b1e8e92add955a95a286999107c9196 (diff) | |
download | llvm-c16a58b36caebbc34dfa0f788a019d041e5484df.zip llvm-c16a58b36caebbc34dfa0f788a019d041e5484df.tar.gz llvm-c16a58b36caebbc34dfa0f788a019d041e5484df.tar.bz2 |
Attributes: Add function getter to parse integer string attributes
The most common case for string attributes parses them as integers. We
don't have a convenient way to do this, and as a result we have
inconsistent missing attribute and invalid attribute handling
scattered around. We also have inconsistent radix usage to
getAsInteger; some places use the default 0 and others use base 10.
Update a few of the uses, but there are quite a lot of these.
Diffstat (limited to 'llvm/lib/CodeGen/XRayInstrumentation.cpp')
-rw-r--r-- | llvm/lib/CodeGen/XRayInstrumentation.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/XRayInstrumentation.cpp b/llvm/lib/CodeGen/XRayInstrumentation.cpp index b66429d..13f45ae 100644 --- a/llvm/lib/CodeGen/XRayInstrumentation.cpp +++ b/llvm/lib/CodeGen/XRayInstrumentation.cpp @@ -151,19 +151,18 @@ bool XRayInstrumentation::runOnMachineFunction(MachineFunction &MF) { InstrAttr.getValueAsString() == "xray-never"; if (NeverInstrument && !AlwaysInstrument) return false; - auto ThresholdAttr = F.getFnAttribute("xray-instruction-threshold"); auto IgnoreLoopsAttr = F.getFnAttribute("xray-ignore-loops"); - unsigned int XRayThreshold = 0; - if (!AlwaysInstrument) { - if (!ThresholdAttr.isStringAttribute()) - return false; // XRay threshold attribute not found. - if (ThresholdAttr.getValueAsString().getAsInteger(10, XRayThreshold)) - return false; // Invalid value for threshold. + uint64_t XRayThreshold = 0; + if (!AlwaysInstrument) { bool IgnoreLoops = IgnoreLoopsAttr.isValid(); + XRayThreshold = F.getFnAttributeAsParsedInteger( + "xray-instruction-threshold", std::numeric_limits<uint64_t>::max()); + if (XRayThreshold == std::numeric_limits<uint64_t>::max()) + return false; // Count the number of MachineInstr`s in MachineFunction - int64_t MICount = 0; + uint64_t MICount = 0; for (const auto &MBB : MF) MICount += MBB.size(); |