[flang-commits] [flang] 20feca4 - [flang][cuda] Allow ieee_arithmetic on the device (#131930)
via flang-commits
flang-commits at lists.llvm.org
Wed Mar 19 07:20:11 PDT 2025
Author: Valentin Clement (バレンタイン クレメン)
Date: 2025-03-19T07:20:06-07:00
New Revision: 20feca47c1e2fdd90f3f7007a492e4ec18c71c08
URL: https://github.com/llvm/llvm-project/commit/20feca47c1e2fdd90f3f7007a492e4ec18c71c08
DIFF: https://github.com/llvm/llvm-project/commit/20feca47c1e2fdd90f3f7007a492e4ec18c71c08.diff
LOG: [flang][cuda] Allow ieee_arithmetic on the device (#131930)
- Allow ieee_arithmetic on the device
- Add ignore_tkr(d) to ieee_is_finite
Added:
Modified:
flang/lib/Semantics/check-cuda.cpp
flang/module/ieee_arithmetic.f90
flang/test/Semantics/cuf09.cuf
Removed:
################################################################################
diff --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index cb7a383284e63..dea170f7e099b 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -82,6 +82,14 @@ struct DeviceExprChecker
}
}
}
+ const Symbol &ultimate{sym->GetUltimate()};
+ const Scope &scope{ultimate.owner()};
+ const Symbol *mod{scope.IsModule() ? scope.symbol() : nullptr};
+ // Allow ieee_arithmetic module functions to be called on the device.
+ // TODO: Check for unsupported ieee_arithmetic on the device.
+ if (mod && mod->name() == "ieee_arithmetic") {
+ return {};
+ }
} else if (x.GetSpecificIntrinsic()) {
// TODO(CUDA): Check for unsupported intrinsics here
return {};
diff --git a/flang/module/ieee_arithmetic.f90 b/flang/module/ieee_arithmetic.f90
index 45016e84de7a3..4e938a2daaa91 100644
--- a/flang/module/ieee_arithmetic.f90
+++ b/flang/module/ieee_arithmetic.f90
@@ -339,6 +339,7 @@ end subroutine ieee_get_underflow_mode_l##GKIND;
#define IEEE_IS_FINITE_R(XKIND) \
elemental logical function ieee_is_finite_a##XKIND(x); \
real(XKIND), intent(in) :: x; \
+ !dir$ ignore_tkr(d) x; \
end function ieee_is_finite_a##XKIND;
interface ieee_is_finite
SPECIFICS_R(IEEE_IS_FINITE_R)
diff --git a/flang/test/Semantics/cuf09.cuf b/flang/test/Semantics/cuf09.cuf
index a8c62db65c6d5..b59d02192f618 100644
--- a/flang/test/Semantics/cuf09.cuf
+++ b/flang/test/Semantics/cuf09.cuf
@@ -209,3 +209,15 @@ subroutine host1()
a(i) = a(i) + a(j) - 34.0
end do
end
+
+subroutine ieee_test
+ use ieee_arithmetic
+
+ real(8), device :: y(100)
+ logical(4), managed :: ll(100)
+
+ !$cuf kernel do(1)<<<*,*>>>
+ do i = 1, 100
+ ll(i) = ieee_is_finite(y(i)) ! allow ieee_arithmetic functions on the device.
+ end do
+end subroutine
More information about the flang-commits
mailing list