1! RUN: bbc -emit-fir -outline-intrinsics %s -o - | FileCheck %s --check-prefixes="CHECK,CMPLX-PRECISE" 2! RUN: bbc --math-runtime=precise -emit-fir -outline-intrinsics %s -o - | FileCheck %s --check-prefixes="CMPLX-PRECISE" 3! RUN: %flang_fc1 -emit-fir -mllvm -outline-intrinsics %s -o - | FileCheck %s 4! RUN: %flang_fc1 -fapprox-func -emit-fir -mllvm -outline-intrinsics %s -o - | FileCheck %s --check-prefixes="CMPLX-FAST" 5 6! CHECK-LABEL: tan_testr 7subroutine tan_testr(a, b) 8 real :: a, b 9! CHECK: fir.call @fir.tan.contract.f32.f32 10 b = tan(a) 11end subroutine 12 13! CHECK-LABEL: tan_testd 14subroutine tan_testd(a, b) 15 real(kind=8) :: a, b 16! CHECK: fir.call @fir.tan.contract.f64.f64 17 b = tan(a) 18end subroutine 19 20! CHECK-LABEL: tan_testc 21subroutine tan_testc(z) 22 complex :: z 23! CHECK: fir.call @fir.tan.contract.z32.z32 24 z = tan(z) 25end subroutine 26 27! CHECK-LABEL: tan_testcd 28subroutine tan_testcd(z) 29 complex(kind=8) :: z 30! CHECK: fir.call @fir.tan.contract.z64.z64 31 z = tan(z) 32end subroutine 33 34! CHECK-LABEL: atan_testr 35subroutine atan_testr(a, b) 36 real :: a, b 37! CHECK: fir.call @fir.atan.contract.f32.f32 38 b = atan(a) 39end subroutine 40 41! CHECK-LABEL: atan_testd 42subroutine atan_testd(a, b) 43 real(kind=8) :: a, b 44! CHECK: fir.call @fir.atan.contract.f64.f64 45 b = atan(a) 46end subroutine 47 48! CHECK-LABEL: atan_testc 49subroutine atan_testc(z) 50 complex :: z 51! CHECK: fir.call @fir.atan.contract.z32.z32 52 z = atan(z) 53end subroutine 54 55! CHECK-LABEL: atan_testcd 56subroutine atan_testcd(z) 57 complex(kind=8) :: z 58! CHECK: fir.call @fir.atan.contract.z64.z64 59 z = atan(z) 60end subroutine 61 62! CHECK-LABEL: cos_testr 63subroutine cos_testr(a, b) 64 real :: a, b 65! CHECK: fir.call @fir.cos.contract.f32.f32 66 b = cos(a) 67end subroutine 68 69! CHECK-LABEL: cos_testd 70subroutine cos_testd(a, b) 71 real(kind=8) :: a, b 72! CHECK: fir.call @fir.cos.contract.f64.f64 73 b = cos(a) 74end subroutine 75 76! CHECK-LABEL: cos_testc 77subroutine cos_testc(z) 78 complex :: z 79! CHECK: fir.call @fir.cos.contract.z32.z32 80 z = cos(z) 81end subroutine 82 83! CHECK-LABEL: cos_testcd 84subroutine cos_testcd(z) 85 complex(kind=8) :: z 86! CHECK: fir.call @fir.cos.contract.z64.z64 87 z = cos(z) 88end subroutine 89 90! CHECK-LABEL: acos_testr 91subroutine acos_testr(a, b) 92 real :: a, b 93! CHECK: fir.call @fir.acos.contract.f32.f32 94 b = acos(a) 95end subroutine 96 97! CHECK-LABEL: acos_testd 98subroutine acos_testd(a, b) 99 real(kind=8) :: a, b 100! CHECK: fir.call @fir.acos.contract.f64.f64 101 b = acos(a) 102end subroutine 103 104! CHECK-LABEL: acos_testc 105subroutine acos_testc(z) 106 complex :: z 107! CHECK: fir.call @fir.acos.contract.z32.z32 108 z = acos(z) 109end subroutine 110 111! CHECK-LABEL: acos_testcd 112subroutine acos_testcd(z) 113 complex(kind=8) :: z 114! CHECK: fir.call @fir.acos.contract.z64.z64 115 z = acos(z) 116end subroutine 117 118! CHECK-LABEL: cosh_testr 119subroutine cosh_testr(a, b) 120 real :: a, b 121! CHECK: fir.call @fir.cosh.contract.f32.f32 122 b = cosh(a) 123end subroutine 124 125! CHECK-LABEL: cosh_testd 126subroutine cosh_testd(a, b) 127 real(kind=8) :: a, b 128! CHECK: fir.call @fir.cosh.contract.f64.f64 129 b = cosh(a) 130end subroutine 131 132! CHECK-LABEL: cosh_testc 133subroutine cosh_testc(z) 134 complex :: z 135! CHECK: fir.call @fir.cosh.contract.z32.z32 136 z = cosh(z) 137end subroutine 138 139! CHECK-LABEL: cosh_testcd 140subroutine cosh_testcd(z) 141 complex(kind=8) :: z 142! CHECK: fir.call @fir.cosh.contract.z64.z64 143 z = cosh(z) 144end subroutine 145 146! CHECK-LABEL: sin_testr 147subroutine sin_testr(a, b) 148 real :: a, b 149! CHECK: fir.call @fir.sin.contract.f32.f32 150 b = sin(a) 151end subroutine 152 153! CHECK-LABEL: sin_testd 154subroutine sin_testd(a, b) 155 real(kind=8) :: a, b 156! CHECK: fir.call @fir.sin.contract.f64.f64 157 b = sin(a) 158end subroutine 159 160! CHECK-LABEL: sin_testc 161subroutine sin_testc(z) 162 complex :: z 163! CHECK: fir.call @fir.sin.contract.z32.z32 164 z = sin(z) 165end subroutine 166 167! CHECK-LABEL: sin_testcd 168subroutine sin_testcd(z) 169 complex(kind=8) :: z 170! CHECK: fir.call @fir.sin.contract.z64.z64 171 z = sin(z) 172end subroutine 173 174! CHECK-LABEL: sinh_testr 175subroutine sinh_testr(a, b) 176 real :: a, b 177! CHECK: fir.call @fir.sinh.contract.f32.f32 178 b = sinh(a) 179end subroutine 180 181! CHECK-LABEL: sinh_testd 182subroutine sinh_testd(a, b) 183 real(kind=8) :: a, b 184! CHECK: fir.call @fir.sinh.contract.f64.f64 185 b = sinh(a) 186end subroutine 187 188! CHECK-LABEL: sinh_testc 189subroutine sinh_testc(z) 190 complex :: z 191! CHECK: fir.call @fir.sinh.contract.z32.z32 192 z = sinh(z) 193end subroutine 194 195! CHECK-LABEL: sinh_testcd 196subroutine sinh_testcd(z) 197 complex(kind=8) :: z 198! CHECK: fir.call @fir.sinh.contract.z64.z64 199 z = sinh(z) 200end subroutine 201 202! CHECK-LABEL: @fir.tan.contract.f32.f32 203! CHECK: math.tan %{{.*}} : f32 204 205! CHECK-LABEL: @fir.tan.contract.f64.f64 206! CHECK: math.tan %{{.*}} : f64 207 208! CHECK-LABEL: @fir.tan.contract.z32.z32 209! CMPLX-FAST: complex.tan %{{.*}} : complex<f32> 210! CMPLX-PRECISE: fir.call @ctanf 211 212! CHECK-LABEL: @fir.tan.contract.z64.z64 213! CMPLX-FAST: complex.tan %{{.*}} : complex<f64> 214! CMPLX-PRECISE: fir.call @ctan 215 216! CHECK-LABEL: @fir.atan.contract.f32.f32 217! CHECK: math.atan %{{.*}} : f32 218 219! CHECK-LABEL: @fir.atan.contract.f64.f64 220! CHECK: math.atan %{{.*}} : f64 221 222! CHECK-LABEL: @fir.atan.contract.z32.z32 223! CHECK: fir.call @catanf 224 225! CHECK-LABEL: @fir.atan.contract.z64.z64 226! CHECK: fir.call @catan 227 228! CHECK-LABEL: @fir.cos.contract.f32.f32 229! CHECK: math.cos %{{.*}} : f32 230 231! CHECK-LABEL: @fir.cos.contract.f64.f64 232! CHECK: math.cos %{{.*}} : f64 233 234! CHECK-LABEL: @fir.cos.contract.z32.z32 235! CMPLX-FAST: complex.cos %{{.*}} : complex<f32> 236! CMPLX-PRECISE: fir.call @ccosf 237 238! CHECK-LABEL: @fir.cos.contract.z64.z64 239! CMPLX-FAST: complex.cos %{{.*}} : complex<f64> 240! CMPLX-PRECISE: fir.call @ccos 241 242! CHECK-LABEL: @fir.acos.contract.f32.f32 243! CHECK: math.acos {{.*}} : f32 244 245! CHECK-LABEL: @fir.acos.contract.f64.f64 246! CHECK: math.acos {{.*}} : f64 247 248! CHECK-LABEL: @fir.acos.contract.z32.z32 249! CHECK: fir.call @cacosf 250 251! CHECK-LABEL: @fir.acos.contract.z64.z64 252! CHECK: fir.call @cacos 253 254! CHECK-LABEL: @fir.cosh.contract.f32.f32 255! CHECK: math.cosh {{.*}} : f32 256 257! CHECK-LABEL: @fir.cosh.contract.f64.f64 258! CHECK: math.cosh {{.*}} : f64 259 260! CHECK-LABEL: @fir.cosh.contract.z32.z32 261! CHECK: fir.call @ccoshf 262 263! CHECK-LABEL: @fir.cosh.contract.z64.z64 264! CHECK: fir.call @ccosh 265 266! CHECK-LABEL: @fir.sin.contract.f32.f32 267! CHECK: math.sin %{{.*}} : f32 268 269! CHECK-LABEL: @fir.sin.contract.f64.f64 270! CHECK: math.sin %{{.*}} : f64 271 272! CHECK-LABEL: @fir.sin.contract.z32.z32 273! CMPLX-FAST: complex.sin %{{.*}} : complex<f32> 274! CMPLX-PRECISE: fir.call @csinf 275 276! CHECK-LABEL: @fir.sin.contract.z64.z64 277! CMPLX-FAST: complex.sin %{{.*}} : complex<f64> 278! CMPLX-PRECISE: fir.call @csin 279 280! CHECK-LABEL: @fir.sinh.contract.f32.f32 281! CHECK: fir.call {{.*}}sinh 282 283! CHECK-LABEL: @fir.sinh.contract.f64.f64 284! CHECK: fir.call {{.*}}sinh 285 286! CHECK-LABEL: @fir.sinh.contract.z32.z32 287! CHECK: fir.call @csinhf 288 289! CHECK-LABEL: @fir.sinh.contract.z64.z64 290! CHECK: fir.call @csinh 291