===================================================================
@@ -837,7 +840,7 @@ bitmap_set_and (bitmap_set_t dest, bitma
}
}
-/* Subtract all values and expressions contained in ORIG from DEST. */
+/* Subtract all expressions contained in ORIG from DEST. */
static bitmap_set_t
bitmap_set_subtract (bitmap_set_t dest, bitmap_set_t orig)
@@ -859,7 +862,7 @@ bitmap_set_subtract (bitmap_set_t dest,
return result;
}
-/* Subtract all the values in bitmap set B from bitmap set A. */
+/* Subtract all values in bitmap set B from bitmap set A. */
static void
bitmap_set_subtract_values (bitmap_set_t a, bitmap_set_t b)
@@ -987,6 +990,11 @@ bitmap_value_insert_into_set (bitmap_set
static void
print_pre_expr (FILE *outfile, const pre_expr expr)
{
+ if (! expr)
+ {
+ fprintf (outfile, "NULL");
+ return;
+ }
switch (expr->kind)
{
case CONSTANT:
@@ -2418,7 +2473,9 @@ compute_antic (void)
inverted_post_order_compute (&postorder);
auto_sbitmap worklist (last_basic_block_for_fn (cfun) + 1);
- bitmap_ones (worklist);
+ bitmap_clear (worklist);
+ FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR_FOR_FN (cfun)->preds)
+ bitmap_set_bit (worklist, e->src->index);
while (changed)
{
if (dump_file && (dump_flags & TDF_DETAILS))
===================================================================
@@ -737,23 +737,24 @@ post_order_compute (int *post_order, boo
basic_block
dfs_find_deadend (basic_block bb)
{
- bitmap visited = BITMAP_ALLOC (NULL);
+ auto_bitmap visited;
+ basic_block next = bb;
for (;;)
{
- if (EDGE_COUNT (bb->succs) == 0
- || ! bitmap_set_bit (visited, bb->index))
- {
- BITMAP_FREE (visited);
- return bb;
- }
+ if (EDGE_COUNT (next->succs) == 0)
+ return next;
+ if (! bitmap_set_bit (visited, next->index))
+ return bb;
+
+ bb = next;
/* If we are in an analyzed cycle make sure to try exiting it.
Note this is a heuristic only and expected to work when loop
fixup is needed as well. */
if (! bb->loop_father
|| ! loop_outer (bb->loop_father))
- bb = EDGE_SUCC (bb, 0)->dest;
+ next = EDGE_SUCC (bb, 0)->dest;
else
{
edge_iterator ei;
@@ -761,7 +762,7 @@ dfs_find_deadend (basic_block bb)
FOR_EACH_EDGE (e, ei, bb->succs)
if (loop_exit_edge_p (bb->loop_father, e))
break;
- bb = e ? e->dest : EDGE_SUCC (bb, 0)->dest;
+ next = e ? e->dest : EDGE_SUCC (bb, 0)->dest;
}
}