From 51007dc16a71e1289546f92dfebbe4ef3026176c Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 1 Aug 2019 17:16:48 +0000 Subject: [PATCH] domwalk: use gcc_sort_r 2019-08-01 Richard Biener * domwalk.c (bb_postorder): Remove static variable. (cmp_bb_postorder): Adjust. (sort_bbs_postorder): Adjust and use gcc_sort_r. (dom_walker::walk): Adjust. From-SVN: r273978 --- gcc/ChangeLog | 7 +++++++ gcc/domwalk.c | 15 ++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e6a5b20451f..212fd93abb9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-08-01 Richard Biener + + * domwalk.c (bb_postorder): Remove static variable. + (cmp_bb_postorder): Adjust. + (sort_bbs_postorder): Adjust and use gcc_sort_r. + (dom_walker::walk): Adjust. + 2019-08-01 Alexander Monakov * sort.cc (sort_r_ctx): New struct. 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); } -- 2.30.2