[llvm-branch-commits] [llvm] [llvm-profgen][NFC] Factor out parseAddress (PR #191594)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Apr 10 21:33:01 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-pgo
Author: Amir Ayupov (aaupov)
<details>
<summary>Changes</summary>
Replace `StringRef::getAsInteger(16)` calls with explicit `parseAddress` to
make it easier to support buildid-prefixed addresses in a follow-up (#<!-- -->190863).
---
Full diff: https://github.com/llvm/llvm-project/pull/191594.diff
1 Files Affected:
- (modified) llvm/tools/llvm-profgen/PerfReader.cpp (+12-5)
``````````diff
diff --git a/llvm/tools/llvm-profgen/PerfReader.cpp b/llvm/tools/llvm-profgen/PerfReader.cpp
index bbfde1256f2cc..0d90a77fca185 100644
--- a/llvm/tools/llvm-profgen/PerfReader.cpp
+++ b/llvm/tools/llvm-profgen/PerfReader.cpp
@@ -656,6 +656,13 @@ void HybridPerfReader::unwindSamples() {
"frame to match.");
}
+/// Parse a hex address from \p Str.
+static bool parseAddress(StringRef Str, uint64_t &Addr, bool HasPrefix) {
+ if (Str.consume_front("0x") != HasPrefix)
+ return false;
+ return Str.getAsInteger(16, Addr);
+}
+
bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
SmallVectorImpl<LBREntry> &LBRStack) {
// The raw format of LBR stack is like:
@@ -674,7 +681,7 @@ bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
size_t Index = 0;
uint64_t LeadingAddr;
if (!Records.empty() && !Records[0].contains('/')) {
- if (Records[0].getAsInteger(16, LeadingAddr)) {
+ if (parseAddress(Records[0], LeadingAddr, false)) {
WarnInvalidLBR(TraceIt);
TraceIt.advance();
return false;
@@ -696,8 +703,8 @@ bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
uint64_t Dst;
// Stop at broken LBR records.
- if (Addresses.size() < 2 || Addresses[0].substr(2).getAsInteger(16, Src) ||
- Addresses[1].substr(2).getAsInteger(16, Dst)) {
+ if (Addresses.size() < 2 || parseAddress(Addresses[0], Src, true) ||
+ parseAddress(Addresses[1], Dst, true)) {
WarnInvalidLBR(TraceIt);
break;
}
@@ -733,7 +740,7 @@ bool PerfScriptReader::extractCallstack(TraceStream &TraceIt,
while (!TraceIt.isAtEoF() && !TraceIt.getCurrentLine().starts_with(" 0x")) {
StringRef FrameStr = TraceIt.getCurrentLine().ltrim();
uint64_t FrameAddr = 0;
- if (FrameStr.getAsInteger(16, FrameAddr)) {
+ if (parseAddress(FrameStr, FrameAddr, false)) {
// We might parse a non-perf sample line like empty line and comments,
// skip it
TraceIt.advance();
@@ -1201,7 +1208,7 @@ PerfContent PerfScriptReader::checkPerfScriptType(StringRef FileName) {
// Detect sample with call stack
int32_t Count = 0;
while (!TraceIt.isAtEoF() &&
- !TraceIt.getCurrentLine().ltrim().getAsInteger(16, FrameAddr)) {
+ !parseAddress(TraceIt.getCurrentLine().ltrim(), FrameAddr, false)) {
Count++;
TraceIt.advance();
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/191594
More information about the llvm-branch-commits
mailing list