simplify-rtx.c (simplify_unary_operation_1): Use simplify_gen_binary for (not (neg...
authorRichard Sandiford <rdsandiford@googlemail.com>
Wed, 11 Sep 2013 17:40:56 +0000 (17:40 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 11 Sep 2013 17:40:56 +0000 (17:40 +0000)
gcc/
* simplify-rtx.c (simplify_unary_operation_1): Use simplify_gen_binary
for (not (neg ...)) and (neg (not ...)) cases.

From-SVN: r202506

gcc/ChangeLog
gcc/simplify-rtx.c

index 5e9b207..bbe5479 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-11  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * simplify-rtx.c (simplify_unary_operation_1): Use simplify_gen_binary
+       for (not (neg ...)) and (neg (not ...)) cases.
+
 2013-09-11  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/58377
index 9ec41a5..432842e 100644 (file)
@@ -825,7 +825,8 @@ simplify_unary_operation_1 (enum rtx_code code, enum machine_mode mode, rtx op)
 
       /* Similarly, (not (neg X)) is (plus X -1).  */
       if (GET_CODE (op) == NEG)
-       return plus_constant (mode, XEXP (op, 0), -1);
+       return simplify_gen_binary (PLUS, mode, XEXP (op, 0),
+                                   CONSTM1_RTX (mode));
 
       /* (not (xor X C)) for C constant is (xor X D) with D = ~C.  */
       if (GET_CODE (op) == XOR
@@ -932,7 +933,8 @@ simplify_unary_operation_1 (enum rtx_code code, enum machine_mode mode, rtx op)
 
       /* Similarly, (neg (not X)) is (plus X 1).  */
       if (GET_CODE (op) == NOT)
-       return plus_constant (mode, XEXP (op, 0), 1);
+       return simplify_gen_binary (PLUS, mode, XEXP (op, 0),
+                                   CONST1_RTX (mode));
 
       /* (neg (minus X Y)) can become (minus Y X).  This transformation
         isn't safe for modes with signed zeros, since if X and Y are