https://gcc.gnu.org/g:d51adfe84ba03e9206479518b03f01246db39505
commit d51adfe84ba03e9206479518b03f01246db39505 Author: Wang Pengcheng <wangpengcheng...@bytedance.com> Date: Wed Oct 23 23:11:53 2024 -0600 [PATCH] RISC-V: override alignment of function/jump/loop Just like what AArch64 has done. Signed-off-by: Wang Pengcheng <wangpengcheng...@bytedance.com> gcc/ChangeLog: * config/riscv/riscv.cc (struct riscv_tune_param): Add new tune options. (riscv_override_options_internal): Override the default alignment when not optimizing for size. (cherry picked from commit 078f7c4f1fcf4d7099d855afb02dbaf71bebddbf) Diff: --- gcc/config/riscv/riscv.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 5b9d9b6b64be..56bd03f8ce7d 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -294,6 +294,9 @@ struct riscv_tune_param bool overlap_op_by_pieces; unsigned int fusible_ops; const struct cpu_vector_cost *vec_costs; + const char *function_align = nullptr; + const char *jump_align = nullptr; + const char *loop_align = nullptr; }; @@ -10282,6 +10285,18 @@ riscv_override_options_internal (struct gcc_options *opts) ? &optimize_size_tune_info : cpu->tune_param; + /* If not optimizing for size, set the default + alignment to what the target wants. */ + if (!opts->x_optimize_size) + { + if (opts->x_flag_align_loops && !opts->x_str_align_loops) + opts->x_str_align_loops = tune_param->loop_align; + if (opts->x_flag_align_jumps && !opts->x_str_align_jumps) + opts->x_str_align_jumps = tune_param->jump_align; + if (opts->x_flag_align_functions && !opts->x_str_align_functions) + opts->x_str_align_functions = tune_param->function_align; + } + /* Use -mtune's setting for slow_unaligned_access, even when optimizing for size. For architectures that trap and emulate unaligned accesses, the performance cost is too great, even for -Os. Similarly, if