From: Segher Boessenkool Date: Tue, 3 Oct 2017 16:02:38 +0000 (+0200) Subject: simplify-rtx: Remove non-simplifying simplification (PR77729) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a8ccdfa8ea6fbdc78bdd5617427d7ba945cc83af;p=gcc.git simplify-rtx: Remove non-simplifying simplification (PR77729) If we have (X&C1)|C2 simplify_binary_operation_1 makes C1 as small as possible. This makes worse code in common cases like when the AND with C1 is from a zero-extension. This patch fixes it by removing this transformation (twice). PR rtl-optimization/77729 * simplify-rtx.c (simplify_binary_operation_1): Delete the (X&C1)|C2 to (X&(C1&~C2))|C2 transformations. From-SVN: r253384 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33ae1be901a..9d43ae54b69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-10-03 Segher Boessenkool + + PR rtl-optimization/77729 + * simplify-rtx.c (simplify_binary_operation_1): Delete the (X&C1)|C2 + to (X&(C1&~C2))|C2 transformations. + 2017-10-03 Martin Jambor PR tree-optimization/82363 diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 1b960b91c0c..3b6cf6fa850 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2673,14 +2673,6 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, /* If (C1|C2) == ~0 then (X&C1)|C2 becomes X|C2. */ if (((c1|c2) & mask) == mask) return simplify_gen_binary (IOR, mode, XEXP (op0, 0), op1); - - /* Minimize the number of bits set in C1, i.e. C1 := C1 & ~C2. */ - if (((c1 & ~c2) & mask) != (c1 & mask)) - { - tem = simplify_gen_binary (AND, mode, XEXP (op0, 0), - gen_int_mode (c1 & ~c2, mode)); - return simplify_gen_binary (IOR, mode, tem, op1); - } } /* Convert (A & B) | A to A. */ @@ -2736,23 +2728,6 @@ simplify_binary_operation_1 (enum rtx_code code, machine_mode mode, return gen_rtx_ROTATE (int_mode, XEXP (opright, 0), XEXP (SUBREG_REG (opleft), 1)); - /* If we have (ior (and (X C1) C2)), simplify this by making - C1 as small as possible if C1 actually changes. */ - if (CONST_INT_P (op1) - && (HWI_COMPUTABLE_MODE_P (mode) - || INTVAL (op1) > 0) - && GET_CODE (op0) == AND - && CONST_INT_P (XEXP (op0, 1)) - && CONST_INT_P (op1) - && (UINTVAL (XEXP (op0, 1)) & UINTVAL (op1)) != 0) - { - rtx tmp = simplify_gen_binary (AND, mode, XEXP (op0, 0), - gen_int_mode (UINTVAL (XEXP (op0, 1)) - & ~UINTVAL (op1), - mode)); - return simplify_gen_binary (IOR, mode, tmp, op1); - } - /* If OP0 is (ashiftrt (plus ...) C), it might actually be a (sign_extend (plus ...)). Then check if OP1 is a CONST_INT and the PLUS does not affect any of the bits in OP1: then we can do