aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorHongyu Wang <hongyu.wang@intel.com>2024-07-26 08:27:01 +0800
committerHongyu Wang <hongyu.wang@intel.com>2024-07-31 16:56:28 +0800
commita59c4e496fa916cb9a484a649aa1b4cebd6550f2 (patch)
tree11212f60106c11e33125c0df30a0832f547379ea /gcc
parentd63b6d8b494483b0049370ff0dfeee0e1d10e54b (diff)
downloadgcc-a59c4e496fa916cb9a484a649aa1b4cebd6550f2.zip
gcc-a59c4e496fa916cb9a484a649aa1b4cebd6550f2.tar.gz
gcc-a59c4e496fa916cb9a484a649aa1b4cebd6550f2.tar.bz2
i386: Mark target option with optimization when enabled with opt level [PR116065]
When introducing munroll-only-small-loops, the option was marked as Target Save and added to -O2 default which makes attribute(optimize) resets target option and causing error when cmdline has O1 and funciton attribute has O2 and other target options. Mark this option as Optimization to fix. gcc/ChangeLog PR target/116065 * config/i386/i386.opt (munroll-only-small-loops): Mark as Optimization instead of Save. gcc/testsuite/ChangeLog PR target/116065 * gcc.target/i386/pr116065.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i386/i386.opt2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr116065.c24
2 files changed, 25 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index 353fffb..52054bc 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -1259,7 +1259,7 @@ Target Mask(ISA2_RAOINT) Var(ix86_isa_flags2) Save
Support RAOINT built-in functions and code generation.
munroll-only-small-loops
-Target Var(ix86_unroll_only_small_loops) Init(0) Save
+Target Var(ix86_unroll_only_small_loops) Init(0) Optimization
Enable conservative small loop unrolling.
mlam=
diff --git a/gcc/testsuite/gcc.target/i386/pr116065.c b/gcc/testsuite/gcc.target/i386/pr116065.c
new file mode 100644
index 0000000..083e70f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr116065.c
@@ -0,0 +1,24 @@
+/* PR target/116065 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -mno-avx" } */
+
+#ifndef __AVX__
+#pragma GCC push_options
+#pragma GCC target("avx")
+#define __DISABLE_AVX__
+#endif /* __AVX__ */
+
+extern inline double __attribute__((__gnu_inline__,__always_inline__))
+ foo (double x) { return x; }
+
+#ifdef __DISABLE_AVX__
+#undef __DISABLE_AVX__
+#pragma GCC pop_options
+#endif /* __DISABLE_AVX__ */
+
+void __attribute__((target ("avx"), optimize(3)))
+bar (double *p)
+{
+ *p = foo (*p);
+}
+