This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: fix reload failures on alpha and ppc64


Richard Henderson wrote:
(2) there's a mismatch between the place
that decides when we're going to skip reloading an insn, and the place
that decides when we're going to delete an insn.  The former, at

          /* Skip insns that only set an equivalence.  */
          if (set && REG_P (SET_DEST (set))
              && reg_renumber[REGNO (SET_DEST (set))] < 0
              && reg_equiv_constant[REGNO (SET_DEST (set))])
            continue;

in calculate_needs_all_insns, and the later at

  for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
    {
      if (reg_renumber[i] < 0 && reg_equiv_init[i] != 0)
        {
          rtx list;
          for (list = reg_equiv_init[i]; list; list = XEXP (list, 1))

in reload.

This only tries to address point 1 -- losing track of the initialization
insn. Which should be enough to suppress the observable failure; I'll let Bernd figure out what he wants to do about the mismatch when he gets
back next week.

Probably the first piece of code should check reg_equiv_init so that it skips all insns that will be deleted later. However, since it currently doesn't seem to be a problem I'd prefer not to touch that code again unless necessary :-)



Bernd



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]