With
gcc -O2 -fPIC -flto -g -c -o a.o a.c
gcc -O2 -fPIC -flto -g -mavx -c -o b.o b.c
gcc -shared -O2 -fPIC -flto -g -o lib1.so a.o b.o
LTO correctly generates AVX for b.o and SSE for a.o. But the GCC driver
passes -msse2avx to assembler, which encodes SSE instructions as AVX
instructions. We shouldn't pass -msse2avx to assembler for -mavx.
PR target/87522
* config/i386/gnu-user.h (ASM_SPEC): Don't pass -msse2avx to
assembler for -mavx.
* config/i386/gnu-user64.h (ASM_SPEC): Likewise.
From-SVN: r264864
+2018-10-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/87522
+ * config/i386/gnu-user.h (ASM_SPEC): Don't pass -msse2avx to
+ assembler for -mavx.
+ * config/i386/gnu-user64.h (ASM_SPEC): Likewise.
+
2018-10-05 Segher Boessenkool <segher@kernel.crashing.org>
PR target/87509
#undef ASM_SPEC
#define ASM_SPEC \
- "--32 %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}"
+ "--32 %{msse2avx:%{!mavx:-msse2avx}}"
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
#define ASM_SPEC "%{" SPEC_32 ":--32} \
%{" SPEC_64 ":--64} \
%{" SPEC_X32 ":--x32} \
- %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}"
+ %{msse2avx:%{!mavx:-msse2avx}}"
#define GNU_USER_TARGET_LINK_SPEC \
"%{" SPEC_64 ":-m " GNU_USER_LINK_EMULATION64 "} \