(fold): Handle CONJ_EXPR.
authorRichard Stallman <rms@gnu.org>
Sun, 18 Jul 1993 20:24:45 +0000 (20:24 +0000)
committerRichard Stallman <rms@gnu.org>
Sun, 18 Jul 1993 20:24:45 +0000 (20:24 +0000)
From-SVN: r4938

gcc/fold-const.c

index de5630bf0f30d1e0e77b287e358056bca99e0a77..5b9d8511cbe0b7d5aa53ff162334f42fdac8ecbc 100644 (file)
@@ -3485,6 +3485,30 @@ fold (expr)
        return build1 (ABS_EXPR, type, TREE_OPERAND (arg0, 0));
       return t;
 
+    case CONJ_EXPR:
+      if (TREE_CODE (TREE_TYPE (arg0)) != COMPLEX_TYPE)
+       return arg0;
+      else if (TREE_CODE (arg0) == COMPLEX_EXPR)
+       return build (COMPLEX_EXPR, TREE_TYPE (arg0),
+                     TREE_OPERAND (arg0, 0),
+                     fold (build1 (NEGATE_EXPR,
+                                   TREE_TYPE (TREE_TYPE (arg0)),
+                                   TREE_OPERAND (arg0, 1))));
+      else if (TREE_CODE (arg0) == COMPLEX_CST)
+       return build_complex (TREE_OPERAND (arg0, 0),
+                             fold (build1 (NEGATE_EXPR,
+                                           TREE_TYPE (TREE_TYPE (arg0)),
+                                           TREE_OPERAND (arg0, 1))));
+      else if (TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR)
+       return fold (build (TREE_CODE (arg0), type,
+                           fold (build1 (CONJ_EXPR, type,
+                                         TREE_OPERAND (arg0, 0))),
+                           fold (build1 (CONJ_EXPR,
+                                         type, TREE_OPERAND (arg0, 1)))));
+      else if (TREE_CODE (arg0) == CONJ_EXPR)
+       return TREE_OPERAND (arg0, 0);
+      return t;
+
     case BIT_NOT_EXPR:
       if (wins)
        {