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.  */

Reply via email to