Ping

Richard Sandiford <richard.sandif...@linaro.org> writes:
> This patch just adds a helper function for getting the next strinfo
> in a chain, since part 2 adds another place where we do that.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?
>
> Thanks,
> Richard
>
>
> 2017-05-16  Richard Sandiford  <richard.sandif...@linaro.org>
>
> gcc/
>       * tree-ssa-strlen.c (get_next_strinfo): New function.
>       (get_stridx_plus_constant): Use it.
>       (zero_length_string): Likewise.
>       (adjust_related_strinfos): Likewise.
>       (adjust_last_stmt): Likewise.
>
> Index: gcc/tree-ssa-strlen.c
> ===================================================================
> --- gcc/tree-ssa-strlen.c     2017-05-15 19:57:18.899053381 +0100
> +++ gcc/tree-ssa-strlen.c     2017-05-15 20:50:21.412511763 +0100
> @@ -156,6 +156,19 @@ get_strinfo (int idx)
>    return (*stridx_to_strinfo)[idx];
>  }
>  
> +/* Get the next strinfo in the chain after SI, or null if none.  */
> +
> +static inline strinfo *
> +get_next_strinfo (strinfo *si)
> +{
> +  if (si->next == 0)
> +    return NULL;
> +  strinfo *nextsi = get_strinfo (si->next);
> +  if (nextsi == NULL || nextsi->first != si->first || nextsi->prev != 
> si->idx)
> +    return NULL;
> +  return nextsi;
> +}
> +
>  /* Helper function for get_stridx.  */
>  
>  static int
> @@ -665,10 +678,8 @@ get_stridx_plus_constant (strinfo *bases
>    gcc_checking_assert (compare_tree_int (si->length, off) != -1);
>    for (chainsi = si; chainsi->next; chainsi = si)
>      {
> -      si = get_strinfo (chainsi->next);
> +      si = get_next_strinfo (chainsi);
>        if (si == NULL
> -       || si->first != chainsi->first
> -       || si->prev != chainsi->idx
>         || si->length == NULL_TREE
>         || TREE_CODE (si->length) != INTEGER_CST)
>       break;
> @@ -736,26 +747,18 @@ zero_length_string (tree ptr, strinfo *c
>        si = verify_related_strinfos (chainsi);
>        if (si)
>       {
> -       chainsi = si;
> -       for (; chainsi->next; chainsi = si)
> +       do
>           {
> -           if (chainsi->endptr == NULL_TREE)
> +           gcc_assert (si->length || si->stmt);
> +           if (si->endptr == NULL_TREE)
>               {
> -               chainsi = unshare_strinfo (chainsi);
> -               chainsi->endptr = ptr;
> +               si = unshare_strinfo (si);
> +               si->endptr = ptr;
>               }
> -           si = get_strinfo (chainsi->next);
> -           if (si == NULL
> -               || si->first != chainsi->first
> -               || si->prev != chainsi->idx)
> -             break;
> -         }
> -       gcc_assert (chainsi->length || chainsi->stmt);
> -       if (chainsi->endptr == NULL_TREE)
> -         {
> -           chainsi = unshare_strinfo (chainsi);
> -           chainsi->endptr = ptr;
> +           chainsi = si;
> +           si = get_next_strinfo (si);
>           }
> +       while (si != NULL);
>         if (chainsi->length && integer_zerop (chainsi->length))
>           {
>             if (chainsi->next)
> @@ -833,12 +836,8 @@ adjust_related_strinfos (location_t loc,
>         si->endptr = NULL_TREE;
>         si->dont_invalidate = true;
>       }
> -      if (si->next == 0)
> -     return;
> -      nsi = get_strinfo (si->next);
> -      if (nsi == NULL
> -       || nsi->first != si->first
> -       || nsi->prev != si->idx)
> +      nsi = get_next_strinfo (si);
> +      if (nsi == NULL)
>       return;
>        si = nsi;
>      }
> @@ -995,15 +994,9 @@ adjust_last_stmt (strinfo *si, gimple *s
>       return;
>        while (firstsi != lastsi)
>       {
> -       strinfo *nextsi;
> -       if (firstsi->next == 0)
> -         return;
> -       nextsi = get_strinfo (firstsi->next);
> -       if (nextsi == NULL
> -           || nextsi->prev != firstsi->idx
> -           || nextsi->first != si->first)
> +       firstsi = get_next_strinfo (firstsi);
> +       if (firstsi == NULL)
>           return;
> -       firstsi = nextsi;
>       }
>      }
>  

Reply via email to