From 088845a5f0ba6f712c80bdb9a3a3e98c11f5681f Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 11 Sep 2013 17:40:56 +0000 Subject: [PATCH] simplify-rtx.c (simplify_unary_operation_1): Use simplify_gen_binary for (not (neg ...)) and (neg (not ...)) cases. gcc/ * simplify-rtx.c (simplify_unary_operation_1): Use simplify_gen_binary for (not (neg ...)) and (neg (not ...)) cases. From-SVN: r202506 --- gcc/ChangeLog | 5 +++++ gcc/simplify-rtx.c | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e9b2079e37..bbe5479e6a2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-09-11 Richard Sandiford + + * simplify-rtx.c (simplify_unary_operation_1): Use simplify_gen_binary + for (not (neg ...)) and (neg (not ...)) cases. + 2013-09-11 Richard Biener PR middle-end/58377 diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 9ec41a5dbd4..432842ecf0b 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -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 -- 2.30.2