xref: /llvm-project/flang/test/Lower/trigonometric-intrinsics.f90 (revision f61d93ffc456d94df729529642ea180b40ef9d19)
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