]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[PATCH] RISC-V: override alignment of function/jump/loop
authorWang Pengcheng <wangpengcheng.pp@bytedance.com>
Thu, 24 Oct 2024 05:11:53 +0000 (23:11 -0600)
committerJeff Law <jlaw@ventanamicro.com>
Thu, 24 Oct 2024 05:11:53 +0000 (23:11 -0600)
Just like what AArch64 has done.

Signed-off-by: Wang Pengcheng <wangpengcheng.pp@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.

gcc/config/riscv/riscv.cc

index 3ac40234345a988fbfe7524731c7866f8297523b..7d6fc1429b55748c620ec0392f7b8ec9a2ea6580 100644 (file)
@@ -295,6 +295,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;
 };
 
 
@@ -10283,6 +10286,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