• WANG Rui's avatar
    perf annotate: Fix instruction association and parsing for LoongArch · 4ca0d340
    WANG Rui authored
    In the perf annotate view for LoongArch, there is no arrowed line
    pointing to the target from the branch instruction. This issue is
    caused by incorrect instruction association and parsing.
    
    $ perf record alloc-6276705c94ad1398 # rust benchmark
    $ perf report
    
      0.28 │       ori        $a1, $zero, 0x63
           │       move       $a2, $zero
     10.55 │       addi.d     $a3, $a2, 1(0x1)
           │       sltu       $a4, $a3, $s7
      9.53 │       masknez    $a4, $s7, $a4
           │       sub.d      $a3, $a3, $a4
     12.12 │       st.d       $a1, $fp, 24(0x18)
           │       st.d       $a3, $fp, 16(0x10)
     16.29 │       slli.d     $a2, $a2, 0x2
           │       ldx.w      $a2, $s8, $a2
     12.77 │       st.w       $a2, $sp, 724(0x2d4)
           │       st.w       $s0, $sp, 720(0x2d0)
      7.03 │       addi.d     $a2, $sp, 720(0x2d0)
           │       addi.d     $a1, $a1, -1(0xfff)
     12.03 │       move       $a2, $a3
           │     → bne        $a1, $s3, -52(0x3ffcc)  # 82ce8 <test::bench::Bencher::iter+0x3f4>
      2.50 │       addi.d     $a0, $a0, 1(0x1)
    
    This patch fixes instruction association issues, such as associating
    branch instructions with jump_ops instead of call_ops, and corrects
    false instruction matches. It also implements branch instruction parsing
    specifically for LoongArch. With this patch, we will be able to see the
    arrowed line.
    
      0.79 │3ec:   ori        $a1, $zero, 0x63
           │       move       $a2, $zero
     10.32 │3f4:┌─→addi.d     $a3, $a2, 1(0x1)
           │    │  sltu       $a4, $a3, $s7
     10.44 │    │  masknez    $a4, $s7, $a4
           │    │  sub.d      $a3, $a3, $a4
     14.17 │    │  st.d       $a1, $fp, 24(0x18)
           │    │  st.d       $a3, $fp, 16(0x10)
     13.15 │    │  slli.d     $a2, $a2, 0x2
           │    │  ldx.w      $a2, $s8, $a2
     11.00 │    │  st.w       $a2, $sp, 724(0x2d4)
           │    │  st.w       $s0, $sp, 720(0x2d0)
      8.00 │    │  addi.d     $a2, $sp, 720(0x2d0)
           │    │  addi.d     $a1, $a1, -1(0xfff)
     11.99 │    │  move       $a2, $a3
           │    └──bne        $a1, $s3, 3f4
      3.17 │       addi.d     $a0, $a0, 1(0x1)
    Signed-off-by: default avatarWANG Rui <wangrui@loongson.cn>
    Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: loongarch@lists.linux.dev
    Cc: loongson-kernel@lists.loongnix.cn
    Cc: Huacai Chen <chenhuacai@loongson.cn>
    Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: WANG Xuerui <kernel@xen0n.name>
    Link: https://lore.kernel.org/r/20230620132025.105563-1-wangrui@loongson.cnSigned-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    4ca0d340
instructions.c 3.16 KB