From 0f0a12012c227e7160001baf419fe8e28b07779a Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Tue, 12 Aug 2025 13:22:00 -0700 Subject: [PATCH] [flang][cuda] Add bind name for __double2float_XX interfaces --- flang/module/cudadevice.f90 | 8 ++++---- flang/test/Lower/CUDA/cuda-device-proc.cuf | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/flang/module/cudadevice.f90 b/flang/module/cudadevice.f90 index 1b3c98b3e3f96..4d287074158ff 100644 --- a/flang/module/cudadevice.f90 +++ b/flang/module/cudadevice.f90 @@ -501,28 +501,28 @@ attributes(device) real(8) function sinpi(x) bind(c,name='__nv_sinpi') end interface interface __double2float_rn - attributes(device) real function __double2float_rn(r) bind(c) + attributes(device) real function __double2float_rn(r) bind(c, name='__nv_double2float_rn') !dir$ ignore_tkr (d) r double precision, value :: r end function end interface interface __double2float_rz - attributes(device) real function __double2float_rz(r) bind(c) + attributes(device) real function __double2float_rz(r) bind(c, name='__nv_double2float_rz') !dir$ ignore_tkr (d) r double precision, value :: r end function end interface interface __double2float_ru - attributes(device) real function __double2float_ru(r) bind(c) + attributes(device) real function __double2float_ru(r) bind(c, name='__nv_double2float_ru') !dir$ ignore_tkr (d) r double precision, value :: r end function end interface interface __double2float_rd - attributes(device) real function __double2float_rd(r) bind(c) + attributes(device) real function __double2float_rd(r) bind(c, name='__nv_double2float_rd') !dir$ ignore_tkr (d) r double precision, value :: r end function diff --git a/flang/test/Lower/CUDA/cuda-device-proc.cuf b/flang/test/Lower/CUDA/cuda-device-proc.cuf index 24600291b788a..43555c0b2b4e8 100644 --- a/flang/test/Lower/CUDA/cuda-device-proc.cuf +++ b/flang/test/Lower/CUDA/cuda-device-proc.cuf @@ -58,6 +58,11 @@ attributes(global) subroutine devsub() res = __ffs(al) res = __brev(ai) resl = __brev(al) + + af = __double2float_rn(ad) + af = __double2float_rz(ad) + af = __double2float_ru(ad) + af = __double2float_rd(ad) end ! CHECK-LABEL: func.func @_QPdevsub() attributes {cuf.proc_attr = #cuf.cuda_proc} @@ -105,6 +110,11 @@ end ! CHECK: %{{.*}} = fir.call @__nv_brev(%{{.*}}) proc_attrs fastmath : (i32) -> i32 ! CHECK: %{{.*}} = fir.call @__nv_brevll(%{{.*}}) proc_attrs fastmath : (i64) -> i64 +! CHECK: %{{.*}} = fir.call @__nv_double2float_rn(%{{.*}}) proc_attrs fastmath : (f64) -> f32 +! CHECK: %{{.*}} = fir.call @__nv_double2float_rz(%{{.*}}) proc_attrs fastmath : (f64) -> f32 +! CHECK: %{{.*}} = fir.call @__nv_double2float_ru(%{{.*}}) proc_attrs fastmath : (f64) -> f32 +! CHECK: %{{.*}} = fir.call @__nv_double2float_rd(%{{.*}}) proc_attrs fastmath : (f64) -> f32 + subroutine host1() integer, device :: a(32) integer, device :: ret