loop.c (remove_constant_addition): Avoid clobbering a shared CONST expression.
authorJanis Johnson <janis187@us.ibm.com>
Wed, 6 Feb 2002 22:13:01 +0000 (22:13 +0000)
committerJanis Johnson <janis@gcc.gnu.org>
Wed, 6 Feb 2002 22:13:01 +0000 (22:13 +0000)
* loop.c (remove_constant_addition): Avoid clobbering a shared
CONST expression.

Co-Authored-By: Jan Hubicka <jh@suse.cz>
From-SVN: r49556

gcc/ChangeLog
gcc/loop.c

index 778b0d7c6213d08f7653101f98753ba5c90aaf01..6b413d62b1ccd6c61022c305f68d283879b44967 100644 (file)
@@ -1,3 +1,9 @@
+2002-02-06  Janis Johnson  <janis187@us.ibm.com>
+           Jan Hubicka  <jh@suse.cz>
+
+       * loop.c (remove_constant_addition): Avoid clobbering a shared
+       CONST expression.
+
 2002-02-06  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * config.gcc (s390x-*-linux*): Add t-linux64 makefile fragment.
index 0067e7490fd4f7677251123c2600b9907c6daabf..e0847a8c32f7e18df059682727ff594444f90265 100644 (file)
@@ -3683,8 +3683,19 @@ remove_constant_addition (x)
   HOST_WIDE_INT addval = 0;
   rtx exp = *x;
 
+  /* Avoid clobbering a shared CONST expression.  */
   if (GET_CODE (exp) == CONST)
-    exp = XEXP (exp, 0);
+    {
+      if (GET_CODE (XEXP (exp, 0)) == PLUS
+         && GET_CODE (XEXP (XEXP (exp, 0), 0)) == SYMBOL_REF
+         && GET_CODE (XEXP (XEXP (exp, 0), 1)) == CONST_INT)
+       {
+         *x = XEXP (XEXP (exp, 0), 0);
+         return INTVAL (XEXP (XEXP (exp, 0), 1));
+       }
+      return 0;
+    }
+
   if (GET_CODE (exp) == CONST_INT)
     {
       addval = INTVAL (exp);