flang-compiler / f18

F18 is a front-end for Fortran intended to replace the existing front-end in the Flang compiler
230 stars 48 forks source link

support for dfloat function, extension or standard? #1077

Open naromero77 opened 4 years ago

naromero77 commented 4 years ago

This dfloat intrinsic function appears frequently in a DOE code. Here is a reduced test case that shows a canonical example of how it is used:

      subroutine fwdcpfft_comp(psi, nr1, nr2, nr3)

      implicit none

      integer nr1, nr2, nr3
      complex*16 psi(nr1, nr2, nr3)

      real*8 fac

      fac = 1.0d0/dfloat(nr1*nr2*nr3)

      end

Is this part of the Fortran standard or an extension? https://gcc.gnu.org/onlinedocs/gcc-4.4.1/gfortran/DFLOAT.html https://software.intel.com/en-us/fortran-compiler-developer-guide-and-reference-dfloat

Is this really even necessary to have such an intrinsic? Wouldn't a compiler's type promotion heuristics automatically handle this?

klausler commented 4 years ago

DFLOAT is not a standard intrinsic procedure of Fortran. DBLE(n) and REAL(n,KIND=KIND(0.0d0)) are standard equivalents for integer n; so is (0.0d0+(n)). We'll probably support DFLOAT in f18 for better portability, but new code should avoid it.

naromero77 commented 4 years ago

Thanks for clarifying the correct way to do this. So far, I have only encountered this construct in one DOE code -- a rather old one at that.

If we are prioritizing non-standard extensions, it would be more important to get this one implemented sizeof: https://github.com/flang-compiler/f18/issues/1020

As now I have found several DOE codes that make use of it.