71 lines · plain
1! RUN: bbc -emit-fir %s -o - | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-KIND10%}%if flang-supports-f128-math %{,CHECK-KIND16%}2 3! CHECK-LABEL: func @_QPnorm2_test_4(4real(4) function norm2_test_4(a)5 real(4) :: a(:)6 ! CHECK: %[[c0:.*]] = arith.constant 0 : index7 ! CHECK: %[[a1:.*]] = fir.declare{{.*}}a"8 ! CHECK: %[[a:.*]] = fir.rebox %[[a1]]{{.*}}9 ! CHECK-DAG: %[[arr:.*]] = fir.convert %[[a]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none>10 ! CHECK: %[[dim:.*]] = fir.convert %[[c0]] : (index) -> i3211 norm2_test_4 = norm2(a)12 ! CHECK: %{{.*}} = fir.call @_FortranANorm2_4(%[[arr]], %{{.*}}, %{{.*}}, %[[dim]]) {{.*}} : (!fir.box<none>, !fir.ref<i8>, i32, i32) -> f3213end function norm2_test_414 15! CHECK-LABEL: func @_QPnorm2_test_8(16real(8) function norm2_test_8(a)17 real(8) :: a(:,:)18 norm2_test_8 = norm2(a)19 ! CHECK: fir.call @_FortranANorm2_8(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}} : (!fir.box<none>, !fir.ref<i8>, i32, i32) -> f6420end function norm2_test_821 22! CHECK-KIND10-LABEL: func @_QPnorm2_test_10(23function norm2_test_10(a)24 integer, parameter :: kind10 = merge(10, 4, selected_real_kind(p=18).eq.10)25 real(kind10) :: a(:,:,:), norm2_test_1026 norm2_test_10 = norm2(a)27 ! CHECK-KIND10: fir.call @_FortranANorm2_10(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}} : (!fir.box<none>, !fir.ref<i8>, i32, i32) -> f8028end function norm2_test_1029 30! CHECK-KIND16-LABEL: func @_QPnorm2_test_16(31function norm2_test_16(a)32 integer, parameter :: kind16 = merge(16, 4, selected_real_kind(p=33).eq.16)33 real(kind16) :: a(:,:,:), norm2_test_1634 norm2_test_16 = norm2(a)35 ! CHECK-KIND16: %{{.*}} = fir.call @_FortranANorm2_16(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}} : (!fir.box<none>, !fir.ref<i8>, i32, i32) -> f12836end function norm2_test_1637 38! CHECK-LABEL: func @_QPnorm2_test_dim_2(39subroutine norm2_test_dim_2(a,r)40 real :: a(:,:)41 real :: r(:)42 ! CHECK-DAG: %[[dim:.*]] = arith.constant 1 : i3243 ! CHECK-DAG: %[[a1:.*]] = fir.declare{{.*}}a"44 ! CHECK-DAG: %[[a:.*]] = fir.rebox %[[a1]]{{.*}}45 ! CHECK-DAG: %[[r:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?xf32>>>46 ! CHECK-DAG: %[[res:.*]] = fir.convert %[[r]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>) -> !fir.ref<!fir.box<none>>47 ! CHECK: %[[arr:.*]] = fir.convert %[[a]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>48 r = norm2(a,dim=1)49 ! CHECK: fir.call @_FortranANorm2Dim(%[[res]], %[[arr]], %[[dim]], %{{.*}}, %{{.*}}) {{.*}} : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32) -> ()50 ! CHECK-DAG: fir.freemem51end subroutine norm2_test_dim_252 53! CHECK-LABEL: func @_QPnorm2_test_dim_3(54subroutine norm2_test_dim_3(a,r)55 real :: a(:,:,:)56 real :: r(:,:)57 ! CHECK-DAG: %[[dim:.*]] = arith.constant 3 : i3258 r = norm2(a,dim=3)59 ! CHECK: fir.call @_FortranANorm2Dim(%{{.*}}, %{{.*}}, %[[dim]], %{{.*}}, %{{.*}}) {{.*}} : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32) -> ()60end subroutine norm2_test_dim_361 62! CHECK-LABEL: func @_QPnorm2_test_real16(63subroutine norm2_test_real16(a,r)64 integer, parameter :: kind16 = merge(16, 4, selected_real_kind(p=33).eq.16)65 real(kind16) :: a(:,:,:)66 real(kind16) :: r(:,:)67 r = norm2(a,dim=3)68 ! CHECK-KIND16: fir.call @_FortranANorm2DimReal16(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}} : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32) -> ()69 ! CHECK-KIND16: fir.freemem70end subroutine norm2_test_real1671