! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s ! CHECK-LABEL: func @_QPminval_test( ! CHECK-SAME: %[[arg0:.*]]: !fir.box>{{.*}}) -> i32 integer function minval_test(a) integer :: a(:) ! CHECK: %[[a:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFminval_testEa"} : (!fir.box>, !fir.dscope) -> (!fir.box>, !fir.box>) ! CHECK: %[[res:.*]] = hlfir.minval %[[a]]#0 {{.*}} : (!fir.box>) -> i32 minval_test = minval(a) end function ! CHECK-LABEL: func @_QPminval_test2( ! CHECK-SAME: %[[arg0:.*]]: !fir.ref>{{.*}}, %[[arg1:.*]]: index{{.*}}, %[[arg2:.*]]: !fir.box>>{{.*}}) -> !fir.boxchar<1> character function minval_test2(a) character :: a(:) ! CHECK: %[[a:.*]]:2 = hlfir.declare %[[arg2]] typeparams {{.*}} {uniq_name = "_QFminval_test2Ea"} : (!fir.box>>, index, !fir.dscope) -> (!fir.box>>, !fir.box>>) ! CHECK: %[[res:.*]] = hlfir.minval %[[a]]#0 {{.*}} : (!fir.box>>) -> !hlfir.expr> minval_test2 = minval(a) end function ! CHECK-LABEL: func @_QPminval_test3( ! CHECK-SAME: %[[arg0:.*]]: !fir.box>{{.*}}, %[[arg1:.*]]: !fir.box>{{.*}}) subroutine minval_test3(a,r) integer :: a(:,:) integer :: r(:) ! CHECK: %[[a:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFminval_test3Ea"} : (!fir.box>, !fir.dscope) -> (!fir.box>, !fir.box>) ! CHECK: %[[r:.*]]:2 = hlfir.declare %[[arg1]] {{.*}} {uniq_name = "_QFminval_test3Er"} : (!fir.box>, !fir.dscope) -> (!fir.box>, !fir.box>) ! CHECK: %[[c2:.*]] = arith.constant 2 : i32 ! CHECK: %[[res:.*]] = hlfir.minval %[[a]]#0 dim %[[c2]] {{.*}} : (!fir.box>, i32) -> !hlfir.expr ! CHECK: hlfir.assign %[[res]] to %[[r]]#0 : !hlfir.expr, !fir.box> ! CHECK: hlfir.destroy %[[res]] : !hlfir.expr r = minval(a,dim=2) end subroutine ! CHECK-LABEL: func @_QPtest_minval_optional_scalar_mask( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref> subroutine test_minval_optional_scalar_mask(mask, array) integer :: array(:) logical, optional :: mask print *, minval(array, mask) ! CHECK: %[[mask_decl:.*]]:2 = hlfir.declare %[[VAL_0]] {{.*}} {fortran_attrs = #fir.var_attrs, uniq_name = "_QFtest_minval_optional_scalar_maskEmask"} : (!fir.ref>, !fir.dscope) -> (!fir.ref>, !fir.ref>) ! CHECK: %[[present:.*]] = fir.is_present %[[mask_decl]]#0 : (!fir.ref>) -> i1 ! CHECK: %[[box:.*]] = fir.embox %[[mask_decl]]#0 : (!fir.ref>) -> !fir.box> ! CHECK: %[[absent:.*]] = fir.absent !fir.box> ! CHECK: %[[mask:.*]] = arith.select %[[present]], %[[box]], %[[absent]] : !fir.box> ! CHECK: hlfir.minval {{.*}} mask %[[mask]] {{.*}} : (!fir.box>, !fir.box>) -> i32 end subroutine ! CHECK-LABEL: func @_QPtest_minval_optional_array_mask( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.box>> subroutine test_minval_optional_array_mask(mask, array) integer :: array(:) logical, optional :: mask(:) print *, minval(array, mask) ! CHECK: %[[mask_decl:.*]]:2 = hlfir.declare %[[VAL_0]] {{.*}} {fortran_attrs = #fir.var_attrs, uniq_name = "_QFtest_minval_optional_array_maskEmask"} : (!fir.box>>, !fir.dscope) -> (!fir.box>>, !fir.box>>) ! CHECK: %[[present:.*]] = fir.is_present %[[mask_decl]]#0 : (!fir.box>>) -> i1 ! CHECK: %[[absent:.*]] = fir.absent !fir.box>> ! CHECK: %[[mask:.*]] = arith.select %[[present]], %[[mask_decl]]#1, %[[absent]] : !fir.box>> ! CHECK: hlfir.minval {{.*}} mask %[[mask]] {{.*}} : (!fir.box>, !fir.box>>) -> i32 end subroutine