From ca86a57ae73f553818ebadb894d422930648a6e1 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sat, 20 Mar 1993 20:49:22 -0500 Subject: [PATCH] (fold, case PLUS_EXPR): Don't associate apart a constant operand. From-SVN: r3807 --- gcc/fold-const.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/gcc/fold-const.c b/gcc/fold-const.c index ec04f44ae65..97cb12374ce 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3424,6 +3424,12 @@ fold (expr) if (code == PLUS_EXPR && operand_equal_p (var, arg1, 0)) return convert (TREE_TYPE (t), con); + /* If ARG0 is a constant, don't change things around; + instead keep all the constant computations together. */ + + if (TREE_CONSTANT (arg0)) + return t; + /* Otherwise return (CON +- ARG1) - VAR. */ TREE_SET_CODE (t, MINUS_EXPR); TREE_OPERAND (t, 1) = var; @@ -3437,6 +3443,12 @@ fold (expr) if (code == MINUS_EXPR && operand_equal_p (var, arg1, 0)) return convert (TREE_TYPE (t), con); + /* If ARG0 is a constant, don't change things around; + instead keep all the constant computations together. */ + + if (TREE_CONSTANT (arg0)) + return t; + /* Otherwise return VAR +- (ARG1 +- CON). */ TREE_OPERAND (t, 1) = tem = fold (build (code, TREE_TYPE (t), arg1, con)); @@ -3464,9 +3476,6 @@ fold (expr) if (split_tree (arg1, code, &var, &con, &varsign)) { /* EXPR is ARG0 +- (CON +- VAR). */ - if (varsign == -1) - TREE_SET_CODE (t, - (code == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR)); if (TREE_CODE (t) == MINUS_EXPR && operand_equal_p (var, arg0, 0)) { @@ -3476,6 +3485,11 @@ fold (expr) return fold (build1 (NEGATE_EXPR, TREE_TYPE (t), convert (TREE_TYPE (t), con))); } + if (TREE_CONSTANT (arg1)) + return t; + if (varsign == -1) + TREE_SET_CODE (t, + (code == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR)); TREE_OPERAND (t, 0) = fold (build (code, TREE_TYPE (t), arg0, con)); TREE_OPERAND (t, 1) = var; -- 2.30.2