diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-09-30 05:53:43 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-09-30 05:53:43 -0400 |
commit | cc5edac6734ea681c9fa9a36cbd9ceb8269877e0 (patch) | |
tree | 18a2264104fdb1ab3e8d129ed1fceb036e86bc5c /gcc | |
parent | a11826d1fcc30f9183e8c97ffd37c35a7d7e2891 (diff) | |
download | gcc-cc5edac6734ea681c9fa9a36cbd9ceb8269877e0.zip gcc-cc5edac6734ea681c9fa9a36cbd9ceb8269877e0.tar.gz gcc-cc5edac6734ea681c9fa9a36cbd9ceb8269877e0.tar.bz2 |
(fold, case PLUS_EXPR, MINUS_EXPR): Properly handle case when ARG1
splits and VARSIGN is -1.
From-SVN: r5537
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fold-const.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 62ead45..4e6aad4 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; |