On 8/13/19 2:33 AM, Robin Dapp wrote:
> We would like to simplify code like
>  (larger_type)(var + const1) + const2
> to
>  (larger_type)(var + combined_const1_const2)
> when we know that no overflow happens.
> ---
>  gcc/match.pd | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 101 insertions(+)
> 
> diff --git a/gcc/match.pd b/gcc/match.pd
> index 0317bc704f7..94400529ad8 100644
> --- a/gcc/match.pd
> +++ b/gcc/match.pd
> @@ -2020,6 +2020,107 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>      (if (cst && !TREE_OVERFLOW (cst))
>       (plus { cst; } @0))))
>  
> +/* ((T)(A + CST1)) + CST2 -> (T)(A) + CST  */
Do you want to handle MINUS?  What about POINTER_PLUS_EXPR?

Richi and Marc are better suited to review the guts of this change than
I am.

I though we had these transformations in fold-const.c and I was going to
suggest removing them as a part of this patch.  *But* I can't seem to
find them.

Jeff

Reply via email to