aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2012-03-06 16:27:37 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2012-03-06 16:27:37 +0000
commit6342e53f0746dc031111aa7c3a463df9238bf030 (patch)
treeb88e834e2ed77592f697207a0ca13fca8602982c /gcc
parent877097dfbc6bf3d1b551ef682858ed6f78bb2c92 (diff)
downloadgcc-6342e53f0746dc031111aa7c3a463df9238bf030.zip
gcc-6342e53f0746dc031111aa7c3a463df9238bf030.tar.gz
gcc-6342e53f0746dc031111aa7c3a463df9238bf030.tar.bz2
trans-mem.c: New typedef for tm_region_p.
* trans-mem.c: New typedef for tm_region_p. Define vector types for tm_region_p. (tm_region_init): Replace region_worklist to a vector called bb_regions. From-SVN: r185000
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/trans-mem.c22
2 files changed, 19 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5ce9dc6..e3bba82 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2012-03-06 Aldy Hernandez <aldyh@redhat.com>
+
+ * trans-mem.c: New typedef for tm_region_p.
+ Define vector types for tm_region_p.
+ (tm_region_init): Replace region_worklist to a vector called
+ bb_regions.
+
2012-03-06 Richard Guenther <rguenther@suse.de>
* fold-const.c (build_fold_addr_expr_with_type_loc): Fold
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c
index 97893f7..2badf25 100644
--- a/gcc/trans-mem.c
+++ b/gcc/trans-mem.c
@@ -1757,6 +1757,10 @@ struct tm_region
bitmap irr_blocks;
};
+typedef struct tm_region *tm_region_p;
+DEF_VEC_P (tm_region_p);
+DEF_VEC_ALLOC_P (tm_region_p, heap);
+
/* True if there are pending edge statements to be committed for the
current function being scanned in the tmmark pass. */
bool pending_edge_inserts_p;
@@ -1858,7 +1862,7 @@ tm_region_init (struct tm_region *region)
VEC(basic_block, heap) *queue = NULL;
bitmap visited_blocks = BITMAP_ALLOC (NULL);
struct tm_region *old_region;
- struct tm_region **region_worklist;
+ VEC(tm_region_p, heap) *bb_regions = NULL;
all_tm_regions = region;
bb = single_succ (ENTRY_BLOCK_PTR);
@@ -1866,17 +1870,15 @@ tm_region_init (struct tm_region *region)
/* We could store this information in bb->aux, but we may get called
through get_all_tm_blocks() from another pass that may be already
using bb->aux. */
- region_worklist =
- (struct tm_region **) xcalloc (sizeof (struct tm_region *),
- last_basic_block + NUM_FIXED_BLOCKS);
+ VEC_safe_grow_cleared (tm_region_p, heap, bb_regions, last_basic_block);
VEC_safe_push (basic_block, heap, queue, bb);
- region_worklist[bb->index] = region;
+ VEC_replace (tm_region_p, bb_regions, bb->index, region);
do
{
bb = VEC_pop (basic_block, queue);
- region = region_worklist[bb->index];
- region_worklist[bb->index] = NULL;
+ region = VEC_index (tm_region_p, bb_regions, bb->index);
+ VEC_replace (tm_region_p, bb_regions, bb->index, NULL);
/* Record exit and irrevocable blocks. */
region = tm_region_init_1 (region, bb);
@@ -1898,15 +1900,15 @@ tm_region_init (struct tm_region *region)
the entry block of the new region is associated with this region.
Other successors are still part of the old region. */
if (old_region != region && e->dest != region->entry_block)
- region_worklist[e->dest->index] = old_region;
+ VEC_replace (tm_region_p, bb_regions, e->dest->index, old_region);
else
- region_worklist[e->dest->index] = region;
+ VEC_replace (tm_region_p, bb_regions, e->dest->index, region);
}
}
while (!VEC_empty (basic_block, queue));
VEC_free (basic_block, heap, queue);
BITMAP_FREE (visited_blocks);
- free (region_worklist);
+ VEC_free (tm_region_p, heap, bb_regions);
}
/* The "gate" function for all transactional memory expansion and optimization