summaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-09-30 09:53:43 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1993-09-30 09:53:43 +0000
commitb5d70b4f16576e5c34d806799ff7753059174c3b (patch)
tree18a2264104fdb1ab3e8d129ed1fceb036e86bc5c /gcc/fold-const.c
parentf698a3d1f02f759f8a91d54f066fa2a720aad5a8 (diff)
downloadgcc-b5d70b4f16576e5c34d806799ff7753059174c3b.tar.gz
(fold, case PLUS_EXPR, MINUS_EXPR): Properly handle case when ARG1
splits and VARSIGN is -1. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@5537 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 62ead45de86..4e6aad4a0ce 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -3691,6 +3691,13 @@ fold (expr)
if (split_tree (arg1, code, &var, &con, &varsign))
{
+ if (TREE_CONSTANT (arg1))
+ return t;
+
+ if (varsign == -1)
+ TREE_SET_CODE (t,
+ (code == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR));
+
/* EXPR is ARG0 +- (CON +- VAR). */
if (TREE_CODE (t) == MINUS_EXPR
&& operand_equal_p (var, arg0, 0))
@@ -3701,11 +3708,7 @@ 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;