fold-const.c (fold): Even with otherwise constant trees...
authorRichard Henderson <rth@cygnus.com>
Tue, 9 Jun 1998 22:05:49 +0000 (15:05 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 9 Jun 1998 22:05:49 +0000 (15:05 -0700)
        * fold-const.c (fold): Even with otherwise constant trees, look for
        opportunities to combine integer constants.

From-SVN: r20392

gcc/ChangeLog
gcc/fold-const.c

index 1f9f640..072b82a 100644 (file)
@@ -1,3 +1,8 @@
+Tue Jun  9 22:05:34 1998  Richard Henderson  <rth@cygnus.com>
+
+       * fold-const.c (fold): Even with otherwise constant trees, look for
+       opportunities to combine integer constants.
+
 Wed Jun  3 23:41:24 EDT 1998  John Wehle  (john@feith.com)
 
        * i386.md (movsfcc, movdfcc, movxfcc): The floating point
index 5daa253..18e8385 100644 (file)
@@ -4433,9 +4433,12 @@ fold (expr)
                    return convert (TREE_TYPE (t), con);
                    
                  /* If ARG0 is a constant, don't change things around;
-                    instead keep all the constant computations together.  */
+                    instead keep all the constant computations together.
+                    Notice, however, if we can merge integer constants.  */
 
-                 if (TREE_CONSTANT (arg0))
+                 if (TREE_CONSTANT (arg0)
+                     && !(TREE_CODE (con) == INTEGER_CST
+                          && TREE_CODE (arg1) == INTEGER_CST))
                    return t;
 
                  /* Otherwise return (CON +- ARG1) - VAR.  */
@@ -4450,9 +4453,12 @@ fold (expr)
                    return convert (TREE_TYPE (t), con);
                    
                  /* If ARG0 is a constant, don't change things around;
-                    instead keep all the constant computations together.  */
+                    instead keep all the constant computations together.
+                    Notice, however, if we can merge integer constants.  */
 
-                 if (TREE_CONSTANT (arg0))
+                 if (TREE_CONSTANT (arg0)
+                     && !(TREE_CODE (con) == INTEGER_CST
+                          && TREE_CODE (arg1) == INTEGER_CST))
                    return t;
 
                  /* Otherwise return VAR +- (ARG1 +- CON).  */
@@ -4481,7 +4487,13 @@ fold (expr)
 
          if (split_tree (arg1, code, &var, &con, &varsign))
            {
-             if (TREE_CONSTANT (arg1))
+             /* If ARG1 is a constant, don't change things around;
+                instead keep all the constant computations together.
+                Notice, however, if we can merge integer constants.  */
+
+             if (TREE_CONSTANT (arg1)
+                 && !(TREE_CODE (con) == INTEGER_CST
+                      && TREE_CODE (arg0) == INTEGER_CST))
                return t;
 
              if (varsign == -1)