This is the mail archive of the gcc@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]

Re: Ada mainline bootstrap failing on x86 and x86_64


With this patch, it's worse: bootstrap dies at the beginning of stage2?
everywhere (build/genmodes is miscompiled).? And I get bogus

/home/eric/cvs/gcc/gcc/crtstuff.c:488: warning: 'p' is used uninitialized in?
this function


Yeah, i know why.
Give me a few minutes and i'll have a new patch for you.

It turns out ssa_rewrite_phi_arguments is too different for us to use it. The reaching def annotations are stored on the ssa name itself, instead of the var, so that it always causes it to get the default def, which is what causes your uninitialized argument warnings and failures.



I'm currently testing the following patch on x86, darwin, and powerpc-linux.
It's into compiling stage3 on all of them, but it is still unregtested (it'll be a few more hours)


Index: tree-into-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-into-ssa.c,v
retrieving revision 2.26
diff -u -p -r2.26 tree-into-ssa.c
--- tree-into-ssa.c	27 Oct 2004 17:45:19 -0000	2.26
+++ tree-into-ssa.c	28 Oct 2004 15:28:28 -0000
@@ -799,6 +799,42 @@ rewrite_add_phi_arguments (struct dom_wa
     }
 }

+/* Fixup def def chains part 3
+ Rewrite existing virtual PHI arguments so that they have the correct
+ reaching definitions. */ +
+static void
+rewrite_virtual_phi_arguments (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, + basic_block bb)
+{
+ edge e;
+ use_operand_p op;
+ edge_iterator ei;
+
+ FOR_EACH_EDGE (e, ei, bb->succs)
+ {
+ tree phi;
+
+ if (e->dest == EXIT_BLOCK_PTR)
+ continue;
+
+ for (phi = phi_nodes (e->dest); phi; phi = TREE_CHAIN (phi))
+ {
+ tree result = PHI_RESULT (phi);
+ op = PHI_ARG_DEF_PTR_FROM_EDGE (phi, e);
+ + if (is_gimple_reg (result) + || !bitmap_bit_p (vars_to_rename, + var_ann (SSA_NAME_VAR (result))->uid))
+ continue;
+
+ SET_USE (op, get_reaching_def (SSA_NAME_VAR (result)));
+ if (e->flags & EDGE_ABNORMAL)
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (USE_FROM_PTR (op)) = 1;
+ }
+ }
+}
+
/* Ditto, for ssa name rewriting. */


 static void
@@ -823,7 +859,7 @@ ssa_rewrite_phi_arguments (struct dom_wa
 	    continue;

 	  if (!TEST_BIT (names_to_rename, SSA_NAME_VERSION (USE_FROM_PTR (op))))
-	    continue;
+	        continue;

 	  SET_USE (op, get_reaching_def (USE_FROM_PTR (op)));
 	  if (e->flags & EDGE_ABNORMAL)
@@ -1383,14 +1419,16 @@ invalidate_name_tags (bitmap vars_to_ren
 }

 /* Rewrite the actual blocks, statements, and phi arguments, to be in SSA
-   form.  ADD_PHI_ARGS is true if we should be adding arguments to phi nodes,
-   because they may have been just inserted.  */
+   form.  FIX_VIRTUAL_PHIS is true if we should only be fixing up virtual
+   phi arguments, instead of adding new phi arguments for just added phi
+   nodes.  */
+

 static void
-rewrite_blocks (bool add_phi_args)
+rewrite_blocks (bool fix_virtual_phis)
 {
   struct dom_walk_data walk_data;
-
+
   /* Rewrite all the basic blocks in the program.  */
   timevar_push (TV_TREE_SSA_REWRITE_BLOCKS);

@@ -1401,8 +1439,11 @@ rewrite_blocks (bool add_phi_args)
walk_data.before_dom_children_before_stmts = rewrite_initialize_block;
walk_data.before_dom_children_walk_stmts = rewrite_stmt;
walk_data.before_dom_children_after_stmts = NULL;
- if (add_phi_args)
- walk_data.before_dom_children_after_stmts = rewrite_add_phi_arguments; + if (!fix_virtual_phis)
+ walk_data.before_dom_children_after_stmts = rewrite_add_phi_arguments;
+ else
+ walk_data.before_dom_children_after_stmts = rewrite_virtual_phi_arguments;
+
walk_data.after_dom_children_before_stmts = NULL;
walk_data.after_dom_children_walk_stmts = NULL;
walk_data.after_dom_children_after_stmts = rewrite_finalize_block;
@@ -1549,7 +1590,7 @@ rewrite_into_ssa (bool all)
/* Insert PHI nodes at dominance frontiers of definition blocks. */
insert_phi_nodes (dfs, NULL);


-  rewrite_blocks (true);
+  rewrite_blocks (false);

   /* Debugging dumps.  */
   if (dump_file && (dump_flags & TDF_STATS))
@@ -1576,7 +1617,7 @@ rewrite_def_def_chains (void)
   /* Ensure that the dominance information is OK.  */
   calculate_dominance_info (CDI_DOMINATORS);
   mark_def_site_blocks ();
-  rewrite_blocks (false);
+  rewrite_blocks (true);

 }
 /* The marked ssa names may have more than one definition;

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