]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf annotate: Skip annotating data types to lea instructions
authorZecheng Li <zecheng@google.com>
Mon, 13 Oct 2025 18:15:58 +0000 (18:15 +0000)
committerNamhyung Kim <namhyung@kernel.org>
Tue, 21 Oct 2025 13:02:49 +0000 (06:02 -0700)
Introduce a helper function is_address_gen_insn() to check
arch-dependent address generation instructions like lea in x86. Remove
type annotation on these instructions since they are not accessing
memory. It should be counted as `no_mem_ops`.

Signed-off-by: Zecheng Li <zecheng@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/annotate.c

index 859e802a1e5ea05066b9364bd17df044c8fdb346..cc7764455faf66ba803aa3754b853bf4f6de2fe8 100644 (file)
@@ -2698,6 +2698,20 @@ static bool is_stack_canary(struct arch *arch, struct annotated_op_loc *loc)
        return false;
 }
 
+/**
+ * Returns true if the instruction has a memory operand without
+ * performing a load/store
+ */
+static bool is_address_gen_insn(struct arch *arch, struct disasm_line *dl)
+{
+       if (arch__is(arch, "x86")) {
+               if (!strncmp(dl->ins.name, "lea", 3))
+                       return true;
+       }
+
+       return false;
+}
+
 static struct disasm_line *
 annotation__prev_asm_line(struct annotation *notes, struct disasm_line *curr)
 {
@@ -2806,6 +2820,12 @@ __hist_entry__get_data_type(struct hist_entry *he, struct arch *arch,
                return &stackop_type;
        }
 
+       if (is_address_gen_insn(arch, dl)) {
+               istat->bad++;
+               ann_data_stat.no_mem_ops++;
+               return NO_TYPE;
+       }
+
        for_each_insn_op_loc(&loc, i, op_loc) {
                struct data_loc_info dloc = {
                        .arch = arch,