On Thu, Aug 1, 2019 at 6:01 PM Alexander Monakov <amona...@ispras.ru> wrote:
>
> I used this patch by Richard to check gcc_sort_r in bootstrap.

OK to commit as well.

Thanks,
Richard.

>         * domwalk.c (bb_postorder): Remove static variable.
>         (cmp_bb_postorder): Adjust.
>         (sort_bbs_postorder): Adjust and use gcc_sort_r.
>         (dom_walker::walk): Adjust.
>
> diff --git a/gcc/domwalk.c b/gcc/domwalk.c
> index 8c0fdecb462..42c5127695b 100644
> --- a/gcc/domwalk.c
> +++ b/gcc/domwalk.c
> @@ -128,14 +128,12 @@ along with GCC; see the file COPYING3.  If not see
>      which is currently an abstraction over walking tree statements.  Thus
>      the dominator walker is currently only useful for trees.  */
>
> -/* Reverse postorder index of each basic block.  */
> -static int *bb_postorder;
> -
>  static int
> -cmp_bb_postorder (const void *a, const void *b)
> +cmp_bb_postorder (const void *a, const void *b, void *data)
>  {
>    basic_block bb1 = *(const basic_block *)(a);
>    basic_block bb2 = *(const basic_block *)(b);
> +  int *bb_postorder = (int *)data;
>    /* Place higher completion number first (pop off lower number first).  */
>    return bb_postorder[bb2->index] - bb_postorder[bb1->index];
>  }
> @@ -144,7 +142,7 @@ cmp_bb_postorder (const void *a, const void *b)
>     i.e. by descending number in BB_POSTORDER array.  */
>
>  static void
> -sort_bbs_postorder (basic_block *bbs, int n)
> +sort_bbs_postorder (basic_block *bbs, int n, int *bb_postorder)
>  {
>    if (__builtin_expect (n == 2, true))
>      {
> @@ -166,7 +164,7 @@ sort_bbs_postorder (basic_block *bbs, int n)
>        bbs[0] = bb0, bbs[1] = bb1, bbs[2] = bb2;
>      }
>    else
> -    qsort (bbs, n, sizeof *bbs, cmp_bb_postorder);
> +    gcc_sort_r (bbs, n, sizeof *bbs, cmp_bb_postorder, bb_postorder);
>  }
>
>  /* Set EDGE_EXECUTABLE on every edge within FN's CFG.  */
> @@ -294,7 +292,6 @@ dom_walker::walk (basic_block bb)
>    basic_block *worklist = XNEWVEC (basic_block,
>                                    n_basic_blocks_for_fn (cfun) * 2);
>    int sp = 0;
> -  bb_postorder = m_bb_to_rpo;
>
>    while (true)
>      {
> @@ -339,7 +336,8 @@ dom_walker::walk (basic_block bb)
>               if (sp - saved_sp > 1
>                   && m_dom_direction == CDI_DOMINATORS
>                   && m_bb_to_rpo)
> -               sort_bbs_postorder (&worklist[saved_sp], sp - saved_sp);
> +               sort_bbs_postorder (&worklist[saved_sp], sp - saved_sp,
> +                                   m_bb_to_rpo);
>             }
>         }
>        /* NULL is used to mark pop operations in the recursion stack.  */
> @@ -360,6 +358,5 @@ dom_walker::walk (basic_block bb)
>        else
>         break;
>      }
> -  bb_postorder = NULL;
>    free (worklist);
>  }

Reply via email to