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 3/4] tree-loop-distribution: convert to gcc_stablesort


On Tue, Aug 28, 2018 at 11:17 AM Alexander Monakov <amonakov@ispras.ru> wrote:
>
> This converts std::stable_sort use in tree-loop-distribution to gcc_stablesort.
>
>         * gcc/tree-loop-distribution.c (offset_cmp): Convert to C-qsort-style
>         tri-state comparator.
>         (fuse_memset_builtins): Change std::stable_sort to  gcc_stablesort .

OK.

Richard.

> diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
> index 120661447f0..d8db03b545b 100644
> --- a/gcc/tree-loop-distribution.c
> +++ b/gcc/tree-loop-distribution.c
> @@ -90,7 +90,6 @@ along with GCC; see the file COPYING3.  If not see
>         data reuse.  */
>
>  #include "config.h"
> -#define INCLUDE_ALGORITHM /* stable_sort */
>  #include "system.h"
>  #include "coretypes.h"
>  #include "backend.h"
> @@ -2561,12 +2560,14 @@ version_for_distribution_p (vec<struct partition *> *partitions,
>
>  /* Compare base offset of builtin mem* partitions P1 and P2.  */
>
> -static bool
> -offset_cmp (struct partition *p1, struct partition *p2)
> +static int
> +offset_cmp (const void *vp1, const void *vp2)
>  {
> -  gcc_assert (p1 != NULL && p1->builtin != NULL);
> -  gcc_assert (p2 != NULL && p2->builtin != NULL);
> -  return p1->builtin->dst_base_offset < p2->builtin->dst_base_offset;
> +  struct partition *p1 = *(struct partition *const *) vp1;
> +  struct partition *p2 = *(struct partition *const *) vp2;
> +  unsigned HOST_WIDE_INT o1 = p1->builtin->dst_base_offset;
> +  unsigned HOST_WIDE_INT o2 = p2->builtin->dst_base_offset;
> +  return (o2 < o1) - (o1 < o2);
>  }
>
>  /* Fuse adjacent memset builtin PARTITIONS if possible.  This is a special
> @@ -2618,8 +2619,8 @@ fuse_memset_builtins (vec<struct partition *> *partitions)
>         }
>
>        /* Stable sort is required in order to avoid breaking dependence.  */
> -      std::stable_sort (&(*partitions)[i],
> -                       &(*partitions)[i] + j - i, offset_cmp);
> +      gcc_stablesort (&(*partitions)[i], j - i, sizeof (*partitions)[i],
> +                     offset_cmp);
>        /* Continue with next partition.  */
>        i = j;
>      }
> --
> 2.13.3
>


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