According to Xuerui's LLVM changeset [1], doing so can make a
significant performace gain.

Bootstrapped and regtested on loongarch64-linux-gnu.  Ok for GCC 14?

[1]:https://reviews.llvm.org/D148622

gcc/ChangeLog:

        * config/loongarch/loongarch.cc
        (loongarch_option_override_internal): If -falign-functions is
        used but the alignment is not explicitly specified, set it to
        4 * loongarch_issue_rate ().  Likewise for -falign-loops.
---
 gcc/config/loongarch/loongarch.cc | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/gcc/config/loongarch/loongarch.cc 
b/gcc/config/loongarch/loongarch.cc
index 06fc1cd0604..6552484de7c 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -6236,6 +6236,17 @@ loongarch_option_override_internal (struct gcc_options 
*opts)
       && !opts->x_optimize_size)
     opts->x_flag_prefetch_loop_arrays = 1;
 
+  /* Align functions and loops to (issue rate) * (insn size) to improve
+     the throughput of the fetching units.  */
+  char *align = XNEWVEC (char, 16);
+  sprintf (align, "%d", loongarch_issue_rate () * 4);
+
+  if (opts->x_flag_align_functions && !opts->x_str_align_functions)
+    opts->x_str_align_functions = align;
+
+  if (opts->x_flag_align_loops && !opts->x_str_align_loops)
+    opts->x_str_align_loops = align;
+
   if (TARGET_DIRECT_EXTERN_ACCESS && flag_shlib)
     error ("%qs cannot be used for compiling a shared library",
           "-mdirect-extern-access");
-- 
2.40.0

Reply via email to