summaryrefslogtreecommitdiff
path: root/gcc/df-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/df-core.c')
-rw-r--r--gcc/df-core.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/gcc/df-core.c b/gcc/df-core.c
index 82f136436bb..d933803014a 100644
--- a/gcc/df-core.c
+++ b/gcc/df-core.c
@@ -377,6 +377,7 @@ are write-only operations.
#include "config.h"
#include "system.h"
#include "coretypes.h"
+#include "bitvec.h"
#include "tm.h"
#include "rtl.h"
#include "tm_p.h"
@@ -397,7 +398,6 @@ are write-only operations.
#include "cfg.h"
#include "cfganal.h"
#include "basic-block.h"
-#include "sbitmap.h"
#include "bitmap.h"
#include "df.h"
#include "tree-pass.h"
@@ -927,7 +927,7 @@ df_worklist_propagate_forward (struct dataflow *dataflow,
unsigned bb_index,
unsigned *bbindex_to_postorder,
bitmap pending,
- sbitmap considered,
+ const bitvec &considered,
ptrdiff_t age)
{
edge e;
@@ -940,7 +940,7 @@ df_worklist_propagate_forward (struct dataflow *dataflow,
FOR_EACH_EDGE (e, ei, bb->preds)
{
if (age <= BB_LAST_CHANGE_AGE (e->src)
- && bitmap_bit_p (considered, e->src->index))
+ && considered[e->src->index])
changed |= dataflow->problem->con_fun_n (e);
}
else if (dataflow->problem->con_fun_0)
@@ -955,7 +955,7 @@ df_worklist_propagate_forward (struct dataflow *dataflow,
{
unsigned ob_index = e->dest->index;
- if (bitmap_bit_p (considered, ob_index))
+ if (considered[ob_index])
bitmap_set_bit (pending, bbindex_to_postorder[ob_index]);
}
return true;
@@ -972,7 +972,7 @@ df_worklist_propagate_backward (struct dataflow *dataflow,
unsigned bb_index,
unsigned *bbindex_to_postorder,
bitmap pending,
- sbitmap considered,
+ const bitvec &considered,
ptrdiff_t age)
{
edge e;
@@ -985,7 +985,7 @@ df_worklist_propagate_backward (struct dataflow *dataflow,
FOR_EACH_EDGE (e, ei, bb->succs)
{
if (age <= BB_LAST_CHANGE_AGE (e->dest)
- && bitmap_bit_p (considered, e->dest->index))
+ && considered[e->dest->index])
changed |= dataflow->problem->con_fun_n (e);
}
else if (dataflow->problem->con_fun_0)
@@ -1000,7 +1000,7 @@ df_worklist_propagate_backward (struct dataflow *dataflow,
{
unsigned ob_index = e->src->index;
- if (bitmap_bit_p (considered, ob_index))
+ if (considered[ob_index])
bitmap_set_bit (pending, bbindex_to_postorder[ob_index]);
}
return true;
@@ -1030,7 +1030,7 @@ df_worklist_propagate_backward (struct dataflow *dataflow,
static void
df_worklist_dataflow_doublequeue (struct dataflow *dataflow,
bitmap pending,
- sbitmap considered,
+ const bitvec &considered,
int *blocks_in_postorder,
unsigned *bbindex_to_postorder,
int n_blocks)
@@ -1100,7 +1100,7 @@ df_worklist_dataflow_doublequeue (struct dataflow *dataflow,
dcount, dcount / (float)n_basic_blocks_for_fn (cfun));
}
-/* Worklist-based dataflow solver. It uses sbitmap as a worklist,
+/* Worklist-based dataflow solver. It uses bitvec as a worklist,
with "n"-th bit representing the n-th block in the reverse-postorder order.
The solver is a double-queue algorithm similar to the "double stack" solver
from Cooper, Harvey and Kennedy, "Iterative data-flow analysis, Revisited".
@@ -1114,7 +1114,6 @@ df_worklist_dataflow (struct dataflow *dataflow,
int n_blocks)
{
bitmap pending = BITMAP_ALLOC (&df_bitmap_obstack);
- sbitmap considered = sbitmap_alloc (last_basic_block_for_fn (cfun));
bitmap_iterator bi;
unsigned int *bbindex_to_postorder;
int i;
@@ -1131,11 +1130,10 @@ df_worklist_dataflow (struct dataflow *dataflow,
for (i = 0; i < last_basic_block_for_fn (cfun); i++)
bbindex_to_postorder[i] = last_basic_block_for_fn (cfun);
- /* Initialize the considered map. */
- bitmap_clear (considered);
+ stack_bitvec considered (last_basic_block_for_fn (cfun));
EXECUTE_IF_SET_IN_BITMAP (blocks_to_consider, 0, index, bi)
{
- bitmap_set_bit (considered, index);
+ considered[index] = true;
}
/* Initialize the mapping of block index to postorder. */
@@ -1155,7 +1153,6 @@ df_worklist_dataflow (struct dataflow *dataflow,
blocks_in_postorder,
bbindex_to_postorder,
n_blocks);
- sbitmap_free (considered);
free (bbindex_to_postorder);
}