Skip to content

Commit e27e4f3

Browse files
authored
[flang][cuda] Add interfaces for __uint2float_rX functions (#153620)
Also add bind name for __uint2double_rn
1 parent dc0becc commit e27e4f3

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

flang/module/cudadevice.f90

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,8 +590,36 @@ attributes(device) real(8) function sinpi(x) bind(c,name='__nv_sinpi')
590590
end function
591591
end interface
592592

593+
interface __uint2float_rd
594+
attributes(device) real function __uint2float_rd(i) bind(c, name='__nv_uint2float_rd')
595+
!dir$ ignore_tkr (d) i
596+
integer, value :: i
597+
end function
598+
end interface
599+
600+
interface __uint2float_rn
601+
attributes(device) real function __uint2float_rn(i) bind(c, name='__nv_uint2float_rn')
602+
!dir$ ignore_tkr (d) i
603+
integer, value :: i
604+
end function
605+
end interface
606+
607+
interface __uint2float_ru
608+
attributes(device) real function __uint2float_ru(i) bind(c, name='__nv_uint2float_ru')
609+
!dir$ ignore_tkr (d) i
610+
integer, value :: i
611+
end function
612+
end interface
613+
614+
interface __uint2float_rz
615+
attributes(device) real function __uint2float_rz(i) bind(c, name='__nv_uint2float_rz')
616+
!dir$ ignore_tkr (d) i
617+
integer, value :: i
618+
end function
619+
end interface
620+
593621
interface __uint2double_rn
594-
attributes(device) double precision function __uint2double_rn(i) bind(c)
622+
attributes(device) double precision function __uint2double_rn(i) bind(c, name='__nv_uint2double_rn')
595623
!dir$ ignore_tkr (d) i
596624
integer, value :: i
597625
end function

flang/test/Lower/CUDA/cuda-libdevice.cuf

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,30 @@ end subroutine
2020
! CHECK-LABEL: _QPtest_usad
2121
! CHECK: %{{.*}} = fir.call @__nv_usad(%{{.*}}, %{{.*}}, %{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32, i32, i32) -> i32
2222

23+
attributes(global) subroutine test_uint2float_rX()
24+
real :: res
25+
integer :: i
26+
res = __uint2float_rd(i)
27+
res = __uint2float_rn(i)
28+
res = __uint2float_ru(i)
29+
res = __uint2float_rz(i)
30+
end subroutine
31+
32+
! CHECK-LABEL: _QPtest_uint2float_rx
33+
! CHECK: %{{.*}} = fir.call @__nv_uint2float_rd(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32) -> f32
34+
! CHECK: %{{.*}} = fir.call @__nv_uint2float_rn(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32) -> f32
35+
! CHECK: %{{.*}} = fir.call @__nv_uint2float_ru(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32) -> f32
36+
! CHECK: %{{.*}} = fir.call @__nv_uint2float_rz(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32) -> f32
37+
38+
attributes(global) subroutine test_uint2double_rn()
39+
double precision :: res
40+
integer :: i
41+
res = __uint2double_rn(i)
42+
end subroutine
43+
44+
! CHECK-LABEL: _QPtest_uint2double_rn
45+
! CHECK: %{{.*}} = fir.call @__nv_uint2double_rn(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32) -> f64
46+
2347
attributes(global) subroutine test_ull2dloat_rX()
2448
real :: res
2549
integer(8) :: i

0 commit comments

Comments
 (0)