]> gcc.gnu.org Git - gcc.git/commitdiff
(simplify_plus_minus): Count CONSTs coming in and going out...
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 19 Mar 1993 11:29:40 +0000 (06:29 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 19 Mar 1993 11:29:40 +0000 (06:29 -0500)
(simplify_plus_minus): Count CONSTs coming in and going out; we have
simplified things if we have more CONSTs going out even if we have the
same number of total terms.

From-SVN: r3787

gcc/cse.c

index 207c51daaddc1a18e3b8625a19a1a84c65b56d28..1f44d880884b8534538c965e36bb4241daba9e16 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -3929,9 +3929,9 @@ simplify_plus_minus (code, mode, op0, op1)
   rtx ops[8];
   int negs[8];
   rtx result, tem;
-  int n_ops = 2, input_ops = 2;
-  int i, j, k;
+  int n_ops = 2, input_ops = 2, input_consts = 0, n_consts = 0;
   int first = 1, negate = 0, changed;
+  int i, j;
 
   bzero (ops, sizeof ops);
   
@@ -3969,6 +3969,7 @@ simplify_plus_minus (code, mode, op0, op1)
 
          case CONST:
            ops[i] = XEXP (ops[i], 0);
+           input_consts++;
            changed = 1;
            break;
 
@@ -4035,17 +4036,20 @@ simplify_plus_minus (code, mode, op0, op1)
 
   /* Pack all the operands to the lower-numbered entries and give up if
      we didn't reduce the number of operands we had.  Make sure we
-     count a CONST as two operands.  */
+     count a CONST as two operands.  If we have the same number of
+     operands, but have made more CONSTs than we had, this is also
+     an improvement, so accept it.  */
 
-  for (i = 0, j = 0, k = 0; j < n_ops; j++)
+  for (i = 0, j = 0; j < n_ops; j++)
     if (ops[j] != 0)
       {
        ops[i] = ops[j], negs[i++] = negs[j];
        if (GET_CODE (ops[j]) == CONST)
-         k++;
+         n_consts++;
       }
 
-  if (i + k >= input_ops)
+  if (i + n_consts > input_ops
+      || (i + n_consts == input_ops && n_consts <= input_consts))
     return 0;
 
   n_ops = i;
This page took 0.075191 seconds and 5 git commands to generate.