[flang-commits] [flang] [mlir] [flang][cuda] Add bind(c) interfaces for __fadd_rd and __fadd_ru (PR #122535)

Valentin Clement バレンタイン クレメン via flang-commits flang-commits at lists.llvm.org
Fri Jan 10 14:20:36 PST 2025


https://github.com/clementval updated https://github.com/llvm/llvm-project/pull/122535

>From 6dc8676a09077f716059bd0e087a2ef1bd816711 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Fri, 10 Jan 2025 13:40:03 -0800
Subject: [PATCH 1/2] [flang][cuda] Add bind(c) interfaces for __fadd_rd and
 __fadd_ru

---
 flang/module/cudadevice.f90              | 14 ++++++++++++++
 flang/test/Lower/CUDA/cuda-intrinsic.cuf | 17 +++++++++++++++++
 2 files changed, 31 insertions(+)
 create mode 100644 flang/test/Lower/CUDA/cuda-intrinsic.cuf

diff --git a/flang/module/cudadevice.f90 b/flang/module/cudadevice.f90
index 1402bd4e150419..74825c36f7a95f 100644
--- a/flang/module/cudadevice.f90
+++ b/flang/module/cudadevice.f90
@@ -71,4 +71,18 @@ attributes(device) subroutine threadfence_system()
   end interface
   public :: threadfence_system
 
+  interface
+    attributes(device) function __fadd_rd(x, y) bind(c, name='__nv_fadd_rd')
+      real :: x, y, __fadd_rd
+    end function
+  end interface
+  public :: __fadd_rd
+
+  interface
+    attributes(device) function __fadd_ru(x, y) bind(c, name='__nv_fadd_ru')
+      real :: x, y, __fadd_ru
+    end function
+  end interface
+  public :: __fadd_ru
+
 end module
diff --git a/flang/test/Lower/CUDA/cuda-intrinsic.cuf b/flang/test/Lower/CUDA/cuda-intrinsic.cuf
new file mode 100644
index 00000000000000..9723afc532387f
--- /dev/null
+++ b/flang/test/Lower/CUDA/cuda-intrinsic.cuf
@@ -0,0 +1,17 @@
+! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s
+
+module mod1
+  type int
+    real :: inf, sup 
+  end type int
+contains
+  attributes(global) subroutine fadd(c, a, b)
+    type (int) :: c, a, b
+    c%inf = __fadd_rd(a%inf, b%inf)
+    c%sup = __fadd_ru(a%sup, b%sup)
+  end subroutine
+end
+
+! CHECK-LABEL: func.func @_QMmod1Pfadd
+! CHECK: fir.call @__nv_fadd_rd
+! CHECK: fir.call @__nv_fadd_ru

>From ad5a13f1096d3e82053cc778ece73ea0b9ac79a0 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Fri, 10 Jan 2025 14:20:24 -0800
Subject: [PATCH 2/2] Add intent(in)

---
 flang/module/cudadevice.f90          | 6 ++++--
 mlir/lib/Target/LLVM/NVVM/Target.cpp | 1 +
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/flang/module/cudadevice.f90 b/flang/module/cudadevice.f90
index 74825c36f7a95f..e06c706538fe63 100644
--- a/flang/module/cudadevice.f90
+++ b/flang/module/cudadevice.f90
@@ -73,14 +73,16 @@ attributes(device) subroutine threadfence_system()
 
   interface
     attributes(device) function __fadd_rd(x, y) bind(c, name='__nv_fadd_rd')
-      real :: x, y, __fadd_rd
+      real, intent(in) :: x, y
+      real :: __fadd_rd
     end function
   end interface
   public :: __fadd_rd
 
   interface
     attributes(device) function __fadd_ru(x, y) bind(c, name='__nv_fadd_ru')
-      real :: x, y, __fadd_ru
+      real, intent(in) :: x, y
+      real :: __fadd_ru
     end function
   end interface
   public :: __fadd_ru
diff --git a/mlir/lib/Target/LLVM/NVVM/Target.cpp b/mlir/lib/Target/LLVM/NVVM/Target.cpp
index 86ff848d6c6c2d..8576421ced50ef 100644
--- a/mlir/lib/Target/LLVM/NVVM/Target.cpp
+++ b/mlir/lib/Target/LLVM/NVVM/Target.cpp
@@ -323,6 +323,7 @@ NVPTXSerializer::compileToBinary(const std::string &ptxCode) {
   std::optional<TmpFile> ptxFile = createTemp(basename, "ptx");
   if (!ptxFile)
     return std::nullopt;
+  ptx.releaseFile();
   std::optional<TmpFile> logFile = createTemp(basename, "log");
   if (!logFile)
     return std::nullopt;



More information about the flang-commits mailing list