aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-03-19 06:29:40 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-03-19 06:29:40 -0500
commitfb5c8ce64aa4c73336fe3abee7ff193cc85d5d73 (patch)
tree71d7b7ef687905daf61adeb99118106059d83ae3
parentb385aeda3f7428271d3b2ef8e6ff3801cffd3f95 (diff)
downloadgcc-fb5c8ce64aa4c73336fe3abee7ff193cc85d5d73.zip
gcc-fb5c8ce64aa4c73336fe3abee7ff193cc85d5d73.tar.gz
gcc-fb5c8ce64aa4c73336fe3abee7ff193cc85d5d73.tar.bz2
(simplify_plus_minus): Count CONSTs coming in and going out...
(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
-rw-r--r--gcc/cse.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 207c51d..1f44d88 100644
--- 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;