https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80108
--- Comment #10 from kelvin at gcc dot gnu.org ---
FWIW, I tried another variant on the patch, which is shown below. This variant
handles all of the p9-specific target options the same, as seen below:
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c (revision 246573)
+++ gcc/config/rs6000/rs6000.c (working copy)
@@ -4273,8 +4273,32 @@ rs6000_option_override_internal (bool global_init_
/* For the newer switches (vsx, dfp, etc.) set some of the older options,
unless the user explicitly used the -mno-<option> to disable the code.
*/
if (TARGET_P9_VECTOR || TARGET_MODULO || TARGET_P9_DFORM_SCALAR
- || TARGET_P9_DFORM_VECTOR || TARGET_P9_DFORM_BOTH > 0 ||
TARGET_P9_MINMAX)
- rs6000_isa_flags |= (ISA_3_0_MASKS_SERVER & ~rs6000_isa_flags_explicit);
+ || TARGET_P9_DFORM_VECTOR || TARGET_P9_DFORM_BOTH > 0
+ || TARGET_P9_MINMAX)
+ {
+ if (have_cpu)
+ {
+ if (cpu_index == PROCESSOR_POWER9)
+ /* legacy behavior: allow -mcpu-power9 with certain capabilities
+ (eg -mno-vsx) explicitly disabled. */
+ rs6000_isa_flags |=
+ (ISA_3_0_MASKS_SERVER & ~rs6000_isa_flags_explicit);
+ else
+ error ("Power9 target option is incompatible with -mcpu=<xxx> for "
+ "<xxx> less than power9");
+ }
+#ifdef KELVIN_REMOVE
+ else if ((ISA_3_0_MASKS_SERVER & rs6000_isa_flags_explicit)
+ != (ISA_3_0_MASKS_SERVER & rs6000_isa_flags
+ & rs6000_isa_flags_explicit))
+ /* Enforce that none of the ISA_3_0_MASKS_SERVER flags
+ were explicitly cleared. */
+ error ("-mpower9-minmax incompatible with explicitly disabled
options");
+#endif
+ else
+ rs6000_isa_flags |=
+ (ISA_3_0_MASKS_SERVER & ~rs6000_isa_flags_explicit);
+ }
else if (TARGET_P8_VECTOR || TARGET_DIRECT_MOVE || TARGET_CRYPTO)
rs6000_isa_flags |= (ISA_2_7_MASKS_SERVER & ~rs6000_isa_flags_explicit);
else if (TARGET_VSX)
This variant also results in numerous regressions: 942 new fewer "expected
passes", 4 more "unexpected failures", 339 more "unsupported tests".