(fold, case PLUS_EXPR, MINUS_EXPR): Properly handle case when ARG1
authorRichard Kenner <kenner@gcc.gnu.org>
Thu, 30 Sep 1993 09:53:43 +0000 (05:53 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 30 Sep 1993 09:53:43 +0000 (05:53 -0400)
splits and VARSIGN is -1.

From-SVN: r5537

gcc/fold-const.c

index 62ead45de86dee8471298fb9f2e8cf6b6e13a628..4e6aad4a0ceac863dd508641138dcf7efdcf4da5 100644 (file)
@@ -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;