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

Eugene Epshteyn via flang-commits flang-commits at lists.llvm.org
Mon Mar 9 18:26:04 PDT 2026


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

Tests converted from test/Lower/Intrinsics: dreal.f90, dshiftl.f90, dshiftr.f90, eoshift.f90, erfc_scaled.f90

>From 641fba3a5cd59cf9cdf1c38bfa35119a88fa9263 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Mon, 9 Mar 2026 21:24:33 -0400
Subject: [PATCH] [flang][NFC] Converted five tests from old lowering to new
 lowering (part 28)

Tests converted from test/Lower/Intrinsics: dreal.f90, dshiftl.f90, dshiftr.f90, eoshift.f90, erfc_scaled.f90
---
 flang/test/Lower/Intrinsics/dreal.f90       |  11 +-
 flang/test/Lower/Intrinsics/dshiftl.f90     |  73 +++++++---
 flang/test/Lower/Intrinsics/dshiftr.f90     |  73 +++++++---
 flang/test/Lower/Intrinsics/eoshift.f90     | 150 +++++++++-----------
 flang/test/Lower/Intrinsics/erfc_scaled.f90 |  36 +++--
 5 files changed, 198 insertions(+), 145 deletions(-)

diff --git a/flang/test/Lower/Intrinsics/dreal.f90 b/flang/test/Lower/Intrinsics/dreal.f90
index c911bc9fea59d..13d8cabba9e64 100644
--- a/flang/test/Lower/Intrinsics/dreal.f90
+++ b/flang/test/Lower/Intrinsics/dreal.f90
@@ -1,15 +1,18 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
 
 subroutine test_dreal(r, c)
   real(8), intent(out) :: r
   complex(8), intent(in) :: c
 
-! CHECK-LABEL: func @_QPtest_dreal(
+! CHECK-LABEL: func.func @_QPtest_dreal(
 ! CHECK-SAME: %[[ARG_0:.*]]: !fir.ref<f64> {fir.bindc_name = "r"},
 ! CHECK-SAME: %[[ARG_1:.*]]: !fir.ref<complex<f64>> {fir.bindc_name = "c"}) {
-! CHECK:   %[[VAL_0:.*]] = fir.load %[[ARG_1]] : !fir.ref<complex<f64>>
+! CHECK:   %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+! CHECK:   %[[C:.*]]:2 = hlfir.declare %[[ARG_1]] dummy_scope %[[DS]]
+! CHECK:   %[[R:.*]]:2 = hlfir.declare %[[ARG_0]] dummy_scope %[[DS]]
+! CHECK:   %[[VAL_0:.*]] = fir.load %[[C]]#0 : !fir.ref<complex<f64>>
 ! CHECK:   %[[VAL_1:.*]] = fir.extract_value %[[VAL_0]], [0 : index] : (complex<f64>) -> f64
-! CHECK:   fir.store %[[VAL_1]] to %[[ARG_0]] : !fir.ref<f64>
+! CHECK:   hlfir.assign %[[VAL_1]] to %[[R]]#0 : f64, !fir.ref<f64>
 ! CHECK:   return
 ! CHECK: }
 
diff --git a/flang/test/Lower/Intrinsics/dshiftl.f90 b/flang/test/Lower/Intrinsics/dshiftl.f90
index 8fd642df2e3bc..9a48a7d0244fc 100644
--- a/flang/test/Lower/Intrinsics/dshiftl.f90
+++ b/flang/test/Lower/Intrinsics/dshiftl.f90
@@ -1,16 +1,20 @@
-! 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: dshiftl1_test
+! CHECK-LABEL: func.func @_QPdshiftl1_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i8>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i8>{{.*}}
 subroutine dshiftl1_test(a, b, s, c)
   integer(kind=1) :: a, b
   integer :: s
   integer(kind=1) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i8>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i8>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i8>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i8>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftl(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i8
   ! CHECK: %[[C_BITS:.*]] = arith.constant 8 : i8
@@ -30,18 +34,24 @@ subroutine dshiftl1_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[DIFF]] : i8
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i8
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i8
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i8, !fir.ref<i8>
 end subroutine dshiftl1_test
 
-! CHECK-LABEL: dshiftl2_test
+! CHECK-LABEL: func.func @_QPdshiftl2_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i16>{{.*}}, %[[B:.*]]: !fir.ref<i16>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i16>{{.*}}
 subroutine dshiftl2_test(a, b, s, c)
   integer(kind=2) :: a, b
   integer :: s
   integer(kind=2) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i16>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i16>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i16>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftl(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i16
   ! CHECK: %[[C_BITS:.*]] = arith.constant 16 : i16
@@ -61,18 +71,24 @@ subroutine dshiftl2_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[DIFF]] : i16
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i16
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i16
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i16, !fir.ref<i16>
 end subroutine dshiftl2_test
 
-! CHECK-LABEL: dshiftl4_test
+! CHECK-LABEL: func.func @_QPdshiftl4_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i32>{{.*}}
 subroutine dshiftl4_test(a, b, s, c)
   integer(kind=4) :: a, b
   integer :: s
   integer(kind=4) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i32>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftl(a, b, s)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 32 : i32
   ! CHECK: %[[DIFF:.*]] = arith.subi %[[C_BITS]], %[[S_VAL]] : i32
@@ -91,18 +107,24 @@ subroutine dshiftl4_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[DIFF]] : i32
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i32
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i32
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i32, !fir.ref<i32>
 end subroutine dshiftl4_test
 
-! CHECK-LABEL: dshiftl8_test
+! CHECK-LABEL: func.func @_QPdshiftl8_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i64>{{.*}}, %[[B:.*]]: !fir.ref<i64>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i64>{{.*}}
 subroutine dshiftl8_test(a, b, s, c)
   integer(kind=8) :: a, b
   integer :: s
   integer(kind=8) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i64>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i64>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i64>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftl(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i64
   ! CHECK: %[[C_BITS:.*]] = arith.constant 64 : i64
@@ -122,18 +144,24 @@ subroutine dshiftl8_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[DIFF]] : i64
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i64
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i64
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i64, !fir.ref<i64>
 end subroutine dshiftl8_test
 
-! CHECK-LABEL: dshiftl16_test
+! CHECK-LABEL: func.func @_QPdshiftl16_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i128>{{.*}}, %[[B:.*]]: !fir.ref<i128>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i128>{{.*}}
 subroutine dshiftl16_test(a, b, s, c)
   integer(kind=16) :: a, b
   integer :: s
   integer(kind=16) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i128>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i128>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i128>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftl(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i128
   ! CHECK: %[[C_BITS:.*]] = arith.constant 128 : i128
@@ -153,4 +181,5 @@ subroutine dshiftl16_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[DIFF]] : i128
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i128
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i128
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i128, !fir.ref<i128>
 end subroutine dshiftl16_test
diff --git a/flang/test/Lower/Intrinsics/dshiftr.f90 b/flang/test/Lower/Intrinsics/dshiftr.f90
index 891f2fc54d04b..55d2cb841aa50 100644
--- a/flang/test/Lower/Intrinsics/dshiftr.f90
+++ b/flang/test/Lower/Intrinsics/dshiftr.f90
@@ -1,16 +1,20 @@
-! 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: dshiftr1_test
+! CHECK-LABEL: func.func @_QPdshiftr1_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i8>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i8>{{.*}}
 subroutine dshiftr1_test(a, b, s, c)
   integer(kind=1) :: a, b
   integer :: s
   integer(kind=1) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i8>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i8>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i8>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i8>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftr(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i8
   ! CHECK: %[[C_BITS:.*]] = arith.constant 8 : i8
@@ -30,18 +34,24 @@ subroutine dshiftr1_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[S_CONV]] : i8
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i8
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i8
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i8, !fir.ref<i8>
 end subroutine dshiftr1_test
 
-! CHECK-LABEL: dshiftr2_test
+! CHECK-LABEL: func.func @_QPdshiftr2_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i16>{{.*}}, %[[B:.*]]: !fir.ref<i16>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i16>{{.*}}
 subroutine dshiftr2_test(a, b, s, c)
   integer(kind=2) :: a, b
   integer :: s
   integer(kind=2) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i16>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i16>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i16>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftr(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i16
   ! CHECK: %[[C_BITS:.*]] = arith.constant 16 : i16
@@ -61,18 +71,24 @@ subroutine dshiftr2_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[S_CONV]] : i16
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i16
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i16
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i16, !fir.ref<i16>
 end subroutine dshiftr2_test
 
-! CHECK-LABEL: dshiftr4_test
+! CHECK-LABEL: func.func @_QPdshiftr4_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i32>{{.*}}
 subroutine dshiftr4_test(a, b, s, c)
   integer(kind=4) :: a, b
   integer :: s
   integer(kind=4) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i32>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i32>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftr(a, b, s)
   ! CHECK: %[[C_BITS:.*]] = arith.constant 32 : i32
   ! CHECK: %[[DIFF:.*]] = arith.subi %[[C_BITS]], %[[S_VAL]] : i32
@@ -91,18 +107,24 @@ subroutine dshiftr4_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[S_VAL]] : i32
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i32
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i32
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i32, !fir.ref<i32>
 end subroutine dshiftr4_test
 
-! CHECK-LABEL: dshiftr8_test
+! CHECK-LABEL: func.func @_QPdshiftr8_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i64>{{.*}}, %[[B:.*]]: !fir.ref<i64>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i64>{{.*}}
 subroutine dshiftr8_test(a, b, s, c)
   integer(kind=8) :: a, b
   integer :: s
   integer(kind=8) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i64>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i64>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i64>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftr(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i64
   ! CHECK: %[[C_BITS:.*]] = arith.constant 64 : i64
@@ -122,18 +144,24 @@ subroutine dshiftr8_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[S_CONV]] : i64
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i64
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i64
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i64, !fir.ref<i64>
 end subroutine dshiftr8_test
 
-! CHECK-LABEL: dshiftr16_test
+! CHECK-LABEL: func.func @_QPdshiftr16_test(
 ! CHECK-SAME: %[[A:.*]]: !fir.ref<i128>{{.*}}, %[[B:.*]]: !fir.ref<i128>{{.*}}, %[[S:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i128>{{.*}}
 subroutine dshiftr16_test(a, b, s, c)
   integer(kind=16) :: a, b
   integer :: s
   integer(kind=16) :: c
 
-  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128>
-  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i128>
-  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S]] : !fir.ref<i32>
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] dummy_scope %[[DS]]
+  ! CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] dummy_scope %[[DS]]
+  ! CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] dummy_scope %[[DS]]
+  ! CHECK: %[[S_DECL:.*]]:2 = hlfir.declare %[[S]] dummy_scope %[[DS]]
+  ! CHECK: %[[A_VAL:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<i128>
+  ! CHECK: %[[B_VAL:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<i128>
+  ! CHECK: %[[S_VAL:.*]] = fir.load %[[S_DECL]]#0 : !fir.ref<i32>
   c = dshiftr(a, b, s)
   ! CHECK: %[[S_CONV:.*]] = fir.convert %[[S_VAL]] : (i32) -> i128
   ! CHECK: %[[C_BITS:.*]] = arith.constant 128 : i128
@@ -153,4 +181,5 @@ subroutine dshiftr16_test(a, b, s, c)
   ! CHECK: %[[SHR:.*]] = arith.shrui %[[B_VAL]], %[[S_CONV]] : i128
   ! CHECK: %[[RGT:.*]] = arith.select %[[INV_R]], %[[C_0_R]], %[[SHR]] : i128
   ! CHECK: %[[SHIFT:.*]] = arith.ori %[[LFT]], %[[RGT]] : i128
+  ! CHECK: hlfir.assign %[[SHIFT]] to %[[C_DECL]]#0 : i128, !fir.ref<i128>
 end subroutine dshiftr16_test
diff --git a/flang/test/Lower/Intrinsics/eoshift.f90 b/flang/test/Lower/Intrinsics/eoshift.f90
index 4f01ce989c9f0..9a7141ed676e1 100644
--- a/flang/test/Lower/Intrinsics/eoshift.f90
+++ b/flang/test/Lower/Intrinsics/eoshift.f90
@@ -1,94 +1,72 @@
-! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
+! RUN: %flang_fc1 -emit-hlfir %s -o - | FileCheck %s
 
-! CHECK-LABEL: eoshift_test1
+! CHECK-LABEL: func.func @_QPeoshift_test1(
+! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.array<3x!fir.logical<4>>>{{.*}}, %[[ARG1:.*]]: !fir.ref<i32>{{.*}})
 subroutine eoshift_test1(arr, shift)
     logical, dimension(3) :: arr, res
     integer :: shift
-  ! CHECK: %[[resBox:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x!fir.logical<4>>>>
-  ! CHECK: %[[res:.*]] = fir.alloca !fir.array<3x!fir.logical<4>> {bindc_name = "res", uniq_name = "_QFeoshift_test1Eres"}
-  ! CHECK: %[[resLoad:.*]] = fir.array_load %[[res]]({{.*}}) : (!fir.ref<!fir.array<3x!fir.logical<4>>>, !fir.shape<1>) -> !fir.array<3x!fir.logical<4>>
-  ! CHECK: %[[arr:.*]] = fir.embox %arg0({{.*}}) : (!fir.ref<!fir.array<3x!fir.logical<4>>>, !fir.shape<1>) -> !fir.box<!fir.array<3x!fir.logical<4>>>
-  ! CHECK: %[[bits:.*]] = fir.zero_bits !fir.heap<!fir.array<?x!fir.logical<4>>>
-  ! CHECK: %[[init:.*]] = fir.embox %[[bits]]({{.*}}) : (!fir.heap<!fir.array<?x!fir.logical<4>>>, !fir.shape<1>) -> !fir.box<!fir.heap<!fir.array<?x!fir.logical<4>>>>
-  ! CHECK: fir.store %[[init]] to %[[resBox]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.logical<4>>>>>
-  ! CHECK:  %[[boundBox:.*]] = fir.absent !fir.box<none>
-  ! CHECK: %[[shift:.*]] = fir.load %arg1 : !fir.ref<i32>
-
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[ARR_DECL:.*]]:2 = hlfir.declare %[[ARG0]]
+  ! CHECK: %[[RES_ALLOC:.*]] = fir.alloca !fir.array<3x!fir.logical<4>>
+  ! CHECK: %[[RES_DECL:.*]]:2 = hlfir.declare %[[RES_ALLOC]]
+  ! CHECK: %[[SHIFT_DECL:.*]]:2 = hlfir.declare %[[ARG1]]
+  ! CHECK: %[[EXPR:.*]] = hlfir.eoshift %[[ARR_DECL]]#0 %[[SHIFT_DECL]]#0 : (!fir.ref<!fir.array<3x!fir.logical<4>>>, !fir.ref<i32>) -> !hlfir.expr<3x!fir.logical<4>>
+  ! CHECK: hlfir.assign %[[EXPR]] to %[[RES_DECL]]#0 : !hlfir.expr<3x!fir.logical<4>>, !fir.ref<!fir.array<3x!fir.logical<4>>>
+  ! CHECK: hlfir.destroy %[[EXPR]] : !hlfir.expr<3x!fir.logical<4>>
     res = eoshift(arr, shift)
+end subroutine eoshift_test1
 
-  ! CHECK: %[[resIRBox:.*]] = fir.convert %[[resBox]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.logical<4>>>>>) -> !fir.ref<!fir.box<none>>
-  ! CHECK: %[[arrBox:.*]] = fir.convert %[[arr]] : (!fir.box<!fir.array<3x!fir.logical<4>>>) -> !fir.box<none>
-  ! CHECK: %[[shiftBox:.*]] = fir.convert %[[shift]] : (i32) -> i64
-  ! CHECK: fir.call @_FortranAEoshiftVector(%[[resIRBox]], %[[arrBox]], %[[shiftBox]], %[[boundBox]], {{.*}}, {{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, i64, !fir.box<none>, !fir.ref<i8>, i32) -> ()
-  ! CHECK: fir.array_merge_store %[[resLoad]], {{.*}} to %[[res]] : !fir.array<3x!fir.logical<4>>, !fir.array<3x!fir.logical<4>>, !fir.ref<!fir.array<3x!fir.logical<4>>>
-  end subroutine eoshift_test1
-
-  ! CHECK-LABEL: eoshift_test2
-  subroutine eoshift_test2(arr, shift, bound, dim)
-    integer, dimension(3,3) :: arr, res
-    integer, dimension(3) :: shift
-    integer :: bound, dim
-  ! CHECK: %[[resBox:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x?xi32>>>
-  ! CHECK: %[[res:.*]] = fir.alloca !fir.array<3x3xi32> {bindc_name = "res", uniq_name = "_QFeoshift_test2Eres"}
-  !CHECK: %[[resLoad:.*]] = fir.array_load %[[res]]({{.*}}) : (!fir.ref<!fir.array<3x3xi32>>, !fir.shape<2>) -> !fir.array<3x3xi32>
-
-    res = eoshift(arr, shift, bound, dim)
-
-  ! CHECK: %[[arr:.*]] = fir.embox %arg0({{.*}}) : (!fir.ref<!fir.array<3x3xi32>>, !fir.shape<2>) -> !fir.box<!fir.array<3x3xi32>>
-  ! CHECK: %[[boundBox:.*]] = fir.embox %arg2 : (!fir.ref<i32>) -> !fir.box<i32>
-  ! CHECK: %[[dim:.*]] = fir.load %arg3 : !fir.ref<i32>
-  ! CHECK: %[[shiftBox:.*]] = fir.embox %arg1({{.*}}) : (!fir.ref<!fir.array<3xi32>>, !fir.shape<1>) -> !fir.box<!fir.array<3xi32>>
-  ! CHECK: %[[resIRBox:.*]] = fir.convert %[[resBox]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?xi32>>>>) -> !fir.ref<!fir.box<none>>
-  ! CHECK: %[[arrBox:.*]] = fir.convert %[[arr]] : (!fir.box<!fir.array<3x3xi32>>) -> !fir.box<none>
-  ! CHECK: %[[shiftBoxNone:.*]] = fir.convert %[[shiftBox]] : (!fir.box<!fir.array<3xi32>>) -> !fir.box<none>
-  ! CHECK: %[[boundBoxNone:.*]] = fir.convert %[[boundBox]] : (!fir.box<i32>) -> !fir.box<none>
-
-  ! CHECK: fir.call @_FortranAEoshift(%[[resIRBox]], %[[arrBox]], %[[shiftBoxNone]], %[[boundBoxNone]], %[[dim]], {{.*}}, {{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.box<none>, i32, !fir.ref<i8>, i32) -> ()
-  ! CHECK: fir.array_merge_store %[[resLoad]], {{.*}} to %[[res]] : !fir.array<3x3xi32>, !fir.array<3x3xi32>, !fir.ref<!fir.array<3x3xi32>>
-  end subroutine eoshift_test2
+! CHECK-LABEL: func.func @_QPeoshift_test2(
+! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.array<3x3xi32>>{{.*}}, %[[ARG1:.*]]: !fir.ref<!fir.array<3xi32>>{{.*}}, %[[ARG2:.*]]: !fir.ref<i32>{{.*}}, %[[ARG3:.*]]: !fir.ref<i32>{{.*}})
+subroutine eoshift_test2(arr, shift, bound, dim)
+  integer, dimension(3,3) :: arr, res
+  integer, dimension(3) :: shift
+  integer :: bound, dim
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[ARR_DECL:.*]]:2 = hlfir.declare %[[ARG0]]
+  ! CHECK: %[[BOUND_DECL:.*]]:2 = hlfir.declare %[[ARG2]]
+  ! CHECK: %[[DIM_DECL:.*]]:2 = hlfir.declare %[[ARG3]]
+  ! CHECK: %[[RES_ALLOC:.*]] = fir.alloca !fir.array<3x3xi32>
+  ! CHECK: %[[RES_DECL:.*]]:2 = hlfir.declare %[[RES_ALLOC]]
+  ! CHECK: %[[SHIFT_DECL:.*]]:2 = hlfir.declare %[[ARG1]]
+  ! CHECK: %[[DIM_VAL:.*]] = fir.load %[[DIM_DECL]]#0 : !fir.ref<i32>
+  ! CHECK: %[[EXPR:.*]] = hlfir.eoshift %[[ARR_DECL]]#0 %[[SHIFT_DECL]]#0 boundary %[[BOUND_DECL]]#0 dim %[[DIM_VAL]] : (!fir.ref<!fir.array<3x3xi32>>, !fir.ref<!fir.array<3xi32>>, !fir.ref<i32>, i32) -> !hlfir.expr<3x3xi32>
+  ! CHECK: hlfir.assign %[[EXPR]] to %[[RES_DECL]]#0 : !hlfir.expr<3x3xi32>, !fir.ref<!fir.array<3x3xi32>>
+  ! CHECK: hlfir.destroy %[[EXPR]] : !hlfir.expr<3x3xi32>
+  res = eoshift(arr, shift, bound, dim)
+end subroutine eoshift_test2
 
-  ! CHECK-LABEL: eoshift_test3
-  subroutine eoshift_test3(arr, shift, dim)
-    character(4), dimension(3,3) :: arr, res
-    integer :: shift, dim
+! CHECK-LABEL: func.func @_QPeoshift_test3(
+! CHECK-SAME: %[[ARG0:.*]]: !fir.boxchar<1>{{.*}}, %[[ARG1:.*]]: !fir.ref<i32>{{.*}}, %[[ARG2:.*]]: !fir.ref<i32>{{.*}})
+subroutine eoshift_test3(arr, shift, dim)
+  character(4), dimension(3,3) :: arr, res
+  integer :: shift, dim
+  ! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+  ! CHECK: %[[UNBOX:.*]]:2 = fir.unboxchar %[[ARG0]]
+  ! CHECK: %[[ARR_DECL:.*]]:2 = hlfir.declare %{{.*}}({{.*}}) typeparams %{{.*}} dummy_scope %[[DS]]
+  ! CHECK: %[[DIM_DECL:.*]]:2 = hlfir.declare %[[ARG2]]
+  ! CHECK: %[[RES_ALLOC:.*]] = fir.alloca !fir.array<3x3x!fir.char<1,4>>
+  ! CHECK: %[[RES_DECL:.*]]:2 = hlfir.declare %[[RES_ALLOC]]({{.*}}) typeparams %{{.*}}
+  ! CHECK: %[[SHIFT_DECL:.*]]:2 = hlfir.declare %[[ARG1]]
+  ! CHECK: %[[DIM_VAL:.*]] = fir.load %[[DIM_DECL]]#0 : !fir.ref<i32>
+  ! CHECK: %[[EXPR:.*]] = hlfir.eoshift %[[ARR_DECL]]#0 %[[SHIFT_DECL]]#0 dim %[[DIM_VAL]] : (!fir.ref<!fir.array<3x3x!fir.char<1,4>>>, !fir.ref<i32>, i32) -> !hlfir.expr<3x3x!fir.char<1,4>>
+  ! CHECK: hlfir.assign %[[EXPR]] to %[[RES_DECL]]#0 : !hlfir.expr<3x3x!fir.char<1,4>>, !fir.ref<!fir.array<3x3x!fir.char<1,4>>>
+  ! CHECK: hlfir.destroy %[[EXPR]] : !hlfir.expr<3x3x!fir.char<1,4>>
+  res = eoshift(arr, SHIFT=shift, DIM=dim)
+end subroutine eoshift_test3
 
-  ! CHECK: %[[resBox:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x?x!fir.char<1,4>>>>
-  ! CHECK: %[[arr:.*]]:2 = fir.unboxchar %arg0 : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
-  ! CHECK: %[[array:.*]] = fir.convert %[[arr]]#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<!fir.array<3x3x!fir.char<1,4>>>
-  ! CHECK: %[[res:.*]] = fir.alloca !fir.array<3x3x!fir.char<1,4>> {bindc_name = "res", uniq_name = "_QFeoshift_test3Eres"}
-  ! CHECK: %[[resLoad:.*]] = fir.array_load %[[res]]({{.*}}) : (!fir.ref<!fir.array<3x3x!fir.char<1,4>>>, !fir.shape<2>) -> !fir.array<3x3x!fir.char<1,4>>
-  ! CHECK: %[[arrayBox:.*]] = fir.embox %[[array]]({{.*}}) : (!fir.ref<!fir.array<3x3x!fir.char<1,4>>>, !fir.shape<2>) -> !fir.box<!fir.array<3x3x!fir.char<1,4>>>
-  ! CHECK: %[[dim:.*]] = fir.load %arg2 : !fir.ref<i32>
-
-    res = eoshift(arr, SHIFT=shift, DIM=dim)
-
-  ! CHECK: %[[boundBox:.*]] = fir.absent !fir.box<none>
-  ! CHECK: %[[shiftBox:.*]] = fir.embox %arg1 : (!fir.ref<i32>) -> !fir.box<i32>
-  ! CHECK: %[[resIRBox:.*]] = fir.convert %[[resBox]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?x!fir.char<1,4>>>>>) -> !fir.ref<!fir.box<none>>
-  ! CHECK: %[[arrayBoxNone:.*]] = fir.convert %[[arrayBox]] : (!fir.box<!fir.array<3x3x!fir.char<1,4>>>) -> !fir.box<none>
-  ! CHECK: %[[shiftBoxNone:.*]] = fir.convert %[[shiftBox]] : (!fir.box<i32>) -> !fir.box<none>
-  ! CHECK: fir.call @_FortranAEoshift(%[[resIRBox]], %[[arrayBoxNone]], %[[shiftBoxNone]], %[[boundBox]], %[[dim]], {{.*}}, {{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.box<none>, i32, !fir.ref<i8>, i32) -> ()
-  ! CHECK: fir.array_merge_store %[[resLoad]], {{.*}} to %[[res]] : !fir.array<3x3x!fir.char<1,4>>, !fir.array<3x3x!fir.char<1,4>>, !fir.ref<!fir.array<3x3x!fir.char<1,4>>>
-  end subroutine eoshift_test3
-
-  ! CHECK-LABEL: func @_QPeoshift_test_dynamic_optional(
-  ! CHECK-SAME:  %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xi32>>
-  ! CHECK-SAME:  %[[VAL_1:.*]]: !fir.ref<i32>
-  ! CHECK-SAME:  %[[VAL_2:.*]]: !fir.ref<!fir.array<10xi32>>
-  subroutine eoshift_test_dynamic_optional(array, shift, boundary)
-    type t
-      integer :: i
-    end type
-    integer :: array(:, :)
-    integer :: shift
-    integer, optional :: boundary(10)
-    call next(eoshift(array, shift, boundary))
-  ! CHECK:  %[[VAL_4:.*]] = arith.constant 10 : index
-  ! CHECK:  %[[VAL_5:.*]] = fir.is_present %[[VAL_2]] : (!fir.ref<!fir.array<10xi32>>) -> i1
-  ! CHECK:  %[[VAL_6:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>
-  ! CHECK:  %[[VAL_7:.*]] = fir.embox %[[VAL_2]](%[[VAL_6]]) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.box<!fir.array<10xi32>>
-  ! CHECK:  %[[VAL_8:.*]] = fir.absent !fir.box<!fir.array<10xi32>>
-  ! CHECK:  %[[VAL_9:.*]] = arith.select %[[VAL_5]], %[[VAL_7]], %[[VAL_8]] : !fir.box<!fir.array<10xi32>>
-  ! CHECK:  %[[VAL_21:.*]] = fir.convert %[[VAL_9]] : (!fir.box<!fir.array<10xi32>>) -> !fir.box<none>
-  ! CHECK:  fir.call @_FortranAEoshift(%{{.*}}, %{{.*}}, %{{.*}}, %[[VAL_21]], %{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.box<none>, i32, !fir.ref<i8>, i32) -> ()
-  end subroutine
+! CHECK-LABEL: func.func @_QPeoshift_test_dynamic_optional(
+! CHECK-SAME:  %[[ARG0:.*]]: !fir.box<!fir.array<?x?xi32>>{{.*}}, %[[ARG1:.*]]: !fir.ref<i32>{{.*}}, %[[ARG2:.*]]: !fir.ref<!fir.array<10xi32>>{{.*}} {fir.bindc_name = "boundary", fir.optional})
+subroutine eoshift_test_dynamic_optional(array, shift, boundary)
+  integer :: array(:, :)
+  integer :: shift
+  integer, optional :: boundary(10)
+  ! CHECK: %[[ARRAY_DECL:.*]]:2 = hlfir.declare %[[ARG0]]
+  ! CHECK: %[[BOUND_DECL:.*]]:2 = hlfir.declare %[[ARG2]]({{.*}})
+  ! CHECK: %[[SHIFT_DECL:.*]]:2 = hlfir.declare %[[ARG1]]
+  ! CHECK: %[[EXPR:.*]] = hlfir.eoshift %[[ARRAY_DECL]]#0 %[[SHIFT_DECL]]#0 boundary %{{.*}} : (!fir.box<!fir.array<?x?xi32>>, !fir.ref<i32>, !fir.box<!fir.array<10xi32>>) -> !hlfir.expr<?x?xi32>
+  ! CHECK: hlfir.associate %[[EXPR]]
+  ! CHECK: fir.call @_QPnext(
+  ! CHECK: hlfir.destroy %[[EXPR]]
+  call next(eoshift(array, shift, boundary))
+end subroutine
diff --git a/flang/test/Lower/Intrinsics/erfc_scaled.f90 b/flang/test/Lower/Intrinsics/erfc_scaled.f90
index f30f316176f38..657c9fb6b2b23 100644
--- a/flang/test/Lower/Intrinsics/erfc_scaled.f90
+++ b/flang/test/Lower/Intrinsics/erfc_scaled.f90
@@ -1,34 +1,48 @@
-! 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 @_QPerfc_scaled4(
+! CHECK-LABEL: func.func @_QPerfc_scaled4(
 ! CHECK-SAME: %[[x:[^:]+]]: !fir.ref<f32>{{.*}}) -> f32
 function erfc_scaled4(x)
   real(kind=4) :: erfc_scaled4
   real(kind=4) :: x
   erfc_scaled4 = erfc_scaled(x);
-! CHECK: %[[a1:.*]] = fir.load %[[x]] : !fir.ref<f32>
-! CHECK: %{{.*}} = fir.call @_FortranAErfcScaled4(%[[a1]]) {{.*}}: (f32) -> f32
+! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+! CHECK: %[[RET_ALLOC:.*]] = fir.alloca f32
+! CHECK: %[[RET_DECL:.*]]:2 = hlfir.declare %[[RET_ALLOC]]
+! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[x]] dummy_scope %[[DS]]
+! CHECK: %[[a1:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<f32>
+! CHECK: %[[VAL:.*]] = fir.call @_FortranAErfcScaled4(%[[a1]]) {{.*}}: (f32) -> f32
+! CHECK: hlfir.assign %[[VAL]] to %[[RET_DECL]]#0
 end function erfc_scaled4
 
 
-! CHECK-LABEL: func @_QPerfc_scaled8(
+! CHECK-LABEL: func.func @_QPerfc_scaled8(
 ! CHECK-SAME: %[[x:[^:]+]]: !fir.ref<f64>{{.*}}) -> f64
 function erfc_scaled8(x)
   real(kind=8) :: erfc_scaled8
   real(kind=8) :: x
   erfc_scaled8 = erfc_scaled(x);
-! CHECK: %[[a1:.*]] = fir.load %[[x]] : !fir.ref<f64>
-! CHECK: %{{.*}} = fir.call @_FortranAErfcScaled8(%[[a1]]) {{.*}}: (f64) -> f64
+! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+! CHECK: %[[RET_ALLOC:.*]] = fir.alloca f64
+! CHECK: %[[RET_DECL:.*]]:2 = hlfir.declare %[[RET_ALLOC]]
+! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[x]] dummy_scope %[[DS]]
+! CHECK: %[[a1:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<f64>
+! CHECK: %[[VAL:.*]] = fir.call @_FortranAErfcScaled8(%[[a1]]) {{.*}}: (f64) -> f64
+! CHECK: hlfir.assign %[[VAL]] to %[[RET_DECL]]#0
 end function erfc_scaled8
 
 
-! CHECK-LABEL: func @_QPderfc_scaled8(
+! CHECK-LABEL: func.func @_QPderfc_scaled8(
 ! CHECK-SAME: %[[x:[^:]+]]: !fir.ref<f64>{{.*}}) -> f64
 function derfc_scaled8(x)
   real(kind=8) :: derfc_scaled8
   real(kind=8) :: x
   derfc_scaled8 = derfc_scaled(x);
-! CHECK: %[[a1:.*]] = fir.load %[[x]] : !fir.ref<f64>
-! CHECK: %{{.*}} = fir.call @_FortranAErfcScaled8(%[[a1]]) {{.*}}: (f64) -> f64
+! CHECK: %[[DS:.*]] = fir.dummy_scope : !fir.dscope
+! CHECK: %[[RET_ALLOC:.*]] = fir.alloca f64
+! CHECK: %[[RET_DECL:.*]]:2 = hlfir.declare %[[RET_ALLOC]]
+! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[x]] dummy_scope %[[DS]]
+! CHECK: %[[a1:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<f64>
+! CHECK: %[[VAL:.*]] = fir.call @_FortranAErfcScaled8(%[[a1]]) {{.*}}: (f64) -> f64
+! CHECK: hlfir.assign %[[VAL]] to %[[RET_DECL]]#0
 end function derfc_scaled8



More information about the flang-commits mailing list