This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Jan Hubicka and Uros Bizjak appointed i386 maintainers
- From: Jan Hubicka <jh at suse dot cz>
- To: Gerald Pfeifer <gerald at pfeifer dot com>
- Cc: David Edelsohn <edelsohn at gnu dot org>, jh at suse dot cz, ubizjak at gmail dot com, gcc-patches at gcc dot gnu dot org
- Date: Tue, 16 Jan 2007 01:52:16 +0100
- Subject: Re: Jan Hubicka and Uros Bizjak appointed i386 maintainers
- References: <E1H3xIV-0003yE-Dl@fencepost.gnu.org> <Pine.LNX.4.64.0701150238200.7993@acrux.dbai.tuwien.ac.at>
> 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;