> The Mask flag in the single TargetVariable is not enough due to more> and 
> more extensions were added.So I optimize the defination of Mask> flag, please 
> refer to the below case:> There are some new MASK flags for 'v' 
> extension(ZVL32B,ZVL64B,...,ZVL65536B),> but these MASK flags can't store 
> into x_target_flags,because the total number> of MASK flags exceed 32. In 
> this patch we can write it like this in this scence.> > TargetVariable> int 
> riscv_zvl_flags> > Mask(ZVL32B) in TargetVariable(riscv_zvl_flags)> > The 
> corresponding MASK and TARGET will be automatically generated.> > 
> gcc/ChangeLog:> >         * config/riscv/riscv-opts.h   Delete below 
> definations>         (MASK_ZICSR): Delete;>         (MASK_ZIFENCEI): Delete;> 
>         (TARGET_ZICSR): Delete;>         (TARGET_ZIFENCEI): Delete;>         
> (MASK_ZAWRS): Delete;>         (TARGET_ZAWRS): Delete;>         (MASK_ZBA): 
> Delete;>         (MASK_ZBB): Delete;>         (MASK_ZBC): Delete;>         
> (MASK_ZBS): Delete;>         (TARGET_ZBA): Delete;>         (TARGET_ZBB): 
> Delete;>         (TARGET_ZBC): Delete;>         (TARGET_ZBS): Delete;>        
>  (MASK_ZFINX): Delete;>         (MASK_ZDINX): Delete;>         (MASK_ZHINX): 
> Delete;>         (MASK_ZHINXMIN): Delete;>         (TARGET_ZFINX): Delete;>   
>       (TARGET_ZDINX): Delete;>         (TARGET_ZHINX): Delete;>         
> (TARGET_ZHINXMIN): Delete;>         (MASK_ZBKB): Delete;>         
> (MASK_ZBKC): Delete;>         (MASK_ZBKX): Delete;>         (MASK_ZKNE): 
> Delete;>         (MASK_ZKND): Delete;>         (MASK_ZKNH): Delete;>         
> (MASK_ZKR): Delete;>         (MASK_ZKSED): Delete;>         (MASK_ZKSH): 
> Delete;>         (MASK_ZKT): Delete;>         (TARGET_ZBKB): Delete;>         
> (TARGET_ZBKC): Delete;>         (TARGET_ZBKX): Delete;>         
> (TARGET_ZKNE): Delete;>         (TARGET_ZKND): Delete;>         
> (TARGET_ZKNH): Delete;>         (TARGET_ZKR): Delete;>         
> (TARGET_ZKSED): Delete;>         (TARGET_ZKSH): Delete;>         
> (TARGET_ZKT): Delete;>         (MASK_VECTOR_ELEN_32): Delete;>         
> (MASK_VECTOR_ELEN_64): Delete;>         (MASK_VECTOR_ELEN_FP_32): Delete;>    
>      (MASK_VECTOR_ELEN_FP_64): Delete;>         (TARGET_VECTOR_ELEN_32): 
> Delete;>         (TARGET_VECTOR_ELEN_64): Delete;>         
> (TARGET_VECTOR_ELEN_FP_32): Delete;>         (TARGET_VECTOR_ELEN_FP_64): 
> Delete;>         (MASK_ZVL32B): Delete;>         (MASK_ZVL64B): Delete;>      
>    (MASK_ZVL128B): Delete;>         (MASK_ZVL256B): Delete;>         
> (MASK_ZVL512B): Delete;>         (MASK_ZVL1024B): Delete;>         
> (MASK_ZVL2048B): Delete;>         (MASK_ZVL4096B): Delete;>         
> (MASK_ZVL8192B): Delete;>         (MASK_ZVL16384B): Delete;>         
> (MASK_ZVL32768B): Delete;>         (MASK_ZVL65536B): Delete;>         
> (TARGET_ZVL32B): Delete;>         (TARGET_ZVL64B): Delete;>         
> (TARGET_ZVL128B): Delete;>         (TARGET_ZVL256B): Delete;>         
> (TARGET_ZVL512B): Delete;>         (TARGET_ZVL1024B): Delete;>         
> (TARGET_ZVL2048B): Delete;>         (TARGET_ZVL4096B): Delete;>         
> (TARGET_ZVL8192B): Delete;>         (TARGET_ZVL16384B): Delete;>         
> (TARGET_ZVL32768B): Delete;>         (TARGET_ZVL65536B): Delete;>         
> (MASK_ZICBOZ): Delete;>         (MASK_ZICBOM): Delete;>         
> (MASK_ZICBOP): Delete;>         (TARGET_ZICBOZ): Delete;>         
> (TARGET_ZICBOM): Delete;>         (TARGET_ZICBOP): Delete;>         
> (MASK_ZFHMIN): Delete;>         (MASK_ZFH): Delete;>         (TARGET_ZFHMIN): 
> Delete;>         (TARGET_ZFH): Delete;>         (MASK_ZMMUL): Delete;>        
>  (TARGET_ZMMUL): Delete;>         (MASK_SVINVAL): Delete;>         
> (MASK_SVNAPOT): Delete;>         (TARGET_SVINVAL): Delete;>         
> (TARGET_SVNAPOT): Delete;>         * config/riscv/riscv.opt: Add new Mask 
> defination.>         * opt-functions.awk:      Add new function to find the 
> index>                                   of target variable from 
> extra_target_vars.>         * opt-read.awk:           Add new function to 
> store the Mask flags.>         * opth-gen.awk:           Add new function to 
> output the defination of>                                   Mask Macro and 
> Target Macro.> --->  gcc/config/riscv/riscv-opts.h | 115 
> ---------------------------------->  gcc/config/riscv/riscv.opt    |  90 
> ++++++++++++++++++++++++++>  gcc/opt-functions.awk         |  11 ++++>  
> gcc/opt-read.awk              |  16 ++++->  gcc/opth-gen.awk              |  
> 22 +++++++>  5 files changed, 138 insertions(+), 116 deletions(-)> > diff 
> --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h> index 
> 25fd85b09b1..7cf28838cb5 100644> --- a/gcc/config/riscv/riscv-opts.h> +++ 
> b/gcc/config/riscv/riscv-opts.h> @@ -66,121 +66,6 @@ enum 
> stack_protector_guard {>    SSP_TLS,/* per-thread canary in TLS block */>    
> SSP_GLOBAL/* global canary */>  };> -> -#define MASK_ZICSR    (1 << 0)> 
> -#define MASK_ZIFENCEI (1 << 1)> -> -#define TARGET_ZICSR    
> ((riscv_zi_subext & MASK_ZICSR) != 0)> -#define TARGET_ZIFENCEI 
> ((riscv_zi_subext & MASK_ZIFENCEI) != 0)> -> -#define MASK_ZAWRS   (1 << 0)> 
> -#define TARGET_ZAWRS ((riscv_za_subext & MASK_ZAWRS) != 0)> -> -#define 
> MASK_ZBA      (1 << 0)> -#define MASK_ZBB      (1 << 1)> -#define MASK_ZBC    
>   (1 << 2)> -#define MASK_ZBS      (1 << 3)> -> -#define TARGET_ZBA    
> ((riscv_zb_subext & MASK_ZBA) != 0)> -#define TARGET_ZBB    ((riscv_zb_subext 
> & MASK_ZBB) != 0)> -#define TARGET_ZBC    ((riscv_zb_subext & MASK_ZBC) != 
> 0)> -#define TARGET_ZBS    ((riscv_zb_subext & MASK_ZBS) != 0)> -> -#define 
> MASK_ZFINX      (1 << 0)> -#define MASK_ZDINX      (1 << 1)> -#define 
> MASK_ZHINX      (1 << 2)> -#define MASK_ZHINXMIN   (1 << 3)> -> -#define 
> TARGET_ZFINX    ((riscv_zinx_subext & MASK_ZFINX) != 0)> -#define 
> TARGET_ZDINX    ((riscv_zinx_subext & MASK_ZDINX) != 0)> -#define 
> TARGET_ZHINX    ((riscv_zinx_subext & MASK_ZHINX) != 0)> -#define 
> TARGET_ZHINXMIN ((riscv_zinx_subext & MASK_ZHINXMIN) != 0)> -> -#define 
> MASK_ZBKB     (1 << 0)> -#define MASK_ZBKC     (1 << 1)> -#define MASK_ZBKX   
>   (1 << 2)> -#define MASK_ZKNE     (1 << 3)> -#define MASK_ZKND     (1 << 4)> 
> -#define MASK_ZKNH     (1 << 5)> -#define MASK_ZKR      (1 << 6)> -#define 
> MASK_ZKSED    (1 << 7)> -#define MASK_ZKSH     (1 << 8)> -#define MASK_ZKT    
>   (1 << 9)> -> -#define TARGET_ZBKB   ((riscv_zk_subext & MASK_ZBKB) != 0)> 
> -#define TARGET_ZBKC   ((riscv_zk_subext & MASK_ZBKC) != 0)> -#define 
> TARGET_ZBKX   ((riscv_zk_subext & MASK_ZBKX) != 0)> -#define TARGET_ZKNE   
> ((riscv_zk_subext & MASK_ZKNE) != 0)> -#define TARGET_ZKND   
> ((riscv_zk_subext & MASK_ZKND) != 0)> -#define TARGET_ZKNH   
> ((riscv_zk_subext & MASK_ZKNH) != 0)> -#define TARGET_ZKR    
> ((riscv_zk_subext & MASK_ZKR) != 0)> -#define TARGET_ZKSED  ((riscv_zk_subext 
> & MASK_ZKSED) != 0)> -#define TARGET_ZKSH   ((riscv_zk_subext & MASK_ZKSH) != 
> 0)> -#define TARGET_ZKT    ((riscv_zk_subext & MASK_ZKT) != 0)> -> -#define 
> MASK_VECTOR_ELEN_32    (1 << 0)> -#define MASK_VECTOR_ELEN_64    (1 << 1)> 
> -#define MASK_VECTOR_ELEN_FP_32 (1 << 2)> -#define MASK_VECTOR_ELEN_FP_64 (1 
> << 3)> -> -#define TARGET_VECTOR_ELEN_32 \> -  ((riscv_vector_elen_flags & 
> MASK_VECTOR_ELEN_32) != 0)> -#define TARGET_VECTOR_ELEN_64 \> -  
> ((riscv_vector_elen_flags & MASK_VECTOR_ELEN_64) != 0)> -#define 
> TARGET_VECTOR_ELEN_FP_32 \> -  ((riscv_vector_elen_flags & 
> MASK_VECTOR_ELEN_FP_32) != 0)> -#define TARGET_VECTOR_ELEN_FP_64 \> -  
> ((riscv_vector_elen_flags & MASK_VECTOR_ELEN_FP_64) != 0)> -> -#define 
> MASK_ZVL32B    (1 <<  0)> -#define MASK_ZVL64B    (1 <<  1)> -#define 
> MASK_ZVL128B   (1 <<  2)> -#define MASK_ZVL256B   (1 <<  3)> -#define 
> MASK_ZVL512B   (1 <<  4)> -#define MASK_ZVL1024B  (1 <<  5)> -#define 
> MASK_ZVL2048B  (1 <<  6)> -#define MASK_ZVL4096B  (1 <<  7)> -#define 
> MASK_ZVL8192B  (1 <<  8)> -#define MASK_ZVL16384B (1 <<  9)> -#define 
> MASK_ZVL32768B (1 << 10)> -#define MASK_ZVL65536B (1 << 11)> -> -#define 
> TARGET_ZVL32B    ((riscv_zvl_flags & MASK_ZVL32B) != 0)> -#define 
> TARGET_ZVL64B    ((riscv_zvl_flags & MASK_ZVL64B) != 0)> -#define 
> TARGET_ZVL128B   ((riscv_zvl_flags & MASK_ZVL128B) != 0)> -#define 
> TARGET_ZVL256B   ((riscv_zvl_flags & MASK_ZVL256B) != 0)> -#define 
> TARGET_ZVL512B   ((riscv_zvl_flags & MASK_ZVL512B) != 0)> -#define 
> TARGET_ZVL1024B  ((riscv_zvl_flags & MASK_ZVL1024B) != 0)> -#define 
> TARGET_ZVL2048B  ((riscv_zvl_flags & MASK_ZVL2048B) != 0)> -#define 
> TARGET_ZVL4096B  ((riscv_zvl_flags & MASK_ZVL4096B) != 0)> -#define 
> TARGET_ZVL8192B  ((riscv_zvl_flags & MASK_ZVL8192B) != 0)> -#define 
> TARGET_ZVL16384B ((riscv_zvl_flags & MASK_ZVL16384B) != 0)> -#define 
> TARGET_ZVL32768B ((riscv_zvl_flags & MASK_ZVL32768B) != 0)> -#define 
> TARGET_ZVL65536B ((riscv_zvl_flags & MASK_ZVL65536B) != 0)> -> -#define 
> MASK_ZICBOZ   (1 << 0)> -#define MASK_ZICBOM   (1 << 1)> -#define MASK_ZICBOP 
>   (1 << 2)> -> -#define TARGET_ZICBOZ ((riscv_zicmo_subext & MASK_ZICBOZ) != 
> 0)> -#define TARGET_ZICBOM ((riscv_zicmo_subext & MASK_ZICBOM) != 0)> 
> -#define TARGET_ZICBOP ((riscv_zicmo_subext & MASK_ZICBOP) != 0)> -> -#define 
> MASK_ZFHMIN   (1 << 0)> -#define MASK_ZFH      (1 << 1)> -> -#define 
> TARGET_ZFHMIN ((riscv_zf_subext & MASK_ZFHMIN) != 0)> -#define TARGET_ZFH    
> ((riscv_zf_subext & MASK_ZFH) != 0)> -> -#define MASK_ZMMUL      (1 << 0)> 
> -#define TARGET_ZMMUL    ((riscv_zm_subext & MASK_ZMMUL) != 0)> -> -#define 
> MASK_SVINVAL (1 << 0)> -#define MASK_SVNAPOT (1 << 1)> -> -#define 
> TARGET_SVINVAL ((riscv_sv_subext & MASK_SVINVAL) != 0)> -#define 
> TARGET_SVNAPOT ((riscv_sv_subext & MASK_SVNAPOT) != 0)> ->  /* Bit of 
> riscv_zvl_flags will set contintuly, N-1 bit will set if N-bit is>     set, 
> e.g. MASK_ZVL64B has set then MASK_ZVL32B is set, so we can use>     popcount 
> to caclulate the minimal VLEN.  */> diff --git a/gcc/config/riscv/riscv.opt 
> b/gcc/config/riscv/riscv.opt> index 7c3ca48d1cc..77f553356b1 100644> --- 
> a/gcc/config/riscv/riscv.opt> +++ b/gcc/config/riscv/riscv.opt> @@ -203,36 
> +203,126 @@ long riscv_stack_protector_guard_offset = 0>  TargetVariable>  
> int riscv_zi_subext> > +Mask(ZICSR) in TargetVariable(riscv_zi_subext)> +> 
> +Mask(ZIFENCEI) in TargetVariable(riscv_zi_subext)> +>  TargetVariable>  int 
> riscv_za_subext> > +Mask(ZAWRS) in TargetVariable(riscv_za_subext)> +>  
> TargetVariable>  int riscv_zb_subext> > +Mask(ZBA) in 
> TargetVariable(riscv_zb_subext)> +> +Mask(ZBB) in 
> TargetVariable(riscv_zb_subext)> +> +Mask(ZBC) in 
> TargetVariable(riscv_zb_subext)> +> +Mask(ZBS) in 
> TargetVariable(riscv_zb_subext)> +>  TargetVariable>  int riscv_zinx_subext> 
> > +Mask(ZFINX) in TargetVariable(riscv_zinx_subext)> +> +Mask(ZDINX) in 
> TargetVariable(riscv_zinx_subext)> +> +Mask(ZHINX) in 
> TargetVariable(riscv_zinx_subext)> +> +Mask(ZHINXMIN) in 
> TargetVariable(riscv_zinx_subext)> +>  TargetVariable>  int riscv_zk_subext> 
> > +Mask(ZBKB) in TargetVariable(riscv_zk_subext)> +> +Mask(ZBKC) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZBKX) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZKNE) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZKND) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZKNH) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZKR) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZKSED) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZKSH) in 
> TargetVariable(riscv_zk_subext)> +> +Mask(ZKT) in 
> TargetVariable(riscv_zk_subext)> +>  TargetVariable>  int 
> riscv_vector_elen_flags> > +Mask(VECTOR_ELEN_32) in 
> TargetVariable(riscv_vector_elen_flags)> +> +Mask(VECTOR_ELEN_64) in 
> TargetVariable(riscv_vector_elen_flags)> +> +Mask(VECTOR_ELEN_FP_32) in 
> TargetVariable(riscv_vector_elen_flags)> +> +Mask(VECTOR_ELEN_FP_64) in 
> TargetVariable(riscv_vector_elen_flags)> +>  TargetVariable>  int 
> riscv_zvl_flags> > +Mask(ZVL32B) in TargetVariable(riscv_zvl_flags)> +> 
> +Mask(ZVL64B) in TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL128B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL256B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL512B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL1024B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL2048B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL4096B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL8192B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL16384B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL32768B) in 
> TargetVariable(riscv_zvl_flags)> +> +Mask(ZVL65536B) in 
> TargetVariable(riscv_zvl_flags)> +>  TargetVariable>  int riscv_zicmo_subext> 
> > +Mask(ZICBOZ) in TargetVariable(riscv_zicmo_subext)> +> +Mask(ZICBOM) in 
> TargetVariable(riscv_zicmo_subext)> +> +Mask(ZICBOP) in 
> TargetVariable(riscv_zicmo_subext)> +>  TargetVariable>  int riscv_zf_subext> 
> > +Mask(ZFHMIN) in TargetVariable(riscv_zf_subext)> +> +Mask(ZFH) in 
> TargetVariable(riscv_zf_subext)> +>  TargetVariable>  int riscv_zm_subext> > 
> +Mask(ZMMUL) in TargetVariable(riscv_zm_subext)> +>  TargetVariable>  int 
> riscv_sv_subext> > +Mask(SVINVAL) in TargetVariable(riscv_sv_subext)> +> 
> +Mask(SVNAPOT) in TargetVariable(riscv_sv_subext)> + It looks like a good 
> idea. However, there are still many modules that look very similar, can we 
> further optimize these codes. BR, Jiawei> > > >  >  Enum>  
> Name(isa_spec_class) Type(enum riscv_isa_spec_class)>  Supported ISA specs 
> (for use with the -misa-spec= option):> diff --git a/gcc/opt-functions.awk 
> b/gcc/opt-functions.awk> index 2aee0b9f1c3..9d6080d64a8 100644> --- 
> a/gcc/opt-functions.awk> +++ b/gcc/opt-functions.awk> @@ -387,3 +387,14 @@ 
> function integer_range_info(range_option, init, option, uinteger_used)>      
> else>          return "-1, -1">  }> +> +# Find the index of target variable 
> from extra_target_vars> +function find_index(var, var_arry, n_var_arry)> +{> 
> +    for (var_index = 0; var_index < n_var_arry; var_index++)> +    {> +      
>   if (var_arry[var_index] == var)> +            break> +    }> +    return 
> var_index> +}> \ No newline at end of file> diff --git a/gcc/opt-read.awk 
> b/gcc/opt-read.awk> index ce3617c8d4a..ebe48db968b 100644> --- 
> a/gcc/opt-read.awk> +++ b/gcc/opt-read.awk> @@ -22,6 +22,7 @@ BEGIN {>  
> n_opts = 0>  n_langs = 0>  n_target_save = 0> +n_target_vars = 0>  
> n_extra_vars = 0>  n_extra_target_vars = 0>  n_extra_masks = 0> @@ -121,7 
> +122,20 @@ BEGIN {>  n_opts++;>  }>  else {> -extra_masks[n_extra_masks++] = 
> name> +if($0 ~ "in")> +{> +target_var = opt_args("TargetVariable", $1)> 
> +var_index = find_index(target_var, target_vars, n_target_vars)> +if 
> (var_index == n_target_vars)> +{> +target_vars[n_target_vars++] = target_var> 
> +}> +other_masks[var_index][n_other_mask[var_index]++] = name> +}> +else> +{> 
> +extra_masks[n_extra_masks++] = name> +}>  }>  }>  }> diff --git 
> a/gcc/opth-gen.awk b/gcc/opth-gen.awk> index 8bba8ec4549..247a9fb8944 100644> 
> --- a/gcc/opth-gen.awk> +++ b/gcc/opth-gen.awk> @@ -406,6 +406,18 @@ for (i = 
> 0; i < n_extra_masks; i++) {>  print "#define MASK_" extra_masks[i] " (1U << 
> " masknum[""]++ ")">  }> > +for (i = 0; i < n_target_vars; i++)> +{> +if 
> (find_index(target_vars[i], extra_target_vars, n_extra_target_vars) == 
> n_extra_target_vars)> +continue> +for (j = 0; j < n_other_mask[i]; j++)> +{> 
> +print "#define MASK_" other_masks[i][j] " (1U << " other_masknum[i][""]++ 
> ")"> +}> +if (other_masknum[i][""] > 32)> +print "#error too many target 
> masks for" extra_target_vars[i]> +}> +>  for (var in masknum) {>  if (var != 
> "" && host_wide_int[var] == "yes") {>  print "#if 
> defined(HOST_BITS_PER_WIDE_INT) && " masknum[var] " > 
> HOST_BITS_PER_WIDE_INT"> @@ -457,6 +469,16 @@ for (i = 0; i < n_extra_masks; 
> i++) {>  print "#define TARGET_" extra_masks[i] \>        " ((target_flags & 
> MASK_" extra_masks[i] ") != 0)">  }> +for (i = 0; i < n_target_vars; i++)> 
> +{> +if (find_index(target_vars[i], extra_target_vars, n_extra_target_vars) 
> == n_extra_target_vars)> +continue> +for (j = 0; j < n_other_mask[i]; j++)> 
> +{> +print "#define TARGET_" other_masks[i][j] \> +      " ((" target_vars[i] 
> " & MASK_" other_masks[i][j] ") != 0)"> +}> +}>  print ""> >  for (i = 0; i < 
> n_opts; i++) {> --> 2.17.1

Reply via email to