[PATCH, V4] PowerPC Turn on -mpcrel by default for -mcpu=future

will schmidt will_schmidt@vnet.ibm.com
Mon Apr 6 22:21:34 GMT 2020


On Mon, 2020-04-06 at 12:52 -0400, Michael Meissner via Gcc-patches wrote:

Hi, 

Just a single extra blank line below.

I'm still not a fan of the "Do not set..." comment, but will assume there
is history that necessitates the comment.

Other sections looked OK to me.

Over to Segher. :-)

Thanks,
-Will

> Commit message:
> Enable -mpcrel for -mcpu=future if it is allowed by the ABI.
> 
> 2020-04-06  Michael Meissner  <meissner@linux.ibm.com>
> 
> 	* config/rs6000/linux64.h (PCREL_SUPPORTED_BY_OS): Enable
> 	prefixed PC-relative addressing if the ABI supports it.
> 	* config/rs6000/rs6000-cpus.def (ISA_FUTURE_MASKS_SERVER): Do not
> 	set OPTION_MASK_PREFIXED here.
> 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Enable
> 	OPTION_MASK_PREFIXED and OPTION_MASK_PCREL on -mcpu=future by
> 	default if the current ABI allows the options.
> 
> I tested this on a little endian PowerPC power8 system, doing bootstrap and
> make check.  There were no regressions.  I tested by hand the various
> conditions where -mpcrel is not enabled, and they all used the normal power9
> TOC references.
> 
>     -mcpu=power9			generates TOC;
>     -mcpu=future -mcmodel=large		generates TOC;
>     -mcpu=future -mcmode=small		generates TOC;
>     -mcpu=future -mno-prefixed		generates TOC;
>     -mcpu=future -mno-pcrel		generates TOC;
>     -mcpu=future			generates PC-relative.
> 

ok,

> --- /tmp/apbaWN_linux64.h	2020-04-03 17:15:05.059677000 -0400
> +++ gcc/config/rs6000/linux64.h	2020-04-03 17:01:05.580426937 -0400
> @@ -640,3 +640,10 @@ extern int dot_symbols;
>     enabling the __float128 keyword.  */
>  #undef	TARGET_FLOAT128_ENABLE_TYPE
>  #define TARGET_FLOAT128_ENABLE_TYPE 1
> +
> +/* Enable using prefixed PC-relative addressing on the 'future' machine if the
> +   ABI supports it.  The ELF v2 ABI only supports PC-relative relocations for
> +   the medium code model.  */
> +#define PCREL_SUPPORTED_BY_OS	(TARGET_FUTURE && TARGET_PREFIXED	\
> +				 && ELFv2_ABI_CHECK			\
> +				 && (TARGET_CMODEL == CMODEL_MEDIUM))

ok


> --- /tmp/XzRKno_rs6000-cpus.def	2020-04-03 17:15:05.068676928 -0400
> +++ gcc/config/rs6000/rs6000-cpus.def	2020-04-03 17:00:50.115550614 -0400
> @@ -75,10 +75,14 @@
>  				 | OPTION_MASK_P8_VECTOR		\
>  				 | OPTION_MASK_P9_VECTOR)
> 
> -/* Support for a future processor's features.  Do not enable -mpcrel until it
> -   is fully functional.  */
> +/* Support for a future processor's features.  Do not set OPTION_MASK_PREFIXED
> +   or OPTION_MASK_PCREL here.  Those options are enabled in the function
> +   rs6000_option_override if the ABI supports them.  */
>  #define ISA_FUTURE_MASKS_SERVER	(ISA_3_0_MASKS_SERVER			\
> -				 | OPTION_MASK_FUTURE			\
> +				 | OPTION_MASK_FUTURE)
> +
> +/* Flags that need to be turned off if -mno-future.  */
> +#define OTHER_FUTURE_MASKS	(OPTION_MASK_PCREL			\
>  				 | OPTION_MASK_PREFIXED)
> 

ok.

>  /* Flags that need to be turned off if -mno-future.  */
> --- /tmp/nyxSRY_rs6000.c	2020-04-03 17:15:05.081676823 -0400
> +++ gcc/config/rs6000/rs6000.c	2020-04-03 17:03:19.846353197 -0400
> @@ -4020,6 +4020,12 @@ rs6000_option_override_internal (bool gl
>        rs6000_isa_flags &= ~OPTION_MASK_FLOAT128_HW;
>      }
> 
> +  /* Enable -mprefixed by default on 64-bit 'future' systems.  */
> +  if (TARGET_FUTURE && TARGET_POWERPC64
> +      && (rs6000_isa_flags_explicit & OPTION_MASK_PREFIXED) == 0)
> +    rs6000_isa_flags |= OPTION_MASK_PREFIXED;
> +
> +

extra blank line.

>    /* -mprefixed (and hence -mpcrel) requires -mcpu=future.  */
>    if (TARGET_PREFIXED && !TARGET_FUTURE)
>      {
> @@ -4171,6 +4177,14 @@ rs6000_option_override_internal (bool gl
>    SUB3TARGET_OVERRIDE_OPTIONS;
>  #endif
> 
> +#ifdef PCREL_SUPPORTED_BY_OS
> +  /* If the ABI has support for PC-relative relocations, enable it by
> +     default.  */
> +  if (PCREL_SUPPORTED_BY_OS
> +      && (rs6000_isa_flags_explicit & OPTION_MASK_PCREL) == 0)
> +    rs6000_isa_flags |= OPTION_MASK_PCREL;
> +#endif
> +

ok.

>    /* -mpcrel requires -mcmodel=medium, but we can't check TARGET_CMODEL until
>        after the subtarget override options are done.  */
>    if (TARGET_PCREL && TARGET_CMODEL != CMODEL_MEDIUM)
> 



More information about the Gcc-patches mailing list