gcc/ PR target/101685 * config/i386/i386-options.c (ix86_option_override_internal): Don't enable LZCNT/POPCNT if they have been disabled explicitly.
gcc/testsuite/ PR target/101685 * gcc.target/i386/pr-101685.c: New test. --- gcc/config/i386/i386-options.c | 6 ++++-- gcc/testsuite/gcc.target/i386/pr-101685.c | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr-101685.c diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c index 3416a4f1752..6b789988baa 100644 --- a/gcc/config/i386/i386-options.c +++ b/gcc/config/i386/i386-options.c @@ -2124,8 +2124,10 @@ ix86_option_override_internal (bool main_args_p, if (((processor_alias_table[i].flags & PTA_ABM) != 0) && !TARGET_EXPLICIT_ABM_P (opts)) { - SET_TARGET_LZCNT (opts); - SET_TARGET_POPCNT (opts); + if (!TARGET_EXPLICIT_LZCNT_P (opts)) + SET_TARGET_LZCNT (opts); + if (!TARGET_EXPLICIT_POPCNT_P (opts)) + SET_TARGET_POPCNT (opts); } if ((processor_alias_table[i].flags diff --git a/gcc/testsuite/gcc.target/i386/pr-101685.c b/gcc/testsuite/gcc.target/i386/pr-101685.c new file mode 100644 index 00000000000..0c743ecad00 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr-101685.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=amdfam10 -mno-lzcnt -mno-popcnt" } */ + +#ifdef __LZCNT__ +# error LZCNT should be disabled +#endif + +#ifdef __POPCNT__ +# error POPCNT should be disabled +#endif -- 2.31.1