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?] Re: [lno] Some bugfixes


Hello,

this patch fixes several bugs in ivopts revealed by enabling it during
compilation of libstc++ and libjava.  It should also help the eon
failure reported by Dorit.


Don't the first, second, and fourth changes also apply to the tree-ssa branch?
They look like bugfixes, so maybe Diego would like to approve them for that branch too?


(I cut out the lno-specific change in case they are generic bugs, they look that way to me)
Zdenek

Index: ChangeLog.lno
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/ChangeLog.lno,v
retrieving revision 1.1.2.112
diff -c -3 -p -r1.1.2.112 ChangeLog.lno
*** ChangeLog.lno	31 Mar 2004 18:41:33 -0000	1.1.2.112
--- ChangeLog.lno	31 Mar 2004 22:14:38 -0000
***************
*** 1,5 ****
--- 1,17 ----
  2004-03-31  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>

+ * tree-into-ssa.c (ssa_rewrite_initialize_block): Update
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+ (ssa_rewrite_phi_arguments): Ditto.
+ * tree-ssa.c (kill_redundant_phi_nodes): Prevent replacing
+ ssa names that occur in abnormal phi nodes.
+ * java/decl.c (java_init_decl_processing): Initialize
+ long_integer_type_node.
+
+ 2004-03-31 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
* tree-ssa-loop-ivopts.c (idx_find_step): Prevent misscompilation
in case the index overflows.
Index: tree-into-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-into-ssa.c,v
retrieving revision 1.1.4.2
diff -c -3 -p -r1.1.4.2 tree-into-ssa.c
*** tree-into-ssa.c 27 Mar 2004 18:29:36 -0000 1.1.4.2
--- tree-into-ssa.c 31 Mar 2004 22:08:23 -0000
*************** ssa_rewrite_initialize_block (struct dom
*** 737,746 ****
--- 737,753 ----
struct rewrite_block_data *bd
= (struct rewrite_block_data *)VARRAY_TOP_GENERIC_PTR (walk_data->block_data_stack);
bitmap names_to_rename = walk_data->global_data;
+ edge e;
+ bool abnormal_phi;


    if (dump_file && (dump_flags & TDF_DETAILS))
      fprintf (dump_file, "\n\nRenaming block #%d\n\n", bb->index);

+ for (e = bb->pred; e; e = e->pred_next)
+ if (e->flags & EDGE_ABNORMAL)
+ break;
+ abnormal_phi = (e != NULL);
+
/* Step 1. Register new definitions for every PHI node in the block.
Conceptually, all the PHI nodes are executed in parallel and each PHI
node introduces a new version for the associated variable. */
*************** ssa_rewrite_initialize_block (struct dom
*** 752,757 ****
--- 759,767 ----
{
new_name = duplicate_ssa_name (result, phi);
PHI_RESULT (phi) = new_name;
+
+ if (abnormal_phi)
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_name) = 1;
}
else
new_name = result;
*************** ssa_rewrite_phi_arguments (struct dom_wa
*** 817,822 ****
--- 827,834 ----
continue;


  	  *op = get_reaching_def (*op);
+ 	  if (e->flags & EDGE_ABNORMAL)
+ 	    SSA_NAME_OCCURS_IN_ABNORMAL_PHI (*op) = 1;
  	}
      }
  }

Index: tree-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-ssa.c,v
retrieving revision 1.1.4.180.2.6
diff -c -3 -p -r1.1.4.180.2.6 tree-ssa.c
*** tree-ssa.c	21 Mar 2004 03:20:23 -0000	1.1.4.180.2.6
--- tree-ssa.c	31 Mar 2004 22:08:24 -0000
*************** kill_redundant_phi_nodes (void)
*** 846,851 ****
--- 846,858 ----
  	  ver = SSA_NAME_VERSION (var);
  	  ssa_names[ver] = var;

+ 	  if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (var))
+ 	    {
+ 	      /* Prevent copy propagation from replacing this ssa name.  */
+ 	      raise_value (phi, var, eq_to);
+ 	      continue;
+ 	    }
+
  	  for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
  	    {
  	      t = PHI_ARG_DEF (phi, i);
*************** kill_redundant_phi_nodes (void)
*** 860,871 ****
  	      aver = SSA_NAME_VERSION (t);
  	      ssa_names[aver] = t;

  	      /* If the defining statement for this argument is not a
! 		 phi node or the argument is associated with an abnormal
! 		 edge, then we need to recursively start the forward
  		 dataflow starting with PHI.  */
! 	      if (TREE_CODE (stmt) != PHI_NODE
! 		  || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (t))
  		{
  		  eq_to[aver] = t;
  		  raise_value (phi, t, eq_to);
--- 867,884 ----
  	      aver = SSA_NAME_VERSION (t);
  	      ssa_names[aver] = t;

+ 	      /* If the argument is associated with an abnormal edge,
+ 		 we cannot allow it being copy propagated.  */
+ 	      if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (t))
+ 		{
+ 		  raise_value (phi, var, eq_to);
+ 		  break;
+ 		}
+
  	      /* If the defining statement for this argument is not a
! 		 phi node, we need to recursively start the forward
  		 dataflow starting with PHI.  */
! 	      if (TREE_CODE (stmt) != PHI_NODE)
  		{
  		  eq_to[aver] = t;
  		  raise_value (phi, t, eq_to);
Index: java/decl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/decl.c,v
retrieving revision 1.128.2.32.2.2
diff -c -3 -p -r1.128.2.32.2.2 decl.c
*** java/decl.c	21 Feb 2004 23:12:18 -0000	1.128.2.32.2.2
--- java/decl.c	31 Mar 2004 22:08:26 -0000
*************** java_init_decl_processing (void)
*** 490,495 ****
--- 490,496 ----

    /* Define these next since types below may used them.  */
    integer_type_node = java_type_for_size (INT_TYPE_SIZE, 0);
+   long_integer_type_node = java_type_for_size (LONG_TYPE_SIZE, 0);
    integer_zero_node = build_int_2 (0, 0);
    integer_one_node = build_int_2 (1, 0);
    integer_two_node = build_int_2 (2, 0);


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