On 12/19/25 1:18 PM, Alexandre Oliva wrote:
On Dec 19, 2025, Vladimir Makarov <[email protected]> wrote:

On 12/19/25 11:06 AM, Jakub Jelinek wrote:
On Fri, Dec 19, 2025 at 04:33:04PM +0100, Tobias Burnus wrote:
Vladimir Makarov wrote:
So the patch has sense.  You can commit it into the trunk.  Thank you
for the patch, Alex.
This patch unfortunately breaks GCN bootstrap,
cf. https://gcc.gnu.org/PR123223
x86_64 and i686-linux bootstrap as well, all with
--enable-checking=yes,rtl,extra
REGNO is used multiple times in the patch without making sure
it is applied on REG_P only.
Sorry for the troubles.  I'll fix it as soon as possible or revert
Alex's patch if I can not do it today.
Ugh, sorry, it looks like this patch wasn't quite as baked as I believed :-(

The following patchlet should fix that.  I'm giving it a spin and then
I'll push it as obvious.

It happens, Alex  My mistake too as I checked mostly the patch idea not details.

I've just committed analogous patch.

So please don't border about working on this issue.


diff --git a/gcc/lra-constraints.cc b/gcc/lra-constraints.cc
index 910f3fba8f478..6cf6e40a09a99 100644
--- a/gcc/lra-constraints.cc
+++ b/gcc/lra-constraints.cc
@@ -1244,8 +1244,10 @@ match_reload (signed char out, signed char *ins, signed 
char *outs,
    /* See a comment for the input operand above.  */
    narrow_reload_pseudo_class (out_rtx, goal_class);
    if (find_reg_note (curr_insn, REG_UNUSED, out_rtx) == NULL_RTX
-      && !ira_former_scratch_p (REGNO (SUBREG_P (out_rtx)
-                                      ? SUBREG_REG (out_rtx) : out_rtx)))
+      && !((REG_P (out_rtx)
+           || (SUBREG_P (out_rtx) && REG_P (SUBREG_REG (out_rtx))))
+          && ira_former_scratch_p (REGNO (SUBREG_P (out_rtx)
+                                          ? SUBREG_REG (out_rtx) : out_rtx))))
      {
        reg = SUBREG_P (out_rtx) ? SUBREG_REG (out_rtx) : out_rtx;
        start_sequence ();
@@ -4861,7 +4863,7 @@ curr_insn_transform (bool check_only_p)
              && find_reg_note (curr_insn, REG_UNUSED, old) == NULL_RTX
              /* OLD can be an equivalent constant here.  */
              && !CONSTANT_P (old)
-             && !ira_former_scratch_p (REGNO (old)))
+             && !(REG_P (old) && ira_former_scratch_p (REGNO (old))))
            {
              start_sequence ();
              lra_emit_move (type == OP_INOUT ? copy_rtx (old) : old, new_reg);



Reply via email to