1 ! Test that scalar expressions are not hoisted from WHERE loops
2 ! when they do not appear
3 ! RUN: bbc -hlfir -o - -pass-pipeline="builtin.module(lower-hlfir-ordered-assignments)" %s | FileCheck %s
5 subroutine do_not_hoist_div(n
, mask
, a
)
10 ! CHECK-LABEL: func.func @_QPdo_not_hoist_div(
11 ! CHECK-NOT: arith.divsi
12 ! CHECK: fir.do_loop {{.*}} {
13 ! CHECK: fir.if {{.*}} {
18 subroutine do_not_hoist_optional(n
, mask
, a
)
20 integer, optional
:: n
24 ! CHECK-LABEL: func.func @_QPdo_not_hoist_optional(
25 ! CHECK: %[[VAL_9:.*]]:2 = hlfir.declare {{.*}}"_QFdo_not_hoist_optionalEn"
26 ! CHECK-NOT: fir.load %[[VAL_9]]
27 ! CHECK: fir.do_loop {{.*}} {
28 ! CHECK: fir.if {{.*}} {
29 ! CHECK: %[[VAL_15:.*]] = fir.load %[[VAL_9]]#0 : !fir.ref<i32>
33 subroutine hoist_function(n
, mask
, a
)
35 integer, optional
:: n
36 logical :: mask(10, 10)
38 where(mask(i
, :)) a(i
,:)=ihoist_me(i
)
41 ! CHECK-LABEL: func.func @_QPhoist_function(
42 ! CHECK: fir.do_loop {{.*}} {
43 ! CHECK: fir.call @_QPihoist_me
44 ! CHECK: fir.do_loop {{.*}} {
45 ! CHECK: fir.if %{{.*}} {
46 ! CHECK-NOT: fir.call @_QPihoist_me
50 ! CHECK-NOT: fir.call @_QPihoist_me