]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386: Mark target option with optimization when enabled with opt level [PR116065]
authorHongyu Wang <hongyu.wang@intel.com>
Fri, 26 Jul 2024 00:27:01 +0000 (08:27 +0800)
committerHongyu Wang <hongyu.wang@intel.com>
Wed, 31 Jul 2024 08:56:28 +0000 (16:56 +0800)
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.

gcc/config/i386/i386.opt
gcc/testsuite/gcc.target/i386/pr116065.c [new file with mode: 0644]

index 353fffb234307107ca40870d19355919ae46c19c..52054bc018ad0073292b20f710bdf7f1904fc5e6 100644 (file)
@@ -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 (file)
index 0000000..083e70f
--- /dev/null
@@ -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);
+}
+