blob: 77682ad7139a782e00f791b513d64318e0b2cd30 [file] [log] [blame] [edit]
! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s
module mod1
type retf
real :: inf, sup, near, zero
end type retf
type retd
real(8) :: inf, sup, near, zero
end type retd
contains
attributes(global) subroutine fadd(c, a, b)
real(4) :: a, b
type (retf) :: c
c%near = __fadd_rn(a, b)
c%zero = __fadd_rz(a, b)
c%inf = __fadd_rd(a, b)
c%sup = __fadd_ru(a, b)
end subroutine
attributes(global) subroutine dadd(c, a, b)
real(8) :: a, b
type (retd) :: c
c%near = __dadd_rn(a, b)
c%zero = __dadd_rz(a, b)
c%inf = __dadd_rd(a, b)
c%sup = __dadd_ru(a, b)
end subroutine
attributes(global) subroutine fmul(c, a, b)
real(4) :: a, b
type (retf) :: c
c%near = __fmul_rn(a, b)
c%zero = __fmul_rz(a, b)
c%inf = __fmul_rd(a, b)
c%sup = __fmul_ru(a, b)
end subroutine
attributes(global) subroutine dmul(c, a, b)
real(8) :: a, b
type (retf) :: c
c%near = __dmul_rn(a, b)
c%zero = __dmul_rz(a, b)
c%inf = __dmul_rd(a, b)
c%sup = __dmul_ru(a, b)
end subroutine
attributes(global) subroutine fmaf(c, a, b)
real(4) :: a, b
type (retf) :: c
c%near = __fmaf_rn(a, b, b)
c%zero = __fmaf_rz(a, b, b)
c%inf = __fmaf_rd(a, b, b)
c%sup = __fmaf_ru(a, b, b)
end subroutine
attributes(global) subroutine fma(c, a, b)
real(8) :: a, b
type (retd) :: c
c%near = __fma_rn(a, b, b)
c%zero = __fma_rz(a, b, b)
c%inf = __fma_rd(a, b, b)
c%sup = __fma_ru(a, b, b)
end subroutine
attributes(global) subroutine frcp(c,a)
real(4) :: a
type (retf) :: c
c%near = __frcp_rn(a)
c%zero = __frcp_rz(a)
c%inf = __frcp_rd(a)
c%sup = __frcp_ru(a)
end subroutine
attributes(global) subroutine fsqrt(c,a)
real(4) :: a
type (retf) :: c
c%near = __fsqrt_rn(a)
c%zero = __fsqrt_rz(a)
c%inf = __fsqrt_rd(a)
c%sup = __fsqrt_ru(a)
end subroutine
attributes(global) subroutine fdiv(c, a, b)
real(4) :: a, b
type (retf) :: c
c%near = __fdiv_rn(a, b)
c%zero = __fdiv_rz(a, b)
c%inf = __fdiv_rd(a, b)
c%sup = __fdiv_ru(a, b)
end subroutine
attributes(global) subroutine testsincosf(c, a, b)
real(4) :: a, b, c
call sincos(a, b, c)
end subroutine
attributes(global) subroutine testsincosd(c, a, b)
real(8) :: a, b, c
call sincos(a, b, c)
end subroutine
attributes(global) subroutine testsincospif(c, a, b)
real(4) :: a, b, c
call sincospi(a, b, c)
end subroutine
attributes(global) subroutine testsincospid(c, a, b)
real(8) :: a, b, c
call sincospi(a, b, c)
end subroutine
attributes(global) subroutine testmulhi(c, a, b)
integer(4) :: a, b, c
c = __mulhi(a, b)
end subroutine
attributes(global) subroutine testumulhi(c, a, b)
integer(4) :: a, b, c
c = __umulhi(a, b)
end subroutine
attributes(global) subroutine testmul64hi(c, a, b)
integer(8) :: a, b, c
c = __mul64hi(a, b)
end subroutine
attributes(global) subroutine testumul64hi(c, a, b)
integer(8) :: a, b, c
c = __umul64hi(a, b)
end subroutine
end
! CHECK-LABEL: func.func @_QMmod1Pfadd
! CHECK: fir.call @__nv_fadd_rn
! CHECK: fir.call @__nv_fadd_rz
! CHECK: fir.call @__nv_fadd_rd
! CHECK: fir.call @__nv_fadd_ru
! CHECK-LABEL: func.func @_QMmod1Pdadd
! CHECK: fir.call @__nv_dadd_rn
! CHECK: fir.call @__nv_dadd_rz
! CHECK: fir.call @__nv_dadd_rd
! CHECK: fir.call @__nv_dadd_ru
! CHECK-LABEL: func.func @_QMmod1Pfmul
! CHECK: fir.call @__nv_fmul_rn
! CHECK: fir.call @__nv_fmul_rz
! CHECK: fir.call @__nv_fmul_rd
! CHECK: fir.call @__nv_fmul_ru
! CHECK-LABEL: func.func @_QMmod1Pdmul
! CHECK: fir.call @__nv_dmul_rn
! CHECK: fir.call @__nv_dmul_rz
! CHECK: fir.call @__nv_dmul_rd
! CHECK: fir.call @__nv_dmul_ru
! CHECK-LABEL: func.func @_QMmod1Pfmaf
! CHECK: fir.call @__nv_fmaf_rn
! CHECK: fir.call @__nv_fmaf_rz
! CHECK: fir.call @__nv_fmaf_rd
! CHECK: fir.call @__nv_fmaf_ru
! CHECK-LABEL: func.func @_QMmod1Pfma
! CHECK: fir.call @__nv_fma_rn
! CHECK: fir.call @__nv_fma_rz
! CHECK: fir.call @__nv_fma_rd
! CHECK: fir.call @__nv_fma_ru
! CHECK-LABEL: func.func @_QMmod1Pfrcp
! CHECK: fir.call @__nv_frcp_rn
! CHECK: fir.call @__nv_frcp_rz
! CHECK: fir.call @__nv_frcp_rd
! CHECK: fir.call @__nv_frcp_ru
! CHECK-LABEL: func.func @_QMmod1Pfsqrt
! CHECK: fir.call @__nv_fsqrt_rn
! CHECK: fir.call @__nv_fsqrt_rz
! CHECK: fir.call @__nv_fsqrt_rd
! CHECK: fir.call @__nv_fsqrt_ru
! CHECK-LABEL: func.func @_QMmod1Pfdiv
! CHECK: fir.call @__nv_fdiv_rn
! CHECK: fir.call @__nv_fdiv_rz
! CHECK: fir.call @__nv_fdiv_rd
! CHECK: fir.call @__nv_fdiv_ru
! CHECK-LABEL: func.func @_QMmod1Ptestsincosf
! CHECK: fir.call @__nv_sincosf
! CHECK-LABEL: func.func @_QMmod1Ptestsincosd
! CHECK: fir.call @__nv_sincos
! CHECK-LABEL: func.func @_QMmod1Ptestsincospif
! CHECK: fir.call @__nv_sincospif
! CHECK-LABEL: func.func @_QMmod1Ptestsincospid
! CHECK: fir.call @__nv_sincospi
! CHECK-LABEL: func.func @_QMmod1Ptestmulhi
! CHECK: fir.call @__nv_mulhi
! CHECK-LABEL: func.func @_QMmod1Ptestumulhi
! CHECK: fir.call @__nv_umulhi
! CHECK-LABEL: func.func @_QMmod1Ptestmul64hi
! CHECK: fir.call @__nv_mul64hi
! CHECK-LABEL: func.func @_QMmod1Ptestumul64hi
! CHECK: fir.call @__nv_umul64hi