[llvm-branch-commits] [llvm] Add initial support for SPE brstack format (PR #129231)
Ádám Kallai via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Mar 11 06:28:29 PDT 2025
================
@@ -88,6 +89,45 @@ struct PerfSpeEventsTestHelper : public testing::Test {
return SampleSize == DA.BasicSamples.size();
}
+
+ /// Compare LBREntries
+ bool checkLBREntry(const LBREntry &Lhs, const LBREntry &Rhs) {
+ return Lhs.From == Rhs.From && Lhs.To == Rhs.To &&
+ Lhs.Mispred == Rhs.Mispred;
+ }
+
+ /// Parse and check SPE brstack as LBR
+ void parseAndCheckBrstackEvents(
+ uint64_t PID,
+ const std::vector<SmallVector<LBREntry, 2>> &ExpectedSamples) {
+ int NumSamples = 0;
+
+ DataAggregator DA("<pseudo input>");
+ DA.ParsingBuf = opts::ReadPerfEvents;
+ DA.BC = BC.get();
+ DataAggregator::MMapInfo MMap;
+ DA.BinaryMMapInfo.insert(std::make_pair(PID, MMap));
+
+ // Process buffer.
+ while (DA.hasData()) {
----------------
kaadam wrote:
The main question is what we should test, 1) only the parser, 2) or more?
The `parseBranchEvents` function does a bit more thing than just parsing the output of the `perf script`. In `parseLBREntry` function, it is also recording/verifying the parsed traces, and determine the 'From/To' BinaryFunctions based on the sampled addresses. If we have a valid trace, the from/to pairs will be appended to `BranchLBRs` container. In our cases we use a dummy ELF file, so the BranchLBRs is empty.
1) If we would like to test only the parsing mechanism, we have to extract the proper logic for the testing.
2) If we would like to test the all complex logic, it needs to use a bit more complex input.
https://github.com/llvm/llvm-project/pull/129231
More information about the llvm-branch-commits
mailing list