Path: utzoo!telly!ddsw1!lll-winken!killer!mit-eddie!bloom-beacon!apple!rutgers!tut.cis.ohio-state.edu!WHEATIES.AI.MIT.EDU!rms From: rms@WHEATIES.AI.MIT.EDU (Richard Stallman) Newsgroups: gnu.gcc.bug Subject: bug in m68k gcc 1.29 Message-ID: <8810110818.AA00287@sugar-bombs.ai.mit.edu> Date: 11 Oct 88 08:18:49 GMT References: <8810102049.AA13844@moose.cita.toronto.edu> Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 34 I think this change in push_reload (reload.c) fixes that bug. Please try it. (out != 0 && MATCHES (reload_out[i], out) && (in == 0 || reload_in[i] == 0 || MATCHES (reload_in[i], in))))) break; ! /* Reloading a plain reg for input can match a reload to postincrement ! that reg, since the postincrement's value is the right value. ! Likewise, it can match a preincrement reload, since we regard ! the preincrementation as happening before any ref in this insn ! to that register. */ ! for (i = 0; i < n_reloads; i++) ! if (reload_reg_class[i] == class ! && reload_strict_low[i] == strict_low ! && out == 0 && reload_out[i] == 0 ! && ((GET_CODE (in) == REG ! && (GET_CODE (reload_in[i]) == POST_INC ! || GET_CODE (reload_in[i]) == POST_DEC ! || GET_CODE (reload_in[i]) == PRE_INC ! || GET_CODE (reload_in[i]) == PRE_DEC) ! && MATCHES (XEXP (reload_in[i], 0), in)) ! || ! (GET_CODE (reload_in[i]) == REG ! && (GET_CODE (in) == POST_INC ! || GET_CODE (in) == POST_DEC ! || GET_CODE (in) == PRE_INC ! || GET_CODE (in) == PRE_DEC) ! && MATCHES (XEXP (in, 0), reload_in[i])))) ! break; if (i == n_reloads) { /* We found no existing reload suitable for re-use. So add an additional reload. */