xref: /llvm-project/flang/test/Lower/Intrinsics/scale.f90 (revision f35f863a88f83332bef9605ef4cfe4f05c066efb)
1! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
2
3! CHECK-LABEL: scale_test1
4subroutine scale_test1(x, i)
5    real :: x, res
6  ! CHECK: %[[res:.*]] = fir.alloca f32 {bindc_name = "res", uniq_name = "_QFscale_test1Eres"}
7  ! CHECK: %[[x:.*]] = fir.load %arg0 : !fir.ref<f32>
8    integer :: i
9  ! CHECK: %[[i0:.*]] = fir.load %arg1 : !fir.ref<i32>
10    res = scale(x, i)
11  ! CHECK: %[[i1:.*]] = fir.convert %[[i0]] : (i32) -> i64
12  ! CHECK: %[[tmp:.*]] = fir.call @_FortranAScale4(%[[x]], %[[i1]]) {{.*}}: (f32, i64) -> f32
13  ! CHECK: fir.store %[[tmp]] to %[[res]] : !fir.ref<f32>
14  end subroutine scale_test1
15
16  ! CHECK-LABEL: scale_test2
17  subroutine scale_test2(x, i)
18    real(kind=8) :: x, res
19  ! CHECK: %[[res:.*]] = fir.alloca f64 {bindc_name = "res", uniq_name = "_QFscale_test2Eres"}
20  ! CHECK: %[[x:.*]] = fir.load %arg0 : !fir.ref<f64>
21    integer :: i
22  ! CHECK: %[[i0:.*]] = fir.load %arg1 : !fir.ref<i32>
23    res = scale(x, i)
24  ! CHECK: %[[i1:.*]] = fir.convert %[[i0]] : (i32) -> i64
25  ! CHECK: %[[tmp:.*]] = fir.call @_FortranAScale8(%[[x]], %[[i1]]) {{.*}}: (f64, i64) -> f64
26  ! CHECK: fir.store %[[tmp]] to %[[res]] : !fir.ref<f64>
27  end subroutine scale_test2
28
29  ! CHECK-LABEL: scale_test3
30  subroutine scale_test3(x, i)
31    real(kind=10) :: x, res
32  ! CHECK: %[[res:.*]] = fir.alloca f80 {bindc_name = "res", uniq_name = "_QFscale_test3Eres"}
33  ! CHECK: %[[x:.*]] = fir.load %arg0 : !fir.ref<f80>
34    integer :: i
35  ! CHECK: %[[i0:.*]] = fir.load %arg1 : !fir.ref<i32>
36    res = scale(x, i)
37  ! CHECK: %[[i1:.*]] = fir.convert %[[i0]] : (i32) -> i64
38  ! CHECK: %[[tmp:.*]] = fir.call @_FortranAScale10(%[[x]], %[[i1]]) {{.*}}: (f80, i64) -> f80
39  ! CHECK: fir.store %[[tmp]] to %[[res]] : !fir.ref<f80>
40  end subroutine scale_test3
41
42  ! CHECK-LABEL: scale_test4
43  subroutine scale_test4(x, i)
44    real(kind=16) :: x, res
45  ! CHECK: %[[res:.*]] = fir.alloca f128 {bindc_name = "res", uniq_name = "_QFscale_test4Eres"}
46  ! CHECK: %[[x:.*]] = fir.load %arg0 : !fir.ref<f128>
47    integer :: i
48  ! CHECK: %[[i0:.*]] = fir.load %arg1 : !fir.ref<i32>
49    res = scale(x, i)
50  ! CHECK: %[[i1:.*]] = fir.convert %[[i0]] : (i32) -> i64
51  ! CHECK: %[[tmp:.*]] = fir.call @_FortranAScale16(%[[x]], %[[i1]]) {{.*}}: (f128, i64) -> f128
52  ! CHECK: fir.store %[[tmp]] to %[[res]] : !fir.ref<f128>
53  end subroutine scale_test4
54