This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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;
  }
  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]