Hi Christoph,
> 90d62e699bce9594879be2e3016c9b36c7e064c8..703632240822e762a90657096
> > >> 4b949c783df56f3 100644
> > >> --- a/gcc/config/arm/arm.c
> > >> +++ b/gcc/config/arm/arm.c
> > >> @@ -31508,8 +31508,8 @@ arm_can_change_mode_class
> (machine_mode from, machine_mode to,
> > >> {
> > >> if (TARGET_BIG_END
> > >> && !(GET_MODE_SIZE (from) == 16 && GET_MODE_SIZE (to) == 8)
> > >> - && (GET_MODE_SIZE (from) > UNITS_PER_WORD
> > >> - || GET_MODE_SIZE (to) > UNITS_PER_WORD)
> > >> + && (GET_MODE_UNIT_SIZE (from) > UNITS_PER_WORD
> > >> + || GET_MODE_UNIT_SIZE (to) > UNITS_PER_WORD)
> > >>
>
> After this commit (r262436), I have noticed regressions on armeb-none-linux-
> gnueabihf --with-cpu cortex-a9 --with-fpu neon-fp16
> FAIL: gcc.dg/vect/vect-nop-move.c execution test
> FAIL: g++.dg/torture/vshuf-v2si.C -O3 -g execution test
> FAIL: g++.dg/torture/vshuf-v4si.C -O3 -g execution test
> FAIL: g++.dg/torture/vshuf-v8hi.C -O3 -g execution test
>
> Can you have a look?
Sorry! I know you reported these before so I did explicitly test them, but it
turns
out a configuration issue in our scripts was causing armeb linux builds to skip
execution tests. So the execution parts of these tests never showed up and so
the
regression was clean.
I know what's wrong and will submit a patch soon.
Thanks,
Tamar
>
> > >> Does GET_MODE_UNIT_SIZE do what you want? Its documentation in
> rtl.texi says:
> > >> "Returns the size in bytes of the subunits of a datum of mode @var{m}.
> > >> This is the same as @code{GET_MODE_SIZE} except in the case of
> complex
> > >> modes. For them, the unit size is the size of the real or imaginary
> > >> part."
> > >>
> > >> Does it also do the right thing for vector modes (GET_MODE_SIZE
> (GET_MODE_INNER (mode))) ?
> > >> If so, this patch is ok, but we'll need to update the documentation to
> make it more explicit.
> > > I don't know what the documentation is trying to say here, but the key is
> the first part:
> > >
> > > "returns the size in bytes of the subunits of a datum of mode m"
> > >
> > > MODE: V4SI, GET_MODE_UNIT_SIZE: 4, GET_MODE_SIZE: 16
> > >
> > > So GET_MODE_UNIT_SIZE (m) * GET_MODE_NUNITS(m) ==
> GET_MODE_SIZE (m)
> > >
> > > or GET_MODE_UNIT_SIZE (m) == GET_MODE_SIZE (GET_MODE_INNER
> (mode)).
> > >
> > > From this the only time GET_MODE_UNIT_SIZE is equal to
> > > GET_MODE_SIZE is on non-vector modes of V1 vector modes.
> >
> > Right, this is what I thought, but the documentation is not as clear as it
> could be.
> > Your patch is ok for trunk.
> >
> > Thanks,
> > Kyrill
> >
> > > Kind Regards,
> > > Tamar
> > >
> > >> Thanks for the patch,
> > >> Kyrill
> > >>
> > >>
> > >>
> >