llvm-project/flang/test/Transforms/stack-arrays-hlfir.f90
Kareem Ergawy 83658ddb1b
[flang][OpenMP] Enable delayed privatization by default for omp.distribute (#131574)
Switches delayed privatization for `omp.distribute` to be on by default:
controlled by the `-openmp-enable-delayed-privatization` instead of by
`-openmp-enable-delayed-privatization-staging`.

### GFortran & Fujitsu test suite results:

#### gfotran test-suite (this PR):
```
Testing Time: 34.51s
  Passed: 6569
```

#### Fujitsu without changes (commit: 0813c5cf5f52):
```
Testing Time: 155.39s
  Passed            : 88325
  Failed            :   156
  Executable Missing:   408
```

#### Fujitsu with changes (this PR):
```
Testing Time: 158.54s
  Passed            : 88325
  Failed            :   156
  Executable Missing:   408
```
2025-03-18 14:07:41 +01:00

84 lines
2.3 KiB
Fortran

! 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: omp.teams {
! CHECK: fir.alloca !fir.array<2xi64>
! CHECK: omp.distribute private({{.*}}) {
! CHECK: omp.loop_nest {{.*}} {
! CHECK-NOT: fir.allocmem
! CHECK-NOT: fir.freemem
! CHECK: omp.yield
! CHECK-NEXT: }
! CHECK: return
! CHECK-NEXT: }