This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa] clean up pre edge splitting
- From: Richard Henderson <rth at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 14 Nov 2003 15:36:03 -0800
- Subject: [tree-ssa] clean up pre edge splitting
The previous implementation creates a lot of garbage in trying
to split the edges. The straightforward approach works now.
r~
* tree-ssa-pre.c (split_critical_edges): Reimplement. Call
tree_split_edge directly.
Index: tree-ssa-pre.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-ssa-pre.c,v
retrieving revision 1.1.4.103
diff -c -p -d -r1.1.4.103 tree-ssa-pre.c
*** tree-ssa-pre.c 14 Nov 2003 20:19:16 -0000 1.1.4.103
--- tree-ssa-pre.c 14 Nov 2003 23:30:32 -0000
*************** pre_expression (struct expr_info *slot,
*** 3121,3147 ****
static bool
split_critical_edges (void)
{
- struct edge_list *el = create_edge_list ();
bool did_something = false;
! tree tempvar = create_tmp_var (integer_type_node, "critedgetmp");
! int i;
edge e;
! add_referenced_tmp_var (tempvar);
! for (i = 0; i < NUM_EDGES (el); i++)
! {
! e = INDEX_EDGE (el, i);
! if (EDGE_CRITICAL_P (e) && !(e->flags & EDGE_ABNORMAL))
! {
! tree newexpr = build (MODIFY_EXPR, TREE_TYPE (tempvar), tempvar,
! integer_zero_node);
! tree newtemp = make_ssa_name (tempvar, newexpr);
! TREE_OPERAND (newexpr, 0) = newtemp;
! bsi_insert_on_edge (e, newexpr);
! did_something = true;
! }
! }
! bsi_commit_edge_inserts (0, 0);
! free_edge_list (el);
return did_something;
}
--- 3121,3140 ----
static bool
split_critical_edges (void)
{
bool did_something = false;
! basic_block bb;
edge e;
!
! FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
! {
! for (e = bb->succ; e ; e = e->succ_next)
! if (EDGE_CRITICAL_P (e) && !(e->flags & EDGE_ABNORMAL))
! {
! tree_split_edge (e);
! did_something = true;
! }
! }
!
return did_something;
}