This patch adds PFT to MLIR lowering support for `distribute parallel do simd` composite constructs.
235 lines
6.9 KiB
Fortran
235 lines
6.9 KiB
Fortran
! This test checks lowering of OpenMP compound (combined and composite) loop
|
|
! constructs.
|
|
|
|
! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
|
|
! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s
|
|
|
|
program main
|
|
integer :: i
|
|
|
|
! TODO When composite constructs are supported add:
|
|
! - TASKLOOP SIMD
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! DISTRIBUTE PARALLEL DO
|
|
! ----------------------------------------------------------------------------
|
|
!$omp teams
|
|
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.wsloop
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp distribute parallel do
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end distribute parallel do
|
|
|
|
!$omp end teams
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! DISTRIBUTE PARALLEL DO SIMD
|
|
! ----------------------------------------------------------------------------
|
|
!$omp teams
|
|
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.wsloop
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp distribute parallel do simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end distribute parallel do simd
|
|
|
|
!$omp end teams
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! DISTRIBUTE SIMD
|
|
! ----------------------------------------------------------------------------
|
|
!$omp teams
|
|
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp distribute simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end distribute simd
|
|
|
|
!$omp end teams
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! DO SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.wsloop
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp do simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end do simd
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! PARALLEL DO SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.wsloop
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp parallel do simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end parallel do simd
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! PARALLEL DO
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.wsloop
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp parallel do
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end parallel do
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TARGET PARALLEL DO SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.target
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.wsloop
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp target parallel do simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end target parallel do simd
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TARGET PARALLEL DO
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.target
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.wsloop
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp target parallel do
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end target parallel do
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TARGET SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.target
|
|
! CHECK: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp target simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end target simd
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TARGET TEAMS DISTRIBUTE
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.target
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp target teams distribute
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end target teams distribute
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TARGET TEAMS DISTRIBUTE PARALLEL DO
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.target
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.wsloop
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp target teams distribute parallel do
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end target teams distribute parallel do
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.target
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.wsloop
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp target teams distribute parallel do simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end target teams distribute parallel do simd
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TARGET TEAMS DISTRIBUTE SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.target
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp target teams distribute simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end target teams distribute simd
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TEAMS DISTRIBUTE
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp teams distribute
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end teams distribute
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TEAMS DISTRIBUTE PARALLEL DO
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.wsloop
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp teams distribute parallel do
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end teams distribute parallel do
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TEAMS DISTRIBUTE PARALLEL DO SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.parallel
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.wsloop
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp teams distribute parallel do simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end teams distribute parallel do simd
|
|
|
|
! ----------------------------------------------------------------------------
|
|
! TEAMS DISTRIBUTE SIMD
|
|
! ----------------------------------------------------------------------------
|
|
! CHECK: omp.teams
|
|
! CHECK: omp.distribute
|
|
! CHECK-NEXT: omp.simd
|
|
! CHECK-NEXT: omp.loop_nest
|
|
!$omp teams distribute simd
|
|
do i = 1, 10
|
|
end do
|
|
!$omp end teams distribute simd
|
|
end program main
|