Hi!

On Thu, Dec 23, 2021 at 10:12:19AM +0800, Kewen.Lin wrote:
>       PR target/103627
>       * config/rs6000/rs6000.c (rs6000_option_override_internal): Move the
>       hunk affecting VSX and ALTIVEC to the appropriate place.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR target/103627
>       * gcc.target/powerpc/pr103627-3.c: New test.


> --- a/gcc/config/rs6000/rs6000.c
> +++ b/gcc/config/rs6000/rs6000.c
> @@ -3955,6 +3955,15 @@ rs6000_option_override_internal (bool global_init_p)
>    else if (TARGET_ALTIVEC)
>      rs6000_isa_flags |= (OPTION_MASK_PPC_GFXOPT & ~ignore_masks);
> 
> +  /* Disable VSX and Altivec silently if the user switched cpus to power7 in 
> a
> +     target attribute or pragma which automatically enables both options,
> +     unless the altivec ABI was set.  This is set by default for 64-bit, but
> +     not for 32-bit.  Don't move this before the above code using 
> ignore_masks,
> +     since it can reset the cleared VSX/ALTIVEC flag again.  */
> +  if (main_target_opt != NULL && !main_target_opt->x_rs6000_altivec_abi)
> +    rs6000_isa_flags &= ~((OPTION_MASK_VSX | OPTION_MASK_ALTIVEC)
> +                       & ~rs6000_isa_flags_explicit);

Could you at the same time get rid of the != NULL please?
  if (bla != NULL)
is sillier than
  if (bla != 0)
which is about the same as
  if (!!bla)
but that is certainly better than
  if (bla != 0 != 0)
although I am not sure about the more stylish
  if (bla != 0 != 0 != 0 != 0 != 0)
but what is wrong with
  if (bla)
?  :-)

> +/* There are no error messages for either LE or BE 64bit.  */
> +/* { dg-require-effective-target be }*/

(space before */)

> +/* { dg-require-effective-target ilp32 } */
> +/* We don't have one powerpc.*_ok for Power6, use altivec_ok conservatively. 
>  */
> +/* { dg-require-effective-target powerpc_altivec_ok } */
> +/* { dg-options "-mdejagnu-cpu=power6" } */

It is okay always, no _ok at all please.

Okay for trunk with those things (but do test of course).  Thanks!


Segher

Reply via email to