This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

wrong code with -fforce-addr


Hi,

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, I post it here,
the fortran list was not able to help so far.

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

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.


I'm in a loss where to search for the real cause. Has anybody a hint how to proceed further?
Should I post the code of this function here on the list (~300 LOC)?

Thanks,
Manfred




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]