On Tue, Aug 16, 2016 at 3:14 PM, marxin <mli...@suse.cz> wrote:
> gcc/ChangeLog:
>
> 2016-08-16  Martin Liska  <mli...@suse.cz>
>
>         * builtins.c (fold_builtin_memchr): Support following
>         transformations:
>         memchr (x, y, 0) -> NULL
>         memchr ("known_string", 'n', 5) -> &"known_string" + 1
>         memchr ("known_string", 'n', 1) -> NULL

Aww.  Can I convince you to move this and related foldings to gimple-fold.c?

Richard.

> ---
>  gcc/builtins.c | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/gcc/builtins.c b/gcc/builtins.c
> index 8f1c752..ac251f8 100644
> --- a/gcc/builtins.c
> +++ b/gcc/builtins.c
> @@ -7267,8 +7267,12 @@ fold_builtin_memchr (location_t loc, tree arg1, tree 
> arg2, tree len, tree type)
>           || !tree_fits_uhwi_p (len))
>         return NULL_TREE;
>
> +      /* If the LEN parameter is zero, return zero.  */
> +      if (integer_zerop (len))
> +       return build_int_cst (TREE_TYPE (arg1), 0);
> +
>        p1 = c_getstr (arg1);
> -      if (p1 && compare_tree_int (len, strlen (p1) + 1) <= 0)
> +      if (p1)
>         {
>           char c;
>           const char *r;
> @@ -7281,9 +7285,17 @@ fold_builtin_memchr (location_t loc, tree arg1, tree 
> arg2, tree len, tree type)
>
>           if (r == NULL)
>             return build_int_cst (TREE_TYPE (arg1), 0);
> -
> -         tem = fold_build_pointer_plus_hwi_loc (loc, arg1, r - p1);
> -         return fold_convert_loc (loc, type, tem);
> +         else

the else seems superfluous and just adds to indentation.

> +           {
> +             size_t offset = r - p1;
> +             if (compare_tree_int (len, offset) <= 0)
> +               return build_int_cst (TREE_TYPE (arg1), 0);
> +             else
> +               {
> +                 tem = fold_build_pointer_plus_hwi_loc (loc, arg1, offset);
> +                 return fold_convert_loc (loc, type, tem);
> +               }
> +           }
>         }
>        return NULL_TREE;
>      }
> --
> 2.9.2
>
>

Reply via email to