This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rs6000, testsuite] Changes for unaligned vector load/store support on POWER8


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
> 



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]