rs6000.c (rs6000_frame_related): Avoid unwanted sharing of hard registers.
authorJeff Law <law@redhat.com>
Fri, 14 Jun 2002 14:44:33 +0000 (08:44 -0600)
committerJeff Law <law@gcc.gnu.org>
Fri, 14 Jun 2002 14:44:33 +0000 (08:44 -0600)
        * rs6000.c (rs6000_frame_related): Avoid unwanted sharing
        of hard registers.

From-SVN: r54615

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index b5303fc11c4b8accaad8017ef4dc2e2d2fa008a7..0109f95e15afc8ece51414d358e2e19d9ba69dce 100644 (file)
@@ -1,3 +1,8 @@
+2002-06-13  Jeffrey Law  <law@redhat.com>
+
+       * rs6000.c (rs6000_frame_related): Avoid unwanted sharing
+       of hard registers.
+
 2002-06-14  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * Makefile.in (libgcc.mk): Depend on specs.
index 00f9aa76754fa65fddff62fcb94cec0ec7becece..d9501e6d74e59a7d56649ec2444fdc1e161fd565 100644 (file)
@@ -8666,6 +8666,14 @@ rs6000_frame_related (insn, reg, val, reg2, rreg)
 {
   rtx real, temp;
 
+  /* copy_rtx will not make unique copies of registers, so we need to
+     ensure we don't have unwanted sharing here.  */
+  if (reg == reg2)
+    reg = gen_raw_REG (GET_MODE (reg), REGNO (reg));
+
+  if (reg == rreg)
+    reg = gen_raw_REG (GET_MODE (reg), REGNO (reg));
+
   real = copy_rtx (PATTERN (insn));
 
   real = replace_rtx (real, reg,