On 10/3/24 9:30 AM, Yangyu Chen wrote:
Currently, we lack support for TARGET_CAN_INLINE_P on the RISC-V
ISA. As a result, certain functions cannot be optimized with inlining
when specific options, such as __attribute__((target("arch=+v"))) .
This can lead to potential performance issues when building
retargetable binaries for RISC-V.

To address this, I have implemented the riscv_can_inline_p function.
This addition enables inlining when the callee either has no special
options or when the some options match, and also ensuring that the
callee's ISA is a subset of the caller's. I also check some other
options when there is no always_inline set.

gcc/ChangeLog:

         * common/config/riscv/riscv-common.cc (cl_opt_var_ref_t): Add
         cl_opt_var_ref_t pointer to member of cl_target_option.
         (struct riscv_ext_flag_table_t): Add new cl_opt_var_ref_t field.
         (RISCV_EXT_FLAG_ENTRY): New macro to simplify the definition of
         riscv_ext_flag_table.
         (riscv_ext_is_subset): New function to check if the callee's ISA
         is a subset of the caller's.
         (riscv_x_target_flags_isa_mask): New function to get the mask of
         ISA extension in x_target_flags of gcc_options.
         * config/riscv/riscv-subset.h (riscv_ext_is_subset): Declare
         riscv_ext_is_subset function.
         (riscv_x_target_flags_isa_mask): Declare
         riscv_x_target_flags_isa_mask function.
         * config/riscv/riscv.cc (riscv_can_inline_p): New function.
         (TARGET_CAN_INLINE_P): Implement TARGET_CAN_INLINE_P.
Thanks.  I've pushed this to the trunk.

jeff

Reply via email to