OSDN Git Service

* fold-const.c (fold): Even with otherwise constant trees, look for
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jun 1998 22:05:49 +0000 (22:05 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Jun 1998 22:05:49 +0000 (22:05 +0000)
        opportunities to combine integer constants.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@20392 138bc75d-0d04-0410-961f-82ee72b054a4

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)