This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: 3 pending patches from last year
- From: Paolo Bonzini <paolo dot bonzini at lu dot unisi dot ch>
- To: Eric Botcazou <ebotcazou at adacore dot com>
- Cc: gcc-patches at gcc dot gnu dot org, Richard Henderson <rth at redhat dot com>
- Date: Wed, 14 Feb 2007 08:04:02 +0100
- Subject: Re: 3 pending patches from last year
- References: <200702131718.37416.ebotcazou@adacore.com>
Eric Botcazou wrote:
Cope with exception_receiver on Alpha/Tru64 5.x:
http://gcc.gnu.org/ml/gcc-patches/2006-11/msg01448.html
What about a patch like this (untested), to make commit_edge_insertions
fast if it will do no work? This way, we can call it unconditionally in
except.c and possibly a few other places.
Index: cfgrtl.c
===================================================================
--- cfgrtl.c (revision 121944)
+++ cfgrtl.c (working copy)
@@ -1329,6 +1329,7 @@ insert_insn_on_edge (rtx pattern, edge e
e->insns.r = get_insns ();
end_sequence ();
+ pending_edge_inserts = true;
}
/* Update the CFG for the instructions queued on edge E. */
@@ -1468,6 +1469,9 @@ commit_edge_insertions (void)
sbitmap blocks;
bool changed = false;
+ if (!pending_edge_inserts)
+ return;
+
#ifdef ENABLE_CHECKING
verify_flow_info ();
#endif
@@ -1485,8 +1489,8 @@ commit_edge_insertions (void)
}
}
- if (!changed)
- return;
+ gcc_assert (changed);
+ pending_edge_inserts = false;
/* In the old rtl CFG API, it was OK to insert control flow on an
edge, apparently? In cfglayout mode, this will *not* work, and
Index: basic-block.h
===================================================================
--- basic-block.h (revision 121944)
+++ basic-block.h (working copy)
@@ -378,6 +378,9 @@ struct control_flow_graph GTY(())
/* The first free basic block number. */
int x_last_basic_block;
+ /* Whether edge insertions are waiting to be committed. */
+ bool x_pending_edge_inserts;
+
/* Mapping of labels to their associated blocks. At present
only used for the tree CFG. */
VEC(basic_block,gc) *x_label_to_block_map;
@@ -410,6 +413,7 @@ struct control_flow_graph GTY(())
#define last_basic_block (cfun->cfg->x_last_basic_block)
#define label_to_block_map (cfun->cfg->x_label_to_block_map)
#define profile_status (cfun->cfg->x_profile_status)
+#define pending_edge_inserts (cfun->cfg->x_pending_edge_inserts)
#define BASIC_BLOCK(N) (VEC_index (basic_block,
basic_block_info, (N)))
#define SET_BASIC_BLOCK(N,BB) (VEC_replace (basic_block,
basic_block_info, (N), (BB)))