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] tree-outof-ssa.c: Remove SSANORM_USE_COALESCE_LIST.


Hi,

Attached is a patch to remove SSANORM_USE_COALESCE_LIST.

rewrite_out_of_ssa always passes SSANORM_USE_COALESCE_LIST to
coalesce_ssa_name.  So we can remove SSANORM_USE_COALESCE_LIST and all
the uses of it.

The patch appears to be big because of indentation changes, but the
core part of it is very small.

Tested on i686-pc-linux-gnu.  OK to apply?

Kazu Hirata

2005-02-22  Kazu Hirata  <kazu@cs.umass.edu>

	* tree-outof-ssa.c (SSANORM_USE_COALESCE_LIST): Remove.
	(coalesce_ssa_name): Don't check for
	SSANORM_USE_COALESCE_LIST.
	(rewrite_out_of_ssa): Don't use SSANORM_USE_COALESCE_LIST.

Index: tree-outof-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-outof-ssa.c,v
retrieving revision 2.46
diff -c -d -p -r2.46 tree-outof-ssa.c
*** tree-outof-ssa.c	21 Feb 2005 14:33:36 -0000	2.46
--- tree-outof-ssa.c	21 Feb 2005 15:01:24 -0000
*************** Boston, MA 02111-1307, USA.  */
*** 52,58 ****
  #define SSANORM_PERFORM_TER		0x1
  #define SSANORM_COMBINE_TEMPS		0x2
  #define SSANORM_COALESCE_PARTITIONS	0x4
- #define SSANORM_USE_COALESCE_LIST	0x8
  
  /* Used to hold all the components required to do SSA PHI elimination.
     The node and pred/succ list is a simple linear list of nodes and
--- 52,57 ----
*************** coalesce_ssa_name (var_map map, int flag
*** 696,705 ****
    if (num_var_partitions (map) <= 1)
      return NULL;
  
-   /* If no preference given, use cheap coalescing of all partitions.  */
-   if ((flags & (SSANORM_COALESCE_PARTITIONS | SSANORM_USE_COALESCE_LIST)) == 0)
-     flags |= SSANORM_COALESCE_PARTITIONS;
-   
    liveinfo = calculate_live_on_entry (map);
    calculate_live_on_exit (liveinfo);
    rv = root_var_init (map);
--- 695,700 ----
*************** coalesce_ssa_name (var_map map, int flag
*** 707,757 ****
    /* Remove single element variable from the list.  */
    root_var_compact (rv);
  
!   if (flags & SSANORM_USE_COALESCE_LIST)
      {
!       cl = create_coalesce_list (map);
!       
!       /* Add all potential copies via PHI arguments to the list.  */
!       FOR_EACH_BB (bb)
  	{
! 	  for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
  	    {
! 	      tree res = PHI_RESULT (phi);
! 	      int p = var_to_partition (map, res);
! 	      if (p == NO_PARTITION)
! 		continue;
! 	      for (x = 0; x < (unsigned)PHI_NUM_ARGS (phi); x++)
! 		{
! 		  tree arg = PHI_ARG_DEF (phi, x);
! 		  int p2;
  
! 		  if (TREE_CODE (arg) != SSA_NAME)
! 		    continue;
! 		  if (SSA_NAME_VAR (res) != SSA_NAME_VAR (arg))
! 		    continue;
! 		  p2 = var_to_partition (map, PHI_ARG_DEF (phi, x));
! 		  if (p2 != NO_PARTITION)
! 		    add_coalesce (cl, p, p2, 1);
! 		}
  	    }
  	}
  
!       /* Coalesce all the result decls together.  */
!       var = NULL_TREE;
!       i = 0;
!       for (x = 0; x < num_var_partitions (map); x++)
  	{
! 	  tree p = partition_to_var (map, x);
! 	  if (TREE_CODE (SSA_NAME_VAR(p)) == RESULT_DECL)
  	    {
! 	      if (var == NULL_TREE)
! 		{
! 		  var = p;
! 		  i = x;
! 		}
! 	      else
! 		add_coalesce (cl, i, x, 1);
  	    }
  	}
      }
  
--- 702,749 ----
    /* Remove single element variable from the list.  */
    root_var_compact (rv);
  
!   cl = create_coalesce_list (map);
! 
!   /* Add all potential copies via PHI arguments to the list.  */
!   FOR_EACH_BB (bb)
      {
!       for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
  	{
! 	  tree res = PHI_RESULT (phi);
! 	  int p = var_to_partition (map, res);
! 	  if (p == NO_PARTITION)
! 	    continue;
! 	  for (x = 0; x < (unsigned)PHI_NUM_ARGS (phi); x++)
  	    {
! 	      tree arg = PHI_ARG_DEF (phi, x);
! 	      int p2;
  
! 	      if (TREE_CODE (arg) != SSA_NAME)
! 		continue;
! 	      if (SSA_NAME_VAR (res) != SSA_NAME_VAR (arg))
! 		continue;
! 	      p2 = var_to_partition (map, PHI_ARG_DEF (phi, x));
! 	      if (p2 != NO_PARTITION)
! 		add_coalesce (cl, p, p2, 1);
  	    }
  	}
+     }
  
!   /* Coalesce all the result decls together.  */
!   var = NULL_TREE;
!   i = 0;
!   for (x = 0; x < num_var_partitions (map); x++)
!     {
!       tree p = partition_to_var (map, x);
!       if (TREE_CODE (SSA_NAME_VAR(p)) == RESULT_DECL)
  	{
! 	  if (var == NULL_TREE)
  	    {
! 	      var = p;
! 	      i = x;
  	    }
+ 	  else
+ 	    add_coalesce (cl, i, x, 1);
  	}
      }
  
*************** coalesce_ssa_name (var_map map, int flag
*** 832,847 ****
      dump_var_map (dump_file, map);
  
    /* Coalesce partitions.  */
!   if (flags & SSANORM_USE_COALESCE_LIST)
!     coalesce_tpa_members (rv, graph, map, cl, 
! 			  ((dump_flags & TDF_DETAILS) ? dump_file 
! 							   : NULL));
  
-   
    if (flags & SSANORM_COALESCE_PARTITIONS)
!     coalesce_tpa_members (rv, graph, map, NULL, 
! 			  ((dump_flags & TDF_DETAILS) ? dump_file 
! 							   : NULL));
    if (cl)
      delete_coalesce_list (cl);
    root_var_delete (rv);
--- 824,837 ----
      dump_var_map (dump_file, map);
  
    /* Coalesce partitions.  */
!   coalesce_tpa_members (rv, graph, map, cl,
! 			((dump_flags & TDF_DETAILS) ? dump_file
! 			 : NULL));
  
    if (flags & SSANORM_COALESCE_PARTITIONS)
!     coalesce_tpa_members (rv, graph, map, NULL,
! 			  ((dump_flags & TDF_DETAILS) ? dump_file
! 			   : NULL));
    if (cl)
      delete_coalesce_list (cl);
    root_var_delete (rv);
*************** rewrite_out_of_ssa (void)
*** 2489,2495 ****
  {
    var_map map;
    int var_flags = 0;
!   int ssa_flags = SSANORM_USE_COALESCE_LIST;
  
    /* If elimination of a PHI requires inserting a copy on a backedge,
       then we will have to split the backedge which has numerous
--- 2479,2485 ----
  {
    var_map map;
    int var_flags = 0;
!   int ssa_flags = 0;
  
    /* If elimination of a PHI requires inserting a copy on a backedge,
       then we will have to split the backedge which has numerous


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