[llvm-branch-commits] [llvm] 1b1af5a - Revert "[llvm-profgen] Support [buildid:]0xaddr format in perfscript input (#…"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun May 3 13:45:30 PDT 2026
Author: Thurston Dang
Date: 2026-05-03T13:45:25-07:00
New Revision: 1b1af5addfd3b1d4dda453a6ffde411975268559
URL: https://github.com/llvm/llvm-project/commit/1b1af5addfd3b1d4dda453a6ffde411975268559
DIFF: https://github.com/llvm/llvm-project/commit/1b1af5addfd3b1d4dda453a6ffde411975268559.diff
LOG: Revert "[llvm-profgen] Support [buildid:]0xaddr format in perfscript input (#…"
This reverts commit 8f46a9db2fd043c790a2eb579196c71778884053.
Added:
Modified:
llvm/tools/llvm-profgen/PerfReader.cpp
Removed:
llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.aggperfscript
llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.perfscript
llvm/test/tools/llvm-profgen/filter-build-id.test
################################################################################
diff --git a/llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.aggperfscript b/llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.aggperfscript
deleted file mode 100644
index 9dbd2725c8e4d..0000000000000
--- a/llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.aggperfscript
+++ /dev/null
@@ -1,11 +0,0 @@
-2
- aabb1122:4005dc
- aabb1122:400634
- aabb1122:400684
- 7f68c5788793
- aabb1122:0x4005c8/aabb1122:0x4005dc aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005c8/aabb1122:0x4005dc
-2
- aabb1122:4005b0
- aabb1122:400684
- 7f68c5788793
- aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005c8/aabb1122:0x4005dc aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0
diff --git a/llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.perfscript b/llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.perfscript
deleted file mode 100644
index fdc5c721b91a6..0000000000000
--- a/llvm/test/tools/llvm-profgen/Inputs/buildid-cs-noprobe.perfscript
+++ /dev/null
@@ -1,9 +0,0 @@
- aabb1122:4005dc
- aabb1122:400634
- aabb1122:400684
- 7f68c5788793
- aabb1122:0x4005c8/aabb1122:0x4005dc aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005c8/aabb1122:0x4005dc
- aabb1122:4005b0
- aabb1122:400684
- 7f68c5788793
- aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005c8/aabb1122:0x4005dc aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0 aabb1122:0x400645/aabb1122:0x4005ff aabb1122:0x400637/aabb1122:0x400645 aabb1122:0x4005e9/aabb1122:0x400634 aabb1122:0x4005d7/aabb1122:0x4005e5 aabb1122:0x40062f/aabb1122:0x4005b0
diff --git a/llvm/test/tools/llvm-profgen/filter-build-id.test b/llvm/test/tools/llvm-profgen/filter-build-id.test
deleted file mode 100644
index 498d3b8f7ba4d..0000000000000
--- a/llvm/test/tools/llvm-profgen/filter-build-id.test
+++ /dev/null
@@ -1,57 +0,0 @@
-; REQUIRES: x86_64-linux
-; Test that [buildid:]0xaddr format is correctly parsed in hybrid perfscript
-; input. Both callstack frames and LBR entries may carry buildid prefixes.
-
-;; Test 1: Hybrid perfscript with buildid prefix on callstack frames and
-;; LBR entries, using --filter-build-id to match "aabb1122".
-; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/buildid-cs-noprobe.aggperfscript --binary=%S/Inputs/noinline-cs-noprobe.perfbin --output=%t --skip-symbolization --profile-summary-cold-count=0 --filter-build-id=aabb1122
-; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-HYBRID
-
-; CHECK-HYBRID: [foo]
-; CHECK-HYBRID-NEXT: 3
-; CHECK-HYBRID-NEXT: 5ff-62f:6
-; CHECK-HYBRID-NEXT: 634-637:6
-; CHECK-HYBRID-NEXT: 645-645:6
-; CHECK-HYBRID-NEXT: 3
-; CHECK-HYBRID-NEXT: 62f->5b0:6
-; CHECK-HYBRID-NEXT: 637->645:6
-; CHECK-HYBRID-NEXT: 645->5ff:6
-; CHECK-HYBRID-NEXT: [foo:3 @ bar]
-; CHECK-HYBRID-NEXT: 4
-; CHECK-HYBRID-NEXT: 5b0-5c8:2
-; CHECK-HYBRID-NEXT: 5b0-5d7:4
-; CHECK-HYBRID-NEXT: 5dc-5e9:2
-; CHECK-HYBRID-NEXT: 5e5-5e9:4
-; CHECK-HYBRID-NEXT: 3
-; CHECK-HYBRID-NEXT: 5c8->5dc:4
-; CHECK-HYBRID-NEXT: 5d7->5e5:4
-; CHECK-HYBRID-NEXT: 5e9->634:6
-
-;; Test 2: Non-pre-aggregated perfscript with buildid prefix (no leading count).
-; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/buildid-cs-noprobe.perfscript --binary=%S/Inputs/noinline-cs-noprobe.perfbin --output=%t2 --skip-symbolization --profile-summary-cold-count=0 --filter-build-id=aabb1122
-; RUN: FileCheck %s --input-file %t2 --check-prefix=CHECK-NOAGG
-
-; CHECK-NOAGG: [foo]
-; CHECK-NOAGG-NEXT: 3
-; CHECK-NOAGG-NEXT: 5ff-62f:3
-; CHECK-NOAGG-NEXT: 634-637:3
-; CHECK-NOAGG-NEXT: 645-645:3
-; CHECK-NOAGG-NEXT: 3
-; CHECK-NOAGG-NEXT: 62f->5b0:3
-; CHECK-NOAGG-NEXT: 637->645:3
-; CHECK-NOAGG-NEXT: 645->5ff:3
-; CHECK-NOAGG-NEXT: [foo:3 @ bar]
-; CHECK-NOAGG-NEXT: 4
-; CHECK-NOAGG-NEXT: 5b0-5c8:1
-; CHECK-NOAGG-NEXT: 5b0-5d7:2
-; CHECK-NOAGG-NEXT: 5dc-5e9:1
-; CHECK-NOAGG-NEXT: 5e5-5e9:2
-; CHECK-NOAGG-NEXT: 3
-; CHECK-NOAGG-NEXT: 5c8->5dc:2
-; CHECK-NOAGG-NEXT: 5d7->5e5:2
-; CHECK-NOAGG-NEXT: 5e9->634:3
-
-;; Test 3: With non-matching filter, callstack frames are filtered out,
-;; resulting in no samples.
-; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/buildid-cs-noprobe.aggperfscript --binary=%S/Inputs/noinline-cs-noprobe.perfbin --output=%t3 --skip-symbolization --filter-build-id=ccdd3344 2>&1 | FileCheck %s --check-prefix=CHECK-NOMATCH
-; CHECK-NOMATCH: warning: No samples in perf script!
diff --git a/llvm/tools/llvm-profgen/PerfReader.cpp b/llvm/tools/llvm-profgen/PerfReader.cpp
index 75909f3083e03..d61c70e69d6e9 100644
--- a/llvm/tools/llvm-profgen/PerfReader.cpp
+++ b/llvm/tools/llvm-profgen/PerfReader.cpp
@@ -69,13 +69,6 @@ cl::opt<bool> TimeProfGen("time-profgen", cl::desc("Time llvm-profgen phases"),
static const char *TimerGroupName = "profgen";
static const char *TimerGroupDesc = "llvm-profgen";
-static cl::opt<std::string> FilterBuildID(
- "filter-build-id",
- cl::desc("Override auto-detected build ID for filtering perfscript "
- "addresses in [buildid:]addr format. When set, only addresses "
- "with a matching build ID prefix are kept."),
- cl::cat(ProfGenCategory));
-
namespace sampleprof {
void VirtualUnwinder::unwindCall(UnwindState &State) {
@@ -672,37 +665,12 @@ void HybridPerfReader::unwindSamples() {
}
/// Parse a hex address from \p Str.
-/// Parse an optional [buildid:] prefix into \p BuildID.
-static bool parseAddress(StringRef Str, uint64_t &Addr, bool HasPrefix,
- StringRef &BuildID) {
- size_t ColonPos = Str.find(':');
- if (ColonPos != StringRef::npos) {
- BuildID = Str.substr(0, ColonPos);
- Str = Str.substr(ColonPos + 1);
- }
+static bool parseAddress(StringRef Str, uint64_t &Addr, bool HasPrefix) {
if (Str.consume_front("0x") != HasPrefix)
return true;
return Str.getAsInteger(16, Addr);
}
-/// Return the build ID to use for filtering perfscript addresses.
-/// If --filter-build-id is specified, use it as an override (with a warning
-/// if it doesn't match the binary's auto-detected build ID).
-/// Otherwise, use the auto-detected value from the binary.
-static StringRef getFilterBuildID(const ProfiledBinary *Binary) {
- StringRef BinaryBuildID = Binary->getFilterBuildID();
- if (FilterBuildID.getNumOccurrences() == 0)
- return BinaryBuildID;
- static bool Warned = false;
- if (!Warned && !BinaryBuildID.empty() && FilterBuildID != BinaryBuildID) {
- WithColor::warning() << "--filter-build-id=" << FilterBuildID
- << " does not match binary build ID " << BinaryBuildID
- << "\n";
- Warned = true;
- }
- return FilterBuildID;
-}
-
bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
SmallVectorImpl<LBREntry> &LBRStack) {
// The raw format of LBR stack is like:
@@ -720,9 +688,8 @@ bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
// Skip the leading instruction pointer.
size_t Index = 0;
uint64_t LeadingAddr;
- StringRef LeadingBuildID;
if (!Records.empty() && !Records[0].contains('/')) {
- if (parseAddress(Records[0], LeadingAddr, false, LeadingBuildID)) {
+ if (parseAddress(Records[0], LeadingAddr, false)) {
WarnInvalidLBR(TraceIt);
TraceIt.advance();
return false;
@@ -742,12 +709,10 @@ bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
Token.split(Addresses, "/");
uint64_t Src;
uint64_t Dst;
- StringRef SrcBuildID, DstBuildID;
// Stop at broken LBR records.
- if (Addresses.size() < 2 ||
- parseAddress(Addresses[0], Src, true, SrcBuildID) ||
- parseAddress(Addresses[1], Dst, true, DstBuildID)) {
+ if (Addresses.size() < 2 || parseAddress(Addresses[0], Src, true) ||
+ parseAddress(Addresses[1], Dst, true)) {
WarnInvalidLBR(TraceIt);
break;
}
@@ -755,12 +720,8 @@ bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
// Canonicalize to use preferred load address as base address.
Src = Binary->canonicalizeVirtualAddress(Src);
Dst = Binary->canonicalizeVirtualAddress(Dst);
- // Filter by build ID.
- StringRef BinaryBuildID = getFilterBuildID(Binary);
- bool SrcIsInternal =
- SrcBuildID == BinaryBuildID && Binary->addressIsCode(Src);
- bool DstIsInternal =
- DstBuildID == BinaryBuildID && Binary->addressIsCode(Dst);
+ bool SrcIsInternal = Binary->addressIsCode(Src);
+ bool DstIsInternal = Binary->addressIsCode(Dst);
if (!SrcIsInternal)
Src = ExternalAddr;
if (!DstIsInternal)
@@ -778,17 +739,16 @@ bool PerfScriptReader::extractLBRStack(TraceStream &TraceIt,
bool PerfScriptReader::extractCallstack(TraceStream &TraceIt,
SmallVectorImpl<uint64_t> &CallStack) {
// The raw format of call stack is like:
- // 4005dc # leaf frame (no buildid)
+ // 4005dc # leaf frame
// 400634
- // deadbeef:400684 # root frame (with buildid prefix)
+ // 400684 # root frame
// It's in bottom-up order with each frame in one line.
// Extract stack frames from sample
while (!TraceIt.isAtEoF() && !isLBRSample(TraceIt.getCurrentLine(), true)) {
StringRef FrameStr = TraceIt.getCurrentLine().ltrim();
uint64_t FrameAddr = 0;
- StringRef FrameBuildID;
- if (parseAddress(FrameStr, FrameAddr, false, FrameBuildID)) {
+ if (parseAddress(FrameStr, FrameAddr, false)) {
// We might parse a non-perf sample line like empty line and comments,
// skip it
TraceIt.advance();
@@ -798,9 +758,7 @@ bool PerfScriptReader::extractCallstack(TraceStream &TraceIt,
FrameAddr = Binary->canonicalizeVirtualAddress(FrameAddr);
// Currently intermixed frame from
diff erent binaries is not supported.
- bool IsExternal = FrameBuildID != getFilterBuildID(Binary) ||
- !Binary->addressIsCode(FrameAddr);
- if (IsExternal) {
+ if (!Binary->addressIsCode(FrameAddr)) {
if (CallStack.empty())
NumLeafExternalFrame++;
// Push a special value(ExternalAddr) for the external frames so that
@@ -1213,7 +1171,7 @@ void PerfScriptReader::parseAndAggregateTrace() {
// A LBR sample is like:
// 40062f 0x5c6313f/0x5c63170/P/-/-/0 0x5c630e7/0x5c63130/P/-/-/0 ...
// A heuristic for fast detection by checking whether a
-// leading " 0x" or " buildid:0x" and the '/' exist.
+// leading " 0x" and the '/' exist.
bool PerfScriptReader::isLBRSample(StringRef Line, bool CheckLineStart) {
// Skip the leading instruction pointer
SmallVector<StringRef, 32> Records;
@@ -1222,8 +1180,7 @@ bool PerfScriptReader::isLBRSample(StringRef Line, bool CheckLineStart) {
Line.split(Records, " ", 2, CheckLineStart);
if (Records.size() < 2)
return false;
- if ((Records[1].starts_with("0x") || Records[1].contains(":0x")) &&
- Records[1].contains('/'))
+ if (Records[1].starts_with("0x") && Records[1].contains('/'))
return true;
return false;
}
@@ -1261,10 +1218,8 @@ PerfContent PerfScriptReader::checkPerfScriptType(StringRef FileName) {
// Detect sample with call stack
int32_t Count = 0;
- StringRef FrameBuildId;
while (!TraceIt.isAtEoF() &&
- !parseAddress(TraceIt.getCurrentLine().ltrim(), FrameAddr, false,
- FrameBuildId)) {
+ !parseAddress(TraceIt.getCurrentLine().ltrim(), FrameAddr, false)) {
Count++;
TraceIt.advance();
}
More information about the llvm-branch-commits
mailing list