[flang-commits] [flang] [flang][NFC] Converted five tests from old lowering to new lowering (part 33) (PR #186943)

Eugene Epshteyn via flang-commits flang-commits at lists.llvm.org
Mon Mar 16 20:05:30 PDT 2026


https://github.com/eugeneepshteyn updated https://github.com/llvm/llvm-project/pull/186943

>From 86d96b627eb3f020a2240d6a8efee1acbc313940 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Mon, 16 Mar 2026 23:03:31 -0400
Subject: [PATCH] [flang][NFC] Converted five tests from old lowering to new
 lowering (part 33)

Tests converted from test/Lower/Intrinsics: ieee_operator_eq.f90, ieee_signbit.f90, index.f90, iparity.f90, is_contiguous.f90
---
 .../Lower/Intrinsics/ieee_operator_eq.f90     | 43 +++++------
 flang/test/Lower/Intrinsics/ieee_signbit.f90  | 33 ++++----
 flang/test/Lower/Intrinsics/index.f90         | 75 +++++++------------
 flang/test/Lower/Intrinsics/iparity.f90       | 58 +++++++-------
 flang/test/Lower/Intrinsics/is_contiguous.f90 | 21 +++---
 5 files changed, 103 insertions(+), 127 deletions(-)

diff --git a/flang/test/Lower/Intrinsics/ieee_operator_eq.f90 b/flang/test/Lower/Intrinsics/ieee_operator_eq.f90
index 8f77460a010fd..09ccca2841f35 100644
--- a/flang/test/Lower/Intrinsics/ieee_operator_eq.f90
+++ b/flang/test/Lower/Intrinsics/ieee_operator_eq.f90
@@ -1,21 +1,23 @@
-! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir -o - %s | FileCheck %s
 
-! CHECK-LABEL: c.func @_QPs
+! CHECK-LABEL: func.func @_QPs
 subroutine s(r1,r2)
   use ieee_arithmetic, only: ieee_round_type, operator(==)
   type(ieee_round_type) :: r1, r2
-  ! CHECK:   %[[V_4:[0-9]+]] = fir.coordinate_of %arg0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>
-  ! CHECK:   %[[V_6:[0-9]+]] = fir.coordinate_of %arg1, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>
-  ! CHECK:   %[[V_7:[0-9]+]] = fir.load %[[V_4]] : !fir.ref<i8>
+  ! CHECK:   %[[R1DECL:.*]]:2 = hlfir.declare %arg0 {{.*}} {uniq_name = "_QFsEr1"}
+  ! CHECK:   %[[R2DECL:.*]]:2 = hlfir.declare %arg1 {{.*}} {uniq_name = "_QFsEr2"}
+  ! CHECK:   %[[V_6:[0-9]+]] = fir.coordinate_of %[[R1DECL]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode
+  ! CHECK:   %[[V_7:[0-9]+]] = fir.coordinate_of %[[R2DECL]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode
   ! CHECK:   %[[V_8:[0-9]+]] = fir.load %[[V_6]] : !fir.ref<i8>
-  ! CHECK:   %[[V_9:[0-9]+]] = arith.cmpi eq, %[[V_7]], %[[V_8]] : i8
-  ! CHECK:   %[[V_10:[0-9]+]] = fir.call @_FortranAioOutputLogical(%{{.*}} %[[V_9]]) {{.*}} : (!fir.ref<i8>, i1) -> i1
+  ! CHECK:   %[[V_9:[0-9]+]] = fir.load %[[V_7]] : !fir.ref<i8>
+  ! CHECK:   %[[V_10:[0-9]+]] = arith.cmpi eq, %[[V_8]], %[[V_9]] : i8
+  ! CHECK:   fir.call @_FortranAioOutputLogical(%{{.*}}, %[[V_10]]) {{.*}} : (!fir.ref<i8>, i1) -> i1
   ! CHECK:   return
   ! CHECK: }
   print*, r1 == r2
 end
 
-! CHECK-LABEL: c.func @_QQmain
+! CHECK-LABEL: func.func @_QQmain
   use ieee_arithmetic, only: ieee_round_type, ieee_nearest, ieee_to_zero
   interface
     subroutine s(r1,r2)
@@ -24,22 +26,17 @@ subroutine s(r1,r2)
     end
   end interface
 
-  ! CHECK:   %[[V_0:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>
-  ! CHECK:   %[[V_1:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>
-  ! CHECK:   %[[V_2:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>
-  ! CHECK:   %[[V_3:[0-9]+]] = fir.alloca !fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>
-  ! CHECK:   %[[V_10:[0-9]+]] = fir.coordinate_of %[[V_3]], _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>
-  ! CHECK:   fir.store %c0{{.*}} to %[[V_10]] : !fir.ref<i8>
-  ! CHECK:   %[[V_17:[0-9]+]] = fir.coordinate_of %[[V_2]], _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>
-  ! CHECK:   fir.store %c1{{.*}} to %[[V_17]] : !fir.ref<i8>
-  ! CHECK:   fir.call @_QPs(%[[V_3]], %[[V_2]]) {{.*}} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> ()
+  ! CHECK:   hlfir.as_expr
+  ! CHECK:   %[[ASSOC1:.*]]:3 = hlfir.associate {{.*}} {adapt.valuebyref}
+  ! CHECK:   hlfir.as_expr
+  ! CHECK:   %[[ASSOC2:.*]]:3 = hlfir.associate {{.*}} {adapt.valuebyref}
+  ! CHECK:   fir.call @_QPs(%[[ASSOC1]]#0, %[[ASSOC2]]#0) {{.*}} : (!fir.ref<!fir.type<{{.*}}>>, !fir.ref<!fir.type<{{.*}}>>) -> ()
   call s(ieee_to_zero, ieee_nearest)
 
-  ! CHECK:   %[[V_24:[0-9]+]] = fir.coordinate_of %[[V_1]], _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>
-  ! CHECK:   fir.store %c1{{.*}} to %[[V_24]] : !fir.ref<i8>
-  ! CHECK:   %[[V_31:[0-9]+]] = fir.coordinate_of %[[V_0]], _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>
-  ! CHECK:   fir.store %c1{{.*}} to %[[V_31]] : !fir.ref<i8>
-  ! CHECK:   fir.call @_QPs(%[[V_1]], %[[V_0]]) {{.*}} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>, !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> ()
+  ! CHECK:   hlfir.as_expr
+  ! CHECK:   %[[ASSOC3:.*]]:3 = hlfir.associate {{.*}} {adapt.valuebyref}
+  ! CHECK:   hlfir.as_expr
+  ! CHECK:   %[[ASSOC4:.*]]:3 = hlfir.associate {{.*}} {adapt.valuebyref}
+  ! CHECK:   fir.call @_QPs(%[[ASSOC3]]#0, %[[ASSOC4]]#0) {{.*}} : (!fir.ref<!fir.type<{{.*}}>>, !fir.ref<!fir.type<{{.*}}>>) -> ()
   call s(ieee_nearest, ieee_nearest)
 end
-
diff --git a/flang/test/Lower/Intrinsics/ieee_signbit.f90 b/flang/test/Lower/Intrinsics/ieee_signbit.f90
index b0bf52c4ae2b8..e8453683e4b09 100644
--- a/flang/test/Lower/Intrinsics/ieee_signbit.f90
+++ b/flang/test/Lower/Intrinsics/ieee_signbit.f90
@@ -1,24 +1,25 @@
-! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir -o - %s | FileCheck %s
 
-! CHECK-LABEL: c.func @_QQmain
+! CHECK-LABEL: func.func @_QQmain
 use ieee_arithmetic
-! CHECK:     %[[V_0:[0-9]+]] = fir.alloca f32 {bindc_name = "x", uniq_name = "_QFEx"}
+! CHECK:     %[[X:.*]] = fir.alloca f32 {bindc_name = "x", uniq_name = "_QFEx"}
+! CHECK:     %[[XDECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFEx"}
 ! CHECK:     %cst = arith.constant -2.000000e+00 : f32
-! CHECK:     fir.store %cst to %[[V_0]] : !fir.ref<f32>
+! CHECK:     hlfir.assign %cst to %[[XDECL]]#0 : f32, !fir.ref<f32>
 x = -2.0
 
-! CHECK:     %[[V_4:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<f32>
-! CHECK:     %[[V_5:[0-9]+]] = arith.bitcast %[[V_4]] : f32 to i32
-! CHECK:     %[[V_6:[0-9]+]] = arith.shrui %[[V_5]], %c31{{.*}} : i32
-! CHECK:     %[[V_7:[0-9]+]] = fir.convert %[[V_6]] : (i32) -> !fir.logical<4>
-! CHECK:     %[[V_8:[0-9]+]] = fir.convert %[[V_7]] : (!fir.logical<4>) -> i1
-! CHECK:     %[[V_9:[0-9]+]] = fir.call @_FortranAioOutputLogical(%{{.*}}, %[[V_8]]) {{.*}} : (!fir.ref<i8>, i1) -> i1
+! CHECK:     %[[V:.*]] = fir.load %[[XDECL]]#0 : !fir.ref<f32>
+! CHECK:     %[[BITS:.*]] = arith.bitcast %[[V]] : f32 to i32
+! CHECK:     %[[SHIFTED:.*]] = arith.shrui %[[BITS]], %{{.*}} : i32
+! CHECK:     %[[LOG:.*]] = fir.convert %[[SHIFTED]] : (i32) -> !fir.logical<4>
+! CHECK:     %[[BIT:.*]] = fir.convert %[[LOG]] : (!fir.logical<4>) -> i1
+! CHECK:     fir.call @_FortranAioOutputLogical(%{{.*}}, %[[BIT]]) {{.*}} : (!fir.ref<i8>, i1) -> i1
 
-! CHECK:     %cst_0 = arith.constant 1.700000e+01 : f32
-! CHECK:     %[[V_10:[0-9]+]] = arith.bitcast %cst_0 : f32 to i32
-! CHECK:     %[[V_11:[0-9]+]] = arith.shrui %[[V_10]], %c31{{.*}} : i32
-! CHECK:     %[[V_12:[0-9]+]] = fir.convert %[[V_11]] : (i32) -> !fir.logical<4>
-! CHECK:     %[[V_13:[0-9]+]] = fir.convert %[[V_12]] : (!fir.logical<4>) -> i1
-! CHECK:     %[[V_14:[0-9]+]] = fir.call @_FortranAioOutputLogical(%{{.*}}, %[[V_13]]) {{.*}} : (!fir.ref<i8>, i1) -> i1
+! CHECK:     %cst{{.*}} = arith.constant 1.700000e+01 : f32
+! CHECK:     %[[BITS2:.*]] = arith.bitcast %cst{{.*}} : f32 to i32
+! CHECK:     %[[SHIFTED2:.*]] = arith.shrui %[[BITS2]], %{{.*}} : i32
+! CHECK:     %[[LOG2:.*]] = fir.convert %[[SHIFTED2]] : (i32) -> !fir.logical<4>
+! CHECK:     %[[BIT2:.*]] = fir.convert %[[LOG2]] : (!fir.logical<4>) -> i1
+! CHECK:     fir.call @_FortranAioOutputLogical(%{{.*}}, %[[BIT2]]) {{.*}} : (!fir.ref<i8>, i1) -> i1
 print*, ieee_signbit(x), ieee_signbit(17.0)
 end
diff --git a/flang/test/Lower/Intrinsics/index.f90 b/flang/test/Lower/Intrinsics/index.f90
index 0ec8cfad83adf..0e031e83dfa45 100644
--- a/flang/test/Lower/Intrinsics/index.f90
+++ b/flang/test/Lower/Intrinsics/index.f90
@@ -1,17 +1,13 @@
-! 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 @_QPindex_test(
 ! CHECK-SAME: %[[s:[^:]+]]: !fir.boxchar<1>{{.*}}, %[[ss:[^:]+]]: !fir.boxchar<1>{{.*}}) -> i32
 integer function index_test(s1, s2)
   character(*) :: s1, s2
-  ! CHECK: %[[st:[^:]*]]:2 = fir.unboxchar %[[s]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
-  ! CHECK: %[[sst:[^:]*]]:2 = fir.unboxchar %[[ss]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
-  ! CHECK: %[[a1:.*]] = fir.convert %[[st]]#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
-  ! CHECK: %[[a2:.*]] = fir.convert %[[st]]#1 : (index) -> i64
-  ! CHECK: %[[a3:.*]] = fir.convert %[[sst]]#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
-  ! CHECK: %[[a4:.*]] = fir.convert %[[sst]]#1 : (index) -> i64
-  ! CHECK: = fir.call @_FortranAIndex1(%[[a1]], %[[a2]], %[[a3]], %[[a4]], %{{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i8>, i64, i1) -> i64
+  ! CHECK: %[[st:[^:]*]]:2 = hlfir.declare {{.*}} {uniq_name = "_QFindex_testEs1"}
+  ! CHECK: %[[sst:[^:]*]]:2 = hlfir.declare {{.*}} {uniq_name = "_QFindex_testEs2"}
+  ! CHECK: %[[res:.*]] = hlfir.index %[[sst]]#0 in %[[st]]#0 : (!fir.boxchar<1>, !fir.boxchar<1>) -> i32
+  ! CHECK: hlfir.assign %[[res]] to {{.*}} : i32, !fir.ref<i32>
   index_test = index(s1, s2)
 end function index_test
 
@@ -19,34 +15,20 @@ end function index_test
 ! CHECK-SAME: %[[s:[^:]+]]: !fir.boxchar<1>{{.*}}, %[[ss:[^:]+]]: !fir.boxchar<1>{{.*}}) -> i32
 integer function index_test2(s1, s2)
   character(*) :: s1, s2
-  ! CHECK: %[[mut:.*]] = fir.alloca !fir.box<!fir.heap<i32>>
-  ! CHECK: %[[st:[^:]*]]:2 = fir.unboxchar %[[s]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
-  ! CHECK: %[[sst:[^:]*]]:2 = fir.unboxchar %[[ss]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
-  ! CHECK: %[[sb:.*]] = fir.embox %[[st]]#0 typeparams %[[st]]#1 : (!fir.ref<!fir.char<1,?>>, index) -> !fir.box<!fir.char<1,?>>
-  ! CHECK: %[[ssb:.*]] = fir.embox %[[sst]]#0 typeparams %[[sst]]#1 : (!fir.ref<!fir.char<1,?>>, index) -> !fir.box<!fir.char<1,?>>
-  ! CHECK: %[[back:.*]] = fir.embox %{{.*}} : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
-  ! CHECK: %[[hb:.*]] = fir.embox %{{.*}} : (!fir.heap<i32>) -> !fir.box<!fir.heap<i32>>
-  ! CHECK: %[[a0:.*]] = fir.convert %[[mut]] : (!fir.ref<!fir.box<!fir.heap<i32>>>) -> !fir.ref<!fir.box<none>>
-  ! CHECK: %[[a1:.*]] = fir.convert %[[sb]] : (!fir.box<!fir.char<1,?>>) -> !fir.box<none>
-  ! CHECK: %[[a2:.*]] = fir.convert %[[ssb]] : (!fir.box<!fir.char<1,?>>) -> !fir.box<none>
-  ! CHECK: %[[a3:.*]] = fir.convert %[[back]] : (!fir.box<!fir.logical<4>>) -> !fir.box<none>
-  ! CHECK: %[[a5:.*]] = fir.convert %{{.*}} : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8>
-  ! CHECK:  fir.call @_FortranAIndex(%[[a0]], %[[a1]], %[[a2]], %[[a3]], %{{.*}}, %[[a5]], %{{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.box<none>, i32, !fir.ref<i8>, i32) -> ()
+  ! CHECK: %[[st:[^:]*]]:2 = hlfir.declare {{.*}} {uniq_name = "_QFindex_test2Es1"}
+  ! CHECK: %[[sst:[^:]*]]:2 = hlfir.declare {{.*}} {uniq_name = "_QFindex_test2Es2"}
+  ! CHECK: %true = arith.constant true
+  ! CHECK: %[[res:.*]] = hlfir.index %[[sst]]#0 in %[[st]]#0 back %true : (!fir.boxchar<1>, !fir.boxchar<1>, i1) -> i32
+  ! CHECK: hlfir.assign %[[res]] to {{.*}} : i32, !fir.ref<i32>
   index_test2 = index(s1, s2, .true., 4)
-  ! CHECK: %[[ld1:.*]] = fir.load %[[mut]] : !fir.ref<!fir.box<!fir.heap<i32>>>
-  ! CHECK: %[[ad1:.*]] = fir.box_addr %[[ld1]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
-  ! CHECK: %[[ld2:.*]] = fir.load %[[ad1]] : !fir.heap<i32>
-  ! CHECK: fir.freemem %[[ad1]]
 end function index_test2
 
 ! CHECK-LABEL: func @_QPindex_test3
 integer function index_test3(s, i)
   character(*) :: s
   integer :: i
-  ! CHECK: %[[tmpChar:.*]] = fir.alloca !fir.char<1>
-  ! CHECK: fir.store %{{.*}} to %[[tmpChar]] : !fir.ref<!fir.char<1>>
-  ! CHECK: %[[tmpCast:.*]] = fir.convert %[[tmpChar]] : (!fir.ref<!fir.char<1>>) -> !fir.ref<i8>
-  ! CHECK: fir.call @_FortranAIndex1(%{{.*}}, %{{.*}}, %[[tmpCast]], %{{.*}}, %{{.*}})
+  ! CHECK: %[[st:[^:]*]]:2 = hlfir.declare {{.*}} {uniq_name = "_QFindex_test3Es"}
+  ! CHECK: hlfir.index {{.*}} in %[[st]]#0 : (!hlfir.expr<!fir.char<1>>, !fir.boxchar<1>) -> i32
   index_test3 = index(s, char(i))
 end function
 
@@ -58,24 +40,19 @@ subroutine test_optional(string, substring, back)
   character (*) :: string(:), substring
   logical, optional :: back(:)
   print *, index(string, substring, back)
-! CHECK:  %[[VAL_11:.*]] = fir.is_present %[[VAL_2]] : (!fir.box<!fir.array<?x!fir.logical<4>>>) -> i1
-! CHECK:  %[[VAL_12:.*]] = fir.zero_bits !fir.ref<!fir.array<?x!fir.logical<4>>>
-! CHECK:  %[[VAL_13:.*]] = arith.constant 0 : index
-! CHECK:  %[[VAL_14:.*]] = fir.shape %[[VAL_13]] : (index) -> !fir.shape<1>
-! CHECK:  %[[VAL_15:.*]] = fir.embox %[[VAL_12]](%[[VAL_14]]) : (!fir.ref<!fir.array<?x!fir.logical<4>>>, !fir.shape<1>) -> !fir.box<!fir.array<?x!fir.logical<4>>>
-! CHECK:  %[[VAL_16:.*]] = arith.select %[[VAL_11]], %[[VAL_2]], %[[VAL_15]] : !fir.box<!fir.array<?x!fir.logical<4>>>
-! CHECK:  %[[VAL_17:.*]] = fir.array_load %[[VAL_16]] {fir.optional} : (!fir.box<!fir.array<?x!fir.logical<4>>>) -> !fir.array<?x!fir.logical<4>>
-! CHECK:  %[[VAL_24:.*]] = fir.do_loop %[[VAL_25:.*]] = %{{.*}} to %{{.*}} step %{{.*}} unordered iter_args(%[[VAL_26:.*]] = %{{.*}}) -> (!fir.array<?xi32>) {
-  ! CHECK:  %[[VAL_31:.*]] = fir.if %[[VAL_11]] -> (!fir.logical<4>) {
-    ! CHECK:  %[[VAL_32:.*]] = fir.array_fetch %[[VAL_17]], %[[VAL_25]] : (!fir.array<?x!fir.logical<4>>, index) -> !fir.logical<4>
-    ! CHECK:  fir.result %[[VAL_32]] : !fir.logical<4>
-  ! CHECK:  } else {
-    ! CHECK:  %[[VAL_33:.*]] = arith.constant false
-    ! CHECK:  %[[VAL_34:.*]] = fir.convert %[[VAL_33]] : (i1) -> !fir.logical<4>
-    ! CHECK:  fir.result %[[VAL_34]] : !fir.logical<4>
-  ! CHECK:  }
-  ! CHECK:  %[[VAL_39:.*]] = fir.convert %[[VAL_31]] : (!fir.logical<4>) -> i1
-  ! CHECK:  fir.call @_FortranAIndex1(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %[[VAL_39]]) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i8>, i64, i1) -> i64
+! CHECK-DAG:  %[[BACKDECL:.*]]:2 = hlfir.declare %[[VAL_2]] {{.*}}uniq_name = "_QFtest_optionalEback"
+! CHECK-DAG:  %[[STRDECL:.*]]:2 = hlfir.declare %[[VAL_0]] {{.*}} {uniq_name = "_QFtest_optionalEstring"}
+! CHECK-DAG:  %[[SUBDECL:.*]]:2 = hlfir.declare {{.*}} {uniq_name = "_QFtest_optionalEsubstring"}
+! CHECK:  %[[ISPRES:.*]] = fir.is_present %[[BACKDECL]]#0
+! CHECK:  hlfir.elemental {{.*}} {
+! CHECK:    %[[ELEM:.*]] = hlfir.designate %[[STRDECL]]#0
+! CHECK:    fir.if %[[ISPRES]] -> (!fir.logical<4>) {
+! CHECK:      hlfir.designate %[[BACKDECL]]#0
+! CHECK:      fir.load
+! CHECK:    } else {
+! CHECK:      arith.constant false
+! CHECK:      fir.convert {{.*}} : (i1) -> !fir.logical<4>
+! CHECK:    }
+! CHECK:    hlfir.index %[[SUBDECL]]#0 in %[[ELEM]] back {{.*}} : (!fir.boxchar<1>, !fir.boxchar<1>, !fir.logical<4>) -> i32
 ! CHECK:  }
-! CHECK:  fir.array_merge_store
 end subroutine
diff --git a/flang/test/Lower/Intrinsics/iparity.f90 b/flang/test/Lower/Intrinsics/iparity.f90
index fab2b07e859c0..61d4ca76f38de 100644
--- a/flang/test/Lower/Intrinsics/iparity.f90
+++ b/flang/test/Lower/Intrinsics/iparity.f90
@@ -1,4 +1,4 @@
-! RUN: bbc --use-desc-for-alloc=false -emit-fir -hlfir=false %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
 
 ! CHECK-LABEL: func @_QPiparity_test_1(
 ! CHECK-SAME: %[[arg0:.*]]: !fir.box<!fir.array<?xi8>>{{.*}}) -> i8 {
@@ -6,7 +6,8 @@ integer(1) function iparity_test_1(a)
 integer(1) :: a(:)
 ! CHECK-DAG:  %[[c0:.*]] = arith.constant 0 : index
 ! CHECK-DAG:  %[[a1:.*]] = fir.absent !fir.box<i1>
-! CHECK-DAG: %[[a3:.*]] = fir.convert %[[arg0]] : (!fir.box<!fir.array<?xi8>>) -> !fir.box<none>
+! CHECK-DAG:  %[[adecl:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFiparity_test_1Ea"}
+! CHECK-DAG: %[[a3:.*]] = fir.convert %[[adecl]]#1 : (!fir.box<!fir.array<?xi8>>) -> !fir.box<none>
 ! CHECK-DAG:  %[[a5:.*]] = fir.convert %[[c0]] : (index) -> i32
 ! CHECK-DAG:  %[[a6:.*]] = fir.convert %[[a1]] : (!fir.box<i1>) -> !fir.box<none>
 iparity_test_1 = iparity(a)
@@ -19,7 +20,8 @@ integer(2) function iparity_test_2(a)
 integer(2) :: a(:)
 ! CHECK-DAG:  %[[c0:.*]] = arith.constant 0 : index
 ! CHECK-DAG:  %[[a1:.*]] = fir.absent !fir.box<i1>
-! CHECK-DAG: %[[a3:.*]] = fir.convert %[[arg0]] : (!fir.box<!fir.array<?xi16>>) -> !fir.box<none>
+! CHECK-DAG:  %[[adecl:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFiparity_test_2Ea"}
+! CHECK-DAG: %[[a3:.*]] = fir.convert %[[adecl]]#1 : (!fir.box<!fir.array<?xi16>>) -> !fir.box<none>
 ! CHECK-DAG:  %[[a5:.*]] = fir.convert %[[c0]] : (index) -> i32
 ! CHECK-DAG:  %[[a6:.*]] = fir.convert %[[a1]] : (!fir.box<i1>) -> !fir.box<none>
 iparity_test_2 = iparity(a)
@@ -32,7 +34,8 @@ integer function iparity_test_4(a)
 integer :: a(:)
 ! CHECK-DAG:  %[[c0:.*]] = arith.constant 0 : index
 ! CHECK-DAG:  %[[a1:.*]] = fir.absent !fir.box<i1>
-! CHECK-DAG: %[[a3:.*]] = fir.convert %[[arg0]] : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
+! CHECK-DAG:  %[[adecl:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFiparity_test_4Ea"}
+! CHECK-DAG: %[[a3:.*]] = fir.convert %[[adecl]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
 ! CHECK-DAG:  %[[a5:.*]] = fir.convert %[[c0]] : (index) -> i32
 ! CHECK-DAG:  %[[a6:.*]] = fir.convert %[[a1]] : (!fir.box<i1>) -> !fir.box<none>
 iparity_test_4 = iparity(a)
@@ -45,7 +48,8 @@ integer(8) function iparity_test_8(a)
 integer(8) :: a(:)
 ! CHECK-DAG:  %[[c0:.*]] = arith.constant 0 : index
 ! CHECK-DAG:  %[[a1:.*]] = fir.absent !fir.box<i1>
-! CHECK-DAG: %[[a3:.*]] = fir.convert %[[arg0]] : (!fir.box<!fir.array<?xi64>>) -> !fir.box<none>
+! CHECK-DAG:  %[[adecl:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFiparity_test_8Ea"}
+! CHECK-DAG: %[[a3:.*]] = fir.convert %[[adecl]]#1 : (!fir.box<!fir.array<?xi64>>) -> !fir.box<none>
 ! CHECK-DAG:  %[[a5:.*]] = fir.convert %[[c0]] : (index) -> i32
 ! CHECK-DAG:  %[[a6:.*]] = fir.convert %[[a1]] : (!fir.box<i1>) -> !fir.box<none>
 iparity_test_8 = iparity(a)
@@ -58,7 +62,8 @@ integer(16) function iparity_test_16(a)
 integer(16) :: a(:)
 ! CHECK-DAG:  %[[c0:.*]] = arith.constant 0 : index
 ! CHECK-DAG:  %[[a1:.*]] = fir.absent !fir.box<i1>
-! CHECK-DAG: %[[a3:.*]] = fir.convert %[[arg0]] : (!fir.box<!fir.array<?xi128>>) -> !fir.box<none>
+! CHECK-DAG:  %[[adecl:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFiparity_test_16Ea"}
+! CHECK-DAG: %[[a3:.*]] = fir.convert %[[adecl]]#1 : (!fir.box<!fir.array<?xi128>>) -> !fir.box<none>
 ! CHECK-DAG:  %[[a5:.*]] = fir.convert %[[c0]] : (index) -> i32
 ! CHECK-DAG:  %[[a6:.*]] = fir.convert %[[a1]] : (!fir.box<i1>) -> !fir.box<none>
 iparity_test_16 = iparity(a)
@@ -73,14 +78,12 @@ subroutine iparity_test2(a,r)
 ! CHECK-DAG:  %[[c2_i32:.*]] = arith.constant 2 : i32
 ! CHECK-DAG:  %[[a0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?xi32>>>
 ! CHECK-DAG:  %[[a1:.*]] = fir.absent !fir.box<i1>
+! CHECK-DAG:  %[[adecl:.*]]:2 = hlfir.declare %[[arg0]] {{.*}} {uniq_name = "_QFiparity_test2Ea"}
 ! CHECK-DAG:  %[[a6:.*]] = fir.convert %[[a0]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -> !fir.ref<!fir.box<none>>
-! CHECK-DAG:  %[[a7:.*]] = fir.convert %[[arg0]] : (!fir.box<!fir.array<?x?xi32>>) -> !fir.box<none>
+! CHECK-DAG:  %[[a7:.*]] = fir.convert %[[adecl]]#1 : (!fir.box<!fir.array<?x?xi32>>) -> !fir.box<none>
 ! CHECK-DAG:  %[[a9:.*]] = fir.convert %[[a1]] : (!fir.box<i1>) -> !fir.box<none>
 r = iparity(a,dim=2)
 ! CHECK:  fir.call @_FortranAIParityDim(%[[a6]], %[[a7]], %[[c2_i32]], %{{.*}}, %{{.*}}, %[[a9]]) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> ()
-! CHECK-DAG: %[[a11:.*]] = fir.load %[[a0]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
-! CHECK-DAG:  %[[a13:.*]] = fir.box_addr %[[a11]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
-! CHECK-DAG:  fir.freemem %[[a13]]
 end subroutine
 
 ! CHECK-LABEL: func @_QPiparity_test_optional(
@@ -89,8 +92,9 @@ integer function iparity_test_optional(mask, x)
 integer :: x(:)
 logical, optional :: mask(:)
 iparity_test_optional = iparity(x, mask=mask)
-! CHECK:  %[[VAL_9:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x!fir.logical<4>>>) -> !fir.box<none>
-! CHECK:  fir.call @_FortranAIParity4(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %[[VAL_9]]) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
+! CHECK:  %[[maskdecl:.*]]:2 = hlfir.declare %[[VAL_0]] {{.*}}uniq_name = "_QFiparity_test_optionalEmask"
+! CHECK:  %[[masknone:.*]] = fir.convert %[[maskdecl]]#1 : (!fir.box<!fir.array<?x!fir.logical<4>>>) -> !fir.box<none>
+! CHECK:  fir.call @_FortranAIParity4(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %[[masknone]]) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
 end function
 
 ! CHECK-LABEL: func @_QPiparity_test_optional_2(
@@ -99,12 +103,13 @@ integer function iparity_test_optional_2(mask, x)
 integer :: x(:)
 logical, pointer :: mask(:)
 iparity_test_optional_2 = iparity(x, mask=mask)
-! CHECK:  %[[VAL_4:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>>
+! CHECK:  %[[maskdecl:.*]]:2 = hlfir.declare %[[VAL_0]] {{.*}}uniq_name = "_QFiparity_test_optional_2Emask"
+! CHECK:  %[[VAL_4:.*]] = fir.load %[[maskdecl]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>>
 ! CHECK:  %[[VAL_5:.*]] = fir.box_addr %[[VAL_4]] : (!fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>) -> !fir.ptr<!fir.array<?x!fir.logical<4>>>
 ! CHECK:  %[[VAL_6:.*]] = fir.convert %[[VAL_5]] : (!fir.ptr<!fir.array<?x!fir.logical<4>>>) -> i64
 ! CHECK:  %[[VAL_7:.*]] = arith.constant 0 : i64
 ! CHECK:  %[[VAL_8:.*]] = arith.cmpi ne, %[[VAL_6]], %[[VAL_7]] : i64
-! CHECK:  %[[VAL_9:.*]] = fir.load %[[VAL_0]] : !fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>>
+! CHECK:  %[[VAL_9:.*]] = fir.load %[[maskdecl]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>>
 ! CHECK:  %[[VAL_10:.*]] = fir.absent !fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>
 ! CHECK:  %[[VAL_11:.*]] = arith.select %[[VAL_8]], %[[VAL_9]], %[[VAL_10]] : !fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>
 ! CHECK:  %[[VAL_18:.*]] = fir.convert %[[VAL_11]] : (!fir.box<!fir.ptr<!fir.array<?x!fir.logical<4>>>>) -> !fir.box<none>
@@ -118,9 +123,10 @@ integer function iparity_test_optional_3(mask, x)
 logical, optional :: mask(10)
 iparity_test_optional_3 = iparity(x, mask=mask)
 ! CHECK:  %[[VAL_2:.*]] = arith.constant 10 : index
-! CHECK:  %[[VAL_5:.*]] = fir.is_present %[[VAL_0]] : (!fir.ref<!fir.array<10x!fir.logical<4>>>) -> i1
+! CHECK:  %[[maskdecl:.*]]:2 = hlfir.declare %[[VAL_0]]{{.*}} {fortran_attrs = #fir.var_attrs<optional>, uniq_name = "_QFiparity_test_optional_3Emask"}
+! CHECK:  %[[VAL_5:.*]] = fir.is_present %[[maskdecl]]#0 : (!fir.ref<!fir.array<10x!fir.logical<4>>>) -> i1
 ! CHECK:  %[[VAL_6:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>
-! CHECK:  %[[VAL_7:.*]] = fir.embox %[[VAL_0]](%[[VAL_6]]) : (!fir.ref<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>) -> !fir.box<!fir.array<10x!fir.logical<4>>>
+! CHECK:  %[[VAL_7:.*]] = fir.embox %[[maskdecl]]#0(%[[VAL_6]]) : (!fir.ref<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>) -> !fir.box<!fir.array<10x!fir.logical<4>>>
 ! CHECK:  %[[VAL_8:.*]] = fir.absent !fir.box<!fir.array<10x!fir.logical<4>>>
 ! CHECK:  %[[VAL_9:.*]] = arith.select %[[VAL_5]], %[[VAL_7]], %[[VAL_8]] : !fir.box<!fir.array<10x!fir.logical<4>>>
 ! CHECK:  %[[VAL_18:.*]] = fir.convert %[[VAL_9]] : (!fir.box<!fir.array<10x!fir.logical<4>>>) -> !fir.box<none>
@@ -140,17 +146,11 @@ integer function iparity_test_optional_4(x, use_mask)
   ! CHECK: fir.call @_QPset_mask
 end if
 iparity_test_optional_4 = iparity(x, mask=mask)
-! CHECK:  %[[VAL_20:.*]] = fir.load %[[VAL_3:.*]] : !fir.ref<!fir.heap<!fir.array<?x!fir.logical<4>>>>
-! CHECK:  %[[VAL_21:.*]] = fir.convert %[[VAL_20]] : (!fir.heap<!fir.array<?x!fir.logical<4>>>) -> i64
-! CHECK:  %[[VAL_22:.*]] = arith.constant 0 : i64
-! CHECK:  %[[VAL_23:.*]] = arith.cmpi ne, %[[VAL_21]], %[[VAL_22]] : i64
-! CHECK:  %[[VAL_24:.*]] = fir.load %[[VAL_4:.*]] : !fir.ref<index>
-! CHECK:  %[[VAL_25:.*]] = fir.load %[[VAL_5:.*]] : !fir.ref<index>
-! CHECK:  %[[VAL_26:.*]] = fir.load %[[VAL_3]] : !fir.ref<!fir.heap<!fir.array<?x!fir.logical<4>>>>
-! CHECK:  %[[VAL_27:.*]] = fir.shape_shift %[[VAL_24]], %[[VAL_25]] : (index, index) -> !fir.shapeshift<1>
-! CHECK:  %[[VAL_28:.*]] = fir.embox %[[VAL_26]](%[[VAL_27]]) : (!fir.heap<!fir.array<?x!fir.logical<4>>>, !fir.shapeshift<1>) -> !fir.box<!fir.array<?x!fir.logical<4>>>
-! CHECK:  %[[VAL_29:.*]] = fir.absent !fir.box<!fir.array<?x!fir.logical<4>>>
-! CHECK:  %[[VAL_30:.*]] = arith.select %[[VAL_23]], %[[VAL_28]], %[[VAL_29]] : !fir.box<!fir.array<?x!fir.logical<4>>>
-! CHECK:  %[[VAL_37:.*]] = fir.convert %[[VAL_30]] : (!fir.box<!fir.array<?x!fir.logical<4>>>) -> !fir.box<none>
-! CHECK:  fir.call @_FortranAIParity4(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %[[VAL_37]]) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
+! CHECK:  %[[maskbox:.*]] = fir.load %{{.*}} : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.logical<4>>>>>
+! CHECK:  %[[maskaddr:.*]] = fir.box_addr %[[maskbox]] : (!fir.box<!fir.heap<!fir.array<?x!fir.logical<4>>>>) -> !fir.heap<!fir.array<?x!fir.logical<4>>>
+! CHECK:  %[[maskint:.*]] = fir.convert %[[maskaddr]] : (!fir.heap<!fir.array<?x!fir.logical<4>>>) -> i64
+! CHECK:  %[[zero:.*]] = arith.constant 0 : i64
+! CHECK:  %[[isalloc:.*]] = arith.cmpi ne, %[[maskint]], %[[zero]] : i64
+! CHECK:  arith.select %[[isalloc]], {{.*}} : !fir.box<!fir.array<?x!fir.logical<4>>>
+! CHECK:  fir.call @_FortranAIParity4(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
 end function
diff --git a/flang/test/Lower/Intrinsics/is_contiguous.f90 b/flang/test/Lower/Intrinsics/is_contiguous.f90
index 67843d98b3d1f..7d8d5f415356d 100644
--- a/flang/test/Lower/Intrinsics/is_contiguous.f90
+++ b/flang/test/Lower/Intrinsics/is_contiguous.f90
@@ -1,21 +1,22 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
 
 ! CHECK-LABEL: func.func @_QPtest_is_contiguous(
 ! CHECK-SAME:                                   %[[VAL_0:.*]]: !fir.box<!fir.array<?xf32>> {fir.bindc_name = "a"}) {
-! CHECK:         %[[VAL_1:.*]] = fir.alloca !fir.logical<4> {adapt.valuebyref}
-! CHECK:         %[[VAL_2:.*]] = fir.alloca !fir.logical<4> {adapt.valuebyref}
-! CHECK:         %[[VAL_5:.*]] = fir.alloca !fir.box<!fir.ptr<!fir.array<?xf32>>> {bindc_name = "p", uniq_name = "_QFtest_is_contiguousEp"}
-! CHECK:         %[[VAL_42:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none>
+! CHECK:         %[[ADECL:.*]]:2 = hlfir.declare %[[VAL_0]] {{.*}} {uniq_name = "_QFtest_is_contiguousEa"}
+! CHECK:         %[[PDECL:.*]]:2 = hlfir.declare {{.*}} {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFtest_is_contiguousEp"}
+! CHECK:         %[[VAL_42:.*]] = fir.convert %[[ADECL]]#1 : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none>
 ! CHECK:         %[[VAL_43:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_42]]) {{.*}} : (!fir.box<none>) -> i1
 ! CHECK:         %[[VAL_44:.*]] = fir.convert %[[VAL_43]] : (i1) -> !fir.logical<4>
-! CHECK:         fir.store %[[VAL_44]] to %[[VAL_2]] : !fir.ref<!fir.logical<4>>
-! CHECK:         fir.call @_QPfoo1(%[[VAL_2]]) {{.*}} : (!fir.ref<!fir.logical<4>>) -> ()
-! CHECK:         %[[VAL_45:.*]] = fir.load %[[VAL_5]] : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>
+! CHECK:         %[[ASSOC1:.*]]:3 = hlfir.associate %[[VAL_44]] {adapt.valuebyref}
+! CHECK:         fir.call @_QPfoo1(%[[ASSOC1]]#0) {{.*}} : (!fir.ref<!fir.logical<4>>) -> ()
+! CHECK:         hlfir.end_associate %[[ASSOC1]]#1, %[[ASSOC1]]#2
+! CHECK:         %[[VAL_45:.*]] = fir.load %[[PDECL]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xf32>>>>
 ! CHECK:         %[[VAL_46:.*]] = fir.convert %[[VAL_45]] : (!fir.box<!fir.ptr<!fir.array<?xf32>>>) -> !fir.box<none>
 ! CHECK:         %[[VAL_47:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_46]]) {{.*}} : (!fir.box<none>) -> i1
 ! CHECK:         %[[VAL_48:.*]] = fir.convert %[[VAL_47]] : (i1) -> !fir.logical<4>
-! CHECK:         fir.store %[[VAL_48]] to %[[VAL_1]] : !fir.ref<!fir.logical<4>>
-! CHECK:         fir.call @_QPfoo2(%[[VAL_1]]) {{.*}} : (!fir.ref<!fir.logical<4>>) -> ()
+! CHECK:         %[[ASSOC2:.*]]:3 = hlfir.associate %[[VAL_48]] {adapt.valuebyref}
+! CHECK:         fir.call @_QPfoo2(%[[ASSOC2]]#0) {{.*}} : (!fir.ref<!fir.logical<4>>) -> ()
+! CHECK:         hlfir.end_associate %[[ASSOC2]]#1, %[[ASSOC2]]#2
 ! CHECK:         return
 ! CHECK:       }
 



More information about the flang-commits mailing list