diff options
Diffstat (limited to 'gcc/tree-ssa-tail-merge.c')
-rw-r--r-- | gcc/tree-ssa-tail-merge.c | 87 |
1 files changed, 41 insertions, 46 deletions
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c index 660b68c10b2..0db205209c3 100644 --- a/gcc/tree-ssa-tail-merge.c +++ b/gcc/tree-ssa-tail-merge.c @@ -219,7 +219,7 @@ struct same_succ_def bb. */ bitmap inverse; /* The edge flags for each of the successor bbs. */ - VEC (int, heap) *succ_flags; + vec<int> succ_flags; /* Indicates whether the struct is currently in the worklist. */ bool in_worklist; /* The hash value of the struct. */ @@ -376,8 +376,8 @@ same_succ_print (FILE *file, const same_succ e) bitmap_print (file, e->succs, "succs:", "\n"); bitmap_print (file, e->inverse, "inverse:", "\n"); fprintf (file, "flags:"); - for (i = 0; i < VEC_length (int, e->succ_flags); ++i) - fprintf (file, " %x", VEC_index (int, e->succ_flags, i)); + for (i = 0; i < e->succ_flags.length (); ++i) + fprintf (file, " %x", e->succ_flags[i]); fprintf (file, "\n"); } @@ -476,9 +476,9 @@ same_succ_hash (const_same_succ e) hashval = iterative_hash_hashval_t (size, hashval); BB_SIZE (bb) = size; - for (i = 0; i < VEC_length (int, e->succ_flags); ++i) + for (i = 0; i < e->succ_flags.length (); ++i) { - flags = VEC_index (int, e->succ_flags, i); + flags = e->succ_flags[i]; flags = flags & ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE); hashval = iterative_hash_hashval_t (flags, hashval); } @@ -512,13 +512,13 @@ inverse_flags (const_same_succ e1, const_same_succ e2) int f1a, f1b, f2a, f2b; int mask = ~(EDGE_TRUE_VALUE | EDGE_FALSE_VALUE); - if (VEC_length (int, e1->succ_flags) != 2) + if (e1->succ_flags.length () != 2) return false; - f1a = VEC_index (int, e1->succ_flags, 0); - f1b = VEC_index (int, e1->succ_flags, 1); - f2a = VEC_index (int, e2->succ_flags, 0); - f2b = VEC_index (int, e2->succ_flags, 1); + f1a = e1->succ_flags[0]; + f1b = e1->succ_flags[1]; + f2a = e2->succ_flags[0]; + f2b = e2->succ_flags[1]; if (f1a == f2a && f1b == f2b) return false; @@ -539,7 +539,7 @@ same_succ_def::equal (const value_type *e1, const compare_type *e2) if (e1->hashval != e2->hashval) return 0; - if (VEC_length (int, e1->succ_flags) != VEC_length (int, e2->succ_flags)) + if (e1->succ_flags.length () != e2->succ_flags.length ()) return 0; if (!bitmap_equal_p (e1->succs, e2->succs)) @@ -547,9 +547,8 @@ same_succ_def::equal (const value_type *e1, const compare_type *e2) if (!inverse_flags (e1, e2)) { - for (i = 0; i < VEC_length (int, e1->succ_flags); ++i) - if (VEC_index (int, e1->succ_flags, i) - != VEC_index (int, e1->succ_flags, i)) + for (i = 0; i < e1->succ_flags.length (); ++i) + if (e1->succ_flags[i] != e1->succ_flags[i]) return 0; } @@ -593,7 +592,7 @@ same_succ_alloc (void) same->bbs = BITMAP_ALLOC (NULL); same->succs = BITMAP_ALLOC (NULL); same->inverse = BITMAP_ALLOC (NULL); - same->succ_flags = VEC_alloc (int, heap, 10); + same->succ_flags.create (10); same->in_worklist = false; return same; @@ -607,7 +606,7 @@ same_succ_def::remove (same_succ e) BITMAP_FREE (e->bbs); BITMAP_FREE (e->succs); BITMAP_FREE (e->inverse); - VEC_free (int, heap, e->succ_flags); + e->succ_flags.release (); XDELETE (e); } @@ -620,7 +619,7 @@ same_succ_reset (same_succ same) bitmap_clear (same->bbs); bitmap_clear (same->succs); bitmap_clear (same->inverse); - VEC_truncate (int, same->succ_flags, 0); + same->succ_flags.truncate (0); } static hash_table <same_succ_def> same_succ_htab; @@ -647,12 +646,10 @@ debug_same_succ ( void) same_succ_htab.traverse <FILE *, ssa_same_succ_print_traverse> (stderr); } -DEF_VEC_P (same_succ); -DEF_VEC_ALLOC_P (same_succ, heap); /* Vector of bbs to process. */ -static VEC (same_succ, heap) *worklist; +static vec<same_succ> worklist; /* Prints worklist to FILE. */ @@ -660,8 +657,8 @@ static void print_worklist (FILE *file) { unsigned int i; - for (i = 0; i < VEC_length (same_succ, worklist); ++i) - same_succ_print (file, VEC_index (same_succ, worklist, i)); + for (i = 0; i < worklist.length (); ++i) + same_succ_print (file, worklist[i]); } /* Adds SAME to worklist. */ @@ -676,7 +673,7 @@ add_to_worklist (same_succ same) return; same->in_worklist = true; - VEC_safe_push (same_succ, heap, worklist, same); + worklist.safe_push (same); } /* Add BB to same_succ_htab. */ @@ -701,7 +698,7 @@ find_same_succ_bb (basic_block bb, same_succ *same_p) same_succ_edge_flags[index] = e->flags; } EXECUTE_IF_SET_IN_BITMAP (same->succs, 0, j, bj) - VEC_safe_push (int, heap, same->succ_flags, same_succ_edge_flags[j]); + same->succ_flags.safe_push (same_succ_edge_flags[j]); same->hashval = same_succ_hash (same); @@ -752,7 +749,7 @@ init_worklist (void) same_succ_edge_flags = XCNEWVEC (int, last_basic_block); deleted_bbs = BITMAP_ALLOC (NULL); deleted_bb_preds = BITMAP_ALLOC (NULL); - worklist = VEC_alloc (same_succ, heap, n_basic_blocks); + worklist.create (n_basic_blocks); find_same_succ (); if (dump_file && (dump_flags & TDF_DETAILS)) @@ -773,7 +770,7 @@ delete_worklist (void) same_succ_edge_flags = NULL; BITMAP_FREE (deleted_bbs); BITMAP_FREE (deleted_bb_preds); - VEC_free (same_succ, heap, worklist); + worklist.release (); } /* Mark BB as deleted, and mark its predecessors. */ @@ -970,19 +967,17 @@ delete_cluster (bb_cluster c) XDELETE (c); } -DEF_VEC_P (bb_cluster); -DEF_VEC_ALLOC_P (bb_cluster, heap); /* Array that contains all clusters. */ -static VEC (bb_cluster, heap) *all_clusters; +static vec<bb_cluster> all_clusters; /* Allocate all cluster vectors. */ static void alloc_cluster_vectors (void) { - all_clusters = VEC_alloc (bb_cluster, heap, n_basic_blocks); + all_clusters.create (n_basic_blocks); } /* Reset all cluster vectors. */ @@ -992,9 +987,9 @@ reset_cluster_vectors (void) { unsigned int i; basic_block bb; - for (i = 0; i < VEC_length (bb_cluster, all_clusters); ++i) - delete_cluster (VEC_index (bb_cluster, all_clusters, i)); - VEC_truncate (bb_cluster, all_clusters, 0); + for (i = 0; i < all_clusters.length (); ++i) + delete_cluster (all_clusters[i]); + all_clusters.truncate (0); FOR_EACH_BB (bb) BB_CLUSTER (bb) = NULL; } @@ -1005,9 +1000,9 @@ static void delete_cluster_vectors (void) { unsigned int i; - for (i = 0; i < VEC_length (bb_cluster, all_clusters); ++i) - delete_cluster (VEC_index (bb_cluster, all_clusters, i)); - VEC_free (bb_cluster, heap, all_clusters); + for (i = 0; i < all_clusters.length (); ++i) + delete_cluster (all_clusters[i]); + all_clusters.release (); } /* Merge cluster C2 into C1. */ @@ -1035,8 +1030,8 @@ set_cluster (basic_block bb1, basic_block bb2) add_bb_to_cluster (c, bb2); BB_CLUSTER (bb1) = c; BB_CLUSTER (bb2) = c; - c->index = VEC_length (bb_cluster, all_clusters); - VEC_safe_push (bb_cluster, heap, all_clusters, c); + c->index = all_clusters.length (); + all_clusters.safe_push (c); } else if (BB_CLUSTER (bb1) == NULL || BB_CLUSTER (bb2) == NULL) { @@ -1056,7 +1051,7 @@ set_cluster (basic_block bb1, basic_block bb2) merge_clusters (merge, old); EXECUTE_IF_SET_IN_BITMAP (old->bbs, 0, i, bi) BB_CLUSTER (BASIC_BLOCK (i)) = merge; - VEC_replace (bb_cluster, all_clusters, old->index, NULL); + all_clusters[old->index] = NULL; update_rep_bb (merge, old->rep_bb); delete_cluster (old); } @@ -1423,9 +1418,9 @@ find_clusters (void) { same_succ same; - while (!VEC_empty (same_succ, worklist)) + while (!worklist.is_empty ()) { - same = VEC_pop (same_succ, worklist); + same = worklist.pop (); same->in_worklist = false; if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -1514,9 +1509,9 @@ apply_clusters (void) bitmap_iterator bj; int nr_bbs_removed = 0; - for (i = 0; i < VEC_length (bb_cluster, all_clusters); ++i) + for (i = 0; i < all_clusters.length (); ++i) { - c = VEC_index (bb_cluster, all_clusters, i); + c = all_clusters[i]; if (c == NULL) continue; @@ -1621,7 +1616,7 @@ tail_merge_optimize (unsigned int todo) } init_worklist (); - while (!VEC_empty (same_succ, worklist)) + while (!worklist.is_empty ()) { if (!loop_entered) { @@ -1637,8 +1632,8 @@ tail_merge_optimize (unsigned int todo) fprintf (dump_file, "worklist iteration #%d\n", iteration_nr); find_clusters (); - gcc_assert (VEC_empty (same_succ, worklist)); - if (VEC_empty (bb_cluster, all_clusters)) + gcc_assert (worklist.is_empty ()); + if (all_clusters.is_empty ()) break; nr_bbs_removed = apply_clusters (); |