[flang-commits] [flang] 88f8a2b - [flang][NFC] Converted five tests from old lowering to new lowering (part 34) (#187175)
via flang-commits
flang-commits at lists.llvm.org
Wed Mar 18 08:12:25 PDT 2026
Author: Eugene Epshteyn
Date: 2026-03-18T11:12:19-04:00
New Revision: 88f8a2bdb25b7aef4b02df33b859815b7b13216f
URL: https://github.com/llvm/llvm-project/commit/88f8a2bdb25b7aef4b02df33b859815b7b13216f
DIFF: https://github.com/llvm/llvm-project/commit/88f8a2bdb25b7aef4b02df33b859815b7b13216f.diff
LOG: [flang][NFC] Converted five tests from old lowering to new lowering (part 34) (#187175)
Tests converted from test/Lower/Intrinsics: is_iostat_value.f90,
ishft.f90, ishftc.f90, lbound.f90, leadz.f90
Added:
Modified:
flang/test/Lower/Intrinsics/is_iostat_value.f90
flang/test/Lower/Intrinsics/ishft.f90
flang/test/Lower/Intrinsics/ishftc.f90
flang/test/Lower/Intrinsics/lbound.f90
flang/test/Lower/Intrinsics/leadz.f90
Removed:
################################################################################
diff --git a/flang/test/Lower/Intrinsics/is_iostat_value.f90 b/flang/test/Lower/Intrinsics/is_iostat_value.f90
index 2b4a94a555b9a..b99ed694a678e 100644
--- a/flang/test/Lower/Intrinsics/is_iostat_value.f90
+++ b/flang/test/Lower/Intrinsics/is_iostat_value.f90
@@ -1,21 +1,21 @@
-! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir -o - %s | FileCheck %s
! CHECK-LABEL: func @_QQmain
- ! CHECK: %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFEi"}
+ ! CHECK: %[[V_0:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFEi"}
! CHECK: fir.do_loop
do i=-20,20
- ! CHECK: %[[V_5:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>
- ! CHECK: %[[V_6:[0-9]+]] = arith.cmpi eq, %[[V_5]], %c-1{{.*}} : i32
+ ! CHECK: %[[V_5:.*]] = fir.load %[[V_0]]#0 : !fir.ref<i32>
+ ! CHECK: %[[V_6:.*]] = arith.cmpi eq, %[[V_5]], %c-1{{.*}} : i32
! CHECK: fir.if %[[V_6]] {
- ! CHECK: %[[V_20:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>
- ! CHECK: %[[V_21:[0-9]+]] = fir.call @_FortranAioOutputInteger32(%{{.*}} %[[V_20]]) fastmath<contract> : (!fir.ref<i8>, i32) -> i1
+ ! CHECK: %[[V_20:.*]] = fir.load %[[V_0]]#0 : !fir.ref<i32>
+ ! CHECK: %[[V_21:.*]] = fir.call @_FortranAioOutputInteger32(%{{.*}}, %[[V_20]]) fastmath<contract> : (!fir.ref<i8>, i32) -> i1
! CHECK: }
if (is_iostat_end(i)) print*, "iostat_end =", i
- ! CHECK: %[[V_7:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>
- ! CHECK: %[[V_8:[0-9]+]] = arith.cmpi eq, %[[V_7]], %c-2{{.*}} : i32
+ ! CHECK: %[[V_7:.*]] = fir.load %[[V_0]]#0 : !fir.ref<i32>
+ ! CHECK: %[[V_8:.*]] = arith.cmpi eq, %[[V_7]], %c-2{{.*}} : i32
! CHECK: fir.if %[[V_8]] {
- ! CHECK: %[[V_20:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>
- ! CHECK: %[[V_21:[0-9]+]] = fir.call @_FortranAioOutputInteger32(%{{.*}} %[[V_20]]) fastmath<contract> : (!fir.ref<i8>, i32) -> i1
+ ! CHECK: %[[V_20:.*]] = fir.load %[[V_0]]#0 : !fir.ref<i32>
+ ! CHECK: %[[V_21:.*]] = fir.call @_FortranAioOutputInteger32(%{{.*}}, %[[V_20]]) fastmath<contract> : (!fir.ref<i8>, i32) -> i1
! CHECK: }
if (is_iostat_eor(i)) print*, "iostat_eor =", i
! CHECK: }
diff --git a/flang/test/Lower/Intrinsics/ishft.f90 b/flang/test/Lower/Intrinsics/ishft.f90
index d25bdd86b192b..38dbf49e4c0a8 100644
--- a/flang/test/Lower/Intrinsics/ishft.f90
+++ b/flang/test/Lower/Intrinsics/ishft.f90
@@ -1,24 +1,28 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
-! CHECK-LABEL: ishft_test
+! CHECK-LABEL: func.func @_QPishft_test(
+! CHECK-SAME: %[[I_ARG:.*]]: !fir.ref<i32> {fir.bindc_name = "i"},
+! CHECK-SAME: %[[J_ARG:.*]]: !fir.ref<i32> {fir.bindc_name = "j"}) -> i32 {
function ishft_test(i, j)
- ! CHECK-DAG: %[[result:.*]] = fir.alloca i32 {bindc_name = "ishft_test"
- ! CHECK-DAG: %[[i:.*]] = fir.load %arg0 : !fir.ref<i32>
- ! CHECK-DAG: %[[j:.*]] = fir.load %arg1 : !fir.ref<i32>
- ! CHECK-DAG: %[[VAL_5:.*]] = arith.constant 32 : i32
- ! CHECK-DAG: %[[VAL_6:.*]] = arith.constant 0 : i32
- ! CHECK-DAG: %[[VAL_7:.*]] = arith.constant 31 : i32
- ! CHECK: %[[VAL_8:.*]] = arith.shrsi %[[j]], %[[VAL_7]] : i32
- ! CHECK: %[[VAL_9:.*]] = arith.xori %[[j]], %[[VAL_8]] : i32
- ! CHECK: %[[VAL_10:.*]] = arith.subi %[[VAL_9]], %[[VAL_8]] : i32
- ! CHECK: %[[VAL_11:.*]] = arith.shli %[[i]], %[[VAL_10]] : i32
- ! CHECK: %[[VAL_12:.*]] = arith.shrui %[[i]], %[[VAL_10]] : i32
- ! CHECK: %[[VAL_13:.*]] = arith.cmpi sge, %[[VAL_10]], %[[VAL_5]] : i32
- ! CHECK: %[[VAL_14:.*]] = arith.cmpi slt, %[[j]], %[[VAL_6]] : i32
- ! CHECK: %[[VAL_15:.*]] = arith.select %[[VAL_14]], %[[VAL_12]], %[[VAL_11]] : i32
- ! CHECK: %[[VAL_16:.*]] = arith.select %[[VAL_13]], %[[VAL_6]], %[[VAL_15]] : i32
- ! CHECK: fir.store %[[VAL_16]] to %[[result]] : !fir.ref<i32>
- ! CHECK: %[[VAL_17:.*]] = fir.load %[[result]] : !fir.ref<i32>
- ! CHECK: return %[[VAL_17]] : i32
- ishft_test = ishft(i, j)
- end
+! CHECK-DAG: %[[I:.*]]:2 = hlfir.declare %[[I_ARG]]
+! CHECK-DAG: %[[result:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFishft_testEishft_test"}
+! CHECK-DAG: %[[J:.*]]:2 = hlfir.declare %[[J_ARG]]
+! CHECK-DAG: %[[iVAL:.*]] = fir.load %[[I]]#0 : !fir.ref<i32>
+! CHECK-DAG: %[[jVAL:.*]] = fir.load %[[J]]#0 : !fir.ref<i32>
+! CHECK-DAG: %[[VAL_5:.*]] = arith.constant 32 : i32
+! CHECK-DAG: %[[VAL_6:.*]] = arith.constant 0 : i32
+! CHECK-DAG: %[[VAL_7:.*]] = arith.constant 31 : i32
+! CHECK: %[[VAL_8:.*]] = arith.shrsi %[[jVAL]], %[[VAL_7]] : i32
+! CHECK: %[[VAL_9:.*]] = arith.xori %[[jVAL]], %[[VAL_8]] : i32
+! CHECK: %[[VAL_10:.*]] = arith.subi %[[VAL_9]], %[[VAL_8]] : i32
+! CHECK: %[[VAL_11:.*]] = arith.shli %[[iVAL]], %[[VAL_10]] : i32
+! CHECK: %[[VAL_12:.*]] = arith.shrui %[[iVAL]], %[[VAL_10]] : i32
+! CHECK: %[[VAL_13:.*]] = arith.cmpi sge, %[[VAL_10]], %[[VAL_5]] : i32
+! CHECK: %[[VAL_14:.*]] = arith.cmpi slt, %[[jVAL]], %[[VAL_6]] : i32
+! CHECK: %[[VAL_15:.*]] = arith.select %[[VAL_14]], %[[VAL_12]], %[[VAL_11]] : i32
+! CHECK: %[[VAL_16:.*]] = arith.select %[[VAL_13]], %[[VAL_6]], %[[VAL_15]] : i32
+! CHECK: hlfir.assign %[[VAL_16]] to %[[result]]#0 : i32, !fir.ref<i32>
+! CHECK: %[[VAL_17:.*]] = fir.load %[[result]]#0 : !fir.ref<i32>
+! CHECK: return %[[VAL_17]] : i32
+ ishft_test = ishft(i, j)
+end
diff --git a/flang/test/Lower/Intrinsics/ishftc.f90 b/flang/test/Lower/Intrinsics/ishftc.f90
index f13d9c06a8197..352eabcc6cf2a 100644
--- a/flang/test/Lower/Intrinsics/ishftc.f90
+++ b/flang/test/Lower/Intrinsics/ishftc.f90
@@ -1,50 +1,56 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
-! CHECK-LABEL: ishftc_test
+! CHECK-LABEL: func.func @_QPishftc_test(
+! CHECK-SAME: %[[I_ARG:.*]]: !fir.ref<i32> {fir.bindc_name = "i"},
+! CHECK-SAME: %[[J_ARG:.*]]: !fir.ref<i32> {fir.bindc_name = "j"},
+! CHECK-SAME: %[[K_ARG:.*]]: !fir.ref<i32> {fir.bindc_name = "k"}) -> i32 {
function ishftc_test(i, j, k)
- ! CHECK-DAG: %[[result:.*]] = fir.alloca i32 {bindc_name = "ishftc_test"
- ! CHECK-DAG: %[[i:.*]] = fir.load %arg0 : !fir.ref<i32>
- ! CHECK-DAG: %[[j:.*]] = fir.load %arg1 : !fir.ref<i32>
- ! CHECK-DAG: %[[k:.*]] = fir.load %arg2 : !fir.ref<i32>
- ! CHECK-DAG: %[[VAL_7:.*]] = arith.constant 32 : i32
- ! CHECK-DAG: %[[VAL_8:.*]] = arith.constant 0 : i32
- ! CHECK-DAG: %[[VAL_9:.*]] = arith.constant -1 : i32
- ! CHECK-DAG: %[[VAL_10:.*]] = arith.constant 31 : i32
- ! CHECK: %[[VAL_11:.*]] = arith.shrsi %[[j]], %[[VAL_10]] : i32
- ! CHECK: %[[VAL_12:.*]] = arith.xori %[[j]], %[[VAL_11]] : i32
- ! CHECK: %[[VAL_13:.*]] = arith.subi %[[VAL_12]], %[[VAL_11]] : i32
- ! CHECK: %[[VAL_14:.*]] = arith.subi %[[k]], %[[VAL_13]] : i32
- ! CHECK: %[[VAL_15:.*]] = arith.cmpi eq, %[[j]], %[[VAL_8]] : i32
- ! CHECK: %[[VAL_16:.*]] = arith.cmpi eq, %[[VAL_13]], %[[k]] : i32
- ! CHECK: %[[VAL_17:.*]] = arith.ori %[[VAL_15]], %[[VAL_16]] : i1
- ! CHECK: %[[VAL_18:.*]] = arith.cmpi sgt, %[[j]], %[[VAL_8]] : i32
- ! CHECK: %[[VAL_19:.*]] = arith.select %[[VAL_18]], %[[VAL_13]], %[[VAL_14]] : i32
- ! CHECK: %[[VAL_20:.*]] = arith.select %[[VAL_18]], %[[VAL_14]], %[[VAL_13]] : i32
- ! CHECK: %[[VAL_21:.*]] = arith.cmpi ne, %[[k]], %[[VAL_7]] : i32
- ! CHECK: %[[VAL_22:.*]] = arith.shrui %[[i]], %[[k]] : i32
- ! CHECK: %[[VAL_23:.*]] = arith.shli %[[VAL_22]], %[[k]] : i32
- ! CHECK: %[[VAL_24:.*]] = arith.select %[[VAL_21]], %[[VAL_23]], %[[VAL_8]] : i32
- ! CHECK: %[[VAL_25:.*]] = arith.subi %[[VAL_7]], %[[VAL_19]] : i32
- ! CHECK: %[[VAL_26:.*]] = arith.shrui %[[VAL_9]], %[[VAL_25]] : i32
- ! CHECK: %[[VAL_27:.*]] = arith.shrui %[[i]], %[[VAL_20]] : i32
- ! CHECK: %[[VAL_28:.*]] = arith.andi %[[VAL_27]], %[[VAL_26]] : i32
- ! CHECK: %[[VAL_29:.*]] = arith.subi %[[VAL_7]], %[[VAL_20]] : i32
- ! CHECK: %[[VAL_30:.*]] = arith.shrui %[[VAL_9]], %[[VAL_29]] : i32
- ! CHECK: %[[VAL_31:.*]] = arith.andi %[[i]], %[[VAL_30]] : i32
- ! CHECK: %[[VAL_32:.*]] = arith.shli %[[VAL_31]], %[[VAL_19]] : i32
- ! CHECK: %[[VAL_33:.*]] = arith.ori %[[VAL_24]], %[[VAL_28]] : i32
- ! CHECK: %[[VAL_34:.*]] = arith.ori %[[VAL_33]], %[[VAL_32]] : i32
- ! CHECK: %[[VAL_35:.*]] = arith.select %[[VAL_17]], %[[i]], %[[VAL_34]] : i32
- ! CHECK: fir.store %[[VAL_35]] to %[[result]] : !fir.ref<i32>
- ! CHECK: %[[VAL_36:.*]] = fir.load %[[result]] : !fir.ref<i32>
- ! CHECK: return %[[VAL_36]] : i32
- ishftc_test = ishftc(i, j, k)
- end
+! CHECK-DAG: %[[I:.*]]:2 = hlfir.declare %[[I_ARG]]
+! CHECK-DAG: %[[result:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFishftc_testEishftc_test"}
+! CHECK-DAG: %[[J:.*]]:2 = hlfir.declare %[[J_ARG]]
+! CHECK-DAG: %[[K:.*]]:2 = hlfir.declare %[[K_ARG]]
+! CHECK-DAG: %[[i:.*]] = fir.load %[[I]]#0 : !fir.ref<i32>
+! CHECK-DAG: %[[j:.*]] = fir.load %[[J]]#0 : !fir.ref<i32>
+! CHECK-DAG: %[[k:.*]] = fir.load %[[K]]#0 : !fir.ref<i32>
+! CHECK-DAG: %[[VAL_7:.*]] = arith.constant 32 : i32
+! CHECK-DAG: %[[VAL_8:.*]] = arith.constant 0 : i32
+! CHECK-DAG: %[[VAL_9:.*]] = arith.constant -1 : i32
+! CHECK-DAG: %[[VAL_10:.*]] = arith.constant 31 : i32
+! CHECK: %[[VAL_11:.*]] = arith.shrsi %[[j]], %[[VAL_10]] : i32
+! CHECK: %[[VAL_12:.*]] = arith.xori %[[j]], %[[VAL_11]] : i32
+! CHECK: %[[VAL_13:.*]] = arith.subi %[[VAL_12]], %[[VAL_11]] : i32
+! CHECK: %[[VAL_14:.*]] = arith.subi %[[k]], %[[VAL_13]] : i32
+! CHECK: %[[VAL_15:.*]] = arith.cmpi eq, %[[j]], %[[VAL_8]] : i32
+! CHECK: %[[VAL_16:.*]] = arith.cmpi eq, %[[VAL_13]], %[[k]] : i32
+! CHECK: %[[VAL_17:.*]] = arith.ori %[[VAL_15]], %[[VAL_16]] : i1
+! CHECK: %[[VAL_18:.*]] = arith.cmpi sgt, %[[j]], %[[VAL_8]] : i32
+! CHECK: %[[VAL_19:.*]] = arith.select %[[VAL_18]], %[[VAL_13]], %[[VAL_14]] : i32
+! CHECK: %[[VAL_20:.*]] = arith.select %[[VAL_18]], %[[VAL_14]], %[[VAL_13]] : i32
+! CHECK: %[[VAL_21:.*]] = arith.cmpi ne, %[[k]], %[[VAL_7]] : i32
+! CHECK: %[[VAL_22:.*]] = arith.shrui %[[i]], %[[k]] : i32
+! CHECK: %[[VAL_23:.*]] = arith.shli %[[VAL_22]], %[[k]] : i32
+! CHECK: %[[VAL_24:.*]] = arith.select %[[VAL_21]], %[[VAL_23]], %[[VAL_8]] : i32
+! CHECK: %[[VAL_25:.*]] = arith.subi %[[VAL_7]], %[[VAL_19]] : i32
+! CHECK: %[[VAL_26:.*]] = arith.shrui %[[VAL_9]], %[[VAL_25]] : i32
+! CHECK: %[[VAL_27:.*]] = arith.shrui %[[i]], %[[VAL_20]] : i32
+! CHECK: %[[VAL_28:.*]] = arith.andi %[[VAL_27]], %[[VAL_26]] : i32
+! CHECK: %[[VAL_29:.*]] = arith.subi %[[VAL_7]], %[[VAL_20]] : i32
+! CHECK: %[[VAL_30:.*]] = arith.shrui %[[VAL_9]], %[[VAL_29]] : i32
+! CHECK: %[[VAL_31:.*]] = arith.andi %[[i]], %[[VAL_30]] : i32
+! CHECK: %[[VAL_32:.*]] = arith.shli %[[VAL_31]], %[[VAL_19]] : i32
+! CHECK: %[[VAL_33:.*]] = arith.ori %[[VAL_24]], %[[VAL_28]] : i32
+! CHECK: %[[VAL_34:.*]] = arith.ori %[[VAL_33]], %[[VAL_32]] : i32
+! CHECK: %[[VAL_35:.*]] = arith.select %[[VAL_17]], %[[i]], %[[VAL_34]] : i32
+! CHECK: hlfir.assign %[[VAL_35]] to %[[result]]#0 : i32, !fir.ref<i32>
+! CHECK: %[[VAL_36:.*]] = fir.load %[[result]]#0 : !fir.ref<i32>
+! CHECK: return %[[VAL_36]] : i32
+ ishftc_test = ishftc(i, j, k)
+end
! Test cases where the size argument presence can only be know at runtime
module test_ishftc
contains
- ! CHECK-LABEL: func @_QMtest_ishftcPdyn_optional_scalar(
+ ! CHECK-LABEL: func.func @_QMtest_ishftcPdyn_optional_scalar(
! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "i"},
! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "shift"},
! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i32> {fir.bindc_name = "size", fir.optional}) {
@@ -52,70 +58,80 @@ subroutine dyn_optional_scalar(i, shift, size)
integer, optional :: size
integer :: i, shift
print *, ishftc(i, shift, size)
- ! CHECK: %[[VAL_8:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
- ! CHECK: %[[VAL_9:.*]] = fir.load %[[VAL_1]] : !fir.ref<i32>
- ! CHECK: %[[VAL_10:.*]] = fir.is_present %[[VAL_2]] : (!fir.ref<i32>) -> i1
- ! CHECK: %[[VAL_11:.*]] = fir.if %[[VAL_10]] -> (i32) {
- ! CHECK: %[[VAL_12:.*]] = fir.load %[[VAL_2]] : !fir.ref<i32>
- ! CHECK: fir.result %[[VAL_12]] : i32
+ ! CHECK: %[[I:.*]]:2 = hlfir.declare %[[VAL_0]]
+ ! CHECK: %[[SHIFT:.*]]:2 = hlfir.declare %[[VAL_1]]
+ ! CHECK: %[[SIZE:.*]]:2 = hlfir.declare %[[VAL_2]] {{.*}} {fortran_attrs = #fir.var_attrs<optional>
+ ! CHECK: %[[I_VAL:.*]] = fir.load %[[I]]#0 : !fir.ref<i32>
+ ! CHECK: %[[SHIFT_VAL:.*]] = fir.load %[[SHIFT]]#0 : !fir.ref<i32>
+ ! CHECK: %[[IS_PRESENT:.*]] = fir.is_present %[[SIZE]]#0 : (!fir.ref<i32>) -> i1
+ ! CHECK: %[[SIZE_VAL:.*]] = fir.if %[[IS_PRESENT]] -> (i32) {
+ ! CHECK: %[[LOADED:.*]] = fir.load %[[SIZE]]#0 : !fir.ref<i32>
+ ! CHECK: fir.result %[[LOADED]] : i32
! CHECK: } else {
- ! CHECK: %[[VAL_13:.*]] = arith.constant 32 : i32
- ! CHECK: fir.result %[[VAL_13]] : i32
+ ! CHECK: %[[DEFAULT:.*]] = arith.constant 32 : i32
+ ! CHECK: fir.result %[[DEFAULT]] : i32
! CHECK: }
- ! CHECK: %[[VAL_17:.*]] = arith.constant 31 : i32
- ! CHECK: %[[VAL_18:.*]] = arith.shrsi %[[VAL_9]], %[[VAL_17]] : i32
- ! CHECK: %[[VAL_19:.*]] = arith.xori %[[VAL_9]], %[[VAL_18]] : i32
+ ! CHECK: %[[c31:.*]] = arith.constant 31 : i32
+ ! CHECK: %[[VAL_18:.*]] = arith.shrsi %[[SHIFT_VAL]], %[[c31]] : i32
+ ! CHECK: %[[VAL_19:.*]] = arith.xori %[[SHIFT_VAL]], %[[VAL_18]] : i32
! CHECK: %[[VAL_20:.*]] = arith.subi %[[VAL_19]], %[[VAL_18]] : i32
- ! CHECK: %[[VAL_21:.*]] = arith.subi %[[VAL_11]], %[[VAL_20]] : i32
+ ! CHECK: %[[VAL_21:.*]] = arith.subi %[[SIZE_VAL]], %[[VAL_20]] : i32
! ... as in non optional case
end subroutine
- ! CHECK-LABEL: func @_QMtest_ishftcPdyn_optional_array_scalar(
+ ! CHECK-LABEL: func.func @_QMtest_ishftcPdyn_optional_array_scalar(
! CHECK-SAME: %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "i"},
! CHECK-SAME: %[[VAL_1:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "shift"},
! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i32> {fir.bindc_name = "size", fir.optional}) {
subroutine dyn_optional_array_scalar(i, shift, size)
integer, optional :: size
integer :: i(:), shift(:)
- ! CHECK: %[[VAL_10:.*]] = fir.array_load %[[VAL_0]] : (!fir.box<!fir.array<?xi32>>) -> !fir.array<?xi32>
- ! CHECK: %[[VAL_11:.*]] = fir.array_load %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>) -> !fir.array<?xi32>
- ! CHECK: %[[VAL_12:.*]] = fir.is_present %[[VAL_2]] : (!fir.ref<i32>) -> i1
- ! CHECK: fir.do_loop %[[VAL_20:.*]] = %{{.*}} to %{{.*}}
- ! CHECK: %[[VAL_22:.*]] = fir.array_fetch %[[VAL_10]], %[[VAL_20]] : (!fir.array<?xi32>, index) -> i32
- ! CHECK: %[[VAL_23:.*]] = fir.array_fetch %[[VAL_11]], %[[VAL_20]] : (!fir.array<?xi32>, index) -> i32
- ! CHECK: %[[VAL_24:.*]] = fir.if %[[VAL_12]] -> (i32) {
- ! CHECK: %[[VAL_25:.*]] = fir.load %[[VAL_2]] : !fir.ref<i32>
- ! CHECK: fir.result %[[VAL_25]] : i32
+ ! CHECK: %[[I:.*]]:2 = hlfir.declare %[[VAL_0]]
+ ! CHECK: %[[SHIFT:.*]]:2 = hlfir.declare %[[VAL_1]]
+ ! CHECK: %[[SIZE:.*]]:2 = hlfir.declare %[[VAL_2]] {{.*}} {fortran_attrs = #fir.var_attrs<optional>
+ ! CHECK: %[[IS_PRESENT:.*]] = fir.is_present %[[SIZE]]#0 : (!fir.ref<i32>) -> i1
+ ! CHECK: %[[ELEMENTAL:.*]] = hlfir.elemental %{{.*}} unordered : (!fir.shape<1>) -> !hlfir.expr<?xi32> {
+ ! CHECK: ^bb0(%[[IDX:.*]]: index):
+ ! CHECK: %[[I_ELEM:.*]] = hlfir.designate %[[I]]#0 (%[[IDX]])
+ ! CHECK: %[[I_VAL:.*]] = fir.load %[[I_ELEM]] : !fir.ref<i32>
+ ! CHECK: %[[S_ELEM:.*]] = hlfir.designate %[[SHIFT]]#0 (%[[IDX]])
+ ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_ELEM]] : !fir.ref<i32>
+ ! CHECK: %[[SIZE_VAL:.*]] = fir.if %[[IS_PRESENT]] -> (i32) {
+ ! CHECK: %[[LOADED:.*]] = fir.load %[[SIZE]]#0 : !fir.ref<i32>
+ ! CHECK: fir.result %[[LOADED]] : i32
! CHECK: } else {
- ! CHECK: %[[VAL_26:.*]] = arith.constant 32 : i32
- ! CHECK: fir.result %[[VAL_26]] : i32
+ ! CHECK: %[[DEFAULT:.*]] = arith.constant 32 : i32
+ ! CHECK: fir.result %[[DEFAULT]] : i32
! CHECK: }
! ... as in non optional case
! CHECK: }
print *, ishftc(i, shift, size)
end subroutine
- ! CHECK-LABEL: func @_QMtest_ishftcPdyn_optional_array(
+ ! CHECK-LABEL: func.func @_QMtest_ishftcPdyn_optional_array(
! CHECK-SAME: %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "i"},
! CHECK-SAME: %[[VAL_1:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "shift"},
! CHECK-SAME: %[[VAL_2:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "size", fir.optional}) {
subroutine dyn_optional_array(i, shift, size)
integer, optional :: size(:)
integer :: i(:), shift(:)
- ! CHECK: %[[VAL_10:.*]] = fir.array_load %[[VAL_0]] : (!fir.box<!fir.array<?xi32>>) -> !fir.array<?xi32>
- ! CHECK: %[[VAL_11:.*]] = fir.array_load %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>) -> !fir.array<?xi32>
- ! CHECK: %[[VAL_12:.*]] = fir.is_present %[[VAL_2]] : (!fir.box<!fir.array<?xi32>>) -> i1
- ! CHECK: %[[VAL_17:.*]] = arith.select %[[VAL_12]], %[[VAL_2]], %{{.*}} : !fir.box<!fir.array<?xi32>>
- ! CHECK: %[[VAL_18:.*]] = fir.array_load %[[VAL_17]] {fir.optional} : (!fir.box<!fir.array<?xi32>>) -> !fir.array<?xi32>
- ! CHECK: fir.do_loop %[[VAL_26:.*]] = %{{.*}} to %{{.*}}
- ! CHECK: %[[VAL_28:.*]] = fir.array_fetch %[[VAL_10]], %[[VAL_26]] : (!fir.array<?xi32>, index) -> i32
- ! CHECK: %[[VAL_29:.*]] = fir.array_fetch %[[VAL_11]], %[[VAL_26]] : (!fir.array<?xi32>, index) -> i32
- ! CHECK: %[[VAL_30:.*]] = fir.if %[[VAL_12]] -> (i32) {
- ! CHECK: %[[VAL_31:.*]] = fir.array_fetch %[[VAL_18]], %[[VAL_26]] : (!fir.array<?xi32>, index) -> i32
- ! CHECK: fir.result %[[VAL_31]] : i32
+ ! CHECK: %[[I:.*]]:2 = hlfir.declare %[[VAL_0]]
+ ! CHECK: %[[SHIFT:.*]]:2 = hlfir.declare %[[VAL_1]]
+ ! CHECK: %[[SIZE:.*]]:2 = hlfir.declare %[[VAL_2]] {{.*}} {fortran_attrs = #fir.var_attrs<optional>
+ ! CHECK: %[[IS_PRESENT:.*]] = fir.is_present %[[SIZE]]#0 : (!fir.box<!fir.array<?xi32>>) -> i1
+ ! CHECK: %[[ELEMENTAL:.*]] = hlfir.elemental %{{.*}} unordered : (!fir.shape<1>) -> !hlfir.expr<?xi32> {
+ ! CHECK: ^bb0(%[[IDX:.*]]: index):
+ ! CHECK: %[[I_ELEM:.*]] = hlfir.designate %[[I]]#0 (%[[IDX]])
+ ! CHECK: %[[I_VAL:.*]] = fir.load %[[I_ELEM]] : !fir.ref<i32>
+ ! CHECK: %[[S_ELEM:.*]] = hlfir.designate %[[SHIFT]]#0 (%[[IDX]])
+ ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_ELEM]] : !fir.ref<i32>
+ ! CHECK: %[[SIZE_VAL:.*]] = fir.if %[[IS_PRESENT]] -> (i32) {
+ ! CHECK: %[[SIZE_ELEM:.*]] = hlfir.designate %[[SIZE]]#0 (%[[IDX]])
+ ! CHECK: %[[LOADED:.*]] = fir.load %[[SIZE_ELEM]] : !fir.ref<i32>
+ ! CHECK: fir.result %[[LOADED]] : i32
! CHECK: } else {
- ! CHECK: %[[VAL_32:.*]] = arith.constant 32 : i32
- ! CHECK: fir.result %[[VAL_32]] : i32
+ ! CHECK: %[[DEFAULT:.*]] = arith.constant 32 : i32
+ ! CHECK: fir.result %[[DEFAULT]] : i32
! CHECK: }
! ... as in non optional case
! CHECK: }
diff --git a/flang/test/Lower/Intrinsics/lbound.f90 b/flang/test/Lower/Intrinsics/lbound.f90
index 75c11ff8bc95f..713f10351cba2 100644
--- a/flang/test/Lower/Intrinsics/lbound.f90
+++ b/flang/test/Lower/Intrinsics/lbound.f90
@@ -1,39 +1,46 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
-! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
-! CHECK-LABEL: func @_QPlbound_test(
-! CHECK: %[[VAL_0:.*]] = fir.load %arg1 : !fir.ref<i64>
-! CHECK: %[[VAL_1:.*]] = fir.rebox %arg0 : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<!fir.array<?x?xf32>>
+! CHECK-LABEL: func.func @_QPlbound_test(
+! CHECK-SAME: %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xf32>> {fir.bindc_name = "a"},
+! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i64> {fir.bindc_name = "dim"},
+! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i64> {fir.bindc_name = "res"}) {
subroutine lbound_test(a, dim, res)
real, dimension(:, :) :: a
integer(8):: dim, res
-! CHECK: %[[VAL_2:.*]] = fir.address_of(
-! CHECK: %[[VAL_3:.*]] = fir.convert %[[VAL_1]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
-! CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_0]] : (i64) -> i32
-! CHECK: %[[VAL_5:.*]] = fir.convert %[[VAL_2]]
-! CHECK: %[[VAL_6:.*]] = fir.call @_FortranALboundDim(%[[VAL_3]], %[[VAL_4]], %[[VAL_5]], %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
-! CHECK: fir.store %[[VAL_6]] to %arg2 : !fir.ref<i64>
+! CHECK: %[[A:.*]]:2 = hlfir.declare %[[VAL_0]]
+! CHECK: %[[DIM:.*]]:2 = hlfir.declare %[[VAL_1]]
+! CHECK: %[[RES:.*]]:2 = hlfir.declare %[[VAL_2]]
+! CHECK: %[[DIM_VAL:.*]] = fir.load %[[DIM]]#0 : !fir.ref<i64>
+! CHECK: %[[REBOX:.*]] = fir.rebox %[[A]]#1 : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<!fir.array<?x?xf32>>
+! CHECK: %[[A_NONE:.*]] = fir.convert %[[REBOX]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
+! CHECK: %[[DIM_I32:.*]] = fir.convert %[[DIM_VAL]] : (i64) -> i32
+! CHECK: %[[RESULT:.*]] = fir.call @_FortranALboundDim(%[[A_NONE]], %[[DIM_I32]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
+! CHECK: hlfir.assign %[[RESULT]] to %[[RES]]#0 : i64, !fir.ref<i64>
res = lbound(a, dim, 8)
end subroutine
-! CHECK-LABEL: func @_QPlbound_test_2(
-! CHECK: %[[VAL_c1_i64:.*]] = arith.constant 1 : i64
-! CHECK: %[[VAL_0:.*]] = fir.convert %[[VAL_c1_i64]] : (i64) -> index
-! CHECK: %[[VAL_c2_i64:.*]] = arith.constant 2 : i64
-! CHECK: %[[VAL_1:.*]] = fir.convert %[[VAL_c2_i64]] : (i64) -> index
-! CHECK: %[[VAL_2:.*]] = fir.load %arg1 : !fir.ref<i64>
+! CHECK-LABEL: func.func @_QPlbound_test_2(
+! CHECK-SAME: %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xf32>> {fir.bindc_name = "a"},
+! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i64> {fir.bindc_name = "dim"},
+! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i64> {fir.bindc_name = "res"}) {
subroutine lbound_test_2(a, dim, res)
real, dimension(:, 2:) :: a
integer(8):: dim, res
-! CHECK: %[[VAL_3:.*]] = fir.shift %[[VAL_0]], %[[VAL_1]] : (index, index) -> !fir.shift<2>
-! CHECK: %[[VAL_4:.*]] = fir.rebox %arg0(%[[VAL_3]]) : (!fir.box<!fir.array<?x?xf32>>, !fir.shift<2>) -> !fir.box<!fir.array<?x?xf32>>
-! CHECK: %[[VAL_5:.*]] = fir.address_of(
-! CHECK: %[[VAL_6:.*]] = fir.convert %[[VAL_4]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
-! CHECK: %[[VAL_7:.*]] = fir.convert %[[VAL_2]] : (i64) -> i32
-! CHECK: %[[VAL_8:.*]] = fir.convert %[[VAL_5]]
-! CHECK: %[[VAL_9:.*]] = fir.call @_FortranALboundDim(%[[VAL_6]], %[[VAL_7]], %[[VAL_8]], %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
-! CHECK: fir.store %[[VAL_9]] to %arg2 : !fir.ref<i64>
+! CHECK: %[[c1_i64:.*]] = arith.constant 1 : i64
+! CHECK: %[[IDX1:.*]] = fir.convert %[[c1_i64]] : (i64) -> index
+! CHECK: %[[c2_i64:.*]] = arith.constant 2 : i64
+! CHECK: %[[IDX2:.*]] = fir.convert %[[c2_i64]] : (i64) -> index
+! CHECK: %[[A:.*]]:2 = hlfir.declare %[[VAL_0]](%{{.*}})
+! CHECK: %[[DIM:.*]]:2 = hlfir.declare %[[VAL_1]]
+! CHECK: %[[RES:.*]]:2 = hlfir.declare %[[VAL_2]]
+! CHECK: %[[DIM_VAL:.*]] = fir.load %[[DIM]]#0 : !fir.ref<i64>
+! CHECK: %[[SHIFT:.*]] = fir.shift %[[IDX1]], %[[IDX2]] : (index, index) -> !fir.shift<2>
+! CHECK: %[[REBOX:.*]] = fir.rebox %[[A]]#1(%[[SHIFT]]) : (!fir.box<!fir.array<?x?xf32>>, !fir.shift<2>) -> !fir.box<!fir.array<?x?xf32>>
+! CHECK: %[[A_NONE:.*]] = fir.convert %[[REBOX]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
+! CHECK: %[[DIM_I32:.*]] = fir.convert %[[DIM_VAL]] : (i64) -> i32
+! CHECK: %[[RESULT:.*]] = fir.call @_FortranALboundDim(%[[A_NONE]], %[[DIM_I32]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
+! CHECK: hlfir.assign %[[RESULT]] to %[[RES]]#0 : i64, !fir.ref<i64>
res = lbound(a, dim, 8)
end subroutine
@@ -41,19 +48,18 @@ subroutine lbound_test_3(a, dim, res)
real, dimension(2:10, 3:*) :: a
integer(8):: dim, res
! CHECK: %[[VAL_0:.*]] = fir.assumed_size_extent : index
-! CHECK: %[[VAL_1:.*]] = fir.load %arg1 : !fir.ref<i64>
-! CHECK: %[[VAL_2:.*]] = fir.shape_shift %{{.*}}, %{{.*}}, %{{.*}}, %[[VAL_0]] : (index, index, index, index) -> !fir.shapeshift<2>
-! CHECK: %[[VAL_3:.*]] = fir.embox %arg0(%[[VAL_2]]) : (!fir.ref<!fir.array<9x?xf32>>, !fir.shapeshift<2>) -> !fir.box<!fir.array<9x?xf32>>
-! CHECK: %[[VAL_4:.*]] = fir.address_of(
-! CHECK: %[[VAL_5:.*]] = fir.convert %[[VAL_3]] : (!fir.box<!fir.array<9x?xf32>>) -> !fir.box<none>
-! CHECK: %[[VAL_6:.*]] = fir.convert %[[VAL_1]] : (i64) -> i32
-! CHECK: %[[VAL_7:.*]] = fir.convert %[[VAL_4]]
-! CHECK: %[[VAL_8:.*]] = fir.call @_FortranALboundDim(%[[VAL_5]], %[[VAL_6]], %[[VAL_7]], %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
-! CHECK: fir.store %[[VAL_8]] to %arg2 : !fir.ref<i64>
+! CHECK: %[[DIM:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFlbound_test_3Edim"}
+! CHECK: %[[DIM_VAL:.*]] = fir.load %[[DIM]]#0 : !fir.ref<i64>
+! CHECK: %[[SHAPESHIFT:.*]] = fir.shape_shift %{{.*}}, %{{.*}}, %{{.*}}, %[[VAL_0]] : (index, index, index, index) -> !fir.shapeshift<2>
+! CHECK: %[[EMBOX:.*]] = fir.embox %{{.*}}(%[[SHAPESHIFT]]) : (!fir.ref<!fir.array<9x?xf32>>, !fir.shapeshift<2>) -> !fir.box<!fir.array<9x?xf32>>
+! CHECK: %[[A_NONE:.*]] = fir.convert %[[EMBOX]] : (!fir.box<!fir.array<9x?xf32>>) -> !fir.box<none>
+! CHECK: %[[DIM_I32:.*]] = fir.convert %[[DIM_VAL]] : (i64) -> i32
+! CHECK: %[[RESULT:.*]] = fir.call @_FortranALboundDim(%[[A_NONE]], %[[DIM_I32]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
+! CHECK: hlfir.assign %[[RESULT]] to %{{.*}}#0 : i64, !fir.ref<i64>
res = lbound(a, dim, 8)
end subroutine
-! CHECK-LABEL: func @_QPlbound_test_4(
+! CHECK-LABEL: func.func @_QPlbound_test_4(
! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<?x?xf32>> {fir.bindc_name = "a"},
! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i64> {fir.bindc_name = "dim"},
! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i64> {fir.bindc_name = "l1"},
@@ -62,33 +68,37 @@ subroutine lbound_test_3(a, dim, res)
! CHECK-SAME: %[[VAL_5:.*]]: !fir.ref<i64> {fir.bindc_name = "u2"}) {
subroutine lbound_test_4(a, dim, l1, u1, l2, u2)
integer(8):: dim, l1, u1, l2, u2
-! CHECK: %[[VAL_6:.*]] = fir.alloca !fir.array<2xi32>
-! CHECK: %[[VAL_7:.*]] = fir.load %[[VAL_2]] : !fir.ref<i64>
-! CHECK: %[[VAL_8:.*]] = fir.convert %[[VAL_7]] : (i64) -> index
-! CHECK: %[[VAL_17:.*]] = fir.load %[[VAL_4]] : !fir.ref<i64>
-! CHECK: %[[VAL_18:.*]] = fir.convert %[[VAL_17]] : (i64) -> index
+! CHECK: %[[TMP:.*]] = fir.alloca !fir.array<2xi32>
+! CHECK-DAG: %[[L1:.*]]:2 = hlfir.declare %[[VAL_2]] {{.*}} {uniq_name = "_QFlbound_test_4El1"}
+! CHECK-DAG: %[[L2:.*]]:2 = hlfir.declare %[[VAL_4]] {{.*}} {uniq_name = "_QFlbound_test_4El2"}
real, dimension(l1:u1, l2:u2) :: a
! BeginExternalListOutput
-! CHECK: %[[VAL_32:.*]] = arith.constant 1 : i32
-! CHECK: %[[VAL_33:.*]] = arith.constant 0 : index
-! CHECK: %[[VAL_34:.*]] = arith.cmpi eq, %[[VAL_16:.*]], %[[VAL_33]] : index
-! CHECK: %[[VAL_35:.*]] = fir.convert %[[VAL_32]] : (i32) -> index
-! CHECK: %[[VAL_36:.*]] = arith.select %[[VAL_34]], %[[VAL_35]], %[[VAL_8]] : index
-! CHECK: %[[VAL_37:.*]] = fir.convert %[[VAL_36]] : (index) -> i32
-! CHECK: %[[VAL_38:.*]] = arith.constant 0 : index
-! CHECK: %[[VAL_39:.*]] = fir.coordinate_of %[[VAL_6]], %[[VAL_38]] : (!fir.ref<!fir.array<2xi32>>, index) -> !fir.ref<i32>
-! CHECK: fir.store %[[VAL_37]] to %[[VAL_39]] : !fir.ref<i32>
-! CHECK: %[[VAL_40:.*]] = arith.cmpi eq, %[[VAL_26:.*]], %[[VAL_33]] : index
-! CHECK: %[[VAL_41:.*]] = fir.convert %[[VAL_32]] : (i32) -> index
-! CHECK: %[[VAL_42:.*]] = arith.select %[[VAL_40]], %[[VAL_41]], %[[VAL_18]] : index
-! CHECK: %[[VAL_43:.*]] = fir.convert %[[VAL_42]] : (index) -> i32
-! CHECK: %[[VAL_44:.*]] = arith.constant 1 : index
-! CHECK: %[[VAL_45:.*]] = fir.coordinate_of %[[VAL_6]], %[[VAL_44]] : (!fir.ref<!fir.array<2xi32>>, index) -> !fir.ref<i32>
-! CHECK: fir.store %[[VAL_43]] to %[[VAL_45]] : !fir.ref<i32>
-! CHECK: %[[VAL_46:.*]] = arith.constant 2 : index
-! CHECK: %[[VAL_47:.*]] = fir.shape %[[VAL_46]] : (index) -> !fir.shape<1>
-! CHECK: %[[VAL_48:.*]] = fir.embox %[[VAL_6]](%[[VAL_47]]) : (!fir.ref<!fir.array<2xi32>>, !fir.shape<1>) -> !fir.box<!fir.array<2xi32>>
-! CHECK: %[[VAL_49:.*]] = fir.convert %[[VAL_48]] : (!fir.box<!fir.array<2xi32>>) -> !fir.box<none>
-! CHECK: fir.call @_FortranAioOutputDescriptor(%{{.*}}, %[[VAL_49]]) {{.*}}: (!fir.ref<i8>, !fir.box<none>) -> i1
+! CHECK: %[[L1_VAL:.*]] = fir.load %[[L1]]#0 : !fir.ref<i64>
+! CHECK: %[[L1_IDX:.*]] = fir.convert %[[L1_VAL]] : (i64) -> index
+! CHECK: %[[L2_VAL:.*]] = fir.load %[[L2]]#0 : !fir.ref<i64>
+! CHECK: %[[L2_IDX:.*]] = fir.convert %[[L2_VAL]] : (i64) -> index
+! CHECK: %[[c1_i32:.*]] = arith.constant 1 : i32
+! CHECK: %[[c0:.*]] = arith.constant 0 : index
+! CHECK: %[[EQ1:.*]] = arith.cmpi eq, %[[SIZE1:.*]], %[[c0]] : index
+! CHECK: %[[L1_AS_IDX:.*]] = fir.convert %[[c1_i32]] : (i32) -> index
+! CHECK: %[[LB1:.*]] = arith.select %[[EQ1]], %[[L1_AS_IDX]], %[[L1_IDX]] : index
+! CHECK: %[[LB1_I32:.*]] = fir.convert %[[LB1]] : (index) -> i32
+! CHECK: %[[c0_idx:.*]] = arith.constant 0 : index
+! CHECK: %[[COORD1:.*]] = fir.coordinate_of %[[TMP]], %[[c0_idx]] : (!fir.ref<!fir.array<2xi32>>, index) -> !fir.ref<i32>
+! CHECK: fir.store %[[LB1_I32]] to %[[COORD1]] : !fir.ref<i32>
+! CHECK: %[[EQ2:.*]] = arith.cmpi eq, %[[SIZE2:.*]], %[[c0]] : index
+! CHECK: %[[LB2:.*]] = arith.select %[[EQ2]], %{{.*}}, %[[L2_IDX]] : index
+! CHECK: %[[LB2_I32:.*]] = fir.convert %[[LB2]] : (index) -> i32
+! CHECK: %[[c1_idx:.*]] = arith.constant 1 : index
+! CHECK: %[[COORD2:.*]] = fir.coordinate_of %[[TMP]], %[[c1_idx]] : (!fir.ref<!fir.array<2xi32>>, index) -> !fir.ref<i32>
+! CHECK: fir.store %[[LB2_I32]] to %[[COORD2]] : !fir.ref<i32>
+! CHECK: %[[c2:.*]] = arith.constant 2 : index
+! CHECK: %[[SHAPE:.*]] = fir.shape %[[c2]] : (index) -> !fir.shape<1>
+! CHECK: %[[TMPDECL:.*]]:2 = hlfir.declare %[[TMP]](%[[SHAPE]]) {uniq_name = ".tmp.intrinsic_result"}
+! CHECK: %[[EXPR:.*]] = hlfir.as_expr %[[TMPDECL]]#0 move %{{.*}} : (!fir.ref<!fir.array<2xi32>>, i1) -> !hlfir.expr<2xi32>
+! CHECK: %[[ASSOC:.*]]:3 = hlfir.associate %[[EXPR]](%[[SHAPE]]) {adapt.valuebyref}
+! CHECK: %[[EMBOX:.*]] = fir.embox %[[ASSOC]]#0(%{{.*}}) : (!fir.ref<!fir.array<2xi32>>, !fir.shape<1>) -> !fir.box<!fir.array<2xi32>>
+! CHECK: %[[NONE:.*]] = fir.convert %[[EMBOX]] : (!fir.box<!fir.array<2xi32>>) -> !fir.box<none>
+! CHECK: fir.call @_FortranAioOutputDescriptor(%{{.*}}, %[[NONE]]) {{.*}}: (!fir.ref<i8>, !fir.box<none>) -> i1
print *, lbound(a, kind=4)
end subroutine
diff --git a/flang/test/Lower/Intrinsics/leadz.f90 b/flang/test/Lower/Intrinsics/leadz.f90
index 181a8fdc4a4b1..7b1841f14950a 100644
--- a/flang/test/Lower/Intrinsics/leadz.f90
+++ b/flang/test/Lower/Intrinsics/leadz.f90
@@ -1,66 +1,75 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
-! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
-! CHECK-LABEL: leadz1_test
-! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i8>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}}
+! CHECK-LABEL: func.func @_QPleadz1_test(
+! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i8>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}})
subroutine leadz1_test(a, b)
integer(1) :: a
integer :: b
- ! CHECK: %[[AVAL:.*]] = fir.load %[[AREF]] : !fir.ref<i8>
+! CHECK-DAG: %[[A:.*]]:2 = hlfir.declare %[[AREF]]
+! CHECK-DAG: %[[B:.*]]:2 = hlfir.declare %[[BREF]]
b = leadz(a)
- ! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i8
- ! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i8) -> i32
- ! CHECK: fir.store %[[RESULT]] to %[[BREF]] : !fir.ref<i32>
+! CHECK-DAG: %[[AVAL:.*]] = fir.load %[[A]]#0 : !fir.ref<i8>
+! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i8
+! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i8) -> i32
+! CHECK: hlfir.assign %[[RESULT]] to %[[B]]#0 : i32, !fir.ref<i32>
end subroutine leadz1_test
-! CHECK-LABEL: leadz2_test
-! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i16>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}}
+! CHECK-LABEL: func.func @_QPleadz2_test(
+! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i16>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}})
subroutine leadz2_test(a, b)
integer(2) :: a
integer :: b
- ! CHECK: %[[AVAL:.*]] = fir.load %[[AREF]] : !fir.ref<i16>
+! CHECK-DAG: %[[A:.*]]:2 = hlfir.declare %[[AREF]]
+! CHECK-DAG: %[[B:.*]]:2 = hlfir.declare %[[BREF]]
b = leadz(a)
- ! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i16
- ! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i16) -> i32
- ! CHECK: fir.store %[[RESULT]] to %[[BREF]] : !fir.ref<i32>
+! CHECK-DAG: %[[AVAL:.*]] = fir.load %[[A]]#0 : !fir.ref<i16>
+! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i16
+! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i16) -> i32
+! CHECK: hlfir.assign %[[RESULT]] to %[[B]]#0 : i32, !fir.ref<i32>
end subroutine leadz2_test
-! CHECK-LABEL: leadz4_test
-! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i32>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}}
+! CHECK-LABEL: func.func @_QPleadz4_test(
+! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i32>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}})
subroutine leadz4_test(a, b)
integer(4) :: a
integer :: b
- ! CHECK: %[[AVAL:.*]] = fir.load %[[AREF]] : !fir.ref<i32>
+! CHECK-DAG: %[[A:.*]]:2 = hlfir.declare %[[AREF]]
+! CHECK-DAG: %[[B:.*]]:2 = hlfir.declare %[[BREF]]
b = leadz(a)
- ! CHECK: %[[RESULT:.*]] = math.ctlz %[[AVAL]] : i32
- ! CHECK: fir.store %[[RESULT]] to %[[BREF]] : !fir.ref<i32>
+! CHECK-DAG: %[[AVAL:.*]] = fir.load %[[A]]#0 : !fir.ref<i32>
+! CHECK: %[[RESULT:.*]] = math.ctlz %[[AVAL]] : i32
+! CHECK: hlfir.assign %[[RESULT]] to %[[B]]#0 : i32, !fir.ref<i32>
end subroutine leadz4_test
-! CHECK-LABEL: leadz8_test
-! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i64>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}}
+! CHECK-LABEL: func.func @_QPleadz8_test(
+! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i64>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}})
subroutine leadz8_test(a, b)
integer(8) :: a
integer :: b
- ! CHECK: %[[AVAL:.*]] = fir.load %[[AREF]] : !fir.ref<i64>
+! CHECK-DAG: %[[A:.*]]:2 = hlfir.declare %[[AREF]]
+! CHECK-DAG: %[[B:.*]]:2 = hlfir.declare %[[BREF]]
b = leadz(a)
- ! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i64
- ! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i64) -> i32
- ! CHECK: fir.store %[[RESULT]] to %[[BREF]] : !fir.ref<i32>
+! CHECK-DAG: %[[AVAL:.*]] = fir.load %[[A]]#0 : !fir.ref<i64>
+! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i64
+! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i64) -> i32
+! CHECK: hlfir.assign %[[RESULT]] to %[[B]]#0 : i32, !fir.ref<i32>
end subroutine leadz8_test
-! CHECK-LABEL: leadz16_test
-! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i128>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}}
+! CHECK-LABEL: func.func @_QPleadz16_test(
+! CHECK-SAME: %[[AREF:.*]]: !fir.ref<i128>{{.*}}, %[[BREF:.*]]: !fir.ref<i32>{{.*}})
subroutine leadz16_test(a, b)
integer(16) :: a
integer :: b
- ! CHECK: %[[AVAL:.*]] = fir.load %[[AREF]] : !fir.ref<i128>
+! CHECK-DAG: %[[A:.*]]:2 = hlfir.declare %[[AREF]]
+! CHECK-DAG: %[[B:.*]]:2 = hlfir.declare %[[BREF]]
b = leadz(a)
- ! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i128
- ! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i128) -> i32
- ! CHECK: fir.store %[[RESULT]] to %[[BREF]] : !fir.ref<i32>
+! CHECK-DAG: %[[AVAL:.*]] = fir.load %[[A]]#0 : !fir.ref<i128>
+! CHECK: %[[COUNT:.*]] = math.ctlz %[[AVAL]] : i128
+! CHECK: %[[RESULT:.*]] = fir.convert %[[COUNT]] : (i128) -> i32
+! CHECK: hlfir.assign %[[RESULT]] to %[[B]]#0 : i32, !fir.ref<i32>
end subroutine leadz16_test
More information about the flang-commits
mailing list