https://gcc.gnu.org/g:6b9226f62dd3a5425815a0b1ddf64215548b2669

commit 6b9226f62dd3a5425815a0b1ddf64215548b2669
Author: Christoph Müllner <christoph.muell...@vrull.eu>
Date:   Fri Jul 5 01:09:46 2024 +0200

    RISC-V: Deduplicate arch subset list processing
    
    We have a code duplication in riscv_set_arch_by_subset_list() and
    riscv_parse_arch_string(), where the latter function parses an ISA string
    into a subset_list before doing the same as the former function.
    
    riscv_parse_arch_string() is used to process command line options and
    riscv_set_arch_by_subset_list() processes target attributes.
    So, it is obvious that both functions should do the same.
    Let's deduplicate the code to enforce this.
    
    gcc/ChangeLog:
    
            * common/config/riscv/riscv-common.cc 
(riscv_set_arch_by_subset_list):
            Fix overlong line.
            (riscv_parse_arch_string): Replace duplicated code by a call to
            riscv_set_arch_by_subset_list.
    
    Signed-off-by: Christoph Müllner <christoph.muell...@vrull.eu>
    (cherry picked from commit 85fa334fbcaa8e4b98ab197a8c9410dde87f0ae3)

Diff:
---
 gcc/common/config/riscv/riscv-common.cc | 32 ++++++--------------------------
 1 file changed, 6 insertions(+), 26 deletions(-)

diff --git a/gcc/common/config/riscv/riscv-common.cc 
b/gcc/common/config/riscv/riscv-common.cc
index b9bda3e110a2..dab2e7679653 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -1826,7 +1826,8 @@ riscv_set_arch_by_subset_list (riscv_subset_list 
*subset_list,
       else if (subset_list->xlen () == 64)
        opts->x_target_flags |= MASK_64BIT;
 
-      for (arch_ext_flag_tab = &riscv_ext_flag_table[0]; 
arch_ext_flag_tab->ext;
+      for (arch_ext_flag_tab = &riscv_ext_flag_table[0];
+          arch_ext_flag_tab->ext;
           ++arch_ext_flag_tab)
        {
          if (subset_list->lookup (arch_ext_flag_tab->ext))
@@ -1850,30 +1851,6 @@ riscv_parse_arch_string (const char *isa,
   if (!subset_list)
     return;
 
-  if (opts)
-    {
-      const riscv_ext_flag_table_t *arch_ext_flag_tab;
-      /* Clean up target flags before we set.  */
-      for (arch_ext_flag_tab = &riscv_ext_flag_table[0];
-          arch_ext_flag_tab->ext;
-          ++arch_ext_flag_tab)
-       opts->*arch_ext_flag_tab->var_ref &= ~arch_ext_flag_tab->mask;
-
-      if (subset_list->xlen () == 32)
-       opts->x_target_flags &= ~MASK_64BIT;
-      else if (subset_list->xlen () == 64)
-       opts->x_target_flags |= MASK_64BIT;
-
-
-      for (arch_ext_flag_tab = &riscv_ext_flag_table[0];
-          arch_ext_flag_tab->ext;
-          ++arch_ext_flag_tab)
-       {
-         if (subset_list->lookup (arch_ext_flag_tab->ext))
-           opts->*arch_ext_flag_tab->var_ref |= arch_ext_flag_tab->mask;
-       }
-    }
-
   /* Avoid double delete if current_subset_list equals cmdline_subset_list.  */
   if (current_subset_list && current_subset_list != cmdline_subset_list)
     delete current_subset_list;
@@ -1881,7 +1858,10 @@ riscv_parse_arch_string (const char *isa,
   if (cmdline_subset_list)
     delete cmdline_subset_list;
 
-  current_subset_list = cmdline_subset_list = subset_list;
+  cmdline_subset_list = subset_list;
+  /* current_subset_list is set in the call below.  */
+
+  riscv_set_arch_by_subset_list (subset_list, opts);
 }
 
 /* Return the riscv_cpu_info entry for CPU, NULL if not found.  */

Reply via email to