Bootstrap miscomparison on mainline with checking disabled

law@redhat.com law@redhat.com
Wed May 19 16:52:00 GMT 2004


In message < D48AC4D4-A9B3-11D8-A4A1-000393A6D2F2@physics.uc.edu >, Andrew Pinski
 writes:
 >
 >On May 19, 2004, at 12:35, law@redhat.com wrote:
 >
 >> In message < 1084983955.3630.262.camel@localhost.localdomain >, Diego 
 >> Novillo wri
 >> tes:
 >>> On Wed, 2004-05-19 at 12:08, law@redhat.com wrote:
 >>>
 >>>> It is the phiopt changes.  I've got a handle on it.
 >>>> jeff
 >>>>
 >>> Thanks.  I wonder if they may be also related to the number of
 >>> regressions we got on ppc.  The --enable-checking bootstrap on
 >>> powerpc-unknown-linux-gnu worked fine, but we are getting these
 >>> regressions.
 >>>
 >>> I don't think these regressions are due to the phiopt changes, though.
 >>> Most of the new failures are link errors for symbols not found.  Like
 >>> gcc.c-torture/execute/20001130-1.c
 >> It's possible if the stage1 compiler mis-compiled the stage2 compiler 
 >> in
 >> a fun an interesting way.
 >>
 >> I've got a fix going through testing now.
 >
 >I also have a fix, it looks like the following, does yours looks the 
 >same also?
 >Index: tree-ssa-phiopt.c
 >===================================================================
 >RCS file: /cvs/gcc/gcc/gcc/tree-ssa-phiopt.c,v
 >retrieving revision 2.6
 >diff -u -p -r2.6 tree-ssa-phiopt.c
 >--- tree-ssa-phiopt.c	19 May 2004 03:35:10 -0000	2.6
 >+++ tree-ssa-phiopt.c	19 May 2004 16:37:43 -0000
 >@@ -461,11 +461,12 @@ value_replacement (basic_block bb, tree
 >        || (operand_equal_p (arg1, TREE_OPERAND (cond, 0), 0)
 >  	  && operand_equal_p (arg0, TREE_OPERAND (cond, 1), 0)))
 >      {
 >-      edge e;
 >+      edge e, e1;
 >        tree arg;
 >
 >        e = (TREE_CODE (cond) == NE_EXPR ? true_edge : false_edge);
 >-      if (PHI_ARG_EDGE (phi, 0) == e)
 >+      e1 = (TREE_CODE (cond) == NE_EXPR ? false_edge : true_edge);
 >+      if (PHI_ARG_EDGE (phi, 0) == e || PHI_ARG_EDGE (phi, 1) == e1)
 >  	arg = arg0;
 >        else
 >  	arg = arg1;
They're probably equivalent.  Mine looks at e->dest to see if it is 
other_block, and if it is, then it does e = e->dest->succ to ensure
that e is an edge incoming to BB. And (of course) it adds suitable comments
in that hunk of code.

It's something I was somewhat concerned about after working through the abs
changes yesterday and the new code is modeled after how the abs changes work.

jeff
since 







More information about the Gcc mailing list