Commit f76ccf60 by Ben Elliston Committed by Ben Elliston

basic-block.h (edge_iterator): Keep the address of VEC(edge) *.

	* basic-block.h (edge_iterator): Keep the address of VEC(edge) *.
	(ei_container): New; renamed.
	(ei_start, ei_last): New macros.
	(ei_start_1, ei_last_1): Renamed from ei_start.
	(ei_last_1, ei_end_p): Use ei_container() where applicable.
	(ei_one_before_end_p, ei_next, ei_edge): Likewise.
	* gcse.c (remove_reachable_equiv_notes): Use ei_container().

From-SVN: r88966
parent 86df10e3
2004-10-12 Ben Elliston <bje@au.ibm.com>
* basic-block.h (edge_iterator): Keep the address of VEC(edge) *.
(ei_container): New; renamed.
(ei_start, ei_last): New macros.
(ei_start_1, ei_last_1): Renamed from ei_start.
(ei_last_1, ei_end_p): Use ei_container() where applicable.
(ei_one_before_end_p, ei_next, ei_edge): Likewise.
* gcse.c (remove_reachable_equiv_notes): Use ei_container().
2004-10-11 Sebastian Pop <pop@cri.ensmp.fr> 2004-10-11 Sebastian Pop <pop@cri.ensmp.fr>
* Makefile.in (tree-ssa-loop-niter.o): Depends on tree-data-ref.h. * Makefile.in (tree-ssa-loop-niter.o): Depends on tree-data-ref.h.
......
...@@ -563,12 +563,22 @@ struct edge_list ...@@ -563,12 +563,22 @@ struct edge_list
typedef struct { typedef struct {
unsigned index; unsigned index;
VEC(edge) *container; VEC(edge) **container;
} edge_iterator; } edge_iterator;
static inline VEC(edge) *
ei_container (edge_iterator i)
{
gcc_assert (i.container);
return *i.container;
}
#define ei_start(iter) ei_start_1 (&(iter))
#define ei_last(iter) ei_last_1 (&(iter))
/* Return an iterator pointing to the start of an edge vector. */ /* Return an iterator pointing to the start of an edge vector. */
static inline edge_iterator static inline edge_iterator
ei_start (VEC(edge) *ev) ei_start_1 (VEC(edge) **ev)
{ {
edge_iterator i; edge_iterator i;
...@@ -581,11 +591,11 @@ ei_start (VEC(edge) *ev) ...@@ -581,11 +591,11 @@ ei_start (VEC(edge) *ev)
/* Return an iterator pointing to the last element of an edge /* Return an iterator pointing to the last element of an edge
vector. */ vector. */
static inline edge_iterator static inline edge_iterator
ei_last (VEC(edge) *ev) ei_last_1 (VEC(edge) **ev)
{ {
edge_iterator i; edge_iterator i;
i.index = EDGE_COUNT (ev) - 1; i.index = EDGE_COUNT (*ev) - 1;
i.container = ev; i.container = ev;
return i; return i;
...@@ -595,7 +605,7 @@ ei_last (VEC(edge) *ev) ...@@ -595,7 +605,7 @@ ei_last (VEC(edge) *ev)
static inline bool static inline bool
ei_end_p (edge_iterator i) ei_end_p (edge_iterator i)
{ {
return (i.index == EDGE_COUNT (i.container)); return (i.index == EDGE_COUNT (ei_container (i)));
} }
/* Is the iterator `i' at one position before the end of the /* Is the iterator `i' at one position before the end of the
...@@ -603,14 +613,14 @@ ei_end_p (edge_iterator i) ...@@ -603,14 +613,14 @@ ei_end_p (edge_iterator i)
static inline bool static inline bool
ei_one_before_end_p (edge_iterator i) ei_one_before_end_p (edge_iterator i)
{ {
return (i.index + 1 == EDGE_COUNT (i.container)); return (i.index + 1 == EDGE_COUNT (ei_container (i)));
} }
/* Advance the iterator to the next element. */ /* Advance the iterator to the next element. */
static inline void static inline void
ei_next (edge_iterator *i) ei_next (edge_iterator *i)
{ {
gcc_assert (i->index < EDGE_COUNT (i->container)); gcc_assert (i->index < EDGE_COUNT (ei_container (*i)));
i->index++; i->index++;
} }
...@@ -626,7 +636,7 @@ ei_prev (edge_iterator *i) ...@@ -626,7 +636,7 @@ ei_prev (edge_iterator *i)
static inline edge static inline edge
ei_edge (edge_iterator i) ei_edge (edge_iterator i)
{ {
return EDGE_I (i.container, i.index); return EDGE_I (ei_container (i), i.index);
} }
/* Return an edge pointed to by the iterator. Do it safely so that /* Return an edge pointed to by the iterator. Do it safely so that
......
...@@ -6293,7 +6293,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr) ...@@ -6293,7 +6293,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr)
sbitmap_zero (visited); sbitmap_zero (visited);
act = (EDGE_COUNT (ei.container) > 0 ? EDGE_I (ei.container, 0) : NULL); act = (EDGE_COUNT (ei_container (ei)) > 0 ? EDGE_I (ei_container (ei), 0) : NULL);
while (1) while (1)
{ {
if (!act) if (!act)
...@@ -6351,7 +6351,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr) ...@@ -6351,7 +6351,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr)
if (act) if (act)
stack[sp++] = ei; stack[sp++] = ei;
ei = ei_start (bb->succs); ei = ei_start (bb->succs);
act = (EDGE_COUNT (ei.container) > 0 ? EDGE_I (ei.container, 0) : NULL); act = (EDGE_COUNT (ei_container (ei)) > 0 ? EDGE_I (ei_container (ei), 0) : NULL);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment