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]

[PATCH] Speedup gimple_split_block


This removes the old vestige loop to find a gsi for a stmt (from times
where gsi_for_stmt was O(n)).

PR44563 shows gimple_split_block quite high in the profile (this
patch doesn't fix that) as the tail loop setting BB on all stmts
moved to the new block shows quadratic behavior when inlining
N calls in a basic-block.

Bootstrap and regtest scheduled on x86_64-unknown-linux-gnu.

Richard.

2015-03-10  Richard Biener  <rguenther@suse.de>

	* tree-cfg.c (gimple_split_block): Remove loop finding stmt
	to split on.

Index: gcc/tree-cfg.c
===================================================================
*** gcc/tree-cfg.c	(revision 221277)
--- gcc/tree-cfg.c	(working copy)
*************** gimple_split_block (basic_block bb, void
*** 5697,5722 ****
    FOR_EACH_EDGE (e, ei, new_bb->succs)
      e->src = new_bb;
  
!   if (stmt && gimple_code ((gimple) stmt) == GIMPLE_LABEL)
!     stmt = NULL;
! 
    /* Move everything from GSI to the new basic block.  */
-   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-     {
-       act = gsi_stmt (gsi);
-       if (gimple_code (act) == GIMPLE_LABEL)
- 	continue;
- 
-       if (!stmt)
- 	break;
- 
-       if (stmt == act)
- 	{
- 	  gsi_next (&gsi);
- 	  break;
- 	}
-     }
- 
    if (gsi_end_p (gsi))
      return new_bb;
  
--- 5723,5735 ----
    FOR_EACH_EDGE (e, ei, new_bb->succs)
      e->src = new_bb;
  
!   /* Get a stmt iterator pointing to the first stmt to move.  */
!   if (!stmt || gimple_code ((gimple) stmt) == GIMPLE_LABEL)
!     gsi = gsi_after_labels (bb);
!   else
!     gsi = gsi_for_stmt ((gimple) stmt);
!  
    /* Move everything from GSI to the new basic block.  */
    if (gsi_end_p (gsi))
      return new_bb;
  


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