This is the mail archive of the
gcc-patches@gcc.gnu.org
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
Hi,
I am testing the attached patch.
It solve at least the C testcase you have me.
Honza
2004-01-28 Jan Hubicka <jh@suse.cz>
* gcse.c (bypass_block): Prevent edges to be unified when we are
about to emit compenstation code.
Index: gcse.c
===================================================================
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:44:30 -0000
*************** bypass_block (basic_block bb, rtx setcc,
*** 4874,4879 ****
--- 4874,4892 ----
else
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->dest != dest; e2 = e2->succ_next)
+ continue;
+ if (e2)
+ dest = NULL;
+ }
+
old_dest = e->dest;
if (dest != NULL
&& dest != old_dest