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]

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


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