This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/33638] New: optimization bug: wrong code with -fforce-addr
- From: "manfred99 at gmx dot ch" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Oct 2007 12:44:25 -0000
- Subject: [Bug middle-end/33638] New: optimization bug: wrong code with -fforce-addr
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
I have a rather nasty optimization issue with gfortran (as of yesterday).
As I think it could be an optimization issue and not an gfortran frontend
issue, so I assigned it to the middle-end.
I narrowed my problem to one single fortran function. If I compile this
function with
"gfortran -O2 -march=pentium4" the output is OK, using
"gfortran -O2 -march=pentium4 -fforce-addr" produces wrong output.
When reducing optimization level to "-O1", the issue vanishes for all tried
flag combinations.
If I comment out a particular non-functional line in this code, the issue goes
away:
if (always_true) then
....
else
this_line_commented_out_makes_it_working_again
....
endif
I will add assembler output of original, non-working code as well as
of working code when commenting the non-functional line, both compiled with
"gfortran -O2 -march=pentium4 -fforce-addr -S comunpack.f"
Function code is added as well.
Further data points:
- output of -fdump-tree-optimized is the same for both the working and the
broken case (of the original function, not the line commenting test).
- there are differences in assembler output though.
- the code calls C functions.
- I could reproduce this issue on an different, non-pentium4 machine
using the same flags.
- the flag -march=pentium4 is necessary to trigger the issue.
--
Summary: optimization bug: wrong code with -fforce-addr
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: manfred99 at gmx dot ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33638