perf arm-spe: Set sample flags with supplement info

Based on the supplement information in the record, this commit sets the
sample flags for conditional branch, function call, return.  It also
sets events in flags, such as mispredict, not taken, and in transaction.

Reviewed-by: Ian Rogers <irogers@google.com>
Reviewed-by: James Clark <james.clark@linaro.org>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Link: https://lore.kernel.org/r/20250304111240.3378214-11-leo.yan@arm.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
Leo Yan 2025-03-04 11:12:38 +00:00 committed by Namhyung Kim
parent 5c1b158396
commit 4a53a67e0e

View File

@ -484,6 +484,26 @@ static void arm_spe__sample_flags(struct arm_spe_queue *speq)
if (record->type & ARM_SPE_BRANCH_MISS)
speq->flags |= PERF_IP_FLAG_BRANCH_MISS;
if (record->type & ARM_SPE_BRANCH_NOT_TAKEN)
speq->flags |= PERF_IP_FLAG_NOT_TAKEN;
if (record->type & ARM_SPE_IN_TXN)
speq->flags |= PERF_IP_FLAG_IN_TX;
if (record->op & ARM_SPE_OP_BR_COND)
speq->flags |= PERF_IP_FLAG_CONDITIONAL;
if (record->op & ARM_SPE_OP_BR_CR_BL)
speq->flags |= PERF_IP_FLAG_CALL;
else if (record->op & ARM_SPE_OP_BR_CR_RET)
speq->flags |= PERF_IP_FLAG_RETURN;
/*
* Indirect branch instruction without link (e.g. BR),
* take it as a function return.
*/
else if (record->op & ARM_SPE_OP_BR_INDIRECT)
speq->flags |= PERF_IP_FLAG_RETURN;
}
}