! Similar to stack-arrays.f90; i.e. both test the stack-arrays pass for different ! kinds of supported inputs. This one differs in that it takes the hlfir lowering ! path in flag rather than the fir one. For example, temp arrays are lowered ! differently in hlfir vs. fir and the IR that reaches the stack arrays pass looks ! quite different. ! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - \ ! RUN: | fir-opt --lower-hlfir-ordered-assignments \ ! RUN: --bufferize-hlfir \ ! RUN: --convert-hlfir-to-fir \ ! RUN: --array-value-copy \ ! RUN: --stack-arrays \ ! RUN: | FileCheck %s subroutine temp_array implicit none integer (8) :: lV integer (8), dimension (2) :: iaVS lV = 202 iaVS = [lV, lV] end subroutine temp_array ! CHECK-LABEL: func.func @_QPtemp_array{{.*}} { ! CHECK-NOT: fir.allocmem ! CHECK-NOT: fir.freemem ! CHECK: fir.alloca !fir.array<2xi64> ! CHECK-NOT: fir.allocmem ! CHECK-NOT: fir.freemem ! CHECK: return ! CHECK-NEXT: } subroutine omp_temp_array implicit none integer (8) :: lV integer (8), dimension (2) :: iaVS lV = 202 !$omp target iaVS = [lV, lV] !$omp end target end subroutine omp_temp_array ! CHECK-LABEL: func.func @_QPomp_temp_array{{.*}} { ! CHECK: omp.target {{.*}} { ! CHECK-NOT: fir.allocmem ! CHECK-NOT: fir.freemem ! CHECK: fir.alloca !fir.array<2xi64> ! CHECK-NOT: fir.allocmem ! CHECK-NOT: fir.freemem ! CHECK: omp.terminator ! CHECK-NEXT: } ! CHECK: return ! CHECK-NEXT: } subroutine omp_target_wsloop implicit none integer (8) :: lV, i integer (8), dimension (2) :: iaVS lV = 202 !$omp target teams distribute do i = 1, 10 iaVS = [lV, lV] end do !$omp end target teams distribute end subroutine omp_target_wsloop ! CHECK-LABEL: func.func @_QPomp_target_wsloop{{.*}} { ! CHECK: omp.target {{.*}} { ! CHECK-NOT: fir.allocmem ! CHECK-NOT: fir.freemem ! CHECK: fir.alloca !fir.array<2xi64> ! CHECK: omp.teams { ! CHECK: omp.distribute { ! CHECK: omp.loop_nest {{.*}} { ! CHECK-NOT: fir.allocmem ! CHECK-NOT: fir.freemem ! CHECK: omp.yield ! CHECK-NEXT: } ! CHECK: return ! CHECK-NEXT: }