Bug 229444

Summary: gcc and sse2 intrins does not correctly compile with -O<1, 2, 3, s> optimization flags
Product: [Fedora] Fedora Reporter: Steve <steve.t.armstrong>
Component: gcc4Assignee: Jakub Jelinek <jakub>
Status: CLOSED NOTABUG QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: 6   
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2007-02-21 08:11:10 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
a very very small c program with sse2 instructions none

Description Steve 2007-02-21 04:21:39 UTC
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):
4.1.1-51.fc6

How reproducible:
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
  
Actual results:
Program when compiled with certain -O flags will not actually produce an sse2
enabled program

Expected results:
program should correctly compile with -O, -O1, -O2, -O3, and -Os even if 

Additional info:
Processor:
Intel Pentium M (with sse2)

attached will be a sse2 program
successfull comiled with
gcc -O0 -march=pentium-m -msse2 test.c -o test

Comment 1 Steve 2007-02-21 04:21:39 UTC
Created attachment 148465 [details]
a very very small c program with sse2 instructions

Comment 2 Jakub Jelinek 2007-02-21 08:11:10 UTC
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).

Comment 3 Steve 2007-02-21 17:57:04 UTC
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.