From: Richard Biener <richard.guenther@gmail.com>
To: "Takayuki 'January June' Suwa" <jjsuwa_sys3175@yahoo.co.jp>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>, Max Filippov <jcmvbkbc@gmail.com>
Subject: Re: [PATCH] xtensa: Make full transition to LRA
Date: Mon, 8 May 2023 15:43:18 +0200 [thread overview]
Message-ID: <CAFiYyc1bO-zRAo6_T4D-5S2j89adAsu4b1WtpRDmg33mzAGZew@mail.gmail.com> (raw)
In-Reply-To: <91ddbcb5-67e2-2c30-a81e-6b20e3c8e1a4@yahoo.co.jp>
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
next prev parent reply other threads:[~2023-05-08 13:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <91ddbcb5-67e2-2c30-a81e-6b20e3c8e1a4.ref@yahoo.co.jp>
2023-05-08 13:38 ` Takayuki 'January June' Suwa
2023-05-08 13:43 ` Richard Biener [this message]
2023-05-08 14:44 ` [PATCH v2] " Takayuki 'January June' Suwa
2023-05-08 22:26 ` Jeff Law
2023-05-10 9:10 ` [PATCH] " Max Filippov
2024-01-24 5:07 ` Max Filippov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAFiYyc1bO-zRAo6_T4D-5S2j89adAsu4b1WtpRDmg33mzAGZew@mail.gmail.com \
--to=richard.guenther@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jcmvbkbc@gmail.com \
--cc=jjsuwa_sys3175@yahoo.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).