This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH][GCC 7] Remove broken path in extract_bit_field_1
- From: Richard Biener <rguenther at suse dot de>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org, iant at google dot com
- Date: Mon, 4 Apr 2016 15:27:23 +0200 (CEST)
- Subject: Re: [PATCH][GCC 7] Remove broken path in extract_bit_field_1
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot LSU dot 2 dot 11 dot 1604041449590 dot 13384 at t29 dot fhfr dot qr> <20160404130617 dot GD19207 at tucnak dot redhat dot com> <alpine dot LSU dot 2 dot 11 dot 1604041508400 dot 13384 at t29 dot fhfr dot qr> <20160404132444 dot GE19207 at tucnak dot redhat dot com>
On Mon, 4 Apr 2016, Jakub Jelinek wrote:
> On Mon, Apr 04, 2016 at 03:10:34PM +0200, Richard Biener wrote:
> > On Mon, 4 Apr 2016, Jakub Jelinek wrote:
> >
> > > On Mon, Apr 04, 2016 at 02:56:51PM +0200, Richard Biener wrote:
> > > > The testcase gcc.target/i386/pr37870.c will already ICE with that
> > > > patch, so no additional testcase.
> > >
> > > In theory you could validate_subreg first and use that code if validation
> > > went ok, otherwise go through memory.
> > > But I admit I don't have anything in particular in mind where it would
> > > trigger this code and the subreg would successfully validate.
> >
> > Not sure if it would help as that has
> >
> > /* ??? Similarly, e.g. with (subreg:DF (reg:TI)). Though
> > store_bit_field
> > is the culprit here, and not the backends. */
> > else if (osize >= UNITS_PER_WORD && isize >= osize)
> > ;
> >
> > and thus we'd return true anyway for (subreg:XF (reg:TI) 0)
>
> If XFmode subreg of TImode reg passes validation, where does it ICE then?
It ICEs in
/space/rguenther/src/svn/trunk/gcc/testsuite/gcc.target/i386/pr37870.c:19:1:
internal compiler error: in subreg_get_info, at rtlanal.c:3695
0xddee5a subreg_get_info(unsigned int, machine_mode, unsigned int,
machine_mode, subreg_info*)
/space/rguenther/src/svn/trunk/gcc/rtlanal.c:3695
0xddf12b simplify_subreg_regno(unsigned int, machine_mode, unsigned int,
machine_mode)
/space/rguenther/src/svn/trunk/gcc/rtlanal.c:3808
0xd8bc7a simplifiable_subregs(subreg_shape const&)
/space/rguenther/src/svn/trunk/gcc/reginfo.c:1234
0xd8be1d record_subregs_of_mode
/space/rguenther/src/svn/trunk/gcc/reginfo.c:1294
0xd8c246 init_subregs_of_mode()
/space/rguenther/src/svn/trunk/gcc/reginfo.c:1348
0xc1a55c init_costs
/space/rguenther/src/svn/trunk/gcc/ira-costs.c:2187
which is
/* This should always pass, otherwise we don't know how to verify
the constraint. These conditions may be relaxed but
subreg_regno_offset would need to be redesigned. */
gcc_assert ((GET_MODE_SIZE (xmode) % GET_MODE_SIZE (ymode)) == 0);
Richard.