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

Eugene Epshteyn via flang-commits flang-commits at lists.llvm.org
Sun Apr 5 20:08:21 PDT 2026


https://github.com/eugeneepshteyn created https://github.com/llvm/llvm-project/pull/190575

Tests converted from test/Lower/Intrinsics: shifta.f90, shiftl.f90, shiftr.f90, size.f90, spread.f90

>From 2f60a20f9bfd56db33ca0f06a281695b373e5e7a Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Sun, 5 Apr 2026 23:06:54 -0400
Subject: [PATCH] [flang][NFC] Converted five tests from old lowering to new
 lowering (part 41)

Tests converted from test/Lower/Intrinsics: shifta.f90, shiftl.f90, shiftr.f90, size.f90, spread.f90
---
 flang/test/Lower/Intrinsics/shifta.f90 |  53 ++++++++----
 flang/test/Lower/Intrinsics/shiftl.f90 |  43 ++++++---
 flang/test/Lower/Intrinsics/shiftr.f90 |  43 ++++++---
 flang/test/Lower/Intrinsics/size.f90   | 115 ++++++++++++-------------
 flang/test/Lower/Intrinsics/spread.f90 |  33 +++----
 5 files changed, 169 insertions(+), 118 deletions(-)

diff --git a/flang/test/Lower/Intrinsics/shifta.f90 b/flang/test/Lower/Intrinsics/shifta.f90
index ac72c535460ff..009fb6f5db66b 100644
--- a/flang/test/Lower/Intrinsics/shifta.f90
+++ b/flang/test/Lower/Intrinsics/shifta.f90
@@ -1,5 +1,4 @@
-! 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: shifta1_test
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i8>{{.*}}
@@ -8,8 +7,11 @@ subroutine shifta1_test(a, b, c)
   integer :: b
   integer(kind=1) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i8>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i8>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shifta(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 8 : i8
   ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i8
@@ -19,7 +21,8 @@ subroutine shifta1_test(a, b, c)
   ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i8
   ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i8
   ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i8
-  ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i8
+  ! CHECK: %[[SEL:.*]] = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i8
+  ! CHECK: hlfir.assign %[[SEL]] to %[[C_DECL]]#0 : i8, !fir.ref<i8>
 end subroutine shifta1_test
 
 ! CHECK-LABEL: shifta2_test
@@ -29,8 +32,11 @@ subroutine shifta2_test(a, b, c)
   integer :: b
   integer(kind=2) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i16>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shifta(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 16 : i16
   ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i16
@@ -40,7 +46,8 @@ subroutine shifta2_test(a, b, c)
   ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i16
   ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i16
   ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i16
-  ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i16
+  ! CHECK: %[[SEL:.*]] = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i16
+  ! CHECK: hlfir.assign %[[SEL]] to %[[C_DECL]]#0 : i16, !fir.ref<i16>
 end subroutine shifta2_test
 
 ! CHECK-LABEL: shifta4_test
@@ -50,8 +57,11 @@ subroutine shifta4_test(a, b, c)
   integer :: b
   integer(kind=4) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i32>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shifta(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 32 : i32
   ! CHECK: %[[SHIFT_IS_BITWIDTH:.*]] = arith.cmpi uge, %[[B_VAL]], %[[C_BITS]] : i32
@@ -60,7 +70,8 @@ subroutine shifta4_test(a, b, c)
   ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i32
   ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i32
   ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_VAL]] : i32
-  ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i32
+  ! CHECK: %[[SEL:.*]] = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i32
+  ! CHECK: hlfir.assign %[[SEL]] to %[[C_DECL]]#0 : i32, !fir.ref<i32>
 end subroutine shifta4_test
 
 ! CHECK-LABEL: shifta8_test
@@ -70,8 +81,11 @@ subroutine shifta8_test(a, b, c)
   integer :: b
   integer(kind=8) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i64>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shifta(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 64 : i64
   ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i64
@@ -81,7 +95,8 @@ subroutine shifta8_test(a, b, c)
   ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i64
   ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i64
   ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i64
-  ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i64
+  ! CHECK: %[[SEL:.*]] = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i64
+  ! CHECK: hlfir.assign %[[SEL]] to %[[C_DECL]]#0 : i64, !fir.ref<i64>
 end subroutine shifta8_test
 
 ! CHECK-LABEL: shifta16_test
@@ -91,8 +106,11 @@ subroutine shifta16_test(a, b, c)
   integer :: b
   integer(kind=16) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i128>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shifta(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 128 : i128
   ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i128
@@ -102,5 +120,6 @@ subroutine shifta16_test(a, b, c)
   ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i128
   ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i128
   ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i128
-  ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i128
+  ! CHECK: %[[SEL:.*]] = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i128
+  ! CHECK: hlfir.assign %[[SEL]] to %[[C_DECL]]#0 : i128, !fir.ref<i128>
 end subroutine shifta16_test
diff --git a/flang/test/Lower/Intrinsics/shiftl.f90 b/flang/test/Lower/Intrinsics/shiftl.f90
index 846072734959a..8e1f7cd88607d 100644
--- a/flang/test/Lower/Intrinsics/shiftl.f90
+++ b/flang/test/Lower/Intrinsics/shiftl.f90
@@ -1,5 +1,4 @@
-! 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: shiftl1_test
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i8>{{.*}}
@@ -8,8 +7,11 @@ subroutine shiftl1_test(a, b, c)
   integer :: b
   integer(kind=1) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i8>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i8>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftl(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 8 : i8
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i8
@@ -19,6 +21,7 @@ subroutine shiftl1_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shli %[[A_VAL]], %[[B_CONV]] : i8
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i8
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i8, !fir.ref<i8>
 end subroutine shiftl1_test
 
 ! CHECK-LABEL: shiftl2_test
@@ -28,8 +31,11 @@ subroutine shiftl2_test(a, b, c)
   integer :: b
   integer(kind=2) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i16>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftl(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 16 : i16
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i16
@@ -39,6 +45,7 @@ subroutine shiftl2_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shli %[[A_VAL]], %[[B_CONV]] : i16
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i16
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i16, !fir.ref<i16>
 end subroutine shiftl2_test
 
 ! CHECK-LABEL: shiftl4_test
@@ -48,8 +55,11 @@ subroutine shiftl4_test(a, b, c)
   integer :: b
   integer(kind=4) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i32>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftl(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 32 : i32
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i32
@@ -58,6 +68,7 @@ subroutine shiftl4_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shli %[[A_VAL]], %[[B_VAL]] : i32
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i32
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i32, !fir.ref<i32>
 end subroutine shiftl4_test
 
 ! CHECK-LABEL: shiftl8_test
@@ -67,8 +78,11 @@ subroutine shiftl8_test(a, b, c)
   integer :: b
   integer(kind=8) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i64>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftl(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 64 : i64
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i64
@@ -78,6 +92,7 @@ subroutine shiftl8_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shli %[[A_VAL]], %[[B_CONV]] : i64
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i64
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i64, !fir.ref<i64>
 end subroutine shiftl8_test
 
 ! CHECK-LABEL: shiftl16_test
@@ -87,8 +102,11 @@ subroutine shiftl16_test(a, b, c)
   integer :: b
   integer(kind=16) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i128>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftl(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 128 : i128
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i128
@@ -98,4 +116,5 @@ subroutine shiftl16_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shli %[[A_VAL]], %[[B_CONV]] : i128
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i128
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i128, !fir.ref<i128>
 end subroutine shiftl16_test
diff --git a/flang/test/Lower/Intrinsics/shiftr.f90 b/flang/test/Lower/Intrinsics/shiftr.f90
index e6c62845c2039..48ff93f1a6411 100644
--- a/flang/test/Lower/Intrinsics/shiftr.f90
+++ b/flang/test/Lower/Intrinsics/shiftr.f90
@@ -1,5 +1,4 @@
-! 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: shiftr1_test
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i8>{{.*}}
@@ -8,8 +7,11 @@ subroutine shiftr1_test(a, b, c)
   integer :: b
   integer(kind=1) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i8>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i8>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftr(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 8 : i8
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i8
@@ -19,6 +21,7 @@ subroutine shiftr1_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i8
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i8
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i8, !fir.ref<i8>
 end subroutine shiftr1_test
 
 ! CHECK-LABEL: shiftr2_test
@@ -28,8 +31,11 @@ subroutine shiftr2_test(a, b, c)
   integer :: b
   integer(kind=2) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i16>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftr(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 16 : i16
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i16
@@ -39,6 +45,7 @@ subroutine shiftr2_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i16
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i16
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i16, !fir.ref<i16>
 end subroutine shiftr2_test
 
 ! CHECK-LABEL: shiftr4_test
@@ -48,8 +55,11 @@ subroutine shiftr4_test(a, b, c)
   integer :: b
   integer(kind=4) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i32>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftr(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 32 : i32
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i32
@@ -58,6 +68,7 @@ subroutine shiftr4_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_VAL]] : i32
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i32
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i32, !fir.ref<i32>
 end subroutine shiftr4_test
 
 ! CHECK-LABEL: shiftr8_test
@@ -67,8 +78,11 @@ subroutine shiftr8_test(a, b, c)
   integer :: b
   integer(kind=8) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i64>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftr(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 64 : i64
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i64
@@ -78,6 +92,7 @@ subroutine shiftr8_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i64
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i64
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i64, !fir.ref<i64>
 end subroutine shiftr8_test
 
 ! CHECK-LABEL: shiftr16_test
@@ -87,8 +102,11 @@ subroutine shiftr16_test(a, b, c)
   integer :: b
   integer(kind=16) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
+  ! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]]
+  ! CHECK-DAG: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]]
+  ! CHECK-DAG: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]]
+  ! CHECK-DAG: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i128>
+  ! CHECK-DAG: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
   c = shiftr(a, b)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 128 : i128
   ! CHECK: %[[C_0:.*]] = arith.constant 0 : i128
@@ -98,4 +116,5 @@ subroutine shiftr16_test(a, b, c)
   ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i1
   ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i128
   ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i128
+  ! CHECK: hlfir.assign %[[RES]] to %[[C_DECL]]#0 : i128, !fir.ref<i128>
 end subroutine shiftr16_test
diff --git a/flang/test/Lower/Intrinsics/size.f90 b/flang/test/Lower/Intrinsics/size.f90
index 36fb462472570..e0c2922c0251f 100644
--- a/flang/test/Lower/Intrinsics/size.f90
+++ b/flang/test/Lower/Intrinsics/size.f90
@@ -1,48 +1,33 @@
-! 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 @_QPsize_test() {
 subroutine size_test()
   real, dimension(1:10, -10:10) :: a
   integer :: dim = 1
   integer :: iSize
-! CHECK:         %[[VAL_c1:.*]] = arith.constant 1 : index
-! CHECK:         %[[VAL_c10:.*]] = arith.constant 10 : index
-! CHECK:         %[[VAL_cneg10:.*]] = arith.constant -10 : index
-! CHECK:         %[[VAL_c21:.*]] = arith.constant 21 : index
 ! CHECK:         %[[VAL_0:.*]] = fir.alloca !fir.array<10x21xf32> {bindc_name = "a", uniq_name = "_QFsize_testEa"}
-! CHECK:         %[[VAL_1:.*]] = fir.address_of(@_QFsize_testEdim) : !fir.ref<i32>
-! CHECK:         %[[VAL_2:.*]] = fir.alloca i32 {bindc_name = "isize", uniq_name = "_QFsize_testEisize"}
-! CHECK:         %[[VAL_c2_i64:.*]] = arith.constant 2 : i64
-! CHECK:         %[[VAL_3:.*]] = fir.convert %[[VAL_c2_i64]] : (i64) -> index
-! CHECK:         %[[VAL_c1_i64:.*]] = arith.constant 1 : i64
-! CHECK:         %[[VAL_4:.*]] = fir.convert %[[VAL_c1_i64]] : (i64) -> index
-! CHECK:         %[[VAL_c5_i64:.*]] = arith.constant 5 : i64
-! CHECK:         %[[VAL_5:.*]] = fir.convert %[[VAL_c5_i64]] : (i64) -> index
-! CHECK:         %[[VAL_neg1_i64:.*]] = arith.constant -1 : i64
-! CHECK:         %[[VAL_6:.*]] = fir.convert %[[VAL_neg1_i64]] : (i64) -> index
-! CHECK:         %[[VAL_c1_i64_0:.*]] = arith.constant 1 : i64
-! CHECK:         %[[VAL_7:.*]] = fir.convert %[[VAL_c1_i64_0]] : (i64) -> index
-! CHECK:         %[[VAL_c1_i64_1:.*]] = arith.constant 1 : i64
-! CHECK:         %[[VAL_8:.*]] = fir.convert %[[VAL_c1_i64_1]] : (i64) -> index
-! CHECK:         %[[VAL_9:.*]] = fir.shape_shift %[[VAL_c1]], %[[VAL_c10]], %[[VAL_cneg10]], %[[VAL_c21]] : (index, index, index, index) -> !fir.shapeshift<2>
-! CHECK:         %[[VAL_10:.*]] = fir.slice %[[VAL_3]], %[[VAL_5]], %[[VAL_4]], %[[VAL_6]], %[[VAL_8]], %[[VAL_7]] : (index, index, index, index, index, index) -> !fir.slice<2>
-! CHECK:         %[[VAL_11:.*]] = fir.embox %[[VAL_0]](%[[VAL_9]]) [%[[VAL_10]]] : (!fir.ref<!fir.array<10x21xf32>>, !fir.shapeshift<2>, !fir.slice<2>) -> !fir.box<!fir.array<4x3xf32>>
-! CHECK:         %[[VAL_12:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i32>) -> i64
-! CHECK:         %[[c0_i64:.*]] = arith.constant 0 : i64
-! CHECK:         %[[VAL_13:.*]] = arith.cmpi eq, %[[VAL_12]], %[[c0_i64]] : i64
-! CHECK:         %[[VAL_14:.*]] = fir.if %[[VAL_13]] -> (i64) {
-! CHECK:           %[[VAL_17:.*]] = fir.convert %[[VAL_11]] : (!fir.box<!fir.array<4x3xf32>>) -> !fir.box<none>
-! CHECK:           %[[VAL_19:.*]] = fir.call @_FortranASize(%[[VAL_17]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32) -> i64
-! CHECK:           fir.result %[[VAL_19]] : i64
+! CHECK:         %[[VAL_SS:.*]] = fir.shape_shift %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : (index, index, index, index) -> !fir.shapeshift<2>
+! CHECK:         %[[A_DECL:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_SS]]) {uniq_name = "_QFsize_testEa"}
+! CHECK:         %[[DIM_ADDR:.*]] = fir.address_of(@_QFsize_testEdim) : !fir.ref<i32>
+! CHECK:         %[[DIM_DECL:.*]]:2 = hlfir.declare %[[DIM_ADDR]] {uniq_name = "_QFsize_testEdim"}
+! CHECK:         %[[ISIZE_ALLOC:.*]] = fir.alloca i32 {bindc_name = "isize", uniq_name = "_QFsize_testEisize"}
+! CHECK:         %[[ISIZE_DECL:.*]]:2 = hlfir.declare %[[ISIZE_ALLOC]] {uniq_name = "_QFsize_testEisize"}
+! CHECK:         %[[SLICE_RESULT:.*]] = hlfir.designate %[[A_DECL]]#0 (%{{.*}}:%{{.*}}:%{{.*}}, %{{.*}}:%{{.*}}:%{{.*}})  shape %{{.*}}
+! CHECK:         %[[DIM_PTR:.*]] = fir.convert %[[DIM_DECL]]#0 : (!fir.ref<i32>) -> i64
+! CHECK:         %[[C0_I64:.*]] = arith.constant 0 : i64
+! CHECK:         %[[IS_ABSENT:.*]] = arith.cmpi eq, %[[DIM_PTR]], %[[C0_I64]] : i64
+! CHECK:         %[[SIZE_RESULT:.*]] = fir.if %[[IS_ABSENT]] -> (i64) {
+! CHECK:           %[[BOX1:.*]] = fir.convert %[[SLICE_RESULT]] : ({{.*}}) -> !fir.box<none>
+! CHECK:           %[[SZ1:.*]] = fir.call @_FortranASize(%[[BOX1]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32) -> i64
+! CHECK:           fir.result %[[SZ1]] : i64
 ! CHECK:         } else {
-! CHECK:           %[[VAL_16:.*]] = fir.load %[[VAL_1]] : !fir.ref<i32>
-! CHECK:           %[[VAL_18:.*]] = fir.convert %[[VAL_11]] : (!fir.box<!fir.array<4x3xf32>>) -> !fir.box<none>
-! CHECK:           %[[VAL_20:.*]] = fir.call @_FortranASizeDim(%[[VAL_18]], %[[VAL_16]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
-! CHECK:           fir.result %[[VAL_20]] : i64
+! CHECK:           %[[DIM_VAL:.*]] = fir.load %[[DIM_DECL]]#0 : !fir.ref<i32>
+! CHECK:           %[[BOX2:.*]] = fir.convert %[[SLICE_RESULT]] : ({{.*}}) -> !fir.box<none>
+! CHECK:           %[[SZ2:.*]] = fir.call @_FortranASizeDim(%[[BOX2]], %[[DIM_VAL]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
+! CHECK:           fir.result %[[SZ2]] : i64
 ! CHECK:         }
-! CHECK:         %[[VAL_21:.*]] = fir.convert %[[VAL_14]] : (i64) -> i32
-! CHECK:         fir.store %[[VAL_21]] to %[[VAL_2]] : !fir.ref<i32>
+! CHECK:         %[[SIZE_I32:.*]] = fir.convert %[[SIZE_RESULT]] : (i64) -> i32
+! CHECK:         hlfir.assign %[[SIZE_I32]] to %[[ISIZE_DECL]]#0 : i32, !fir.ref<i32>
   iSize = size(a(2:5, -1:1), dim, 8)
 end subroutine size_test
 
@@ -55,20 +40,23 @@ subroutine size_optional_dim_1(array, dim, iSize)
   integer, optional :: dim
   integer(8) :: iSize
   iSize = size(array, dim, 8)
-! CHECK:         %[[VAL_3:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i32>) -> i64
-! CHECK:         %[[VAL_4:.*]] = arith.constant 0 : i64
-! CHECK:         %[[VAL_5:.*]] = arith.cmpi eq, %[[VAL_3]], %[[VAL_4]] : i64
-! CHECK:         %[[VAL_6:.*]] = fir.if %[[VAL_5]] -> (i64) {
-! CHECK:           %[[VAL_9:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
-! CHECK:           %[[VAL_11:.*]] = fir.call @_FortranASize(%[[VAL_9]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32) -> i64
-! CHECK:           fir.result %[[VAL_11]] : i64
+! CHECK-DAG:     %[[ARRAY_DECL:.*]]:2 = hlfir.declare %[[VAL_0]]
+! CHECK-DAG:     %[[DIM_DECL:.*]]:2 = hlfir.declare %[[VAL_1]]
+! CHECK-DAG:     %[[ISIZE_DECL:.*]]:2 = hlfir.declare %[[VAL_2]]
+! CHECK:         %[[DIM_I64:.*]] = fir.convert %[[DIM_DECL]]#0 : (!fir.ref<i32>) -> i64
+! CHECK:         %[[C0:.*]] = arith.constant 0 : i64
+! CHECK:         %[[IS_ABSENT:.*]] = arith.cmpi eq, %[[DIM_I64]], %[[C0]] : i64
+! CHECK:         %[[RESULT:.*]] = fir.if %[[IS_ABSENT]] -> (i64) {
+! CHECK:           %[[BOX1:.*]] = fir.convert %[[ARRAY_DECL]]#1 : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
+! CHECK:           %[[SZ1:.*]] = fir.call @_FortranASize(%[[BOX1]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32) -> i64
+! CHECK:           fir.result %[[SZ1]] : i64
 ! CHECK:         } else {
-! CHECK:           %[[VAL_12:.*]] = fir.load %[[VAL_1]] : !fir.ref<i32>
-! CHECK:           %[[VAL_15:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
-! CHECK:           %[[VAL_17:.*]] = fir.call @_FortranASizeDim(%[[VAL_15]], %[[VAL_12]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
-! CHECK:           fir.result %[[VAL_17]] : i64
+! CHECK:           %[[DIM_VAL:.*]] = fir.load %[[DIM_DECL]]#0 : !fir.ref<i32>
+! CHECK:           %[[BOX2:.*]] = fir.convert %[[ARRAY_DECL]]#1 : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
+! CHECK:           %[[SZ2:.*]] = fir.call @_FortranASizeDim(%[[BOX2]], %[[DIM_VAL]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
+! CHECK:           fir.result %[[SZ2]] : i64
 ! CHECK:         }
-! CHECK:         fir.store %[[VAL_6]] to %[[VAL_2]] : !fir.ref<i64>
+! CHECK:         hlfir.assign %[[RESULT]] to %[[ISIZE_DECL]]#0 : i64, !fir.ref<i64>
 end subroutine
 
 ! CHECK-LABEL: func @_QPsize_optional_dim_2(
@@ -80,20 +68,23 @@ subroutine size_optional_dim_2(array, dim, iSize)
   integer, pointer :: dim
   integer(8) :: iSize
   iSize = size(array, dim, 8)
-! CHECK:         %[[VAL_3:.*]] = fir.load %[[VAL_1]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
-! CHECK:         %[[VAL_4:.*]] = fir.box_addr %[[VAL_3]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
-! CHECK:         %[[VAL_5:.*]] = fir.convert %[[VAL_4]] : (!fir.ptr<i32>) -> i64
-! CHECK:         %[[VAL_6:.*]] = arith.constant 0 : i64
-! CHECK:         %[[VAL_7:.*]] = arith.cmpi eq, %[[VAL_5]], %[[VAL_6]] : i64
-! CHECK:         %[[VAL_8:.*]] = fir.if %[[VAL_7]] -> (i64) {
-! CHECK:           %[[VAL_11:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
-! CHECK:           %[[VAL_13:.*]] = fir.call @_FortranASize(%[[VAL_11]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32) -> i64
-! CHECK:           fir.result %[[VAL_13]] : i64
+! CHECK-DAG:     %[[ARRAY_DECL:.*]]:2 = hlfir.declare %[[VAL_0]]
+! CHECK-DAG:     %[[DIM_DECL:.*]]:2 = hlfir.declare %[[VAL_1]]
+! CHECK-DAG:     %[[ISIZE_DECL:.*]]:2 = hlfir.declare %[[VAL_2]]
+! CHECK:         %[[DIM_BOX:.*]] = fir.load %[[DIM_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
+! CHECK:         %[[DIM_PTR:.*]] = fir.box_addr %[[DIM_BOX]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
+! CHECK:         %[[DIM_I64:.*]] = fir.convert %[[DIM_PTR]] : (!fir.ptr<i32>) -> i64
+! CHECK:         %[[C0:.*]] = arith.constant 0 : i64
+! CHECK:         %[[IS_ABSENT:.*]] = arith.cmpi eq, %[[DIM_I64]], %[[C0]] : i64
+! CHECK:         %[[RESULT:.*]] = fir.if %[[IS_ABSENT]] -> (i64) {
+! CHECK:           %[[BOX1:.*]] = fir.convert %[[ARRAY_DECL]]#1 : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
+! CHECK:           %[[SZ1:.*]] = fir.call @_FortranASize(%[[BOX1]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, !fir.ref<i8>, i32) -> i64
+! CHECK:           fir.result %[[SZ1]] : i64
 ! CHECK:         } else {
-! CHECK:           %[[VAL_14:.*]] = fir.load %[[VAL_4]] : !fir.ptr<i32>
-! CHECK:           %[[VAL_17:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
-! CHECK:           %[[VAL_19:.*]] = fir.call @_FortranASizeDim(%[[VAL_17]], %[[VAL_14]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
-! CHECK:           fir.result %[[VAL_19]] : i64
+! CHECK:           %[[DIM_VAL:.*]] = fir.load %[[DIM_PTR]] : !fir.ptr<i32>
+! CHECK:           %[[BOX2:.*]] = fir.convert %[[ARRAY_DECL]]#1 : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
+! CHECK:           %[[SZ2:.*]] = fir.call @_FortranASizeDim(%[[BOX2]], %[[DIM_VAL]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.box<none>, i32, !fir.ref<i8>, i32) -> i64
+! CHECK:           fir.result %[[SZ2]] : i64
 ! CHECK:         }
-! CHECK:         fir.store %[[VAL_8]] to %[[VAL_2]] : !fir.ref<i64>
+! CHECK:         hlfir.assign %[[RESULT]] to %[[ISIZE_DECL]]#0 : i64, !fir.ref<i64>
 end subroutine
diff --git a/flang/test/Lower/Intrinsics/spread.f90 b/flang/test/Lower/Intrinsics/spread.f90
index d4d16a6637767..996670b0ce36a 100644
--- a/flang/test/Lower/Intrinsics/spread.f90
+++ b/flang/test/Lower/Intrinsics/spread.f90
@@ -1,4 +1,4 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
 
 module spread_mod
 
@@ -18,17 +18,18 @@ subroutine spread_test(s,d,n,r)
     integer :: s,d,n
     integer :: r(:)
   ! CHECK-DAG:  %[[a0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?xi32>>>
-  ! CHECK-DAG:  %[[a1:.*]] = fir.load %[[arg1]] : !fir.ref<i32>
-  ! CHECK-DAG:  %[[a2:.*]] = fir.load %[[arg2]] : !fir.ref<i32>
-  ! CHECK-DAG:  %[[a3:.*]] = fir.embox %[[arg0]] : (!fir.ref<i32>) -> !fir.box<i32>
+  ! CHECK-DAG:  %[[d_decl:.*]]:2 = hlfir.declare %[[arg1]]
+  ! CHECK-DAG:  %[[n_decl:.*]]:2 = hlfir.declare %[[arg2]]
+  ! CHECK-DAG:  %[[s_decl:.*]]:2 = hlfir.declare %[[arg0]]
+  ! CHECK-DAG:  %[[a1:.*]] = fir.load %[[d_decl]]#0 : !fir.ref<i32>
+  ! CHECK-DAG:  %[[a2:.*]] = fir.load %[[n_decl]]#0 : !fir.ref<i32>
+  ! CHECK-DAG:  %[[a3:.*]] = fir.embox %[[s_decl]]#0 : (!fir.ref<i32>) -> !fir.box<i32>
   ! CHECK-DAG:  %[[a8:.*]] = fir.convert %[[a0]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -> !fir.ref<!fir.box<none>>
   ! CHECK-DAG:  %[[a9:.*]] = fir.convert %[[a3]] : (!fir.box<i32>) -> !fir.box<none>
   ! CHECK-DAG:  %[[a10:.*]] = fir.convert %[[a2]] : (i32) -> i64
     r = spread(s,d,n)
   ! CHECK:  fir.call @_FortranASpread(%[[a8]], %[[a9]], %[[a1]], %[[a10]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, i64, !fir.ref<i8>, i32) -> ()
-  ! CHECK-DAG:  %[[a13:.*]] = fir.load %[[a0]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
-  ! CHECK-DAG:  %[[a15:.*]] = fir.box_addr %[[a13]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
-  ! CHECK:  fir.freemem %[[a15]]
+  ! CHECK:  hlfir.assign %{{.*}} to %{{.*}}
 end subroutine
 
 ! CHECK-LABEL: func @_QMspread_modPspread_test2(
@@ -37,16 +38,17 @@ subroutine spread_test2(s,d,n,r)
     integer :: s(:),d,n
     integer :: r(:,:)
   ! CHECK-DAG:  %[[a0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x?xi32>>>
-  ! CHECK-DAG:  %[[a1:.*]] = fir.load %[[arg1]] : !fir.ref<i32>
-  ! CHECK-DAG:  %[[a2:.*]] = fir.load %[[arg2]] : !fir.ref<i32>
+  ! CHECK-DAG:  %[[d_decl:.*]]:2 = hlfir.declare %[[arg1]]
+  ! CHECK-DAG:  %[[n_decl:.*]]:2 = hlfir.declare %[[arg2]]
+  ! CHECK-DAG:  %[[s_decl:.*]]:2 = hlfir.declare %[[arg0]]
+  ! CHECK-DAG:  %[[a1:.*]] = fir.load %[[d_decl]]#0 : !fir.ref<i32>
+  ! CHECK-DAG:  %[[a2:.*]] = fir.load %[[n_decl]]#0 : !fir.ref<i32>
   ! CHECK-DAG:  %[[a7:.*]] = fir.convert %[[a0]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?xi32>>>>) -> !fir.ref<!fir.box<none>>
-  ! CHECK-DAG:  %[[a8:.*]] = fir.convert %[[arg0]] : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
+  ! CHECK-DAG:  %[[a8:.*]] = fir.convert %[[s_decl]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
   ! CHECK-DAG:  %[[a9:.*]] = fir.convert %[[a2]] : (i32) -> i64
     r = spread(s,d,n)
   ! CHECK:  fir.call @_FortranASpread(%[[a7]], %[[a8]], %[[a1]], %[[a9]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, i64, !fir.ref<i8>, i32) -> ()
-  ! CHECK-DAG:  %[[a12:.*]] = fir.load %[[a0]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?x?xi32>>>>
-  ! CHECK-DAG:  %[[a15:.*]] = fir.box_addr %[[a12]] : (!fir.box<!fir.heap<!fir.array<?x?xi32>>>) -> !fir.heap<!fir.array<?x?xi32>>
-  ! CHECK:  fir.freemem %[[a15:.*]]
+  ! CHECK:  hlfir.assign %{{.*}} to %{{.*}}
 end subroutine
 
 ! CHECK-LABEL: func.func @_QMspread_modPspread_test_polymorphic_source(
@@ -56,8 +58,9 @@ subroutine spread_test_polymorphic_source(p)
   class(*), allocatable :: r(:,:,:)
   r = spread(p(:,::2), dim=1, ncopies=2)
 ! CHECK: %[[res:.*]] = fir.alloca !fir.class<!fir.heap<!fir.array<?x?x?xnone>>>
-! CHECK: %[[load_p:.*]] = fir.load %[[arg0]] : !fir.ref<!fir.class<!fir.ptr<!fir.array<?x?xnone>>>>
-! CHECK: %[[source_box:.*]] = fir.rebox %[[load_p]](%{{.*}}) [%{{.*}}] : (!fir.class<!fir.ptr<!fir.array<?x?xnone>>>, !fir.shift<2>, !fir.slice<2>) -> !fir.class<!fir.array<?x?xnone>>
+! CHECK: %[[p_decl:.*]]:2 = hlfir.declare %[[arg0]]
+! CHECK: %[[load_p:.*]] = fir.load %[[p_decl]]#0 : !fir.ref<!fir.class<!fir.ptr<!fir.array<?x?xnone>>>>
+! CHECK: %[[source_box:.*]] = hlfir.designate %[[load_p]] (%{{.*}}:%{{.*}}:%{{.*}}, %{{.*}}:%{{.*}}:%{{.*}})  shape %{{.*}} : (!fir.class<!fir.ptr<!fir.array<?x?xnone>>>, {{.*}}) -> !fir.class<!fir.array<?x?xnone>>
 ! CHECK: %[[embox:.*]] = fir.embox %{{.*}}(%{{.*}}) source_box %[[source_box]] : (!fir.heap<!fir.array<?x?x?xnone>>, !fir.shape<3>, !fir.class<!fir.array<?x?xnone>>) -> !fir.class<!fir.heap<!fir.array<?x?x?xnone>>>
 ! CHECK: fir.store %[[embox]] to %[[res]] : !fir.ref<!fir.class<!fir.heap<!fir.array<?x?x?xnone>>>>
 ! CHECK: %[[res_box_none:.*]] = fir.convert %[[res]] : (!fir.ref<!fir.class<!fir.heap<!fir.array<?x?x?xnone>>>>) -> !fir.ref<!fir.box<none>>



More information about the flang-commits mailing list