diff mbox

[rs6000] Fix PR61542 - V4SF vector extract for little endian

Message ID 1403045084.3788.20.camel@gnopaine
State New
Headers show

Commit Message

Bill Schmidt June 17, 2014, 10:44 p.m. UTC
Hi,

As described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61542, a
new test case (gcc.dg/vect/vect-nop-move.c) was added in 4.9.  This
exposes a bug on PowerPC little endian for extracting an element from a
V4SF value that goes back to 4.8.  The following patch fixes the
problem.

Tested on powerpc64le-unknown-linux-gnu with no regressions.  Ok to
commit to trunk?  I would also like to commit to 4.8 and 4.9 as soon as
possible to be picked up by the distros.

I would also like to backport gcc.dg/vect/vect-nop-move.c to 4.8 to
provide regression coverage.

Thanks,
Bill


2014-06-17  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* config/rs6000/vsx.md (vsx_extract_v4sf): Fix bug with element
	extraction other than index 3.

Comments

David Edelsohn June 18, 2014, 1:56 p.m. UTC | #1
On Tue, Jun 17, 2014 at 6:44 PM, BIll Schmidt
<wschmidt@linux.vnet.ibm.com> wrote:
> Hi,
>
> As described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61542, a
> new test case (gcc.dg/vect/vect-nop-move.c) was added in 4.9.  This
> exposes a bug on PowerPC little endian for extracting an element from a
> V4SF value that goes back to 4.8.  The following patch fixes the
> problem.
>
> Tested on powerpc64le-unknown-linux-gnu with no regressions.  Ok to
> commit to trunk?  I would also like to commit to 4.8 and 4.9 as soon as
> possible to be picked up by the distros.

This is okay everywhere.

> I would also like to backport gcc.dg/vect/vect-nop-move.c to 4.8 to
> provide regression coverage.

You should ask Bernd and the RMs. Was the bug fix that prompted the
new testcase backported to all targets?

Thanks, David
Bernd Edlinger June 18, 2014, 5:18 p.m. UTC | #2
Hi,

On Wed, 18 Jun 2014 09:56:15, David Edelsohn wrote:
>
> On Tue, Jun 17, 2014 at 6:44 PM, BIll Schmidt
> <wschmidt@linux.vnet.ibm.com> wrote:
>> Hi,
>>
>> As described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61542, a
>> new test case (gcc.dg/vect/vect-nop-move.c) was added in 4.9. This
>> exposes a bug on PowerPC little endian for extracting an element from a
>> V4SF value that goes back to 4.8. The following patch fixes the
>> problem.
>>
>> Tested on powerpc64le-unknown-linux-gnu with no regressions. Ok to
>> commit to trunk? I would also like to commit to 4.8 and 4.9 as soon as
>> possible to be picked up by the distros.
>
> This is okay everywhere.
>
>> I would also like to backport gcc.dg/vect/vect-nop-move.c to 4.8 to
>> provide regression coverage.
>
> You should ask Bernd and the RMs. Was the bug fix that prompted the
> new testcase backported to all targets?
>
> Thanks, David

actually I only added the check_vect to that test case, but that
exposed a bug on Solaris-9.

See https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=207668.

That was in the -fdump-rtl-combine-details handling, where
fprintf got a NULL value passed for %s, which ICEs on Solaris9.

So if you backport that test case, be sure to check that one too.

Originally the test case seems to check something for the aarch64-target.
See https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=205712.

Obviously the patch in  rtlanal.c (set_noop_p) was never backported to the 4.8 branch.
Maybe Tejas who originally wrote that test case, can explain, if it makes
sense to backport this fix too.


Thanks
Bernd.
Bill Schmidt June 26, 2014, 3:18 p.m. UTC | #3
Bernd, thanks.  At this point I think I will avoid opening this can of
worms and not worry about backporting the test case.

Thanks,
Bill

On Wed, 2014-06-18 at 19:18 +0200, Bernd Edlinger wrote:
> Hi,
> 
> On Wed, 18 Jun 2014 09:56:15, David Edelsohn wrote:
> >
> > On Tue, Jun 17, 2014 at 6:44 PM, BIll Schmidt
> > <wschmidt@linux.vnet.ibm.com> wrote:
> >> Hi,
> >>
> >> As described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61542, a
> >> new test case (gcc.dg/vect/vect-nop-move.c) was added in 4.9. This
> >> exposes a bug on PowerPC little endian for extracting an element from a
> >> V4SF value that goes back to 4.8. The following patch fixes the
> >> problem.
> >>
> >> Tested on powerpc64le-unknown-linux-gnu with no regressions. Ok to
> >> commit to trunk? I would also like to commit to 4.8 and 4.9 as soon as
> >> possible to be picked up by the distros.
> >
> > This is okay everywhere.
> >
> >> I would also like to backport gcc.dg/vect/vect-nop-move.c to 4.8 to
> >> provide regression coverage.
> >
> > You should ask Bernd and the RMs. Was the bug fix that prompted the
> > new testcase backported to all targets?
> >
> > Thanks, David
> 
> actually I only added the check_vect to that test case, but that
> exposed a bug on Solaris-9.
> 
> See https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=207668.
> 
> That was in the -fdump-rtl-combine-details handling, where
> fprintf got a NULL value passed for %s, which ICEs on Solaris9.
> 
> So if you backport that test case, be sure to check that one too.
> 
> Originally the test case seems to check something for the aarch64-target.
> See https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=205712.
> 
> Obviously the patch in  rtlanal.c (set_noop_p) was never backported to the 4.8 branch.
> Maybe Tejas who originally wrote that test case, can explain, if it makes
> sense to backport this fix too.
> 
> 
> Thanks
> Bernd.
>
Richard Sandiford July 18, 2014, 9:06 a.m. UTC | #4
Bill Schmidt <wschmidt@linux.vnet.ibm.com> writes:
> Bernd, thanks.  At this point I think I will avoid opening this can of
> worms and not worry about backporting the test case.

Sorry for the late answer (catching up on a big backlog), but the testcase
was originally added for an optimisation rather than a bug fix.  It sounds
like it tripped an ICE, so it should be safe to backport as a compile-only
test with no dg-additional-options and no dg-finals.

Thanks,
Richard

>
> Thanks,
> Bill
>
> On Wed, 2014-06-18 at 19:18 +0200, Bernd Edlinger wrote:
>> Hi,
>> 
>> On Wed, 18 Jun 2014 09:56:15, David Edelsohn wrote:
>> >
>> > On Tue, Jun 17, 2014 at 6:44 PM, BIll Schmidt
>> > <wschmidt@linux.vnet.ibm.com> wrote:
>> >> Hi,
>> >>
>> >> As described in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61542, a
>> >> new test case (gcc.dg/vect/vect-nop-move.c) was added in 4.9. This
>> >> exposes a bug on PowerPC little endian for extracting an element from a
>> >> V4SF value that goes back to 4.8. The following patch fixes the
>> >> problem.
>> >>
>> >> Tested on powerpc64le-unknown-linux-gnu with no regressions. Ok to
>> >> commit to trunk? I would also like to commit to 4.8 and 4.9 as soon as
>> >> possible to be picked up by the distros.
>> >
>> > This is okay everywhere.
>> >
>> >> I would also like to backport gcc.dg/vect/vect-nop-move.c to 4.8 to
>> >> provide regression coverage.
>> >
>> > You should ask Bernd and the RMs. Was the bug fix that prompted the
>> > new testcase backported to all targets?
>> >
>> > Thanks, David
>> 
>> actually I only added the check_vect to that test case, but that
>> exposed a bug on Solaris-9.
>> 
>> See https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=207668.
>> 
>> That was in the -fdump-rtl-combine-details handling, where
>> fprintf got a NULL value passed for %s, which ICEs on Solaris9.
>> 
>> So if you backport that test case, be sure to check that one too.
>> 
>> Originally the test case seems to check something for the aarch64-target.
>> See https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=205712.
>> 
>> Obviously the patch in rtlanal.c (set_noop_p) was never backported to
>> the 4.8 branch.
>> Maybe Tejas who originally wrote that test case, can explain, if it makes
>> sense to backport this fix too.
>> 
>> 
>> Thanks
>> Bernd.
>>
diff mbox

Patch

Index: gcc/config/rs6000/vsx.md
===================================================================
--- gcc/config/rs6000/vsx.md	(revision 211741)
+++ gcc/config/rs6000/vsx.md	(working copy)
@@ -1667,7 +1667,7 @@ 
     {
       if (GET_CODE (op3) == SCRATCH)
 	op3 = gen_reg_rtx (V4SFmode);
-      emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, op2));
+      emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, GEN_INT (ele)));
       tmp = op3;
     }
   emit_insn (gen_vsx_xscvspdp_scalar2 (op0, tmp));