| ! 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 |