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: Jan Hubicka and Uros Bizjak appointed i386 maintainers


> On Mon, 8 Jan 2007, David Edelsohn wrote:
> > I am pleased to announce that the GCC Steering Committee has appointed 
> > Jan Hubicka and Uros Bizjak as co-maintainers of the i386 port.
> 
> That's good timing. ;-)
> 
> i386 (but not i686) has started failing to bootstrap a few days ago
> -- bootstrap/30467.

Hi,
it is not my maintainance area, but the attached patch seems to fix it.
The problem is that if conversion is converting conditional like:

if (val != mem)
   val = 0;

For if conversion value a is 0, value b is MEM. insn_a is set to set to
0, but since MEM is derived from the conditional, insn_b is NULL.
The conditional in question assumes insn_b is non-null and segfaults.  I
think the proper fix is to simply check for B being NULL, but I
dind'thad chance to follow in detail the recent ifcvt changes, so I
guess Steven might want to comment.

I've just started full i686 testing and i386 bootstrap.

	PR bootstrap/30467
	* ifcvt.c (noce_try_sign_mask): Do not segfault when insn_b is NULL.
Index: ifcvt.c
===================================================================
*** ifcvt.c	(revision 120814)
--- ifcvt.c	(working copy)
*************** noce_try_sign_mask (struct noce_if_info 
*** 1899,1905 ****
       executed/evaluated in the original insn sequence.  The latter
       happens if INSN_B was taken from TEST_BB.  */
    if (rtx_cost (t, SET) >= COSTS_N_INSNS (2)
!       && (BLOCK_FOR_INSN (if_info->insn_b) != if_info->test_bb
            || t != if_info->b))
      return FALSE;
  
--- 1899,1906 ----
       executed/evaluated in the original insn sequence.  The latter
       happens if INSN_B was taken from TEST_BB.  */
    if (rtx_cost (t, SET) >= COSTS_N_INSNS (2)
!       && ((if_info->insn_b
! 	   && BLOCK_FOR_INSN (if_info->insn_b) != if_info->test_bb)
            || t != if_info->b))
      return FALSE;
  


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