Commit dd7bda5e by Martin Liska Committed by Martin Liska

tracer ported to new fibonacci_heap data structure.

	* tracer.c (tail_duplicate): New fibonacci_heap class is used.

From-SVN: r217722
parent 8d261514
2014-11-18 Martin Liska <mliska@suse.cz> 2014-11-18 Martin Liska <mliska@suse.cz>
* tracer.c (tail_duplicate): New fibonacci_heap class is used.
2014-11-18 Martin Liska <mliska@suse.cz>
* bb-reorder.c (mark_bb_visited): New fibonacci_heap is used. * bb-reorder.c (mark_bb_visited): New fibonacci_heap is used.
(find_traces): Likewise. (find_traces): Likewise.
(find_traces_1_round): Likewise. (find_traces_1_round): Likewise.
...@@ -52,7 +52,6 @@ ...@@ -52,7 +52,6 @@
#include "cfg.h" #include "cfg.h"
#include "cfganal.h" #include "cfganal.h"
#include "basic-block.h" #include "basic-block.h"
#include "fibheap.h"
#include "flags.h" #include "flags.h"
#include "params.h" #include "params.h"
#include "coverage.h" #include "coverage.h"
...@@ -67,6 +66,7 @@ ...@@ -67,6 +66,7 @@
#include "tree-ssa.h" #include "tree-ssa.h"
#include "tree-inline.h" #include "tree-inline.h"
#include "cfgloop.h" #include "cfgloop.h"
#include "fibonacci_heap.h"
static int count_insns (basic_block); static int count_insns (basic_block);
static bool ignore_bb_p (const_basic_block); static bool ignore_bb_p (const_basic_block);
...@@ -241,12 +241,14 @@ find_trace (basic_block bb, basic_block *trace) ...@@ -241,12 +241,14 @@ find_trace (basic_block bb, basic_block *trace)
static bool static bool
tail_duplicate (void) tail_duplicate (void)
{ {
fibnode_t *blocks = XCNEWVEC (fibnode_t, last_basic_block_for_fn (cfun)); auto_vec<fibonacci_node<long, basic_block_def>*> blocks;
blocks.safe_grow_cleared (last_basic_block_for_fn (cfun));
basic_block *trace = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun)); basic_block *trace = XNEWVEC (basic_block, n_basic_blocks_for_fn (cfun));
int *counts = XNEWVEC (int, last_basic_block_for_fn (cfun)); int *counts = XNEWVEC (int, last_basic_block_for_fn (cfun));
int ninsns = 0, nduplicated = 0; int ninsns = 0, nduplicated = 0;
gcov_type weighted_insns = 0, traced_insns = 0; gcov_type weighted_insns = 0, traced_insns = 0;
fibheap_t heap = fibheap_new (); fibonacci_heap<long, basic_block_def> heap (LONG_MIN);
gcov_type cover_insns; gcov_type cover_insns;
int max_dup_insns; int max_dup_insns;
basic_block bb; basic_block bb;
...@@ -271,8 +273,7 @@ tail_duplicate (void) ...@@ -271,8 +273,7 @@ tail_duplicate (void)
{ {
int n = count_insns (bb); int n = count_insns (bb);
if (!ignore_bb_p (bb)) if (!ignore_bb_p (bb))
blocks[bb->index] = fibheap_insert (heap, -bb->frequency, blocks[bb->index] = heap.insert (-bb->frequency, bb);
bb);
counts [bb->index] = n; counts [bb->index] = n;
ninsns += n; ninsns += n;
...@@ -287,9 +288,9 @@ tail_duplicate (void) ...@@ -287,9 +288,9 @@ tail_duplicate (void)
max_dup_insns = (ninsns * PARAM_VALUE (TRACER_MAX_CODE_GROWTH) + 50) / 100; max_dup_insns = (ninsns * PARAM_VALUE (TRACER_MAX_CODE_GROWTH) + 50) / 100;
while (traced_insns < cover_insns && nduplicated < max_dup_insns while (traced_insns < cover_insns && nduplicated < max_dup_insns
&& !fibheap_empty (heap)) && !heap.empty ())
{ {
basic_block bb = (basic_block) fibheap_extract_min (heap); basic_block bb = heap.extract_min ();
int n, pos; int n, pos;
if (!bb) if (!bb)
...@@ -307,7 +308,7 @@ tail_duplicate (void) ...@@ -307,7 +308,7 @@ tail_duplicate (void)
traced_insns += bb->frequency * counts [bb->index]; traced_insns += bb->frequency * counts [bb->index];
if (blocks[bb->index]) if (blocks[bb->index])
{ {
fibheap_delete_node (heap, blocks[bb->index]); heap.delete_node (blocks[bb->index]);
blocks[bb->index] = NULL; blocks[bb->index] = NULL;
} }
...@@ -317,7 +318,7 @@ tail_duplicate (void) ...@@ -317,7 +318,7 @@ tail_duplicate (void)
if (blocks[bb2->index]) if (blocks[bb2->index])
{ {
fibheap_delete_node (heap, blocks[bb2->index]); heap.delete_node (blocks[bb2->index]);
blocks[bb2->index] = NULL; blocks[bb2->index] = NULL;
} }
traced_insns += bb2->frequency * counts [bb2->index]; traced_insns += bb2->frequency * counts [bb2->index];
...@@ -344,8 +345,7 @@ tail_duplicate (void) ...@@ -344,8 +345,7 @@ tail_duplicate (void)
/* Reconsider the original copy of block we've duplicated. /* Reconsider the original copy of block we've duplicated.
Removing the most common predecessor may make it to be Removing the most common predecessor may make it to be
head. */ head. */
blocks[bb2->index] = blocks[bb2->index] = heap.insert (-bb2->frequency, bb2);
fibheap_insert (heap, -bb2->frequency, bb2);
if (dump_file) if (dump_file)
fprintf (dump_file, "Duplicated %i as %i [%i]\n", fprintf (dump_file, "Duplicated %i as %i [%i]\n",
...@@ -370,10 +370,8 @@ tail_duplicate (void) ...@@ -370,10 +370,8 @@ tail_duplicate (void)
free_original_copy_tables (); free_original_copy_tables ();
sbitmap_free (bb_seen); sbitmap_free (bb_seen);
free (blocks);
free (trace); free (trace);
free (counts); free (counts);
fibheap_delete (heap);
return changed; return changed;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment