@@ -53,20 +53,39 @@
static int count_insns (basic_block);
static bool ignore_bb_p (const_basic_block);
static bool better_p (const_edge, const_edge);
-static edge find_best_successor (basic_block);
-static edge find_best_predecessor (basic_block);
-static int find_trace (basic_block, basic_block *);
-/* Minimal outgoing edge probability considered for superblock formation. */
-static int probability_cutoff;
-static int branch_ratio_cutoff;
+/* Internal state of one invocation of the tracer pass. */
-/* A bit BB->index is set if BB has already been seen, i.e. it is
- connected to some trace already. */
-sbitmap bb_seen;
-
-static inline void
-mark_bb_seen (basic_block bb)
+class tracer_state
+{
+public:
+ static bool tail_duplicate ();
+
+private:
+ static void mark_bb_seen (basic_block);
+ static bool bb_seen_p (basic_block);
+ static edge find_best_successor (basic_block);
+ static edge find_best_predecessor (basic_block);
+ static int find_trace (basic_block, basic_block *);
+
+private:
+ /* Minimal outgoing edge probability considered for superblock
+ formation. */
+ static int probability_cutoff;
+ static int branch_ratio_cutoff;
+
+ /* A bit BB->index is set if BB has already been seen, i.e. it is
+ connected to some trace already. */
+ static sbitmap bb_seen;
+
+}; // class tracer_state
+
+int tracer_state::probability_cutoff;
+int tracer_state::branch_ratio_cutoff;
+sbitmap tracer_state::bb_seen;
+
+inline void
+tracer_state::mark_bb_seen (basic_block bb)
{
unsigned int size = SBITMAP_SIZE (bb_seen);
@@ -76,8 +95,8 @@ mark_bb_seen (basic_block bb)
bitmap_set_bit (bb_seen, bb->index);
}
-static inline bool
-bb_seen_p (basic_block bb)
+inline bool
+tracer_state::bb_seen_p (basic_block bb)
{
return bitmap_bit_p (bb_seen, bb->index);
}
@@ -138,8 +157,8 @@ better_p (const_edge e1, const_edge e2)
/* Return most frequent successor of basic block BB. */
-static edge
-find_best_successor (basic_block bb)
+edge
+tracer_state::find_best_successor (basic_block bb)
{
edge e;
edge best = NULL;
@@ -157,8 +176,8 @@ find_best_successor (basic_block bb)
/* Return most frequent predecessor of basic block BB. */
-static edge
-find_best_predecessor (basic_block bb)
+edge
+tracer_state::find_best_predecessor (basic_block bb)
{
edge e;
edge best = NULL;
@@ -178,8 +197,8 @@ find_best_predecessor (basic_block bb)
/* Find the trace using bb and record it in the TRACE array.
Return number of basic blocks recorded. */
-static int
-find_trace (basic_block bb, basic_block *trace)
+int
+tracer_state::find_trace (basic_block bb, basic_block *trace)
{
int i = 0;
edge e;
@@ -220,8 +239,8 @@ find_trace (basic_block bb, basic_block *trace)
/* Look for basic blocks in frequency order, construct traces and tail duplicate
if profitable. */
-static bool
-tail_duplicate (void)
+bool
+tracer_state::tail_duplicate ()
{
fibnode_t *blocks = XCNEWVEC (fibnode_t, last_basic_block);
basic_block *trace = XNEWVEC (basic_block, n_basic_blocks);
@@ -376,7 +395,7 @@ tracer (void)
brief_dump_cfg (dump_file, dump_flags);
/* Trace formation is done on the fly inside tail_duplicate */
- changed = tail_duplicate ();
+ changed = tracer_state::tail_duplicate ();
if (changed)
{
free_dominance_info (CDI_DOMINATORS);