This patch

1. changes the need_assert_for bitmap into an sbitmap since its size is
known to be at most num_ssa_names
2. changes a use of FOR_EACH_IMM_USE_STMT to a use of
FOR_EACH_IMM_USE_FAST since the uses are only being read, not modified

Does this look OK to commit after bootstrap and regtest on
x86_64-pc-linux-gnu?

gcc/ChangeLog:

        * tree-vrp.c (need_assert_for): Change from bitmap to sbitmap.
        (dump_all_asserts): Adjust accordingly.
        (process_assert_insertions): Likewise.
        (insert_range_assertions): Likewise.
        (register_edge_assert_for_2): Use FOR_EACH_IMM_USE_FAST instead
        of FOR_EACH_IMM_USE_STMT.

Index: gcc/tree-vrp.c
===================================================================
--- gcc/tree-vrp.c      (revision 235801)
+++ gcc/tree-vrp.c      (working copy)
@@ -141,7 +141,7 @@ struct assert_locus
 
 /* If bit I is present, it means that SSA name N_i has a list of
    assertions that should be inserted in the IL.  */
-static bitmap need_assert_for;
+static sbitmap need_assert_for;
 
 /* Array of locations lists where to insert assertions.  ASSERTS_FOR[I]
    holds a list of ASSERT_LOCUS_T nodes that describe where
@@ -4899,7 +4899,7 @@ void
 dump_all_asserts (FILE *file)
 {
   unsigned i;
-  bitmap_iterator bi;
+  sbitmap_iterator bi;
 
   fprintf (file, "\nASSERT_EXPRs to be inserted\n\n");
   EXECUTE_IF_SET_IN_BITMAP (need_assert_for, 0, i, bi)
@@ -5248,9 +5248,10 @@ register_edge_assert_for_2 (tree name, edge e, gim
       && TREE_CODE (val) == INTEGER_CST)
     {
       imm_use_iterator ui;
-      gimple *use_stmt;
-      FOR_EACH_IMM_USE_STMT (use_stmt, ui, name)
+      use_operand_p use_p;
+      FOR_EACH_IMM_USE_FAST (use_p, ui, name)
        {
+         gimple *use_stmt = USE_STMT (use_p);
          if (!is_gimple_assign (use_stmt))
            continue;
 
@@ -6362,7 +6363,7 @@ static void
 process_assert_insertions (void)
 {
   unsigned i;
-  bitmap_iterator bi;
+  sbitmap_iterator bi;
   bool update_edges_p = false;
   int num_asserts = 0;
 
@@ -6427,7 +6428,8 @@ process_assert_insertions (void)
 static void
 insert_range_assertions (void)
 {
-  need_assert_for = BITMAP_ALLOC (NULL);
+  need_assert_for = sbitmap_alloc (num_ssa_names);
+  bitmap_clear (need_assert_for);
   asserts_for = XCNEWVEC (assert_locus *, num_ssa_names);
 
   calculate_dominance_info (CDI_DOMINATORS);
@@ -6446,7 +6448,8 @@ insert_range_assertions (void)
     }
 
   free (asserts_for);
-  BITMAP_FREE (need_assert_for);
+  sbitmap_free (need_assert_for);
+  need_assert_for = NULL;
 }
 
 /* Checks one ARRAY_REF in REF, located at LOCUS. Ignores flexible arrays

Reply via email to