Commit 1e66dcff authored by Leo Yan's avatar Leo Yan Committed by Namhyung Kim
Browse files

perf script: Add not taken event for branch stack



The branch stack has an existed field for printing mispredict, extend
the field for printing events and add support not-taken event.

Reviewed-by: default avatarIan Rogers <irogers@google.com>
Reviewed-by: default avatarJames Clark <james.clark@linaro.org>
Signed-off-by: default avatarLeo Yan <leo.yan@arm.com>
Link: https://lore.kernel.org/r/20250304111240.3378214-6-leo.yan@arm.com


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent 4caa9710
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -935,19 +935,25 @@ static int perf_sample__fprintf_start(struct perf_script *script,
	return printed;
}

static inline char
mispred_str(struct branch_entry *br)
static inline size_t
bstack_event_str(struct branch_entry *br, char *buf, size_t sz)
{
	if (!(br->flags.mispred  || br->flags.predicted))
		return '-';
	if (!(br->flags.mispred || br->flags.predicted || br->flags.not_taken))
		return snprintf(buf, sz, "-");

	return br->flags.predicted ? 'P' : 'M';
	return snprintf(buf, sz, "%s%s",
			br->flags.predicted ? "P" : "M",
			br->flags.not_taken ? "N" : "");
}

static int print_bstack_flags(FILE *fp, struct branch_entry *br)
{
	return fprintf(fp, "/%c/%c/%c/%d/%s/%s ",
		       mispred_str(br),
	char events[16] = { 0 };
	size_t pos;

	pos = bstack_event_str(br, events, sizeof(events));
	return fprintf(fp, "/%s/%c/%c/%d/%s/%s ",
		       pos < 0 ? "-" : events,
		       br->flags.in_tx ? 'X' : '-',
		       br->flags.abort ? 'A' : '-',
		       br->flags.cycles,
+2 −1
Original line number Diff line number Diff line
@@ -25,7 +25,8 @@ struct branch_flags {
			u64 spec:2;
			u64 new_type:4;
			u64 priv:3;
			u64 reserved:31;
			u64 not_taken:1;
			u64 reserved:30;
		};
	};
};