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

Reply via email to