From f76ccf602e952b33cbfb9684e307af4e09b9a82c Mon Sep 17 00:00:00 2001 From: Ben Elliston Date: Wed, 13 Oct 2004 04:33:28 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 10 ++++++++++ gcc/basic-block.h | 26 ++++++++++++++++++-------- gcc/gcse.c | 4 ++-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5083211e03d..7a342012e2a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2004-10-12 Ben Elliston + + * 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 * Makefile.in (tree-ssa-loop-niter.o): Depends on tree-data-ref.h. diff --git a/gcc/basic-block.h b/gcc/basic-block.h index e2d20ac3984..ed03ac95cbb 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -563,12 +563,22 @@ struct edge_list 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; @@ -581,11 +591,11 @@ ei_start (VEC(edge) *ev) /* 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; @@ -595,7 +605,7 @@ ei_last (VEC(edge) *ev) 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 @@ -603,14 +613,14 @@ ei_end_p (edge_iterator i) 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++; } @@ -626,7 +636,7 @@ ei_prev (edge_iterator *i) 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 diff --git a/gcc/gcse.c b/gcc/gcse.c index 1370be1c349..f1e1b0aa85f 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -6293,7 +6293,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr) 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) @@ -6351,7 +6351,7 @@ remove_reachable_equiv_notes (basic_block bb, struct ls_expr *smexpr) 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); } } }