From 56b6134d8cf6c93e24bf17b7f80610029274188d Mon Sep 17 00:00:00 2001
From: janis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 6 Feb 2002 22:13:01 +0000
Subject: [PATCH] 	* loop.c (remove_constant_addition): Avoid clobbering
 a shared 	CONST expression.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49556 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog |  6 ++++++
 gcc/loop.c    | 13 ++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 778b0d7c6213..6b413d62b1cc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/loop.c b/gcc/loop.c
index 0067e7490fd4..e0847a8c32f7 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -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);
-- 
GitLab