* Claudiu Zissulescu <claz...@gmail.com> [2019-03-06 12:20:05 +0200]:

> xxxx-xx-xx  Claudiu Zissulescu  <claz...@synopsys.com>
> 
>       * config/arc/arc-protos.h (arc_register_move_cost): Remove.
>       * config/arc/arc.c (arc_register_move_cost): Re-purpose it to
>       implement target hook.
>       (arc_memory_move_cost): New function.
>       (TARGET_REGISTER_MOVE_COST): Define.
>       (TARGET_MEMORY_MOVE_COST): Likewise.
>       * config/arc/arc.h (REGISTER_MOVE_COST): Remove.
>       (MEMORY_MOVE_COST): Likewise.

This is fine.

Thanks,
Andrew
> ---
>  gcc/config/arc/arc-protos.h |  2 --
>  gcc/config/arc/arc.c        | 26 ++++++++++++++++++++++++--
>  gcc/config/arc/arc.h        | 11 -----------
>  3 files changed, 24 insertions(+), 15 deletions(-)
> 
> diff --git a/gcc/config/arc/arc-protos.h b/gcc/config/arc/arc-protos.h
> index 8f0f197f14a..ac0de6b2874 100644
> --- a/gcc/config/arc/arc-protos.h
> +++ b/gcc/config/arc/arc-protos.h
> @@ -68,8 +68,6 @@ extern bool arc_is_shortcall_p (rtx);
>  extern bool valid_brcc_with_delay_p (rtx *);
>  extern bool arc_ccfsm_cond_exec_p (void);
>  struct secondary_reload_info;
> -extern int arc_register_move_cost (machine_mode, enum reg_class,
> -                                enum reg_class);
>  extern rtx disi_highpart (rtx);
>  extern int arc_adjust_insn_length (rtx_insn *, int, bool);
>  extern int arc_corereg_hazard (rtx, rtx);
> diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
> index a3a013e90e1..50977704c45 100644
> --- a/gcc/config/arc/arc.c
> +++ b/gcc/config/arc/arc.c
> @@ -8686,9 +8686,11 @@ arc_preserve_reload_p (rtx in)
>         && !((INTVAL (XEXP (in, 1)) & 511)));
>  }
>  
> -int
> +/* Implement TARGET_REGISTER_MOVE_COST.  */
> +
> +static int
>  arc_register_move_cost (machine_mode,
> -                     enum reg_class from_class, enum reg_class to_class)
> +                     reg_class_t from_class, reg_class_t to_class)
>  {
>    /* Force an attempt to 'mov Dy,Dx' to spill.  */
>    if ((TARGET_ARC700 || TARGET_EM) && TARGET_DPFP
> @@ -11428,6 +11430,20 @@ arc_adjust_reg_alloc_order (void)
>      memcpy (reg_alloc_order, size_alloc_order, sizeof (size_alloc_order));
>  }
>  
> +/* Implement TARGET_MEMORY_MOVE_COST.  */
> +
> +static int
> +arc_memory_move_cost (machine_mode mode,
> +                   reg_class_t rclass ATTRIBUTE_UNUSED,
> +                   bool in ATTRIBUTE_UNUSED)
> +{
> +  if ((GET_MODE_SIZE (mode) <= UNITS_PER_WORD)
> +      || ((GET_MODE_SIZE (mode) <= UNITS_PER_WORD * 2) && TARGET_LL64))
> +    return 6;
> +
> +  return (2 * GET_MODE_SIZE (mode));
> +}
> +
>  #undef TARGET_USE_ANCHORS_FOR_SYMBOL_P
>  #define TARGET_USE_ANCHORS_FOR_SYMBOL_P arc_use_anchors_for_symbol_p
>  
> @@ -11443,6 +11459,12 @@ arc_adjust_reg_alloc_order (void)
>  #undef TARGET_HAVE_SPECULATION_SAFE_VALUE
>  #define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed
>  
> +#undef TARGET_REGISTER_MOVE_COST
> +#define TARGET_REGISTER_MOVE_COST arc_register_move_cost
> +
> +#undef TARGET_MEMORY_MOVE_COST
> +#define TARGET_MEMORY_MOVE_COST arc_memory_move_cost
> +
>  struct gcc_target targetm = TARGET_INITIALIZER;
>  
>  #include "gt-arc.h"
> diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
> index 90420a9d474..46ca2dde413 100644
> --- a/gcc/config/arc/arc.h
> +++ b/gcc/config/arc/arc.h
> @@ -925,17 +925,6 @@ arc_select_cc_mode (OP, X, Y)
>  
>  /* Costs.  */
>  
> -/* Compute extra cost of moving data between one register class
> -   and another.  */
> -#define REGISTER_MOVE_COST(MODE, CLASS, TO_CLASS) \
> -   arc_register_move_cost ((MODE), (CLASS), (TO_CLASS))
> -
> -/* Compute the cost of moving data between registers and memory.  */
> -/* Memory is 3 times as expensive as registers.
> -   ??? Is that the right way to look at it?  */
> -#define MEMORY_MOVE_COST(MODE,CLASS,IN) \
> -(GET_MODE_SIZE (MODE) <= UNITS_PER_WORD ? 6 : 12)
> -
>  /* The cost of a branch insn.  */
>  /* ??? What's the right value here?  Branches are certainly more
>     expensive than reg->reg moves.  */
> -- 
> 2.20.1
> 

Reply via email to