[PATCH, rs6000] Fix PR91050 by adding a DRIVER_SELF_SPECS spec

Peter Bergner bergner@linux.ibm.com
Thu Jul 25 18:08:00 GMT 2019


Uros and Jan,

I should have CC'd you for the i386 portion of the patch.  Are you ok with
the i386.h change if Iain's x86 Darwin testing comes out clean?

Peter


On 7/25/19 9:41 AM, Peter Bergner wrote:
> On 7/25/19 2:50 AM, Iain Sandoe wrote:
>> This will break Darwin which has used DRIVER_SELF_SPECS in config/darwin.h
>> since they were introduced (and the equivalent before).
>>
>> This is because Darwin has driver self-specs common to the PPC and X86 ports.
>>
>> If this change is seen the way to go, then I guess one solution would be to rename the
>> driver specs in config/darwin.h => SUBTARGET_DRIVER_SELF_SPECS*** and then
>> put a dummy DRIVER_SELF_SPECS in i386/i386.h 
>> and append SUBTARGET_DRIVER_SELF_SPECS  to both the i386.h and rs6000.h 
>> cases.  (or something along those lines)
> 
> Hi Iain,
> 
> The patch below uses your suggestion.  Does this work for you on x86 and ppc?
> 
> 
> 
>>> Segher, I tried your suggestion of writing the spec more generically
>>> (ie, %{mdejagnu-*: ... -m*}), which worked in that it did the correct
>>> replacement.  However, the %<m... hunk to strip the overridden -mcpu=
>>> option(s) would need to be written like %<m%* and that does not work
>>> at all.
>>
>> not sure what the objective is here - if you want to remove all pre-existing -mcpu from
>> the command line won’t %<mcpu*  work for you? (with the risk of removing -mcpunewthing
>> if it gets invented) ..
> 
> We only want to remove all pre-existing -mcpu= options IF the user also used
> -mdejagnu-cpu=.  You do not want to remove -mcpu= options if the user used
> -mdejagnu-tune=.  That's why I tried:
> 
>     %{mdejagnu-*: %<m%* -m*}
> 
> so -mdejagnu-cpu= would only remove -mcpu options and -mdejagnu-tune= would
> only remove -mtune= options.  The problem is that it doesn't look like you
> can you use %* with %<.
> 
> Peter
> 
> 
> gcc/
> 	PR target/91050
> 	* config/rs6000/rs6000.opt (mdejagnu-cpu=): Delete option.
> 	* config/rs6000/rs6000.c (rs6000_option_override_internal): Remove
> 	use of deleted rs6000_dejagnu_cpu_index variable.
> 	* config/rs6000/rs6000.h (DRIVER_SELF_SPECS): Define.
> 	(SUBTARGET_DRIVER_SELF_SPECS): Likewise.
> 	* config/darwin.h (DRIVER_SELF_SPECS): Rename from this ...
> 	(SUBTARGET_DRIVER_SELF_SPECS): ...to this.
> 	* config/i386/i386.h (DRIVER_SELF_SPECS): Define.
> 	(SUBTARGET_DRIVER_SELF_SPECS): Likewise.
> 
> Index: gcc/config/rs6000/rs6000.opt
> ===================================================================
> --- gcc/config/rs6000/rs6000.opt	(revision 273707)
> +++ gcc/config/rs6000/rs6000.opt	(working copy)
> @@ -388,13 +388,6 @@ mtune=
>  Target RejectNegative Joined Var(rs6000_tune_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
>  -mtune=	Schedule code for given CPU.
>  
> -; Only for use in the testsuite.  This simply overrides -mcpu=.  With older
> -; versions of Dejagnu the command line arguments you set in RUNTESTFLAGS
> -; override those set in the testcases; with this option, the testcase will
> -; always win.
> -mdejagnu-cpu=
> -Target Undocumented RejectNegative Joined Var(rs6000_dejagnu_cpu_index) Init(-1) Enum(rs6000_cpu_opt_value) Save
> -
>  mtraceback=
>  Target RejectNegative Joined Enum(rs6000_traceback_type) Var(rs6000_traceback)
>  -mtraceback=[full,part,no]	Select type of traceback table.
> Index: gcc/config/rs6000/rs6000.c
> ===================================================================
> --- gcc/config/rs6000/rs6000.c	(revision 273707)
> +++ gcc/config/rs6000/rs6000.c	(working copy)
> @@ -3489,9 +3489,6 @@ rs6000_option_override_internal (bool gl
>    /* Don't override by the processor default if given explicitly.  */
>    set_masks &= ~rs6000_isa_flags_explicit;
>  
> -  if (global_init_p && rs6000_dejagnu_cpu_index >= 0)
> -    rs6000_cpu_index = rs6000_dejagnu_cpu_index;
> -
>    /* Process the -mcpu=<xxx> and -mtune=<xxx> argument.  If the user changed
>       the cpu in a target attribute or pragma, but did not specify a tuning
>       option, use the cpu for the tuning option rather than the option specified
> Index: gcc/config/rs6000/rs6000.h
> ===================================================================
> --- gcc/config/rs6000/rs6000.h	(revision 273707)
> +++ gcc/config/rs6000/rs6000.h	(working copy)
> @@ -77,6 +77,20 @@
>  #define PPC405_ERRATUM77 0
>  #endif
>  
> +/* Only for use in the testsuite: -mdejagnu-cpu= simply overrides -mcpu=.
> +   With older versions of Dejagnu the command line arguments you set in
> +   RUNTESTFLAGS override those set in the testcases; with this option,
> +   the testcase will always win.  Ditto for -mdejagnu-tune=.  */
> +#define DRIVER_SELF_SPECS \
> +  "%{mdejagnu-cpu=*: %<mcpu=* -mcpu=%*} \
> +   %{mdejagnu-tune=*: %<mtune=* -mtune=%*} \
> +   %{mdejagnu-*: %<mdejagnu-*}" \
> +   SUBTARGET_DRIVER_SELF_SPECS
> +
> +#ifndef SUBTARGET_DRIVER_SELF_SPECS
> +# define SUBTARGET_DRIVER_SELF_SPECS
> +#endif
> +
>  #if CHECKING_P
>  #define ASM_OPT_ANY ""
>  #else
> Index: gcc/config/darwin.h
> ===================================================================
> --- gcc/config/darwin.h	(revision 273707)
> +++ gcc/config/darwin.h	(working copy)
> @@ -125,7 +125,7 @@ extern GTY(()) int darwin_ms_struct;
>  
>     However, a few can be handled and we can elide options that are silently-
>     ignored defaults, plus warn on obsolete ones that no longer function.  */
> -#define DRIVER_SELF_SPECS						\
> +#define SUBTARGET_DRIVER_SELF_SPECS					\
>  "%{fapple-kext|mkernel:-static}",					\
>  "%{gfull:-g -fno-eliminate-unused-debug-symbols} %<gfull",		\
>  "%{gsplit-dwarf:%ngsplit-dwarf is not supported on this platform} \
> Index: gcc/config/i386/i386.h
> ===================================================================
> --- gcc/config/i386/i386.h	(revision 273707)
> +++ gcc/config/i386/i386.h	(working copy)
> @@ -677,6 +677,12 @@ extern tree x86_mfence;
>     with the rounding mode forced to 53 bits.  */
>  #define TARGET_96_ROUND_53_LONG_DOUBLE 0
>  
> +#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS
> +
> +#ifndef SUBTARGET_DRIVER_SELF_SPECS
> +# define SUBTARGET_DRIVER_SELF_SPECS
> +#endif
> +
>  /* -march=native handling only makes sense with compiler running on
>     an x86 or x86_64 chip.  If changing this condition, also change
>     the condition in driver-i386.c.  */
> 



More information about the Gcc-patches mailing list