This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v3] Do not simplify "(and (reg) (const bit))" to if_then_else.


[ I did not see this patch before, sorry. ]

This causes the second half of PR78638.

On Thu, Dec 01, 2016 at 04:30:08PM +0100, Dominik Vogt wrote:
> --- a/gcc/combine.c
> +++ b/gcc/combine.c
> @@ -5600,6 +5600,18 @@ combine_simplify_rtx (rtx x, machine_mode op0_mode, int in_dest,
>  		     && OBJECT_P (SUBREG_REG (XEXP (x, 0)))))))
>      {
>        rtx cond, true_rtx, false_rtx;
> +      unsigned HOST_WIDE_INT nz;
> +
> +      /* If the operation is an AND wrapped in a SIGN_EXTEND or ZERO_EXTEND with
> +	 either operand being just a constant single bit value, do nothing since
> +	 IF_THEN_ELSE is likely to increase the expression's complexity.  */
> +      if (HWI_COMPUTABLE_MODE_P (mode)
> +	  && pow2p_hwi (nz = nonzero_bits (x, mode))
> +	  && ! ((code == SIGN_EXTEND || code == ZERO_EXTEND)
> +		&& GET_CODE (XEXP (x, 0)) == AND
> +		&& CONST_INT_P (XEXP (XEXP (x, 0), 0))
> +		&& UINTVAL (XEXP (XEXP (x, 0), 0)) == nz))
> +	      return x;

The code does not match the comment: the "!" should not be there.  How
did it fix anything on s390 *with* that "!"?  That does not make much
sense.


Segher


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]