Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!tut.cis.ohio-state.edu!SUN.COM!tiemann From: tiemann@SUN.COM (Michael Tiemann) Newsgroups: gnu.g++.bug Subject: GNU C++ on Sparc Message-ID: <8909082358.AA05146@teacake.sun.com> Date: 8 Sep 89 23:58:50 GMT Sender: daemon@tut.cis.ohio-state.edu Reply-To: tiemann@lurch.stanford.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 41 You need to put this patch into combine.c in order to compile Fix.cc: Return-Path: Date: Fri, 8 Sep 89 19:15:06 EDT From: rms@ai.mit.edu To: tiemann@lurch.stanford.edu In-Reply-To: Michael Tiemann's message of Fri, 8 Sep 89 10:47:21 PDT <8909081747.AA02901@teacake.sun.com> Subject: combine.c bug Do you need more information than this? It was enough, this time. Since the whole point is just an optimization, it isn't crucial what is done when i3 is not a SET. So try this (and delete the old declaration of i3dest): && XEXP (XVECEXP (PATTERN (i3), 0, i), 0) == i1dest) return 0; } /* If it is better that two different modes keep two different pseudos, avoid combining them. */ + if (GET_CODE (PATTERN (i3)) == SET) + { ! rtx i3dest = SET_DEST (PATTERN (i3)); ! while (GET_CODE (i3dest) == SUBREG ! || GET_CODE (i3dest) == STRICT_LOW_PART ! || GET_CODE (i3dest) == SIGN_EXTRACT ! || GET_CODE (i3dest) == ZERO_EXTRACT) ! i3dest = SUBREG_REG (i3dest); ! ! if (SET_SRC (PATTERN (i3)) == i2dest ! && GET_CODE (i3dest) == REG ! && ! MODES_TIEABLE_P (GET_MODE (i2dest), GET_MODE (i3dest))) ! return 0; ! } /* If I2 contains anything volatile, reject, unless nothing volatile comes between it and I3. */ if (volatile_refs_p (PATTERN (i2))) Michael