+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>
* Makefile.in (tree-ssa-loop-niter.o): Depends on tree-data-ref.h.
typedef struct {
unsigned index;
- VEC(edge) *container;
+ VEC(edge) **container;
} 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. */
static inline edge_iterator
-ei_start (VEC(edge) *ev)
+ei_start_1 (VEC(edge) **ev)
{
edge_iterator i;
/* Return an iterator pointing to the last element of an edge
vector. */
static inline edge_iterator
-ei_last (VEC(edge) *ev)
+ei_last_1 (VEC(edge) **ev)
{
edge_iterator i;
- i.index = EDGE_COUNT (ev) - 1;
+ i.index = EDGE_COUNT (*ev) - 1;
i.container = ev;
return i;
static inline bool
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
static inline bool
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. */
static inline void
ei_next (edge_iterator *i)
{
- gcc_assert (i->index < EDGE_COUNT (i->container));
+ gcc_assert (i->index < EDGE_COUNT (ei_container (*i)));
i->index++;
}
static inline edge
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
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)
{
if (!act)
if (act)
stack[sp++] = ei;
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);
}
}
}