| 2c9db747 | 18-Jul-2024 | Athira Rajeev <atrajeev@linux.vnet.ibm.com> | perf annotate: Set instruction name to be used with insn-stat when using raw instruction
 Since the "ins.name" is not set while using raw instruction,
 'perf annotate' with insn-stat gives wrong data:
 perf annotate: Set instruction name to be used with insn-stat when using raw instruction
 Since the "ins.name" is not set while using raw instruction,
 'perf annotate' with insn-stat gives wrong data:
 
 Result from "./perf annotate --data-type --insn-stat":
 
 Annotate Instruction stats
 total 615, ok 419 (68.1%), bad 196 (31.9%)
 
 Name      :  Good   Bad
 -----------------------------------------------------------
 :   419   196
 
 This patch sets "dl->ins.name" in arch specific function
 "check_ppc_insn" while initialising "struct disasm_line".
 
 Also update "ins_find" function to pass "struct disasm_line" as a
 parameter so as to set its name field in arch specific call.
 
 With the patch changes:
 
 Annotate Instruction stats
 total 609, ok 446 (73.2%), bad 163 (26.8%)
 
 Name/opcode         :  Good   Bad
 -----------------------------------------------------------
 58                  :   323    80
 32                  :    49    43
 34                  :    33    11
 OP_31_XOP_LDX       :     8    20
 40                  :    23     0
 OP_31_XOP_LWARX     :     5     1
 OP_31_XOP_LWZX      :     2     3
 OP_31_XOP_LDARX     :     3     0
 33                  :     0     2
 OP_31_XOP_LBZX      :     0     1
 OP_31_XOP_LWAX      :     0     1
 OP_31_XOP_LHZX      :     0     1
 
 Reviewed-by: Kajol Jain <kjain@linux.ibm.com>
 Reviewed-by: Namhyung Kim <namhyung@kernel.org>
 Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
 Tested-by: Kajol Jain <kjain@linux.ibm.com>
 Cc: Adrian Hunter <adrian.hunter@intel.com>
 Cc: Akanksha J N <akanksha@linux.ibm.com>
 Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
 Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
 Cc: Hari Bathini <hbathini@linux.ibm.com>
 Cc: Ian Rogers <irogers@google.com>
 Cc: Jiri Olsa <jolsa@kernel.org>
 Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
 Cc: Segher Boessenkool <segher@kernel.crashing.org>
 Link: https://lore.kernel.org/lkml/20240718084358.72242-16-atrajeev@linux.vnet.ibm.com
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 show more ...  | 
| 88444952 | 18-Jul-2024 | Athira Rajeev <atrajeev@linux.vnet.ibm.com> | perf annotate: Update instruction tracking for powerpc
 Add instruction tracking function "update_insn_state_powerpc" for
 powerpc. Example sequence in powerpc:
 
 ld      r10,264(r3)
 mr      r31,r3
 perf annotate: Update instruction tracking for powerpc
 Add instruction tracking function "update_insn_state_powerpc" for
 powerpc. Example sequence in powerpc:
 
 ld      r10,264(r3)
 mr      r31,r3
 <<after some sequence>
 ld      r9,312(r31)
 
 Consider ithe sample is pointing to: "ld r9,312(r31)".
 
 Here the memory reference is hit at "312(r31)" where 312 is the offset
 and r31 is the source register.
 
 Previous instruction sequence shows that register state of r3 is moved
 to r31.
 
 So to identify the data type for r31 access, the previous instruction
 ("mr") needs to be tracked and the state type entry has to be updated.
 
 Current instruction tracking support in perf tools infrastructure is
 specific to x86. Patch adds this support for powerpc as well.
 
 Reviewed-by: Kajol Jain <kjain@linux.ibm.com>
 Reviewed-by: Namhyung Kim <namhyung@kernel.org>
 Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
 Tested-by: Kajol Jain <kjain@linux.ibm.com>
 Cc: Adrian Hunter <adrian.hunter@intel.com>
 Cc: Akanksha J N <akanksha@linux.ibm.com>
 Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
 Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
 Cc: Hari Bathini <hbathini@linux.ibm.com>
 Cc: Ian Rogers <irogers@google.com>
 Cc: Jiri Olsa <jolsa@kernel.org>
 Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
 Cc: Segher Boessenkool <segher@kernel.crashing.org>
 Link: https://lore.kernel.org/lkml/20240718084358.72242-12-atrajeev@linux.vnet.ibm.com
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 show more ...  | 
| 539bfea3 | 18-Jul-2024 | Athira Rajeev <atrajeev@linux.vnet.ibm.com> | perf annotate: Add more instructions for instruction tracking
 Add few more instructions and use opcode as search key
 to find if it is supported by the architecture.
 
 The added ones are: addi, addic,
 perf annotate: Add more instructions for instruction tracking
 Add few more instructions and use opcode as search key
 to find if it is supported by the architecture.
 
 The added ones are: addi, addic, addic., addis, subfic and mulli
 
 Reviewed-by: Kajol Jain <kjain@linux.ibm.com>
 Reviewed-by: Namhyung Kim <namhyung@kernel.org>
 Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
 Tested-by: Kajol Jain <kjain@linux.ibm.com>
 Cc: Adrian Hunter <adrian.hunter@intel.com>
 Cc: Akanksha J N <akanksha@linux.ibm.com>
 Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
 Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
 Cc: Hari Bathini <hbathini@linux.ibm.com>
 Cc: Ian Rogers <irogers@google.com>
 Cc: Jiri Olsa <jolsa@kernel.org>
 Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
 Cc: Segher Boessenkool <segher@kernel.crashing.org>
 Link: https://lore.kernel.org/lkml/20240718084358.72242-11-atrajeev@linux.vnet.ibm.com
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 show more ...  | 
| cd0b6f67 | 18-Jul-2024 | Athira Rajeev <atrajeev@linux.vnet.ibm.com> | perf annotate: Add some of the arithmetic instructions to support instruction tracking in powerpc
 Data-type profiling has the concept of instruction tracking.
 
 Example sequence in powerpc:
 
 ld
 perf annotate: Add some of the arithmetic instructions to support instruction tracking in powerpc
 Data-type profiling has the concept of instruction tracking.
 
 Example sequence in powerpc:
 
 ld      r10,264(r3)
 mr      r31,r3
 <<after some sequence>
 ld      r9,312(r31)
 
 or differently
 
 lwz	r10,264(r3)
 add	r31, r3, RB
 lwz	r9, 0(r31)
 
 If a sample is hit at "lwz r9, 0(r31)", data type of r31 depends
 on previous instruction sequence here. So to track the previous
 instructions, patch adds changes to identify some of the arithmetic
 instructions which are having opcode as 31.
 
 Since memory instructions also has cases with opcode 31, use the bits
 22:30 to filter the arithmetic instructions here.
 
 Also there are instructions with just two operands like "addme", "addze".
 
 This patch adds new instructions ops "arithmetic_ops" to handle this
 
 Reviewed-by: Kajol Jain <kjain@linux.ibm.com>
 Reviewed-by: Namhyung Kim <namhyung@kernel.org>
 Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
 Tested-by: Kajol Jain <kjain@linux.ibm.com>
 Cc: Adrian Hunter <adrian.hunter@intel.com>
 Cc: Akanksha J N <akanksha@linux.ibm.com>
 Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
 Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
 Cc: Hari Bathini <hbathini@linux.ibm.com>
 Cc: Ian Rogers <irogers@google.com>
 Cc: Jiri Olsa <jolsa@kernel.org>
 Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
 Cc: Segher Boessenkool <segher@kernel.crashing.org>
 Link: https://lore.kernel.org/lkml/20240718084358.72242-10-atrajeev@linux.vnet.ibm.com
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 show more ...  | 
| ace7d681 | 18-Jul-2024 | Athira Rajeev <atrajeev@linux.vnet.ibm.com> | perf annotate: Add support to identify memory instructions of opcode 31 in powerpc
 There are memory instructions in powerpc with opcode as 31.
 Example: "ldx RT,RA,RB" , Its X form is as below:
 
 __
 perf annotate: Add support to identify memory instructions of opcode 31 in powerpc
 There are memory instructions in powerpc with opcode as 31.
 Example: "ldx RT,RA,RB" , Its X form is as below:
 
 ______________________________________
 | 31 |  RT  |  RA |  RB |   21     |/|
 --------------------------------------
 0    6     11    16    21         30 31
 
 The opcode for "ldx" is 31. There are other instructions also with
 opcode 31 which are memory insn like ldux, stbx, lwzx, lhaux
 But all instructions with opcode 31 are not memory. Example is add
 instruction: "add RT,RA,RB"
 
 The value in bit 21-30 [ 21 for ldx ] is different for these
 instructions. Patch uses this value to assign instruction ops for these
 cases. The naming convention and value to identify these are picked from
 defines in "arch/powerpc/include/asm/ppc-opcode.h"
 
 Reviewed-by: Kajol Jain <kjain@linux.ibm.com>
 Reviewed-by: Namhyung Kim <namhyung@kernel.org>
 Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
 Tested-by: Kajol Jain <kjain@linux.ibm.com>
 Cc: Adrian Hunter <adrian.hunter@intel.com>
 Cc: Akanksha J N <akanksha@linux.ibm.com>
 Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
 Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
 Cc: Hari Bathini <hbathini@linux.ibm.com>
 Cc: Ian Rogers <irogers@google.com>
 Cc: Jiri Olsa <jolsa@kernel.org>
 Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
 Cc: Segher Boessenkool <segher@kernel.crashing.org>
 Link: https://lore.kernel.org/lkml/20240718084358.72242-9-atrajeev@linux.vnet.ibm.com
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 show more ...  | 
| 1acdad68 | 18-Jul-2024 | Athira Rajeev <atrajeev@linux.vnet.ibm.com> | perf annotate: Add parse function for memory instructions in powerpc
 Use the raw instruction code and macros to identify memory instructions,
 extract register fields and also offset.
 
 The implementa
 perf annotate: Add parse function for memory instructions in powerpc
 Use the raw instruction code and macros to identify memory instructions,
 extract register fields and also offset.
 
 The implementation addresses the D-form, X-form, DS-form instructions.
 Two main functions are added.
 
 New parse function "load_store__parse" as instruction ops parser for
 memory instructions.
 
 Unlike other parsers (like mov__parse), this one fills in the
 "multi_regs" field for source/target and new added "mem_ref" field. No
 other fields are set because, here there is no need to parse the
 disassembled code and arch specific macros will take care of extracting
 offset and regs which is easier and will be precise.
 
 In powerpc, all instructions with a primary opcode from 32 to 63
 are memory instructions. Update "ins__find" function to have "raw_insn"
 also as a parameter.
 
 Reviewed-by: Kajol Jain <kjain@linux.ibm.com>
 Reviewed-by: Namhyung Kim <namhyung@kernel.org>
 Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
 Tested-by: Kajol Jain <kjain@linux.ibm.com>
 Cc: Adrian Hunter <adrian.hunter@intel.com>
 Cc: Akanksha J N <akanksha@linux.ibm.com>
 Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
 Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
 Cc: Hari Bathini <hbathini@linux.ibm.com>
 Cc: Ian Rogers <irogers@google.com>
 Cc: Jiri Olsa <jolsa@kernel.org>
 Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
 Cc: Segher Boessenkool <segher@kernel.crashing.org>
 Link: https://lore.kernel.org/lkml/20240718084358.72242-8-atrajeev@linux.vnet.ibm.com
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 show more ...  |