aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2021-07-30 05:58:38 -0700
committerH.J. Lu <hjl.tools@gmail.com>2021-07-30 06:05:37 -0700
commit854ef6e50acf1b182ddaf007cff2cf60545692b0 (patch)
tree61c009f5ccb7743a5e133f3f9bfde84eb3258682 /gcc
parent011134dc19dc78fc3780cfc1d79bfc128355608f (diff)
downloadgcc-854ef6e50acf1b182ddaf007cff2cf60545692b0.zip
gcc-854ef6e50acf1b182ddaf007cff2cf60545692b0.tar.gz
gcc-854ef6e50acf1b182ddaf007cff2cf60545692b0.tar.bz2
x86: Don't enable LZCNT/POPCNT if disabled explicitly
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/pr101685.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i386/i386-options.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/pr101685.c10
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c
index 3416a4f..6b78998 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/pr101685.c b/gcc/testsuite/gcc.target/i386/pr101685.c
new file mode 100644
index 0000000..0c743ec
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr101685.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