This is the mail archive of the
mailing list for the GCC project.
Re: Your change to alloc-pool.c
> > > I am looking into it. It is latent bug uncovered by my sanity checking.
> > Great, thanks.
> > It's indeed clearly a latent bug.
> > I've opened PR 13888 on this issue, which has been identified as a
> > duplicate of PR 13859, which contains a very simple C test case.
> > You probably want to use this test case rather than the Ada code.
> > Arno
> I am testing the attached patch.
> It solve at least the C testcase you have me.
> 2004-01-28 Jan Hubicka <email@example.com>
> * gcse.c (bypass_block): Prevent edges to be unified when we are
> about to emit compenstation code.
oops, I sent wrong version of patch.
2004-01-28 Jan Hubicka <firstname.lastname@example.org>
* gcse.c (bypass_block): Prevent edges to be unified when we are
about to emit compenstation code.
RCS file: /cvs/gcc/gcc/gcc/gcse.c,v
retrieving revision 1.289
diff -c -3 -p -r1.289 gcse.c
*** gcse.c 21 Jan 2004 20:39:54 -0000 1.289
--- gcse.c 27 Jan 2004 23:58:06 -0000
*************** bypass_block (basic_block bb, rtx setcc,
*** 4874,4879 ****
--- 4874,4893 ----
dest = NULL;
+ /* Avoid unification of the edge with other edges from original
+ branch. We would end up emitting the instruction on "both"
+ edges. */
+ if (dest && setcc && !CC0_P (SET_DEST (pat)))
+ edge e2;
+ for (e2 = e->src->succ; e2; e2 = e2->succ_next)
+ if (e2->dest == dest)
+ if (e2)
+ dest = NULL;
old_dest = e->dest;
if (dest != NULL
&& dest != old_dest