match.pd: Implement simple complex operations cancelling.
authorRichard Biener <rguenther@suse.de>
Wed, 12 Nov 2014 13:45:48 +0000 (13:45 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 12 Nov 2014 13:45:48 +0000 (13:45 +0000)
2014-11-12  Richard Biener  <rguenther@suse.de>

* match.pd: Implement simple complex operations cancelling.
* fold-const.c (fold_unary_loc): Remove them here.

* gcc.dg/tree-ssa/ssa-fre-32.c: Disable forwprop.

From-SVN: r217421

gcc/ChangeLog
gcc/fold-const.c
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-32.c

index 8d52622b1bf76d73e35accc037ce782b1c5512fd..09cd2bdb8110088d65c8a7e48a71b843cc181a45 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-12  Richard Biener  <rguenther@suse.de>
+
+       * match.pd: Implement simple complex operations cancelling.
+       * fold-const.c (fold_unary_loc): Remove them here.
+
 2014-11-12  Joseph Myers  <joseph@codesourcery.com>
 
        * cppbuiltin.c (define_builtin_macros_for_compilation_flags):
index 756f469d0387a1ad5bca28ede7fbc229618395fc..82e24146d93a695f2edaeb6dc8210ee359264015 100644 (file)
@@ -7988,9 +7988,6 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
     case REALPART_EXPR:
       if (TREE_CODE (TREE_TYPE (arg0)) != COMPLEX_TYPE)
        return fold_convert_loc (loc, type, arg0);
-      if (TREE_CODE (arg0) == COMPLEX_EXPR)
-       return omit_one_operand_loc (loc, type, TREE_OPERAND (arg0, 0),
-                                TREE_OPERAND (arg0, 1));
       if (TREE_CODE (arg0) == COMPLEX_CST)
        return fold_convert_loc (loc, type, TREE_REALPART (arg0));
       if (TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR)
@@ -8031,9 +8028,6 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0)
     case IMAGPART_EXPR:
       if (TREE_CODE (TREE_TYPE (arg0)) != COMPLEX_TYPE)
        return build_zero_cst (type);
-      if (TREE_CODE (arg0) == COMPLEX_EXPR)
-       return omit_one_operand_loc (loc, type, TREE_OPERAND (arg0, 1),
-                                TREE_OPERAND (arg0, 0));
       if (TREE_CODE (arg0) == COMPLEX_CST)
        return fold_convert_loc (loc, type, TREE_IMAGPART (arg0));
       if (TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR)
@@ -13350,13 +13344,6 @@ fold_binary_loc (location_t loc,
          || (TREE_CODE (arg0) == INTEGER_CST
              && TREE_CODE (arg1) == INTEGER_CST))
        return build_complex (type, arg0, arg1);
-      if (TREE_CODE (arg0) == REALPART_EXPR
-         && TREE_CODE (arg1) == IMAGPART_EXPR
-         && TREE_TYPE (TREE_OPERAND (arg0, 0)) == type
-         && operand_equal_p (TREE_OPERAND (arg0, 0),
-                             TREE_OPERAND (arg1, 0), 0))
-       return omit_one_operand_loc (loc, type, TREE_OPERAND (arg0, 0),
-                                    TREE_OPERAND (arg1, 0));
       return NULL_TREE;
 
     case ASSERT_EXPR:
index 39abe25f276d5a69b05df84e871e12dc3024ca09..288be4c4006c8e70bdafc18308ef8188dfe0c885 100644 (file)
@@ -558,3 +558,15 @@ along with GCC; see the file COPYING3.  If not see
   /* Look through a sign-changing conversion.  */
   (if (TYPE_PRECISION (TREE_TYPE (@0)) == TYPE_PRECISION (type))
    (convert @0)))
+
+
+/* COMPLEX_EXPR and REALPART/IMAGPART_EXPR cancellations.  */
+(simplify
+ (complex (realpart @0) (imagpart @0))
+ @0)
+(simplify
+ (realpart (complex @0 @1))
+ @0)
+(simplify
+ (imagpart (complex @0 @1))
+ @1)
index 0b5b0946982207794a5986432e319092f4b09de7..46ccf527a2c3cd1bc0d33d7ab1e86f3ca01f7d3d 100644 (file)
@@ -1,3 +1,7 @@
+2014-11-12  Richard Biener  <rguenther@suse.de>
+
+       * gcc.dg/tree-ssa/ssa-fre-32.c: Disable forwprop.
+
 2014-11-12  Joseph Myers  <joseph@codesourcery.com>
 
        * gcc.dg/no-math-errno-1.c, gcc.dg/no-math-errno-2.c,
index 5a38f8995272c4ef1dbd49dbd49f73c05c935d32..53a20f84c17e9d97a72422900c595783e10b9574 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O -fdump-tree-fre1-details" } */
+/* { dg-options "-O -fno-tree-forwprop -fdump-tree-fre1-details" } */
 
 _Complex float m;