[PATCH, rs6000, testsuite] Changes for unaligned vector load/store support on POWER8
Bill Schmidt
wschmidt@linux.vnet.ibm.com
Thu Feb 26 23:34:00 GMT 2015
On Thu, 2015-02-26 at 14:40 -0600, Bill Schmidt wrote:
> On Thu, 2015-02-26 at 10:36 -0500, David Edelsohn wrote:
>
> > My one concern is the interaction between TARGET_ALLOW_MOVMISALIGN and
> > TARGET_EFFICIENT_UNALIGNED_VSX in the movmisalign<mode> pattern in
> > vector.md. Your patch changes
> > rs6000_builtin_support_vector_misalignment to return TRUE if
> > TARGET_EFFICIENT_UNALIGNED_VSX is enabled, which seems to enable the
> > use of the movmisalign<mode> pattern, but the pattern final condition
> > depends on TARGET_ALLOW_MOVMISALIGN.
> >
> > -mcpu=power8 will enable both flags, but if a user manually overrides
> > one or both flags, the hook could return TRUE while the pattern is
> > disabled, which would lead to an ICE. The relationship between the
> > hook and the pattern need to be consistent. I'm not sure about the
> > best way to rationalize it.
> >
> > Thanks, David
> >
>
> This is a good point. I think the following is probably the right way
> to fix this:
>
> /* Determine when unaligned vector accesses are permitted, and when
> they are preferred over masked Altivec loads. Note that if
> TARGET_ALLOW_MOVMISALIGN has been disabled by the user, then
> TARGET_EFFICIENT_UNALIGNED_VSX must be as well. The converse
> is not true. */
>
> if (TARGET_EFFICIENT_UNALIGNED_VSX == -1) {
> if (TARGET_VSX && rs6000_cpu == PROCESSOR_POWER8
> && TARGET_ALLOW_MOVMISALIGN != 0)
> TARGET_EFFICIENT_UNALIGNED_VSX = 1;
> else
> TARGET_EFFICIENT_UNALIGNED_VSX = 0;
> }
>
> if (TARGET_ALLOW_MOVMISALIGN == -1 && rs6000_cpu == PROCESSOR_POWER8)
> TARGET_ALLOW_MOVMISALIGN = 1;
>
>
> That is, determine TARGET_EFFICIENT_UNALIGNED_VSX first, and only allow
> it if TARGET_ALLOW_MOVMISALIGN hasn't been specifically disabled. Sound
> reasonable?
Except this didn't pass regression testing. I'll continue to poke at
it.
Bill
>
> Bill
>
More information about the Gcc-patches
mailing list