Skip to content

Commit 6ae6c4f

Browse files
authored
[flang][cuda] Add bind name for __double2float_XX interfaces (#153275)
1 parent 1f04b15 commit 6ae6c4f

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

flang/module/cudadevice.f90

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -507,28 +507,28 @@ attributes(device) real(8) function sinpi(x) bind(c,name='__nv_sinpi')
507507
end interface
508508

509509
interface __double2float_rn
510-
attributes(device) real function __double2float_rn(r) bind(c)
510+
attributes(device) real function __double2float_rn(r) bind(c, name='__nv_double2float_rn')
511511
!dir$ ignore_tkr (d) r
512512
double precision, value :: r
513513
end function
514514
end interface
515515

516516
interface __double2float_rz
517-
attributes(device) real function __double2float_rz(r) bind(c)
517+
attributes(device) real function __double2float_rz(r) bind(c, name='__nv_double2float_rz')
518518
!dir$ ignore_tkr (d) r
519519
double precision, value :: r
520520
end function
521521
end interface
522522

523523
interface __double2float_ru
524-
attributes(device) real function __double2float_ru(r) bind(c)
524+
attributes(device) real function __double2float_ru(r) bind(c, name='__nv_double2float_ru')
525525
!dir$ ignore_tkr (d) r
526526
double precision, value :: r
527527
end function
528528
end interface
529529

530530
interface __double2float_rd
531-
attributes(device) real function __double2float_rd(r) bind(c)
531+
attributes(device) real function __double2float_rd(r) bind(c, name='__nv_double2float_rd')
532532
!dir$ ignore_tkr (d) r
533533
double precision, value :: r
534534
end function

flang/test/Lower/CUDA/cuda-device-proc.cuf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,13 @@ attributes(global) subroutine devsub()
6565
ad = __ddiv_rz(ad, ad)
6666
ad = __ddiv_ru(ad, ad)
6767
ad = __ddiv_rd(ad, ad)
68+
af = __double2float_rn(ad)
69+
af = __double2float_rz(ad)
70+
af = __double2float_ru(ad)
71+
af = __double2float_rd(ad)
6872
ai = __mul24(ai, ai)
6973
ai = __umul24(ai, ai)
7074
af = __powf(af, af)
71-
7275
end
7376

7477
! CHECK-LABEL: func.func @_QPdevsub() attributes {cuf.proc_attr = #cuf.cuda_proc<global>}
@@ -122,6 +125,10 @@ end
122125
! CHECK: %{{.*}} = fir.call @__nv_ddiv_rz(%{{.*}}, %{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f64, f64) -> f64
123126
! CHECK: %{{.*}} = fir.call @__nv_ddiv_ru(%{{.*}}, %{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f64, f64) -> f64
124127
! CHECK: %{{.*}} = fir.call @__nv_ddiv_rd(%{{.*}}, %{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f64, f64) -> f64
128+
! CHECK: %{{.*}} = fir.call @__nv_double2float_rn(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f64) -> f32
129+
! CHECK: %{{.*}} = fir.call @__nv_double2float_rz(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f64) -> f32
130+
! CHECK: %{{.*}} = fir.call @__nv_double2float_ru(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f64) -> f32
131+
! CHECK: %{{.*}} = fir.call @__nv_double2float_rd(%{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f64) -> f32
125132
! CHECK: %{{.*}} = fir.call @__nv_mul24(%{{.*}}, %{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32, i32) -> i32
126133
! CHECK: %{{.*}} = fir.call @__nv_umul24(%{{.*}}, %{{.*}}) proc_attrs<bind_c> fastmath<contract> : (i32, i32) -> i32
127134
! CHECK: %{{.*}} = fir.call @__nv_powf(%{{.*}}, %{{.*}}) proc_attrs<bind_c> fastmath<contract> : (f32, f32) -> f32

0 commit comments

Comments
 (0)