Red Hat Bugzilla – Bug 229444
gcc and sse2 intrins does not correctly compile with -O<1, 2, 3, s> optimization flags
Last modified: 2007-11-30 17:11:57 EST
Description of problem:
gcc and sse2 does not correctly compile with optimization flags of -O1, -O2,
-O3, -O or -Os
Version-Release number of selected component (if applicable):
Only tested on a real simple sse2 enabled c source code file, but always.
Steps to Reproduce:
1. Write small c program with sse2 (emmintrin.h) in this case
2. Compile program with optimization flags of -O1, -O2, -O3, -Os, -O
3. The compiled program will not contain sse2 instructions
4. if also compiled with -S and any of the mentioned flags the generated
assembly will not contain sse2 instructions
5. if compiled with -O0 or no flag compiled program contains sse2 instructions
Program when compiled with certain -O flags will not actually produce an sse2
program should correctly compile with -O, -O1, -O2, -O3, and -Os even if
Intel Pentium M (with sse2)
attached will be a sse2 program
successfull comiled with
gcc -O0 -march=pentium-m -msse2 test.c -o test
Created attachment 148465 [details]
a very very small c program with sse2 instructions
They are optimized away as useless, as written in the testcase they don't have
any visible side effect, the results are stored into an automatic variable.
If you don't want them to be optimized away, you need to either store at least
the final result to a non-automatic variable, return from function, pass to
other function (e.g. print them).
Oh, I didn't realize the compiler would automatically disregard the sse2 if they
are useless instructions, I guess that's a good thing then.