[flang-commits] [flang] d2663fc - [flang][Evaluate] Fold DBLE
Roger Ferrer Ibanez via flang-commits
flang-commits at lists.llvm.org
Wed Mar 23 10:29:43 PDT 2022
Author: Roger Ferrer Ibanez
Date: 2022-03-23T17:27:05Z
New Revision: d2663fcc391dcf2e6e79138b2ef21db2f75e16e5
URL: https://github.com/llvm/llvm-project/commit/d2663fcc391dcf2e6e79138b2ef21db2f75e16e5
DIFF: https://github.com/llvm/llvm-project/commit/d2663fcc391dcf2e6e79138b2ef21db2f75e16e5.diff
LOG: [flang][Evaluate] Fold DBLE
We can reuse the folding of REAL.
Differential Revision: https://reviews.llvm.org/D122214
Added:
flang/test/Evaluate/fold-dble.f90
Modified:
flang/lib/Evaluate/fold-real.cpp
Removed:
################################################################################
diff --git a/flang/lib/Evaluate/fold-real.cpp b/flang/lib/Evaluate/fold-real.cpp
index 0d9de1346bd44..4ae8cc207d1c2 100644
--- a/flang/lib/Evaluate/fold-real.cpp
+++ b/flang/lib/Evaluate/fold-real.cpp
@@ -127,7 +127,7 @@ Expr<Type<TypeCategory::Real, KIND>> FoldIntrinsicFunction(
} else if (name == "product") {
auto one{Scalar<T>::FromInteger(value::Integer<8>{1}).value};
return FoldProduct<T>(context, std::move(funcRef), one);
- } else if (name == "real") {
+ } else if (name == "real" || name == "dble") {
if (auto *expr{args[0].value().UnwrapExpr()}) {
return ToReal<KIND>(context, std::move(*expr));
}
diff --git a/flang/test/Evaluate/fold-dble.f90 b/flang/test/Evaluate/fold-dble.f90
new file mode 100644
index 0000000000000..523fa8c520672
--- /dev/null
+++ b/flang/test/Evaluate/fold-dble.f90
@@ -0,0 +1,10 @@
+! RUN: %python %S/test_folding.py %s %flang_fc1
+! Tests folding of DBLE()
+module ft_data
+ integer nx, ny, nz
+ parameter (nx=64, ny=64, nz=64, maxdim=64)
+ double precision ntotal_f
+ parameter (ntotal_f = dble(nx)*ny*nz)
+ logical, parameter :: test_dble_1 = ntotal_f == real(nx*ny*nz, kind(0.0D0))
+ logical, parameter :: test_dble_2 = kind(dble(nx)) == kind(0.0D0)
+end module ft_data
More information about the flang-commits
mailing list