fix for the multiple-decl problem - please test

Daniel Franke franke.daniel@gmail.com
Sat Dec 27 18:35:00 GMT 2008


Hi all.

This is the first version of a patch for the multiple-decl problem as 
discussed before. It enables middle-end optimizations as inlining, but does 
not mark intent(in) arguments as TREE_CONSTANT yet (PR23169), nor does it 
enables -fwhole-program. The final patch shall do both.

For now, I'd like to ask you to give it a spin on real-life sources and 
benchmarks. I'd like to know if it works for you and if there is a measurable 
gain from it, because ... although the results are quite promising, there is 
one last test in the testsuite that still fails. It seems to be a 
miscompilation of some sort. Here I'd need some help:

$> cat function_module_1.f90
module M1
INTEGER p
CONTAINS
  subroutine AA ()
    implicit NONE
    p = BB ()
  CONTAINS
    function BB()
       integer :: BB
       BB = 1
    end function
  end subroutine 
end module

program P1
  USE M1
  implicit none
  p = 0
  call AA ()
  if (p /= 1) call abort
end

$> gfortran-svn -O1 -fdump-tree-optimized function_module_1.f90 && ./a.out
$> gfortran-svn -O2 -fdump-tree-optimized function_module_1.f90 && ./a.out
Aborted

The difference between -O1 and -O2 seems to be, that the CALL to AA is 
inlined. 

$> cat function_module_1.f90.123t.optimized
[...]
p1 ()
{
  static integer(kind=4) bb (void);
  static integer(kind=4) options.1[8] = {68, 255, 0, 0, 0, 1, 0, 1};

<bb 2>:
  _gfortran_set_options (8, &options.1);
  p = 0;
  p = 1;
  _gfortran_abort ();

}
Invalid sum of incoming frequencies 0, should be 9996

With -O1, there is no note about an "invalid sum of incoming frequencies". 
Does this ring a bell anywhere? Richard?

Thanks

	Daniel

-------------- next part --------------
A non-text attachment was scrubbed...
Name: multiple-decl.diff
Type: text/x-patch
Size: 31237 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20081227/c80ac3c4/attachment.bin>


More information about the Fortran mailing list