https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95442

Vladimir Makarov <vmakarov at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vmakarov at gcc dot gnu.org

--- Comment #3 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> The code now does:
>   if (find_reg_note (curr_insn, REG_UNUSED, out_rtx) == NULL_RTX)
>     {
>       reg = SUBREG_P (out_rtx) ? SUBREG_REG (out_rtx) : out_rtx;
>       start_sequence ();
>       /* If we had strict_low_part, use it also in reload to keep other
>          parts unchanged but do it only for regs as strict_low_part
>          has no sense for memory and probably there is no insn pattern
>          to match the reload insn in memory case.  */
>       if (out >= 0 && curr_static_id->operand[out].strict_low && REG_P (reg))
>         out_rtx = gen_rtx_STRICT_LOW_PART (VOIDmode, out_rtx);
>       lra_emit_move (out_rtx, copy_rtx (new_out_reg));
>       emit_insn (*after);
>       *after = end_sequence ();
>     }
> 
> 
> Do you have a testcase for this issue/?

I believe it is an artifact of wrong DEAD and UNUSED notes generation by LRA. 
I doubt that LRA now generates one REG_DEAD for output.  I believe it was fixed
long ago by https://gcc.gnu.org/pipermail/gcc-bugs/2024-December/891716.html
for PR117248.

  In any case I checked the only REG_DEAD generation for output.  I did not
find such case on all x86-64 tests and bootstrap. So I think this PR has been
solved.

Reply via email to