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

--- Comment #35 from Dominik Vogt <vogt at linux dot vnet.ibm.com> ---
Looks like the extra condition in that patch is still not good enough:

--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -945,6 +945,12 @@ match_reload (signed char out, signed char *ins, enum
reg_c
        = (ins[1] < 0 && REG_P (in_rtx)
           && (int) REGNO (in_rtx) < lra_new_regno_start
           && find_regno_note (curr_insn, REG_DEAD, REGNO (in_rtx))
+          /* We can not use the same value if the pseudo is mentioned
+             in the output, e.g. as an address part in memory,
+             becuase output reload will actually extend the pseudo
+             liveness.  We don't care about eliminable hard regs here
+             as we are interesting only in pseudos.  */
+          && (out < 0 || regno_use_in (REGNO (in_rtx), out_rtx) == NULL_RTX)
           ? lra_create_new_reg (inmode, in_rtx, goal_class, "")
           : lra_create_new_reg_with_unique_value (outmode, out_rtx,
                                                   goal_class, ""));

Reply via email to