1! RUN: bbc -emit-fir -outline-intrinsics %s -o - | FileCheck %s
2! RUN: %flang_fc1 -emit-fir -mllvm -outline-intrinsics %s -o - | FileCheck %s
3
4! CHECK-LABEL: log_testr
5! CHECK-SAME: (%[[AREF:.*]]: !fir.ref<f32> {{.*}}, %[[BREF:.*]]: !fir.ref<f32> {{.*}})
6subroutine log_testr(a, b)
7  real :: a, b
8! CHECK:  %[[A:.*]] = fir.load %[[AREF:.*]] : !fir.ref<f32>
9! CHECK:  %[[RES:.*]] = fir.call @fir.log.f32.f32(%[[A]]) : (f32) -> f32
10! CHECK:  fir.store %[[RES]] to %[[BREF]] : !fir.ref<f32>
11  b = log(a)
12end subroutine
13
14! CHECK-LABEL: log_testd
15! CHECK-SAME: (%[[AREF:.*]]: !fir.ref<f64> {{.*}}, %[[BREF:.*]]: !fir.ref<f64> {{.*}})
16subroutine log_testd(a, b)
17  real(kind=8) :: a, b
18! CHECK:  %[[A:.*]] = fir.load %[[AREF:.*]] : !fir.ref<f64>
19! CHECK:  %[[RES:.*]] = fir.call @fir.log.f64.f64(%[[A]]) : (f64) -> f64
20! CHECK:  fir.store %[[RES]] to %[[BREF]] : !fir.ref<f64>
21  b = log(a)
22end subroutine
23
24! CHECK-LABEL: log_testc
25! CHECK-SAME: (%[[AREF:.*]]: !fir.ref<!fir.complex<4>> {{.*}}, %[[BREF:.*]]: !fir.ref<!fir.complex<4>> {{.*}})
26subroutine log_testc(a, b)
27  complex :: a, b
28! CHECK:  %[[A:.*]] = fir.load %[[AREF:.*]] : !fir.ref<!fir.complex<4>>
29! CHECK:  %[[RES:.*]] = fir.call @fir.log.z4.z4(%[[A]]) : (!fir.complex<4>) -> !fir.complex<4>
30! CHECK:  fir.store %[[RES]] to %[[BREF]] : !fir.ref<!fir.complex<4>>
31  b = log(a)
32end subroutine
33
34! CHECK-LABEL: log_testcd
35! CHECK-SAME: (%[[AREF:.*]]: !fir.ref<!fir.complex<8>> {{.*}}, %[[BREF:.*]]: !fir.ref<!fir.complex<8>> {{.*}})
36subroutine log_testcd(a, b)
37  complex(kind=8) :: a, b
38! CHECK:  %[[A:.*]] = fir.load %[[AREF:.*]] : !fir.ref<!fir.complex<8>>
39! CHECK:  %[[RES:.*]] = fir.call @fir.log.z8.z8(%[[A]]) : (!fir.complex<8>) -> !fir.complex<8>
40! CHECK:  fir.store %[[RES]] to %[[BREF]] : !fir.ref<!fir.complex<8>>
41  b = log(a)
42end subroutine
43
44! CHECK-LABEL: log10_testr
45! CHECK-SAME: (%[[AREF:.*]]: !fir.ref<f32> {{.*}}, %[[BREF:.*]]: !fir.ref<f32> {{.*}})
46subroutine log10_testr(a, b)
47  real :: a, b
48! CHECK:  %[[A:.*]] = fir.load %[[AREF:.*]] : !fir.ref<f32>
49! CHECK:  %[[RES:.*]] = fir.call @fir.log10.f32.f32(%[[A]]) : (f32) -> f32
50! CHECK:  fir.store %[[RES]] to %[[BREF]] : !fir.ref<f32>
51  b = log10(a)
52end subroutine
53
54! CHECK-LABEL: log10_testd
55! CHECK-SAME: (%[[AREF:.*]]: !fir.ref<f64> {{.*}}, %[[BREF:.*]]: !fir.ref<f64> {{.*}})
56subroutine log10_testd(a, b)
57  real(kind=8) :: a, b
58! CHECK:  %[[A:.*]] = fir.load %[[AREF:.*]] : !fir.ref<f64>
59! CHECK:  %[[RES:.*]] = fir.call @fir.log10.f64.f64(%[[A]]) : (f64) -> f64
60! CHECK:  fir.store %[[RES]] to %[[BREF]] : !fir.ref<f64>
61  b = log10(a)
62end subroutine
63
64! CHECK-LABEL: private @fir.log.f32.f32
65! CHECK-SAME: (%[[ARG32_OUTLINE:.*]]: f32) -> f32
66! CHECK: %[[RESULT32_OUTLINE:.*]] = math.log %[[ARG32_OUTLINE]] : f32
67! CHECK: return %[[RESULT32_OUTLINE]] : f32
68
69! CHECK-LABEL: private @fir.log.f64.f64
70! CHECK-SAME: (%[[ARG64_OUTLINE:.*]]: f64) -> f64
71! CHECK: %[[RESULT64_OUTLINE:.*]] = math.log %[[ARG64_OUTLINE]] : f64
72! CHECK: return %[[RESULT64_OUTLINE]] : f64
73
74! CHECK-LABEL: private @fir.log.z4.z4
75! CHECK-SAME: (%[[ARG32_OUTLINE]]: !fir.complex<4>) -> !fir.complex<4>
76! CHECK: %[[RESULT32_OUTLINE]] = fir.call @__fc_log_1(%[[ARG32_OUTLINE]]) : (!fir.complex<4>) -> !fir.complex<4>
77! CHECK: return %[[RESULT32_OUTLINE]] : !fir.complex<4>
78
79! CHECK-LABEL: private @fir.log.z8.z8
80! CHECK-SAME: (%[[ARG64_OUTLINE]]: !fir.complex<8>) -> !fir.complex<8>
81! CHECK: %[[RESULT64_OUTLINE]] = fir.call @__fz_log_1(%[[ARG64_OUTLINE]]) : (!fir.complex<8>) -> !fir.complex<8>
82! CHECK: return %[[RESULT64_OUTLINE]] : !fir.complex<8>
83
84! CHECK-LABEL: private @fir.log10.f32.f32
85! CHECK-SAME: (%[[ARG32_OUTLINE:.*]]: f32) -> f32
86! CHECK: %[[RESULT32_OUTLINE:.*]] = math.log10 %[[ARG32_OUTLINE]] : f32
87! CHECK: return %[[RESULT32_OUTLINE]] : f32
88
89! CHECK-LABEL: private @fir.log10.f64.f64
90! CHECK-SAME: (%[[ARG64_OUTLINE:.*]]: f64) -> f64
91! CHECK: %[[RESULT64_OUTLINE:.*]] = math.log10 %[[ARG64_OUTLINE]] : f64
92! CHECK: return %[[RESULT64_OUTLINE]] : f64
93