[5/6] Fold prev/next into gimple
Richard Guenther
richard.guenther@gmail.com
Wed May 2 10:06:00 GMT 2012
On Wed, May 2, 2012 at 3:28 AM, Michael Matz <matz@suse.de> wrote:
> Hi,
>
> this patch basically is the one that makes all interfaces that possibly
> change a gimple_seq take a pointer to one, this time _including_ the
> statement iterator.
>
> For that I opted to use the same idiom as our basic block edge iterators,
> namely via a wrapper macro that replaces the current gsi_start, and
> expands to "gsi_start_1 (&x)".
>
> This means that now even an writable iterator can be formed from an empty
> list, which is magically filled when things are added via that iterator.
> This is the reason why the first patch made sure that the gsi_start calls
> only receive lvalues. And this means also that the gimple_seq_alloc calls
> can be moved even more down to the low-level helpers.
>
> I add some XXX remarks with this patch, for which I have already another
> patch fixing them again. But it's not part of this series, so please bear
> with me.
>
> This should still be a functional no-op, as should be the whole 1-5
> sequence of patches. As per [0/6] regstrapped with the other five on
> x86_64-linux. Okay for trunk?
Ok.
Thanks,
Richard.
>
> Ciao,
> Michael.
> --------------------
> 2012-05-02 Michael Matz <matz@suse.de>
>
> * gimple.h (gimple_stmt_iterator <seq>): Make it be pointer to
> gimple_seq.
> (gimple_seq_set_last, gimple_seq_set_first): Take pointer to
> sequence, lazily allocate it.
> (bb_seq_addr): New function.
> (gsi_start_1): Rename from gsi_start, but take pointer to sequence.
> (gsi_start): Macro to wrap gsi_start_1 taking pointer of argument.
> (gsi_none): New function.
> (gsi_start_bb): Adjust.
> (gsi_last_1): Rename from gsi_last, but take pointer to sequence.
> (gsi_last): Macro to wrap gsi_last_1 taking pointer of argument.
> (gsi_last_bb): Adjust.
> (gsi_seq): Adjust.
> * tree-flow-inline.h (phi_nodes_ptr): New function.
>
> * gimple-iterator.c (gsi_insert_seq_nodes_before): Adjust to
> datastructure and interface change.
> (gsi_insert_seq_before_without_update): Ditto.
> (gsi_insert_seq_nodes_after): Ditto.
> (gsi_insert_seq_after_without_update): Ditto.
> (gsi_split_seq_after): Ditto, don't use gimple_seq_alloc.
> (gsi_split_seq_before): Ditto.
> (gsi_start_phis): Adjust.
> * tree-vect-loop.c (vect_determine_vectorization_factor): Use
> gsi_none.
> (vect_transform_loop): Ditto.
> * gimple.c (gimple_seq_add_stmt, gimple_seq_add_seq,
> gimple_seq_copy): Don't use gimple_seq_alloc.
> * gimplify.c (gimple_seq_add_stmt_without_update): Ditto.
> (gimplify_seq_add_seq): Ditto.
> * lto-streamer-in.c (make_new_block): Ditto.
> * tree-cfg.c (create_bb): Ditto.
> * tree-sra.c (initialize_parameter_reductions): Ditto.
>
> Index: gimple.h
> ===================================================================
> *** gimple.h.orig 2012-05-01 22:44:15.000000000 +0200
> --- gimple.h 2012-05-01 22:44:17.000000000 +0200
> *************** typedef struct
> *** 165,171 ****
> are necessary to handle edge cases such as when statement is
> added to an empty basic block or when the last statement of a
> block/sequence is removed. */
> ! gimple_seq seq;
> basic_block bb;
> } gimple_stmt_iterator;
>
> --- 165,171 ----
> are necessary to handle edge cases such as when statement is
> added to an empty basic block or when the last statement of a
> block/sequence is removed. */
> ! gimple_seq *seq;
> basic_block bb;
> } gimple_stmt_iterator;
>
> *************** gimple_seq_last_stmt (const_gimple_seq s
> *** 1070,1090 ****
> }
>
>
> ! /* Set the last node in GIMPLE sequence S to LAST. */
>
> static inline void
> ! gimple_seq_set_last (gimple_seq s, gimple_seq_node last)
> {
> ! s->last = last;
> }
>
>
> ! /* Set the first node in GIMPLE sequence S to FIRST. */
>
> static inline void
> ! gimple_seq_set_first (gimple_seq s, gimple_seq_node first)
> {
> ! s->first = first;
> }
>
>
> --- 1070,1094 ----
> }
>
>
> ! /* Set the last node in GIMPLE sequence *PS to LAST. */
>
> static inline void
> ! gimple_seq_set_last (gimple_seq *ps, gimple_seq_node last)
> {
> ! if (!*ps)
> ! *ps = gimple_seq_alloc ();
> ! (*ps)->last = last;
> }
>
>
> ! /* Set the first node in GIMPLE sequence *PS to FIRST. */
>
> static inline void
> ! gimple_seq_set_first (gimple_seq *ps, gimple_seq_node first)
> {
> ! if (!*ps)
> ! *ps = gimple_seq_alloc ();
> ! (*ps)->first = first;
> }
>
>
> *************** bb_seq (const_basic_block bb)
> *** 1125,1130 ****
> --- 1129,1139 ----
> return (!(bb->flags & BB_RTL) && bb->il.gimple) ? bb->il.gimple->seq : NULL;
> }
>
> + static inline gimple_seq *
> + bb_seq_addr (const_basic_block bb)
> + {
> + return (!(bb->flags & BB_RTL) && bb->il.gimple) ? &bb->il.gimple->seq : NULL;
> + }
>
> /* Sets the sequence of statements in BB to SEQ. */
>
> *************** is_gimple_reg_type (tree type)
> *** 4940,4956 ****
> /* Return a new iterator pointing to GIMPLE_SEQ's first statement. */
>
> static inline gimple_stmt_iterator
> ! gsi_start (gimple_seq seq)
> {
> gimple_stmt_iterator i;
>
> ! i.ptr = gimple_seq_first (seq);
> i.seq = seq;
> i.bb = (i.ptr && i.ptr->stmt) ? gimple_bb (i.ptr->stmt) : NULL;
>
> return i;
> }
>
>
> /* Return a new iterator pointing to the first statement in basic block BB. */
>
> --- 4949,4976 ----
> /* Return a new iterator pointing to GIMPLE_SEQ's first statement. */
>
> static inline gimple_stmt_iterator
> ! gsi_start_1 (gimple_seq *seq)
> {
> gimple_stmt_iterator i;
>
> ! i.ptr = gimple_seq_first (*seq);
> i.seq = seq;
> i.bb = (i.ptr && i.ptr->stmt) ? gimple_bb (i.ptr->stmt) : NULL;
>
> return i;
> }
>
> + #define gsi_start(x) gsi_start_1(&(x))
> +
> + static inline gimple_stmt_iterator
> + gsi_none (void)
> + {
> + gimple_stmt_iterator i;
> + i.ptr = NULL;
> + i.seq = NULL;
> + i.bb = NULL;
> + return i;
> + }
>
> /* Return a new iterator pointing to the first statement in basic block BB. */
>
> *************** static inline gimple_stmt_iterator
> *** 4958,4969 ****
> gsi_start_bb (basic_block bb)
> {
> gimple_stmt_iterator i;
> ! gimple_seq seq;
>
> ! seq = bb_seq (bb);
> ! i.ptr = gimple_seq_first (seq);
> ! i.seq = seq;
> ! i.bb = bb;
>
> return i;
> }
> --- 4978,5000 ----
> gsi_start_bb (basic_block bb)
> {
> gimple_stmt_iterator i;
> ! gimple_seq *seq;
>
> ! seq = bb_seq_addr (bb);
> ! if (!seq)
> ! /* XXX Only necessary because of ENTRY/EXIT block which don't have
> ! il.gimple */
> ! {
> ! i.ptr = NULL;
> ! i.seq = NULL;
> ! i.bb = NULL;
> ! }
> ! else
> ! {
> ! i.ptr = gimple_seq_first (*seq);
> ! i.seq = seq;
> ! i.bb = bb;
> ! }
>
> return i;
> }
> *************** gsi_start_bb (basic_block bb)
> *** 4972,4988 ****
> /* Return a new iterator initially pointing to GIMPLE_SEQ's last statement. */
>
> static inline gimple_stmt_iterator
> ! gsi_last (gimple_seq seq)
> {
> gimple_stmt_iterator i;
>
> ! i.ptr = gimple_seq_last (seq);
> i.seq = seq;
> i.bb = (i.ptr && i.ptr->stmt) ? gimple_bb (i.ptr->stmt) : NULL;
>
> return i;
> }
>
>
> /* Return a new iterator pointing to the last statement in basic block BB. */
>
> --- 5003,5020 ----
> /* Return a new iterator initially pointing to GIMPLE_SEQ's last statement. */
>
> static inline gimple_stmt_iterator
> ! gsi_last_1 (gimple_seq *seq)
> {
> gimple_stmt_iterator i;
>
> ! i.ptr = gimple_seq_last (*seq);
> i.seq = seq;
> i.bb = (i.ptr && i.ptr->stmt) ? gimple_bb (i.ptr->stmt) : NULL;
>
> return i;
> }
>
> + #define gsi_last(x) gsi_last_1(&(x))
>
> /* Return a new iterator pointing to the last statement in basic block BB. */
>
> *************** static inline gimple_stmt_iterator
> *** 4990,5001 ****
> gsi_last_bb (basic_block bb)
> {
> gimple_stmt_iterator i;
> ! gimple_seq seq;
>
> ! seq = bb_seq (bb);
> ! i.ptr = gimple_seq_last (seq);
> ! i.seq = seq;
> ! i.bb = bb;
>
> return i;
> }
> --- 5022,5044 ----
> gsi_last_bb (basic_block bb)
> {
> gimple_stmt_iterator i;
> ! gimple_seq *seq;
>
> ! seq = bb_seq_addr (bb);
> ! if (!seq)
> ! /* XXX Only necessary because of ENTRY/EXIT block which don't have
> ! il.gimple */
> ! {
> ! i.ptr = NULL;
> ! i.seq = NULL;
> ! i.bb = NULL;
> ! }
> ! else
> ! {
> ! i.ptr = gimple_seq_last (*seq);
> ! i.seq = seq;
> ! i.bb = bb;
> ! }
>
> return i;
> }
> *************** gsi_bb (gimple_stmt_iterator i)
> *** 5136,5142 ****
> static inline gimple_seq
> gsi_seq (gimple_stmt_iterator i)
> {
> ! return i.seq;
> }
>
>
> --- 5179,5185 ----
> static inline gimple_seq
> gsi_seq (gimple_stmt_iterator i)
> {
> ! return *i.seq;
> }
>
>
> Index: gimple-iterator.c
> ===================================================================
> *** gimple-iterator.c.orig 2012-05-01 22:44:06.000000000 +0200
> --- gimple-iterator.c 2012-05-01 22:44:17.000000000 +0200
> *************** gsi_insert_seq_nodes_before (gimple_stmt
> *** 129,135 ****
> }
> else
> {
> ! gimple_seq_node itlast = gimple_seq_last (i->seq);
>
> /* If CUR is NULL, we link at the end of the sequence (this case happens
> when gsi_after_labels is called for a basic block that contains only
> --- 129,135 ----
> }
> else
> {
> ! gimple_seq_node itlast = gimple_seq_last (*i->seq);
>
> /* If CUR is NULL, we link at the end of the sequence (this case happens
> when gsi_after_labels is called for a basic block that contains only
> *************** gsi_insert_seq_before_without_update (gi
> *** 178,190 ****
> return;
>
> /* Don't allow inserting a sequence into itself. */
> ! gcc_assert (seq != i->seq);
>
> first = gimple_seq_first (seq);
> last = gimple_seq_last (seq);
>
> ! gimple_seq_set_first (seq, NULL);
> ! gimple_seq_set_last (seq, NULL);
> gimple_seq_free (seq);
>
> /* Empty sequences need no work. */
> --- 178,190 ----
> return;
>
> /* Don't allow inserting a sequence into itself. */
> ! gcc_assert (seq != *i->seq);
>
> first = gimple_seq_first (seq);
> last = gimple_seq_last (seq);
>
> ! gimple_seq_set_first (&seq, NULL);
> ! gimple_seq_set_last (&seq, NULL);
> gimple_seq_free (seq);
>
> /* Empty sequences need no work. */
> *************** gsi_insert_seq_nodes_after (gimple_stmt_
> *** 248,254 ****
> }
> else
> {
> ! gcc_assert (!gimple_seq_last (i->seq));
> gimple_seq_set_first (i->seq, first);
> gimple_seq_set_last (i->seq, last);
> }
> --- 248,254 ----
> }
> else
> {
> ! gcc_assert (!gimple_seq_last (*i->seq));
> gimple_seq_set_first (i->seq, first);
> gimple_seq_set_last (i->seq, last);
> }
> *************** gsi_insert_seq_after_without_update (gim
> *** 289,301 ****
> return;
>
> /* Don't allow inserting a sequence into itself. */
> ! gcc_assert (seq != i->seq);
>
> first = gimple_seq_first (seq);
> last = gimple_seq_last (seq);
>
> ! gimple_seq_set_first (seq, NULL);
> ! gimple_seq_set_last (seq, NULL);
> gimple_seq_free (seq);
>
> /* Empty sequences need no work. */
> --- 289,301 ----
> return;
>
> /* Don't allow inserting a sequence into itself. */
> ! gcc_assert (seq != *i->seq);
>
> first = gimple_seq_first (seq);
> last = gimple_seq_last (seq);
>
> ! gimple_seq_set_first (&seq, NULL);
> ! gimple_seq_set_last (&seq, NULL);
> gimple_seq_free (seq);
>
> /* Empty sequences need no work. */
> *************** gimple_seq
> *** 329,335 ****
> gsi_split_seq_after (gimple_stmt_iterator i)
> {
> gimple_seq_node cur, next;
> ! gimple_seq old_seq, new_seq;
>
> cur = i.ptr;
>
> --- 329,335 ----
> gsi_split_seq_after (gimple_stmt_iterator i)
> {
> gimple_seq_node cur, next;
> ! gimple_seq *pold_seq, new_seq;
>
> cur = i.ptr;
>
> *************** gsi_split_seq_after (gimple_stmt_iterato
> *** 337,348 ****
> gcc_assert (cur && cur->next);
> next = cur->next;
>
> ! old_seq = i.seq;
> ! new_seq = gimple_seq_alloc ();
>
> ! gimple_seq_set_first (new_seq, next);
> ! gimple_seq_set_last (new_seq, gimple_seq_last (old_seq));
> ! gimple_seq_set_last (old_seq, cur);
> cur->next = NULL;
> next->prev = NULL;
>
> --- 337,348 ----
> gcc_assert (cur && cur->next);
> next = cur->next;
>
> ! pold_seq = i.seq;
> ! new_seq = NULL;
>
> ! gimple_seq_set_first (&new_seq, next);
> ! gimple_seq_set_last (&new_seq, gimple_seq_last (*pold_seq));
> ! gimple_seq_set_last (pold_seq, cur);
> cur->next = NULL;
> next->prev = NULL;
>
> *************** void
> *** 369,375 ****
> gsi_split_seq_before (gimple_stmt_iterator *i, gimple_seq *pnew_seq)
> {
> gimple_seq_node cur, prev;
> ! gimple_seq old_seq, new_seq;
>
> cur = i->ptr;
>
> --- 369,375 ----
> gsi_split_seq_before (gimple_stmt_iterator *i, gimple_seq *pnew_seq)
> {
> gimple_seq_node cur, prev;
> ! gimple_seq old_seq;
>
> cur = i->ptr;
>
> *************** gsi_split_seq_before (gimple_stmt_iterat
> *** 377,399 ****
> gcc_assert (cur);
> prev = cur->prev;
>
> ! old_seq = i->seq;
> ! new_seq = gimple_seq_alloc ();
> ! i->seq = new_seq;
>
> /* Set the limits on NEW_SEQ. */
> ! gimple_seq_set_first (new_seq, cur);
> ! gimple_seq_set_last (new_seq, gimple_seq_last (old_seq));
>
> /* Cut OLD_SEQ before I. */
> ! gimple_seq_set_last (old_seq, prev);
> cur->prev = NULL;
> if (prev)
> prev->next = NULL;
> else
> ! gimple_seq_set_first (old_seq, NULL);
> !
> ! *pnew_seq = new_seq;
> }
>
>
> --- 377,397 ----
> gcc_assert (cur);
> prev = cur->prev;
>
> ! old_seq = *i->seq;
> ! i->seq = pnew_seq;
> ! *pnew_seq = NULL;
>
> /* Set the limits on NEW_SEQ. */
> ! gimple_seq_set_first (pnew_seq, cur);
> ! gimple_seq_set_last (pnew_seq, gimple_seq_last (old_seq));
>
> /* Cut OLD_SEQ before I. */
> ! gimple_seq_set_last (&old_seq, prev);
> cur->prev = NULL;
> if (prev)
> prev->next = NULL;
> else
> ! gimple_seq_set_first (&old_seq, NULL);
> }
>
>
> *************** gsi_commit_one_edge_insert (edge e, basi
> *** 850,854 ****
> gimple_stmt_iterator
> gsi_start_phis (basic_block bb)
> {
> ! return gsi_start (phi_nodes (bb));
> }
> --- 848,854 ----
> gimple_stmt_iterator
> gsi_start_phis (basic_block bb)
> {
> ! gimple_seq *pseq = phi_nodes_ptr (bb);
> ! /* XXX check only necessary because ENTRY/EXIT blocks don't have il.gimple */
> ! return pseq ? gsi_start_1 (pseq) : gsi_none ();
> }
> Index: tree-flow-inline.h
> ===================================================================
> *** tree-flow-inline.h.orig 2012-05-01 22:39:06.000000000 +0200
> --- tree-flow-inline.h 2012-05-01 22:44:17.000000000 +0200
> *************** phi_nodes (const_basic_block bb)
> *** 511,516 ****
> --- 511,525 ----
> return bb->il.gimple->phi_nodes;
> }
>
> + static inline gimple_seq *
> + phi_nodes_ptr (const_basic_block bb)
> + {
> + gcc_checking_assert (!(bb->flags & BB_RTL));
> + if (!bb->il.gimple)
> + return NULL;
> + return &bb->il.gimple->phi_nodes;
> + }
> +
> /* Set PHI nodes of a basic block BB to SEQ. */
>
> static inline void
> Index: tree-vect-loop.c
> ===================================================================
> *** tree-vect-loop.c.orig 2012-05-01 22:39:06.000000000 +0200
> --- tree-vect-loop.c 2012-05-01 22:44:17.000000000 +0200
> *************** vect_determine_vectorization_factor (loo
> *** 183,189 ****
> HOST_WIDE_INT dummy;
> gimple stmt, pattern_stmt = NULL;
> gimple_seq pattern_def_seq = NULL;
> ! gimple_stmt_iterator pattern_def_si = gsi_start (NULL);
> bool analyze_pattern_stmt = false;
>
> if (vect_print_dump_info (REPORT_DETAILS))
> --- 183,189 ----
> HOST_WIDE_INT dummy;
> gimple stmt, pattern_stmt = NULL;
> gimple_seq pattern_def_seq = NULL;
> ! gimple_stmt_iterator pattern_def_si = gsi_none ();
> bool analyze_pattern_stmt = false;
>
> if (vect_print_dump_info (REPORT_DETAILS))
> *************** vect_determine_vectorization_factor (loo
> *** 336,342 ****
> }
> else
> {
> ! pattern_def_si = gsi_start (NULL);
> analyze_pattern_stmt = false;
> }
> }
> --- 336,342 ----
> }
> else
> {
> ! pattern_def_si = gsi_none ();
> analyze_pattern_stmt = false;
> }
> }
> *************** vect_transform_loop (loop_vec_info loop_
> *** 5231,5237 ****
> gimple_seq cond_expr_stmt_list = NULL;
> gimple stmt, pattern_stmt;
> gimple_seq pattern_def_seq = NULL;
> ! gimple_stmt_iterator pattern_def_si = gsi_start (NULL);
> bool transform_pattern_stmt = false;
>
> if (vect_print_dump_info (REPORT_DETAILS))
> --- 5231,5237 ----
> gimple_seq cond_expr_stmt_list = NULL;
> gimple stmt, pattern_stmt;
> gimple_seq pattern_def_seq = NULL;
> ! gimple_stmt_iterator pattern_def_si = gsi_none ();
> bool transform_pattern_stmt = false;
>
> if (vect_print_dump_info (REPORT_DETAILS))
> *************** vect_transform_loop (loop_vec_info loop_
> *** 5409,5415 ****
> }
> else
> {
> ! pattern_def_si = gsi_start (NULL);
> transform_pattern_stmt = false;
> }
> }
> --- 5409,5415 ----
> }
> else
> {
> ! pattern_def_si = gsi_none ();
> transform_pattern_stmt = false;
> }
> }
> Index: gimple.c
> ===================================================================
> *** gimple.c.orig 2012-05-01 22:43:34.000000000 +0200
> --- gimple.c 2012-05-01 22:44:17.000000000 +0200
> *************** void
> *** 1255,1267 ****
> gimple_seq_add_stmt (gimple_seq *seq_p, gimple gs)
> {
> gimple_stmt_iterator si;
> -
> if (gs == NULL)
> return;
>
> - if (*seq_p == NULL)
> - *seq_p = gimple_seq_alloc ();
> -
> si = gsi_last (*seq_p);
> gsi_insert_after (&si, gs, GSI_NEW_STMT);
> }
> --- 1255,1263 ----
> *************** void
> *** 1274,1286 ****
> gimple_seq_add_seq (gimple_seq *dst_p, gimple_seq src)
> {
> gimple_stmt_iterator si;
> -
> if (src == NULL)
> return;
>
> - if (*dst_p == NULL)
> - *dst_p = gimple_seq_alloc ();
> -
> si = gsi_last (*dst_p);
> gsi_insert_seq_after (&si, src, GSI_NEW_STMT);
> }
> --- 1270,1278 ----
> *************** gimple_seq
> *** 1324,1330 ****
> gimple_seq_copy (gimple_seq src)
> {
> gimple_stmt_iterator gsi;
> ! gimple_seq new_seq = gimple_seq_alloc ();
> gimple stmt;
>
> for (gsi = gsi_start (src); !gsi_end_p (gsi); gsi_next (&gsi))
> --- 1316,1322 ----
> gimple_seq_copy (gimple_seq src)
> {
> gimple_stmt_iterator gsi;
> ! gimple_seq new_seq = NULL;
> gimple stmt;
>
> for (gsi = gsi_start (src); !gsi_end_p (gsi); gsi_next (&gsi))
> Index: gimplify.c
> ===================================================================
> *** gimplify.c.orig 2012-05-01 22:44:02.000000000 +0200
> --- gimplify.c 2012-05-01 22:44:17.000000000 +0200
> *************** gimple_seq_add_stmt_without_update (gimp
> *** 169,179 ****
> if (gs == NULL)
> return;
>
> - if (*seq_p == NULL)
> - *seq_p = gimple_seq_alloc ();
> -
> si = gsi_last (*seq_p);
> -
> gsi_insert_after_without_update (&si, gs, GSI_NEW_STMT);
> }
>
> --- 169,175 ----
> *************** gimplify_seq_add_seq (gimple_seq *dst_p,
> *** 200,208 ****
> if (src == NULL)
> return;
>
> - if (*dst_p == NULL)
> - *dst_p = gimple_seq_alloc ();
> -
> si = gsi_last (*dst_p);
> gsi_insert_seq_after_without_update (&si, src, GSI_NEW_STMT);
> }
> --- 196,201 ----
> Index: lto-streamer-in.c
> ===================================================================
> *** lto-streamer-in.c.orig 2012-05-01 22:39:06.000000000 +0200
> --- lto-streamer-in.c 2012-05-01 22:44:17.000000000 +0200
> *************** make_new_block (struct function *fn, uns
> *** 602,608 ****
> bb->il.gimple = ggc_alloc_cleared_gimple_bb_info ();
> n_basic_blocks_for_function (fn)++;
> bb->flags = 0;
> ! set_bb_seq (bb, gimple_seq_alloc ());
> return bb;
> }
>
> --- 602,608 ----
> bb->il.gimple = ggc_alloc_cleared_gimple_bb_info ();
> n_basic_blocks_for_function (fn)++;
> bb->flags = 0;
> ! set_bb_seq (bb, NULL);
> return bb;
> }
>
> Index: tree-cfg.c
> ===================================================================
> *** tree-cfg.c.orig 2012-05-01 22:43:34.000000000 +0200
> --- tree-cfg.c 2012-05-01 22:44:17.000000000 +0200
> *************** create_bb (void *h, void *e, basic_block
> *** 439,445 ****
> bb->index = last_basic_block;
> bb->flags = BB_NEW;
> bb->il.gimple = ggc_alloc_cleared_gimple_bb_info ();
> ! set_bb_seq (bb, h ? (gimple_seq) h : gimple_seq_alloc ());
>
> /* Add the new block to the linked list of blocks. */
> link_block (bb, after);
> --- 439,445 ----
> bb->index = last_basic_block;
> bb->flags = BB_NEW;
> bb->il.gimple = ggc_alloc_cleared_gimple_bb_info ();
> ! set_bb_seq (bb, h ? (gimple_seq) h : NULL);
>
> /* Add the new block to the linked list of blocks. */
> link_block (bb, after);
> Index: tree-sra.c
> ===================================================================
> *** tree-sra.c.orig 2012-05-01 22:39:06.000000000 +0200
> --- tree-sra.c 2012-05-01 22:44:17.000000000 +0200
> *************** initialize_parameter_reductions (void)
> *** 3192,3197 ****
> --- 3192,3198 ----
> gimple_seq seq = NULL;
> tree parm;
>
> + gsi = gsi_start (seq);
> for (parm = DECL_ARGUMENTS (current_function_decl);
> parm;
> parm = DECL_CHAIN (parm))
> *************** initialize_parameter_reductions (void)
> *** 3205,3216 ****
> if (!access_vec)
> continue;
>
> - if (!seq)
> - {
> - seq = gimple_seq_alloc ();
> - gsi = gsi_start (seq);
> - }
> -
> for (access = VEC_index (access_p, access_vec, 0);
> access;
> access = access->next_grp)
> --- 3206,3211 ----
> *************** initialize_parameter_reductions (void)
> *** 3218,3223 ****
> --- 3213,3219 ----
> EXPR_LOCATION (parm));
> }
>
> + seq = gsi_seq (gsi);
> if (seq)
> gsi_insert_seq_on_edge_immediate (single_succ_edge (ENTRY_BLOCK_PTR), seq);
> }
More information about the Gcc-patches
mailing list