On Mon, May 8, 2023 at 3:39 PM Takayuki 'January June' Suwa via
Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
>
> gcc/ChangeLog:
>
>         * config/xtensa/constraints.md (R, T, U):
>         Change define_constraint to define_memory_constraint.
>         * config/xtensa/xtensa.cc
>         (xtensa_lra_p, TARGET_LRA_P): Remove.
>         (xtensa_emit_move_sequence): Remove "if (reload_in_progress)"
>         clause as it can no longer be true.
>         (xtensa_output_integer_literal_parts): Consider 16-bit wide
>         constants.
>         (xtensa_legitimate_constant_p): Add short-circuit path for
>         integer load instructions.
>         * config/xtensa/xtensa.md (movsf): Use can_create_pseudo_p()
>         rather reload_in_progress and reload_completed.
>         * config/xtensa/xtensa.opt (mlra): Remove.
> ---
>  gcc/config/xtensa/constraints.md | 26 ++++++++------------------
>  gcc/config/xtensa/xtensa.cc      | 26 +++++---------------------
>  gcc/config/xtensa/xtensa.md      |  2 +-
>  gcc/config/xtensa/xtensa.opt     |  4 ----
>  4 files changed, 14 insertions(+), 44 deletions(-)
>
> diff --git a/gcc/config/xtensa/constraints.md 
> b/gcc/config/xtensa/constraints.md
> index 53e4d0d8dd1..9b31e162941 100644
> --- a/gcc/config/xtensa/constraints.md
> +++ b/gcc/config/xtensa/constraints.md
> @@ -123,29 +123,19 @@
>        (and (match_code "const_int")
>            (match_test "! xtensa_split1_finished_p ()"))))
>
> -;; Memory constraints.  Do not use define_memory_constraint here.  Doing so
> -;; causes reload to force some constants into the constant pool, but since
> -;; the Xtensa constant pool can only be accessed with L32R instructions, it
> -;; is always better to just copy a constant into a register.  Instead, use
> -;; regular constraints but add a check to allow pseudos during reload.
> +;; Memory constraints.
>
> -(define_constraint "R"
> +(define_memory_constraint "R"
>   "Memory that can be accessed with a 4-bit unsigned offset from a register."
> - (ior (and (match_code "mem")
> -          (match_test "smalloffset_mem_p (op)"))
> -      (and (match_code "reg")
> -          (match_test "reload_in_progress
> -                       && REGNO (op) >= FIRST_PSEUDO_REGISTER"))))
> + (and (match_code "mem")
> +      (match_test "smalloffset_mem_p (op)")))
>
> -(define_constraint "T"
> +(define_memory_constraint "T"
>   "Memory in a literal pool (addressable with an L32R instruction)."
>   (and (match_code "mem")
>        (match_test "!TARGET_CONST16 && constantpool_mem_p (op)")))
>
> -(define_constraint "U"
> +(define_memory_constraint "U"
>   "Memory that is not in a literal pool."
> - (ior (and (match_code "mem")
> -          (match_test "! constantpool_mem_p (op)"))
> -      (and (match_code "reg")
> -          (match_test "reload_in_progress
> -                       && REGNO (op) >= FIRST_PSEUDO_REGISTER"))))
> + (and (match_code "mem")
> +      (match_test "! constantpool_mem_p (op)")))
> diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc
> index 9e5d314e143..f4434ec6e2c 100644
> --- a/gcc/config/xtensa/xtensa.cc
> +++ b/gcc/config/xtensa/xtensa.cc
> @@ -190,7 +190,6 @@ static void xtensa_output_mi_thunk (FILE *file, tree 
> thunk ATTRIBUTE_UNUSED,
>                                     HOST_WIDE_INT delta,
>                                     HOST_WIDE_INT vcall_offset,
>                                     tree function);
> -static bool xtensa_lra_p (void);
>
>  static rtx xtensa_delegitimize_address (rtx);
>
> @@ -286,9 +285,6 @@ static rtx xtensa_delegitimize_address (rtx);
>  #undef TARGET_CANNOT_FORCE_CONST_MEM
>  #define TARGET_CANNOT_FORCE_CONST_MEM xtensa_cannot_force_const_mem
>
> -#undef TARGET_LRA_P
> -#define TARGET_LRA_P xtensa_lra_p
> -
>  #undef TARGET_LEGITIMATE_ADDRESS_P
>  #define TARGET_LEGITIMATE_ADDRESS_P    xtensa_legitimate_address_p
>
> @@ -1266,14 +1262,6 @@ xtensa_emit_move_sequence (rtx *operands, machine_mode 
> mode)
>
>    operands[1] = xtensa_copy_incoming_a7 (operands[1]);
>
> -  /* During reload we don't want to emit (subreg:X (mem:Y)) since that
> -     instruction won't be recognized after reload, so we remove the
> -     subreg and adjust mem accordingly.  */
> -  if (reload_in_progress)
> -    {
> -      operands[0] = fixup_subreg_mem (operands[0]);
> -      operands[1] = fixup_subreg_mem (operands[1]);
> -    }
>    return 0;
>  }
>
> @@ -3196,7 +3184,7 @@ xtensa_output_integer_literal_parts (FILE *file, rtx x, 
> int size)
>        fputs (", ", file);
>        xtensa_output_integer_literal_parts (file, second, size / 2);
>      }
> -  else if (size == 4)
> +  else if (size == 4 || size == 2)
>      {
>        output_addr_const (file, x);
>      }
> @@ -4876,6 +4864,10 @@ xtensa_trampoline_init (rtx m_tramp, tree fndecl, rtx 
> chain)
>  static bool
>  xtensa_legitimate_constant_p (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
>  {
> +  if (CONST_INT_P (x))
> +    return TARGET_AUTO_LITPOOLS || TARGET_CONST16
> +          || xtensa_simm12b (INTVAL (x));
> +
>    return !xtensa_tls_referenced_p (x);
>  }
>
> @@ -5317,12 +5309,4 @@ xtensa_delegitimize_address (rtx op)
>    return op;
>  }
>
> -/* Implement TARGET_LRA_P.  */
> -
> -static bool
> -xtensa_lra_p (void)
> -{
> -  return TARGET_LRA;
> -}
> -
>  #include "gt-xtensa.h"
> diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
> index 3521fa33b47..195515d9427 100644
> --- a/gcc/config/xtensa/xtensa.md
> +++ b/gcc/config/xtensa/xtensa.md
> @@ -1268,7 +1268,7 @@
>    if ((!register_operand (operands[0], SFmode)
>         && !register_operand (operands[1], SFmode))
>        || (FP_REG_P (xt_true_regnum (operands[0]))
> -         && !(reload_in_progress | reload_completed)
> +         && can_create_pseudo_p ()
>           && (constantpool_mem_p (operands[1])
>               || CONSTANT_P (operands[1]))))
>      operands[1] = force_reg (SFmode, operands[1]);
> diff --git a/gcc/config/xtensa/xtensa.opt b/gcc/config/xtensa/xtensa.opt
> index f16b53bf409..8574c12198e 100644
> --- a/gcc/config/xtensa/xtensa.opt
> +++ b/gcc/config/xtensa/xtensa.opt
> @@ -37,10 +37,6 @@ mextra-l32r-costs=
>  Target RejectNegative Joined UInteger Var(xtensa_extra_l32r_costs) Init(0)
>  Set extra memory access cost for L32R instruction, in clock-cycle units.
>
> -mlra

If they were in any released compiler options should be kept
(doing nothing) for backward compatibility.  Use for example

mlra
Target WarnRemoved
Removed in GCC 14.  This switch has no effect.

or

mlra
Target Ignore
Does nothing.  Preserved for backward compatibility.

which doesn't inform the user (I think that's the better choice here).

> -Target Mask(LRA)
> -Use LRA instead of reload (transitional).
> -
>  mtarget-align
>  Target
>  Automatically align branch targets to reduce branch penalties.
> --
> 2.30.2

Reply via email to