From: Jim Wilson Date: Tue, 21 Dec 1993 18:25:26 +0000 (-0800) Subject: (replace_regs, case REG): Return copies of SUBREGs, to X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3eb8f14cbc240ac542ac954dccf0fe8569cc1c30;p=gcc.git (replace_regs, case REG): Return copies of SUBREGs, to avoid invalid sharing. From-SVN: r6253 --- diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 48aa6f9d688..486ef5f8d22 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -1662,7 +1662,14 @@ replace_regs (x, reg_map, nregs, replace_dest) case REG: /* Verify that the register has an entry before trying to access it. */ if (REGNO (x) < nregs && reg_map[REGNO (x)] != 0) - return reg_map[REGNO (x)]; + { + /* SUBREGs can't be shared. Always return a copy to ensure that if + this replacement occurs more than once then each instance will + get distinct rtx. */ + if (GET_CODE (reg_map[REGNO (x)]) == SUBREG) + return copy_rtx (reg_map[REGNO (x)]); + return reg_map[REGNO (x)]; + } return x; case SUBREG: