]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
explow.c (plus_constant_wide): Don't immediately return with result of recursive...
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Tue, 8 Dec 1998 14:35:18 +0000 (14:35 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Tue, 8 Dec 1998 14:35:18 +0000 (14:35 +0000)
* explow.c (plus_constant_wide): Don't immediately return with
result of recursive call.

From-SVN: r24195

gcc/ChangeLog
gcc/explow.c

index f75a603edac38e30b3eebf22a40326252ea74715..6719ac7c69f193d7a703ce412b53f511c5124320 100644 (file)
@@ -1,3 +1,8 @@
+Tue Dec  8 22:33:18 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * explow.c (plus_constant_wide): Don't immediately return with
+       result of recursive call.
+
 Tue Dec  8 15:32:56 EST 1998  Andrew MacLeod  <amacleod@cygnus.com>
 
        * eh-common.h (struct eh_context): Add table_index for rethrows.
index e4ef27dc37f7b7a0b552acf8809486375338a80e..c11ec9130b8b7479bb77b7dadfd9b4bab000aa2c 100644 (file)
@@ -116,19 +116,32 @@ plus_constant_wide (x, c)
         integer.  For a constant term that is not an explicit integer,
         we cannot really combine, but group them together anyway.  
 
-        Use a recursive call in case the remaining operand is something
-        that we handle specially, such as a SYMBOL_REF.  */
+        Restart or use a recursive call in case the remaining operand is
+        something that we handle specially, such as a SYMBOL_REF.
+
+        We may not immediately return from the recursive call here, lest
+        all_constant gets lost.  */
 
       if (GET_CODE (XEXP (x, 1)) == CONST_INT)
-       return plus_constant (XEXP (x, 0), c + INTVAL (XEXP (x, 1)));
+       {
+         c += INTVAL (XEXP (x, 1));
+         x = XEXP (x, 0);
+         goto restart;
+       }
       else if (CONSTANT_P (XEXP (x, 0)))
-       return gen_rtx_PLUS (mode,
-                            plus_constant (XEXP (x, 0), c),
-                            XEXP (x, 1));
+       {
+         x = gen_rtx_PLUS (mode,
+                           plus_constant (XEXP (x, 0), c),
+                           XEXP (x, 1));
+         c = 0;
+       }
       else if (CONSTANT_P (XEXP (x, 1)))
-       return gen_rtx_PLUS (mode,
-                            XEXP (x, 0),
-                            plus_constant (XEXP (x, 1), c));
+       {
+         x = gen_rtx_PLUS (mode,
+                           XEXP (x, 0),
+                           plus_constant (XEXP (x, 1), c));
+         c = 0;
+       }
       break;
       
     default: