On Fri, Nov 24, 2017 at 10:18 AM, Marc Glisse <[email protected]> wrote:
> On Thu, 23 Nov 2017, Richard Biener wrote:
>
>> What about 0 - ptr? (ok, that's even more weird)
>
>
> * match.pd (0-ptr): New transformation.
>
> Regtested on gcc112.
Ok.
Thanks,
Richard.
> --
> Marc Glisse
> Index: gcc/match.pd
> ===================================================================
> --- gcc/match.pd (revision 255118)
> +++ gcc/match.pd (working copy)
> @@ -2449,23 +2449,27 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
> (minus @0 { tem; })))))
>
> /* Convert x+x into x*2. */
> (simplify
> (plus @0 @0)
> (if (SCALAR_FLOAT_TYPE_P (type))
> (mult @0 { build_real (type, dconst2); })
> (if (INTEGRAL_TYPE_P (type))
> (mult @0 { build_int_cst (type, 2); }))))
>
> +/* 0 - X -> -X. */
> (simplify
> (minus integer_zerop @1)
> (negate @1))
> +(simplify
> + (pointer_diff integer_zerop @1)
> + (negate (convert @1)))
>
> /* (ARG0 - ARG1) is the same as (-ARG1 + ARG0). So check whether
> ARG0 is zero and X + ARG0 reduces to X, since that would mean
> (-ARG1 + ARG0) reduces to -ARG1. */
> (simplify
> (minus real_zerop@0 @1)
> (if (fold_real_zero_addition_p (type, @0, 0))
> (negate @1)))
>
> /* Transform x * -1 into -x. */
>