forked from OSchip/llvm-project
[flang] Support DFLOAT legacy extension intrinsic function
Like the similar legacy extension FLOAT(), DFLOAT() represents a conversion from default integer to DOUBLE PRECISION. Rewrite into a conversion operation. Differential Revision: https://reviews.llvm.org/D107489
This commit is contained in:
parent
bb15861e14
commit
617be2756f
|
@ -133,6 +133,7 @@ end
|
|||
the arguments as if they were operands to an intrinsic `+` operator,
|
||||
and defining the result type accordingly.
|
||||
* DOUBLE COMPLEX intrinsics DREAL, DCMPLX, DCONJG, and DIMAG.
|
||||
* The DFLOAT intrinsic function.
|
||||
* INT_PTR_KIND intrinsic returns the kind of c_intptr_t.
|
||||
* Restricted specific conversion intrinsics FLOAT, SNGL, IDINT, IFIX, DREAL,
|
||||
and DCMPLX accept arguments of any kind instead of only the default kind or
|
||||
|
|
|
@ -817,7 +817,7 @@ static const IntrinsicInterface genericIntrinsicFunction[]{
|
|||
// TODO: Non-standard intrinsic functions
|
||||
// AND, OR, XOR, LSHIFT, RSHIFT, SHIFT, ZEXT, IZEXT,
|
||||
// COMPL, EQV, NEQV, INT8, JINT, JNINT, KNINT,
|
||||
// QCMPLX, DFLOAT, QEXT, QFLOAT, QREAL, DNUM,
|
||||
// QCMPLX, QEXT, QFLOAT, QREAL, DNUM,
|
||||
// INUM, JNUM, KNUM, QNUM, RNUM, RAN, RANF, ILEN,
|
||||
// MCLOCK, SECNDS, COTAN, IBCHNG, ISHA, ISHC, ISHL, IXOR
|
||||
// IARG, IARGC, NARGS, NUMARG, BADDRESS, IADDR, CACHESIZE,
|
||||
|
@ -924,6 +924,7 @@ static const SpecificIntrinsicInterface specificIntrinsicFunction[]{
|
|||
{"y", AnyIntOrReal, Rank::elementalOrBOZ, Optionality::optional}},
|
||||
DoublePrecisionComplex},
|
||||
"cmplx", true},
|
||||
{{"dfloat", {{"i", AnyInt}}, DoublePrecision}, "real", true},
|
||||
{{"dreal", {{"a", AnyComplex}}, DoublePrecision}, "real", true},
|
||||
{{"dconjg", {{"a", DoublePrecisionComplex}}, DoublePrecisionComplex},
|
||||
"conjg"},
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
! RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s
|
||||
! Checks that a call to the legacy extension intrinsic function
|
||||
! DFLOAT is transmogrified into a type conversion operation.
|
||||
module m
|
||||
!CHECK: d = 1._8
|
||||
double precision :: d = dfloat(1)
|
||||
contains
|
||||
subroutine sub(n)
|
||||
integer, intent(in) :: n
|
||||
!CHECK: 2._8
|
||||
print *, dfloat(2)
|
||||
!CHECK: real(n,kind=8)
|
||||
print *, dfloat(n)
|
||||
end subroutine
|
||||
end module
|
Loading…
Reference in New Issue