! Test that scalar expressions are not hoisted from WHERE loops ! when they do not appear ! RUN: bbc -o - -pass-pipeline="builtin.module(lower-hlfir-ordered-assignments)" %s | FileCheck %s subroutine do_not_hoist_div(n, mask, a) integer :: a(10), n logical :: mask(10) where(mask) a=1/n end subroutine ! CHECK-LABEL: func.func @_QPdo_not_hoist_div( ! CHECK-NOT: arith.divsi ! CHECK: fir.do_loop {{.*}} { ! CHECK: fir.if {{.*}} { ! CHECK: arith.divsi ! CHECK: } ! CHECK: } subroutine do_not_hoist_optional(n, mask, a) integer :: a(10) integer, optional :: n logical :: mask(10) where(mask) a=n end subroutine ! CHECK-LABEL: func.func @_QPdo_not_hoist_optional( ! CHECK: %[[VAL_9:.*]]:2 = hlfir.declare {{.*}}"_QFdo_not_hoist_optionalEn" ! CHECK-NOT: fir.load %[[VAL_9]] ! CHECK: fir.do_loop {{.*}} { ! CHECK: fir.if {{.*}} { ! CHECK: %[[VAL_15:.*]] = fir.load %[[VAL_9]]#0 : !fir.ref ! CHECK: } ! CHECK: } subroutine hoist_function(n, mask, a) integer :: a(10, 10) integer, optional :: n logical :: mask(10, 10) forall (i=1:10) where(mask(i, :)) a(i,:)=ihoist_me(i) end forall end subroutine ! CHECK-LABEL: func.func @_QPhoist_function( ! CHECK: fir.do_loop {{.*}} { ! CHECK: fir.call @_QPihoist_me ! CHECK: fir.do_loop {{.*}} { ! CHECK: fir.if %{{.*}} { ! CHECK-NOT: fir.call @_QPihoist_me ! CHECK: } ! CHECK: } ! CHECK: } ! CHECK-NOT: fir.call @_QPihoist_me