(copy_rtx): A CONST can be shared if it contains a SYMBOL_REF.
authorRichard Kenner <kenner@gcc.gnu.org>
Sun, 27 Dec 1992 11:53:32 +0000 (06:53 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 27 Dec 1992 11:53:32 +0000 (06:53 -0500)
A SCRATCH must be shared.
A MEM may be shared if it is at a constant address.

From-SVN: r2924

gcc/rtl.c

index 9bb704c4fceca8bdd8784272889a75a4fbb0c6de..8017df1b2c8eefb880dabcac7ee8b6245b34e763 100644 (file)
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -264,7 +264,23 @@ copy_rtx (orig)
     case CODE_LABEL:
     case PC:
     case CC0:
+    case SCRATCH:
+      /* SCRATCH must be shared because they represent distinct values. */
       return orig;
+
+    case CONST:
+      /* CONST can be shared if it contains a SYMBOL_REF.  If it contains
+        a LABEL_REF, it isn't sharable.  */
+      if (GET_CODE (XEXP (orig, 0)) == PLUS
+         && GET_CODE (XEXP (XEXP (orig, 0), 0)) == SYMBOL_REF
+         && GET_CODE (XEXP (XEXP (orig, 0), 1)) == CONST_INT)
+       return orig;
+      break;
+
+    case MEM:
+      if (CONSTANT_ADDRESS_P (XEXP (orig, 0)))
+       return orig;
+      break;
     }
 
   copy = rtx_alloc (code);