From 842392c856b8e15f8105b5fd8c3ed454cfd7c912 Mon Sep 17 00:00:00 2001 From: Kelvin Nilsen Date: Thu, 23 Mar 2017 22:12:06 +0000 Subject: [PATCH] p9-options-1.c: New test. gcc/testsuite/ChangeLog: 2017-03-23 Kelvin Nilsen * gcc.target/powerpc/p9-options-1.c: New test. gcc/ChangeLog: 2017-03-23 Kelvin Nilsen * config/rs6000/rs6000.c (rs6000_option_override_internal): Change handling of certain combinations of target options, including the combinations -mpower8-vector vs. -mno-vsx, -mpower9-vector vs. -mno-power8-vector, and -mpower9_dform vs. -mno-power9-vector. From-SVN: r246428 --- gcc/ChangeLog | 7 +++ gcc/config/rs6000/rs6000.c | 55 ++++++++++++++++--- gcc/testsuite/ChangeLog | 4 ++ .../gcc.target/powerpc/p9-options-1.c | 28 ++++++++++ 4 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/p9-options-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98254eb4c80..d1dcff02204 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-03-23 Kelvin Nilsen + + * config/rs6000/rs6000.c (rs6000_option_override_internal): Change + handling of certain combinations of target options, including the + combinations -mpower8-vector vs. -mno-vsx, -mpower9-vector vs. + -mno-power8-vector, and -mpower9_dform vs. -mno-power9-vector. + 2017-03-23 Kyrylo Tkachov PR target/71436 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 9db85e698d5..c91d2199ace 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -4315,9 +4315,22 @@ rs6000_option_override_internal (bool global_init_p) if (TARGET_P8_VECTOR && !TARGET_VSX) { - if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR) + if ((rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR) + && (rs6000_isa_flags_explicit & OPTION_MASK_VSX)) error ("-mpower8-vector requires -mvsx"); - rs6000_isa_flags &= ~OPTION_MASK_P8_VECTOR; + else if ((rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR) == 0) + { + rs6000_isa_flags &= ~OPTION_MASK_P8_VECTOR; + if (rs6000_isa_flags_explicit & OPTION_MASK_VSX) + rs6000_isa_flags_explicit |= OPTION_MASK_P8_VECTOR; + } + else + { + /* OPTION_MASK_P8_VECTOR is explicit, and OPTION_MASK_VSX is + not explicit. */ + rs6000_isa_flags |= OPTION_MASK_VSX; + rs6000_isa_flags_explicit |= OPTION_MASK_VSX; + } } if (TARGET_VSX_TIMODE && !TARGET_VSX) @@ -4517,9 +4530,22 @@ rs6000_option_override_internal (bool global_init_p) error messages. However, if users have managed to select power9-vector without selecting power8-vector, they already know about undocumented flags. */ - if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR) + if ((rs6000_isa_flags_explicit & OPTION_MASK_P9_VECTOR) && + (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR)) error ("-mpower9-vector requires -mpower8-vector"); - rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR; + else if ((rs6000_isa_flags_explicit & OPTION_MASK_P9_VECTOR) == 0) + { + rs6000_isa_flags &= ~OPTION_MASK_P9_VECTOR; + if (rs6000_isa_flags_explicit & OPTION_MASK_P8_VECTOR) + rs6000_isa_flags_explicit |= OPTION_MASK_P9_VECTOR; + } + else + { + /* OPTION_MASK_P9_VECTOR is explicit and + OPTION_MASK_P8_VECTOR is not explicit. */ + rs6000_isa_flags |= OPTION_MASK_P8_VECTOR; + rs6000_isa_flags_explicit |= OPTION_MASK_P8_VECTOR; + } } /* -mpower9-dform turns on both -mpower9-dform-scalar and @@ -4548,10 +4574,25 @@ rs6000_option_override_internal (bool global_init_p) error messages. However, if users have managed to select power9-dform without selecting power9-vector, they already know about undocumented flags. */ - if (rs6000_isa_flags_explicit & OPTION_MASK_P9_VECTOR) + if ((rs6000_isa_flags_explicit & OPTION_MASK_P9_VECTOR) + && (rs6000_isa_flags_explicit & (OPTION_MASK_P9_DFORM_SCALAR + | OPTION_MASK_P9_DFORM_VECTOR))) error ("-mpower9-dform requires -mpower9-vector"); - rs6000_isa_flags &= ~(OPTION_MASK_P9_DFORM_SCALAR - | OPTION_MASK_P9_DFORM_VECTOR); + else if (rs6000_isa_flags_explicit & OPTION_MASK_P9_VECTOR) + { + rs6000_isa_flags &= + ~(OPTION_MASK_P9_DFORM_SCALAR | OPTION_MASK_P9_DFORM_VECTOR); + rs6000_isa_flags_explicit |= + (OPTION_MASK_P9_DFORM_SCALAR | OPTION_MASK_P9_DFORM_VECTOR); + } + else + { + /* We know that OPTION_MASK_P9_VECTOR is not explicit and + OPTION_MASK_P9_DFORM_SCALAR or OPTION_MASK_P9_DORM_VECTOR + may be explicit. */ + rs6000_isa_flags |= OPTION_MASK_P9_VECTOR; + rs6000_isa_flags_explicit |= OPTION_MASK_P9_VECTOR; + } } if (TARGET_P9_DFORM_SCALAR && !TARGET_UPPER_REGS_DF) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 14b75162038..195552897f0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-03-23 Kelvin Nilsen + + * gcc.target/powerpc/p9-options-1.c: New test. + 2017-03-23 Kyrylo Tkachov PR target/71436 diff --git a/gcc/testsuite/gcc.target/powerpc/p9-options-1.c b/gcc/testsuite/gcc.target/powerpc/p9-options-1.c new file mode 100644 index 00000000000..30a6b9313c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/p9-options-1.c @@ -0,0 +1,28 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-mcpu=power9 -mno-power9-vector" } */ + +#include + +/* This program's "test for excess errors" demonstrates that combining + the target options -mcpu=power9 and -mno-power9-vector does not + result in an error. A previous version of the compiler aborted + with the error message: + + "power9-dform requires power9-vector." + + when these two options were used in combination. + + The newer version of the compiler, instead, automatically disables + power9-dform when the -mno-power9-vector command-line option is + specified. */ +int +test_any_equal (vector bool char *arg1_p, vector bool char *arg2_p) +{ + vector bool char arg_1 = *arg1_p; + vector bool char arg_2 = *arg2_p; + + return vec_any_eq (arg_1, arg_2); +} + -- 2.30.2