summaryrefslogtreecommitdiffstats
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>1999-01-12 00:07:36 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>1999-01-12 00:07:36 +0000
commit152bf2248a1165487104e9b9fb5aba0276606b1a (patch)
treea670b120baed589656a2a75147186bd9959e5141 /gcc/flow.c
parent94305c11def3e524e1fcf8764c2408dce7160371 (diff)
downloadppe42-gcc-152bf2248a1165487104e9b9fb5aba0276606b1a.tar.gz
ppe42-gcc-152bf2248a1165487104e9b9fb5aba0276606b1a.zip
* Makefile.in (OBJECTS): Add sbitmap.o.
(BASIC_BLOCK_H): Add sbitmap.h. * basic-block.h: Move simple bitmap code to sbitmap.h. * flow.c: Move simple bitmap code to sbitmap.c * sbitmap.h, sbitmap.c: New files. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24628 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c496
1 files changed, 0 insertions, 496 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 88466872985..fa19d9eb8b8 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -3505,46 +3505,6 @@ dump_bb_data (file, preds, succs, live_info)
fprintf (file, "\n");
}
-void
-dump_sbitmap (file, bmap)
- FILE *file;
- sbitmap bmap;
-{
- int i,j,n;
- int set_size = bmap->size;
- int total_bits = bmap->n_bits;
-
- fprintf (file, " ");
- for (i = n = 0; i < set_size && n < total_bits; i++)
- {
- for (j = 0; j < SBITMAP_ELT_BITS && n < total_bits; j++, n++)
- {
- if (n != 0 && n % 10 == 0)
- fprintf (file, " ");
- fprintf (file, "%d", (bmap->elms[i] & (1L << j)) != 0);
- }
- }
- fprintf (file, "\n");
-}
-
-void
-dump_sbitmap_vector (file, title, subtitle, bmaps, n_maps)
- FILE *file;
- char *title, *subtitle;
- sbitmap *bmaps;
- int n_maps;
-{
- int bb;
-
- fprintf (file, "%s\n", title);
- for (bb = 0; bb < n_maps; bb++)
- {
- fprintf (file, "%s %d\n", subtitle, bb);
- dump_sbitmap (file, bmaps[bb]);
- }
- fprintf (file, "\n");
-}
-
/* Free basic block data storage. */
void
@@ -3552,462 +3512,6 @@ free_bb_mem ()
{
free_int_list (&pred_int_list_blocks);
}
-
-/* Bitmap manipulation routines. */
-
-/* Allocate a simple bitmap of N_ELMS bits. */
-
-sbitmap
-sbitmap_alloc (n_elms)
- int n_elms;
-{
- int bytes, size, amt;
- sbitmap bmap;
-
- size = SBITMAP_SET_SIZE (n_elms);
- bytes = size * sizeof (SBITMAP_ELT_TYPE);
- amt = (sizeof (struct simple_bitmap_def)
- + bytes - sizeof (SBITMAP_ELT_TYPE));
- bmap = (sbitmap) xmalloc (amt);
- bmap->n_bits = n_elms;
- bmap->size = size;
- bmap->bytes = bytes;
- return bmap;
-}
-
-/* Allocate a vector of N_VECS bitmaps of N_ELMS bits. */
-
-sbitmap *
-sbitmap_vector_alloc (n_vecs, n_elms)
- int n_vecs, n_elms;
-{
- int i, bytes, offset, elm_bytes, size, amt, vector_bytes;
- sbitmap *bitmap_vector;
-
- size = SBITMAP_SET_SIZE (n_elms);
- bytes = size * sizeof (SBITMAP_ELT_TYPE);
- elm_bytes = (sizeof (struct simple_bitmap_def)
- + bytes - sizeof (SBITMAP_ELT_TYPE));
- vector_bytes = n_vecs * sizeof (sbitmap *);
-
- /* Round up `vector_bytes' to account for the alignment requirements
- of an sbitmap. One could allocate the vector-table and set of sbitmaps
- separately, but that requires maintaining two pointers or creating
- a cover struct to hold both pointers (so our result is still just
- one pointer). Neither is a bad idea, but this is simpler for now. */
- {
- /* Based on DEFAULT_ALIGNMENT computation in obstack.c. */
- struct { char x; SBITMAP_ELT_TYPE y; } align;
- int alignment = (char *) & align.y - & align.x;
- vector_bytes = (vector_bytes + alignment - 1) & ~ (alignment - 1);
- }
-
- amt = vector_bytes + (n_vecs * elm_bytes);
- bitmap_vector = (sbitmap *) xmalloc (amt);
-
- for (i = 0, offset = vector_bytes;
- i < n_vecs;
- i++, offset += elm_bytes)
- {
- sbitmap b = (sbitmap) ((char *) bitmap_vector + offset);
- bitmap_vector[i] = b;
- b->n_bits = n_elms;
- b->size = size;
- b->bytes = bytes;
- }
-
- return bitmap_vector;
-}
-
-/* Copy sbitmap SRC to DST. */
-
-void
-sbitmap_copy (dst, src)
- sbitmap dst, src;
-{
- bcopy ((PTR) src->elms, (PTR) dst->elms, sizeof (SBITMAP_ELT_TYPE) * dst->size);
-}
-
-/* Zero all elements in a bitmap. */
-
-void
-sbitmap_zero (bmap)
- sbitmap bmap;
-{
- bzero ((char *) bmap->elms, bmap->bytes);
-}
-
-/* Set to ones all elements in a bitmap. */
-
-void
-sbitmap_ones (bmap)
- sbitmap bmap;
-{
- memset (bmap->elms, -1, bmap->bytes);
-}
-
-/* Zero a vector of N_VECS bitmaps. */
-
-void
-sbitmap_vector_zero (bmap, n_vecs)
- sbitmap *bmap;
- int n_vecs;
-{
- int i;
-
- for (i = 0; i < n_vecs; i++)
- sbitmap_zero (bmap[i]);
-}
-
-/* Set to ones a vector of N_VECS bitmaps. */
-
-void
-sbitmap_vector_ones (bmap, n_vecs)
- sbitmap *bmap;
- int n_vecs;
-{
- int i;
-
- for (i = 0; i < n_vecs; i++)
- sbitmap_ones (bmap[i]);
-}
-
-/* Set DST to be A union (B - C).
- DST = A | (B & ~C).
- Return non-zero if any change is made. */
-
-int
-sbitmap_union_of_diff (dst, a, b, c)
- sbitmap dst, a, b, c;
-{
- int i,changed;
- sbitmap_ptr dstp, ap, bp, cp;
-
- changed = 0;
- dstp = dst->elms;
- ap = a->elms;
- bp = b->elms;
- cp = c->elms;
- for (i = 0; i < dst->size; i++)
- {
- SBITMAP_ELT_TYPE tmp = *ap | (*bp & ~*cp);
- if (*dstp != tmp)
- changed = 1;
- *dstp = tmp;
- dstp++; ap++; bp++; cp++;
- }
- return changed;
-}
-
-/* Set bitmap DST to the bitwise negation of the bitmap SRC. */
-
-void
-sbitmap_not (dst, src)
- sbitmap dst, src;
-{
- int i;
- sbitmap_ptr dstp, ap;
-
- dstp = dst->elms;
- ap = src->elms;
- for (i = 0; i < dst->size; i++)
- {
- SBITMAP_ELT_TYPE tmp = ~(*ap);
- *dstp = tmp;
- dstp++; ap++;
- }
-}
-
-/* Set the bits in DST to be the difference between the bits
- in A and the bits in B. i.e. dst = a - b.
- The - operator is implemented as a & (~b). */
-
-void
-sbitmap_difference (dst, a, b)
- sbitmap dst, a, b;
-{
- int i;
- sbitmap_ptr dstp, ap, bp;
-
- dstp = dst->elms;
- ap = a->elms;
- bp = b->elms;
- for (i = 0; i < dst->size; i++)
- *dstp++ = *ap++ & (~*bp++);
-}
-
-/* Set DST to be (A and B)).
- Return non-zero if any change is made. */
-
-int
-sbitmap_a_and_b (dst, a, b)
- sbitmap dst, a, b;
-{
- int i,changed;
- sbitmap_ptr dstp, ap, bp;
-
- changed = 0;
- dstp = dst->elms;
- ap = a->elms;
- bp = b->elms;
- for (i = 0; i < dst->size; i++)
- {
- SBITMAP_ELT_TYPE tmp = *ap & *bp;
- if (*dstp != tmp)
- changed = 1;
- *dstp = tmp;
- dstp++; ap++; bp++;
- }
- return changed;
-}
-/* Set DST to be (A or B)).
- Return non-zero if any change is made. */
-
-int
-sbitmap_a_or_b (dst, a, b)
- sbitmap dst, a, b;
-{
- int i,changed;
- sbitmap_ptr dstp, ap, bp;
-
- changed = 0;
- dstp = dst->elms;
- ap = a->elms;
- bp = b->elms;
- for (i = 0; i < dst->size; i++)
- {
- SBITMAP_ELT_TYPE tmp = *ap | *bp;
- if (*dstp != tmp)
- changed = 1;
- *dstp = tmp;
- dstp++; ap++; bp++;
- }
- return changed;
-}
-
-/* Set DST to be (A or (B and C)).
- Return non-zero if any change is made. */
-
-int
-sbitmap_a_or_b_and_c (dst, a, b, c)
- sbitmap dst, a, b, c;
-{
- int i,changed;
- sbitmap_ptr dstp, ap, bp, cp;
-
- changed = 0;
- dstp = dst->elms;
- ap = a->elms;
- bp = b->elms;
- cp = c->elms;
- for (i = 0; i < dst->size; i++)
- {
- SBITMAP_ELT_TYPE tmp = *ap | (*bp & *cp);
- if (*dstp != tmp)
- changed = 1;
- *dstp = tmp;
- dstp++; ap++; bp++; cp++;
- }
- return changed;
-}
-
-/* Set DST to be (A ann (B or C)).
- Return non-zero if any change is made. */
-
-int
-sbitmap_a_and_b_or_c (dst, a, b, c)
- sbitmap dst, a, b, c;
-{
- int i,changed;
- sbitmap_ptr dstp, ap, bp, cp;
-
- changed = 0;
- dstp = dst->elms;
- ap = a->elms;
- bp = b->elms;
- cp = c->elms;
- for (i = 0; i < dst->size; i++)
- {
- SBITMAP_ELT_TYPE tmp = *ap & (*bp | *cp);
- if (*dstp != tmp)
- changed = 1;
- *dstp = tmp;
- dstp++; ap++; bp++; cp++;
- }
- return changed;
-}
-
-/* Set the bitmap DST to the intersection of SRC of all predecessors or
- successors of block number BB (PRED_SUCC says which). */
-
-void
-sbitmap_intersect_of_predsucc (dst, src, bb, pred_succ)
- sbitmap dst;
- sbitmap *src;
- int bb;
- int_list_ptr *pred_succ;
-{
- int_list_ptr ps;
- int ps_bb;
- int set_size = dst->size;
-
- ps = pred_succ[bb];
-
- /* It is possible that there are no predecessors(/successors).
- This can happen for example in unreachable code. */
-
- if (ps == NULL)
- {
- /* In APL-speak this is the `and' reduction of the empty set and thus
- the result is the identity for `and'. */
- sbitmap_ones (dst);
- return;
- }
-
- /* Set result to first predecessor/successor. */
-
- for ( ; ps != NULL; ps = ps->next)
- {
- ps_bb = INT_LIST_VAL (ps);
- if (ps_bb == ENTRY_BLOCK || ps_bb == EXIT_BLOCK)
- continue;
- sbitmap_copy (dst, src[ps_bb]);
- /* Break out since we're only doing first predecessor. */
- break;
- }
- if (ps == NULL)
- return;
-
- /* Now do the remaining predecessors/successors. */
-
- for (ps = ps->next; ps != NULL; ps = ps->next)
- {
- int i;
- sbitmap_ptr p,r;
-
- ps_bb = INT_LIST_VAL (ps);
- if (ps_bb == ENTRY_BLOCK || ps_bb == EXIT_BLOCK)
- continue;
-
- p = src[ps_bb]->elms;
- r = dst->elms;
-
- for (i = 0; i < set_size; i++)
- *r++ &= *p++;
- }
-}
-
-/* Set the bitmap DST to the intersection of SRC of all predecessors
- of block number BB. */
-
-void
-sbitmap_intersect_of_predecessors (dst, src, bb, s_preds)
- sbitmap dst;
- sbitmap *src;
- int bb;
- int_list_ptr *s_preds;
-{
- sbitmap_intersect_of_predsucc (dst, src, bb, s_preds);
-}
-
-/* Set the bitmap DST to the intersection of SRC of all successors
- of block number BB. */
-
-void
-sbitmap_intersect_of_successors (dst, src, bb, s_succs)
- sbitmap dst;
- sbitmap *src;
- int bb;
- int_list_ptr *s_succs;
-{
- sbitmap_intersect_of_predsucc (dst, src, bb, s_succs);
-}
-
-/* Set the bitmap DST to the union of SRC of all predecessors/successors of
- block number BB. */
-
-void
-sbitmap_union_of_predsucc (dst, src, bb, pred_succ)
- sbitmap dst;
- sbitmap *src;
- int bb;
- int_list_ptr *pred_succ;
-{
- int_list_ptr ps;
- int ps_bb;
- int set_size = dst->size;
-
- ps = pred_succ[bb];
-
- /* It is possible that there are no predecessors(/successors).
- This can happen for example in unreachable code. */
-
- if (ps == NULL)
- {
- /* In APL-speak this is the `or' reduction of the empty set and thus
- the result is the identity for `or'. */
- sbitmap_zero (dst);
- return;
- }
-
- /* Set result to first predecessor/successor. */
-
- for ( ; ps != NULL; ps = ps->next)
- {
- ps_bb = INT_LIST_VAL (ps);
- if (ps_bb == ENTRY_BLOCK || ps_bb == EXIT_BLOCK)
- continue;
- sbitmap_copy (dst, src[ps_bb]);
- /* Break out since we're only doing first predecessor. */
- break;
- }
- if (ps == NULL)
- return;
-
- /* Now do the remaining predecessors/successors. */
-
- for (ps = ps->next; ps != NULL; ps = ps->next)
- {
- int i;
- sbitmap_ptr p,r;
-
- ps_bb = INT_LIST_VAL (ps);
- if (ps_bb == ENTRY_BLOCK || ps_bb == EXIT_BLOCK)
- continue;
-
- p = src[ps_bb]->elms;
- r = dst->elms;
-
- for (i = 0; i < set_size; i++)
- *r++ |= *p++;
- }
-}
-
-/* Set the bitmap DST to the union of SRC of all predecessors of
- block number BB. */
-
-void
-sbitmap_union_of_predecessors (dst, src, bb, s_preds)
- sbitmap dst;
- sbitmap *src;
- int bb;
- int_list_ptr *s_preds;
-{
- sbitmap_union_of_predsucc (dst, src, bb, s_preds);
-}
-
-/* Set the bitmap DST to the union of SRC of all predecessors of
- block number BB. */
-
-void
-sbitmap_union_of_successors (dst, src, bb, s_succ)
- sbitmap dst;
- sbitmap *src;
- int bb;
- int_list_ptr *s_succ;
-{
- sbitmap_union_of_predsucc (dst, src, bb, s_succ);
-}
/* Compute dominator relationships. */
void
OpenPOWER on IntegriCloud