[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